@kaisers-io/refs 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,74 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.15.0] - 2026-09-13
9
+
10
+ ### Upgrading
11
+
12
+ **`refs doctor` no longer warns about packages a repository declares and your configuration has
13
+ never registered.** They are still reported, grouped by directory, beside a health line that is now
14
+ about your configured entries alone. A ref tracking 37 packages of a repository that declares 554
15
+ goes from a permanent `warn` to `ok`. If you were treating a `warn` on `config-drift` as "every
16
+ package has been decided about", that is the assertion that is gone — the check never had evidence
17
+ for it. `refs doctor --json` carries every candidate.
18
+
19
+ ### Changed
20
+
21
+ - **`config-drift` warns about broken routes, not about every package nobody registered.** The
22
+ check reported two different kinds of finding and derived one status from both: entries that are
23
+ wrong (`missing`, `relocated`, `ambiguous`, `unverifiable`) and packages the checkout declares
24
+ that the configuration does not have. Those are separate assertions. A refs configuration
25
+ expresses "every registered route is valid"; the warning silently demanded "every declared
26
+ package has received a registration decision", which nothing justifies — registering 37 packages
27
+ of a repository that declares 554 is not 517 oversights, and the probe has no evidence either
28
+ way.
29
+
30
+ Only findings about configured entries decide the status now. Discovery candidates are still
31
+ reported, in their own `discovery` key and grouped by the directory they sit under —
32
+ structurally, never under a label like "fixtures" that refs would have to guess at. On a ref
33
+ tracking 37 of astro's 554 packages the check goes from `warn` with 517 findings, ten printed
34
+ and 507 hidden, to:
35
+
36
+ ```
37
+ [OK] config-drift: every configured package path resolves in 1 checkout(s);
38
+ examples: 24 unregistered package(s) the configuration does not have;
39
+ packages: 493 unregistered package(s) the configuration does not have
40
+ ```
41
+
42
+ An incomplete discovery pass keeps its own prominence and still downgrades `ok` — "could not
43
+ look" never becomes "zero candidates". `refs doctor --json` carries every candidate, so a
44
+ grouped count is never a summary of something unreachable. The per-package
45
+ `refs edit --decline` stays: it is still the right answer for a candidate someone reviewed, and
46
+ it stops being mandatory bookkeeping for a healthy result.
47
+
48
+ What this costs, stated plainly: a package genuinely forgotten is easier to overlook, because it
49
+ appears under discovery rather than in a warning. The root-package migration case (#88) is
50
+ exactly such a finding and loses warning-level prominence.
51
+
52
+ ## [0.14.1] - 2026-09-13
53
+
54
+ ### Fixed
55
+
56
+ - **A symlink with no package behind it no longer makes the scan unreliable.** A symlinked
57
+ directory can never be walked — `readdir` uses lstat semantics — so one that could have held a
58
+ package was reported as an uninspected candidate, and a single one of those turns the
59
+ unregistered-package pass off for the whole ref. `withastro/astro` carries two fixture links
60
+ whose targets hold markdown and JSON and no manifest at any depth: its scan reported two
61
+ obstacles and stood discovery down permanently, over directories where there was nothing to
62
+ find.
63
+
64
+ The question is now answered by LOOKING rather than by reasoning about the pattern: is there a
65
+ `package.json` anywhere below the link's target? If there is not, no pattern selects a package
66
+ there and the link hid nothing from anyone. If there is one — at any depth — it is reported
67
+ exactly as before. The search spends the scan's own budget and reports the obstacle when it runs
68
+ out, because an unfinished look is not a look.
69
+
70
+ An earlier attempt tried to prove instead that the target's own path selects whatever the link
71
+ path selects. It cannot be proven from the pattern's shape: a pattern selecting by position, an
72
+ exclusion naming the target or one of its descendants, a pattern matching the alias but not the
73
+ real path, and a link pointing at the base all break it in different ways. Each of those five
74
+ keeps being reported.
75
+
8
76
  ## [0.14.0] - 2026-09-13
9
77
 
10
78
  ### Upgrading
package/dist/refs.mjs CHANGED
@@ -325,32 +325,32 @@ sync_ttl = "1h"
325
325
  `)[0]??t;return n.length<=200?n:`${n.slice(0,200)}…`},pd=(e,t)=>t?`restored`:e.oldSha===e.newSha?`fresh`:`updated`,md=(e,t)=>{let n=[];if(e&&n.push(`checkout had local changes (managed checkouts are read-only) — discarded and restored to the remote state`),t!==void 0&&n.push(t),n.length!==0)return n.join(` | `)},hd=e=>{let{branchRenamedTo:t,dirty:n,setHeadWarning:r,shas:i}=e,a={...i,status:pd(i,n)};t!==void 0&&(a.branchRenamedTo=t);let o=md(n,r);return o!==void 0&&(a.warning=o),a},gd=(e,t,n)=>{let r={dirty:t,shas:n};return e.branchRenamedTo!==void 0&&(r.branchRenamedTo=e.branchRenamedTo),e.warning!==void 0&&(r.setHeadWarning=e.warning),r},H=e=>pe(m(e,`.git`)),_d=e=>`refusing to sync ${e}: not a refs-managed checkout`,vd=async(e,t)=>{if(!H(t))throw y(_d(t));let n=await e.run(`git`,[`config`,`--local`,`--get`,`core.hooksPath`],{cwd:t});if(n.exitCode!==0||n.stdout.trim()===``)throw y(_d(t))},yd=/filtering not recognized/iu,bd=e=>e===void 0?{}:{cwd:e},xd=(e,t,n)=>({action:e,args:t,cmd:`git`,...bd(n)}),Sd=async(e,t)=>{let n=await e.run(t.cmd,t.args,bd(t.cwd));if(n.exitCode===0)return n;let r=n.stderr.trim()||n.stdout.trim()||`exit code ${n.exitCode}`;throw y(`${t.action} failed: ${r}`)},Cd=async(e,t)=>{let n=[`clone`,`-q`];t.mode===`blobless`&&n.push(`--filter=blob:none`),n.push(`--`,t.cloneUrl,t.dest);let r=await Sd(e,xd(`git clone`,n));return await Sd(e,xd(`git config core.hooksPath`,[`config`,`core.hooksPath`,t.hooksDir],t.dest)),t.mode===`blobless`&&yd.test(r.stderr)?{effectiveMode:`full`,warning:`server did not honour the partial-clone filter (blob:none); fell back to a full clone`}:{effectiveMode:t.mode}},wd=async(e,t)=>{let n=await e.run(`git`,[`symbolic-ref`,`--short`,`refs/remotes/origin/HEAD`],{cwd:t});if(n.exitCode!==0)return;let r=n.stdout.trim();return r.startsWith(`origin/`)?r.slice(7):r},Td=async(e,t)=>{let n=await wd(e,t);if(n!==void 0)return n;await e.run(`git`,[`remote`,`set-head`,`origin`,`--auto`],{cwd:t});let r=await wd(e,t);if(r!==void 0)return r;throw y(`could not detect the default branch for checkout: ${t}`)},Ed=async(e,t)=>(await Sd(e,xd(`git rev-parse HEAD`,[`rev-parse`,`HEAD`],t))).stdout.trim(),Dd=async(e,t)=>(await Sd(e,xd(`git status --porcelain`,[`status`,`--porcelain`],t))).stdout.trim()!==``,Od=async(e,t)=>{await Sd(e,xd(`git fetch`,[`fetch`,`--prune`,`--tags`,`origin`],t.dir));let n=await e.run(`git`,[`remote`,`set-head`,`origin`,`--auto`],{cwd:t.dir}),r=await Td(e,t.dir),i={branch:r};return r!==t.defaultBranch&&(i.branchRenamedTo=r),n.exitCode!==0&&(i.warning=`could not refresh origin/HEAD: ${fd(n)}`),i},kd=e=>[xd(`git reset --hard HEAD (pre-checkout)`,[`reset`,`--hard`,`HEAD`],e),xd(`git clean -fd`,[`clean`,`-fd`],e)],Ad=async(e,t)=>{let{branch:n,dir:r,dirty:i}=t,a=[];i&&a.push(...kd(r)),a.push(xd(`git checkout -B`,[`checkout`,`-B`,n,`origin/${n}`],r),xd(`git reset --hard`,[`reset`,`--hard`,`origin/${n}`],r));for(let t of a)await Sd(e,t)},jd=async(e,t)=>{await vd(e,t.dir);let n=await Ed(e,t.dir),r=await Od(e,t),i=await Dd(e,t.dir);await Ad(e,{branch:r.branch,dir:t.dir,dirty:i});let a=await Ed(e,t.dir);return hd(gd(r,i,{newSha:a,oldSha:n}))},Md=async(e,t,n)=>(await e.run(`git`,[`show-ref`,`--verify`,`--`,`refs/tags/${n}`],{cwd:t})).exitCode===0,Nd=[`#!/bin/sh`,`echo "refs: this checkout is a managed read-only reference — commits are blocked" >&2`,`exit 1`,``].join(`
326
326
  `),Pd=async e=>{await Promise.all([`pre-commit`,`pre-push`].map(async n=>{let r=m(e.hooksDir,n);await $l(r,Nd),await t(r,493)}))},Fd=async(e,t,n)=>{let r=await Sd(e,xd(`git tag`,[`tag`,`--sort=-version:refname`],t)),i=r.stdout.split(`
327
327
  `).map(e=>e.trim()).filter(e=>e!==``),a=!r.stderr.includes(`refs: stdout exceeded`);return n===void 0?{complete:a,tags:i}:{complete:a&&i.length<=n,tags:i.slice(0,n)}},Id=/\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?/u,Ld=/\d+\.\d+\.\d+/gu,Rd=e=>ll.safeParse(e).success,zd=e=>{let t=e.match(Ld);return t!==null&&t.length>1},Bd=e=>{let t=Id.exec(e);if(!t||zd(e))return;let[n]=t,r=e.replace(n,`{version}`);if(Rd(r))return r},Vd=(e,t,n)=>{let r=e.get(t);r===void 0?e.set(t,{count:1,index:n}):r.count+=1},Hd=e=>{let t=new Map;for(let[n,r]of e.entries()){let e=Bd(r);e&&Vd(t,e,n)}return t},Ud=(e,t)=>e.count>t.count||e.count===t.count&&e.index<t.index,Wd=e=>{let t=[...e.entries()],[n]=t;if(n===void 0)return null;let[r,i]=n;return t.slice(1).reduce(({format:e,data:t},[n,r])=>Ud(r,t)?{data:r,format:n}:{data:t,format:e},{data:i,format:r}).format},Gd=e=>{let t=Hd(e);return Wd(t)},Kd=(e,t)=>e.replaceAll(`{version}`,()=>t),qd=async(e,t,n,r)=>{let i=Kd(n,r);if(!await Md(e,t,i))throw _(`tag '${i}' not found in ${t} — check the version or tag_format`);return i},Jd=/^(?<scheme>[a-z][a-z0-9+.-]*:\/\/)?[\s\S]*@/iu,U=e=>{let t=e.replace(Jd,`$<scheme><redacted>@`);return t.length<=200?t:`${t.slice(0,200)}…`},Yd=/\.git$/u,Xd=e=>e.replace(Yd,``),Zd=e=>{let t=0,n=e.length;for(;t<n&&e.charAt(t)===`/`;)t+=1;for(;n>t&&e.charAt(n-1)===`/`;)--n;return e.slice(t,n)},Qd=/^git@(?<host>[^:/\s]+):(?<path>[^\s]+)$/u,$d=/^git\+/u,ef={"https:":`443`,"ssh:":`22`},tf=e=>e.split(`/`).some(e=>e===`.`||e===`..`),nf=e=>e.includes(`\\`),rf=e=>e.includes(`%`),af=e=>{let t=il.safeParse(e);if(!t.success)throw y(`not a supported git url: derived key '${U(e)}' is invalid`);return t.data},of=({host:e,port:t,protocol:n})=>{let r=ef[n];return t===``||t===r?e.toLowerCase():`${e.toLowerCase()}_${t}`},sf=e=>{let t=Xd(Zd(e.path));return af(`${of(e)}/${t}`)},cf=e=>{let t=decodeURIComponent(e).split(`/`).filter(e=>e!==``);if(t.length<2)throw y(`not a supported git url: file url path must have at least 2 segments`);let n=t.at(-2)??``,r=t.at(-1)??``;return af(`local/${n}/${r}`)},lf=(e,t)=>{try{return new URL(e)}catch{throw y(`not a supported git url: ${U(t)}`)}},uf=e=>{if(e.password!==``)throw y(`not a supported git url: credentials embedded in url`);if(e.protocol===`https:`&&e.username!==``)throw y(`not a supported git url: credentials embedded in https url`)},df=(e,t)=>{if(e.protocol===`file:`){if(!t)throw y(`not a supported git url: unsupported protocol ${e.protocol}`);return cf(e.pathname)}if(e.protocol!==`https:`&&e.protocol!==`ssh:`)throw y(`not a supported git url: unsupported protocol ${e.protocol}`);return uf(e),sf({host:e.hostname,path:e.pathname,port:e.port,protocol:e.protocol})},ff=(e,t)=>{if(rf(e))throw y(`not a supported git url: percent-encoding not supported in ${U(t)}`);if(e.includes(`:`))throw y(`not a supported git url: ambiguous ':' in scp-style path ${U(t)}; use the ssh:// url form instead`);if(e.startsWith(`/`)||e.startsWith(`~`))throw y(`not a supported git url: ambiguous absolute/home-relative scp path in ${U(t)}; use the ssh:// url form instead`)},pf=(e,t)=>{let n=e.groups?.path??``;return ff(n,t),sf({host:e.groups?.host??``,path:n,port:``,protocol:`ssh:`})},mf=(e,t)=>{if(nf(e))throw y(`not a supported git url: backslash not allowed in ${U(t)}`)},hf=(e,t)=>{if(tf(e))throw y(`not a supported git url: path traversal segment in ${U(t)}`)},gf=(e,t,n)=>{if(e.protocol!==`file:`&&rf(t))throw y(`not a supported git url: percent-encoding not supported in ${U(n)}`)},_f=(e,t)=>{let n=t?.allowFileUrls??!1,r=e.replace($d,``);mf(r,e),hf(r,e);let i=Qd.exec(r);if(i?.groups!==void 0)return{cloneUrl:r,key:pf(i,e)};let a=lf(r,e);return gf(a,r,e),{cloneUrl:r,key:df(a,n)}},vf=`.git`,yf=e=>e.endsWith(vf)?e:`${e}${vf}`,bf=(e,t)=>`https://${e.toLowerCase()}/${Zd(t)}`,xf=(e,t)=>`git@${e.toLowerCase()}:${yf(Zd(t))}`,Sf=e=>{if(e===`https:`)return`https`;if(e===`ssh:`)return`ssh`;throw y(`not a supported git url: unsupported protocol ${e}`)},Cf=(e,t,n)=>{let r=ef[e.protocol];if(e.port!==``&&e.port!==r)throw y(`cannot apply git_transport=${t} to ${U(n)}: its non-default port ${e.port} cannot be expressed in the ${t} url form — add the repo with an explicit url instead`)},wf=(e,t)=>t===`https`?bf(e.hostname,e.pathname):xf(e.hostname,e.pathname),Tf=(e,t,n)=>{let r=_f(t).key;if(r!==n)throw y(`git_transport transform changed repo identity: '${U(e)}' → '${t}' (key '${n}' → '${r}')`);return t},Ef=(e,t)=>{if(t.transport===`ssh`)return t.cloneUrl;let n=e.groups?.host??``,r=e.groups?.path??``;return Tf(t.cloneUrl,bf(n,r),t.originalKey)},Df=e=>{let t=lf(e.cloneUrl,e.cloneUrl);return Sf(t.protocol)===e.transport?e.cloneUrl:(Cf(t,e.transport,e.cloneUrl),Tf(e.cloneUrl,wf(t,e.transport),e.originalKey))},Of=(e,t)=>{if(e.startsWith(`file:`))return e;let n={cloneUrl:e,originalKey:_f(e).key,transport:t},r=Qd.exec(e);return r?.groups===void 0?Df(n):Ef(r,n)},kf=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u,Af=(e,t)=>{if(kf.test(t))return m(e,`lease-${t}`)},jf=async(e,t)=>{let n=Af(e,t);n!==void 0&&await(await o(n,`w`)).close()},Mf=async(e,t)=>{let n=Af(e,t);if(n===void 0)return`gone`;let r=new Date;try{await ee(n,r,r)}catch(e){if(R(e))return`gone`;throw e}return`renewed`},Nf=async(e,t)=>{let n=Af(e,t);if(n===void 0)return{state:`absent`};try{return{mtimeMs:(await p(n)).mtimeMs,state:`ok`}}catch(e){return{state:R(e)?`absent`:`unreadable`}}},Pf=`meta.json`,Ff=e=>{if(typeof e==`object`&&e&&`code`in e){let{code:t}=e;if(typeof t==`string`)return t}},If=e=>{try{return process.kill(e,0),!0}catch(e){return Ff(e)!==`ESRCH`}},Lf=e=>{try{return JSON.parse(e)}catch{return}},Rf=async e=>{try{return await s(e,`utf8`)}catch{return}},zf=new Set([`ENOENT`,`ENOTDIR`]),Bf=async e=>{try{return{state:`read`,text:await s(e,`utf8`)}}catch(e){let t=Ff(e);return{state:t!==void 0&&zf.has(t)?`missing`:`unreadable`}}},Vf=e=>{if(typeof e!=`string`)return;let t=Date.parse(e);if(!Number.isNaN(t))return t},Hf=e=>{if(typeof e!=`object`||!e)return;let{token:t}=e;if(typeof t==`string`)return t},Uf=e=>{if(!(typeof e!=`number`||!Number.isSafeInteger(e)||e<=0||e>2147483647))return e},Wf=e=>{if(typeof e!=`object`||!e)return;let t=e,n=Uf(t.pid),r=Vf(t.acquired_at);if(n===void 0||r===void 0)return;let i=Hf(e);return{acquiredAtMs:r,pid:n,...i===void 0?{}:{token:i}}},Gf=async e=>{let t=await Rf(m(e,Pf));if(t!==void 0)return Hf(Lf(t))},Kf=async e=>{let t=await Bf(m(e,Pf));if(t.state!==`read`)return{state:t.state};let n=Wf(Lf(t.text));return n===void 0?{state:`malformed`}:{meta:n,state:`valid`}},qf=async e=>{try{return{mtimeMs:(await p(e)).mtimeMs,state:`ok`}}catch(e){return{state:Ff(e)===`ENOENT`?`gone`:`unreadable`}}},Jf=async(e,t)=>{let n=m(e,Pf),r=`${n}.tmp-${de()}`;await te(r,t,`utf8`),await u(r,n)},Yf=()=>de(),Xf=async(e,t)=>{await jf(e,t),await Jf(e,JSON.stringify({acquired_at:new Date().toISOString(),pid:process.pid,token:t}))},Zf=5e3,Qf=async(e,t,n)=>{if(t===`unreadable`)return{meta:t,observedAtMs:n,pidState:`unknown`,policy:`unknown`,stale:!1};let r=await qf(e);if(r.state===`gone`)return{meta:t,observedAtMs:n,pidState:`unknown`,policy:`none`,stale:!1};if(r.state===`unreadable`)return{meta:t,observedAtMs:n,pidState:`unknown`,policy:`unknown`,stale:!1};let i=n-r.mtimeMs;return{ageMs:i,budgetMs:Zf,meta:t,observedAtMs:n,pidState:`unknown`,policy:`grace`,stale:i>Zf}},$f=async(e,t,n)=>{let r=t.token===void 0?{state:`absent`}:await Nf(e,t.token);return r.state===`unreadable`?{policy:`unknown`}:r.state===`absent`?{ageMs:n-t.acquiredAtMs,budgetMs:6e5,policy:`legacy`}:{ageMs:n-r.mtimeMs,budgetMs:12e4,policy:`lease`}},ep=async(e,t)=>{let n=await Kf(e);if(n.state!==`valid`)return Qf(e,n.state,t);let{meta:r}=n,i=await $f(e,r,t),a=!If(r.pid),o=i.ageMs!==void 0&&i.budgetMs!==void 0&&i.ageMs>i.budgetMs;return{...i,meta:`valid`,observedAtMs:t,pid:r.pid,pidState:a?`definitely-dead`:`present-or-unknown`,stale:a||o,...r.token===void 0?{}:{token:r.token}}},tp=e=>e.meta===`valid`&&e.pidState===`definitely-dead`&&e.token!==void 0,np=async(e,t)=>await Gf(e)===t?await Mf(e,t)===`gone`?`lost`:`renewed`:`lost`,rp=new Set([`EEXIST`,`EPERM`,`EACCES`,`EBUSY`]),ip=new Set([`ENOENT`,`EPERM`,`EACCES`,`EBUSY`]),ap=async e=>{try{return await a(e,{recursive:!1}),!0}catch(e){let t=Ff(e);if(t!==void 0&&rp.has(t))return!1;throw e}},op=async(e,t)=>{try{return await u(e,t),!0}catch(e){let t=Ff(e);if(t!==void 0&&ip.has(t))return!1;throw e}},sp=`.claims`,cp=`.tombstones`,lp=(e,t)=>({lockPath:m(e,t),locksDir:e,name:t}),up=e=>m(e.locksDir,sp,e.name),dp=e=>m(e.locksDir,cp,de()),fp=async e=>{await a(m(e,sp),{recursive:!0}),await a(m(e,cp),{recursive:!0})},pp=e=>ap(e),mp=async e=>{try{await f(e)}catch{}},hp=async e=>{let t=dp(e);return await op(e.lockPath,t)?t:void 0},gp=async e=>{let t=await ep(e.lockPath,Date.now());if(!tp(t)||await Gf(e.lockPath)!==t.token)return!1;let n=await hp(e);return n!==void 0&&(await d(n,{force:!0,recursive:!0}),!0)},_p=async e=>{await fp(e.locksDir);let t=up(e);if(!await pp(t))return!1;let n=await gp(e).then(e=>({ok:!0,stolen:e}),e=>({error:e,ok:!1}));if(await mp(t),!n.ok)throw n.error;return n.stolen},vp=async e=>{try{return(await c(e,{withFileTypes:!0})).map(e=>({isDir:e.isDirectory(),name:e.name})).toSorted((e,t)=>e.name.localeCompare(t.name))}catch(e){if(R(e))return[];throw e}},yp=async e=>(await vp(e)).filter(e=>!e.name.startsWith(`.`)),bp=async(e,t,n)=>{let r=await ep(m(e,t.name),n);if(r.policy!==`none`)return{diagnosis:r,isDirectory:t.isDir,kind:`lock`,name:t.name}},xp=async(e,t)=>{let n=m(e,sp),r=await vp(n);return(await Promise.all(r.map(async e=>({diagnosis:await ep(m(n,e.name),t),isDirectory:e.isDir,kind:`claim`,name:e.name})))).filter(e=>e.diagnosis.policy!==`none`)},Sp=async e=>{let t=Date.now(),n=await yp(e.locksDir),[r,i]=await Promise.all([Promise.all(n.map(n=>bp(e.locksDir,n,t))),xp(e.locksDir,t)]);return[...r.filter(e=>e!==void 0),...i]},Cp=e=>{let t=Math.floor(e/1e3),n=t%60,r=Math.floor(t/60),i=r%60,a=Math.floor(r/60);return a>0?i===0?`${a}h`:`${a}h ${i}m`:r>0?n===0?`${r}m`:`${r}m ${n}s`:`${n}s`},wp=e=>e.pid===void 0?`owner unknown (metadata ${e.meta})`:e.pidState===`definitely-dead`?`recorded pid ${e.pid} is not running`:`recorded pid ${e.pid} is present (identity not verified)`,Tp={grace:`created`,lease:`lease renewed`,legacy:`acquired`,none:`observed`,unknown:`observed`},Ep={grace:`from creation, while its metadata has not been published`,lease:`from the last renewal`,legacy:`from acquisition (no renewable lease)`,none:``,unknown:``},Dp=e=>{let{ageMs:t,budgetMs:n,policy:r}=e;return t===void 0||n===void 0?``:t<0?`, but its recorded time is in the future — check the system clock`:`, ${Tp[r]} ${Cp(t)} ago; its window is ${Cp(n)} ${Ep[r]}`},Op=(e,t)=>{if(t.policy===`none`)return`lock ${e} could not be acquired before the timeout, but it was released while the failure was being diagnosed. Retry the operation.`;let n=`lock ${e} is held: ${wp(t)}`;return tp(t)?`${n}, and refs is entitled to reclaim it — it could not do so before the timeout. Retry; if it persists, run refs doctor.`:t.stale?`${n}${Dp(t)}. refs does not reclaim this automatically: only a recorded process the operating system reports as gone is reclaimed, and this one is not. Run refs doctor for what to do about it.`:`${n}${Dp(t)}. Retry once the other refs command finishes.`},kp=(e,t)=>{if(t.stopped)return;let n=setTimeout(()=>{t.stopped||(t.inFlight=Ap(e,t))},e.intervalMs);n.unref(),t.timer=n},Ap=async(e,t)=>{try{if(await e.renew()===`lost`){t.lost=!0,t.stopped=!0;return}}catch{}kp(e,t)},jp=e=>{let t={inFlight:Promise.resolve(),lost:!1,stopped:!1};return kp(e,t),{ownershipLost:()=>t.lost,stop:async()=>{t.stopped=!0,t.timer!==void 0&&clearTimeout(t.timer),await t.inFlight}}},Mp=/^[a-zA-Z0-9][a-zA-Z0-9_.-]*$/u,Np=async(e,t)=>{try{await Xf(e,t)}catch(e){if(Ff(e)===`ENOENT`)return`retry`;throw e}return t},Pp=async(e,t)=>{if(!await ap(e))return;let n=await Np(e,Yf());return n===`retry`?Date.now()>=t?void 0:Pp(e,t):n},Fp=async(e,t)=>{if(!await _p(e)){if(Date.now()>=t){let t=await ep(e.lockPath,Date.now());throw Ce(Op(e.name,t))}await ge(100)}},Ip=async(e,t)=>{let n=await Pp(e.lockPath,t);return n===void 0?(await Fp(e,t),Ip(e,t)):n},Lp=async(e,t)=>await Gf(e)===t&&(await d(e,{force:!0,recursive:!0}),!0),Rp=async e=>{try{return{ok:!0,value:await e()}}catch(e){return{error:e,ok:!1}}},zp=async(e,t,n,r)=>{await n.stop();let i=await Rp(()=>Lp(e.lockPath,t));if(!r.ok)throw r.error;if(!i.ok)throw i.error;if(n.ownershipLost()||!i.value)throw Ce(`lock ${e.name} was lost while the operation was running`);return r.value},Bp=e=>e!==`.`&&e!==`..`&&Mp.test(e),Vp=e=>{if(!Bp(e))throw y(`lock name must not contain "/" or other unsafe characters — only letters, digits, and "_.-" are allowed, and it may not be "." or "..": ${e}`)},W=async(e,t,n,r)=>{Vp(t);let i=lp(e.locksDir,t);await a(e.locksDir,{recursive:!0});let o=Date.now()+(r?.timeoutMs??1e4),s=await Ip(i,o),c=jp({intervalMs:3e4,renew:()=>np(i.lockPath,s)});return zp(i,s,c,await Rp(n))},Hp=sc({directory:P().optional(),url:P().optional()}),Up=sc({repository:lc([P(),Hp]).optional()}),Wp=/^(?:@[a-z0-9-~][a-z0-9._~-]*\/)?[a-z0-9-~][a-z0-9._~-]*$/u,Gp=new Set([`node_modules`,`favicon.ico`]),Kp=e=>_(`package '${e}' has no usable repository field — find the repository and run: refs add <git-url>`),qp=e=>{let[t,n]=e.split(`/`);return n??t??e},Jp=e=>{if(e.length>214)throw v(`invalid package name: '${e}' exceeds maximum length of 214 characters`);if(!Wp.test(e))throw v(`invalid package name: '${e}' does not match npm naming rules`);let t=qp(e);if(Gp.has(t))throw v(`invalid package name: '${e}' uses a reserved name`)},Yp=e=>e.replaceAll(`/`,`%2F`),Xp=e=>typeof e==`string`?e:e?.url,Zp=e=>{if(typeof e==`object`&&e?.directory){let t=ul.safeParse(e.directory);if(t.success)return t.data}},Qp=async(e,t)=>{try{return await e.json()}catch{throw y(`invalid npm registry response for '${t}': not parseable JSON`)}},$p=async(e,t)=>{let n=await e(`https://registry.npmjs.org/${Yp(t)}`);if(n.status===404)throw _(`npm package '${t}' not found`);if(n.status!==200)throw y(`failed to fetch npm package '${t}': status ${n.status}`);let r=await Qp(n,t),i=Up.safeParse(r);if(!i.success)throw y(`invalid npm package response for '${t}'`);return i.data},em=(e,t)=>{try{return _f(e)}catch{throw Kp(t)}},tm=async(e,t)=>{Jp(t);let n=await $p(e,t),r=Xp(n.repository);if(r===void 0||r===``)throw Kp(t);let{cloneUrl:i,key:a}=em(r,t),o=Zp(n.repository);return o===void 0?{cloneUrl:i,key:a}:{cloneUrl:i,directory:o,key:a}},nm=(e,t,n)=>{let r=e instanceof RegExp?rm(e,n):e,i=t instanceof RegExp?rm(t,n):t,a=r!==null&&i!=null&&im(r,i,n);return a&&{start:a[0],end:a[1],pre:n.slice(0,a[0]),body:n.slice(a[0]+r.length,a[1]),post:n.slice(a[1]+i.length)}},rm=(e,t)=>{let n=t.match(e);return n?n[0]:null},im=(e,t,n)=>{let r,i,a,o,s,c=n.indexOf(e),l=n.indexOf(t,c+1),u=c;if(c>=0&&l>0){if(e===t)return[c,l];for(r=[],a=n.length;u>=0&&!s;){if(u===c)r.push(u),c=n.indexOf(e,u+1);else if(r.length===1){let e=r.pop();e!==void 0&&(s=[e,l])}else i=r.pop(),i!==void 0&&i<a&&(a=i,o=l),l=n.indexOf(t,u+1);u=c<l&&c>=0?c:l}r.length&&o!==void 0&&(s=[a,o])}return s},am=`\0SLASH`+Math.random()+`\0`,om=`\0OPEN`+Math.random()+`\0`,sm=`\0CLOSE`+Math.random()+`\0`,cm=`\0COMMA`+Math.random()+`\0`,lm=`\0PERIOD`+Math.random()+`\0`,um=new RegExp(am,`g`),dm=new RegExp(om,`g`),fm=new RegExp(sm,`g`),pm=new RegExp(cm,`g`),mm=new RegExp(lm,`g`),hm=/\\\\/g,gm=/\\{/g,_m=/\\}/g,vm=/\\,/g,ym=/\\\./g;function bm(e){return isNaN(e)?e.charCodeAt(0):parseInt(e,10)}function xm(e){return e.replace(hm,am).replace(gm,om).replace(_m,sm).replace(vm,cm).replace(ym,lm)}function Sm(e){return e.replace(um,`\\`).replace(dm,`{`).replace(fm,`}`).replace(pm,`,`).replace(mm,`.`)}function Cm(e){if(!e)return[``];let t=[],n=nm(`{`,`}`,e);if(!n)return e.split(`,`);let{pre:r,body:i,post:a}=n,o=r.split(`,`);o[o.length-1]+=`{`+i+`}`;let s=Cm(a);return a.length&&(o[o.length-1]+=s.shift(),o.push.apply(o,s)),t.push.apply(t,o),t}function wm(e,t={}){if(!e)return[];let{max:n=1e5,maxLength:r=4e6}=t;return e.slice(0,2)===`{}`&&(e=`\\{\\}`+e.slice(2)),jm(xm(e),n,r,!0).map(Sm)}function Tm(e){return`{`+e+`}`}function Em(e){return/^-?0\d/.test(e)}function Dm(e,t){return e<=t}function Om(e,t){return e>=t}function km(e,t,n,r,i,a){let o=[],s=0;for(let c=0;c<e.length;c++)for(let l=0;l<n.length;l++){if(o.length>=r)return o;let u=e[c]+t+n[l];if(!a||u){if(s+u.length>i)return o;o.push(u),s+=u.length}}return o}function Am(e,t,n,r){let i=e.split(/\.\./),a=[];if(i[0]===void 0||i[1]===void 0)return a;let o=bm(i[0]),s=bm(i[1]),c=Math.max(i[0].length,i[1].length),l=i.length===3&&i[2]!==void 0?Math.max(Math.abs(bm(i[2])),1):1,u=Dm;s<o&&(l*=-1,u=Om);let d=i.some(Em),f=0;for(let e=o;u(e,s)&&a.length<n;e+=l){let n;if(t)n=String.fromCharCode(e),n===`\\`&&(n=``);else if(n=String(e),d){let t=c-n.length;if(t>0){let r=Array(t+1).join(`0`);n=e<0?`-`+r+n.slice(1):r+n}}if(f+n.length>r)break;a.push(n),f+=n.length}return a}function jm(e,t,n,r){let i=[``],a=!1,o=!0;for(;;){let s=nm(`{`,`}`,e);if(!s)return km(i,e,[``],t,n,a);let c=s.pre;if(/\$$/.test(c)){if(i=km(i,c+`{`+s.body+`}`,[``],t,n,a&&!s.post.length),o=!1,!s.post.length)break;e=s.post;continue}let l=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(s.body),u=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(s.body),d=l||u,f=s.body.indexOf(`,`)>=0;if(!d&&!f){if(s.post.match(/,(?!,).*\}/)){e=s.pre+`{`+s.body+sm+s.post,r=!0;continue}return km(i,c+`{`+s.body+`}`+s.post,[``],t,n,a)}o&&=(a=r&&!d,!1);let p;if(d)p=Am(s.body,u,t,n);else{let r=Cm(s.body);if(r.length===1&&r[0]!==void 0&&(r=jm(r[0],t,n,!1).map(Tm),r.length===1)){if(i=km(i,c+r[0],[``],t,n,a&&!s.post.length),!s.post.length)break;e=s.post;continue}let o=a&&!s.post.length&&!c;for(let e=0;o&&e<i.length;e++)i[e]&&(o=!1);p=[];let l=0;outer:for(let e=0;e<r.length;e++){let i=jm(r[e],t,n,!1);for(let e=0;e<i.length;e++){let r=i[e];if(!o||r){if(p.length>=t||l+r.length>n)break outer;p.push(r),l+=r.length}}}}if(i=km(i,c,p,t,n,a&&!s.post.length),!s.post.length)break;e=s.post}return i}const Mm=e=>{if(typeof e!=`string`)throw TypeError(`invalid pattern`);if(e.length>65536)throw TypeError(`pattern is too long`)},Nm={"[:alnum:]":[`\\p{L}\\p{Nl}\\p{Nd}`,!0],"[:alpha:]":[`\\p{L}\\p{Nl}`,!0],"[:ascii:]":[`\\x00-\\x7f`,!1],"[:blank:]":[`\\p{Zs}\\t`,!0],"[:cntrl:]":[`\\p{Cc}`,!0],"[:digit:]":[`\\p{Nd}`,!0],"[:graph:]":[`\\p{Z}\\p{C}`,!0,!0],"[:lower:]":[`\\p{Ll}`,!0],"[:print:]":[`\\p{C}`,!0],"[:punct:]":[`\\p{P}`,!0],"[:space:]":[`\\p{Z}\\t\\r\\n\\v\\f`,!0],"[:upper:]":[`\\p{Lu}`,!0],"[:word:]":[`\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}`,!0],"[:xdigit:]":[`A-Fa-f0-9`,!1]},Pm=e=>e.replace(/[[\]\\-]/g,`\\$&`),Fm=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),Im=e=>e.join(``),Lm=(e,t)=>{let n=t;if(e.charAt(n)!==`[`)throw Error(`not in a brace expression`);let r=[],i=[],a=n+1,o=!1,s=!1,c=!1,l=!1,u=n,d=``;WHILE:for(;a<e.length;){let t=e.charAt(a);if((t===`!`||t===`^`)&&a===n+1){l=!0,a++;continue}if(t===`]`&&o&&!c){u=a+1;break}if(o=!0,t===`\\`&&!c){c=!0,a++;continue}if(t===`[`&&!c){for(let[t,[o,c,l]]of Object.entries(Nm))if(e.startsWith(t,a)){if(d)return[`$.`,!1,e.length-n,!0];a+=t.length,l?i.push(o):r.push(o),s||=c;continue WHILE}}if(c=!1,d){t>d?r.push(Pm(d)+`-`+Pm(t)):t===d&&r.push(Pm(t)),d=``,a++;continue}if(e.startsWith(`-]`,a+1)){r.push(Pm(t+`-`)),a+=2;continue}if(e.startsWith(`-`,a+1)){d=t,a+=2;continue}r.push(Pm(t)),a++}if(u<a)return[``,!1,0,!1];if(!r.length&&!i.length)return[`$.`,!1,e.length-n,!0];if(i.length===0&&r.length===1&&/^\\?.$/.test(r[0])&&!l){let e=r[0].length===2?r[0].slice(-1):r[0];return[Fm(e),!1,u-n,!1]}let f=`[`+(l?`^`:``)+Im(r)+`]`,p=`[`+(l?``:`^`)+Im(i)+`]`;return[r.length&&i.length?`(`+f+`|`+p+`)`:r.length?f:p,s,u-n,!0]},Rm=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!0}={})=>n?t?e.replace(/\[([^/\\])\]/g,`$1`):e.replace(/((?!\\).|^)\[([^/\\])\]/g,`$1$2`).replace(/\\([^/])/g,`$1`):t?e.replace(/\[([^/\\{}])\]/g,`$1`):e.replace(/((?!\\).|^)\[([^/\\{}])\]/g,`$1$2`).replace(/\\([^/{}])/g,`$1`);var G;const zm=new Set([`!`,`?`,`+`,`*`,`@`]),Bm=e=>zm.has(e),Vm=e=>Bm(e.type),Hm=new Map([[`!`,[`@`]],[`?`,[`?`,`@`]],[`@`,[`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`]]]),Um=new Map([[`!`,[`?`]],[`@`,[`?`]],[`+`,[`?`,`*`]]]),Wm=new Map([[`!`,[`?`,`@`]],[`?`,[`?`,`@`]],[`@`,[`?`,`@`]],[`*`,[`*`,`+`,`?`,`@`]],[`+`,[`+`,`@`,`?`,`*`]]]),Gm=new Map([[`!`,new Map([[`!`,`@`]])],[`?`,new Map([[`*`,`*`],[`+`,`*`]])],[`@`,new Map([[`!`,`!`],[`?`,`?`],[`@`,`@`],[`*`,`*`],[`+`,`+`]])],[`+`,new Map([[`?`,`*`],[`*`,`*`]])]]),Km=`(?!\\.)`,qm=new Set([`[`,`.`]),Jm=new Set([`..`,`.`]),Ym=new Set(`().*{}+?[]^$\\!`),Xm=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`),Zm=`[^/]+?`;let Qm=0;var $m=class{type;#e;#t;#n=!1;#r=[];#i;#a;#o;#s=!1;#c;#l;#u=!1;id=++Qm;get depth(){return(this.#i?.depth??-1)+1}[Symbol.for(`nodejs.util.inspect.custom`)](){return{"@@type":`AST`,id:this.id,type:this.type,root:this.#e.id,parent:this.#i?.id,depth:this.depth,partsLength:this.#r.length,parts:this.#r}}constructor(e,t,n={}){this.type=e,e&&(this.#t=!0),this.#i=t,this.#e=this.#i?this.#i.#e:this,this.#c=this.#e===this?n:this.#e.#c,this.#o=this.#e===this?[]:this.#e.#o,e===`!`&&!this.#e.#s&&this.#o.push(this),this.#a=this.#i?this.#i.#r.length:0}get hasMagic(){if(this.#t!==void 0)return this.#t;for(let e of this.#r)if(typeof e!=`string`&&(e.type||e.hasMagic))return this.#t=!0;return this.#t}toString(){return this.#l===void 0?this.#l=this.type?this.type+`(`+this.#r.map(e=>String(e)).join(`|`)+`)`:this.#r.map(e=>String(e)).join(``):this.#l}#d(){if(this!==this.#e)throw Error(`should only call on root`);if(this.#s)return this;this.toString(),this.#s=!0;let e;for(;e=this.#o.pop();){if(e.type!==`!`)continue;let t=e,n=t.#i;for(;n;){for(let r=t.#a+1;!n.type&&r<n.#r.length;r++)for(let t of e.#r){if(typeof t==`string`)throw Error(`string part in extglob AST??`);t.copyIn(n.#r[r])}t=n,n=t.#i}}return this}push(...e){for(let t of e)if(t!==``){if(typeof t!=`string`&&!(t instanceof G&&t.#i===this))throw Error(`invalid part: `+t);this.#r.push(t)}}toJSON(){let e=this.type===null?this.#r.slice().map(e=>typeof e==`string`?e:e.toJSON()):[this.type,...this.#r.map(e=>e.toJSON())];return this.isStart()&&!this.type&&e.unshift([]),this.isEnd()&&(this===this.#e||this.#e.#s&&this.#i?.type===`!`)&&e.push({}),e}isStart(){if(this.#e===this)return!0;if(!this.#i?.isStart())return!1;if(this.#a===0)return!0;let e=this.#i;for(let t=0;t<this.#a;t++){let n=e.#r[t];if(!(n instanceof G&&n.type===`!`))return!1}return!0}isEnd(){if(this.#e===this||this.#i?.type===`!`)return!0;if(!this.#i?.isEnd())return!1;if(!this.type)return this.#i?.isEnd();let e=this.#i?this.#i.#r.length:0;return this.#a===e-1}copyIn(e){typeof e==`string`?this.push(e):this.push(e.clone(this))}clone(e){let t=new G(this.type,e);for(let e of this.#r)t.copyIn(e);return t}static#f(e,t,n,r,i){let a=r.maxExtglobRecursion??2,o=!1,s=!1,c=-1,l=!1;if(t.type===null){let u=n,d=``;for(;u<e.length;){let n=e.charAt(u++);if(o||n===`\\`){o=!o,d+=n;continue}if(s){u===c+1?(n===`^`||n===`!`)&&(l=!0):n===`]`&&!(u===c+2&&l)&&(s=!1),d+=n;continue}if(n===`[`){s=!0,c=u,l=!1,d+=n;continue}if(!r.noext&&Bm(n)&&e.charAt(u)===`(`&&i<=a){t.push(d),d=``;let a=new G(n,t);u=G.#f(e,a,u,r,i+1),t.push(a);continue}d+=n}return t.push(d),u}let u=n+1,d=new G(null,t),f=[],p=``;for(;u<e.length;){let n=e.charAt(u++);if(o||n===`\\`){o=!o,p+=n;continue}if(s){u===c+1?(n===`^`||n===`!`)&&(l=!0):n===`]`&&!(u===c+2&&l)&&(s=!1),p+=n;continue}if(n===`[`){s=!0,c=u,l=!1,p+=n;continue}if(!r.noext&&Bm(n)&&e.charAt(u)===`(`&&(i<=a||t&&t.#h(n))){let a=t&&t.#h(n)?0:1;d.push(p),p=``;let o=new G(n,d);d.push(o),u=G.#f(e,o,u,r,i+a);continue}if(n===`|`){d.push(p),p=``,f.push(d),d=new G(null,t);continue}if(n===`)`)return p===``&&t.#r.length===0&&(t.#u=!0),d.push(p),p=``,t.push(...f,d),u;p+=n}return t.type=null,t.#t=void 0,t.#r=[e.substring(n-1)],u}#p(e){return this.#m(e,Um)}#m(e,t=Hm){if(!e||typeof e!=`object`||e.type!==null||e.#r.length!==1||this.type===null)return!1;let n=e.#r[0];return!n||typeof n!=`object`||n.type===null?!1:this.#h(n.type,t)}#h(e,t=Wm){return!!t.get(this.type)?.includes(e)}#g(e,t){let n=e.#r[0],r=new G(null,n,this.options);r.#r.push(``),n.push(r),this.#_(e,t)}#_(e,t){let n=e.#r[0];this.#r.splice(t,1,...n.#r);for(let e of n.#r)typeof e==`object`&&(e.#i=this);this.#l=void 0}#v(e){return!!Gm.get(this.type)?.has(e)}#y(e){if(!e||typeof e!=`object`||e.type!==null||e.#r.length!==1||this.type===null||this.#r.length!==1)return!1;let t=e.#r[0];return!t||typeof t!=`object`||t.type===null?!1:this.#v(t.type)}#b(e){let t=Gm.get(this.type),n=e.#r[0],r=t?.get(n.type);if(!r)return!1;this.#r=n.#r;for(let e of this.#r)typeof e==`object`&&(e.#i=this);this.type=r,this.#l=void 0,this.#u=!1}static fromGlob(e,t={}){let n=new G(null,void 0,t);return G.#f(e,n,0,t,0),n}toMMPattern(){if(this!==this.#e)return this.#e.toMMPattern();let e=this.toString(),[t,n,r,i]=this.toRegExpSource();if(!(r||this.#t||this.#c.nocase&&!this.#c.nocaseMagicOnly&&e.toUpperCase()!==e.toLowerCase()))return n;let a=(this.#c.nocase?`i`:``)+(i?`u`:``);return Object.assign(RegExp(`^${t}$`,a),{_src:t,_glob:e})}get options(){return this.#c}toRegExpSource(e){let t=e??!!this.#c.dot;if(this.#e===this&&(this.#x(),this.#d()),!Vm(this)){let n=this.isStart()&&this.isEnd()&&!this.#r.some(e=>typeof e!=`string`),r=this.#r.map(t=>{let[r,i,a,o]=typeof t==`string`?G.#C(t,this.#t,n):t.toRegExpSource(e);return this.#t=this.#t||a,this.#n=this.#n||o,r}).join(``),i=``;if(this.isStart()&&typeof this.#r[0]==`string`&&!(this.#r.length===1&&Jm.has(this.#r[0]))){let n=qm,a=t&&n.has(r.charAt(0))||r.startsWith(`\\.`)&&n.has(r.charAt(2))||r.startsWith(`\\.\\.`)&&n.has(r.charAt(4)),o=!t&&!e&&n.has(r.charAt(0));i=a?`(?!(?:^|/)\\.\\.?(?:$|/))`:o?Km:``}let a=``;return this.isEnd()&&this.#e.#s&&this.#i?.type===`!`&&(a=`(?:$|\\/)`),[i+r+a,Rm(r),this.#t=!!this.#t,this.#n]}let n=this.type===`*`||this.type===`+`,r=this.type===`!`?`(?:(?!(?:`:`(?:`,i=this.#S(t);if(this.isStart()&&this.isEnd()&&!i&&this.type!==`!`){let e=this.toString(),t=this;return t.#r=[e],t.type=null,t.#t=void 0,[e,Rm(this.toString()),!1,!1]}let a=!n||e||t?``:this.#S(!0);a===i&&(a=``),a&&(i=`(?:${i})(?:${a})*?`);let o=``;if(this.type===`!`&&this.#u)o=(this.isStart()&&!t?Km:``)+Zm;else{let n=this.type===`!`?`))`+(this.isStart()&&!t&&!e?Km:``)+`[^/]*?)`:this.type===`@`?`)`:this.type===`?`?`)?`:this.type===`+`&&a?`)`:this.type===`*`&&a?`)?`:`)${this.type}`;o=r+i+n}return[o,Rm(i),this.#t=!!this.#t,this.#n]}#x(){if(Vm(this)){let e=0,t=!1;do{t=!0;for(let e=0;e<this.#r.length;e++){let n=this.#r[e];typeof n==`object`&&(n.#x(),this.#m(n)?(t=!1,this.#_(n,e)):this.#p(n)?(t=!1,this.#g(n,e)):this.#y(n)&&(t=!1,this.#b(n)))}}while(!t&&++e<10)}else for(let e of this.#r)typeof e==`object`&&e.#x();this.#l=void 0}#S(e){return this.#r.map(t=>{if(typeof t==`string`)throw Error(`string type in extglob ast??`);let[n,r,i,a]=t.toRegExpSource(e);return this.#n=this.#n||a,n}).filter(e=>!(this.isStart()&&this.isEnd())||!!e).join(`|`)}static#C(e,t,n=!1){let r=!1,i=``,a=!1,o=!1;for(let s=0;s<e.length;s++){let c=e.charAt(s);if(r){r=!1,i+=(Ym.has(c)?`\\`:``)+c;continue}if(c===`*`){if(o)continue;o=!0,i+=n&&/^[*]+$/.test(e)?Zm:`[^/]*?`,t=!0;continue}if(o=!1,c===`\\`){s===e.length-1?i+=`\\\\`:r=!0;continue}if(c===`[`){let[n,r,o,c]=Lm(e,s);if(o){i+=n,a||=r,s+=o-1,t||=c;continue}}if(c===`?`){i+=`[^/]`,t=!0;continue}i+=Xm(c)}return[i,Rm(e),!!t,a]}};G=$m;const eh=(e,{windowsPathsNoEscape:t=!1,magicalBraces:n=!1}={})=>n?t?e.replace(/[?*()[\]{}]/g,`[$&]`):e.replace(/[?*()[\]\\{}]/g,`\\$&`):t?e.replace(/[?*()[\]]/g,`[$&]`):e.replace(/[?*()[\]\\]/g,`\\$&`),K=(e,t,n={})=>(Mm(t),!n.nocomment&&t.charAt(0)===`#`?!1:new Eh(t,n).match(e)),th=/^\*+([^+@!?*[(]*)$/,nh=e=>t=>!t.startsWith(`.`)&&t.endsWith(e),rh=e=>t=>t.endsWith(e),ih=e=>(e=e.toLowerCase(),t=>!t.startsWith(`.`)&&t.toLowerCase().endsWith(e)),ah=e=>(e=e.toLowerCase(),t=>t.toLowerCase().endsWith(e)),oh=/^\*+\.\*+$/,sh=e=>!e.startsWith(`.`)&&e.includes(`.`),ch=e=>e!==`.`&&e!==`..`&&e.includes(`.`),lh=/^\.\*+$/,uh=e=>e!==`.`&&e!==`..`&&e.startsWith(`.`),dh=/^\*+$/,fh=e=>e.length!==0&&!e.startsWith(`.`),ph=e=>e.length!==0&&e!==`.`&&e!==`..`,mh=/^\?+([^+@!?*[(]*)?$/,hh=([e,t=``])=>{let n=yh([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},gh=([e,t=``])=>{let n=bh([e]);return t?(t=t.toLowerCase(),e=>n(e)&&e.toLowerCase().endsWith(t)):n},_h=([e,t=``])=>{let n=bh([e]);return t?e=>n(e)&&e.endsWith(t):n},vh=([e,t=``])=>{let n=yh([e]);return t?e=>n(e)&&e.endsWith(t):n},yh=([e])=>{let t=e.length;return e=>e.length===t&&!e.startsWith(`.`)},bh=([e])=>{let t=e.length;return e=>e.length===t&&e!==`.`&&e!==`..`},xh=typeof process==`object`&&process?typeof process.env==`object`&&process.env&&process.env.__MINIMATCH_TESTING_PLATFORM__||process.platform:`posix`,Sh={win32:{sep:`\\`},posix:{sep:`/`}};K.sep=xh===`win32`?Sh.win32.sep:Sh.posix.sep;const q=Symbol(`globstar **`);K.GLOBSTAR=q,K.filter=(e,t={})=>n=>K(n,e,t);const J=(e,t={})=>Object.assign({},e,t);K.defaults=e=>{if(!e||typeof e!=`object`||!Object.keys(e).length)return K;let t=K;return Object.assign((n,r,i={})=>t(n,r,J(e,i)),{Minimatch:class extends t.Minimatch{constructor(t,n={}){super(t,J(e,n))}static defaults(n){return t.defaults(J(e,n)).Minimatch}},AST:class extends t.AST{constructor(t,n,r={}){super(t,n,J(e,r))}static fromGlob(n,r={}){return t.AST.fromGlob(n,J(e,r))}},unescape:(n,r={})=>t.unescape(n,J(e,r)),escape:(n,r={})=>t.escape(n,J(e,r)),filter:(n,r={})=>t.filter(n,J(e,r)),defaults:n=>t.defaults(J(e,n)),makeRe:(n,r={})=>t.makeRe(n,J(e,r)),braceExpand:(n,r={})=>t.braceExpand(n,J(e,r)),match:(n,r,i={})=>t.match(n,r,J(e,i)),sep:t.sep,GLOBSTAR:q})};const Ch=(e,t={})=>(Mm(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:wm(e,{max:t.braceExpandMax}));K.braceExpand=Ch,K.makeRe=(e,t={})=>new Eh(e,t).makeRe(),K.match=(e,t,n={})=>{let r=new Eh(t,n);return e=e.filter(e=>r.match(e)),r.options.nonull&&!e.length&&e.push(t),e};const wh=/[?*]|[+@!]\(.*?\)|\[|\]/,Th=e=>e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,`\\$&`);var Eh=class{options;set;pattern;windowsPathsNoEscape;nonegate;negate;comment;empty;preserveMultipleSlashes;partial;globSet;globParts;nocase;isWindows;platform;windowsNoMagicRoot;maxGlobstarRecursion;regexp;constructor(e,t={}){Mm(e),t||={},this.options=t,this.maxGlobstarRecursion=t.maxGlobstarRecursion??200,this.pattern=e,this.platform=t.platform||xh,this.isWindows=this.platform===`win32`,this.windowsPathsNoEscape=!!t.windowsPathsNoEscape||t.allowWindowsEscape===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,`/`)),this.preserveMultipleSlashes=!!t.preserveMultipleSlashes,this.regexp=null,this.negate=!1,this.nonegate=!!t.nonegate,this.comment=!1,this.empty=!1,this.partial=!!t.partial,this.nocase=!!this.options.nocase,this.windowsNoMagicRoot=t.windowsNoMagicRoot===void 0?!!(this.isWindows&&this.nocase):t.windowsNoMagicRoot,this.globSet=[],this.globParts=[],this.set=[],this.make()}hasMagic(){if(this.options.magicalBraces&&this.set.length>1)return!0;for(let e of this.set)for(let t of e)if(typeof t!=`string`)return!0;return!1}debug(...e){}make(){let e=this.pattern,t=this.options;if(!t.nocomment&&e.charAt(0)===`#`){this.comment=!0;return}if(!e){this.empty=!0;return}this.parseNegate(),this.globSet=[...new Set(this.braceExpand())],t.debug&&(this.debug=(...e)=>console.error(...e)),this.debug(this.pattern,this.globSet);let n=this.globSet.map(e=>this.slashSplit(e));this.globParts=this.preprocess(n),this.debug(this.pattern,this.globParts);let r=this.globParts.map((e,t,n)=>{if(this.isWindows&&this.windowsNoMagicRoot){let t=e[0]===``&&e[1]===``&&(e[2]===`?`||!wh.test(e[2]))&&!wh.test(e[3]),n=/^[a-z]:/i.test(e[0]);if(t)return[...e.slice(0,4),...e.slice(4).map(e=>this.parse(e))];if(n)return[e[0],...e.slice(1).map(e=>this.parse(e))]}return e.map(e=>this.parse(e))});if(this.debug(this.pattern,r),this.set=r.filter(e=>e.indexOf(!1)===-1),this.isWindows)for(let e=0;e<this.set.length;e++){let t=this.set[e];t[0]===``&&t[1]===``&&this.globParts[e][2]===`?`&&typeof t[3]==`string`&&/^[a-z]:$/i.test(t[3])&&(t[2]=`?`)}this.debug(this.pattern,this.set)}preprocess(e){if(this.options.noglobstar)for(let t of e)for(let e=0;e<t.length;e++)t[e]===`**`&&(t[e]=`*`);let{optimizationLevel:t=1}=this.options;return t>=2?(e=this.firstPhasePreProcess(e),e=this.secondPhasePreProcess(e)):e=t>=1?this.levelOneOptimize(e):this.adjascentGlobstarOptimize(e),e}adjascentGlobstarOptimize(e){return e.map(e=>{let t=-1;for(;(t=e.indexOf(`**`,t+1))!==-1;){let n=t;for(;e[n+1]===`**`;)n++;n!==t&&e.splice(t,n-t)}return e})}levelOneOptimize(e){return e.map(e=>(e=e.reduce((e,t)=>{let n=e[e.length-1];return t===`**`&&n===`**`?e:t===`..`&&n&&n!==`..`&&n!==`.`&&n!==`**`?(e.pop(),e):(e.push(t),e)},[]),e.length===0?[``]:e))}levelTwoFileOptimize(e){Array.isArray(e)||(e=this.slashSplit(e));let t=!1;do{if(t=!1,!this.preserveMultipleSlashes){for(let n=1;n<e.length-1;n++){let r=e[n];(n!==1||r!==``||e[0]!==``)&&(r===`.`||r===``)&&(t=!0,e.splice(n,1),n--)}e[0]===`.`&&e.length===2&&(e[1]===`.`||e[1]===``)&&(t=!0,e.pop())}let n=0;for(;(n=e.indexOf(`..`,n+1))!==-1;){let r=e[n-1];r&&r!==`.`&&r!==`..`&&r!==`**`&&!(this.isWindows&&/^[a-z]:$/i.test(r))&&(t=!0,e.splice(n-1,2),n-=2)}}while(t);return e.length===0?[``]:e}firstPhasePreProcess(e){let t=!1;do{t=!1;for(let n of e){let r=-1;for(;(r=n.indexOf(`**`,r+1))!==-1;){let i=r;for(;n[i+1]===`**`;)i++;i>r&&n.splice(r+1,i-r);let a=n[r+1],o=n[r+2],s=n[r+3];if(a!==`..`||!o||o===`.`||o===`..`||!s||s===`.`||s===`..`)continue;t=!0,n.splice(r,1);let c=n.slice(0);c[r]=`**`,e.push(c),r--}if(!this.preserveMultipleSlashes){for(let e=1;e<n.length-1;e++){let r=n[e];(e!==1||r!==``||n[0]!==``)&&(r===`.`||r===``)&&(t=!0,n.splice(e,1),e--)}n[0]===`.`&&n.length===2&&(n[1]===`.`||n[1]===``)&&(t=!0,n.pop())}let i=0;for(;(i=n.indexOf(`..`,i+1))!==-1;){let e=n[i-1];if(e&&e!==`.`&&e!==`..`&&e!==`**`){t=!0;let e=i===1&&n[i+1]===`**`?[`.`]:[];n.splice(i-1,2,...e),n.length===0&&n.push(``),i-=2}}}}while(t);return e}secondPhasePreProcess(e){for(let t=0;t<e.length-1;t++)for(let n=t+1;n<e.length;n++){let r=this.partsMatch(e[t],e[n],!this.preserveMultipleSlashes);if(r){e[t]=[],e[n]=r;break}}return e.filter(e=>e.length)}partsMatch(e,t,n=!1){let r=0,i=0,a=[],o=``;for(;r<e.length&&i<t.length;)if(e[r]===t[i])a.push(o===`b`?t[i]:e[r]),r++,i++;else if(n&&e[r]===`**`&&t[i]===e[r+1])a.push(e[r]),r++;else if(n&&t[i]===`**`&&e[r]===t[i+1])a.push(t[i]),i++;else if(e[r]===`*`&&t[i]&&(this.options.dot||!t[i].startsWith(`.`))&&t[i]!==`**`){if(o===`b`)return!1;o=`a`,a.push(e[r]),r++,i++}else if(t[i]===`*`&&e[r]&&(this.options.dot||!e[r].startsWith(`.`))&&e[r]!==`**`){if(o===`a`)return!1;o=`b`,a.push(t[i]),r++,i++}else return!1;return e.length===t.length&&a}parseNegate(){if(this.nonegate)return;let e=this.pattern,t=!1,n=0;for(let r=0;r<e.length&&e.charAt(r)===`!`;r++)t=!t,n++;n&&(this.pattern=e.slice(n)),this.negate=t}matchOne(e,t,n=!1){let r=0,i=0;if(this.isWindows){let n=typeof e[0]==`string`&&/^[a-z]:$/i.test(e[0]),a=!n&&e[0]===``&&e[1]===``&&e[2]===`?`&&/^[a-z]:$/i.test(e[3]),o=typeof t[0]==`string`&&/^[a-z]:$/i.test(t[0]),s=!o&&t[0]===``&&t[1]===``&&t[2]===`?`&&typeof t[3]==`string`&&/^[a-z]:$/i.test(t[3]),c=a?3:n?0:void 0,l=s?3:o?0:void 0;if(typeof c==`number`&&typeof l==`number`){let[n,a]=[e[c],t[l]];n.toLowerCase()===a.toLowerCase()&&(t[l]=n,i=l,r=c)}}let{optimizationLevel:a=1}=this.options;return a>=2&&(e=this.levelTwoFileOptimize(e)),t.includes(q)?this.#e(e,t,n,r,i):this.#n(e,t,n,r,i)}#e(e,t,n,r,i){let a=t.indexOf(q,i),o=t.lastIndexOf(q),[s,c,l]=n?[t.slice(i,a),t.slice(a+1),[]]:[t.slice(i,a),t.slice(a+1,o),t.slice(o+1)];if(s.length){let t=e.slice(r,r+s.length);if(!this.#n(t,s,n,0,0))return!1;r+=s.length,i+=s.length}let u=0;if(l.length){if(l.length+r>e.length)return!1;let t=e.length-l.length;if(this.#n(e,l,n,t,0))u=l.length;else{if(e[e.length-1]!==``||r+l.length===e.length||(t--,!this.#n(e,l,n,t,0)))return!1;u=l.length+1}}if(!c.length){let t=!!u;for(let n=r;n<e.length-u;n++){let r=String(e[n]);if(t=!0,r===`.`||r===`..`||!this.options.dot&&r.startsWith(`.`))return!1}return n||t}let d=[[[],0]],f=d[0],p=0,ee=[0];for(let e of c)e===q?(ee.push(p),f=[[],0],d.push(f)):(f[0].push(e),p++);let te=d.length-1,ne=e.length-u;for(let e of d)e[1]=ne-(ee[te--]+e[0].length);return!!this.#t(e,d,r,0,n,0,!!u)}#t(e,t,n,r,i,a,o){let s=t[r];if(!s){for(let t=n;t<e.length;t++){o=!0;let n=e[t];if(n===`.`||n===`..`||!this.options.dot&&n.startsWith(`.`))return!1}return o}let[c,l]=s;for(;n<=l;){if(this.#n(e.slice(0,n+c.length),c,i,n,0)&&a<this.maxGlobstarRecursion){let s=this.#t(e,t,n+c.length,r+1,i,a+1,o);if(s!==!1)return s}let s=e[n];if(s===`.`||s===`..`||!this.options.dot&&s.startsWith(`.`))return!1;n++}return i||null}#n(e,t,n,r,i){let a,o,s,c;for(a=r,o=i,c=e.length,s=t.length;a<c&&o<s;a++,o++){this.debug(`matchOne loop`);let n=t[o],r=e[a];if(this.debug(t,n,r),n===!1||n===q)return!1;let i;if(typeof n==`string`?(i=r===n,this.debug(`string match`,n,r,i)):(i=n.test(r),this.debug(`pattern match`,n,r,i)),!i)return!1}if(a===c&&o===s)return!0;if(a===c)return n;if(o===s)return a===c-1&&e[a]===``;throw Error(`wtf?`)}braceExpand(){return Ch(this.pattern,this.options)}parse(e){Mm(e);let t=this.options;if(e===`**`)return q;if(e===``)return``;let n,r=null;(n=e.match(dh))?r=t.dot?ph:fh:(n=e.match(th))?r=(t.nocase?t.dot?ah:ih:t.dot?rh:nh)(n[1]):(n=e.match(mh))?r=(t.nocase?t.dot?gh:hh:t.dot?_h:vh)(n):(n=e.match(oh))?r=t.dot?ch:sh:(n=e.match(lh))&&(r=uh);let i=$m.fromGlob(e,this.options).toMMPattern();return r&&typeof i==`object`&&Reflect.defineProperty(i,"test",{value:r}),i}makeRe(){if(this.regexp||this.regexp===!1)return this.regexp;let e=this.set;if(!e.length)return this.regexp=!1,this.regexp;let t=this.options,n=t.noglobstar?`[^/]*?`:t.dot?`(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?`:`(?:(?!(?:\\/|^)\\.).)*?`,r=new Set(t.nocase?[`i`]:[]),i=e.map(e=>{let t=e.map(e=>{if(e instanceof RegExp)for(let t of e.flags.split(``))r.add(t);return typeof e==`string`?Th(e):e===q?q:e._src});t.forEach((e,r)=>{let i=t[r+1],a=t[r-1];e===q&&a!==q&&(a===void 0?i!==void 0&&i!==q?t[r+1]=`(?:\\/|`+n+`\\/)?`+i:t[r]=n:i===void 0?t[r-1]=a+`(?:\\/|\\/`+n+`)?`:i!==q&&(t[r-1]=a+`(?:\\/|\\/`+n+`\\/)`+i,t[r+1]=q))});let i=t.filter(e=>e!==q);if(this.partial&&i.length>=1){let e=[];for(let t=1;t<=i.length;t++)e.push(i.slice(0,t).join(`/`));return`(?:`+e.join(`|`)+`)`}return i.join(`/`)}).join(`|`),[a,o]=e.length>1?[`(?:`,`)`]:[``,``];i=`^`+a+i+o+`$`,this.partial&&(i=`^(?:\\/|`+a+i.slice(1,-1)+o+`)$`),this.negate&&(i=`^(?!`+i+`).+$`);try{this.regexp=new RegExp(i,[...r].join(``))}catch{this.regexp=!1}return this.regexp}slashSplit(e){return this.preserveMultipleSlashes?e.split(`/`):this.isWindows&&/^\/\/[^/]+/.test(e)?[``,...e.split(/\/+/)]:e.split(/\/+/)}match(e,t=this.partial){if(this.debug(`match`,e,this.pattern),this.comment)return!1;if(this.empty)return e===``;if(e===`/`&&t)return!0;let n=this.options;this.isWindows&&(e=e.split(`\\`).join(`/`));let r=this.slashSplit(e);this.debug(this.pattern,`split`,r);let i=this.set;this.debug(this.pattern,`set`,i);let a=r[r.length-1];if(!a)for(let e=r.length-2;!a&&e>=0;e--)a=r[e];for(let e of i){let i=r;if(n.matchBase&&e.length===1&&(i=[a]),this.matchOne(i,e,t))return n.flipNegate?!0:!this.negate}return!n.flipNegate&&this.negate}static defaults(e){return K.defaults(e).Minimatch}};K.AST=$m,K.Minimatch=Eh,K.escape=eh,K.unescape=Rm;const Dh=/[/\\]/u,Oh={kind:`ignore`},kh=e=>!ae(e)&&e.split(Dh).every(e=>e!==`.`&&e!==`..`),Ah=/^!+/u,jh=/^\.?\/+/u,Mh=e=>{let t=Ah.exec(e)?.[0]??``;return{body:e.slice(t.length).replace(jh,``),negated:t.length%2==1}},Nh=e=>Mh(e).negated,Ph=e=>Mh(e).body,Fh=/[?[\]{}()]/u,Ih=e=>kh(e)&&!Nh(e)&&!Fh.test(e),Lh=(e,t)=>K(e,t),Rh=e=>e.replaceAll(/\/+/gu,`/`).replace(/\/$/u,``),zh=e=>{let t=Rh(e).split(`/`),n=t.findIndex(e=>e.includes(`*`));return n===-1?Oh:{baseDir:n===0?`.`:t.slice(0,n).join(`/`),kind:`expand-children`,pattern:Rh(e),suffix:t.slice(n+1).join(`/`)}},Bh=e=>{let t=Rh(e).split(`/`).filter(e=>e.includes(`*`));return t.length<=1&&!t.includes(`**`)},Vh=e=>{let t=Rh(e).split(`/`),n=t.findIndex(e=>e.includes(`*`));return n<=0?`.`:t.slice(0,n).join(`/`)},Hh=e=>Ih(e)?e.includes(`*`)?Bh(e)?zh(e):{baseDir:Vh(e),kind:`expand-recursive`,pattern:Rh(e)}:{dir:e,kind:`probe-dir`,pattern:e}:Oh,Uh=new Set([`candidate_not_inspected`,`scan_budget_exhausted`,`manifest_unreadable`,`unsupported_pattern`,`workspace_declaration_unparsed`,`workspace_dir_unreadable`,`workspace_file_unreadable`]),Wh=(e,t)=>t?.name?{name:t.name,path:e}:void 0,Gh=e=>{let t=e.map(e=>[e.path,e]),n=[...new Map(t).values()];return n.sort((e,t)=>e.path.localeCompare(t.path)),n},Kh=e=>!e.diagnostics.some(e=>Uh.has(e.kind)),qh=e=>!e.diagnostics.some(e=>e.kind===`no_workspace_declaration`),Jh=(e,t)=>e<t?-1:+(e>t),Yh=e=>`path`in e?`${e.kind} ${e.path}`:`file`in e?`${e.kind} ${e.file}`:`pattern`in e?`${e.kind} ${e.pattern}`:e.kind,Xh=e=>e.toSorted((e,t)=>Jh(Yh(e),Yh(t))),Zh=e=>!ae(e)&&!e.split(/[/\\]/u).includes(`..`),Qh=(e,t)=>e.kind===`missing`?{kind:`absent`}:e.kind===`outside`?{kind:`unreadable`,reason:`${t} escapes the checkout`}:{kind:`unreadable`,reason:e.code},$h=async(e,t,n)=>{if(!Zh(t))return{kind:`unreadable`,reason:`path escapes the checkout`};let r=await eg(e,t);if(`probe`in r)return r.probe;let i=await tg(r.real);return`reason`in i?{kind:`unreadable`,reason:i.reason}:i.found===n?{kind:`match`}:{found:i.found,kind:`mismatch`}},eg=async(e,t)=>{let n=await Ou(e,m(e,t));if(n.kind!==`inside`)return{probe:Qh(n,`path`)};let r=await Ou(e,m(n.real,`package.json`));return r.kind===`inside`?{real:r.real}:{probe:Qh(r,`manifest`)}},tg=async e=>{try{let t=JSON.parse(await s(e,`utf8`));return{found:Lu(t)}}catch(e){return{reason:e.code??String(e)}}},ng=(e,t)=>{let n=e.filter(e=>e.name===t).map(e=>e.path);return n.length===0?{kind:`absent`}:n.length===1?{kind:`found`,path:n[0]}:{kind:`ambiguous`,paths:n.toSorted(Jh)}},rg=new Set;let ig=!1;const ag=()=>{for(let e of rg)try{e.kill(`SIGKILL`)}catch{}},og=[`SIGINT`,`SIGTERM`,`SIGHUP`,`SIGBREAK`],sg=e=>{let t=()=>{ag(),process.removeListener(e,t),process.kill(process.pid,e)};process.on(e,t)},cg=()=>{ig||(ig=!0,og.forEach(e=>{sg(e)}),process.on(`exit`,ag))},lg=()=>{let e=[],t=0,n=!1;return{finish:()=>({text:Buffer.concat(e).toString(`utf8`),truncated:n}),push:r=>{if(n)return;let i=67108864-t;if(r.length<=i){e.push(r),t+=r.length;return}i>0&&e.push(r.subarray(0,i)),n=!0}}},ug=(e,t)=>[e.replace(/\r?\n$/u,``),t].filter(e=>e!==``).join(`
328
- `),dg=(e,t,n)=>{let r=e;return t.truncated&&(r=ug(r,`refs: stdout exceeded 67108864 bytes, truncated`)),n.truncated&&(r=ug(r,`refs: stderr exceeded 67108864 bytes, truncated`)),r},fg={clear:()=>{},markedTimedOut:()=>!1},pg=(e,t)=>{if(t===void 0)return fg;let n=!1,r,i=setTimeout(()=>{n=!0,e.kill(`SIGTERM`),r=setTimeout(()=>{e.kill(`SIGKILL`)},2e3)},t);return{clear:()=>{clearTimeout(i),r!==void 0&&clearTimeout(r)},markedTimedOut:()=>n}},mg=e=>e===void 0?{}:{cwd:e},hg=(e,t)=>ug(e,`refs: command timed out after ${String(t)}ms`),gg=(e,t)=>({exitCode:124,stderr:hg(e,t),stdout:``,timedOut:!0}),_g=(e,t,n)=>{let r=be(e,t,{...mg(n?.cwd),stdio:[`ignore`,`pipe`,`pipe`]});rg.add(r);let i=lg(),a=lg();return r.stdout.on(`data`,e=>{i.push(e)}),r.stderr.on(`data`,e=>{a.push(e)}),{child:r,stderrCollector:a,stdoutCollector:i,timeout:pg(r,n?.timeoutMs)}},vg=(e,t,n)=>{try{return _g(e,t,n)}catch(e){return{exitCode:127,stderr:bg(e),stdout:``}}},yg=e=>!(`child`in e),bg=e=>e instanceof Error?e.message:String(e),xg=async e=>{try{let[t]=await ve(e,`close`);return{code:t}}catch(e){return{code:null,errorMessage:bg(e)}}},Sg=e=>e===null?1:e,Cg=(e,t)=>t.truncated?{...e,stdoutTruncated:!0}:e,wg=e=>e.timedOut?gg(e.stderr.text,e.timeoutMs):e.errorMessage===void 0?Cg({exitCode:Sg(e.code),stderr:dg(e.stderr.text,e.stdout,e.stderr),stdout:e.stdout.text},e.stdout):Cg({exitCode:127,stderr:ug(e.stderr.text,e.errorMessage),stdout:e.stdout.text},e.stdout);var Tg=class{async run(e,t,n){cg();let r=vg(e,t,n);if(yg(r))return r;let i=await xg(r.child);return rg.delete(r.child),r.timeout.clear(),wg({code:i.code,errorMessage:i.errorMessage,stderr:r.stderrCollector.finish(),stdout:r.stdoutCollector.finish(),timedOut:r.timeout.markedTimedOut(),timeoutMs:n?.timeoutMs})}};const Eg=hl.partial({description:!0}),Dg=I({default_branch:P().min(1),key:il,tag_format_candidate:ll.nullable(),url:P().min(1)});Dg.extend({description:P().default(``),packages:Gc(Eg)});const Og=Dg.extend({description:P().min(1),packages:Gc(hl)}),kg=I({effective_clone_mode:sl.optional(),head_sha:P().regex(/^[0-9a-f]{40}$/u,`head_sha must be a 40-character lowercase hex string`).optional(),last_error:P().optional(),last_fetched_at:Vc().optional(),pending_proposal_at:Vc().optional()}),Ag=I({refs:Uc(e=>e.length>0&&!Hc.has(e),()=>`state ref key must be non-empty and not "__proto__", "constructor", or "prototype"`,pc(P(),kg)).default({})}),jg=(e,t,n)=>t?.[e]??n[e],Mg=async e=>{try{return await s(e.statePath,`utf8`)}catch(e){if(R(e))return;throw e}},Ng=e=>{try{return JSON.parse(e)}catch{return}},Pg=async e=>{let t=await Mg(e);if(t===void 0)return Ag.parse({});let n=Ng(t);if(n===void 0)return Ag.parse({});let r=Ag.safeParse(n);return r.success?r.data:Ag.parse({})},Fg=async(e,t)=>{let n=Ag.safeParse(t);if(!n.success)throw y(T(n.error));await $l(e.statePath,`${JSON.stringify(n.data,void 0,2)}\n`)},Ig=/^\d+\.\d+\.\d+$/u,Lg=/^0+(?=\d)/u,Rg=(e,t)=>{let n=e.replace(Lg,``),r=t.replace(Lg,``);return n.length===r.length?n===r?0:n<r?-1:1:n.length<r.length?-1:1},zg=(e,t)=>{if(!Ig.test(e)||!Ig.test(t))return;let n=e.split(`.`),r=t.split(`.`);return n.map((e,t)=>Rg(e,r[t]??``)).find(e=>e!==0)??0},Bg=sc({version:P().regex(Ig)}),Vg=I({checked_at:Vc(),latest_version:P().regex(Ig)}),Hg=async e=>{try{let t=Vg.safeParse(JSON.parse(await s(e.updateCachePath,`utf8`)));return t.success?t.data:void 0}catch{return}},Ug=async(e,t)=>{try{await p(e.root),await $l(e.updateCachePath,`${JSON.stringify(t,void 0,2)}\n`)}catch{}},Wg=(e,t)=>{let n=t-Date.parse(e.checked_at);return n>=0&&n<864e5},Gg=async e=>{try{let t=await e(`https://registry.npmjs.org/@kaisers-io%2Frefs/latest`,{signal:AbortSignal.timeout(2e3)});if(t.status!==200)return;let n=Bg.safeParse(await t.json());return n.success?n.data.version:void 0}catch{return}},Kg=async e=>{let t=await Hg(e.home);if(t!==void 0&&Wg(t,e.nowMs))return{latest:t.latest_version,refreshed:!1,stale:!1};let n=await Gg(e.fetch);return n===void 0?{latest:t?.latest_version,refreshed:!1,stale:!0}:(await Ug(e.home,{checked_at:new Date(e.nowMs).toISOString(),latest_version:n}),{latest:n,refreshed:!0,stale:!1})},qg=(e,t)=>{let n=zg(e,t);return n!==void 0&&n<0},Jg=(e,t)=>`refs ${t} is available (this is ${e}) — update: npm i -g @kaisers-io/refs@latest`,Yg=e=>{let t=e.REFS_UPDATE_CHECK?.trim();if(t===`0`)return!1;if(t===`1`)return!0},Xg=e=>{let t=e.CI?.trim().toLowerCase();return t!==void 0&&t!==``&&t!==`false`&&t!==`0`},Zg={check:!0,notify:!0},Qg=e=>{let t=Yg(e.env);return t===void 0?(e.updates??Zg).check?Xg(e.env)?`ci`:`on`:`config`:t?`on`:`env`},$g=e=>Qg(e)===`on`,e_=e=>$g(e)&&(e.updates??Zg).notify,t_=async(e,t)=>{let n=await Ou(e,m(t,`package.json`));if(n.kind===`inside`)try{let e=JSON.parse(await s(n.real,`utf8`));return{name:Lu(e)}}catch{return}},n_=async(e,t)=>{let n=await t_(e,m(e,t));if(n===void 0)return{diagnostic:{kind:`manifest_unreadable`,path:t}};let r=Wh(t,n);return r===void 0?{diagnostic:{kind:`manifest_missing_name`,path:t}}:{pkg:r}},r_=e=>{let t=[],n=[];for(let r of e)r.diagnostic!==void 0&&t.push(r.diagnostic),r.pkg!==void 0&&n.push(r.pkg);return{diagnostics:t,packages:n}},i_=new Set([`ENOENT`,`ENOTDIR`]),a_=async(e,t)=>{let n=await Ou(e,m(t,`package.json`));if(n.kind===`missing`)return`none`;if(n.kind!==`inside`)return`rejected`;try{return await s(n.real,`utf8`),`manifest`}catch{return`rejected`}},o_=async e=>{try{return{entries:await c(e,{withFileTypes:!0})}}catch(e){return{code:e.code??``}}},s_=e=>Promise.all(e.entries.map(t=>a_(e.repoDir,m(e.fullPath,t.name,e.suffix)))),c_=(e,t,n)=>e.filter((e,r)=>n(t[r])).map(e=>e.name),l_=async e=>{let{baseDir:t,dirs:n,fullPath:r,repoDir:i,suffix:a,symlinks:o}=e,s=e=>oe.join(t===`.`?``:t,e,a),[c,l]=await Promise.all([s_({entries:n,fullPath:r,repoDir:i,suffix:a}),s_({entries:o,fullPath:r,repoDir:i,suffix:a})]);return{diagnostics:[...c_(n,c,e=>e===`rejected`).map(e=>({kind:`manifest_unreadable`,path:s(e)})),...c_(o,l,e=>e!==`none`).map(e=>({kind:`candidate_not_inspected`,path:s(e)}))],dirs:c_(n,c,e=>e===`manifest`).map(e=>s(e))}},u_=async e=>{let t=await n_(e,`.`);return`pkg`in t?[t]:[]},d_=e=>{let t=e.find(e=>e.path===`.`);return t===void 0?[...e]:e.some(e=>e.path!==`.`&&e.name===t.name)?e.filter(e=>e!==t):[...e]},f_=async e=>{let[t]=await u_(e);return t!==void 0&&`pkg`in t?t.pkg:void 0},p_=`package.json`,m_=e=>{let t=Rh(e).split(`/`);return t.includes(`**`)?void 0:t.length},h_=e=>Rh(e).split(`/`).some(e=>e.startsWith(`.`)),g_=e=>e===`.`?0:e.split(`/`).length,__=e=>{let t=Rh(e),n=new Eh(`${t}/${p_}`),r=new Eh(t);return{couldHold:e=>r.match(e,!0),selects:e=>n.match(oe.join(e,p_))}},v_=e=>({...__(e),maxDepth:m_(e),selectsHidden:h_(e)}),y_=new Set([`ENOENT`,`ENOTDIR`]),b_=()=>({dirs:2e4,entries:2e5}),x_=new Set([`.git`,`node_modules`]),S_=(e,t)=>{e.diagnostics.push({kind:`scan_budget_exhausted`,path:t,pattern:e.pattern})},C_=async(e,t,n)=>{if(!e.selects(t)||n.has(t))return;let r=await a_(e.repoDir,m(e.repoDir,t));r===`manifest`&&e.dirs.push(t),r===`rejected`&&e.diagnostics.push({kind:`manifest_unreadable`,path:t})},w_=(e,t)=>!e.selectsHidden&&t.excluded.coversSubtree(t.relPath),T_=async(e,t,n)=>!e.couldHold(n.relPath)||x_.has(t.name)||w_(e,n)?!1:t.isSymbolicLink()?(w_(e,n)||await E_(e,n.relPath),!1):t.isDirectory(),E_=async(e,t)=>{let n=await Ou(e.repoDir,m(e.repoDir,t));if(n.kind===`outside`||n.kind===`missing`)return;if(n.kind===`unreadable`){e.diagnostics.push({kind:`candidate_not_inspected`,path:t});return}let r=await o_(n.real);(!(`code`in r)||!y_.has(r.code))&&e.diagnostics.push({kind:`candidate_not_inspected`,path:t})},D_=async(e,t)=>{let n=await o_(m(e.repoDir,t));if(`code`in n){i_.has(n.code)||e.diagnostics.push({kind:`workspace_dir_unreadable`,path:t});return}if(e.budget.entries-=n.entries.length,e.budget.entries<0){S_(e,t);return}return n.entries},O_=async(e,t,n)=>{if(e.budget.dirs<=0){S_(e,t.relPath);return}if(--e.budget.dirs,await C_(e,t.relPath,n),e.maxDepth!==void 0&&g_(t.relPath)>=e.maxDepth)return;let r=await D_(e,t.relPath);r!==void 0&&await A_(e,{depth:t.depth,entries:r,relPath:t.relPath},n)},k_=(e,t)=>oe.join(e===`.`?``:e,t),A_=async(e,t,n)=>{for(let r of t.entries){let i=k_(t.relPath,r.name);await T_(e,r,{excluded:n,relPath:i})&&(t.depth+1>32?S_(e,i):await O_(e,{depth:t.depth+1,relPath:i},n))}},j_=async(e,t)=>{let n=await Ou(e,m(e,t));if(n.kind!==`inside`)return n.kind===`missing`?{diagnostics:[],dirs:[]}:{diagnostics:[{kind:`workspace_dir_unreadable`,path:t}],dirs:[]}},M_=async(e,t,n)=>{let r=await j_(e,t.baseDir);if(r!==void 0)return r;let i={...v_(t.pattern),budget:n.budget,diagnostics:[],dirs:[],pattern:t.pattern,repoDir:e};return await O_(i,{depth:1,relPath:t.baseDir},n.excluded),{diagnostics:i.diagnostics,dirs:i.dirs}},N_=(e,t)=>oe.join(e.baseDir===`.`?``:e.baseDir,t,e.suffix),P_=(e,t)=>Lh(N_(t,e.name),t.pattern),F_=async(e,t)=>{let n=m(e,t),r=await Ou(e,n);if(r.kind===`missing`)return{result:{diagnostics:[],dirs:[]}};if(r.kind!==`inside`)return{result:{diagnostics:[{kind:`workspace_dir_unreadable`,path:t}],dirs:[]}};let i=await o_(n);return`code`in i?{result:i_.has(i.code)?{diagnostics:[],dirs:[]}:{diagnostics:[{kind:`workspace_dir_unreadable`,path:t}],dirs:[]}}:{entries:i.entries}},I_=async(e,t,n)=>{let{baseDir:r}=t,i=await F_(e,r);if(`result`in i)return i.result;let a=e=>P_(e,t)&&!n.has(N_(t,e.name)),o={entries:i.entries};return l_({baseDir:r,dirs:o.entries.filter(e=>e.isDirectory()&&a(e)),fullPath:m(e,r),repoDir:e,suffix:t.suffix,symlinks:o.entries.filter(e=>e.isSymbolicLink()&&a(e))})},L_=async(e,t)=>{let n=await a_(e,m(e,t));return n===`manifest`?{diagnostics:[],dirs:[Rh(t)]}:n===`rejected`?{diagnostics:[{kind:`manifest_unreadable`,path:t}],dirs:[]}:{diagnostics:[],dirs:[]}},R_=(e,t,n)=>{let{excluded:r}=n,i=Hh(t.body);return i.kind===`expand-children`?I_(e,i,r):i.kind===`expand-recursive`?M_(e,i,n):i.kind===`probe-dir`?r.has(Rh(i.dir))?Promise.resolve({diagnostics:[],dirs:[]}):L_(e,i.dir):Promise.resolve({diagnostics:[{kind:`unsupported_pattern`,pattern:t.declared}],dirs:[]})},z_=(e,t)=>Lh(Ph(e),Ph(t)),B_=e=>({negations:e.filter(e=>Nh(e)),patterns:e.filter(e=>!Nh(e))}),V_=e=>{let t=e.reduce((e,t)=>Nh(t)?{negations:[...e.negations,t],patterns:e.patterns}:{negations:e.negations.filter(e=>!z_(t,e)),patterns:[...e.patterns,t]},{negations:[],patterns:[]});return{negations:t.negations,patterns:t.patterns.filter(e=>!t.negations.some(t=>z_(e,t)))}},H_=e=>e.endsWith(`/`)?e:`${e}/`,U_=(e,t)=>e.some(e=>Lh(H_(t),H_(Ph(e)))),W_=(e,t)=>{let n=Ph(e);return n.endsWith(`/**`)&&Lh(t,n.slice(0,-3))},G_=e=>({coversSubtree:t=>e.some(e=>W_(e,t)),has:t=>U_(e,t)}),K_=e=>{let t=new Set,n=[];for(let r of e)r.dirs.forEach(e=>t.add(e)),n.push(...r.diagnostics);return{diagnostics:n,dirs:[...t]}},q_=async(e,t,n)=>{let{negations:r,patterns:i}=t,a=G_(r),o=K_(await Promise.all(i.map(t=>R_(e,{body:Ph(t),declared:t},{budget:n,excluded:a}))));return{diagnostics:o.diagnostics,dirs:o.dirs}},J_=async(e,t)=>{let n=V_(t.npm),r=B_(t.pnpm),i=b_(),a=await Promise.all([q_(e,n,i),q_(e,r,i)]);return K_(a)},Y_=async e=>{let t=await Wu(e);if(t.npm.length===0&&t.pnpm.length===0)return{diagnostics:Xh([...t.diagnostics,{kind:`no_workspace_declaration`}]),packages:[]};let n=await J_(e,t),[r,i]=await Promise.all([u_(e),Promise.all(n.dirs.map(t=>n_(e,t)))]),a=r_([...r,...i]);return{diagnostics:Xh([...t.diagnostics,...n.diagnostics,...a.diagnostics]),packages:d_(Gh(a.packages))}};var X_=`0.14.0`;const Z_=async()=>{let e=[];for await(let t of process.stdin)e.push(Buffer.from(t));return Buffer.concat(e).toString(`utf8`)},Q_=()=>{try{return he()}catch{return``}},$_=()=>({cliVersion:X_,cwd:process.cwd(),env:process.env,errLine:e=>{process.stderr.write(`${e}\n`)},fetcher:(e,t)=>fetch(e,t),homedir:Q_(),nodeVersion:process.version,out:e=>{process.stdout.write(`${e}\n`)},readStdin:Z_,runner:new Tg});var ev=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},tv=class extends ev{constructor(e){super(1,`commander.invalidArgument`,e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}},nv=class{constructor(e,t){switch(this.description=t||``,this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case`<`:this.required=!0,this._name=e.slice(1,-1);break;case`[`:this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e}this._name.endsWith(`...`)&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(e,t)=>{if(!this.argChoices.includes(e))throw new tv(`Allowed choices are ${this.argChoices.join(`, `)}.`);return this.variadic?this._collectValue(e,t):e},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function rv(e){let t=e.name()+(e.variadic===!0?`...`:``);return e.required?`<`+t+`>`:`[`+t+`]`}var iv=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let t=e.commands.filter(e=>!e._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((e,t)=>e.name().localeCompare(t.name())),t}compareOptions(e,t){let n=e=>e.short?e.short.replace(/^-/,``):e.long.replace(/^--/,``);return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(e=>!e.hidden),n=e._getHelpOption();if(n&&!n.hidden){let r=n.short&&e._findOption(n.short),i=n.long&&e._findOption(n.long);!r&&!i?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!r&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let e=n.options.filter(e=>!e.hidden);t.push(...e)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||``}),e.registeredArguments.find(e=>e.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(e=>rv(e)).join(` `);return e._name+(e._aliases[0]?`|`+e._aliases[0]:``)+(e.options.length?` [options]`:``)+(t?` `+t:``)}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleSubcommandTerm(t.subcommandTerm(n)))),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleArgumentTerm(t.argumentTerm(n)))),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+`|`+e._aliases[0]);let n=``;for(let t=e.parent;t;t=t.parent)n=t.name()+` `+n;return n+t+` `+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(e=>JSON.stringify(e)).join(`, `)}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue==`boolean`)&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0){let n=`(${t.join(`, `)})`;return e.description?`${e.description} ${n}`:n}return e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(e=>JSON.stringify(e)).join(`, `)}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(`, `)})`;return e.description?`${e.description} ${n}`:n}return e.description}formatItemList(e,t,n){return t.length===0?[]:[n.styleTitle(e),...t,``]}groupItems(e,t,n){let r=new Map;return e.forEach(e=>{let t=n(e);r.has(t)||r.set(t,[])}),t.forEach(e=>{let t=n(e);r.has(t)||r.set(t,[]),r.get(t).push(e)}),r}formatHelp(e,t){let n=t.padWidth(e,t),r=t.helpWidth??80;function i(e,r){return t.formatItem(e,n,r,t)}let a=[`${t.styleTitle(`Usage:`)} ${t.styleUsage(t.commandUsage(e))}`,``],o=t.commandDescription(e);o.length>0&&(a=a.concat([t.boxWrap(t.styleCommandDescription(o),r),``]));let s=t.visibleArguments(e).map(e=>i(t.styleArgumentTerm(t.argumentTerm(e)),t.styleArgumentDescription(t.argumentDescription(e))));if(a=a.concat(this.formatItemList(`Arguments:`,s,t)),this.groupItems(e.options,t.visibleOptions(e),e=>e.helpGroupHeading??`Options:`).forEach((e,n)=>{let r=e.map(e=>i(t.styleOptionTerm(t.optionTerm(e)),t.styleOptionDescription(t.optionDescription(e))));a=a.concat(this.formatItemList(n,r,t))}),t.showGlobalOptions){let n=t.visibleGlobalOptions(e).map(e=>i(t.styleOptionTerm(t.optionTerm(e)),t.styleOptionDescription(t.optionDescription(e))));a=a.concat(this.formatItemList(`Global Options:`,n,t))}return this.groupItems(e.commands,t.visibleCommands(e),e=>e.helpGroup()||`Commands:`).forEach((e,n)=>{let r=e.map(e=>i(t.styleSubcommandTerm(t.subcommandTerm(e)),t.styleSubcommandDescription(t.subcommandDescription(e))));a=a.concat(this.formatItemList(n,r,t))}),a.join(`
328
+ `),dg=(e,t,n)=>{let r=e;return t.truncated&&(r=ug(r,`refs: stdout exceeded 67108864 bytes, truncated`)),n.truncated&&(r=ug(r,`refs: stderr exceeded 67108864 bytes, truncated`)),r},fg={clear:()=>{},markedTimedOut:()=>!1},pg=(e,t)=>{if(t===void 0)return fg;let n=!1,r,i=setTimeout(()=>{n=!0,e.kill(`SIGTERM`),r=setTimeout(()=>{e.kill(`SIGKILL`)},2e3)},t);return{clear:()=>{clearTimeout(i),r!==void 0&&clearTimeout(r)},markedTimedOut:()=>n}},mg=e=>e===void 0?{}:{cwd:e},hg=(e,t)=>ug(e,`refs: command timed out after ${String(t)}ms`),gg=(e,t)=>({exitCode:124,stderr:hg(e,t),stdout:``,timedOut:!0}),_g=(e,t,n)=>{let r=be(e,t,{...mg(n?.cwd),stdio:[`ignore`,`pipe`,`pipe`]});rg.add(r);let i=lg(),a=lg();return r.stdout.on(`data`,e=>{i.push(e)}),r.stderr.on(`data`,e=>{a.push(e)}),{child:r,stderrCollector:a,stdoutCollector:i,timeout:pg(r,n?.timeoutMs)}},vg=(e,t,n)=>{try{return _g(e,t,n)}catch(e){return{exitCode:127,stderr:bg(e),stdout:``}}},yg=e=>!(`child`in e),bg=e=>e instanceof Error?e.message:String(e),xg=async e=>{try{let[t]=await ve(e,`close`);return{code:t}}catch(e){return{code:null,errorMessage:bg(e)}}},Sg=e=>e===null?1:e,Cg=(e,t)=>t.truncated?{...e,stdoutTruncated:!0}:e,wg=e=>e.timedOut?gg(e.stderr.text,e.timeoutMs):e.errorMessage===void 0?Cg({exitCode:Sg(e.code),stderr:dg(e.stderr.text,e.stdout,e.stderr),stdout:e.stdout.text},e.stdout):Cg({exitCode:127,stderr:ug(e.stderr.text,e.errorMessage),stdout:e.stdout.text},e.stdout);var Tg=class{async run(e,t,n){cg();let r=vg(e,t,n);if(yg(r))return r;let i=await xg(r.child);return rg.delete(r.child),r.timeout.clear(),wg({code:i.code,errorMessage:i.errorMessage,stderr:r.stderrCollector.finish(),stdout:r.stdoutCollector.finish(),timedOut:r.timeout.markedTimedOut(),timeoutMs:n?.timeoutMs})}};const Eg=hl.partial({description:!0}),Dg=I({default_branch:P().min(1),key:il,tag_format_candidate:ll.nullable(),url:P().min(1)});Dg.extend({description:P().default(``),packages:Gc(Eg)});const Og=Dg.extend({description:P().min(1),packages:Gc(hl)}),kg=I({effective_clone_mode:sl.optional(),head_sha:P().regex(/^[0-9a-f]{40}$/u,`head_sha must be a 40-character lowercase hex string`).optional(),last_error:P().optional(),last_fetched_at:Vc().optional(),pending_proposal_at:Vc().optional()}),Ag=I({refs:Uc(e=>e.length>0&&!Hc.has(e),()=>`state ref key must be non-empty and not "__proto__", "constructor", or "prototype"`,pc(P(),kg)).default({})}),jg=(e,t,n)=>t?.[e]??n[e],Mg=async e=>{try{return await s(e.statePath,`utf8`)}catch(e){if(R(e))return;throw e}},Ng=e=>{try{return JSON.parse(e)}catch{return}},Pg=async e=>{let t=await Mg(e);if(t===void 0)return Ag.parse({});let n=Ng(t);if(n===void 0)return Ag.parse({});let r=Ag.safeParse(n);return r.success?r.data:Ag.parse({})},Fg=async(e,t)=>{let n=Ag.safeParse(t);if(!n.success)throw y(T(n.error));await $l(e.statePath,`${JSON.stringify(n.data,void 0,2)}\n`)},Ig=/^\d+\.\d+\.\d+$/u,Lg=/^0+(?=\d)/u,Rg=(e,t)=>{let n=e.replace(Lg,``),r=t.replace(Lg,``);return n.length===r.length?n===r?0:n<r?-1:1:n.length<r.length?-1:1},zg=(e,t)=>{if(!Ig.test(e)||!Ig.test(t))return;let n=e.split(`.`),r=t.split(`.`);return n.map((e,t)=>Rg(e,r[t]??``)).find(e=>e!==0)??0},Bg=sc({version:P().regex(Ig)}),Vg=I({checked_at:Vc(),latest_version:P().regex(Ig)}),Hg=async e=>{try{let t=Vg.safeParse(JSON.parse(await s(e.updateCachePath,`utf8`)));return t.success?t.data:void 0}catch{return}},Ug=async(e,t)=>{try{await p(e.root),await $l(e.updateCachePath,`${JSON.stringify(t,void 0,2)}\n`)}catch{}},Wg=(e,t)=>{let n=t-Date.parse(e.checked_at);return n>=0&&n<864e5},Gg=async e=>{try{let t=await e(`https://registry.npmjs.org/@kaisers-io%2Frefs/latest`,{signal:AbortSignal.timeout(2e3)});if(t.status!==200)return;let n=Bg.safeParse(await t.json());return n.success?n.data.version:void 0}catch{return}},Kg=async e=>{let t=await Hg(e.home);if(t!==void 0&&Wg(t,e.nowMs))return{latest:t.latest_version,refreshed:!1,stale:!1};let n=await Gg(e.fetch);return n===void 0?{latest:t?.latest_version,refreshed:!1,stale:!0}:(await Ug(e.home,{checked_at:new Date(e.nowMs).toISOString(),latest_version:n}),{latest:n,refreshed:!0,stale:!1})},qg=(e,t)=>{let n=zg(e,t);return n!==void 0&&n<0},Jg=(e,t)=>`refs ${t} is available (this is ${e}) — update: npm i -g @kaisers-io/refs@latest`,Yg=e=>{let t=e.REFS_UPDATE_CHECK?.trim();if(t===`0`)return!1;if(t===`1`)return!0},Xg=e=>{let t=e.CI?.trim().toLowerCase();return t!==void 0&&t!==``&&t!==`false`&&t!==`0`},Zg={check:!0,notify:!0},Qg=e=>{let t=Yg(e.env);return t===void 0?(e.updates??Zg).check?Xg(e.env)?`ci`:`on`:`config`:t?`on`:`env`},$g=e=>Qg(e)===`on`,e_=e=>$g(e)&&(e.updates??Zg).notify,t_=async(e,t)=>{let n=await Ou(e,m(t,`package.json`));if(n.kind===`inside`)try{let e=JSON.parse(await s(n.real,`utf8`));return{name:Lu(e)}}catch{return}},n_=async(e,t)=>{let n=await t_(e,m(e,t));if(n===void 0)return{diagnostic:{kind:`manifest_unreadable`,path:t}};let r=Wh(t,n);return r===void 0?{diagnostic:{kind:`manifest_missing_name`,path:t}}:{pkg:r}},r_=e=>{let t=[],n=[];for(let r of e)r.diagnostic!==void 0&&t.push(r.diagnostic),r.pkg!==void 0&&n.push(r.pkg);return{diagnostics:t,packages:n}},i_=new Set([`ENOENT`,`ENOTDIR`]),a_=async(e,t)=>{let n=await Ou(e,m(t,`package.json`));if(n.kind===`missing`)return`none`;if(n.kind!==`inside`)return`rejected`;try{return await s(n.real,`utf8`),`manifest`}catch{return`rejected`}},o_=async e=>{try{return{entries:await c(e,{withFileTypes:!0})}}catch(e){return{code:e.code??``}}},s_=e=>Promise.all(e.entries.map(t=>a_(e.repoDir,m(e.fullPath,t.name,e.suffix)))),c_=(e,t,n)=>e.filter((e,r)=>n(t[r])).map(e=>e.name),l_=async e=>{let{baseDir:t,dirs:n,fullPath:r,repoDir:i,suffix:a,symlinks:o}=e,s=e=>oe.join(t===`.`?``:t,e,a),[c,l]=await Promise.all([s_({entries:n,fullPath:r,repoDir:i,suffix:a}),s_({entries:o,fullPath:r,repoDir:i,suffix:a})]);return{diagnostics:[...c_(n,c,e=>e===`rejected`).map(e=>({kind:`manifest_unreadable`,path:s(e)})),...c_(o,l,e=>e!==`none`).map(e=>({kind:`candidate_not_inspected`,path:s(e)}))],dirs:c_(n,c,e=>e===`manifest`).map(e=>s(e))}},u_=async e=>{let t=await n_(e,`.`);return`pkg`in t?[t]:[]},d_=e=>{let t=e.find(e=>e.path===`.`);return t===void 0?[...e]:e.some(e=>e.path!==`.`&&e.name===t.name)?e.filter(e=>e!==t):[...e]},f_=async e=>{let[t]=await u_(e);return t!==void 0&&`pkg`in t?t.pkg:void 0},p_=`package.json`,m_=e=>{let t=Rh(e).split(`/`);return t.includes(`**`)?void 0:t.length},h_=e=>Rh(e).split(`/`).some(e=>e.startsWith(`.`)),g_=e=>e===`.`?0:e.split(`/`).length,__=e=>{let t=Rh(e),n=new Eh(`${t}/${p_}`),r=new Eh(t);return{couldHold:e=>r.match(e,!0),selects:e=>n.match(oe.join(e,p_))}},v_=e=>({...__(e),maxDepth:m_(e),selectsHidden:h_(e)}),y_=new Set([`ENOENT`,`ENOTDIR`]),b_=new Set([`.git`,`node_modules`]),x_=e=>e.some(e=>e.name.toLowerCase()===`package.json`&&!e.isDirectory()),S_=e=>e.some(e=>e.isSymbolicLink()&&!b_.has(e.name)),C_=async(e,t)=>{let n=await o_(t);return`code`in n?{answer:y_.has(n.code)}:(e.budget.entries-=n.entries.length,e.budget.entries<0||x_(n.entries)||S_(n.entries)?{answer:!1}:{entries:n.entries})},w_=async(e,t,n)=>{if(e.budget.dirs<=0||n>32)return!1;--e.budget.dirs;let r=await C_(e,t);return`answer`in r?r.answer:T_(e,{dir:t,entries:r.entries},n)},T_=async(e,t,n)=>{let r=t.entries.filter(e=>e.isDirectory()&&!b_.has(e.name));for(let i of r)if(!await w_(e,m(t.dir,i.name),n+1))return!1;return!0},E_=async(e,t)=>{let n=await Ou(e.repoDir,m(e.repoDir,t));if(n.kind!==`outside`&&n.kind!==`missing`){if(n.kind===`unreadable`){e.diagnostics.push({kind:`candidate_not_inspected`,path:t});return}await w_(e,n.real,1)||e.diagnostics.push({kind:`candidate_not_inspected`,path:t})}},D_=()=>({dirs:2e4,entries:2e5}),O_=new Set([`.git`,`node_modules`]),k_=(e,t)=>{e.diagnostics.push({kind:`scan_budget_exhausted`,path:t,pattern:e.pattern})},A_=async(e,t,n)=>{if(!e.selects(t)||n.has(t))return;let r=await a_(e.repoDir,m(e.repoDir,t));r===`manifest`&&e.dirs.push(t),r===`rejected`&&e.diagnostics.push({kind:`manifest_unreadable`,path:t})},j_=(e,t)=>!e.selectsHidden&&t.excluded.coversSubtree(t.relPath),M_=async(e,t,n)=>!e.couldHold(n.relPath)||O_.has(t.name)||j_(e,n)?!1:t.isSymbolicLink()?(j_(e,n)||await E_(e,n.relPath),!1):t.isDirectory(),N_=async(e,t)=>{let n=await o_(m(e.repoDir,t));if(`code`in n){i_.has(n.code)||e.diagnostics.push({kind:`workspace_dir_unreadable`,path:t});return}if(e.budget.entries-=n.entries.length,e.budget.entries<0){k_(e,t);return}return n.entries},P_=async(e,t,n)=>{if(e.budget.dirs<=0){k_(e,t.relPath);return}if(--e.budget.dirs,await A_(e,t.relPath,n),e.maxDepth!==void 0&&g_(t.relPath)>=e.maxDepth)return;let r=await N_(e,t.relPath);r!==void 0&&await I_(e,{depth:t.depth,entries:r,relPath:t.relPath},n)},F_=(e,t)=>oe.join(e===`.`?``:e,t),I_=async(e,t,n)=>{for(let r of t.entries){let i=F_(t.relPath,r.name);await M_(e,r,{excluded:n,relPath:i})&&(t.depth+1>32?k_(e,i):await P_(e,{depth:t.depth+1,relPath:i},n))}},L_=async(e,t)=>{let n=await Ou(e,m(e,t));if(n.kind!==`inside`)return n.kind===`missing`?{diagnostics:[],dirs:[]}:{diagnostics:[{kind:`workspace_dir_unreadable`,path:t}],dirs:[]}},R_=async(e,t,n)=>{let r=await L_(e,t.baseDir);if(r!==void 0)return r;let i={...v_(t.pattern),budget:n.budget,diagnostics:[],dirs:[],pattern:t.pattern,repoDir:e};return await P_(i,{depth:1,relPath:t.baseDir},n.excluded),{diagnostics:i.diagnostics,dirs:i.dirs}},z_=(e,t)=>oe.join(e.baseDir===`.`?``:e.baseDir,t,e.suffix),B_=(e,t)=>Lh(z_(t,e.name),t.pattern),V_=async(e,t)=>{let n=m(e,t),r=await Ou(e,n);if(r.kind===`missing`)return{result:{diagnostics:[],dirs:[]}};if(r.kind!==`inside`)return{result:{diagnostics:[{kind:`workspace_dir_unreadable`,path:t}],dirs:[]}};let i=await o_(n);return`code`in i?{result:i_.has(i.code)?{diagnostics:[],dirs:[]}:{diagnostics:[{kind:`workspace_dir_unreadable`,path:t}],dirs:[]}}:{entries:i.entries}},H_=async(e,t,n)=>{let{baseDir:r}=t,i=await V_(e,r);if(`result`in i)return i.result;let a=e=>B_(e,t)&&!n.has(z_(t,e.name)),o={entries:i.entries};return l_({baseDir:r,dirs:o.entries.filter(e=>e.isDirectory()&&a(e)),fullPath:m(e,r),repoDir:e,suffix:t.suffix,symlinks:o.entries.filter(e=>e.isSymbolicLink()&&a(e))})},U_=async(e,t)=>{let n=await a_(e,m(e,t));return n===`manifest`?{diagnostics:[],dirs:[Rh(t)]}:n===`rejected`?{diagnostics:[{kind:`manifest_unreadable`,path:t}],dirs:[]}:{diagnostics:[],dirs:[]}},W_=(e,t,n)=>{let{excluded:r}=n,i=Hh(t.body);return i.kind===`expand-children`?H_(e,i,r):i.kind===`expand-recursive`?R_(e,i,n):i.kind===`probe-dir`?r.has(Rh(i.dir))?Promise.resolve({diagnostics:[],dirs:[]}):U_(e,i.dir):Promise.resolve({diagnostics:[{kind:`unsupported_pattern`,pattern:t.declared}],dirs:[]})},G_=(e,t)=>Lh(Ph(e),Ph(t)),K_=e=>({negations:e.filter(e=>Nh(e)),patterns:e.filter(e=>!Nh(e))}),q_=e=>{let t=e.reduce((e,t)=>Nh(t)?{negations:[...e.negations,t],patterns:e.patterns}:{negations:e.negations.filter(e=>!G_(t,e)),patterns:[...e.patterns,t]},{negations:[],patterns:[]});return{negations:t.negations,patterns:t.patterns.filter(e=>!t.negations.some(t=>G_(e,t)))}},J_=e=>e.endsWith(`/`)?e:`${e}/`,Y_=(e,t)=>e.some(e=>Lh(J_(t),J_(Ph(e)))),X_=(e,t)=>{let n=Ph(e);return n.endsWith(`/**`)&&Lh(t,n.slice(0,-3))},Z_=e=>({coversSubtree:t=>e.some(e=>X_(e,t)),has:t=>Y_(e,t)}),Q_=e=>{let t=new Set,n=[];for(let r of e)r.dirs.forEach(e=>t.add(e)),n.push(...r.diagnostics);return{diagnostics:n,dirs:[...t]}},$_=async(e,t,n)=>{let{negations:r,patterns:i}=t,a=Z_(r),o=Q_(await Promise.all(i.map(t=>W_(e,{body:Ph(t),declared:t},{budget:n,excluded:a}))));return{diagnostics:o.diagnostics,dirs:o.dirs}},ev=async(e,t)=>{let n=q_(t.npm),r=K_(t.pnpm),i=D_(),a=await Promise.all([$_(e,n,i),$_(e,r,i)]);return Q_(a)},tv=async e=>{let t=await Wu(e);if(t.npm.length===0&&t.pnpm.length===0)return{diagnostics:Xh([...t.diagnostics,{kind:`no_workspace_declaration`}]),packages:[]};let n=await ev(e,t),[r,i]=await Promise.all([u_(e),Promise.all(n.dirs.map(t=>n_(e,t)))]),a=r_([...r,...i]);return{diagnostics:Xh([...t.diagnostics,...n.diagnostics,...a.diagnostics]),packages:d_(Gh(a.packages))}};var nv=`0.15.0`;const rv=async()=>{let e=[];for await(let t of process.stdin)e.push(Buffer.from(t));return Buffer.concat(e).toString(`utf8`)},iv=()=>{try{return he()}catch{return``}},av=()=>({cliVersion:nv,cwd:process.cwd(),env:process.env,errLine:e=>{process.stderr.write(`${e}\n`)},fetcher:(e,t)=>fetch(e,t),homedir:iv(),nodeVersion:process.version,out:e=>{process.stdout.write(`${e}\n`)},readStdin:rv,runner:new Tg});var ov=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},sv=class extends ov{constructor(e){super(1,`commander.invalidArgument`,e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}},cv=class{constructor(e,t){switch(this.description=t||``,this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case`<`:this.required=!0,this._name=e.slice(1,-1);break;case`[`:this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e}this._name.endsWith(`...`)&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(e,t)=>{if(!this.argChoices.includes(e))throw new sv(`Allowed choices are ${this.argChoices.join(`, `)}.`);return this.variadic?this._collectValue(e,t):e},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function lv(e){let t=e.name()+(e.variadic===!0?`...`:``);return e.required?`<`+t+`>`:`[`+t+`]`}var uv=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(e){this.helpWidth=this.helpWidth??e.helpWidth??80}visibleCommands(e){let t=e.commands.filter(e=>!e._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((e,t)=>e.name().localeCompare(t.name())),t}compareOptions(e,t){let n=e=>e.short?e.short.replace(/^-/,``):e.long.replace(/^--/,``);return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(e=>!e.hidden),n=e._getHelpOption();if(n&&!n.hidden){let r=n.short&&e._findOption(n.short),i=n.long&&e._findOption(n.long);!r&&!i?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!r&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let e=n.options.filter(e=>!e.hidden);t.push(...e)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||``}),e.registeredArguments.find(e=>e.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(e=>lv(e)).join(` `);return e._name+(e._aliases[0]?`|`+e._aliases[0]:``)+(e.options.length?` [options]`:``)+(t?` `+t:``)}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleSubcommandTerm(t.subcommandTerm(n)))),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleOptionTerm(t.optionTerm(n)))),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((e,n)=>Math.max(e,this.displayWidth(t.styleArgumentTerm(t.argumentTerm(n)))),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+`|`+e._aliases[0]);let n=``;for(let t=e.parent;t;t=t.parent)n=t.name()+` `+n;return n+t+` `+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(e=>JSON.stringify(e)).join(`, `)}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue==`boolean`)&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0){let n=`(${t.join(`, `)})`;return e.description?`${e.description} ${n}`:n}return e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(e=>JSON.stringify(e)).join(`, `)}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(`, `)})`;return e.description?`${e.description} ${n}`:n}return e.description}formatItemList(e,t,n){return t.length===0?[]:[n.styleTitle(e),...t,``]}groupItems(e,t,n){let r=new Map;return e.forEach(e=>{let t=n(e);r.has(t)||r.set(t,[])}),t.forEach(e=>{let t=n(e);r.has(t)||r.set(t,[]),r.get(t).push(e)}),r}formatHelp(e,t){let n=t.padWidth(e,t),r=t.helpWidth??80;function i(e,r){return t.formatItem(e,n,r,t)}let a=[`${t.styleTitle(`Usage:`)} ${t.styleUsage(t.commandUsage(e))}`,``],o=t.commandDescription(e);o.length>0&&(a=a.concat([t.boxWrap(t.styleCommandDescription(o),r),``]));let s=t.visibleArguments(e).map(e=>i(t.styleArgumentTerm(t.argumentTerm(e)),t.styleArgumentDescription(t.argumentDescription(e))));if(a=a.concat(this.formatItemList(`Arguments:`,s,t)),this.groupItems(e.options,t.visibleOptions(e),e=>e.helpGroupHeading??`Options:`).forEach((e,n)=>{let r=e.map(e=>i(t.styleOptionTerm(t.optionTerm(e)),t.styleOptionDescription(t.optionDescription(e))));a=a.concat(this.formatItemList(n,r,t))}),t.showGlobalOptions){let n=t.visibleGlobalOptions(e).map(e=>i(t.styleOptionTerm(t.optionTerm(e)),t.styleOptionDescription(t.optionDescription(e))));a=a.concat(this.formatItemList(`Global Options:`,n,t))}return this.groupItems(e.commands,t.visibleCommands(e),e=>e.helpGroup()||`Commands:`).forEach((e,n)=>{let r=e.map(e=>i(t.styleSubcommandTerm(t.subcommandTerm(e)),t.styleSubcommandDescription(t.subcommandDescription(e))));a=a.concat(this.formatItemList(n,r,t))}),a.join(`
329
329
  `)}displayWidth(e){return xe(e).length}styleTitle(e){return e}styleUsage(e){return e.split(` `).map(e=>e===`[options]`?this.styleOptionText(e):e===`[command]`?this.styleSubcommandText(e):e[0]===`[`||e[0]===`<`?this.styleArgumentText(e):this.styleCommandText(e)).join(` `)}styleCommandDescription(e){return this.styleDescriptionText(e)}styleOptionDescription(e){return this.styleDescriptionText(e)}styleSubcommandDescription(e){return this.styleDescriptionText(e)}styleArgumentDescription(e){return this.styleDescriptionText(e)}styleDescriptionText(e){return e}styleOptionTerm(e){return this.styleOptionText(e)}styleSubcommandTerm(e){return e.split(` `).map(e=>e===`[options]`?this.styleOptionText(e):e[0]===`[`||e[0]===`<`?this.styleArgumentText(e):this.styleSubcommandText(e)).join(` `)}styleArgumentTerm(e){return this.styleArgumentText(e)}styleOptionText(e){return e}styleArgumentText(e){return e}styleSubcommandText(e){return e}styleCommandText(e){return e}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}preformatted(e){return/\n[^\S\r\n]/.test(e)}formatItem(e,t,n,r){let i=` `.repeat(2);if(!n)return i+e;let a=e.padEnd(t+e.length-r.displayWidth(e)),o=(this.helpWidth??80)-t-2-2,s;return s=o<this.minWidthToWrap||r.preformatted(n)?n:r.boxWrap(n,o).replace(/\n/g,`
330
330
  `+` `.repeat(t+2)),i+a+` `.repeat(2)+s.replace(/\n/g,`\n${i}`)}boxWrap(e,t){if(t<this.minWidthToWrap)return e;let n=e.split(/\r\n|\n/),r=/[\s]*[^\s]+/g,i=[];return n.forEach(e=>{let n=e.match(r);if(n===null){i.push(``);return}let a=[n.shift()],o=this.displayWidth(a[0]);n.forEach(e=>{let n=this.displayWidth(e);if(o+n<=t){a.push(e),o+=n;return}i.push(a.join(``));let r=e.trimStart();a=[r],o=this.displayWidth(r)}),i.push(a.join(``))}),i.join(`
331
- `)}},av=class{constructor(e,t){this.flags=e,this.description=t||``,this.required=e.includes(`<`),this.optional=e.includes(`[`),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=cv(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith(`--no-`)),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e==`string`&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}choices(e){return this.argChoices=e.slice(),this.parseArg=(e,t)=>{if(!this.argChoices.includes(e))throw new tv(`Allowed choices are ${this.argChoices.join(`, `)}.`);return this.variadic?this._collectValue(e,t):e},this}name(){return this.long?this.long.replace(/^--/,``):this.short.replace(/^-/,``)}attributeName(){return this.negate?sv(this.name().replace(/^no-/,``)):sv(this.name())}helpGroup(e){return this.helpGroupHeading=e,this}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},ov=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(e=>{e.negate?this.negativeOptions.set(e.attributeName(),e):this.positiveOptions.set(e.attributeName(),e)}),this.negativeOptions.forEach((e,t)=>{this.positiveOptions.has(t)&&this.dualOptions.add(t)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let r=this.negativeOptions.get(n).presetArg,i=r!==void 0&&r;return t.negate===(i===e)}};function sv(e){return e.split(`-`).reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function cv(e){let t,n,r=/^-[^-]$/,i=/^--[^-]/,a=e.split(/[ |,]+/).concat(`guard`);if(r.test(a[0])&&(t=a.shift()),i.test(a[0])&&(n=a.shift()),!t&&r.test(a[0])&&(t=a.shift()),!t&&i.test(a[0])&&(t=n,n=a.shift()),a[0].startsWith(`-`)){let t=a[0],n=`option creation failed due to '${t}' in option flags '${e}'`;throw/^-[^-][^-]/.test(t)?Error(`${n}
331
+ `)}},dv=class{constructor(e,t){this.flags=e,this.description=t||``,this.required=e.includes(`<`),this.optional=e.includes(`[`),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=mv(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith(`--no-`)),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0,this.helpGroupHeading=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e==`string`&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_collectValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:(t.push(e),t)}choices(e){return this.argChoices=e.slice(),this.parseArg=(e,t)=>{if(!this.argChoices.includes(e))throw new sv(`Allowed choices are ${this.argChoices.join(`, `)}.`);return this.variadic?this._collectValue(e,t):e},this}name(){return this.long?this.long.replace(/^--/,``):this.short.replace(/^-/,``)}attributeName(){return this.negate?pv(this.name().replace(/^no-/,``)):pv(this.name())}helpGroup(e){return this.helpGroupHeading=e,this}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},fv=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(e=>{e.negate?this.negativeOptions.set(e.attributeName(),e):this.positiveOptions.set(e.attributeName(),e)}),this.negativeOptions.forEach((e,t)=>{this.positiveOptions.has(t)&&this.dualOptions.add(t)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let r=this.negativeOptions.get(n).presetArg,i=r!==void 0&&r;return t.negate===(i===e)}};function pv(e){return e.split(`-`).reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function mv(e){let t,n,r=/^-[^-]$/,i=/^--[^-]/,a=e.split(/[ |,]+/).concat(`guard`);if(r.test(a[0])&&(t=a.shift()),i.test(a[0])&&(n=a.shift()),!t&&r.test(a[0])&&(t=a.shift()),!t&&i.test(a[0])&&(t=n,n=a.shift()),a[0].startsWith(`-`)){let t=a[0],n=`option creation failed due to '${t}' in option flags '${e}'`;throw/^-[^-][^-]/.test(t)?Error(`${n}
332
332
  - a short flag is a single dash and a single character
333
333
  - either use a single dash and a single character (for a short flag)
334
334
  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`):r.test(t)?Error(`${n}
335
335
  - too many short flags`):i.test(t)?Error(`${n}
336
336
  - too many long flags`):Error(`${n}
337
- - unrecognised flag format`)}if(t===void 0&&n===void 0)throw Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:n}}function lv(e,t){if(Math.abs(e.length-t.length)>3)return Math.max(e.length,t.length);let n=[];for(let t=0;t<=e.length;t++)n[t]=[t];for(let e=0;e<=t.length;e++)n[0][e]=e;for(let r=1;r<=t.length;r++)for(let i=1;i<=e.length;i++){let a;a=e[i-1]===t[r-1]?0:1,n[i][r]=Math.min(n[i-1][r]+1,n[i][r-1]+1,n[i-1][r-1]+a),i>1&&r>1&&e[i-1]===t[r-2]&&e[i-2]===t[r-1]&&(n[i][r]=Math.min(n[i][r],n[i-2][r-2]+1))}return n[e.length][t.length]}function uv(e,t){if(!t||t.length===0)return``;t=Array.from(new Set(t));let n=e.startsWith(`--`);n&&(e=e.slice(2),t=t.map(e=>e.slice(2)));let r=[],i=3;return t.forEach(t=>{if(t.length<=1)return;let n=lv(e,t),a=Math.max(e.length,t.length);(a-n)/a>.4&&(n<i?(i=n,r=[t]):n===i&&r.push(t))}),r.sort((e,t)=>e.localeCompare(t)),n&&(r=r.map(e=>`--${e}`)),r.length>1?`\n(Did you mean one of ${r.join(`, `)}?)`:r.length===1?`\n(Did you mean ${r[0]}?)`:``}var dv=class e extends _e{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||``,this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description=``,this._summary=``,this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:e=>h.stdout.write(e),writeErr:e=>h.stderr.write(e),outputError:(e,t)=>t(e),getOutHelpWidth:()=>h.stdout.isTTY?h.stdout.columns:void 0,getErrHelpWidth:()=>h.stderr.isTTY?h.stderr.columns:void 0,getOutHasColors:()=>pv()??(h.stdout.isTTY&&h.stdout.hasColors?.()),getErrHasColors:()=>pv()??(h.stderr.isTTY&&h.stderr.hasColors?.()),stripColor:e=>xe(e)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let r=t,i=n;typeof r==`object`&&r&&(i=r,r=null),i||={};let[,a,o]=e.match(/([^ ]+) *(.*)/),s=this.createCommand(a);return r&&(s.description(r),s._executableHandler=!0),i.isDefault&&(this._defaultCommandName=s._name),s._hidden=!!(i.noHelp||i.hidden),s._executableFile=i.executableFile||null,o&&s.arguments(o),this._registerCommand(s),s.parent=this,s.copyInheritedSettings(this),r?this:s}createCommand(t){return new e(t)}createHelp(){return Object.assign(new iv,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...e},this)}showHelpAfterError(e=!0){return typeof e!=`string`&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw Error(`Command passed to .addCommand() must have a name
338
- - specify the name in Command constructor or using .name()`);return t||={},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new nv(e,t)}argument(e,t,n,r){let i=this.createArgument(e,t);return typeof n==`function`?i.default(r).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(e=>{this.argument(e)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t?.variadic)throw Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e==`boolean`)return this._addImplicitHelpCommand=e,e&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;let[,n,r]=(e??`help [command]`).match(/([^ ]+) *(.*)/),i=t??`display help for command`,a=this.createCommand(n);return a.helpOption(!1),r&&a.arguments(r),i&&a.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=a,(e||t)&&this._initCommandGroup(a),this}addHelpCommand(e,t){return typeof e==`object`?(this._addImplicitHelpCommand=!0,this._helpCommand=e,this._initCommandGroup(e),this):(this.helpCommand(e,t),this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand(`help`))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let n=[`preSubcommand`,`preAction`,`postAction`];if(!n.includes(e))throw Error(`Unexpected value for event passed to hook : '${e}'.
339
- Expecting one of '${n.join(`', '`)}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return this._exitCallback=e||(e=>{if(e.code!==`commander.executeSubCommandAsync`)throw e}),this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new ev(e,t,n)),h.exit(e)}action(e){let t=t=>{let n=this.registeredArguments.length,r=t.slice(0,n);return r[n]=this._storeOptionsAsProperties?this:this.opts(),r.push(this),e.apply(this,r)};return this._actionHandler=t,this}createOption(e,t){return new av(e,t)}_callParseArg(e,t,n,r){try{return e.parseArg(t,n)}catch(e){if(e.code===`commander.invalidArgument`){let t=`${r} ${e.message}`;this.error(t,{exitCode:e.exitCode,code:e.code})}throw e}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let n=e.long&&this._findOption(e.long)?e.long:e.short;throw Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
340
- - already used by option '${t.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){let t=e=>[e.name()].concat(e.aliases()),n=t(e).find(e=>this._findCommand(e));if(n){let r=t(this._findCommand(n)).join(`|`),i=t(e).join(`|`);throw Error(`cannot add command '${i}' as already have command '${r}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,`default`);let r=(t,r,i)=>{t==null&&e.presetArg!==void 0&&(t=e.presetArg);let a=this.getOptionValue(n);t!==null&&e.parseArg?t=this._callParseArg(e,t,a,r):t!==null&&e.variadic&&(t=e._collectValue(t,a)),t??=e.negate?!1:e.isBoolean()||e.optional?!0:``,this.setOptionValueWithSource(n,t,i)};return this.on(`option:`+t,t=>{let n=`error: option '${e.flags}' argument '${t}' is invalid.`;r(t,n,`cli`)}),e.envVar&&this.on(`optionEnv:`+t,t=>{let n=`error: option '${e.flags}' value '${t}' from env '${e.envVar}' is invalid.`;r(t,n,`env`)}),this}_optionEx(e,t,n,r,i){if(typeof t==`object`&&t instanceof av)throw Error(`To add an Option object use addOption() instead of option() or requiredOption()`);let a=this.createOption(t,n);if(a.makeOptionMandatory(!!e.mandatory),typeof r==`function`)a.default(i).argParser(r);else if(r instanceof RegExp){let e=r;r=(t,n)=>{let r=e.exec(t);return r?r[0]:n},a.default(i).argParser(r)}else a.default(r);return this.addOption(a)}option(e,t,n,r){return this._optionEx({},e,t,n,r)}requiredOption(e,t,n,r){return this._optionEx({mandatory:!0},e,t,n,r)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw Error(`call .storeOptionsAsProperties() before adding options`);if(Object.keys(this._optionValues).length)throw Error(`call .storeOptionsAsProperties() before setting option values`);return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,n){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(t=n.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw Error(`first parameter to parse must be array or undefined`);if(t||={},e===void 0&&t.from===void 0){h.versions?.electron&&(t.from=`electron`);let e=h.execArgv??[];(e.includes(`-e`)||e.includes(`--eval`)||e.includes(`-p`)||e.includes(`--print`))&&(t.from=`eval`)}e===void 0&&(e=h.argv),this.rawArgs=e.slice();let n;switch(t.from){case void 0:case`node`:this._scriptPath=e[1],n=e.slice(2);break;case`electron`:h.defaultApp?(this._scriptPath=e[1],n=e.slice(2)):n=e.slice(1);break;case`user`:n=e.slice(0);break;case`eval`:n=e.slice(1);break;default:throw Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||`program`,n}parse(e,t){this._prepareForParse();let n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){this._prepareForParse();let n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_prepareForParse(){this._savedState===null?(this.options.filter(e=>e.negate&&e.defaultValue===void 0&&this.getOptionValue(e.attributeName())===void 0).forEach(e=>{let t=e.long.replace(/^--no-/,`--`);this._findOption(t)||this.setOptionValueWithSource(e.attributeName(),!0,`default`)}),this.saveStateBeforeParse()):this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
337
+ - unrecognised flag format`)}if(t===void 0&&n===void 0)throw Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:n}}function hv(e,t){if(Math.abs(e.length-t.length)>3)return Math.max(e.length,t.length);let n=[];for(let t=0;t<=e.length;t++)n[t]=[t];for(let e=0;e<=t.length;e++)n[0][e]=e;for(let r=1;r<=t.length;r++)for(let i=1;i<=e.length;i++){let a;a=e[i-1]===t[r-1]?0:1,n[i][r]=Math.min(n[i-1][r]+1,n[i][r-1]+1,n[i-1][r-1]+a),i>1&&r>1&&e[i-1]===t[r-2]&&e[i-2]===t[r-1]&&(n[i][r]=Math.min(n[i][r],n[i-2][r-2]+1))}return n[e.length][t.length]}function gv(e,t){if(!t||t.length===0)return``;t=Array.from(new Set(t));let n=e.startsWith(`--`);n&&(e=e.slice(2),t=t.map(e=>e.slice(2)));let r=[],i=3;return t.forEach(t=>{if(t.length<=1)return;let n=hv(e,t),a=Math.max(e.length,t.length);(a-n)/a>.4&&(n<i?(i=n,r=[t]):n===i&&r.push(t))}),r.sort((e,t)=>e.localeCompare(t)),n&&(r=r.map(e=>`--${e}`)),r.length>1?`\n(Did you mean one of ${r.join(`, `)}?)`:r.length===1?`\n(Did you mean ${r[0]}?)`:``}var _v=class e extends _e{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||``,this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description=``,this._summary=``,this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:e=>h.stdout.write(e),writeErr:e=>h.stderr.write(e),outputError:(e,t)=>t(e),getOutHelpWidth:()=>h.stdout.isTTY?h.stdout.columns:void 0,getErrHelpWidth:()=>h.stderr.isTTY?h.stderr.columns:void 0,getOutHasColors:()=>yv()??(h.stdout.isTTY&&h.stdout.hasColors?.()),getErrHasColors:()=>yv()??(h.stderr.isTTY&&h.stderr.hasColors?.()),stripColor:e=>xe(e)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let r=t,i=n;typeof r==`object`&&r&&(i=r,r=null),i||={};let[,a,o]=e.match(/([^ ]+) *(.*)/),s=this.createCommand(a);return r&&(s.description(r),s._executableHandler=!0),i.isDefault&&(this._defaultCommandName=s._name),s._hidden=!!(i.noHelp||i.hidden),s._executableFile=i.executableFile||null,o&&s.arguments(o),this._registerCommand(s),s.parent=this,s.copyInheritedSettings(this),r?this:s}createCommand(t){return new e(t)}createHelp(){return Object.assign(new uv,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...e},this)}showHelpAfterError(e=!0){return typeof e!=`string`&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw Error(`Command passed to .addCommand() must have a name
338
+ - specify the name in Command constructor or using .name()`);return t||={},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new cv(e,t)}argument(e,t,n,r){let i=this.createArgument(e,t);return typeof n==`function`?i.default(r).argParser(n):i.default(n),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(e=>{this.argument(e)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t?.variadic)throw Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e==`boolean`)return this._addImplicitHelpCommand=e,e&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;let[,n,r]=(e??`help [command]`).match(/([^ ]+) *(.*)/),i=t??`display help for command`,a=this.createCommand(n);return a.helpOption(!1),r&&a.arguments(r),i&&a.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=a,(e||t)&&this._initCommandGroup(a),this}addHelpCommand(e,t){return typeof e==`object`?(this._addImplicitHelpCommand=!0,this._helpCommand=e,this._initCommandGroup(e),this):(this.helpCommand(e,t),this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand(`help`))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let n=[`preSubcommand`,`preAction`,`postAction`];if(!n.includes(e))throw Error(`Unexpected value for event passed to hook : '${e}'.
339
+ Expecting one of '${n.join(`', '`)}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return this._exitCallback=e||(e=>{if(e.code!==`commander.executeSubCommandAsync`)throw e}),this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new ov(e,t,n)),h.exit(e)}action(e){let t=t=>{let n=this.registeredArguments.length,r=t.slice(0,n);return r[n]=this._storeOptionsAsProperties?this:this.opts(),r.push(this),e.apply(this,r)};return this._actionHandler=t,this}createOption(e,t){return new dv(e,t)}_callParseArg(e,t,n,r){try{return e.parseArg(t,n)}catch(e){if(e.code===`commander.invalidArgument`){let t=`${r} ${e.message}`;this.error(t,{exitCode:e.exitCode,code:e.code})}throw e}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let n=e.long&&this._findOption(e.long)?e.long:e.short;throw Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
340
+ - already used by option '${t.flags}'`)}this._initOptionGroup(e),this.options.push(e)}_registerCommand(e){let t=e=>[e.name()].concat(e.aliases()),n=t(e).find(e=>this._findCommand(e));if(n){let r=t(this._findCommand(n)).join(`|`),i=t(e).join(`|`);throw Error(`cannot add command '${i}' as already have command '${r}'`)}this._initCommandGroup(e),this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,`default`);let r=(t,r,i)=>{t==null&&e.presetArg!==void 0&&(t=e.presetArg);let a=this.getOptionValue(n);t!==null&&e.parseArg?t=this._callParseArg(e,t,a,r):t!==null&&e.variadic&&(t=e._collectValue(t,a)),t??=e.negate?!1:e.isBoolean()||e.optional?!0:``,this.setOptionValueWithSource(n,t,i)};return this.on(`option:`+t,t=>{let n=`error: option '${e.flags}' argument '${t}' is invalid.`;r(t,n,`cli`)}),e.envVar&&this.on(`optionEnv:`+t,t=>{let n=`error: option '${e.flags}' value '${t}' from env '${e.envVar}' is invalid.`;r(t,n,`env`)}),this}_optionEx(e,t,n,r,i){if(typeof t==`object`&&t instanceof dv)throw Error(`To add an Option object use addOption() instead of option() or requiredOption()`);let a=this.createOption(t,n);if(a.makeOptionMandatory(!!e.mandatory),typeof r==`function`)a.default(i).argParser(r);else if(r instanceof RegExp){let e=r;r=(t,n)=>{let r=e.exec(t);return r?r[0]:n},a.default(i).argParser(r)}else a.default(r);return this.addOption(a)}option(e,t,n,r){return this._optionEx({},e,t,n,r)}requiredOption(e,t,n,r){return this._optionEx({mandatory:!0},e,t,n,r)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw Error(`call .storeOptionsAsProperties() before adding options`);if(Object.keys(this._optionValues).length)throw Error(`call .storeOptionsAsProperties() before setting option values`);return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,n){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(t=n.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw Error(`first parameter to parse must be array or undefined`);if(t||={},e===void 0&&t.from===void 0){h.versions?.electron&&(t.from=`electron`);let e=h.execArgv??[];(e.includes(`-e`)||e.includes(`--eval`)||e.includes(`-p`)||e.includes(`--print`))&&(t.from=`eval`)}e===void 0&&(e=h.argv),this.rawArgs=e.slice();let n;switch(t.from){case void 0:case`node`:this._scriptPath=e[1],n=e.slice(2);break;case`electron`:h.defaultApp?(this._scriptPath=e[1],n=e.slice(2)):n=e.slice(1);break;case`user`:n=e.slice(0);break;case`eval`:n=e.slice(1);break;default:throw Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||`program`,n}parse(e,t){this._prepareForParse();let n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){this._prepareForParse();let n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_prepareForParse(){this._savedState===null?(this.options.filter(e=>e.negate&&e.defaultValue===void 0&&this.getOptionValue(e.attributeName())===void 0).forEach(e=>{let t=e.long.replace(/^--no-/,`--`);this._findOption(t)||this.setOptionValueWithSource(e.attributeName(),!0,`default`)}),this.saveStateBeforeParse()):this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw Error(`Can not call parse again when storeOptionsAsProperties is true.
341
341
  - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(e,t,n){if(fe.existsSync(e))return;let r=`'${e}' does not exist
342
342
  - if '${n}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
343
343
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
344
- - ${t?`searched for local subcommand relative to directory '${t}'`:`no directory for search for local subcommand, use .executableDir() to supply a custom directory`}`;throw Error(r)}_executeSubCommand(e,t){t=t.slice();let n=[`.js`,`.ts`,`.tsx`,`.mjs`,`.cjs`];function r(e,t){let r=ne.resolve(e,t);if(fe.existsSync(r))return r;if(n.includes(ne.extname(t)))return;let i=n.find(e=>fe.existsSync(`${r}${e}`));if(i)return`${r}${i}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||``;if(this._scriptPath){let e;try{e=fe.realpathSync(this._scriptPath)}catch{e=this._scriptPath}a=ne.resolve(ne.dirname(e),a)}if(a){let t=r(a,i);if(!t&&!e._executableFile&&this._scriptPath){let n=ne.basename(this._scriptPath,ne.extname(this._scriptPath));n!==this._name&&(t=r(a,`${n}-${e._name}`))}i=t||i}let o=n.includes(ne.extname(i)),s;h.platform===`win32`?(this._checkForMissingExecutable(i,a,e._name),t.unshift(i),t=fv(h.execArgv).concat(t),s=ye.spawn(h.execPath,t,{stdio:`inherit`})):o?(t.unshift(i),t=fv(h.execArgv).concat(t),s=ye.spawn(h.argv[0],t,{stdio:`inherit`})):s=ye.spawn(i,t,{stdio:`inherit`}),s.killed||[`SIGUSR1`,`SIGUSR2`,`SIGTERM`,`SIGINT`,`SIGHUP`].forEach(e=>{h.on(e,()=>{s.killed===!1&&s.exitCode===null&&s.kill(e)})});let c=this._exitCallback;s.on(`close`,e=>{e??=1,c?c(new ev(e,`commander.executeSubCommandAsync`,`(close)`)):h.exit(e)}),s.on(`error`,t=>{if(t.code===`ENOENT`)this._checkForMissingExecutable(i,a,e._name);else if(t.code===`EACCES`)throw Error(`'${i}' not executable`);if(!c)h.exit(1);else{let e=new ev(1,`commander.executeSubCommandAsync`,`(error)`);e.nestedError=t,c(e)}}),this.runningCommand=s}_dispatchSubcommand(e,t,n){let r=this._findCommand(e);r||this.help({error:!0}),r._prepareForParse();let i;return i=this._chainOrCallSubCommandHook(i,r,`preSubcommand`),i=this._chainOrCall(i,()=>{if(r._executableHandler)this._executeSubCommand(r,t.concat(n));else return r._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??`--help`])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(e,t,n)=>{let r=t;if(t!==null&&e.parseArg){let i=`error: command-argument value '${t}' is invalid for argument '${e.name()}'.`;r=this._callParseArg(e,t,n,i)}return r};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,r)=>{let i=n.defaultValue;n.variadic?r<this.args.length?(i=this.args.slice(r),n.parseArg&&(i=i.reduce((t,r)=>e(n,r,t),n.defaultValue))):i===void 0&&(i=[]):r<this.args.length&&(i=this.args[r],n.parseArg&&(i=e(n,i,n.defaultValue))),t[r]=i}),this.processedArgs=t}_chainOrCall(e,t){return e?.then&&typeof e.then==`function`?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,r=[];return this._getCommandAndAncestors().reverse().filter(e=>e._lifeCycleHooks[t]!==void 0).forEach(e=>{e._lifeCycleHooks[t].forEach(t=>{r.push({hookedCommand:e,callback:t})})}),t===`postAction`&&r.reverse(),r.forEach(e=>{n=this._chainOrCall(n,()=>e.callback(e.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let r=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(e=>{r=this._chainOrCall(r,()=>e(this,t))}),r}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let r=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){r(),this._processArguments();let n;return n=this._chainOrCallHooks(n,`preAction`),n=this._chainOrCall(n,()=>this._actionHandler(this.processedArgs)),this.parent&&(n=this._chainOrCall(n,()=>{this.parent.emit(i,e,t)})),n=this._chainOrCallHooks(n,`postAction`),n}if(this.parent?.listenerCount(i))r(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand(`*`))return this._dispatchSubcommand(`*`,e,t);this.listenerCount(`command:*`)?this.emit(`command:*`,e,t):this.commands.length?this.unknownCommand():(r(),this._processArguments())}else this.commands.length?(r(),this.help({error:!0})):(r(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(e=>{let t=e.attributeName();return this.getOptionValue(t)!==void 0&&this.getOptionValueSource(t)!=="default"});e.filter(e=>e.conflictsWith.length>0).forEach(t=>{let n=e.find(e=>t.conflictsWith.includes(e.attributeName()));n&&this._conflictingOption(t,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],r=t;function i(e){return e.length>1&&e[0]===`-`}let a=e=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(e)?!this._getCommandAndAncestors().some(e=>e.options.map(e=>e.short).some(e=>/^-\d$/.test(e))):!1,o=null,s=null,c=0;for(;c<e.length||s;){let l=s??e[c++];if(s=null,l===`--`){r===n&&r.push(l),r.push(...e.slice(c));break}if(o&&(!i(l)||a(l))){this.emit(`option:${o.name()}`,l);continue}if(o=null,i(l)){let t=this._findOption(l);if(t){if(t.required){let n=e[c++];n===void 0&&this.optionMissingArgument(t),this.emit(`option:${t.name()}`,n)}else if(t.optional){let n=null;c<e.length&&(!i(e[c])||a(e[c]))&&(n=e[c++]),this.emit(`option:${t.name()}`,n)}else this.emit(`option:${t.name()}`);o=t.variadic?t:null;continue}}if(l.length>2&&l[0]===`-`&&l[1]!==`-`){let e=this._findOption(`-${l[1]}`);if(e){e.required||e.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${e.name()}`,l.slice(2)):(this.emit(`option:${e.name()}`),s=`-${l.slice(2)}`);continue}}if(/^--[^=]+=/.test(l)){let e=l.indexOf(`=`),t=this._findOption(l.slice(0,e));if(t&&(t.required||t.optional)){this.emit(`option:${t.name()}`,l.slice(e+1));continue}}if(r===t&&i(l)&&!(this.commands.length===0&&a(l))&&(r=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(l)){t.push(l),n.push(...e.slice(c));break}if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l,...e.slice(c));break}if(this._defaultCommandName){n.push(l,...e.slice(c));break}}if(this._passThroughOptions){r.push(l,...e.slice(c));break}r.push(l)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let t=this.options[n].attributeName();e[t]=t===this._versionOptionName?this._version:this[t]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}\n`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==`string`?this._outputConfiguration.writeErr(`${this._showHelpAfterError}\n`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
345
- `),this.outputHelp({error:!0}));let n=t||{},r=n.exitCode||1,i=n.code||`commander.error`;this._exit(r,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in h.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||[`default`,`config`,`env`].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,h.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new ov(this.options),t=e=>this.getOptionValue(e)!==void 0&&![`default`,`implied`].includes(this.getOptionValueSource(e));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(e=>{Object.keys(e.implied).filter(e=>!t(e)).forEach(t=>{this.setOptionValueWithSource(t,e.implied[t],`implied`)})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:`commander.missingArgument`})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:`commander.optionMissingArgument`})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:`commander.missingMandatoryOptionValue`})}_conflictingOption(e,t){let n=e=>{let t=e.attributeName(),n=this.getOptionValue(t),r=this.options.find(e=>e.negate&&t===e.attributeName()),i=this.options.find(e=>!e.negate&&t===e.attributeName());return r&&(r.presetArg===void 0&&n===!1||r.presetArg!==void 0&&n===r.presetArg)?r:i||e},r=e=>{let t=n(e),r=t.attributeName();return this.getOptionValueSource(r)===`env`?`environment variable '${t.envVar}'`:`option '${t.flags}'`},i=`error: ${r(e)} cannot be used with ${r(t)}`;this.error(i,{code:`commander.conflictingOption`})}unknownOption(e){if(this._allowUnknownOption)return;let t=``;if(e.startsWith(`--`)&&this._showSuggestionAfterError){let n=[],r=this;do{let e=r.createHelp().visibleOptions(r).filter(e=>e.long).map(e=>e.long);n=n.concat(e),r=r.parent}while(r&&!r._enablePositionalOptions);t=uv(e,n)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:`commander.unknownOption`})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?``:`s`,r=e.length,i=`error: too many arguments${this.parent?` for '${this.name()}'`:``}. Expected ${t} argument${n} but got ${r}: ${e.join(`, `)}.`;this.error(i,{code:`commander.excessArguments`})}unknownCommand(){let e=this.args[0],t=``;if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach(e=>{n.push(e.name()),e.alias()&&n.push(e.alias())}),t=uv(e,n)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:`commander.unknownCommand`})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t||=`-V, --version`,n||=`output the version number`;let r=this.createOption(t,n);return this._versionOptionName=r.attributeName(),this._registerOption(r),this.on(`option:`+r.name(),()=>{this._outputConfiguration.writeOut(`${e}\n`),this._exit(0,`commander.version`,e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw Error(`Command alias can't be the same as its name`);let n=this.parent?._findCommand(e);if(n){let t=[n.name()].concat(n.aliases()).join(`|`);throw Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${t}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(e=>this.alias(e)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let e=this.registeredArguments.map(e=>rv(e));return[].concat(this.options.length||this._helpOption!==null?`[options]`:[],this.commands.length?`[command]`:[],this.registeredArguments.length?e:[]).join(` `)}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}helpGroup(e){return e===void 0?this._helpGroupHeading??``:(this._helpGroupHeading=e,this)}commandsGroup(e){return e===void 0?this._defaultCommandGroup??``:(this._defaultCommandGroup=e,this)}optionsGroup(e){return e===void 0?this._defaultOptionGroup??``:(this._defaultOptionGroup=e,this)}_initOptionGroup(e){this._defaultOptionGroup&&!e.helpGroupHeading&&e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){this._defaultCommandGroup&&!e.helpGroup()&&e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=ne.basename(e,ne.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp(),n=this._getOutputContext(e);t.prepareContext({error:n.error,helpWidth:n.helpWidth,outputHasColors:n.hasColors});let r=t.formatHelp(this,t);return n.hasColors?r:this._outputConfiguration.stripColor(r)}_getOutputContext(e){e||={};let t=!!e.error,n,r,i;return t?(n=e=>this._outputConfiguration.writeErr(e),r=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth()):(n=e=>this._outputConfiguration.writeOut(e),r=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth()),{error:t,write:e=>(r||(e=this._outputConfiguration.stripColor(e)),n(e)),hasColors:r,helpWidth:i}}outputHelp(e){let t;typeof e==`function`&&(t=e,e=void 0);let n=this._getOutputContext(e),r={error:n.error,write:n.write,command:this};this._getCommandAndAncestors().reverse().forEach(e=>e.emit(`beforeAllHelp`,r)),this.emit(`beforeHelp`,r);let i=this.helpInformation({error:n.error});if(t&&(i=t(i),typeof i!=`string`&&!Buffer.isBuffer(i)))throw Error(`outputHelp callback must return a string or a Buffer`);n.write(i),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit(`afterHelp`,r),this._getCommandAndAncestors().forEach(e=>e.emit(`afterAllHelp`,r))}helpOption(e,t){return typeof e==`boolean`?(e?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(e??`-h, --help`,t??`display help for command`),(e||t)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(h.exitCode??0);t===0&&e&&typeof e!=`function`&&e.error&&(t=1),this._exit(t,`commander.help`,`(outputHelp)`)}addHelpText(e,t){let n=[`beforeAll`,`before`,`after`,`afterAll`];if(!n.includes(e))throw Error(`Unexpected value for position to addHelpText.
346
- Expecting one of '${n.join(`', '`)}'`);let r=`${e}Help`;return this.on(r,e=>{let n;n=typeof t==`function`?t({error:e.error,command:e.command}):t,n&&e.write(`${n}\n`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(e=>t.is(e))&&(this.outputHelp(),this._exit(0,`commander.helpDisplayed`,`(outputHelp)`))}};function fv(e){return e.map(e=>{if(!e.startsWith(`--inspect`))return e;let t,n=`127.0.0.1`,r=`9229`,i;return(i=e.match(/^(--inspect(-brk)?)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],r=i[4]):(t=i[1],/^\d+$/.test(i[3])?r=i[3]:n=i[3]):t=i[1],t&&r!==`0`?`${t}=${n}:${parseInt(r)+1}`:e})}function pv(){if(h.env.NO_COLOR||h.env.FORCE_COLOR===`0`||h.env.FORCE_COLOR===`false`)return!1;if(h.env.FORCE_COLOR||h.env.CLICOLOR_FORCE!==void 0)return!0}new dv;const mv=[],hv=e=>Array.isArray(e)?e:[e],gv=e=>e===void 0?mv:[e],_v=e=>e instanceof Error?e.message:String(e),Y=e=>{let t=e.optsWithGlobals();return{json:t.json===!0,verbose:t.verbose===!0}},X=(e,t,n,r,i)=>{if(t.json){let t={data:r,ok:!0,warnings:i??mv};e.out(JSON.stringify(t));return}for(let t of hv(n))e.out(t);for(let t of i??mv)e.errLine(`refs: warning: ${t}`)},vv=(e,t,n)=>{if(t.json){let t={error:{code:n.code,message:n.message,...n.reason===void 0?{}:{reason:n.reason}},ok:!1};e.out(JSON.stringify(t));return}e.errLine(`refs: ${n.message}`)},yv=(e,t)=>{e.errLine(`refs: ${t}`)},Z=(e,t,n)=>async()=>{try{await n()}catch(n){let r=Te(n,{verbose:t.verbose});vv(e,t,r),process.exitCode=r.exitCode}},Q=e=>`'${e.replaceAll(`'`,String.raw`'\''`)}'`,bv=(e,t)=>{let n=t.some(e=>e.startsWith(`-`))?[`--`]:[];return[`refs edit`,...e,...n,...t.map(e=>Q(e))].join(` `)},xv=e=>`rm -rf -- ${Q(e)}`,Sv=e=>`rmdir -- ${Q(e)}`,Cv=e=>({path:e.path}),wv=e=>e.filter(e=>e.path!==`.`),Tv=e=>e.find(e=>e.path===`.`),Ev=e=>{let t=Tv(e);return t===void 0?{}:{[t.name]:Cv(t)}},Dv=(e,t,n)=>{let r=wv(e),i=Ev(e);return r.length>0?{...i,...Object.fromEntries(r.map(e=>[e.name,Cv(e)]))}:n===void 0?i:{...i,[n]:{path:t??`.`}}},Ov=e=>{let t=e.description??``;return e.tag_format===void 0?{description:t,path:e.path}:{description:t,path:e.path,tag_format:e.tag_format}},kv=(e,t)=>{let n=Object.entries(e);if(n.length!==0)return Object.fromEntries(n.map(([e,n])=>[e,Ov(e===t.rootPackageName?jv(n,t.refDescription):n)]))},Av=(e,t)=>{let[n]=Object.keys(Ev(e));if(n!==void 0)return t[n]?.path===`.`?n:void 0},jv=(e,t)=>({...e,description:t}),Mv=(e,t)=>Object.keys(e).filter(e=>e!==t).toSorted(),Nv=(e,t,n)=>{if(Mv(e,n).length!==0)throw y(`refs add --description cannot describe a package: it has one description, about the repository. Run the two-phase flow instead:
344
+ - ${t?`searched for local subcommand relative to directory '${t}'`:`no directory for search for local subcommand, use .executableDir() to supply a custom directory`}`;throw Error(r)}_executeSubCommand(e,t){t=t.slice();let n=[`.js`,`.ts`,`.tsx`,`.mjs`,`.cjs`];function r(e,t){let r=ne.resolve(e,t);if(fe.existsSync(r))return r;if(n.includes(ne.extname(t)))return;let i=n.find(e=>fe.existsSync(`${r}${e}`));if(i)return`${r}${i}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||``;if(this._scriptPath){let e;try{e=fe.realpathSync(this._scriptPath)}catch{e=this._scriptPath}a=ne.resolve(ne.dirname(e),a)}if(a){let t=r(a,i);if(!t&&!e._executableFile&&this._scriptPath){let n=ne.basename(this._scriptPath,ne.extname(this._scriptPath));n!==this._name&&(t=r(a,`${n}-${e._name}`))}i=t||i}let o=n.includes(ne.extname(i)),s;h.platform===`win32`?(this._checkForMissingExecutable(i,a,e._name),t.unshift(i),t=vv(h.execArgv).concat(t),s=ye.spawn(h.execPath,t,{stdio:`inherit`})):o?(t.unshift(i),t=vv(h.execArgv).concat(t),s=ye.spawn(h.argv[0],t,{stdio:`inherit`})):s=ye.spawn(i,t,{stdio:`inherit`}),s.killed||[`SIGUSR1`,`SIGUSR2`,`SIGTERM`,`SIGINT`,`SIGHUP`].forEach(e=>{h.on(e,()=>{s.killed===!1&&s.exitCode===null&&s.kill(e)})});let c=this._exitCallback;s.on(`close`,e=>{e??=1,c?c(new ov(e,`commander.executeSubCommandAsync`,`(close)`)):h.exit(e)}),s.on(`error`,t=>{if(t.code===`ENOENT`)this._checkForMissingExecutable(i,a,e._name);else if(t.code===`EACCES`)throw Error(`'${i}' not executable`);if(!c)h.exit(1);else{let e=new ov(1,`commander.executeSubCommandAsync`,`(error)`);e.nestedError=t,c(e)}}),this.runningCommand=s}_dispatchSubcommand(e,t,n){let r=this._findCommand(e);r||this.help({error:!0}),r._prepareForParse();let i;return i=this._chainOrCallSubCommandHook(i,r,`preSubcommand`),i=this._chainOrCall(i,()=>{if(r._executableHandler)this._executeSubCommand(r,t.concat(n));else return r._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??`--help`])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(e,t,n)=>{let r=t;if(t!==null&&e.parseArg){let i=`error: command-argument value '${t}' is invalid for argument '${e.name()}'.`;r=this._callParseArg(e,t,n,i)}return r};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,r)=>{let i=n.defaultValue;n.variadic?r<this.args.length?(i=this.args.slice(r),n.parseArg&&(i=i.reduce((t,r)=>e(n,r,t),n.defaultValue))):i===void 0&&(i=[]):r<this.args.length&&(i=this.args[r],n.parseArg&&(i=e(n,i,n.defaultValue))),t[r]=i}),this.processedArgs=t}_chainOrCall(e,t){return e?.then&&typeof e.then==`function`?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,r=[];return this._getCommandAndAncestors().reverse().filter(e=>e._lifeCycleHooks[t]!==void 0).forEach(e=>{e._lifeCycleHooks[t].forEach(t=>{r.push({hookedCommand:e,callback:t})})}),t===`postAction`&&r.reverse(),r.forEach(e=>{n=this._chainOrCall(n,()=>e.callback(e.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let r=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(e=>{r=this._chainOrCall(r,()=>e(this,t))}),r}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let r=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){r(),this._processArguments();let n;return n=this._chainOrCallHooks(n,`preAction`),n=this._chainOrCall(n,()=>this._actionHandler(this.processedArgs)),this.parent&&(n=this._chainOrCall(n,()=>{this.parent.emit(i,e,t)})),n=this._chainOrCallHooks(n,`postAction`),n}if(this.parent?.listenerCount(i))r(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand(`*`))return this._dispatchSubcommand(`*`,e,t);this.listenerCount(`command:*`)?this.emit(`command:*`,e,t):this.commands.length?this.unknownCommand():(r(),this._processArguments())}else this.commands.length?(r(),this.help({error:!0})):(r(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(e=>{let t=e.attributeName();return this.getOptionValue(t)!==void 0&&this.getOptionValueSource(t)!=="default"});e.filter(e=>e.conflictsWith.length>0).forEach(t=>{let n=e.find(e=>t.conflictsWith.includes(e.attributeName()));n&&this._conflictingOption(t,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],r=t;function i(e){return e.length>1&&e[0]===`-`}let a=e=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(e)?!this._getCommandAndAncestors().some(e=>e.options.map(e=>e.short).some(e=>/^-\d$/.test(e))):!1,o=null,s=null,c=0;for(;c<e.length||s;){let l=s??e[c++];if(s=null,l===`--`){r===n&&r.push(l),r.push(...e.slice(c));break}if(o&&(!i(l)||a(l))){this.emit(`option:${o.name()}`,l);continue}if(o=null,i(l)){let t=this._findOption(l);if(t){if(t.required){let n=e[c++];n===void 0&&this.optionMissingArgument(t),this.emit(`option:${t.name()}`,n)}else if(t.optional){let n=null;c<e.length&&(!i(e[c])||a(e[c]))&&(n=e[c++]),this.emit(`option:${t.name()}`,n)}else this.emit(`option:${t.name()}`);o=t.variadic?t:null;continue}}if(l.length>2&&l[0]===`-`&&l[1]!==`-`){let e=this._findOption(`-${l[1]}`);if(e){e.required||e.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${e.name()}`,l.slice(2)):(this.emit(`option:${e.name()}`),s=`-${l.slice(2)}`);continue}}if(/^--[^=]+=/.test(l)){let e=l.indexOf(`=`),t=this._findOption(l.slice(0,e));if(t&&(t.required||t.optional)){this.emit(`option:${t.name()}`,l.slice(e+1));continue}}if(r===t&&i(l)&&!(this.commands.length===0&&a(l))&&(r=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(l)){t.push(l),n.push(...e.slice(c));break}if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l,...e.slice(c));break}if(this._defaultCommandName){n.push(l,...e.slice(c));break}}if(this._passThroughOptions){r.push(l,...e.slice(c));break}r.push(l)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let t=this.options[n].attributeName();e[t]=t===this._versionOptionName?this._version:this[t]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}\n`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==`string`?this._outputConfiguration.writeErr(`${this._showHelpAfterError}\n`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
345
+ `),this.outputHelp({error:!0}));let n=t||{},r=n.exitCode||1,i=n.code||`commander.error`;this._exit(r,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in h.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||[`default`,`config`,`env`].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,h.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new fv(this.options),t=e=>this.getOptionValue(e)!==void 0&&![`default`,`implied`].includes(this.getOptionValueSource(e));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(e=>{Object.keys(e.implied).filter(e=>!t(e)).forEach(t=>{this.setOptionValueWithSource(t,e.implied[t],`implied`)})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:`commander.missingArgument`})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:`commander.optionMissingArgument`})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:`commander.missingMandatoryOptionValue`})}_conflictingOption(e,t){let n=e=>{let t=e.attributeName(),n=this.getOptionValue(t),r=this.options.find(e=>e.negate&&t===e.attributeName()),i=this.options.find(e=>!e.negate&&t===e.attributeName());return r&&(r.presetArg===void 0&&n===!1||r.presetArg!==void 0&&n===r.presetArg)?r:i||e},r=e=>{let t=n(e),r=t.attributeName();return this.getOptionValueSource(r)===`env`?`environment variable '${t.envVar}'`:`option '${t.flags}'`},i=`error: ${r(e)} cannot be used with ${r(t)}`;this.error(i,{code:`commander.conflictingOption`})}unknownOption(e){if(this._allowUnknownOption)return;let t=``;if(e.startsWith(`--`)&&this._showSuggestionAfterError){let n=[],r=this;do{let e=r.createHelp().visibleOptions(r).filter(e=>e.long).map(e=>e.long);n=n.concat(e),r=r.parent}while(r&&!r._enablePositionalOptions);t=gv(e,n)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:`commander.unknownOption`})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?``:`s`,r=e.length,i=`error: too many arguments${this.parent?` for '${this.name()}'`:``}. Expected ${t} argument${n} but got ${r}: ${e.join(`, `)}.`;this.error(i,{code:`commander.excessArguments`})}unknownCommand(){let e=this.args[0],t=``;if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach(e=>{n.push(e.name()),e.alias()&&n.push(e.alias())}),t=gv(e,n)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:`commander.unknownCommand`})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t||=`-V, --version`,n||=`output the version number`;let r=this.createOption(t,n);return this._versionOptionName=r.attributeName(),this._registerOption(r),this.on(`option:`+r.name(),()=>{this._outputConfiguration.writeOut(`${e}\n`),this._exit(0,`commander.version`,e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw Error(`Command alias can't be the same as its name`);let n=this.parent?._findCommand(e);if(n){let t=[n.name()].concat(n.aliases()).join(`|`);throw Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${t}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(e=>this.alias(e)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let e=this.registeredArguments.map(e=>lv(e));return[].concat(this.options.length||this._helpOption!==null?`[options]`:[],this.commands.length?`[command]`:[],this.registeredArguments.length?e:[]).join(` `)}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}helpGroup(e){return e===void 0?this._helpGroupHeading??``:(this._helpGroupHeading=e,this)}commandsGroup(e){return e===void 0?this._defaultCommandGroup??``:(this._defaultCommandGroup=e,this)}optionsGroup(e){return e===void 0?this._defaultOptionGroup??``:(this._defaultOptionGroup=e,this)}_initOptionGroup(e){this._defaultOptionGroup&&!e.helpGroupHeading&&e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){this._defaultCommandGroup&&!e.helpGroup()&&e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=ne.basename(e,ne.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp(),n=this._getOutputContext(e);t.prepareContext({error:n.error,helpWidth:n.helpWidth,outputHasColors:n.hasColors});let r=t.formatHelp(this,t);return n.hasColors?r:this._outputConfiguration.stripColor(r)}_getOutputContext(e){e||={};let t=!!e.error,n,r,i;return t?(n=e=>this._outputConfiguration.writeErr(e),r=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth()):(n=e=>this._outputConfiguration.writeOut(e),r=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth()),{error:t,write:e=>(r||(e=this._outputConfiguration.stripColor(e)),n(e)),hasColors:r,helpWidth:i}}outputHelp(e){let t;typeof e==`function`&&(t=e,e=void 0);let n=this._getOutputContext(e),r={error:n.error,write:n.write,command:this};this._getCommandAndAncestors().reverse().forEach(e=>e.emit(`beforeAllHelp`,r)),this.emit(`beforeHelp`,r);let i=this.helpInformation({error:n.error});if(t&&(i=t(i),typeof i!=`string`&&!Buffer.isBuffer(i)))throw Error(`outputHelp callback must return a string or a Buffer`);n.write(i),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit(`afterHelp`,r),this._getCommandAndAncestors().forEach(e=>e.emit(`afterAllHelp`,r))}helpOption(e,t){return typeof e==`boolean`?(e?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(e??`-h, --help`,t??`display help for command`),(e||t)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(h.exitCode??0);t===0&&e&&typeof e!=`function`&&e.error&&(t=1),this._exit(t,`commander.help`,`(outputHelp)`)}addHelpText(e,t){let n=[`beforeAll`,`before`,`after`,`afterAll`];if(!n.includes(e))throw Error(`Unexpected value for position to addHelpText.
346
+ Expecting one of '${n.join(`', '`)}'`);let r=`${e}Help`;return this.on(r,e=>{let n;n=typeof t==`function`?t({error:e.error,command:e.command}):t,n&&e.write(`${n}\n`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(e=>t.is(e))&&(this.outputHelp(),this._exit(0,`commander.helpDisplayed`,`(outputHelp)`))}};function vv(e){return e.map(e=>{if(!e.startsWith(`--inspect`))return e;let t,n=`127.0.0.1`,r=`9229`,i;return(i=e.match(/^(--inspect(-brk)?)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],r=i[4]):(t=i[1],/^\d+$/.test(i[3])?r=i[3]:n=i[3]):t=i[1],t&&r!==`0`?`${t}=${n}:${parseInt(r)+1}`:e})}function yv(){if(h.env.NO_COLOR||h.env.FORCE_COLOR===`0`||h.env.FORCE_COLOR===`false`)return!1;if(h.env.FORCE_COLOR||h.env.CLICOLOR_FORCE!==void 0)return!0}new _v;const bv=[],xv=e=>Array.isArray(e)?e:[e],Sv=e=>e===void 0?bv:[e],Cv=e=>e instanceof Error?e.message:String(e),Y=e=>{let t=e.optsWithGlobals();return{json:t.json===!0,verbose:t.verbose===!0}},X=(e,t,n,r,i)=>{if(t.json){let t={data:r,ok:!0,warnings:i??bv};e.out(JSON.stringify(t));return}for(let t of xv(n))e.out(t);for(let t of i??bv)e.errLine(`refs: warning: ${t}`)},wv=(e,t,n)=>{if(t.json){let t={error:{code:n.code,message:n.message,...n.reason===void 0?{}:{reason:n.reason}},ok:!1};e.out(JSON.stringify(t));return}e.errLine(`refs: ${n.message}`)},Tv=(e,t)=>{e.errLine(`refs: ${t}`)},Z=(e,t,n)=>async()=>{try{await n()}catch(n){let r=Te(n,{verbose:t.verbose});wv(e,t,r),process.exitCode=r.exitCode}},Q=e=>`'${e.replaceAll(`'`,String.raw`'\''`)}'`,Ev=(e,t)=>{let n=t.some(e=>e.startsWith(`-`))?[`--`]:[];return[`refs edit`,...e,...n,...t.map(e=>Q(e))].join(` `)},Dv=e=>`rm -rf -- ${Q(e)}`,Ov=e=>`rmdir -- ${Q(e)}`,kv=e=>({path:e.path}),Av=e=>e.filter(e=>e.path!==`.`),jv=e=>e.find(e=>e.path===`.`),Mv=e=>{let t=jv(e);return t===void 0?{}:{[t.name]:kv(t)}},Nv=(e,t,n)=>{let r=Av(e),i=Mv(e);return r.length>0?{...i,...Object.fromEntries(r.map(e=>[e.name,kv(e)]))}:n===void 0?i:{...i,[n]:{path:t??`.`}}},Pv=e=>{let t=e.description??``;return e.tag_format===void 0?{description:t,path:e.path}:{description:t,path:e.path,tag_format:e.tag_format}},Fv=(e,t)=>{let n=Object.entries(e);if(n.length!==0)return Object.fromEntries(n.map(([e,n])=>[e,Pv(e===t.rootPackageName?Lv(n,t.refDescription):n)]))},Iv=(e,t)=>{let[n]=Object.keys(Mv(e));if(n!==void 0)return t[n]?.path===`.`?n:void 0},Lv=(e,t)=>({...e,description:t}),Rv=(e,t)=>Object.keys(e).filter(e=>e!==t).toSorted(),zv=(e,t,n)=>{if(Rv(e,n).length!==0)throw y(`refs add --description cannot describe a package: it has one description, about the repository. Run the two-phase flow instead:
347
347
  refs add ${Q(t)} --dry-run --json > proposal.json\nFill in the ref's own description, and one written from its own source for each package below, then:
348
348
  refs add --proposal proposal.json
349
- packages to describe: ${Object.keys(e).toSorted().join(`, `)}`)},Pv=e=>{if(Object.keys(e).length!==0)return e},Fv=e=>{let t={default_branch:e.default_branch,description:e.description,url:e.url};return e.packages!==void 0&&(t.packages=e.packages),e.tag_format!==void 0&&(t.tag_format=e.tag_format),t},Iv=`ref.`,Lv=`${Iv}_`,Rv=`${Lv}_`,zv=e=>`${Rv}${ue(`sha256`).update(e,`utf8`).digest(`hex`)}`,Bv=e=>{let t=e.includes(`_`)?`${Lv}${e.replaceAll(`_`,`_u`).replaceAll(`/`,`_s`)}`:`${Iv}${e.replaceAll(`/`,`_`)}`;return Buffer.byteLength(t,`utf8`)<=212&&Bp(t)?t:zv(e)},Vv=e=>e.REFS_ALLOW_FILE_URLS===`1`,Hv=(e,t)=>{let n=_f(t,{allowFileUrls:Vv(e.env)});return{cloneUrl:n.cloneUrl,key:n.key}},Uv=async(e,t)=>{if(t===``)throw v(`refs add npm: requires a package name, e.g. npm:left-pad`);yv(e,`resolving npm package '${t}'…`);let n=await tm(e.fetcher,t),r={cloneUrl:n.cloneUrl,key:n.key,npmPkgName:t};return n.directory!==void 0&&(r.npmDirectory=n.directory),r},Wv=(e,t)=>t.startsWith(`npm:`)?Uv(e,t.slice(4)):Promise.resolve(Hv(e,t)),Gv=(e,t)=>{if(e.npmPkgName===void 0)return e;let n=jg(`git_transport`,void 0,t);return{...e,cloneUrl:Of(e.cloneUrl,n)}},Kv=e=>`ref '${e}' already exists — use refs edit or refs remove`,qv=(e,t)=>{if(e.refs[t]!==void 0)throw Ce(Kv(t))},Jv=async e=>{try{return await c(e,{withFileTypes:!0})}catch(e){if(R(e))return;throw e}},Yv=e=>e.filter(e=>e.isDirectory()).map(e=>e.name),Xv=async(e,t)=>{let n=await Jv(e);if(n===void 0)return{kind:`stop`};let r=Yv(n);if(r.includes(t))return{kind:`continue`,nextDir:m(e,t)};let i=r.find(e=>e.toLowerCase()===t.toLowerCase());return i===void 0?{kind:`stop`}:{kind:`collision`,name:i}},Zv=async(e,t,n)=>{let[r,...i]=t;if(r===void 0)return;let a=await Xv(e,r);if(a.kind!==`stop`)return a.kind===`collision`?[...n,a.name].join(`/`):Zv(a.nextDir,i,[...n,r])},Qv=[],$v=async(e,t)=>{let n=await Zv(e.sourcesDir,t.split(`/`),Qv);if(n!==void 0)throw Ce(`checkout path for '${t}' collides case-insensitively with existing '${n}'`)},ey=e=>{switch(e.kind){case`candidate_not_inspected`:case`manifest_missing_name`:case`manifest_unreadable`:case`workspace_dir_unreadable`:return e.path;case`workspace_declaration_unparsed`:case`workspace_file_unreadable`:return e.file;case`unsupported_pattern`:return e.pattern;case`scan_budget_exhausted`:return`${e.pattern} at ${e.path}`;case`no_workspace_declaration`:return}},ty=e=>e.diagnostics.filter(e=>!Kh({diagnostics:[e],packages:[]})).map(e=>{let t=ey(e);return t===void 0?e.kind:`${t}: ${e.kind}`}).toSorted().join(`, `),ny=(e,t,n)=>`checkout at ${e} points at '${U(t)}' — expected '${U(n)}'; remove the checkout directory or run refs remove before retrying`,ry=e=>e.exitCode===0?e.stdout.trim():`(no origin remote)`,iy=(e,t)=>{try{return _f(e,{allowFileUrls:t}).key}catch{return}},ay=async(e,t)=>{let n=await e.run(`git`,[`remote`,`get-url`,`origin`],{cwd:t.dest}),r=ry(n),i=iy(t.expectedUrl,t.allowFileUrls),a=iy(r,t.allowFileUrls);if(i===void 0||a!==i)throw Ce(ny(t.dest,r,t.expectedUrl))},oy=e=>`checkout at ${e} exists but is not refs-managed — remove it (${xv(e)}) and retry`,sy=async(e,t)=>{let n=await e.run(`git`,[`config`,`--local`,`core.hooksPath`],{cwd:t.dest});if(n.exitCode!==0||n.stdout.trim()!==t.hooksDir)throw Ce(oy(t.dest))},cy=async(e,t)=>{await a(ie(t.dest),{recursive:!0}),yv(e,`cloning ${U(t.cloneUrl)} into ${t.dest}…`);let n=await Cd(e.runner,t);return n.warning===void 0?{effectiveMode:n.effectiveMode}:{effectiveMode:n.effectiveMode,warning:n.warning}},ly=async(e,t)=>(iu(t.home,t.dest),H(t.dest)?(await ay(e.runner,{allowFileUrls:t.allowFileUrls,dest:t.dest,expectedUrl:t.cloneUrl}),await sy(e.runner,{dest:t.dest,hooksDir:t.hooksDir}),{}):cy(e,t)),uy=(e,t)=>`checkout for '${e}' at ${t} is missing or corrupt (git rev-parse HEAD failed) — run: refs remove ${e}, then refs add <source> --dry-run again`,dy=(e,t,n)=>`checkout for '${e}' at ${t} has a HEAD sha refs cannot store yet (${n.length} hex chars, expected 40) — only SHA-1 repositories are supported for now; \`--object-format=sha256\` repositories are not yet supported`,fy=async(e,t)=>{await ay(e,t),await sy(e,{dest:t.dest,hooksDir:t.hooksDir});let n=await e.run(`git`,[`rev-parse`,`HEAD`],{cwd:t.dest});if(n.exitCode!==0)throw y(uy(t.key,t.dest));let r=n.stdout.trim();if(!kg.shape.head_sha.safeParse(r).success)throw y(dy(t.key,t.dest,r));return r},py=e=>Kh(e)?void 0:`workspace detection could not fully inspect the declared workspaces (${ty(e)}) — members may be missing from the detected packages; the repository's own workspace declaration is what settles it`,my=(e,t)=>{let n=Dv(e.packages,t.resolved.npmDirectory,t.resolved.npmPkgName),r=Av(e.packages,n),i=py(e);return{defaultBranch:t.defaultBranch,...i===void 0?{}:{detectionWarning:i},packages:n,...r===void 0?{}:{rootPackageName:r},tagFormatCandidate:t.tagFormatCandidate}},hy=e=>e.complete?Gd(e.tags):null,gy=async(e,t,n)=>{let r=await Td(e.runner,t),i=await Fd(e.runner,t),a=hy(i);yv(e,`detecting workspace packages…`);let o=await Y_(t);return my(o,{defaultBranch:r,resolved:n,tagFormatCandidate:a})},_y=(e,t)=>W(t.home,Bv(t.resolved.key),async()=>{let n=await ly(e,{allowFileUrls:Vv(e.env),cloneUrl:t.resolved.cloneUrl,dest:t.dest,home:t.home,hooksDir:t.home.hooksDir,mode:t.cloneMode}),r={fields:await gy(e,t.dest,t.resolved)};return n.effectiveMode!==void 0&&(r.effectiveMode=n.effectiveMode),n.warning!==void 0&&(r.warning=n.warning),r}),vy=(e,t)=>({default_branch:e.defaultBranch,description:``,key:t.key,packages:e.packages,tag_format_candidate:e.tagFormatCandidate,url:t.cloneUrl}),yy=e=>{let{effectiveMode:t,fields:n,warning:r}=e.cloneResult;return{dest:e.dest,proposal:vy(n,e.resolved),...n.detectionWarning===void 0?{}:{detectionWarning:n.detectionWarning},...n.rootPackageName===void 0?{}:{rootPackageName:n.rootPackageName},...t===void 0?{}:{effectiveCloneMode:t},...r===void 0?{}:{warning:r}}},by=async(e,t)=>{let n=z(e.env),r=await V(n),i=Gv(await Wv(e,t),r.settings);qv(r,i.key),await $v(n,i.key);let a=B(n,i.key),o=jg(`clone_mode`,void 0,r.settings),s=await _y(e,{cloneMode:o,dest:a,home:n,resolved:i});return yy({cloneResult:s,dest:a,resolved:i})},xy=(e,t,n)=>W(e,`home`,async()=>{let r=await V(e);qv(r,t);let i=await Pg(e),a=i.refs[t],o=n??a?.effective_clone_mode,s={...a,pending_proposal_at:new Date().toISOString()};o!==void 0&&(s.effective_clone_mode=o),i.refs[t]=s,await Fg(e,i)}),Sy=(e,t)=>{let n=bl.safeParse(e);if(!n.success)throw y(T(n.error));let r=Ag.safeParse(t);if(!r.success)throw y(T(r.error));return{config:n.data,state:r.data}},Cy=async(e,t)=>{let n=await V(e.home);qv(n,e.ref.key);let r=Fv(e.ref);n.refs[e.ref.key]=r;let i=await Pg(e.home);return i.refs[e.ref.key]={effective_clone_mode:e.effectiveCloneMode??i.refs[e.ref.key]?.effective_clone_mode??jg(`clone_mode`,void 0,n.settings),head_sha:t,last_fetched_at:new Date().toISOString()},{...Sy(n,i),entry:r}},wy=async(e,t)=>{let n=Vv(e.env),r=await W(t.home,Bv(t.ref.key),()=>(iu(t.home,t.dest),fy(e.runner,{allowFileUrls:n,dest:t.dest,expectedUrl:t.ref.url,hooksDir:t.home.hooksDir,key:t.ref.key})));return W(t.home,`home`,async()=>{let{config:e,entry:n,state:i}=await Cy(t,r);return await Fg(t.home,i),await fu(t.home,e),{entry:n,key:t.ref.key}})},Ty=(e,t)=>t===`-`?e.readStdin():s(t,`utf8`),Ey=e=>{try{return JSON.parse(e)}catch(e){throw y(`invalid JSON in proposal: ${_v(e)}`)}},Dy=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Oy=e=>Dy(e)&&`ok`in e&&!(`key`in e),ky=e=>{if(!Oy(e))return e;if(e.ok===!1)throw y(`proposal file contains a failed refs envelope (ok is false) — re-run the dry-run`);if(Dy(e.data))return e.data;throw y(`proposal file is a refs envelope without a usable data object — re-run the dry-run`)},Ay=e=>e.code===`unrecognized_keys`,jy=e=>e.path.length===0,My=(e,t)=>{let n=t.toSorted().map(e=>`"${e}"`).join(`, `);return e===``?`✖ unrecognized key(s) in proposal: ${n}`:`✖ unrecognized key(s) in proposal at ${e}: ${n}`},Ny=e=>{let t=new Map;for(let n of e){let e=Yt(n.path);t.set(e,[...t.get(e)??[],...n.keys])}return[...t.entries()].toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>My(e,t))},Py=e=>`✖ invalid proposal: ${e.message}`,Fy=e=>{let t=e.issues.filter(e=>Ay(e)),n=e.issues.filter(e=>!Ay(e)),r=n.filter(e=>jy(e));if(t.length===0&&r.length===0)return T(e);let i=n.filter(e=>!jy(e)),a=[...Ny(t),...r.map(e=>Py(e))];return i.length>0&&a.push(T({issues:i})),a.join(`
350
- `)},Iy=e=>{let t=Og.safeParse(e);if(!t.success)throw y(Fy(t.error));return t.data},Ly=async(e,t)=>{let n=await Ty(e,t);return Iy(ky(Ey(n)))},Ry=(e,t)=>[`refs add: dry-run proposal ready for '${e}' (checkout: ${t})`,`next: review the proposal, then run refs add --proposal <file> to finalize`],zy=e=>[...gv(e.warning),...gv(e.detectionWarning)],By=async(e,t)=>{let n=await by(e,t),r=z(e.env);await xy(r,n.proposal.key,n.effectiveCloneMode);let i=zy(n);return{data:n.proposal,human:Ry(n.proposal.key,n.dest),warnings:i}},Vy=e=>[`refs add: '${e}' added to config`],Hy=e=>{let t={default_branch:e.default_branch,description:e.description,key:e.key,url:e.url};e.tag_format_candidate!==null&&(t.tag_format=e.tag_format_candidate);let n=Pv(e.packages);return n!==void 0&&(t.packages=n),t},Uy=async(e,t)=>{let n=await Ly(e,t),r=z(e.env),i=B(r,n.key);if(!H(i))throw _(`no checkout found at ${i} — run: refs add <source> --dry-run first`);let a=Hy(n),{entry:o,key:s}=await wy(e,{dest:i,home:r,ref:a});return{data:{entry:o,key:s},human:Vy(s),warnings:[]}},Wy=(e,t,n)=>{Nv(e.proposal.packages,n,e.rootPackageName);let r={default_branch:e.proposal.default_branch,description:t,key:e.proposal.key,url:e.proposal.url};e.proposal.tag_format_candidate!==null&&(r.tag_format=e.proposal.tag_format_candidate);let i=kv(e.proposal.packages,{refDescription:t,...e.rootPackageName===void 0?{}:{rootPackageName:e.rootPackageName}});return i!==void 0&&(r.packages=i),r},Gy=async(e,t,n)=>{let r=await by(e,t),i=z(e.env);await xy(i,r.proposal.key,r.effectiveCloneMode);let a=Wy(r,n,t),o={dest:r.dest,home:i,ref:a};r.effectiveCloneMode!==void 0&&(o.effectiveCloneMode=r.effectiveCloneMode);let{entry:s,key:c}=await wy(e,o);return{data:{entry:s,key:c},human:Vy(c),warnings:zy(r)}},Ky=e=>{let t=[e.dryRun,e.proposal!==void 0,e.description!==void 0].filter(Boolean).length;if(t>1)throw v(`refs add: use only one of --dry-run, --proposal, or --description`);if(t===0)throw v(`refs add needs --dry-run, --proposal, or --description`)},qy=e=>{if(e===void 0||e===``)throw v(`refs add requires <source> (a git url or npm:<package>)`);return e},Jy=(e,t)=>(Ky(t),t.proposal===void 0?t.description===void 0?By(e,qy(t.source)):Gy(e,qy(t.source),t.description):Uy(e,t.proposal)),Yy=(e,t)=>{let n={dryRun:t.dryRun===!0};return e!==void 0&&(n.source=e),t.proposal!==void 0&&(n.proposal=t.proposal),t.description!==void 0&&(n.description=t.description),n},Xy=(e,t)=>{e.command(`add`).description(`Add a git reference in two phases: propose (--dry-run), then finalize (--proposal).`).argument(`[source]`,`git url or npm:<package> (omit when finalizing with --proposal)`).option(`--dry-run`,`resolve and clone the source, writing a reviewable proposal`).option(`--proposal <file>`,`finalize from a completed proposal JSON file (- for stdin)`).option(`--description <text>`,`one-shot: dry-run then finalize immediately with this description`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let r=await Jy(t,Yy(e,n));X(t,i,r.human,r.data,r.warnings)})()})},Zy=async e=>{let t=await e.runner.run(`git`,[`--version`]);return t.exitCode===0?{detail:t.stdout.trim(),name:`git`,status:`ok`}:{detail:t.stderr.trim()||`git --version exited with code ${t.exitCode}`,name:`git`,status:`fail`}},Qy=/^v(?<major>\d+)\.(?<minor>\d+)/u,$y=e=>{let t=Qy.exec(e),n=t?.groups?.major,r=t?.groups?.minor;if(n!==void 0&&r!==void 0)return{major:Number(n),minor:Number(r)}},eb=e=>e===void 0?!1:e.major>24||e.major===24&&e.minor>=2,tb=e=>{let{nodeVersion:t}=e;return eb($y(t))?{detail:t,name:`node`,status:`ok`}:{detail:`${t} does not satisfy the required range >=24.2`,name:`node`,status:`fail`}},nb=()=>bl.parse({meta:{cli_version:`0.0.0`,schema_version:1},refs:{},settings:{}}),rb=async e=>{try{return{config:await V(e)}}catch(e){return{config:nb(),errorMessage:_v(e)}}},ib=e=>e===void 0?{detail:`config is present and matches the current schema`,name:`config`,status:`ok`}:{detail:e,name:`config`,status:`fail`},ab={ci:`update check is off in CI — set REFS_UPDATE_CHECK=1 to run it here anyway`,config:`update check is off ([updates].check = false in config.toml)`,env:`update check is off (REFS_UPDATE_CHECK=0)`},ob=(e,t,n)=>{if(qg(e,t)){let r=n?` (npm was unreachable just now; this was its last answer)`:``;return{detail:`${Jg(e,t)}${r}`,name:`cli-update`,status:`warn`}}return n?{detail:`could not reach npm to check; its last answer was ${t}, which this CLI (${e}) already has`,name:`cli-update`,status:`warn`}:{detail:`this CLI (${e}) is npm's latest published release`,name:`cli-update`,status:`ok`}},sb=async(e,t)=>{let n=Qg({env:e.env,updates:t.updates});if(n!==`on`)return{detail:ab[n],name:`cli-update`,status:`ok`};let{latest:r,stale:i}=await Kg({fetch:e.fetcher,home:z(e.env),nowMs:Date.now()});return r===void 0?{detail:`could not reach npm to learn the latest published version — not a fault of your setup, and nothing else depends on it`,name:`cli-update`,status:`warn`}:ob(e.cliVersion,r,i)},cb=(e,t)=>Object.keys(t.refs).map(e=>il.parse(e)).map(t=>({dest:B(e,t),key:t})).filter(e=>H(e.dest)),lb=[`pre-commit`,`pre-push`],ub=async(t,r)=>{try{return await e(m(t.hooksDir,r),n.X_OK),!0}catch{return!1}},db=async e=>{let t=await Promise.all(lb.map(t=>ub(e,t)));return lb.filter((e,n)=>!t[n])},fb=async(e,t,n)=>{let r=await e.runner.run(`git`,[`config`,`--local`,`--get`,`core.hooksPath`],{cwd:n});return r.exitCode===0&&r.stdout.trim()===t.hooksDir},pb=e=>e.missingHooks.length>0?{detail:`${e.missingHooks.map(e=>`hooks/${e}`).join(`, `)} missing or not executable — run: refs init`,name:`hooks-guard`,status:`fail`}:e.badKeys.length>0?{detail:`core.hooksPath not set for: ${e.badKeys.join(`, `)} — run: refs init`,name:`hooks-guard`,status:`fail`}:{detail:`${lb.map(e=>`hooks/${e}`).join(`, `)} present; ${e.checkoutCount} checkout(s) guarded`,name:`hooks-guard`,status:`ok`},mb=async(e,t,n)=>{let r=cb(t,n),[i,a]=await Promise.all([db(t),Promise.all(r.map(n=>fb(e,t,n.dest)))]),o=r.filter((e,t)=>!a[t]).map(e=>e.key);return pb({badKeys:o,checkoutCount:r.length,missingHooks:i})},hb=async(e,t)=>{let n=await e.runner.run(`git`,[`status`,`--porcelain`],{cwd:t.dest});return n.exitCode===0?{broken:!1,detail:``,dirty:n.stdout.trim()!==``,key:t.key}:{broken:!0,detail:n.stderr.trim(),dirty:!1,key:t.key}},gb=e=>{let t=e.filter(e=>e.broken);if(t.length>0)return{detail:t.map(e=>`${e.key}: git status failed — ${e.detail}`).join(`; `),name:`dirty-checkouts`,status:`fail`};let n=e.filter(e=>e.dirty).map(e=>e.key);return n.length===0?{detail:`no local changes in any checkout`,name:`dirty-checkouts`,status:`ok`}:{detail:`local changes will be discarded on next sync: ${n.join(`, `)}`,name:`dirty-checkouts`,status:`warn`}},_b=async(e,t,n)=>{let r=cb(t,n),i=await Promise.all(r.map(t=>hb(e,t)));return gb(i)},vb=async e=>{try{return await Pg(e)}catch{return Ag.parse({})}},yb=async e=>{try{return(await c(e,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name)}catch(e){if(R(e))return[];throw e}},bb=async(e,t)=>{if(H(e))return[[...t]];let n=await yb(e);return(await Promise.all(n.map(n=>bb(m(e,n),[...t,n])))).flat()},xb=(e,t,n)=>{let r=e.refs[t]?.pending_proposal_at;return r!==void 0&&n-Date.parse(r)<864e5},Sb=(e,t,n)=>xb(t,e.key,n)?`${e.key}: pending add`:`${e.key}: orphan — remove with: ${xv(e.dest)}`,Cb=(e,t)=>({dest:m(e.sourcesDir,...t),key:t.join(`/`)}),wb=async(e,t,n)=>{let r=(await bb(e.sourcesDir,[])).map(t=>Cb(e,t)).filter(e=>!Object.hasOwn(t.refs,e.key));if(r.length===0)return{detail:`no orphaned checkouts under sources/`,name:`orphans`,status:`ok`};let i=Date.now();return{detail:r.map(e=>Sb(e,n,i)).join(`; `),name:`orphans`,status:`warn`}},Tb=e=>e!==`unmaterialized`&&e!==`verified`,Eb=new Set([`ambiguous`,`missing`,`relocated`,`unregistered`]),Db=(e,t={})=>{let{declined:n=[],discoveryIncomplete:r}=t,i=n.length===0?{}:{declined:[...n]},[a]=e;return a===void 0?r===void 0?{...i,status:`ok`}:{...i,discovery_incomplete:r,status:`unknown`}:{...i,...r===void 0?{}:{discovery_incomplete:r},packages:[...e],status:e.some(e=>Eb.has(e.status))?`drift`:`unknown`}},Ob=`(unknown)`,kb=e=>ul.safeParse(e.path).success,Ab=(e,t)=>{let n=`${e.name}: declared in this checkout but not registered — it cannot be resolved by name until it is`;if(e.path===void 0)return`${n}. Declared at several paths (${(e.candidates??[]).join(`, `)}) — pick one`;if(!kb(e))return`${n}. Its path is one the configuration cannot hold, so there is no command for it — report it and leave it unregistered`;let r=bv([`--package=${Q(e.name)}`,`--decline`,`--path=${Q(e.path)}`],[t]);return Kc(e.name)?`${n}. To register it: ${bv([`--package=${Q(e.name)}`,`--create`,`--path=${Q(e.path)}`,`--description="<what it is>"`],[t])}. If it should not be: ${r}`:`${n}. Its name is one the packages table cannot hold, so it cannot be registered — if that is the answer, record it: ${r}`},jb=(e,t,n)=>{let r=`${e.name}: moved to ${e.path??Ob} — update the entry's path (${n})`,i=bv([`--package=${Q(e.name)}`],[t,`path`,e.path??``]);return ul.safeParse(e.path).success?`${r}. To fix it: ${i}`:r},Mb=(e,t)=>{let n=`configured: ${e.configured_path??Ob}`;if(e.status===`relocated`)return jb(e,t,n);if(e.status===`missing`){let r=bv([`--package=${Q(e.name)}`,`--remove`],[t]);return`${e.name}: gone from this repo's workspaces (${n}) — repoint the entry if it moved out of them, or unregister it: ${r}`}if(e.status===`ambiguous`){let t=(e.candidates??[]).join(`, `);return`${e.name}: declared at several paths (${t}) — point the entry at one (${n})`}return`${e.name}: could not be checked — ${e.reason??`(no reason given)`} (${n})`},Nb=(e,t)=>e.status===`unregistered`?Ab(e,t):Mb(e,t),Pb=e=>`could not check for unregistered packages — ${e}`,Fb=e=>`…and ${e} more finding(s) — act on the ones above (register, repoint or decline) and run the check again to see the rest`,Ib=e=>{let t=e.length-10;return t<=0?[...e]:[...e.slice(0,10),Fb(t)]},Lb=(e,t)=>{if(e.reason!==void 0)return[`could not be checked — ${e.reason}`];let n=Ib((e.packages??[]).map(e=>Nb(e,t)));return e.discovery_incomplete===void 0?n:[...n,Pb(e.discovery_incomplete)]},Rb=e=>{let t;return()=>(t??=Y_(e),t)},zb=async(e,t,n)=>{let r=await f_(e);if(r===void 0||t.some(e=>e.packageName===r.name))return{issues:[]};let i=await n();if(!Kh(i))return{incomplete:ty(i),issues:[]};let a=ng(i.packages,r.name);return a.kind===`ambiguous`?{issues:[{candidates:a.paths,name:r.name,status:`unregistered`}]}:{issues:a.kind===`found`?[{name:r.name,path:a.path,status:`unregistered`}]:[]}},Bb=e=>{let t=new Map;for(let n of e)t.set(n.name,[...t.get(n.name)??[],n.path]);return t},Vb=(e,t)=>{let n=new Set(e.changedDirs),r=t.filter(e=>!n.has(e.path)).map(e=>e.name);return new Set([...e.namesBefore,...r])},Hb=(e,t)=>t.length===1&&t[0]!==void 0?{name:e,path:t[0],status:`unregistered`}:{candidates:[...t],name:e,status:`unregistered`},Ub=async(e,t,n)=>{if(t.kind===`arrivals`&&t.changedDirs.length===0)return{issues:[]};let r=await n();if(!Kh(r))return{incomplete:ty(r),issues:[]};let i=new Set(e.map(e=>e.packageName)),a=r.packages.filter(e=>e.path!==`.`),o=t.kind===`all`?void 0:Vb(t,a);return{issues:[...Bb(a)].filter(([e])=>!i.has(e)).filter(([e])=>o===void 0||!o.has(e)).map(([e,t])=>Hb(e,t)).toSorted((e,t)=>e.name.localeCompare(t.name))}},Wb=(e,t)=>{if(t.length===0)return{issues:[...e],suppressed:[]};let n=(e,n)=>t.some(t=>t.name===e&&t.path===n),r=[];return{issues:e.flatMap(e=>{if(e.status!==`unregistered`)return[e];let t=e.path===void 0?e.candidates??[]:[e.path],i=t.filter(t=>!n(e.name,t)),a=t.filter(t=>n(e.name,t));return r.push(...a.map(t=>({name:e.name,path:t}))),i.length===0?[]:[Hb(e.name,i)]}),suppressed:r}},Gb=(e,t)=>({path:e.configuredPath,reason:t,status:`unverifiable`}),Kb=(e,t)=>qh(t)?{configuredPath:e.configuredPath,path:null,status:`missing`}:Gb(e,`this repo declares no workspaces, so there was nowhere to search`),qb=(e,t)=>t===e.configuredPath,Jb=e=>e.packages.filter(e=>e.path!==`.`),Yb=(e,t)=>{let n=ng(Jb(t),e.packageName);return n.kind===`ambiguous`?{candidates:n.paths,configuredPath:e.configuredPath,path:null,status:`ambiguous`}:Kh(t)?n.kind===`absent`?Kb(e,t):qb(e,n.path)?Gb(e,`the checkout changed while it was being inspected`):{configuredPath:e.configuredPath,path:n.path,status:`relocated`}:Gb(e,n.kind===`found`?`workspace detection was incomplete, so the new location is not confirmed unique`:`workspace detection was incomplete`)},Xb=e=>{let t=new Map(Object.entries(e??{}));return[...t.keys()].toSorted().flatMap(e=>{let n=t.get(e);return n===void 0?[]:[{configuredPath:n.path,packageName:e}]})},Zb=async(e,t)=>{let n=await $h(e,t.configuredPath,t.packageName);if(n.kind===`match`)return{path:t.configuredPath,status:`verified`};if(n.kind===`unreadable`)return{path:t.configuredPath,reason:n.reason,status:`unverifiable`}},Qb=e=>e.flatMap(e=>e.settled===void 0?[]:[{outcome:e.settled,query:e.query}]),$b=async(e,t,n)=>{let r=await Promise.all(t.map(async t=>({query:t,settled:await Zb(e,t)})));if(r.every(e=>e.settled!==void 0))return Qb(r);let i=await n();return r.map(e=>({outcome:e.settled??Yb(e.query,i),query:e.query}))},ex=e=>{let{outcome:t,query:n}=e;return Tb(t.status)?[{...t.candidates===void 0?{}:{candidates:t.candidates},configured_path:n.configuredPath,name:n.packageName,...t.status===`relocated`&&t.path!==null?{path:t.path}:{},...t.reason===void 0?{}:{reason:t.reason},status:t.status}]:[]},tx=(e,t)=>{let n=new Set(e.map(e=>e.name));return[...e,...t.filter(e=>!n.has(e.name))]},nx=async(e,t,n)=>{let r=Xb(t.packages),[i]=r;if(i===void 0)return{status:`ok`};let a=Rb(e);try{let[i,o,s]=await Promise.all([$b(e,r,a),zb(e,r,a),Ub(r,n,a)]),c=Wb([...i.flatMap(e=>ex(e)),...tx(o.issues,s.issues)],t.declined_packages??[]);return Db(c.issues,{declined:c.suppressed,...(s.incomplete??o.incomplete)===void 0?{}:{discoveryIncomplete:s.incomplete??o.incomplete}})}catch(e){return{reason:_v(e),status:`unknown`}}},rx=async(e,t,n)=>{try{return await W(e,Bv(n.key),()=>nx(n.dest,t.refs[n.key]??{},{kind:`all`}),{timeoutMs:100})}catch(e){if(e instanceof g&&e.code===`conflict`)return{reason:`another refs process is holding this ref`,status:`unknown`};throw e}},ix=`config-drift`,ax=e=>e===0?``:` (${e} declined package(s) not reported)`,ox=(e,t)=>{let{declined:n,findings:r,lines:i}=e,[a]=i;return a===void 0?{detail:`every configured package path resolves in ${t} checkout(s)${ax(n)}`,name:ix,status:`ok`}:{detail:`${i.join(`; `)}${ax(n)}`,findings:r,name:ix,status:`warn`}},sx=async(e,t,n)=>{let[r,...i]=n;if(r===void 0)return{declined:0,findings:[],lines:[]};let a=await rx(e,t,r),o=await sx(e,t,i),s=a.packages??[];return{declined:(a.declined??[]).length+o.declined,findings:s.length===0?o.findings:[{key:r.key,packages:s},...o.findings],lines:[...Lb(a,r.key).map(e=>`${r.key}: ${e}`),...o.lines]}},cx=async(e,t)=>{let n=cb(e,t);return ox(await sx(e,t,n),n.length)},lx=e=>{let{diagnosis:t}=e;return e.kind===`claim`||!e.isDirectory||t.pidState===`definitely-dead`||t.stale||t.meta===`malformed`||t.meta===`unreadable`||t.policy===`unknown`?!1:t.ageMs===void 0||t.ageMs>=0},ux=e=>{let{ageMs:t,budgetMs:n,policy:r}=e;return r===`unknown`?`, state could not be read`:t===void 0||n===void 0?``:t<0?`, recorded time is in the future — check the system clock`:`, ${Cp(t)} into a ${Cp(n)} window`},dx=e=>e.pid===void 0?`owner unknown (metadata ${e.meta})`:e.pidState===`definitely-dead`?`recorded pid ${e.pid} is not running`:`recorded pid ${e.pid} present`,fx=(e,t)=>{let n=m(e.locksDir,sp,t.name),r=t.diagnosis.ageMs===void 0?``:` for ${Cp(t.diagnosis.ageMs)}`;return`steal claim on ${t.name}: present${r}. Stealing this lock is blocked while it is here. A reclaim in progress clears it within a moment; if it stays, ${px}: ${Sv(n)}`},px=`stop every refs process using this home — including suspended ones — and then run`,mx=(e,t)=>{let{diagnosis:n}=t;if(tp(n))return`, reclaimable now`;if(!n.stale&&t.isDirectory)return``;let r=m(e.locksDir,t.name);return`, not automatically reclaimable — if it is genuinely abandoned, ${px}: ${xv(r)}`},hx=(e,t)=>{let{diagnosis:n}=t,r=t.isDirectory?``:`not a directory, `,i=mx(e,t);return`${t.name}: ${r}${dx(n)}${ux(n)}${i}`},gx=async e=>{let t=await Sp(e),[n]=t;return n===void 0?{detail:`no locks held`,name:`locks`,status:`ok`}:{detail:t.map(t=>t.kind===`claim`?fx(e,t):hx(e,t)).join(`; `),name:`locks`,status:t.every(e=>lx(e))?`ok`:`warn`}},_x=[`.agents`,`skills`,`refs`,`SKILL.md`],vx=[`skills`,`refs`,`SKILL.md`],yx=[`.claude`,`skills`,`refs`,`SKILL.md`],bx=`npx skills add kaisers-io/refs`,xx=`npm i -g @kaisers-io/refs@latest`,Sx=(e,t)=>e===void 0?void 0:{display:t,path:e},Cx=e=>{let{dirName:t,env:n,home:r,overrideName:i}=e,a=n[i]?.trim();return a!==void 0&&a.length>0?{display:a,path:a}:Sx(r===void 0?void 0:m(r,t),`~/${t}`)},wx=e=>{let t=e.homedir.length>0?e.homedir:void 0;return[{label:`shared ~/.agents`,root:Sx(t,`~/.agents`),segments:_x},{label:`Claude Code`,root:Cx({dirName:`.claude`,env:e.env,home:t,overrideName:`CLAUDE_CONFIG_DIR`}),segments:vx},{label:`Codex`,root:Cx({dirName:`.codex`,env:e.env,home:t,overrideName:`CODEX_HOME`}),segments:vx},{label:`project ./.agents`,root:Sx(e.cwd,`./.agents`),segments:_x},{label:`project ./.claude`,root:Sx(e.cwd,`./.claude`),segments:yx}].flatMap(({label:e,root:t,segments:n})=>t===void 0?[]:[{display:t.display,label:e,path:m(t.path,...n)}])},Tx=async(e,t)=>{try{let n=await l(e);return{label:t,realPath:n,source:await s(n,`utf8`)}}catch{return}},Ex=e=>{let t=new Map;for(let n of e)t.has(n.realPath)||t.set(n.realPath,n);return[...t.values()]},Dx=/^---\r?\n(?<body>[\s\S]*?)\r?\n---/u,Ox=/^\s*cli_version:\s*["']?(?<version>[^"'\s]+)["']?\s*$/mu,kx=e=>{let t=Dx.exec(e)?.groups?.body;if(t!==void 0)return Ox.exec(t)?.groups?.version},Ax=(e,t)=>{if(e===t)return`match`;let n=zg(e,t);return n===void 0?`unknown`:n===0?`match`:n>0?`cli-older`:`skill-older`},jx={"cli-older":(e,t)=>`the refs skill targets CLI ${e} but this CLI is ${t} — update the CLI: ${xx}`,match:(e,t)=>`the refs skill is installed and matches this CLI (${t})`,"skill-older":(e,t)=>`the refs skill targets CLI ${e} but this CLI is ${t} — update the skill: ${bx}`,unknown:(e,t)=>`the refs skill targets CLI ${e} but this CLI is ${t} — reinstall both: ${xx} and ${bx}`},Mx=e=>{let{cliVersion:t,label:n,skillVersion:r}=e;if(r===void 0)return{detail:`the refs skill (${n}) predates the version gate — update it: ${bx}`,name:`skill`,status:`warn`};let i=Ax(r,t);return{detail:`${n}: ${jx[i](r,t)}`,name:`skill`,status:i===`match`?`ok`:`warn`}},Nx=e=>({detail:`refs skill not found in the locations this check knows about (${e.map(e=>e.display).join(`, `)}) — an install anywhere else is invisible here and still works; if it really is missing: ${bx}`,name:`skill`,status:`warn`}),Px=async e=>{let t=wx(e),n=await Promise.all(t.map(e=>Tx(e.path,e.label))),r=Ex(n.filter(e=>e!==void 0)).map(t=>Mx({cliVersion:e.cliVersion,label:t.label,skillVersion:kx(t.source)}));return r.find(e=>e.status!==`ok`)??r[0]??Nx(t)},Fx=/^(?<user>[^/\s@]+)@(?<host>[^:/\s]+):/u,Ix=e=>e===``?{}:{user:e},Lx=e=>e===``?{}:{port:e},Rx=e=>{try{let t=new URL(e);return t.protocol===`ssh:`?{host:t.hostname,...Ix(t.username),...Lx(t.port)}:void 0}catch{return}},zx=e=>{let t=Fx.exec(e),n=t?.groups?.host;return n===void 0?Rx(e):{host:n,user:t?.groups?.user??`git`}},Bx=e=>e.port===void 0?e.host:`${e.host}:${e.port}`,Vx=e=>e.user===void 0?Bx(e):`${e.user}@${Bx(e)}`,Hx=e=>{let t=Object.values(e.refs).map(e=>zx(e.url)).filter(e=>e!==void 0),n=new Map;for(let e of t)n.set(Vx(e),e);return[...n.values()].toSorted((e,t)=>Vx(e).localeCompare(Vx(t)))},Ux=/Permission denied/u,Wx=[/Could not resolve hostname/u,/Connection refused/u,/Host key verification failed/u,/timed out/u],Gx=e=>e.user===void 0?e.host:`${e.user}@${e.host}`,Kx=e=>{let t=[`-o`,`ConnectTimeout=5`,`-o`,`BatchMode=yes`],n=Gx(e);return e.port===void 0?[...t,`-T`,n]:[...t,`-p`,e.port,`-T`,n]},qx=async(e,t,n)=>{let r=Vx(t),i=await e.runner.run(`ssh`,Kx(t),{timeoutMs:n});return i.timedOut===!0?{host:r,outcome:`timeout`}:Ux.test(i.stderr)?{host:r,outcome:`denied`}:Wx.some(e=>e.test(i.stderr))?{detail:i.stderr.trim(),host:r,outcome:`connection-warn`}:{host:r,outcome:`ok`}},Jx=(e,t)=>{let n=e.filter(e=>e.outcome===`timeout`).map(e=>e.host);if(n.length!==0)return{detail:`ssh probe timed out after ${t/1e3}s: ${n.join(`, `)}`,name:`ssh-auth`,status:`fail`}},Yx=e=>{let t=e.filter(e=>e.outcome===`denied`).map(e=>e.host);if(t.length!==0)return{detail:`ssh permission denied for: ${t.join(`, `)}`,name:`ssh-auth`,status:`fail`}},Xx=e=>{let t=e.filter(e=>e.outcome===`connection-warn`);if(t.length!==0)return{detail:`ssh connection issue, treated as warn: ${t.map(e=>`${e.host} (${e.detail??``})`).join(`; `)}`,name:`ssh-auth`,status:`warn`}},Zx=e=>({detail:`ssh auth ok for: ${e.map(e=>e.host).join(`, `)}`,name:`ssh-auth`,status:`ok`}),Qx=(e,t)=>Jx(e,t)??Yx(e)??Xx(e)??Zx(e),$x=async(e,t,n)=>{let r=Hx(t);if(r.length===0)return;let i=n?.timeoutMs??1e4,a=await Promise.all(r.map(t=>qx(e,t,i)));return Qx(a,i)},eS=async e=>{try{return await e.run()}catch(t){return{detail:`check crashed: ${_v(t)}`,name:e.name,status:`fail`}}},tS=async e=>{let[t,...n]=e;if(t===void 0)return[];let r=await eS(t),i=await tS(n);return r===void 0?i:[r,...i]},nS=e=>{let{configLoad:t,ctx:n,home:r,state:i}=e;return[{name:`git`,run:()=>Zy(n)},{name:`node`,run:()=>Promise.resolve(tb(n))},{name:`config`,run:()=>Promise.resolve(ib(t.errorMessage))},{name:`hooks-guard`,run:()=>mb(n,r,t.config)},{name:`dirty-checkouts`,run:()=>_b(n,r,t.config)},{name:`config-drift`,run:()=>cx(r,t.config)},{name:`orphans`,run:()=>wb(r,t.config,i)},{name:`locks`,run:()=>gx(r)},{name:`skill`,run:()=>Px(n)},{name:`cli-update`,run:()=>sb(n,t.config)},{name:`ssh-auth`,run:()=>$x(n,t.config)}]},rS=async e=>{let t=z(e.env),n=await rb(t),r=await vb(t);return tS(nS({configLoad:n,ctx:e,home:t,state:r}))},iS={fail:`FAIL`,ok:`OK`,warn:`WARN`},aS=e=>e.map(e=>`[${iS[e.status]}] ${e.name}: ${e.detail}`),oS=e=>e.some(e=>e.status===`fail`),sS=(e,t)=>{e.command(`doctor`).description(`Run environment/integrity checks (git, node, config, hooks, checkouts, drift, locks, ssh).`).action((e,n)=>{let r=Y(n);return Z(t,r,async()=>{let e=await rS(t);X(t,r,aS(e),{checks:e}),oS(e)&&(process.exitCode=Se.UNEXPECTED)})()})},cS=(e,t)=>{let n=e.refs[t];if(n===void 0)throw Error(`internal: matched ref key '${t}' is missing from config.refs`);return n},lS=(e,t)=>{if(!H(e))throw _(`checkout for '${t}' is missing — run: refs sync ${t}`)},uS=(e,t,n)=>{let r=e.packages?.[n];if(r===void 0)throw _(`no package '${n}' registered on ref '${t}'`);return r},dS=`never`,fS=(e,t,n)=>e===void 0||n-Date.parse(e)>t,pS=(e,t)=>`${e} ${t}${e===1?``:`s`} ago`,mS=(e,t)=>{if(e===void 0)return dS;let n=t-Date.parse(e);if(Number.isNaN(n))return dS;let r=Math.floor(n/1e3);if(r<60)return`just now`;let i=Math.floor(r/60);if(i<60)return pS(i,`minute`);let a=Math.floor(i/60);if(a<24)return pS(a,`hour`);let o=Math.floor(a/24);return o<365?pS(o,`day`):pS(Math.floor(o/365),`year`)},hS=e=>{let t=mS(e.lastFetchedAt,e.now),n=[`synced: ${t}`];return e.stale&&t!==dS&&n.push(`status: stale`),e.missing&&n.push(`missing: checkout not found — run: refs sync`),n},gS=(e,t,n)=>{let r=e.state.refs[t],i=ol(jg(`sync_ttl`,n,e.settings)),a=Object.keys(n.packages??{}).toSorted();return{clone_mode:jg(`clone_mode`,n,e.settings),description:n.description,key:t,...r?.last_fetched_at===void 0?{}:{last_fetched_at:r.last_fetched_at},missing:!H(B(e.home,il.parse(t))),...e.includePackages?{packages:a}:{},packages_count:a.length,stale:fS(r?.last_fetched_at,i,e.now)}},_S=e=>{let t={home:e.home,includePackages:e.includePackages,now:e.now,settings:e.config.settings,state:e.state};return Object.entries(e.config.refs).map(([e,n])=>gS(t,e,n)).toSorted((e,t)=>e.key.localeCompare(t.key))},vS=async(e,t,n)=>{let r=z(e.env),i=await V(r),a=await Pg(r);return _S({config:i,home:r,includePackages:t,now:n,state:a})},yS=(e,t)=>[`ref: ${e.key}`,`description: ${e.description}`,...hS({lastFetchedAt:e.last_fetched_at,missing:e.missing,now:t,stale:e.stale})],bS=(e,t)=>e.length===0?[`no refs configured — run: refs add <source>`]:e.reduce((e,n,r)=>(r>0&&e.push(``),e.push(...yS(n,t)),e),[]),xS=e=>e.split(`/`),SS=(e,t)=>{let n=xS(e);if(t.length>n.length)return!1;let r=n.length-t.length;return t.every((e,t)=>e===n[r+t])},CS=(e,t)=>{if(Object.hasOwn(e.refs,t))return il.parse(t);let n=xS(t),r=Object.keys(e.refs).filter(e=>SS(e,n)).toSorted(),[i]=r;if(i===void 0)throw _(`no ref matches '${t}'`);if(r.length>1)throw v(`'${t}' matches more than one ref: ${r.join(`, `)}`);return il.parse(i)},wS=(e,t)=>{e.command(`list`).description(`List configured refs with their staleness/missing checkout status.`).option(`--packages`,`include each ref's package names in --json output (off by default)`).action((e,n)=>{let r=Y(n);return Z(t,r,async()=>{let n=Date.now(),i=await vS(t,e.packages===!0,n);X(t,r,bS(i,n),i)})()})},TS=e=>e===void 0?null:e,ES=(e,t)=>e.name===t.name&&e.path===t.path,DS=(e,t)=>{let n=(e.declined_packages??[]).filter(e=>!ES(e,t));if(n.length===0){let{declined_packages:t,...n}=e;return n}return{...e,declined_packages:n}},OS=(e,t)=>`package '${e.name}' at '${e.path}' is already declined on ref '${t}'`,kS=(e,t)=>`package '${e.name}' at '${e.path}' is not declined on ref '${t}' — nothing to undo`,AS=(e,t)=>`package '${e}' is registered on ref '${t}' — declining applies to packages the configuration does not have; unregister it first with --remove`,jS=(e,t,n)=>{if(Object.hasOwn(e.packages??{},t.name))throw y(AS(t.name,n));let r=e.declined_packages??[];if(r.some(e=>ES(e,t)))throw y(OS(t,n));return{...e,declined_packages:[...r,t]}},MS=e=>{if(e.declined)return jS(e.entry,e.record,e.key);if(!(e.entry.declined_packages??[]).some(t=>ES(t,e.record)))throw y(kS(e.record,e.key));return DS(e.entry,e.record)},NS=(e,t)=>{let n=z(e.env);return W(n,`home`,async()=>{let e=await V(n),r=CS(e,t.query),i=cS(e,r),a={name:t.packageName,path:t.path},o=MS({declined:t.declined,entry:i,key:r,record:a});return await fu(n,{...e,refs:{...e.refs,[r]:o}}),{declined:t.declined,field:`declined_packages`,key:r,new:t.declined?a:null,old:t.declined?null:a}})},PS=`packages`,FS=()=>Object.keys(hl.shape).toSorted().join(`, `),IS=e=>`unknown package field '${e}' — valid fields: ${FS()}`,LS=e=>Object.hasOwn(hl.shape,e),RS=(e,t,n)=>{if(!LS(t))throw v(IS(t));let r=e[t],i=hl.safeParse({...e,[t]:n});if(!i.success)throw y(T(i.error));return{field:t,newValue:i.data[t],oldValue:r,updated:i.data}},zS=async e=>{let t=uS(e.entry,e.key,e.packageName),n=RS(t,e.field,e.value),r={...e.entry,packages:{...e.entry.packages,[e.packageName]:n.updated}};return await fu(e.home,{...e.config,refs:{...e.config.refs,[e.key]:r}}),{field:n.field,key:e.key,new:TS(n.newValue),old:TS(n.oldValue)}},BS=(e,t)=>`package '${e}' is already registered on ref '${t}' — edit its fields instead`,VS=(e,t)=>{let n=z(e.env);return W(n,`home`,async()=>{let e=await V(n),r=CS(e,t.query),i=cS(e,r);if(Object.hasOwn(i.packages??{},t.packageName))throw y(BS(t.packageName,r));let a=gl.safeParse({...DS(i,{name:t.packageName,path:t.path}),packages:{...i.packages,[t.packageName]:{description:t.description,path:t.path}}});if(!a.success)throw y(T(a.error));return await fu(n,{...e,refs:{...e.refs,[r]:a.data}}),{created:!0,field:PS,key:r,new:{description:t.description,name:t.packageName,path:t.path},old:null}})},HS=(e,t)=>`package '${e}' is not registered on ref '${t}' — nothing to remove`,US=(e,t)=>{let n=z(e.env);return W(n,`home`,async()=>{let e=await V(n),r=CS(e,t.query),i=cS(e,r),a=i.packages??{};if(!Object.hasOwn(a,t.packageName))throw y(HS(t.packageName,r));let{[t.packageName]:o,...s}=a,c=Object.keys(s).length===0?WS(i):{...i,packages:s};return await fu(n,{...e,refs:{...e.refs,[r]:c}}),{field:PS,key:r,new:null,old:{description:o?.description??``,name:t.packageName,path:o?.path??``},removed:!0}})},WS=e=>{let{packages:t,...n}=e;return n},GS=e=>e.second===void 0&&e.value===void 0,KS=e=>{let{description:t,path:n}=e.create,{packageName:r}=e;if(r===void 0||t===void 0||n===void 0||!GS(e))throw v(`--create registers a new package: it needs --package <name>, --path <path> and --description <text>, and takes no <field> <value> arguments`);return{description:t,packageName:r,path:n}},qS=e=>{let{packageName:t}=e;if(t===void 0||e.create.path!==void 0||!GS(e)||e.create.description!==void 0)throw v(`--remove unregisters a package: it needs --package <name>, and takes no <field> <value> arguments, no --path and no --description`);return{packageName:t}},JS=e=>{let{packageName:t}=e,{path:n}=e.create;if(t===void 0||n===void 0||!GS(e)||e.create.description!==void 0)throw v(`--decline and --undecline record a decision about one package at one path: each needs --package <name> and --path <path>, and takes no <field> <value> arguments and no --description`);return{packageName:t,path:n}},YS=[`create`,`remove`,`decline`,`undecline`],XS=e=>{let t=YS.filter(t=>e[t]===!0);if(t.length>1)throw v(`use one of --create, --remove, --decline or --undecline: they are different answers about the same package, and running two at once would guess which one was meant`);return t[0]},ZS=(e,t,n)=>t===`create`?VS(e,{...KS(n),query:n.first}):t===`remove`?US(e,{...qS(n),query:n.first}):NS(e,{...JS(n),declined:t===`decline`,query:n.first}),QS=`packages`,$S=()=>Object.keys(gl.shape).filter(e=>e!==QS).toSorted().join(`, `),eC=e=>`unknown ref field '${e}' — valid fields: ${$S()}`,tC=e=>Object.hasOwn(gl.shape,e),nC=(e,t,n)=>`failed to rewrite git remote at ${e} to '${U(t)}': ${n.trim()}`,rC=async(e,t)=>{if(iu(t.home,t.dest),!H(t.dest))return;let n=await e.runner.run(`git`,[`remote`,`set-url`,`--`,`origin`,t.cloneUrl],{cwd:t.dest});if(n.exitCode!==0)throw y(nC(t.dest,t.cloneUrl,n.stderr))},iC=async(e,t)=>{let n=_f(t.value,{allowFileUrls:Vv(e.env)});if(n.key!==t.key)throw y(`new url derives a different key — remove and re-add instead`);let r=B(t.home,t.key);return await rC(e,{cloneUrl:n.cloneUrl,dest:r,home:t.home}),{...t.entry,url:n.cloneUrl}},aC=(e,t,n)=>{let r={...e,[t]:n},i=gl.safeParse(r);if(!i.success)throw y(T(i.error));return i.data},oC=(e,t)=>t.field===`url`?iC(e,{entry:t.entry,home:t.home,key:t.key,value:t.value}):Promise.resolve(aC(t.entry,t.field,t.value)),sC=async(e,t)=>{let{field:n}=t;if(n===QS)throw v(`use --package <name> <field> <value>`);if(!tC(n))throw v(eC(n));let r=t.entry[n],i=await oC(e,{entry:t.entry,field:n,home:t.home,key:t.key,value:t.value});return{new:i[n],old:r,updated:i}},cC=(e,t)=>{let n=z(e.env),{field:r,opts:i,query:a,value:o}=t;return W(n,`home`,async()=>{let t=await V(n),s=CS(t,a),c=cS(t,s);if(i.packageName!==void 0)return zS({config:t,entry:c,field:r,home:n,key:s,packageName:i.packageName,value:o});let l=await sC(e,{entry:c,field:r,home:n,key:s,value:o});return await fu(n,{...t,refs:{...t.refs,[s]:l.updated}}),{field:r,key:s,new:TS(l.new),old:TS(l.old)}})},lC=`settings`,uC=[],dC=()=>Object.keys(fl.shape).toSorted().join(`, `),fC=e=>`unknown setting '${e}' — valid settings: ${dC()}`,pC=e=>Object.hasOwn(fl.shape,e),mC=e=>`note: 'settings' addressed the global settings, not ${e} — use the full ref key to edit that ref`,hC=e=>{try{let t=CS(e,lC);return[mC(`ref '${t}'`)]}catch(e){if(e instanceof g&&e.code===`usage`)return[mC("one of several matching refs — see `refs list`")];if(e instanceof g&&e.code===`not_found`)return uC;throw e}},gC=e=>({data:{field:e.key,key:lC,new:TS(e.parsed[e.key]),old:TS(e.old)},warnings:hC(e.config)}),_C=(e,t)=>{let n=z(e.env);return W(n,`home`,async()=>{let e=await V(n);if(!pC(t.key))throw v(fC(t.key));let r=e.settings[t.key],i={...e.settings,[t.key]:t.value},a=fl.safeParse(i);if(!a.success)throw y(T(a.error));return await fu(n,{...e,settings:a.data}),gC({config:e,key:t.key,old:r,parsed:a.data})})},vC=[],yC=e=>{let t={};return e.package!==void 0&&(t.packageName=e.package),t},bC=e=>{if(e.second===void 0||e.value===void 0)throw v(`missing <field> and <value> — see 'refs edit --help'`);return{field:e.second,value:e.value}},xC=(e,t,n)=>{if(t.opts.packageName!==void 0)throw v(`--package is not valid with 'refs edit settings ...' — it only applies to ref/package edits`);return _C(e,n)},SC=async(e,t)=>{if(t.create.description!==void 0||t.create.path!==void 0)throw v(`--path and --description only apply to the package modes — to change one field of a registered package use: refs edit <ref> <field> <value> --package <name>`);let{field:n,value:r}=bC(t);return t.first===`settings`?xC(e,t,{key:n,value:r}):{data:await cC(e,{field:n,opts:t.opts,query:t.first,value:r}),warnings:vC}},CC=async(e,t)=>{let n=XS(t.create);return n===void 0?SC(e,t):{data:await ZS(e,n,{create:t.create,first:t.first,packageName:t.opts.packageName,second:t.second,value:t.value}),warnings:vC}},wC=e=>e==null?`(unset)`:String(e),TC=(e,t)=>{let n=t?e.new:e.old,r=t?`declined`:`no longer declining`;return`${e.key}: ${r} '${n.name}' at ${n.path}`},EC=e=>{if(e.created===!0){let t=e.new;return`${e.key}: registered '${t.name}' at ${t.path}`}if(e.removed===!0){let t=e.old;return`${e.key}: unregistered '${t.name}' (was at ${t.path})`}return e.declined===void 0?void 0:TC(e,e.declined)},DC=e=>{let t=EC(e);return t===void 0?[`${e.key}: ${e.field} '${wC(e.old)}' -> '${wC(e.new)}'`]:[t]},OC=(e,t)=>{e.command(`edit`).description(`Edit one field: 'refs edit settings <key> <value>' for a global setting, or 'refs edit <ref> <field> <value> [--package <name>]' for a ref or package field. With --create, registers a package the config does not have yet; with --remove, unregisters one it has; with --decline, records that a package the checkout declares is deliberately not registered, so drift stops reporting it.`).argument(`<ref-or-settings>`,`a ref key/unique suffix, or the literal 'settings'`).argument(`[field-or-key]`,`field to edit (or, in settings mode, the setting key)`).argument(`[value]`,`the new value`).option(`--package <name>`,`edit this package's field instead of a top-level ref field`).option(`--create`,`register --package as a new package on this ref`).option(`--remove`,`unregister --package from this ref, leaving the checkout alone`).option(`--decline`,`record that --package at --path is deliberately not registered`).option(`--undecline`,`withdraw a decline, so the package is reported again`).option(`--path <path>`,`with --create/--decline/--undecline: the package path, relative to the checkout root`).option(`--description <text>`,`with --create: what the package is`).action((e,n,r,i,a)=>{let o=Y(a);return Z(t,o,async()=>{let{data:a,warnings:s}=await CC(t,{create:i,first:e,opts:yC(i),second:n,value:r});X(t,o,DC(a),a,s)})()})},kC=`Install the agent skill: npx skills add kaisers-io/refs (from a local clone: npx skills add <path-to-this-repo> --skill refs)`,AC={migrated:`migrated`,noop:`unchanged`,seeded:`seeded`},jC=async e=>{await a(e.root,{recursive:!0}),await a(e.sourcesDir,{recursive:!0}),await a(e.locksDir,{recursive:!0}),await a(e.hooksDir,{recursive:!0})},MC=async e=>{let t=z(e.env);return await jC(t),{config:await W(t,`home`,async()=>{let e=await Su(t,X_);return await Pd(t),e}),home:t.root,skill_hint:kC}},NC=(e,t)=>{e.command(`init`).description(`Seed or migrate the refs home directory, its config, and the git hooks guard.`).action((e,n)=>{let r=Y(n);return Z(t,r,async()=>{let e=await MC(t);X(t,r,[`home: ${e.home}`,`config: ${AC[e.config]}`,``,kC],e)})()})},PC=async e=>{let t=z(e.env),n=await W(t,`home`,()=>Su(t,X_));return n===`migrated`?{backup:eu(t),result:n}:{backup:null,result:n}},FC=e=>e.result===`migrated`&&e.backup!==null?`config migrated (backup: ${re(e.backup)})`:e.result===`seeded`?`config seeded`:`config up to date`,IC=(e,t)=>{e.command(`migrate`).description(`Migrate the refs config to the current schema, seeding it if absent.`).action((e,n)=>{let r=Y(n);return Z(t,r,async()=>{let e=await PC(t);X(t,r,FC(e),e)})()})},LC=async e=>{try{return await i(e),!0}catch(e){if(R(e))return!1;throw e}},RC=async e=>{try{return await c(e)}catch(e){if(R(e))return;throw e}},zC=async e=>{try{return(await i(e)).isDirectory()}catch(e){if(R(e))return;throw e}},BC=async e=>{let t=await RC(e);if(t===void 0)return!0;if(t.length>0)return!1;try{await f(e)}catch(e){if(!R(e))throw e}return!0},VC=async e=>{let t=await zC(e);return t===void 0?!0:t?BC(e):!1},HC=async(e,t)=>{t!==e.sourcesDir&&await VC(t)&&await HC(e,ie(t))},UC=async(e,t)=>await LC(t)?(iu(e,t),await d(t,{force:!0,recursive:!0}),await HC(e,ie(t)),{removedCheckout:!0}):{removedCheckout:!1,warning:`checkout was already missing`},WC=(e,t)=>Object.fromEntries(Object.entries(e).filter(([e])=>e!==t)),GC=async(e,t)=>{let n=await V(e),r={...n,refs:WC(n.refs,t)};await fu(e,r);let i=await Pg(e),a={...i,refs:WC(i.refs,t)};await Fg(e,a)},KC=async(e,t)=>{let n=z(e.env),r=await V(n),i=CS(r,t),a=B(n,i),{removedCheckout:o,warning:s}=await W(n,Bv(i),()=>UC(n,a));return await W(n,`home`,()=>GC(n,i)),{data:{key:i,removed_checkout:o},warnings:gv(s)}},qC=e=>e.removed_checkout?[`removed ${e.key} (checkout deleted)`]:[`removed ${e.key} (checkout was already missing)`],JC=(e,t)=>{e.command(`remove`).description(`Remove a configured ref: its config/state entry AND its checkout directory.`).argument(`<ref>`,`full ref key or a unique suffix, e.g. zod`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let{data:n,warnings:r}=await KC(t,e);X(t,i,qC(n),n,r)})()})},YC=async e=>{let t=await $h(e.checkoutDir,e.configuredPath,e.packageName);return t.kind===`match`?{path:e.configuredPath,status:`verified`}:t.kind===`unreadable`?{path:e.configuredPath,reason:t.reason,status:`unverifiable`}:XC(e)},XC=async e=>Yb(e,await Y_(e.checkoutDir)),ZC=async e=>{try{return await W(e.home,Bv(e.key),()=>YC(e),e.lockTimeoutMs===void 0?void 0:{timeoutMs:e.lockTimeoutMs})}catch(t){if(t instanceof g&&t.code===`conflict`)return{path:e.configuredPath,reason:`could not acquire the ref lock in time`,status:`unverifiable`};throw t}},QC=async e=>{if(!H(e.checkoutDir))return{path:e.configuredPath,status:`unmaterialized`};let t=await $h(e.checkoutDir,e.configuredPath,e.packageName);return t.kind===`match`?{path:e.configuredPath,status:`verified`}:t.kind===`unreadable`?{path:e.configuredPath,reason:t.reason,status:`unverifiable`}:(e.onProbed?.(),ZC(e))},$C=(e,t)=>({local_path:null,name:e,path:null,reason:t,status:`unverifiable`}),ew=async e=>{if(!e.checkoutManaged)return $C(e.packageName,e.checkoutReason);let t=await QC(e);return{...t.candidates===void 0?{}:{candidates:t.candidates},...t.configuredPath===void 0?{}:{configured_path:t.configuredPath},local_path:t.path===null?null:m(e.checkoutDir,t.path),name:e.packageName,path:t.path,...t.reason===void 0?{}:{reason:t.reason},status:t.status}},tw=e=>[`package: ${e.name}`,`package path: ${e.local_path??`(unknown)`}`,...e.status===`verified`?[]:[`package status: ${e.status}`],...e.configured_path===void 0?[]:[`configured path: ${e.configured_path}`],...e.candidates===void 0?[]:[`candidates: ${e.candidates.join(`, `)}`],...e.reason===void 0?[]:[`reason: ${e.reason}`]],nw=`node_modules`,rw=[`.pnp.cjs`,`.pnp.js`],iw=new Set([``,`.`,`..`]),aw=e=>!ae(e)&&!e.includes(`\\`)&&e.split(`/`).every(e=>!iw.has(e)),ow=function*(e){let t=ce(e);for(;;){re(t)!==nw&&(yield m(t,nw));let e=ie(t);if(e===t)return;t=e}},sw=async e=>{if(await uw(e)!==`absent`)try{let t=JSON.parse(await s(e,`utf8`)),{name:n,version:r}=typeof t==`object`&&t?t:{};return typeof r!=`string`||r===``?{package_json:e,reason:`manifest_has_no_version`,status:`unverifiable`}:{...typeof n==`string`?{name:n}:{},package_json:e,status:`found`,version:r}}catch{return{package_json:e,reason:`manifest_unreadable`,status:`unverifiable`}}},cw=new Set([`ENOENT`,`ENOTDIR`]),lw=async e=>{try{return(await c(e)).length===0}catch{return!1}},uw=async e=>{try{return await p(e),`present`}catch(e){let t=typeof e==`object`&&e&&`code`in e&&typeof e.code==`string`?e.code:void 0;return t!==void 0&&cw.has(t)?`absent`:`unreadable`}},dw=async e=>{for(let t of ow(e)){let e=ie(t);if((await Promise.all(rw.map(t=>uw(m(e,t))))).includes(`present`))return!0}return!1},fw=async e=>{try{if(!(await p(e)).isDirectory())throw v(`--project must be a directory: ${e}`)}catch(t){throw t instanceof Error&&t.message.startsWith(`--project`)?t:v(`--project path does not exist: ${e}`)}},pw=async e=>{let t=await uw(e);if(t===`unreadable`)return{reason:`slot_unreadable`,status:`unverifiable`};if(t===`absent`)return;let n=await sw(m(e,`package.json`));return n===void 0?await lw(e)?void 0:{reason:`installed_without_manifest`,status:`unverifiable`}:n},mw=async(e,t)=>{if(!aw(t))return{reason:`unsupported_package_name`,status:`unverifiable`};for(let n of ow(e)){let e=await pw(m(n,...t.split(`/`)));if(e!==void 0)return e}return await dw(e)?{reason:`yarn_pnp`,status:`unsupported_layout`}:{status:`not_materialized`}},hw={'"':`"`,"\\":`\\`,b:`\b`,n:`
351
- `,t:` `},gw={'"':`"`,"\\":`\\`},_w=new Set([` `,` `]),$=Symbol(`malformed git config`),vw=e=>e!==void 0&&!e.quoted&&_w.has(e.char),yw=e=>{let t=0,n=e.length;for(;t<n&&vw(e[t]);)t+=1;for(;n>t&&vw(e[n-1]);)--n;return e.slice(t,n).map(e=>e.char).join(``)},bw=e=>{let t=[],n=!1;for(let r=0;r<e.length;r+=1){let i=e[r];if(i===`\\`){r+=1;let n=hw[e[r]??``];if(n===void 0)return $;t.push({char:n,quoted:!0})}else if(i===`"`)n=!n;else if(!n&&(i===`#`||i===`;`))return yw(t);else t.push({char:i??``,quoted:n})}return n?$:yw(t)},xw=e=>{let t=``;for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`\\`){n+=1;let r=gw[e[n]??``];if(r===void 0)return $;t+=r}else t+=r??``}return t},Sw=/^[ \t]+|[ \t]+$/gu,Cw=e=>e.replace(Sw,``),ww=/^\[[ \t]*(?<section>[A-Za-z0-9.-]+)[ \t]*(?:"(?<subsection>(?:[^"\\]|\\.)*)")?[ \t]*\]/u,Tw=/^(?<name>[A-Za-z][A-Za-z0-9-]*)[ \t]*(?:=[ \t]*(?<value>.*))?$/u,Ew=function*(e){let t=``,n=!1,r=!1;for(let i=0;i<e.length;i+=1){let a=e[i];if(a===`
349
+ packages to describe: ${Object.keys(e).toSorted().join(`, `)}`)},Bv=e=>{if(Object.keys(e).length!==0)return e},Vv=e=>{let t={default_branch:e.default_branch,description:e.description,url:e.url};return e.packages!==void 0&&(t.packages=e.packages),e.tag_format!==void 0&&(t.tag_format=e.tag_format),t},Hv=`ref.`,Uv=`${Hv}_`,Wv=`${Uv}_`,Gv=e=>`${Wv}${ue(`sha256`).update(e,`utf8`).digest(`hex`)}`,Kv=e=>{let t=e.includes(`_`)?`${Uv}${e.replaceAll(`_`,`_u`).replaceAll(`/`,`_s`)}`:`${Hv}${e.replaceAll(`/`,`_`)}`;return Buffer.byteLength(t,`utf8`)<=212&&Bp(t)?t:Gv(e)},qv=e=>e.REFS_ALLOW_FILE_URLS===`1`,Jv=(e,t)=>{let n=_f(t,{allowFileUrls:qv(e.env)});return{cloneUrl:n.cloneUrl,key:n.key}},Yv=async(e,t)=>{if(t===``)throw v(`refs add npm: requires a package name, e.g. npm:left-pad`);Tv(e,`resolving npm package '${t}'…`);let n=await tm(e.fetcher,t),r={cloneUrl:n.cloneUrl,key:n.key,npmPkgName:t};return n.directory!==void 0&&(r.npmDirectory=n.directory),r},Xv=(e,t)=>t.startsWith(`npm:`)?Yv(e,t.slice(4)):Promise.resolve(Jv(e,t)),Zv=(e,t)=>{if(e.npmPkgName===void 0)return e;let n=jg(`git_transport`,void 0,t);return{...e,cloneUrl:Of(e.cloneUrl,n)}},Qv=e=>`ref '${e}' already exists — use refs edit or refs remove`,$v=(e,t)=>{if(e.refs[t]!==void 0)throw Ce(Qv(t))},ey=async e=>{try{return await c(e,{withFileTypes:!0})}catch(e){if(R(e))return;throw e}},ty=e=>e.filter(e=>e.isDirectory()).map(e=>e.name),ny=async(e,t)=>{let n=await ey(e);if(n===void 0)return{kind:`stop`};let r=ty(n);if(r.includes(t))return{kind:`continue`,nextDir:m(e,t)};let i=r.find(e=>e.toLowerCase()===t.toLowerCase());return i===void 0?{kind:`stop`}:{kind:`collision`,name:i}},ry=async(e,t,n)=>{let[r,...i]=t;if(r===void 0)return;let a=await ny(e,r);if(a.kind!==`stop`)return a.kind===`collision`?[...n,a.name].join(`/`):ry(a.nextDir,i,[...n,r])},iy=[],ay=async(e,t)=>{let n=await ry(e.sourcesDir,t.split(`/`),iy);if(n!==void 0)throw Ce(`checkout path for '${t}' collides case-insensitively with existing '${n}'`)},oy=e=>{switch(e.kind){case`candidate_not_inspected`:case`manifest_missing_name`:case`manifest_unreadable`:case`workspace_dir_unreadable`:return e.path;case`workspace_declaration_unparsed`:case`workspace_file_unreadable`:return e.file;case`unsupported_pattern`:return e.pattern;case`scan_budget_exhausted`:return`${e.pattern} at ${e.path}`;case`no_workspace_declaration`:return}},sy=e=>e.diagnostics.filter(e=>!Kh({diagnostics:[e],packages:[]})).map(e=>{let t=oy(e);return t===void 0?e.kind:`${t}: ${e.kind}`}).toSorted().join(`, `),cy=(e,t,n)=>`checkout at ${e} points at '${U(t)}' — expected '${U(n)}'; remove the checkout directory or run refs remove before retrying`,ly=e=>e.exitCode===0?e.stdout.trim():`(no origin remote)`,uy=(e,t)=>{try{return _f(e,{allowFileUrls:t}).key}catch{return}},dy=async(e,t)=>{let n=await e.run(`git`,[`remote`,`get-url`,`origin`],{cwd:t.dest}),r=ly(n),i=uy(t.expectedUrl,t.allowFileUrls),a=uy(r,t.allowFileUrls);if(i===void 0||a!==i)throw Ce(cy(t.dest,r,t.expectedUrl))},fy=e=>`checkout at ${e} exists but is not refs-managed — remove it (${Dv(e)}) and retry`,py=async(e,t)=>{let n=await e.run(`git`,[`config`,`--local`,`core.hooksPath`],{cwd:t.dest});if(n.exitCode!==0||n.stdout.trim()!==t.hooksDir)throw Ce(fy(t.dest))},my=async(e,t)=>{await a(ie(t.dest),{recursive:!0}),Tv(e,`cloning ${U(t.cloneUrl)} into ${t.dest}…`);let n=await Cd(e.runner,t);return n.warning===void 0?{effectiveMode:n.effectiveMode}:{effectiveMode:n.effectiveMode,warning:n.warning}},hy=async(e,t)=>(iu(t.home,t.dest),H(t.dest)?(await dy(e.runner,{allowFileUrls:t.allowFileUrls,dest:t.dest,expectedUrl:t.cloneUrl}),await py(e.runner,{dest:t.dest,hooksDir:t.hooksDir}),{}):my(e,t)),gy=(e,t)=>`checkout for '${e}' at ${t} is missing or corrupt (git rev-parse HEAD failed) — run: refs remove ${e}, then refs add <source> --dry-run again`,_y=(e,t,n)=>`checkout for '${e}' at ${t} has a HEAD sha refs cannot store yet (${n.length} hex chars, expected 40) — only SHA-1 repositories are supported for now; \`--object-format=sha256\` repositories are not yet supported`,vy=async(e,t)=>{await dy(e,t),await py(e,{dest:t.dest,hooksDir:t.hooksDir});let n=await e.run(`git`,[`rev-parse`,`HEAD`],{cwd:t.dest});if(n.exitCode!==0)throw y(gy(t.key,t.dest));let r=n.stdout.trim();if(!kg.shape.head_sha.safeParse(r).success)throw y(_y(t.key,t.dest,r));return r},yy=e=>Kh(e)?void 0:`workspace detection could not fully inspect the declared workspaces (${sy(e)}) — members may be missing from the detected packages; the repository's own workspace declaration is what settles it`,by=(e,t)=>{let n=Nv(e.packages,t.resolved.npmDirectory,t.resolved.npmPkgName),r=Iv(e.packages,n),i=yy(e);return{defaultBranch:t.defaultBranch,...i===void 0?{}:{detectionWarning:i},packages:n,...r===void 0?{}:{rootPackageName:r},tagFormatCandidate:t.tagFormatCandidate}},xy=e=>e.complete?Gd(e.tags):null,Sy=async(e,t,n)=>{let r=await Td(e.runner,t),i=await Fd(e.runner,t),a=xy(i);Tv(e,`detecting workspace packages…`);let o=await tv(t);return by(o,{defaultBranch:r,resolved:n,tagFormatCandidate:a})},Cy=(e,t)=>W(t.home,Kv(t.resolved.key),async()=>{let n=await hy(e,{allowFileUrls:qv(e.env),cloneUrl:t.resolved.cloneUrl,dest:t.dest,home:t.home,hooksDir:t.home.hooksDir,mode:t.cloneMode}),r={fields:await Sy(e,t.dest,t.resolved)};return n.effectiveMode!==void 0&&(r.effectiveMode=n.effectiveMode),n.warning!==void 0&&(r.warning=n.warning),r}),wy=(e,t)=>({default_branch:e.defaultBranch,description:``,key:t.key,packages:e.packages,tag_format_candidate:e.tagFormatCandidate,url:t.cloneUrl}),Ty=e=>{let{effectiveMode:t,fields:n,warning:r}=e.cloneResult;return{dest:e.dest,proposal:wy(n,e.resolved),...n.detectionWarning===void 0?{}:{detectionWarning:n.detectionWarning},...n.rootPackageName===void 0?{}:{rootPackageName:n.rootPackageName},...t===void 0?{}:{effectiveCloneMode:t},...r===void 0?{}:{warning:r}}},Ey=async(e,t)=>{let n=z(e.env),r=await V(n),i=Zv(await Xv(e,t),r.settings);$v(r,i.key),await ay(n,i.key);let a=B(n,i.key),o=jg(`clone_mode`,void 0,r.settings),s=await Cy(e,{cloneMode:o,dest:a,home:n,resolved:i});return Ty({cloneResult:s,dest:a,resolved:i})},Dy=(e,t,n)=>W(e,`home`,async()=>{let r=await V(e);$v(r,t);let i=await Pg(e),a=i.refs[t],o=n??a?.effective_clone_mode,s={...a,pending_proposal_at:new Date().toISOString()};o!==void 0&&(s.effective_clone_mode=o),i.refs[t]=s,await Fg(e,i)}),Oy=(e,t)=>{let n=bl.safeParse(e);if(!n.success)throw y(T(n.error));let r=Ag.safeParse(t);if(!r.success)throw y(T(r.error));return{config:n.data,state:r.data}},ky=async(e,t)=>{let n=await V(e.home);$v(n,e.ref.key);let r=Vv(e.ref);n.refs[e.ref.key]=r;let i=await Pg(e.home);return i.refs[e.ref.key]={effective_clone_mode:e.effectiveCloneMode??i.refs[e.ref.key]?.effective_clone_mode??jg(`clone_mode`,void 0,n.settings),head_sha:t,last_fetched_at:new Date().toISOString()},{...Oy(n,i),entry:r}},Ay=async(e,t)=>{let n=qv(e.env),r=await W(t.home,Kv(t.ref.key),()=>(iu(t.home,t.dest),vy(e.runner,{allowFileUrls:n,dest:t.dest,expectedUrl:t.ref.url,hooksDir:t.home.hooksDir,key:t.ref.key})));return W(t.home,`home`,async()=>{let{config:e,entry:n,state:i}=await ky(t,r);return await Fg(t.home,i),await fu(t.home,e),{entry:n,key:t.ref.key}})},jy=(e,t)=>t===`-`?e.readStdin():s(t,`utf8`),My=e=>{try{return JSON.parse(e)}catch(e){throw y(`invalid JSON in proposal: ${Cv(e)}`)}},Ny=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Py=e=>Ny(e)&&`ok`in e&&!(`key`in e),Fy=e=>{if(!Py(e))return e;if(e.ok===!1)throw y(`proposal file contains a failed refs envelope (ok is false) — re-run the dry-run`);if(Ny(e.data))return e.data;throw y(`proposal file is a refs envelope without a usable data object — re-run the dry-run`)},Iy=e=>e.code===`unrecognized_keys`,Ly=e=>e.path.length===0,Ry=(e,t)=>{let n=t.toSorted().map(e=>`"${e}"`).join(`, `);return e===``?`✖ unrecognized key(s) in proposal: ${n}`:`✖ unrecognized key(s) in proposal at ${e}: ${n}`},zy=e=>{let t=new Map;for(let n of e){let e=Yt(n.path);t.set(e,[...t.get(e)??[],...n.keys])}return[...t.entries()].toSorted(([e],[t])=>e.localeCompare(t)).map(([e,t])=>Ry(e,t))},By=e=>`✖ invalid proposal: ${e.message}`,Vy=e=>{let t=e.issues.filter(e=>Iy(e)),n=e.issues.filter(e=>!Iy(e)),r=n.filter(e=>Ly(e));if(t.length===0&&r.length===0)return T(e);let i=n.filter(e=>!Ly(e)),a=[...zy(t),...r.map(e=>By(e))];return i.length>0&&a.push(T({issues:i})),a.join(`
350
+ `)},Hy=e=>{let t=Og.safeParse(e);if(!t.success)throw y(Vy(t.error));return t.data},Uy=async(e,t)=>{let n=await jy(e,t);return Hy(Fy(My(n)))},Wy=(e,t)=>[`refs add: dry-run proposal ready for '${e}' (checkout: ${t})`,`next: review the proposal, then run refs add --proposal <file> to finalize`],Gy=e=>[...Sv(e.warning),...Sv(e.detectionWarning)],Ky=async(e,t)=>{let n=await Ey(e,t),r=z(e.env);await Dy(r,n.proposal.key,n.effectiveCloneMode);let i=Gy(n);return{data:n.proposal,human:Wy(n.proposal.key,n.dest),warnings:i}},qy=e=>[`refs add: '${e}' added to config`],Jy=e=>{let t={default_branch:e.default_branch,description:e.description,key:e.key,url:e.url};e.tag_format_candidate!==null&&(t.tag_format=e.tag_format_candidate);let n=Bv(e.packages);return n!==void 0&&(t.packages=n),t},Yy=async(e,t)=>{let n=await Uy(e,t),r=z(e.env),i=B(r,n.key);if(!H(i))throw _(`no checkout found at ${i} — run: refs add <source> --dry-run first`);let a=Jy(n),{entry:o,key:s}=await Ay(e,{dest:i,home:r,ref:a});return{data:{entry:o,key:s},human:qy(s),warnings:[]}},Xy=(e,t,n)=>{zv(e.proposal.packages,n,e.rootPackageName);let r={default_branch:e.proposal.default_branch,description:t,key:e.proposal.key,url:e.proposal.url};e.proposal.tag_format_candidate!==null&&(r.tag_format=e.proposal.tag_format_candidate);let i=Fv(e.proposal.packages,{refDescription:t,...e.rootPackageName===void 0?{}:{rootPackageName:e.rootPackageName}});return i!==void 0&&(r.packages=i),r},Zy=async(e,t,n)=>{let r=await Ey(e,t),i=z(e.env);await Dy(i,r.proposal.key,r.effectiveCloneMode);let a=Xy(r,n,t),o={dest:r.dest,home:i,ref:a};r.effectiveCloneMode!==void 0&&(o.effectiveCloneMode=r.effectiveCloneMode);let{entry:s,key:c}=await Ay(e,o);return{data:{entry:s,key:c},human:qy(c),warnings:Gy(r)}},Qy=e=>{let t=[e.dryRun,e.proposal!==void 0,e.description!==void 0].filter(Boolean).length;if(t>1)throw v(`refs add: use only one of --dry-run, --proposal, or --description`);if(t===0)throw v(`refs add needs --dry-run, --proposal, or --description`)},$y=e=>{if(e===void 0||e===``)throw v(`refs add requires <source> (a git url or npm:<package>)`);return e},eb=(e,t)=>(Qy(t),t.proposal===void 0?t.description===void 0?Ky(e,$y(t.source)):Zy(e,$y(t.source),t.description):Yy(e,t.proposal)),tb=(e,t)=>{let n={dryRun:t.dryRun===!0};return e!==void 0&&(n.source=e),t.proposal!==void 0&&(n.proposal=t.proposal),t.description!==void 0&&(n.description=t.description),n},nb=(e,t)=>{e.command(`add`).description(`Add a git reference in two phases: propose (--dry-run), then finalize (--proposal).`).argument(`[source]`,`git url or npm:<package> (omit when finalizing with --proposal)`).option(`--dry-run`,`resolve and clone the source, writing a reviewable proposal`).option(`--proposal <file>`,`finalize from a completed proposal JSON file (- for stdin)`).option(`--description <text>`,`one-shot: dry-run then finalize immediately with this description`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let r=await eb(t,tb(e,n));X(t,i,r.human,r.data,r.warnings)})()})},rb=async e=>{let t=await e.runner.run(`git`,[`--version`]);return t.exitCode===0?{detail:t.stdout.trim(),name:`git`,status:`ok`}:{detail:t.stderr.trim()||`git --version exited with code ${t.exitCode}`,name:`git`,status:`fail`}},ib=/^v(?<major>\d+)\.(?<minor>\d+)/u,ab=e=>{let t=ib.exec(e),n=t?.groups?.major,r=t?.groups?.minor;if(n!==void 0&&r!==void 0)return{major:Number(n),minor:Number(r)}},ob=e=>e===void 0?!1:e.major>24||e.major===24&&e.minor>=2,sb=e=>{let{nodeVersion:t}=e;return ob(ab(t))?{detail:t,name:`node`,status:`ok`}:{detail:`${t} does not satisfy the required range >=24.2`,name:`node`,status:`fail`}},cb=()=>bl.parse({meta:{cli_version:`0.0.0`,schema_version:1},refs:{},settings:{}}),lb=async e=>{try{return{config:await V(e)}}catch(e){return{config:cb(),errorMessage:Cv(e)}}},ub=e=>e===void 0?{detail:`config is present and matches the current schema`,name:`config`,status:`ok`}:{detail:e,name:`config`,status:`fail`},db={ci:`update check is off in CI — set REFS_UPDATE_CHECK=1 to run it here anyway`,config:`update check is off ([updates].check = false in config.toml)`,env:`update check is off (REFS_UPDATE_CHECK=0)`},fb=(e,t,n)=>{if(qg(e,t)){let r=n?` (npm was unreachable just now; this was its last answer)`:``;return{detail:`${Jg(e,t)}${r}`,name:`cli-update`,status:`warn`}}return n?{detail:`could not reach npm to check; its last answer was ${t}, which this CLI (${e}) already has`,name:`cli-update`,status:`warn`}:{detail:`this CLI (${e}) is npm's latest published release`,name:`cli-update`,status:`ok`}},pb=async(e,t)=>{let n=Qg({env:e.env,updates:t.updates});if(n!==`on`)return{detail:db[n],name:`cli-update`,status:`ok`};let{latest:r,stale:i}=await Kg({fetch:e.fetcher,home:z(e.env),nowMs:Date.now()});return r===void 0?{detail:`could not reach npm to learn the latest published version — not a fault of your setup, and nothing else depends on it`,name:`cli-update`,status:`warn`}:fb(e.cliVersion,r,i)},mb=(e,t)=>Object.keys(t.refs).map(e=>il.parse(e)).map(t=>({dest:B(e,t),key:t})).filter(e=>H(e.dest)),hb=[`pre-commit`,`pre-push`],gb=async(t,r)=>{try{return await e(m(t.hooksDir,r),n.X_OK),!0}catch{return!1}},_b=async e=>{let t=await Promise.all(hb.map(t=>gb(e,t)));return hb.filter((e,n)=>!t[n])},vb=async(e,t,n)=>{let r=await e.runner.run(`git`,[`config`,`--local`,`--get`,`core.hooksPath`],{cwd:n});return r.exitCode===0&&r.stdout.trim()===t.hooksDir},yb=e=>e.missingHooks.length>0?{detail:`${e.missingHooks.map(e=>`hooks/${e}`).join(`, `)} missing or not executable — run: refs init`,name:`hooks-guard`,status:`fail`}:e.badKeys.length>0?{detail:`core.hooksPath not set for: ${e.badKeys.join(`, `)} — run: refs init`,name:`hooks-guard`,status:`fail`}:{detail:`${hb.map(e=>`hooks/${e}`).join(`, `)} present; ${e.checkoutCount} checkout(s) guarded`,name:`hooks-guard`,status:`ok`},bb=async(e,t,n)=>{let r=mb(t,n),[i,a]=await Promise.all([_b(t),Promise.all(r.map(n=>vb(e,t,n.dest)))]),o=r.filter((e,t)=>!a[t]).map(e=>e.key);return yb({badKeys:o,checkoutCount:r.length,missingHooks:i})},xb=async(e,t)=>{let n=await e.runner.run(`git`,[`status`,`--porcelain`],{cwd:t.dest});return n.exitCode===0?{broken:!1,detail:``,dirty:n.stdout.trim()!==``,key:t.key}:{broken:!0,detail:n.stderr.trim(),dirty:!1,key:t.key}},Sb=e=>{let t=e.filter(e=>e.broken);if(t.length>0)return{detail:t.map(e=>`${e.key}: git status failed — ${e.detail}`).join(`; `),name:`dirty-checkouts`,status:`fail`};let n=e.filter(e=>e.dirty).map(e=>e.key);return n.length===0?{detail:`no local changes in any checkout`,name:`dirty-checkouts`,status:`ok`}:{detail:`local changes will be discarded on next sync: ${n.join(`, `)}`,name:`dirty-checkouts`,status:`warn`}},Cb=async(e,t,n)=>{let r=mb(t,n),i=await Promise.all(r.map(t=>xb(e,t)));return Sb(i)},wb=async e=>{try{return await Pg(e)}catch{return Ag.parse({})}},Tb=async e=>{try{return(await c(e,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>e.name)}catch(e){if(R(e))return[];throw e}},Eb=async(e,t)=>{if(H(e))return[[...t]];let n=await Tb(e);return(await Promise.all(n.map(n=>Eb(m(e,n),[...t,n])))).flat()},Db=(e,t,n)=>{let r=e.refs[t]?.pending_proposal_at;return r!==void 0&&n-Date.parse(r)<864e5},Ob=(e,t,n)=>Db(t,e.key,n)?`${e.key}: pending add`:`${e.key}: orphan — remove with: ${Dv(e.dest)}`,kb=(e,t)=>({dest:m(e.sourcesDir,...t),key:t.join(`/`)}),Ab=async(e,t,n)=>{let r=(await Eb(e.sourcesDir,[])).map(t=>kb(e,t)).filter(e=>!Object.hasOwn(t.refs,e.key));if(r.length===0)return{detail:`no orphaned checkouts under sources/`,name:`orphans`,status:`ok`};let i=Date.now();return{detail:r.map(e=>Ob(e,n,i)).join(`; `),name:`orphans`,status:`warn`}},jb=e=>{let t=(e??``).lastIndexOf(`/`);return t===-1?`.`:(e??``).slice(0,t)},Mb=e=>{let[t=`.`,...n]=e,r=t.split(`/`),i=r.length;for(let e of n){let t=e.split(`/`),n=0;for(;n<i&&n<t.length&&r[n]===t[n];)n+=1;i=n}return i===0?`.`:r.slice(0,i).join(`/`)},Nb=`(unknown)`,Pb=e=>ul.safeParse(e.path).success,Fb=(e,t)=>{let n=`${e.name}: declared in this checkout but not registered — it cannot be resolved by name until it is`;if(e.path===void 0)return`${n}. Declared at several paths (${(e.candidates??[]).join(`, `)}) — pick one`;if(!Pb(e))return`${n}. Its path is one the configuration cannot hold, so there is no command for it — report it and leave it unregistered`;let r=Ev([`--package=${Q(e.name)}`,`--decline`,`--path=${Q(e.path)}`],[t]);return Kc(e.name)?`${n}. To register it: ${Ev([`--package=${Q(e.name)}`,`--create`,`--path=${Q(e.path)}`,`--description="<what it is>"`],[t])}. If it should not be: ${r}`:`${n}. Its name is one the packages table cannot hold, so it cannot be registered — if that is the answer, record it: ${r}`},Ib=(e,t,n)=>{let r=`${e.name}: moved to ${e.path??Nb} — update the entry's path (${n})`,i=Ev([`--package=${Q(e.name)}`],[t,`path`,e.path??``]);return ul.safeParse(e.path).success?`${r}. To fix it: ${i}`:r},Lb=(e,t)=>{let n=`configured: ${e.configured_path??Nb}`;if(e.status===`relocated`)return Ib(e,t,n);if(e.status===`missing`){let r=Ev([`--package=${Q(e.name)}`,`--remove`],[t]);return`${e.name}: gone from this repo's workspaces (${n}) — repoint the entry if it moved out of them, or unregister it: ${r}`}if(e.status===`ambiguous`){let t=(e.candidates??[]).join(`, `);return`${e.name}: declared at several paths (${t}) — point the entry at one (${n})`}return`${e.name}: could not be checked — ${e.reason??`(no reason given)`} (${n})`},Rb=(e,t)=>e.status===`unregistered`?Fb(e,t):Lb(e,t),zb=e=>`could not check for unregistered packages — ${e}`,Bb=e=>`…and ${e} more finding(s) — act on the ones above (register, repoint or decline) and run the check again to see the rest`,Vb=e=>{let t=e.length-10;return t<=0?[...e]:[...e.slice(0,10),Bb(t)]},Hb=e=>{let t=new Map;for(let n of e){let[e=`.`]=jb(n.path).split(`/`);t.set(e,[...t.get(e)??[],n])}return t},Ub=e=>e.path===void 0,Wb=(e,t,n)=>{if(e.length<3)return e.map(e=>({candidates:1,dir:n,line:Fb(e,t)}));let r=Mb(e.map(e=>jb(e.path)));return[{candidates:e.length,dir:r,line:`${r}: ${e.length} unregistered package(s) the configuration does not have`}]},Gb=e=>{let t=e.reduce((e,t)=>e+t.candidates,0),n=new Set(e.flatMap(e=>e.dir===void 0?[]:[e.dir])).size;return`…and ${t} more unregistered package(s)${n===0?``:` in ${n} director(ies)`} — 'refs doctor --json' lists every candidate`},Kb=(e,t)=>{let n=e.filter(e=>Ub(e)).map(e=>({candidates:1,line:Fb(e,t)})),r=[...Hb(e.filter(e=>!Ub(e)))].toSorted(([e],[t])=>e.localeCompare(t)).flatMap(([e,n])=>Wb(n,t,e)),i=[...n,...r],a=i.slice(10);return a.length===0?i.map(e=>e.line):[...i.slice(0,10).map(e=>e.line),Gb(a)]},qb=(e,t)=>e.reason===void 0?[...Vb((e.packages??[]).map(e=>Rb(e,t))),...Kb(e.discovery??[],t),...e.discovery_incomplete===void 0?[]:[zb(e.discovery_incomplete)]]:[`could not be checked — ${e.reason}`],Jb=e=>{let t;return()=>(t??=tv(e),t)},Yb=async(e,t,n)=>{let r=await f_(e);if(r===void 0||t.some(e=>e.packageName===r.name))return{issues:[]};let i=await n();if(!Kh(i))return{incomplete:sy(i),issues:[]};let a=ng(i.packages,r.name);return a.kind===`ambiguous`?{issues:[{candidates:a.paths,name:r.name,status:`unregistered`}]}:{issues:a.kind===`found`?[{name:r.name,path:a.path,status:`unregistered`}]:[]}},Xb=e=>{let t=new Map;for(let n of e)t.set(n.name,[...t.get(n.name)??[],n.path]);return t},Zb=(e,t)=>{let n=new Set(e.changedDirs),r=t.filter(e=>!n.has(e.path)).map(e=>e.name);return new Set([...e.namesBefore,...r])},Qb=(e,t)=>t.length===1&&t[0]!==void 0?{name:e,path:t[0],status:`unregistered`}:{candidates:[...t],name:e,status:`unregistered`},$b=async(e,t,n)=>{if(t.kind===`arrivals`&&t.changedDirs.length===0)return{issues:[]};let r=await n();if(!Kh(r))return{incomplete:sy(r),issues:[]};let i=new Set(e.map(e=>e.packageName)),a=r.packages.filter(e=>e.path!==`.`),o=t.kind===`all`?void 0:Zb(t,a);return{issues:[...Xb(a)].filter(([e])=>!i.has(e)).filter(([e])=>o===void 0||!o.has(e)).map(([e,t])=>Qb(e,t)).toSorted((e,t)=>e.name.localeCompare(t.name))}},ex=(e,t)=>{if(t.length===0)return{issues:[...e],suppressed:[]};let n=(e,n)=>t.some(t=>t.name===e&&t.path===n),r=[];return{issues:e.flatMap(e=>{if(e.status!==`unregistered`)return[e];let t=e.path===void 0?e.candidates??[]:[e.path],i=t.filter(t=>!n(e.name,t)),a=t.filter(t=>n(e.name,t));return r.push(...a.map(t=>({name:e.name,path:t}))),i.length===0?[]:[Qb(e.name,i)]}),suppressed:r}},tx=e=>e!==`unmaterialized`&&e!==`verified`,nx=new Set([`ambiguous`,`missing`,`relocated`]),rx=(e,t={})=>{let{declined:n=[],discoveryIncomplete:r}=t,i=e.filter(e=>e.status!==`unregistered`),a=e.filter(e=>e.status===`unregistered`);return{...n.length===0?{}:{declined:[...n]},...a.length===0?{}:{discovery:a},...r===void 0?{}:{discovery_incomplete:r},...i.length===0?{}:{packages:i},status:ix(i,r)}},ix=(e,t)=>e.some(e=>nx.has(e.status))?`drift`:e.length===0&&t===void 0?`ok`:`unknown`,ax=(e,t)=>({path:e.configuredPath,reason:t,status:`unverifiable`}),ox=(e,t)=>qh(t)?{configuredPath:e.configuredPath,path:null,status:`missing`}:ax(e,`this repo declares no workspaces, so there was nowhere to search`),sx=(e,t)=>t===e.configuredPath,cx=e=>e.packages.filter(e=>e.path!==`.`),lx=(e,t)=>{let n=ng(cx(t),e.packageName);return n.kind===`ambiguous`?{candidates:n.paths,configuredPath:e.configuredPath,path:null,status:`ambiguous`}:Kh(t)?n.kind===`absent`?ox(e,t):sx(e,n.path)?ax(e,`the checkout changed while it was being inspected`):{configuredPath:e.configuredPath,path:n.path,status:`relocated`}:ax(e,n.kind===`found`?`workspace detection was incomplete, so the new location is not confirmed unique`:`workspace detection was incomplete`)},ux=e=>{let t=new Map(Object.entries(e??{}));return[...t.keys()].toSorted().flatMap(e=>{let n=t.get(e);return n===void 0?[]:[{configuredPath:n.path,packageName:e}]})},dx=async(e,t)=>{let n=await $h(e,t.configuredPath,t.packageName);if(n.kind===`match`)return{path:t.configuredPath,status:`verified`};if(n.kind===`unreadable`)return{path:t.configuredPath,reason:n.reason,status:`unverifiable`}},fx=e=>e.flatMap(e=>e.settled===void 0?[]:[{outcome:e.settled,query:e.query}]),px=async(e,t,n)=>{let r=await Promise.all(t.map(async t=>({query:t,settled:await dx(e,t)})));if(r.every(e=>e.settled!==void 0))return fx(r);let i=await n();return r.map(e=>({outcome:e.settled??lx(e.query,i),query:e.query}))},mx=e=>{let{outcome:t,query:n}=e;return tx(t.status)?[{...t.candidates===void 0?{}:{candidates:t.candidates},configured_path:n.configuredPath,name:n.packageName,...t.status===`relocated`&&t.path!==null?{path:t.path}:{},...t.reason===void 0?{}:{reason:t.reason},status:t.status}]:[]},hx=(e,t)=>{let n=new Set(e.map(e=>e.name));return[...e,...t.filter(e=>!n.has(e.name))]},gx=async(e,t,n)=>{let r=ux(t.packages),[i]=r;if(i===void 0)return{status:`ok`};let a=Jb(e);try{let[i,o,s]=await Promise.all([px(e,r,a),Yb(e,r,a),$b(r,n,a)]),c=ex([...i.flatMap(e=>mx(e)),...hx(o.issues,s.issues)],t.declined_packages??[]);return rx(c.issues,{declined:c.suppressed,...(s.incomplete??o.incomplete)===void 0?{}:{discoveryIncomplete:s.incomplete??o.incomplete}})}catch(e){return{reason:Cv(e),status:`unknown`}}},_x=async(e,t,n)=>{try{return await W(e,Kv(n.key),()=>gx(n.dest,t.refs[n.key]??{},{kind:`all`}),{timeoutMs:100})}catch(e){if(e instanceof g&&e.code===`conflict`)return{reason:`another refs process is holding this ref`,status:`unknown`};throw e}},vx=e=>e===0?``:` (${e} declined package(s) not reported)`,yx=(e,t)=>e.unhealthy.length===0?`every configured package path resolves in ${t} checkout(s)`:e.unhealthy.join(`; `),bx=(e,t)=>{let{declined:n,discovery:r,findings:i}=e;return{detail:[yx(e,t)+vx(n),...r].join(`; `),...i.length===0?{}:{findings:i},name:`config-drift`,status:e.unhealthy.length===0?`ok`:`warn`}},xx=async(e,t,n)=>{let[r,...i]=n;if(r===void 0)return{declined:0,discovery:[],findings:[],unhealthy:[]};let a=await _x(e,t,r),o=await xx(e,t,i);return Sx(o,{key:r.key,report:a})},Sx=(e,t)=>{let{key:n,report:r}=t,i=e=>e.map(e=>`${n}: ${e}`),a=r.discovery??[],o=r.packages??[],s=[...o,...a];return{declined:(r.declined??[]).length+e.declined,discovery:[...i(qb({discovery:a,status:`ok`},n)),...e.discovery],findings:s.length===0?e.findings:[{key:n,packages:s},...e.findings],unhealthy:[...i(qb({...r.discovery_incomplete===void 0?{}:{discovery_incomplete:r.discovery_incomplete},...r.reason===void 0?{}:{reason:r.reason},packages:o,status:r.status},n)),...e.unhealthy]}},Cx=async(e,t)=>{let n=mb(e,t);return bx(await xx(e,t,n),n.length)},wx=e=>{let{diagnosis:t}=e;return e.kind===`claim`||!e.isDirectory||t.pidState===`definitely-dead`||t.stale||t.meta===`malformed`||t.meta===`unreadable`||t.policy===`unknown`?!1:t.ageMs===void 0||t.ageMs>=0},Tx=e=>{let{ageMs:t,budgetMs:n,policy:r}=e;return r===`unknown`?`, state could not be read`:t===void 0||n===void 0?``:t<0?`, recorded time is in the future — check the system clock`:`, ${Cp(t)} into a ${Cp(n)} window`},Ex=e=>e.pid===void 0?`owner unknown (metadata ${e.meta})`:e.pidState===`definitely-dead`?`recorded pid ${e.pid} is not running`:`recorded pid ${e.pid} present`,Dx=(e,t)=>{let n=m(e.locksDir,sp,t.name),r=t.diagnosis.ageMs===void 0?``:` for ${Cp(t.diagnosis.ageMs)}`;return`steal claim on ${t.name}: present${r}. Stealing this lock is blocked while it is here. A reclaim in progress clears it within a moment; if it stays, ${Ox}: ${Ov(n)}`},Ox=`stop every refs process using this home — including suspended ones — and then run`,kx=(e,t)=>{let{diagnosis:n}=t;if(tp(n))return`, reclaimable now`;if(!n.stale&&t.isDirectory)return``;let r=m(e.locksDir,t.name);return`, not automatically reclaimable — if it is genuinely abandoned, ${Ox}: ${Dv(r)}`},Ax=(e,t)=>{let{diagnosis:n}=t,r=t.isDirectory?``:`not a directory, `,i=kx(e,t);return`${t.name}: ${r}${Ex(n)}${Tx(n)}${i}`},jx=async e=>{let t=await Sp(e),[n]=t;return n===void 0?{detail:`no locks held`,name:`locks`,status:`ok`}:{detail:t.map(t=>t.kind===`claim`?Dx(e,t):Ax(e,t)).join(`; `),name:`locks`,status:t.every(e=>wx(e))?`ok`:`warn`}},Mx=[`.agents`,`skills`,`refs`,`SKILL.md`],Nx=[`skills`,`refs`,`SKILL.md`],Px=[`.claude`,`skills`,`refs`,`SKILL.md`],Fx=`npx skills add kaisers-io/refs`,Ix=`npm i -g @kaisers-io/refs@latest`,Lx=(e,t)=>e===void 0?void 0:{display:t,path:e},Rx=e=>{let{dirName:t,env:n,home:r,overrideName:i}=e,a=n[i]?.trim();return a!==void 0&&a.length>0?{display:a,path:a}:Lx(r===void 0?void 0:m(r,t),`~/${t}`)},zx=e=>{let t=e.homedir.length>0?e.homedir:void 0;return[{label:`shared ~/.agents`,root:Lx(t,`~/.agents`),segments:Mx},{label:`Claude Code`,root:Rx({dirName:`.claude`,env:e.env,home:t,overrideName:`CLAUDE_CONFIG_DIR`}),segments:Nx},{label:`Codex`,root:Rx({dirName:`.codex`,env:e.env,home:t,overrideName:`CODEX_HOME`}),segments:Nx},{label:`project ./.agents`,root:Lx(e.cwd,`./.agents`),segments:Mx},{label:`project ./.claude`,root:Lx(e.cwd,`./.claude`),segments:Px}].flatMap(({label:e,root:t,segments:n})=>t===void 0?[]:[{display:t.display,label:e,path:m(t.path,...n)}])},Bx=async(e,t)=>{try{let n=await l(e);return{label:t,realPath:n,source:await s(n,`utf8`)}}catch{return}},Vx=e=>{let t=new Map;for(let n of e)t.has(n.realPath)||t.set(n.realPath,n);return[...t.values()]},Hx=/^---\r?\n(?<body>[\s\S]*?)\r?\n---/u,Ux=/^\s*cli_version:\s*["']?(?<version>[^"'\s]+)["']?\s*$/mu,Wx=e=>{let t=Hx.exec(e)?.groups?.body;if(t!==void 0)return Ux.exec(t)?.groups?.version},Gx=(e,t)=>{if(e===t)return`match`;let n=zg(e,t);return n===void 0?`unknown`:n===0?`match`:n>0?`cli-older`:`skill-older`},Kx={"cli-older":(e,t)=>`the refs skill targets CLI ${e} but this CLI is ${t} — update the CLI: ${Ix}`,match:(e,t)=>`the refs skill is installed and matches this CLI (${t})`,"skill-older":(e,t)=>`the refs skill targets CLI ${e} but this CLI is ${t} — update the skill: ${Fx}`,unknown:(e,t)=>`the refs skill targets CLI ${e} but this CLI is ${t} — reinstall both: ${Ix} and ${Fx}`},qx=e=>{let{cliVersion:t,label:n,skillVersion:r}=e;if(r===void 0)return{detail:`the refs skill (${n}) predates the version gate — update it: ${Fx}`,name:`skill`,status:`warn`};let i=Gx(r,t);return{detail:`${n}: ${Kx[i](r,t)}`,name:`skill`,status:i===`match`?`ok`:`warn`}},Jx=e=>({detail:`refs skill not found in the locations this check knows about (${e.map(e=>e.display).join(`, `)}) — an install anywhere else is invisible here and still works; if it really is missing: ${Fx}`,name:`skill`,status:`warn`}),Yx=async e=>{let t=zx(e),n=await Promise.all(t.map(e=>Bx(e.path,e.label))),r=Vx(n.filter(e=>e!==void 0)).map(t=>qx({cliVersion:e.cliVersion,label:t.label,skillVersion:Wx(t.source)}));return r.find(e=>e.status!==`ok`)??r[0]??Jx(t)},Xx=/^(?<user>[^/\s@]+)@(?<host>[^:/\s]+):/u,Zx=e=>e===``?{}:{user:e},Qx=e=>e===``?{}:{port:e},$x=e=>{try{let t=new URL(e);return t.protocol===`ssh:`?{host:t.hostname,...Zx(t.username),...Qx(t.port)}:void 0}catch{return}},eS=e=>{let t=Xx.exec(e),n=t?.groups?.host;return n===void 0?$x(e):{host:n,user:t?.groups?.user??`git`}},tS=e=>e.port===void 0?e.host:`${e.host}:${e.port}`,nS=e=>e.user===void 0?tS(e):`${e.user}@${tS(e)}`,rS=e=>{let t=Object.values(e.refs).map(e=>eS(e.url)).filter(e=>e!==void 0),n=new Map;for(let e of t)n.set(nS(e),e);return[...n.values()].toSorted((e,t)=>nS(e).localeCompare(nS(t)))},iS=/Permission denied/u,aS=[/Could not resolve hostname/u,/Connection refused/u,/Host key verification failed/u,/timed out/u],oS=e=>e.user===void 0?e.host:`${e.user}@${e.host}`,sS=e=>{let t=[`-o`,`ConnectTimeout=5`,`-o`,`BatchMode=yes`],n=oS(e);return e.port===void 0?[...t,`-T`,n]:[...t,`-p`,e.port,`-T`,n]},cS=async(e,t,n)=>{let r=nS(t),i=await e.runner.run(`ssh`,sS(t),{timeoutMs:n});return i.timedOut===!0?{host:r,outcome:`timeout`}:iS.test(i.stderr)?{host:r,outcome:`denied`}:aS.some(e=>e.test(i.stderr))?{detail:i.stderr.trim(),host:r,outcome:`connection-warn`}:{host:r,outcome:`ok`}},lS=(e,t)=>{let n=e.filter(e=>e.outcome===`timeout`).map(e=>e.host);if(n.length!==0)return{detail:`ssh probe timed out after ${t/1e3}s: ${n.join(`, `)}`,name:`ssh-auth`,status:`fail`}},uS=e=>{let t=e.filter(e=>e.outcome===`denied`).map(e=>e.host);if(t.length!==0)return{detail:`ssh permission denied for: ${t.join(`, `)}`,name:`ssh-auth`,status:`fail`}},dS=e=>{let t=e.filter(e=>e.outcome===`connection-warn`);if(t.length!==0)return{detail:`ssh connection issue, treated as warn: ${t.map(e=>`${e.host} (${e.detail??``})`).join(`; `)}`,name:`ssh-auth`,status:`warn`}},fS=e=>({detail:`ssh auth ok for: ${e.map(e=>e.host).join(`, `)}`,name:`ssh-auth`,status:`ok`}),pS=(e,t)=>lS(e,t)??uS(e)??dS(e)??fS(e),mS=async(e,t,n)=>{let r=rS(t);if(r.length===0)return;let i=n?.timeoutMs??1e4,a=await Promise.all(r.map(t=>cS(e,t,i)));return pS(a,i)},hS=async e=>{try{return await e.run()}catch(t){return{detail:`check crashed: ${Cv(t)}`,name:e.name,status:`fail`}}},gS=async e=>{let[t,...n]=e;if(t===void 0)return[];let r=await hS(t),i=await gS(n);return r===void 0?i:[r,...i]},_S=e=>{let{configLoad:t,ctx:n,home:r,state:i}=e;return[{name:`git`,run:()=>rb(n)},{name:`node`,run:()=>Promise.resolve(sb(n))},{name:`config`,run:()=>Promise.resolve(ub(t.errorMessage))},{name:`hooks-guard`,run:()=>bb(n,r,t.config)},{name:`dirty-checkouts`,run:()=>Cb(n,r,t.config)},{name:`config-drift`,run:()=>Cx(r,t.config)},{name:`orphans`,run:()=>Ab(r,t.config,i)},{name:`locks`,run:()=>jx(r)},{name:`skill`,run:()=>Yx(n)},{name:`cli-update`,run:()=>pb(n,t.config)},{name:`ssh-auth`,run:()=>mS(n,t.config)}]},vS=async e=>{let t=z(e.env),n=await lb(t),r=await wb(t);return gS(_S({configLoad:n,ctx:e,home:t,state:r}))},yS={fail:`FAIL`,ok:`OK`,warn:`WARN`},bS=e=>e.map(e=>`[${yS[e.status]}] ${e.name}: ${e.detail}`),xS=e=>e.some(e=>e.status===`fail`),SS=(e,t)=>{e.command(`doctor`).description(`Run environment/integrity checks (git, node, config, hooks, checkouts, drift, locks, ssh).`).action((e,n)=>{let r=Y(n);return Z(t,r,async()=>{let e=await vS(t);X(t,r,bS(e),{checks:e}),xS(e)&&(process.exitCode=Se.UNEXPECTED)})()})},CS=(e,t)=>{let n=e.refs[t];if(n===void 0)throw Error(`internal: matched ref key '${t}' is missing from config.refs`);return n},wS=(e,t)=>{if(!H(e))throw _(`checkout for '${t}' is missing — run: refs sync ${t}`)},TS=(e,t,n)=>{let r=e.packages?.[n];if(r===void 0)throw _(`no package '${n}' registered on ref '${t}'`);return r},ES=`never`,DS=(e,t,n)=>e===void 0||n-Date.parse(e)>t,OS=(e,t)=>`${e} ${t}${e===1?``:`s`} ago`,kS=(e,t)=>{if(e===void 0)return ES;let n=t-Date.parse(e);if(Number.isNaN(n))return ES;let r=Math.floor(n/1e3);if(r<60)return`just now`;let i=Math.floor(r/60);if(i<60)return OS(i,`minute`);let a=Math.floor(i/60);if(a<24)return OS(a,`hour`);let o=Math.floor(a/24);return o<365?OS(o,`day`):OS(Math.floor(o/365),`year`)},AS=e=>{let t=kS(e.lastFetchedAt,e.now),n=[`synced: ${t}`];return e.stale&&t!==ES&&n.push(`status: stale`),e.missing&&n.push(`missing: checkout not found — run: refs sync`),n},jS=(e,t,n)=>{let r=e.state.refs[t],i=ol(jg(`sync_ttl`,n,e.settings)),a=Object.keys(n.packages??{}).toSorted();return{clone_mode:jg(`clone_mode`,n,e.settings),description:n.description,key:t,...r?.last_fetched_at===void 0?{}:{last_fetched_at:r.last_fetched_at},missing:!H(B(e.home,il.parse(t))),...e.includePackages?{packages:a}:{},packages_count:a.length,stale:DS(r?.last_fetched_at,i,e.now)}},MS=e=>{let t={home:e.home,includePackages:e.includePackages,now:e.now,settings:e.config.settings,state:e.state};return Object.entries(e.config.refs).map(([e,n])=>jS(t,e,n)).toSorted((e,t)=>e.key.localeCompare(t.key))},NS=async(e,t,n)=>{let r=z(e.env),i=await V(r),a=await Pg(r);return MS({config:i,home:r,includePackages:t,now:n,state:a})},PS=(e,t)=>[`ref: ${e.key}`,`description: ${e.description}`,...AS({lastFetchedAt:e.last_fetched_at,missing:e.missing,now:t,stale:e.stale})],FS=(e,t)=>e.length===0?[`no refs configured — run: refs add <source>`]:e.reduce((e,n,r)=>(r>0&&e.push(``),e.push(...PS(n,t)),e),[]),IS=e=>e.split(`/`),LS=(e,t)=>{let n=IS(e);if(t.length>n.length)return!1;let r=n.length-t.length;return t.every((e,t)=>e===n[r+t])},RS=(e,t)=>{if(Object.hasOwn(e.refs,t))return il.parse(t);let n=IS(t),r=Object.keys(e.refs).filter(e=>LS(e,n)).toSorted(),[i]=r;if(i===void 0)throw _(`no ref matches '${t}'`);if(r.length>1)throw v(`'${t}' matches more than one ref: ${r.join(`, `)}`);return il.parse(i)},zS=(e,t)=>{e.command(`list`).description(`List configured refs with their staleness/missing checkout status.`).option(`--packages`,`include each ref's package names in --json output (off by default)`).action((e,n)=>{let r=Y(n);return Z(t,r,async()=>{let n=Date.now(),i=await NS(t,e.packages===!0,n);X(t,r,FS(i,n),i)})()})},BS=e=>e===void 0?null:e,VS=(e,t)=>e.name===t.name&&e.path===t.path,HS=(e,t)=>{let n=(e.declined_packages??[]).filter(e=>!VS(e,t));if(n.length===0){let{declined_packages:t,...n}=e;return n}return{...e,declined_packages:n}},US=(e,t)=>`package '${e.name}' at '${e.path}' is already declined on ref '${t}'`,WS=(e,t)=>`package '${e.name}' at '${e.path}' is not declined on ref '${t}' — nothing to undo`,GS=(e,t)=>`package '${e}' is registered on ref '${t}' — declining applies to packages the configuration does not have; unregister it first with --remove`,KS=(e,t,n)=>{if(Object.hasOwn(e.packages??{},t.name))throw y(GS(t.name,n));let r=e.declined_packages??[];if(r.some(e=>VS(e,t)))throw y(US(t,n));return{...e,declined_packages:[...r,t]}},qS=e=>{if(e.declined)return KS(e.entry,e.record,e.key);if(!(e.entry.declined_packages??[]).some(t=>VS(t,e.record)))throw y(WS(e.record,e.key));return HS(e.entry,e.record)},JS=(e,t)=>{let n=z(e.env);return W(n,`home`,async()=>{let e=await V(n),r=RS(e,t.query),i=CS(e,r),a={name:t.packageName,path:t.path},o=qS({declined:t.declined,entry:i,key:r,record:a});return await fu(n,{...e,refs:{...e.refs,[r]:o}}),{declined:t.declined,field:`declined_packages`,key:r,new:t.declined?a:null,old:t.declined?null:a}})},YS=`packages`,XS=()=>Object.keys(hl.shape).toSorted().join(`, `),ZS=e=>`unknown package field '${e}' — valid fields: ${XS()}`,QS=e=>Object.hasOwn(hl.shape,e),$S=(e,t,n)=>{if(!QS(t))throw v(ZS(t));let r=e[t],i=hl.safeParse({...e,[t]:n});if(!i.success)throw y(T(i.error));return{field:t,newValue:i.data[t],oldValue:r,updated:i.data}},eC=async e=>{let t=TS(e.entry,e.key,e.packageName),n=$S(t,e.field,e.value),r={...e.entry,packages:{...e.entry.packages,[e.packageName]:n.updated}};return await fu(e.home,{...e.config,refs:{...e.config.refs,[e.key]:r}}),{field:n.field,key:e.key,new:BS(n.newValue),old:BS(n.oldValue)}},tC=(e,t)=>`package '${e}' is already registered on ref '${t}' — edit its fields instead`,nC=(e,t)=>{let n=z(e.env);return W(n,`home`,async()=>{let e=await V(n),r=RS(e,t.query),i=CS(e,r);if(Object.hasOwn(i.packages??{},t.packageName))throw y(tC(t.packageName,r));let a=gl.safeParse({...HS(i,{name:t.packageName,path:t.path}),packages:{...i.packages,[t.packageName]:{description:t.description,path:t.path}}});if(!a.success)throw y(T(a.error));return await fu(n,{...e,refs:{...e.refs,[r]:a.data}}),{created:!0,field:YS,key:r,new:{description:t.description,name:t.packageName,path:t.path},old:null}})},rC=(e,t)=>`package '${e}' is not registered on ref '${t}' — nothing to remove`,iC=(e,t)=>{let n=z(e.env);return W(n,`home`,async()=>{let e=await V(n),r=RS(e,t.query),i=CS(e,r),a=i.packages??{};if(!Object.hasOwn(a,t.packageName))throw y(rC(t.packageName,r));let{[t.packageName]:o,...s}=a,c=Object.keys(s).length===0?aC(i):{...i,packages:s};return await fu(n,{...e,refs:{...e.refs,[r]:c}}),{field:YS,key:r,new:null,old:{description:o?.description??``,name:t.packageName,path:o?.path??``},removed:!0}})},aC=e=>{let{packages:t,...n}=e;return n},oC=e=>e.second===void 0&&e.value===void 0,sC=e=>{let{description:t,path:n}=e.create,{packageName:r}=e;if(r===void 0||t===void 0||n===void 0||!oC(e))throw v(`--create registers a new package: it needs --package <name>, --path <path> and --description <text>, and takes no <field> <value> arguments`);return{description:t,packageName:r,path:n}},cC=e=>{let{packageName:t}=e;if(t===void 0||e.create.path!==void 0||!oC(e)||e.create.description!==void 0)throw v(`--remove unregisters a package: it needs --package <name>, and takes no <field> <value> arguments, no --path and no --description`);return{packageName:t}},lC=e=>{let{packageName:t}=e,{path:n}=e.create;if(t===void 0||n===void 0||!oC(e)||e.create.description!==void 0)throw v(`--decline and --undecline record a decision about one package at one path: each needs --package <name> and --path <path>, and takes no <field> <value> arguments and no --description`);return{packageName:t,path:n}},uC=[`create`,`remove`,`decline`,`undecline`],dC=e=>{let t=uC.filter(t=>e[t]===!0);if(t.length>1)throw v(`use one of --create, --remove, --decline or --undecline: they are different answers about the same package, and running two at once would guess which one was meant`);return t[0]},fC=(e,t,n)=>t===`create`?nC(e,{...sC(n),query:n.first}):t===`remove`?iC(e,{...cC(n),query:n.first}):JS(e,{...lC(n),declined:t===`decline`,query:n.first}),pC=`packages`,mC=()=>Object.keys(gl.shape).filter(e=>e!==pC).toSorted().join(`, `),hC=e=>`unknown ref field '${e}' — valid fields: ${mC()}`,gC=e=>Object.hasOwn(gl.shape,e),_C=(e,t,n)=>`failed to rewrite git remote at ${e} to '${U(t)}': ${n.trim()}`,vC=async(e,t)=>{if(iu(t.home,t.dest),!H(t.dest))return;let n=await e.runner.run(`git`,[`remote`,`set-url`,`--`,`origin`,t.cloneUrl],{cwd:t.dest});if(n.exitCode!==0)throw y(_C(t.dest,t.cloneUrl,n.stderr))},yC=async(e,t)=>{let n=_f(t.value,{allowFileUrls:qv(e.env)});if(n.key!==t.key)throw y(`new url derives a different key — remove and re-add instead`);let r=B(t.home,t.key);return await vC(e,{cloneUrl:n.cloneUrl,dest:r,home:t.home}),{...t.entry,url:n.cloneUrl}},bC=(e,t,n)=>{let r={...e,[t]:n},i=gl.safeParse(r);if(!i.success)throw y(T(i.error));return i.data},xC=(e,t)=>t.field===`url`?yC(e,{entry:t.entry,home:t.home,key:t.key,value:t.value}):Promise.resolve(bC(t.entry,t.field,t.value)),SC=async(e,t)=>{let{field:n}=t;if(n===pC)throw v(`use --package <name> <field> <value>`);if(!gC(n))throw v(hC(n));let r=t.entry[n],i=await xC(e,{entry:t.entry,field:n,home:t.home,key:t.key,value:t.value});return{new:i[n],old:r,updated:i}},CC=(e,t)=>{let n=z(e.env),{field:r,opts:i,query:a,value:o}=t;return W(n,`home`,async()=>{let t=await V(n),s=RS(t,a),c=CS(t,s);if(i.packageName!==void 0)return eC({config:t,entry:c,field:r,home:n,key:s,packageName:i.packageName,value:o});let l=await SC(e,{entry:c,field:r,home:n,key:s,value:o});return await fu(n,{...t,refs:{...t.refs,[s]:l.updated}}),{field:r,key:s,new:BS(l.new),old:BS(l.old)}})},wC=`settings`,TC=[],EC=()=>Object.keys(fl.shape).toSorted().join(`, `),DC=e=>`unknown setting '${e}' — valid settings: ${EC()}`,OC=e=>Object.hasOwn(fl.shape,e),kC=e=>`note: 'settings' addressed the global settings, not ${e} — use the full ref key to edit that ref`,AC=e=>{try{let t=RS(e,wC);return[kC(`ref '${t}'`)]}catch(e){if(e instanceof g&&e.code===`usage`)return[kC("one of several matching refs — see `refs list`")];if(e instanceof g&&e.code===`not_found`)return TC;throw e}},jC=e=>({data:{field:e.key,key:wC,new:BS(e.parsed[e.key]),old:BS(e.old)},warnings:AC(e.config)}),MC=(e,t)=>{let n=z(e.env);return W(n,`home`,async()=>{let e=await V(n);if(!OC(t.key))throw v(DC(t.key));let r=e.settings[t.key],i={...e.settings,[t.key]:t.value},a=fl.safeParse(i);if(!a.success)throw y(T(a.error));return await fu(n,{...e,settings:a.data}),jC({config:e,key:t.key,old:r,parsed:a.data})})},NC=[],PC=e=>{let t={};return e.package!==void 0&&(t.packageName=e.package),t},FC=e=>{if(e.second===void 0||e.value===void 0)throw v(`missing <field> and <value> — see 'refs edit --help'`);return{field:e.second,value:e.value}},IC=(e,t,n)=>{if(t.opts.packageName!==void 0)throw v(`--package is not valid with 'refs edit settings ...' — it only applies to ref/package edits`);return MC(e,n)},LC=async(e,t)=>{if(t.create.description!==void 0||t.create.path!==void 0)throw v(`--path and --description only apply to the package modes — to change one field of a registered package use: refs edit <ref> <field> <value> --package <name>`);let{field:n,value:r}=FC(t);return t.first===`settings`?IC(e,t,{key:n,value:r}):{data:await CC(e,{field:n,opts:t.opts,query:t.first,value:r}),warnings:NC}},RC=async(e,t)=>{let n=dC(t.create);return n===void 0?LC(e,t):{data:await fC(e,n,{create:t.create,first:t.first,packageName:t.opts.packageName,second:t.second,value:t.value}),warnings:NC}},zC=e=>e==null?`(unset)`:String(e),BC=(e,t)=>{let n=t?e.new:e.old,r=t?`declined`:`no longer declining`;return`${e.key}: ${r} '${n.name}' at ${n.path}`},VC=e=>{if(e.created===!0){let t=e.new;return`${e.key}: registered '${t.name}' at ${t.path}`}if(e.removed===!0){let t=e.old;return`${e.key}: unregistered '${t.name}' (was at ${t.path})`}return e.declined===void 0?void 0:BC(e,e.declined)},HC=e=>{let t=VC(e);return t===void 0?[`${e.key}: ${e.field} '${zC(e.old)}' -> '${zC(e.new)}'`]:[t]},UC=(e,t)=>{e.command(`edit`).description(`Edit one field: 'refs edit settings <key> <value>' for a global setting, or 'refs edit <ref> <field> <value> [--package <name>]' for a ref or package field. With --create, registers a package the config does not have yet; with --remove, unregisters one it has; with --decline, records that a package the checkout declares is deliberately not registered, so drift stops reporting it.`).argument(`<ref-or-settings>`,`a ref key/unique suffix, or the literal 'settings'`).argument(`[field-or-key]`,`field to edit (or, in settings mode, the setting key)`).argument(`[value]`,`the new value`).option(`--package <name>`,`edit this package's field instead of a top-level ref field`).option(`--create`,`register --package as a new package on this ref`).option(`--remove`,`unregister --package from this ref, leaving the checkout alone`).option(`--decline`,`record that --package at --path is deliberately not registered`).option(`--undecline`,`withdraw a decline, so the package is reported again`).option(`--path <path>`,`with --create/--decline/--undecline: the package path, relative to the checkout root`).option(`--description <text>`,`with --create: what the package is`).action((e,n,r,i,a)=>{let o=Y(a);return Z(t,o,async()=>{let{data:a,warnings:s}=await RC(t,{create:i,first:e,opts:PC(i),second:n,value:r});X(t,o,HC(a),a,s)})()})},WC=`Install the agent skill: npx skills add kaisers-io/refs (from a local clone: npx skills add <path-to-this-repo> --skill refs)`,GC={migrated:`migrated`,noop:`unchanged`,seeded:`seeded`},KC=async e=>{await a(e.root,{recursive:!0}),await a(e.sourcesDir,{recursive:!0}),await a(e.locksDir,{recursive:!0}),await a(e.hooksDir,{recursive:!0})},qC=async e=>{let t=z(e.env);return await KC(t),{config:await W(t,`home`,async()=>{let e=await Su(t,nv);return await Pd(t),e}),home:t.root,skill_hint:WC}},JC=(e,t)=>{e.command(`init`).description(`Seed or migrate the refs home directory, its config, and the git hooks guard.`).action((e,n)=>{let r=Y(n);return Z(t,r,async()=>{let e=await qC(t);X(t,r,[`home: ${e.home}`,`config: ${GC[e.config]}`,``,WC],e)})()})},YC=async e=>{let t=z(e.env),n=await W(t,`home`,()=>Su(t,nv));return n===`migrated`?{backup:eu(t),result:n}:{backup:null,result:n}},XC=e=>e.result===`migrated`&&e.backup!==null?`config migrated (backup: ${re(e.backup)})`:e.result===`seeded`?`config seeded`:`config up to date`,ZC=(e,t)=>{e.command(`migrate`).description(`Migrate the refs config to the current schema, seeding it if absent.`).action((e,n)=>{let r=Y(n);return Z(t,r,async()=>{let e=await YC(t);X(t,r,XC(e),e)})()})},QC=async e=>{try{return await i(e),!0}catch(e){if(R(e))return!1;throw e}},$C=async e=>{try{return await c(e)}catch(e){if(R(e))return;throw e}},ew=async e=>{try{return(await i(e)).isDirectory()}catch(e){if(R(e))return;throw e}},tw=async e=>{let t=await $C(e);if(t===void 0)return!0;if(t.length>0)return!1;try{await f(e)}catch(e){if(!R(e))throw e}return!0},nw=async e=>{let t=await ew(e);return t===void 0?!0:t?tw(e):!1},rw=async(e,t)=>{t!==e.sourcesDir&&await nw(t)&&await rw(e,ie(t))},iw=async(e,t)=>await QC(t)?(iu(e,t),await d(t,{force:!0,recursive:!0}),await rw(e,ie(t)),{removedCheckout:!0}):{removedCheckout:!1,warning:`checkout was already missing`},aw=(e,t)=>Object.fromEntries(Object.entries(e).filter(([e])=>e!==t)),ow=async(e,t)=>{let n=await V(e),r={...n,refs:aw(n.refs,t)};await fu(e,r);let i=await Pg(e),a={...i,refs:aw(i.refs,t)};await Fg(e,a)},sw=async(e,t)=>{let n=z(e.env),r=await V(n),i=RS(r,t),a=B(n,i),{removedCheckout:o,warning:s}=await W(n,Kv(i),()=>iw(n,a));return await W(n,`home`,()=>ow(n,i)),{data:{key:i,removed_checkout:o},warnings:Sv(s)}},cw=e=>e.removed_checkout?[`removed ${e.key} (checkout deleted)`]:[`removed ${e.key} (checkout was already missing)`],lw=(e,t)=>{e.command(`remove`).description(`Remove a configured ref: its config/state entry AND its checkout directory.`).argument(`<ref>`,`full ref key or a unique suffix, e.g. zod`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let{data:n,warnings:r}=await sw(t,e);X(t,i,cw(n),n,r)})()})},uw=async e=>{let t=await $h(e.checkoutDir,e.configuredPath,e.packageName);return t.kind===`match`?{path:e.configuredPath,status:`verified`}:t.kind===`unreadable`?{path:e.configuredPath,reason:t.reason,status:`unverifiable`}:dw(e)},dw=async e=>lx(e,await tv(e.checkoutDir)),fw=async e=>{try{return await W(e.home,Kv(e.key),()=>uw(e),e.lockTimeoutMs===void 0?void 0:{timeoutMs:e.lockTimeoutMs})}catch(t){if(t instanceof g&&t.code===`conflict`)return{path:e.configuredPath,reason:`could not acquire the ref lock in time`,status:`unverifiable`};throw t}},pw=async e=>{if(!H(e.checkoutDir))return{path:e.configuredPath,status:`unmaterialized`};let t=await $h(e.checkoutDir,e.configuredPath,e.packageName);return t.kind===`match`?{path:e.configuredPath,status:`verified`}:t.kind===`unreadable`?{path:e.configuredPath,reason:t.reason,status:`unverifiable`}:(e.onProbed?.(),fw(e))},mw=(e,t)=>({local_path:null,name:e,path:null,reason:t,status:`unverifiable`}),hw=async e=>{if(!e.checkoutManaged)return mw(e.packageName,e.checkoutReason);let t=await pw(e);return{...t.candidates===void 0?{}:{candidates:t.candidates},...t.configuredPath===void 0?{}:{configured_path:t.configuredPath},local_path:t.path===null?null:m(e.checkoutDir,t.path),name:e.packageName,path:t.path,...t.reason===void 0?{}:{reason:t.reason},status:t.status}},gw=e=>[`package: ${e.name}`,`package path: ${e.local_path??`(unknown)`}`,...e.status===`verified`?[]:[`package status: ${e.status}`],...e.configured_path===void 0?[]:[`configured path: ${e.configured_path}`],...e.candidates===void 0?[]:[`candidates: ${e.candidates.join(`, `)}`],...e.reason===void 0?[]:[`reason: ${e.reason}`]],_w=`node_modules`,vw=[`.pnp.cjs`,`.pnp.js`],yw=new Set([``,`.`,`..`]),bw=e=>!ae(e)&&!e.includes(`\\`)&&e.split(`/`).every(e=>!yw.has(e)),xw=function*(e){let t=ce(e);for(;;){re(t)!==_w&&(yield m(t,_w));let e=ie(t);if(e===t)return;t=e}},Sw=async e=>{if(await Tw(e)!==`absent`)try{let t=JSON.parse(await s(e,`utf8`)),{name:n,version:r}=typeof t==`object`&&t?t:{};return typeof r!=`string`||r===``?{package_json:e,reason:`manifest_has_no_version`,status:`unverifiable`}:{...typeof n==`string`?{name:n}:{},package_json:e,status:`found`,version:r}}catch{return{package_json:e,reason:`manifest_unreadable`,status:`unverifiable`}}},Cw=new Set([`ENOENT`,`ENOTDIR`]),ww=async e=>{try{return(await c(e)).length===0}catch{return!1}},Tw=async e=>{try{return await p(e),`present`}catch(e){let t=typeof e==`object`&&e&&`code`in e&&typeof e.code==`string`?e.code:void 0;return t!==void 0&&Cw.has(t)?`absent`:`unreadable`}},Ew=async e=>{for(let t of xw(e)){let e=ie(t);if((await Promise.all(vw.map(t=>Tw(m(e,t))))).includes(`present`))return!0}return!1},Dw=async e=>{try{if(!(await p(e)).isDirectory())throw v(`--project must be a directory: ${e}`)}catch(t){throw t instanceof Error&&t.message.startsWith(`--project`)?t:v(`--project path does not exist: ${e}`)}},Ow=async e=>{let t=await Tw(e);if(t===`unreadable`)return{reason:`slot_unreadable`,status:`unverifiable`};if(t===`absent`)return;let n=await Sw(m(e,`package.json`));return n===void 0?await ww(e)?void 0:{reason:`installed_without_manifest`,status:`unverifiable`}:n},kw=async(e,t)=>{if(!bw(t))return{reason:`unsupported_package_name`,status:`unverifiable`};for(let n of xw(e)){let e=await Ow(m(n,...t.split(`/`)));if(e!==void 0)return e}return await Ew(e)?{reason:`yarn_pnp`,status:`unsupported_layout`}:{status:`not_materialized`}},Aw={'"':`"`,"\\":`\\`,b:`\b`,n:`
351
+ `,t:` `},jw={'"':`"`,"\\":`\\`},Mw=new Set([` `,` `]),$=Symbol(`malformed git config`),Nw=e=>e!==void 0&&!e.quoted&&Mw.has(e.char),Pw=e=>{let t=0,n=e.length;for(;t<n&&Nw(e[t]);)t+=1;for(;n>t&&Nw(e[n-1]);)--n;return e.slice(t,n).map(e=>e.char).join(``)},Fw=e=>{let t=[],n=!1;for(let r=0;r<e.length;r+=1){let i=e[r];if(i===`\\`){r+=1;let n=Aw[e[r]??``];if(n===void 0)return $;t.push({char:n,quoted:!0})}else if(i===`"`)n=!n;else if(!n&&(i===`#`||i===`;`))return Pw(t);else t.push({char:i??``,quoted:n})}return n?$:Pw(t)},Iw=e=>{let t=``;for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`\\`){n+=1;let r=jw[e[n]??``];if(r===void 0)return $;t+=r}else t+=r??``}return t},Lw=/^[ \t]+|[ \t]+$/gu,Rw=e=>e.replace(Lw,``),zw=/^\[[ \t]*(?<section>[A-Za-z0-9.-]+)[ \t]*(?:"(?<subsection>(?:[^"\\]|\\.)*)")?[ \t]*\]/u,Bw=/^(?<name>[A-Za-z][A-Za-z0-9-]*)[ \t]*(?:=[ \t]*(?<value>.*))?$/u,Vw=function*(e){let t=``,n=!1,r=!1;for(let i=0;i<e.length;i+=1){let a=e[i];if(a===`
352
352
  `)yield t,t=``,n=!1,r=!1;else if(a!==`\r`||e[i+1]!==`
353
353
  `){if(r)t+=a;else if(a===`\\`){let n=e[i+1];n===`
354
354
  `||n===`\r`&&e[i+2]===`
355
- `?i+=n===`\r`?2:1:(t+=a+(n??``),i+=1)}else a===`"`?n=!n:!n&&(a===`#`||a===`;`)&&(r=!0),t+=a}}t!==``&&(yield t)},Dw=(e,t)=>e.subsection===void 0?`${e.name}.${t.toLowerCase()}`:`${e.name}.${e.subsection}.${t.toLowerCase()}`,Ow=(e,t)=>{let n=e.toLowerCase();if(t===void 0)return{name:n};let r=xw(t);return r===$?$:{name:n,subsection:r}},kw=e=>{let t=ww.exec(e),n=t?.groups?.section;if(n===void 0)return;let r=Cw(e.slice(t?.[0].length??0)),i=Ow(n,t?.groups?.subsection);return i===$?$:{rest:r,section:i}},Aw=e=>e===``||e.startsWith(`#`)||e.startsWith(`;`),jw=e=>{let t=Tw.exec(e),n=t?.groups?.name;if(n===void 0)return $;let r=bw(t?.groups?.value??``);return r===$?$:{name:n,value:r}},Mw=(e,t)=>{let n=jw(t.line);if(n===$)return`malformed`;let r=Dw(t.section,n.name);return t.wanted.includes(r)&&e.set(r,[...e.get(r)??[],n.value]),`ok`},Nw=(e,t,n)=>t.rest===``||Aw(t.rest)?t.section:Mw(e,{line:t.rest,section:t.section,wanted:n})===`malformed`?$:t.section,Pw=(e,t)=>{let n=kw(t.line);return n===$?$:n===void 0?t.section===Fw||Mw(e,t)===`malformed`?$:t.section:Nw(e,n,t.wanted)},Fw={name:``},Iw=(e,t)=>{let n=new Map,r=Fw;for(let i of Ew(e)){let e=Cw(i),a=Aw(e)?r:Pw(n,{line:e,section:r,wanted:t});if(a===$)return;r=a}return n},Lw=`core.hookspath`,Rw=`remote.origin.url`,zw=[Lw,Rw],Bw={status:`managed`},Vw={status:`missing`},Hw=e=>({reason:e,status:`unmanaged`}),Uw=e=>({reason:e,status:`unverifiable`}),Ww=new Set([`ENOENT`,`ENOTDIR`]),Gw=e=>typeof e==`object`&&e&&`code`in e&&typeof e.code==`string`?e.code:void 0,Kw=async e=>{try{return await i(e),`present`}catch(e){let t=Gw(e);return t!==void 0&&Ww.has(t)?`absent`:`unreadable`}},qw=async e=>{try{let t=await i(m(e,`.git`));return t.isSymbolicLink()?Hw(`git_is_symlink`):t.isDirectory()?void 0:Hw(`git_is_file`)}catch(e){let t=Gw(e);return t!==void 0&&Ww.has(t)?Hw(`no_git`):Uw(`git_unreadable`)}},Jw=(e,t)=>{let n=e.get(t);if(n===void 0||n.length!==1)return;let[r]=n;return r===void 0||r===``?void 0:r},Yw=(e,t,n)=>{try{return _f(e,{allowFileUrls:n}).key===_f(t,{allowFileUrls:n}).key}catch{return!1}},Xw=e=>(e.get(Lw)?.length??0)>1||(e.get(Rw)?.length??0)>1,Zw=(e,t)=>{let n=Iw(e,zw);return n===void 0?Uw(`config_malformed`):Xw(n)?Uw(`duplicate_config_values`):Qw(n,t)},Qw=(e,t)=>{if(Jw(e,Lw)!==t.hooksDir)return Hw(`no_refs_marker`);let n=Jw(e,Rw);return n===void 0?Hw(`no_origin`):Yw(n,t.expectedUrl,t.allowFileUrls)?Bw:Hw(`origin_mismatch`)},$w={missing:Vw,outside:Hw(`outside_sources`),unreadable:Uw(`path_unreadable`)},eT=async e=>{let t=await Ou(e.sourcesDir,e.dest);if(t.kind!==`inside`)return t.kind===`unreadable`?await Kw(e.sourcesDir)===`absent`?Vw:$w.unreadable:$w[t.kind]},tT=async e=>{let t=await eT(e);if(t!==void 0)return t;let n=await qw(e.dest);if(n!==void 0)return n;try{return Zw(await s(m(e.dest,`.git`,`config`),`utf8`),e)}catch{return Uw(`config_unreadable`)}},nT=e=>`no registered package or ref matches '${e}' — this does not establish that the repository is untracked; it may be registered under a different identifier. Run: refs list --json`,rT=e=>`ref '${e}' is not in the active refs configuration — to track it: refs add <url>`,iT=e=>`--ref '${e}' matched no configured ref — pass a full ref key or a unique suffix of one. Run: refs list --json`,aT=/^[a-z][a-z0-9+.-]*:\/\//iu,oT=/^git@[^:/\s]+:[^\s]+$/u,sT=e=>aT.test(e)||oT.test(e),cT=(e,t)=>{try{return _f(e,t)}catch{if(sT(e))throw y(`query looks like a git url but is not a supported form — check the url (credentials are never accepted) or run: refs resolve <package|ref-suffix>`);return}},lT=(e,t,n)=>{let r=cT(t,n);if(r!==void 0){if(Object.hasOwn(e.refs,r.key))return{key:r.key};throw _(rT(r.key),`ref_not_registered`)}},uT=(e,t)=>{let n=[];for(let r of Object.keys(e.refs).toSorted()){let i=e.refs[r]?.packages?.[t];i!==void 0&&n.push({entry:i,key:il.parse(r)})}return n},dT=(e,t)=>`package '${e}' is registered by more than one ref: ${t.join(`, `)} — pick one with: refs resolve ${e} --ref <ref>`,fT=(e,t)=>{let n=uT(e,t),[r]=n;if(r!==void 0){if(n.length>1)throw v(dT(t,n.map(e=>e.key)));return r}},pT=function*(e){let t=e.split(`/`);for(let e=t.length-1;e>=1;--e)yield t.slice(0,e).join(`/`)},mT=(e,t)=>{for(let n of pT(t)){let t=fT(e,n);if(t!==void 0)return{...t,name:n}}},hT=(e,t,n)=>{try{return CS(e,t)}catch(e){throw e instanceof g&&e.code===`not_found`?_(n,`unmatched_query`):e}},gT=(e,t)=>{let n=e[t];if(n!==void 0)return{entry:n,name:t};for(let n of pT(t)){let t=e[n];if(t!==void 0)return{entry:t,name:n}}},_T=(e,t,n)=>{let r=hT(e,n,iT(n)),i=gT(e.refs[r]?.packages??{},t);if(i===void 0)throw _(sT(t)?`ref '${r}' is tracked but registers no package matching that query — inspect: refs show ${r} --packages --json`:`ref '${r}' is tracked but registers no package matching '${t}' — inspect: refs show ${r} --packages --json`,`package_not_registered`);return{key:r,packageMatch:{...i,key:r}}},vT=(e,t,n)=>{let r=lT(e,t,n);if(r!==void 0)return r;let i=fT(e,t);if(i!==void 0)return{key:i.key,packageMatch:{...i,name:t}};let a=mT(e,t);return a===void 0?{key:hT(e,t,nT(t))}:{key:a.key,packageMatch:a}},yT=(e,t,n)=>n.ref===void 0?vT(e,t,n):_T(e,t,n.ref),bT=(e,t)=>{let n={head_sha:t.headSha,last_fetched_at:new Date().toISOString()},r=t.effectiveCloneMode??e?.effective_clone_mode;return r!==void 0&&(n.effective_clone_mode=r),n},xT=async(e,t,n)=>{let r=await V(e),i=r.refs[t];i!==void 0&&(r.refs[t]={...i,default_branch:n},await fu(e,r))},ST=(e,t,n)=>W(e,`home`,async()=>{n.branchRenamedTo!==void 0&&await xT(e,t,n.branchRenamedTo);let r=await Pg(e);r.refs[t]=bT(r.refs[t],n),await Fg(e,r)}),CT=2e3,wT=e=>{if(e.length<=CT)return e;let t=e.slice(0,1500),n=e.slice(e.length-500),r=e.length-CT;return`${t}\n… ${String(r)} characters omitted …\n${n}`},TT=async(e,t,n)=>{try{await W(e,`home`,async()=>{let r=await Pg(e);r.refs[t]={...r.refs[t],last_error:wT(n)},await Fg(e,r)})}catch{}},ET=e=>{let t=0,n=[];return{acquire:()=>{if(t<e)return t+=1,Promise.resolve();let{promise:r,resolve:i}=Promise.withResolvers();return n.push(()=>{t+=1,i()}),r},release:()=>{--t;let e=n.shift();e!==void 0&&e()}}},DT=async(e,t)=>{await e.acquire();try{return await t()}finally{e.release()}},OT=(e,t,n)=>`sync produced a HEAD sha for '${e}' at ${t} that refs cannot store yet (${n.length} hex chars) — only SHA-1 repositories are supported for now`,kT=(e,t,n)=>{if(!kg.shape.head_sha.safeParse(n).success)throw y(OT(e,t,n));return n},AT=(e,t,n)=>{let r={effectiveCloneMode:t.effectiveMode,headSha:n.headSha,status:`cloned`};return n.actualBranch!==e.ref.default_branch&&(r.branchRenamedTo=n.actualBranch),t.warning!==void 0&&(r.warning=t.warning),r},jT=async(e,t,n)=>{await a(ie(n),{recursive:!0});let r=jg(`clone_mode`,t.ref,t.settings),i=await Cd(e.runner,{cloneUrl:t.ref.url,dest:n,hooksDir:t.home.hooksDir,mode:r}),o=await Td(e.runner,n),s=await fy(e.runner,{allowFileUrls:Vv(e.env),dest:n,expectedUrl:t.ref.url,hooksDir:t.home.hooksDir,key:t.key});return AT(t,i,{actualBranch:o,headSha:s})},MT=async(e,t,n)=>{await sy(e.runner,{dest:n,hooksDir:t.home.hooksDir}),await ay(e.runner,{allowFileUrls:Vv(e.env),dest:n,expectedUrl:t.ref.url});let r=await jd(e.runner,{defaultBranch:t.ref.default_branch,dir:n}),i={headSha:kT(t.key,n,r.newSha),previousSha:r.oldSha,status:r.status};return r.branchRenamedTo!==void 0&&(i.branchRenamedTo=r.branchRenamedTo),r.warning!==void 0&&(i.warning=r.warning),i},NT=(e,t,n)=>(iu(t.home,n),H(n)?MT(e,t,n):jT(e,t,n)),PT={changedDirs:[],kind:`arrivals`,namesBefore:[]},FT=async(e,t,n)=>{if(n.previousSha===void 0)return PT;let r=await dd(e.runner,{dir:t,from:n.previousSha,to:n.headSha});return r===void 0?PT:{...r,kind:`arrivals`}},IT=(e,t)=>W(t.home,Bv(t.key),async()=>{let n=B(t.home,t.key),r=await NT(e,t,n),i=await FT(e,n,r);return{...r,structure:await nx(n,t.ref,i)}}),LT=e=>{let t=[];e.branchRenamedTo!==void 0&&t.push(`default branch renamed to ${e.branchRenamedTo}`),e.warning!==void 0&&t.push(e.warning);let[n]=t;if(n!==void 0)return t.join(` | `)},RT=(e,t)=>{let n={key:e,status:t.status},r=LT(t);return r!==void 0&&(n.warning=r),t.structure!==void 0&&(n.structure=t.structure),n},zT=async(e,t)=>{try{let n=await IT(e,t);return await ST(t.home,t.key,n),n}catch(e){throw await TT(t.home,t.key,_v(e)),e}},BT=async(e,t)=>{try{return RT(t.key,await zT(e,t))}catch(e){return{error:_v(e),key:t.key,status:`failed`}}},VT=(e,t)=>e.status===`rejected`?{error:_v(e.reason),key:t,status:`failed`}:e.value,HT=async(e,t)=>{let n=ET(4);return(await Promise.allSettled(t.map(t=>DT(n,()=>BT(e,t))))).map((e,n)=>{let r=t[n];if(r===void 0)throw Error(`internal: sync target at index ${n} is missing`);return VT(e,r.key)})},UT=async e=>{let{packageMatch:t}=e.match;return t===void 0?null:await ew({checkoutDir:e.dest,checkoutManaged:e.checkout.status===`managed`||e.checkout.status===`missing`,checkoutReason:`checkout is ${e.checkout.status}`,configuredPath:t.entry.path,home:e.home,key:e.match.key,packageName:t.name})},WT=(e,t,n)=>yT(t,n.query,{allowFileUrls:Vv(e.env),...n.ref===void 0?{}:{ref:n.ref}}),GT=async(e,t)=>{let n=z(e.env),r=await V(n);return{config:r,home:n,match:WT(e,r,t),state:await Pg(n)}},KT=async(e,t)=>{if(t===void 0)return;let{packageMatch:n}=e;if(n===void 0)throw v(`--project needs a query that names a package; '${e.key}' resolves to the ref itself`);return await mw(t,n.name)},qT=(e,t)=>{if(e.status!==`managed`&&e.status!==`missing`)throw y(`refusing to sync ${t}: its checkout is ${e.status}${e.reason===void 0?``:` (${e.reason})`} — run: refs doctor`)},JT=async(e,t)=>(await zT(e,{home:t.home,key:t.match.key,ref:cS(t.config,t.match.key),settings:t.config.settings})).status,YT=async(e,t)=>{t.project!==void 0&&await fw(t.project);let n=await GT(e,t),r=await ZT(e,n,t);return t.syncIfStale!==!0||!(r.stale||r.missing)?r:(qT(r.checkout,r.key),await XT(e,{key:r.key,opts:t,target:n}))},XT=async(e,t)=>{let{key:n,opts:r}=t,i=await JT(e,t.target),a=await GT(e,r);if(a.match.key!==n)throw Ce(`configuration changed while resolving '${r.query}' — retry`);return{...await ZT(e,a,r),sync:{status:i}}},ZT=async(e,t,n)=>{let{config:r,home:i,match:a,state:o}=t,{now:s}=n,c=cS(r,a.key),l=B(i,a.key),u=ol(jg(`sync_ttl`,c,r.settings)),d=o.refs[a.key]?.last_fetched_at,f=await tT({allowFileUrls:Vv(e.env),dest:l,expectedUrl:c.url,hooksDir:i.hooksDir,sourcesDir:i.sourcesDir}),p=await KT(a,n.project);return{checkout:f,key:a.key,...d===void 0?{}:{last_fetched_at:d},...p===void 0?{}:{installed:p},local_path:l,missing:f.status===`missing`,package:await UT({checkout:f,dest:l,home:i,match:a}),stale:fS(d,u,s)}},QT=(e,t)=>{let n=[`ref: ${e.key}`,`path: ${e.local_path}`,...hS({lastFetchedAt:e.last_fetched_at,missing:e.missing,now:t,stale:e.stale}),...e.checkout.status===`managed`||e.checkout.status===`missing`?[]:[`checkout: ${e.checkout.status}${e.checkout.reason===void 0?``:` (${e.checkout.reason})`}`]];return e.package!==null&&n.push(...tw(e.package)),e.sync!==void 0&&n.push(`sync: ${e.sync.status}`),e.installed!==void 0&&n.push(`installed: ${e.installed.version??`(${e.installed.status})`}`,...e.installed.name===void 0?[]:[`installed name: ${e.installed.name}`],...e.installed.reason===void 0?[]:[`installed reason: ${e.installed.reason}`]),n},$T=(e,t,n)=>({now:t,...n.project===void 0?{}:{project:n.project},query:e,...n.ref===void 0?{}:{ref:n.ref},...n.syncIfStale===!0?{syncIfStale:!0}:{}}),eE=(e,t)=>{e.command(`resolve`).description(`Resolve a git url, npm package name, import path, or ref-key suffix to its ref/package.`).argument(`<query>`,`git url, npm package name, import path, or unique ref-key suffix`).option(`--ref <ref>`,`resolve the query as a package within this ref (full key or unique suffix)`).option(`--project <dir>`,`report the version this project has installed of the query's package`).option(`--sync-if-stale`,`fetch or clone first when the ref is stale or its checkout is absent`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let r=Date.now(),a=await YT(t,$T(e,r,n));X(t,i,QT(a,r),a)})()})},tE={},nE=async(e,t)=>{if(!H(t))return{tags:[]};try{let{tags:n}=await Fd(e.runner,t,5);return{tags:n}}catch(e){return{tags:[],warning:`could not list tags: ${_v(e)}`}}},rE=async(e,t,n,r)=>{let i=z(e.env),a=await V(i),o=CS(a,t),s=cS(a,o),c=await Pg(i),l=B(i,o),{packages:u,...d}=s,f=n.tags?await nE(e,l):void 0,p=c.refs[o]??tE;return{data:{...d,key:o,local_path:l,missing:!H(l),...n.packages?{packages:u??{}}:{},packages_count:Object.keys(u??{}).length,...f===void 0?{}:{sample_tags:f.tags},stale:fS(p.last_fetched_at,ol(jg(`sync_ttl`,s,a.settings)),r),state:p},warnings:gv(f?.warning)}},iE=(e,t)=>{let n=[`ref: ${e.key}`,`description: ${e.description}`,`url: ${e.url}`,`path: ${e.local_path}`,...hS({lastFetchedAt:e.state.last_fetched_at,missing:e.missing,now:t,stale:e.stale})];return e.sample_tags!==void 0&&e.sample_tags.length>0&&n.push(`tags: ${e.sample_tags.join(`, `)}`),n},aE=(e,t)=>{e.command(`show`).description(`Show a configured ref: entry, state, local path, package count; --packages/--tags add the package map and sample tags to --json.`).argument(`<ref>`,`full ref key or a unique suffix, e.g. zod`).option(`--packages`,`include the ref's full package map in --json output (off by default)`).option(`--tags`,`include sample tags in --json output (human output always probes for them)`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let r={packages:n.packages===!0,tags:!i.json||n.tags===!0},a=Date.now(),{data:o,warnings:s}=await rE(t,e,r,a);X(t,i,iE(o,a),o,s)})()})},oE=(e,t,n)=>({home:e,key:n,ref:cS(t,n),settings:t.settings}),sE=(e,t,n)=>n.length===0?Object.keys(t.refs).toSorted().map(n=>oE(e,t,il.parse(n))):n.map(n=>oE(e,t,CS(t,n))),cE=(e,t,n)=>{let r=Date.now();return t.filter(t=>{let i=ol(jg(`sync_ttl`,t.ref,t.settings)),a=fS(n.refs[t.key]?.last_fetched_at,i,r),o=!H(B(e,t.key));return a||o})},lE=async(e,t,n)=>{if(!e_({env:e.env,updates:n.updates}))return[];let{latest:r,refreshed:i}=await Kg({fetch:e.fetcher,home:t,nowMs:Date.now()});return!i||r===void 0||!qg(e.cliVersion,r)?[]:[Jg(e.cliVersion,r)]},uE=async(e,t,n)=>{if(!n)return t;let r=await Pg(e);return cE(e,t,r)},dE=async(e,t)=>{let n=z(e.env),r=await V(n),i=sE(n,r,t.refs),a=await uE(n,i,t.staleOnly),[o,s]=await Promise.all([HT(e,a),a.length>0?lE(e,n,r):Promise.resolve([])]);return{failedCount:o.filter(e=>e.status===`failed`).length,results:o,warnings:s}},fE=[`updated`,`fresh`,`cloned`,`restored`,`failed`],pE={cloned:`Cloned`,failed:`Failed`,fresh:`Fresh`,restored:`Restored`,updated:`Updated`},mE=e=>{let t={cloned:[],failed:[],fresh:[],restored:[],updated:[]};for(let n of e)t[n.status].push(n);return t},hE=e=>{if(e.status===`failed`)return[` ${e.key}: ${e.error??`unknown error`}`];let t=e.warning===void 0?` ${e.key}`:` ${e.key} (${e.warning})`;return e.structure===void 0?[t]:[t,...Lb(e.structure,e.key).map(e=>` ${e}`)]},gE=e=>{let t=mE(e),n=[fE.map(e=>`${pE[e]} (${t[e].length})`).join(` / `)];for(let e of fE)for(let r of t[e])n.push(...hE(r));return n},_E=(e,t)=>({refs:e,staleOnly:t.staleOnly===!0}),vE=(e,t)=>{e.command(`sync`).description(`Fetch (or re-clone, if the checkout is missing) configured refs — all by default.`).argument(`[refs...]`,`ref keys or unique suffixes to sync (default: every configured ref)`).option(`--stale-only`,`skip refs whose last sync is still within their ref's sync_ttl`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let r=await dE(t,_E(e,n));X(t,i,gE(r.results),{results:r.results},r.warnings),r.failedCount>0&&(process.exitCode=Se.UNEXPECTED)})()})},yE=(e,t,n)=>n===void 0?e.tag_format:uS(e,t,n).tag_format??e.tag_format,bE=(e,t,n)=>{if(e!==void 0)return e;let r=n===void 0?`ref '${t}'`:`package '${n}'`,i=n===void 0?[]:[`--package=${Q(n)}`];throw y(`${r} has no tag_format configured — inspect the repository's real tags and set one with: ${bv(i,[t,`tag_format`,`<format>`])}`)},xE=async(e,t)=>{let n=z(e.env),r=await V(n),i=CS(r,t.query),a=cS(r,i),o=bE(yE(a,i,t.opts.packageName),i,t.opts.packageName),s=B(n,i);lS(s,i);let c=await qd(e.runner,s,o,t.version);return{key:i,ref_path:`refs/tags/${c}`,tag:c,version:t.version}},SE=e=>[`${e.key}@${e.version} -> ${e.tag}`],CE=e=>{let t={};return e.package!==void 0&&(t.packageName=e.package),t},wE=[NC,Xy,OC,wS,sS,IC,JC,eE,aE,vE,(e,t)=>{e.command(`tag`).description(`Resolve a version to its git tag, via the ref's (or a package's) tag_format.`).argument(`<ref>`,`full ref key or a unique suffix, e.g. zod`).argument(`<version>`,`version to resolve, e.g. 4.1.0`).option(`--package <name>`,`resolve against this package's tag_format instead of the ref's`).action((e,n,r,i)=>{let a=Y(i);return Z(t,a,async()=>{let i=await xE(t,{opts:CE(r),query:e,version:n});X(t,a,SE(i),i)})()})}],TE=(e,t)=>{for(let n of wE)n(e,t)},EE=[``,`Examples:`,` $ refs list --json`,` $ refs sync --stale-only --json`,` $ refs resolve zod/mini --json`,``,`Every command accepts --json for structured output and --verbose for stack traces on error.`].join(`
356
- `),DE=new Set([`commander.help`,`commander.helpDisplayed`,`commander.version`]),OE=`--json`,kE=`--verbose`,AE=/\n$/u,jE=/^error: /u,ME=e=>e.replace(jE,``),NE=(e,t)=>{for(let n of e){if(n===`--`)return!1;if(n===t)return!0}return!1},PE=e=>NE(e,OE),FE=e=>NE(e,kE),IE=(e,t,n)=>n&&t!==void 0?`${e}\n${t}`:e,LE=e=>{let t=new dv().name(`refs`).description(`Manage git-based reference checkouts shared across a workspace.`).version(X_).option(OE,`emit machine-readable JSON on stdout instead of human-readable text`).option(kE,`include stack traces in error output`).allowExcessArguments(!1).exitOverride().configureOutput({outputError:()=>{},writeErr:t=>{e.errLine(t.replace(AE,``))},writeOut:t=>{e.out(t.replace(AE,``))}});return t.addHelpText(`after`,EE),TE(t,e),t},RE=()=>{process.exitCode=Se.OK},zE=(e,t,n)=>{let r={code:`usage`,message:IE(ME(n.message),n.stack,t.verbose)};vv(e,t,r),process.exitCode=Se.USAGE},BE=(e,t,n)=>{if(DE.has(n.code)){RE();return}zE(e,t,n)},VE=(e,t,n)=>{let r=Te(n,{verbose:t.verbose});vv(e,t,r),process.exitCode=r.exitCode},HE=async(e,t,n)=>{let r={json:PE(n),verbose:FE(n)};try{await t.parseAsync(n)}catch(t){if(t instanceof ev){BE(e,r,t);return}VE(e,r,t)}},UE=(e,t)=>HE(e,LE(e),t);import.meta.main&&await UE($_(),process.argv);export{LE as buildProgram,Y as cliOptsOf,X as emit,vv as emitError,_v as errorMessageOf,yv as progress,$_ as realContext,TE as registerCommands,UE as run,HE as runProgram,gv as warningsFor,Z as wrapAction};
355
+ `?i+=n===`\r`?2:1:(t+=a+(n??``),i+=1)}else a===`"`?n=!n:!n&&(a===`#`||a===`;`)&&(r=!0),t+=a}}t!==``&&(yield t)},Hw=(e,t)=>e.subsection===void 0?`${e.name}.${t.toLowerCase()}`:`${e.name}.${e.subsection}.${t.toLowerCase()}`,Uw=(e,t)=>{let n=e.toLowerCase();if(t===void 0)return{name:n};let r=Iw(t);return r===$?$:{name:n,subsection:r}},Ww=e=>{let t=zw.exec(e),n=t?.groups?.section;if(n===void 0)return;let r=Rw(e.slice(t?.[0].length??0)),i=Uw(n,t?.groups?.subsection);return i===$?$:{rest:r,section:i}},Gw=e=>e===``||e.startsWith(`#`)||e.startsWith(`;`),Kw=e=>{let t=Bw.exec(e),n=t?.groups?.name;if(n===void 0)return $;let r=Fw(t?.groups?.value??``);return r===$?$:{name:n,value:r}},qw=(e,t)=>{let n=Kw(t.line);if(n===$)return`malformed`;let r=Hw(t.section,n.name);return t.wanted.includes(r)&&e.set(r,[...e.get(r)??[],n.value]),`ok`},Jw=(e,t,n)=>t.rest===``||Gw(t.rest)?t.section:qw(e,{line:t.rest,section:t.section,wanted:n})===`malformed`?$:t.section,Yw=(e,t)=>{let n=Ww(t.line);return n===$?$:n===void 0?t.section===Xw||qw(e,t)===`malformed`?$:t.section:Jw(e,n,t.wanted)},Xw={name:``},Zw=(e,t)=>{let n=new Map,r=Xw;for(let i of Vw(e)){let e=Rw(i),a=Gw(e)?r:Yw(n,{line:e,section:r,wanted:t});if(a===$)return;r=a}return n},Qw=`core.hookspath`,$w=`remote.origin.url`,eT=[Qw,$w],tT={status:`managed`},nT={status:`missing`},rT=e=>({reason:e,status:`unmanaged`}),iT=e=>({reason:e,status:`unverifiable`}),aT=new Set([`ENOENT`,`ENOTDIR`]),oT=e=>typeof e==`object`&&e&&`code`in e&&typeof e.code==`string`?e.code:void 0,sT=async e=>{try{return await i(e),`present`}catch(e){let t=oT(e);return t!==void 0&&aT.has(t)?`absent`:`unreadable`}},cT=async e=>{try{let t=await i(m(e,`.git`));return t.isSymbolicLink()?rT(`git_is_symlink`):t.isDirectory()?void 0:rT(`git_is_file`)}catch(e){let t=oT(e);return t!==void 0&&aT.has(t)?rT(`no_git`):iT(`git_unreadable`)}},lT=(e,t)=>{let n=e.get(t);if(n===void 0||n.length!==1)return;let[r]=n;return r===void 0||r===``?void 0:r},uT=(e,t,n)=>{try{return _f(e,{allowFileUrls:n}).key===_f(t,{allowFileUrls:n}).key}catch{return!1}},dT=e=>(e.get(Qw)?.length??0)>1||(e.get($w)?.length??0)>1,fT=(e,t)=>{let n=Zw(e,eT);return n===void 0?iT(`config_malformed`):dT(n)?iT(`duplicate_config_values`):pT(n,t)},pT=(e,t)=>{if(lT(e,Qw)!==t.hooksDir)return rT(`no_refs_marker`);let n=lT(e,$w);return n===void 0?rT(`no_origin`):uT(n,t.expectedUrl,t.allowFileUrls)?tT:rT(`origin_mismatch`)},mT={missing:nT,outside:rT(`outside_sources`),unreadable:iT(`path_unreadable`)},hT=async e=>{let t=await Ou(e.sourcesDir,e.dest);if(t.kind!==`inside`)return t.kind===`unreadable`?await sT(e.sourcesDir)===`absent`?nT:mT.unreadable:mT[t.kind]},gT=async e=>{let t=await hT(e);if(t!==void 0)return t;let n=await cT(e.dest);if(n!==void 0)return n;try{return fT(await s(m(e.dest,`.git`,`config`),`utf8`),e)}catch{return iT(`config_unreadable`)}},_T=e=>`no registered package or ref matches '${e}' — this does not establish that the repository is untracked; it may be registered under a different identifier. Run: refs list --json`,vT=e=>`ref '${e}' is not in the active refs configuration — to track it: refs add <url>`,yT=e=>`--ref '${e}' matched no configured ref — pass a full ref key or a unique suffix of one. Run: refs list --json`,bT=/^[a-z][a-z0-9+.-]*:\/\//iu,xT=/^git@[^:/\s]+:[^\s]+$/u,ST=e=>bT.test(e)||xT.test(e),CT=(e,t)=>{try{return _f(e,t)}catch{if(ST(e))throw y(`query looks like a git url but is not a supported form — check the url (credentials are never accepted) or run: refs resolve <package|ref-suffix>`);return}},wT=(e,t,n)=>{let r=CT(t,n);if(r!==void 0){if(Object.hasOwn(e.refs,r.key))return{key:r.key};throw _(vT(r.key),`ref_not_registered`)}},TT=(e,t)=>{let n=[];for(let r of Object.keys(e.refs).toSorted()){let i=e.refs[r]?.packages?.[t];i!==void 0&&n.push({entry:i,key:il.parse(r)})}return n},ET=(e,t)=>`package '${e}' is registered by more than one ref: ${t.join(`, `)} — pick one with: refs resolve ${e} --ref <ref>`,DT=(e,t)=>{let n=TT(e,t),[r]=n;if(r!==void 0){if(n.length>1)throw v(ET(t,n.map(e=>e.key)));return r}},OT=function*(e){let t=e.split(`/`);for(let e=t.length-1;e>=1;--e)yield t.slice(0,e).join(`/`)},kT=(e,t)=>{for(let n of OT(t)){let t=DT(e,n);if(t!==void 0)return{...t,name:n}}},AT=(e,t,n)=>{try{return RS(e,t)}catch(e){throw e instanceof g&&e.code===`not_found`?_(n,`unmatched_query`):e}},jT=(e,t)=>{let n=e[t];if(n!==void 0)return{entry:n,name:t};for(let n of OT(t)){let t=e[n];if(t!==void 0)return{entry:t,name:n}}},MT=(e,t,n)=>{let r=AT(e,n,yT(n)),i=jT(e.refs[r]?.packages??{},t);if(i===void 0)throw _(ST(t)?`ref '${r}' is tracked but registers no package matching that query — inspect: refs show ${r} --packages --json`:`ref '${r}' is tracked but registers no package matching '${t}' — inspect: refs show ${r} --packages --json`,`package_not_registered`);return{key:r,packageMatch:{...i,key:r}}},NT=(e,t,n)=>{let r=wT(e,t,n);if(r!==void 0)return r;let i=DT(e,t);if(i!==void 0)return{key:i.key,packageMatch:{...i,name:t}};let a=kT(e,t);return a===void 0?{key:AT(e,t,_T(t))}:{key:a.key,packageMatch:a}},PT=(e,t,n)=>n.ref===void 0?NT(e,t,n):MT(e,t,n.ref),FT=(e,t)=>{let n={head_sha:t.headSha,last_fetched_at:new Date().toISOString()},r=t.effectiveCloneMode??e?.effective_clone_mode;return r!==void 0&&(n.effective_clone_mode=r),n},IT=async(e,t,n)=>{let r=await V(e),i=r.refs[t];i!==void 0&&(r.refs[t]={...i,default_branch:n},await fu(e,r))},LT=(e,t,n)=>W(e,`home`,async()=>{n.branchRenamedTo!==void 0&&await IT(e,t,n.branchRenamedTo);let r=await Pg(e);r.refs[t]=FT(r.refs[t],n),await Fg(e,r)}),RT=2e3,zT=e=>{if(e.length<=RT)return e;let t=e.slice(0,1500),n=e.slice(e.length-500),r=e.length-RT;return`${t}\n… ${String(r)} characters omitted …\n${n}`},BT=async(e,t,n)=>{try{await W(e,`home`,async()=>{let r=await Pg(e);r.refs[t]={...r.refs[t],last_error:zT(n)},await Fg(e,r)})}catch{}},VT=e=>{let t=0,n=[];return{acquire:()=>{if(t<e)return t+=1,Promise.resolve();let{promise:r,resolve:i}=Promise.withResolvers();return n.push(()=>{t+=1,i()}),r},release:()=>{--t;let e=n.shift();e!==void 0&&e()}}},HT=async(e,t)=>{await e.acquire();try{return await t()}finally{e.release()}},UT=(e,t,n)=>`sync produced a HEAD sha for '${e}' at ${t} that refs cannot store yet (${n.length} hex chars) — only SHA-1 repositories are supported for now`,WT=(e,t,n)=>{if(!kg.shape.head_sha.safeParse(n).success)throw y(UT(e,t,n));return n},GT=(e,t,n)=>{let r={effectiveCloneMode:t.effectiveMode,headSha:n.headSha,status:`cloned`};return n.actualBranch!==e.ref.default_branch&&(r.branchRenamedTo=n.actualBranch),t.warning!==void 0&&(r.warning=t.warning),r},KT=async(e,t,n)=>{await a(ie(n),{recursive:!0});let r=jg(`clone_mode`,t.ref,t.settings),i=await Cd(e.runner,{cloneUrl:t.ref.url,dest:n,hooksDir:t.home.hooksDir,mode:r}),o=await Td(e.runner,n),s=await vy(e.runner,{allowFileUrls:qv(e.env),dest:n,expectedUrl:t.ref.url,hooksDir:t.home.hooksDir,key:t.key});return GT(t,i,{actualBranch:o,headSha:s})},qT=async(e,t,n)=>{await py(e.runner,{dest:n,hooksDir:t.home.hooksDir}),await dy(e.runner,{allowFileUrls:qv(e.env),dest:n,expectedUrl:t.ref.url});let r=await jd(e.runner,{defaultBranch:t.ref.default_branch,dir:n}),i={headSha:WT(t.key,n,r.newSha),previousSha:r.oldSha,status:r.status};return r.branchRenamedTo!==void 0&&(i.branchRenamedTo=r.branchRenamedTo),r.warning!==void 0&&(i.warning=r.warning),i},JT=(e,t,n)=>(iu(t.home,n),H(n)?qT(e,t,n):KT(e,t,n)),YT={changedDirs:[],kind:`arrivals`,namesBefore:[]},XT=async(e,t,n)=>{if(n.previousSha===void 0)return YT;let r=await dd(e.runner,{dir:t,from:n.previousSha,to:n.headSha});return r===void 0?YT:{...r,kind:`arrivals`}},ZT=(e,t)=>W(t.home,Kv(t.key),async()=>{let n=B(t.home,t.key),r=await JT(e,t,n),i=await XT(e,n,r);return{...r,structure:await gx(n,t.ref,i)}}),QT=e=>{let t=[];e.branchRenamedTo!==void 0&&t.push(`default branch renamed to ${e.branchRenamedTo}`),e.warning!==void 0&&t.push(e.warning);let[n]=t;if(n!==void 0)return t.join(` | `)},$T=(e,t)=>{let n={key:e,status:t.status},r=QT(t);return r!==void 0&&(n.warning=r),t.structure!==void 0&&(n.structure=t.structure),n},eE=async(e,t)=>{try{let n=await ZT(e,t);return await LT(t.home,t.key,n),n}catch(e){throw await BT(t.home,t.key,Cv(e)),e}},tE=async(e,t)=>{try{return $T(t.key,await eE(e,t))}catch(e){return{error:Cv(e),key:t.key,status:`failed`}}},nE=(e,t)=>e.status===`rejected`?{error:Cv(e.reason),key:t,status:`failed`}:e.value,rE=async(e,t)=>{let n=VT(4);return(await Promise.allSettled(t.map(t=>HT(n,()=>tE(e,t))))).map((e,n)=>{let r=t[n];if(r===void 0)throw Error(`internal: sync target at index ${n} is missing`);return nE(e,r.key)})},iE=async e=>{let{packageMatch:t}=e.match;return t===void 0?null:await hw({checkoutDir:e.dest,checkoutManaged:e.checkout.status===`managed`||e.checkout.status===`missing`,checkoutReason:`checkout is ${e.checkout.status}`,configuredPath:t.entry.path,home:e.home,key:e.match.key,packageName:t.name})},aE=(e,t,n)=>PT(t,n.query,{allowFileUrls:qv(e.env),...n.ref===void 0?{}:{ref:n.ref}}),oE=async(e,t)=>{let n=z(e.env),r=await V(n);return{config:r,home:n,match:aE(e,r,t),state:await Pg(n)}},sE=async(e,t)=>{if(t===void 0)return;let{packageMatch:n}=e;if(n===void 0)throw v(`--project needs a query that names a package; '${e.key}' resolves to the ref itself`);return await kw(t,n.name)},cE=(e,t)=>{if(e.status!==`managed`&&e.status!==`missing`)throw y(`refusing to sync ${t}: its checkout is ${e.status}${e.reason===void 0?``:` (${e.reason})`} — run: refs doctor`)},lE=async(e,t)=>(await eE(e,{home:t.home,key:t.match.key,ref:CS(t.config,t.match.key),settings:t.config.settings})).status,uE=async(e,t)=>{t.project!==void 0&&await Dw(t.project);let n=await oE(e,t),r=await fE(e,n,t);return t.syncIfStale!==!0||!(r.stale||r.missing)?r:(cE(r.checkout,r.key),await dE(e,{key:r.key,opts:t,target:n}))},dE=async(e,t)=>{let{key:n,opts:r}=t,i=await lE(e,t.target),a=await oE(e,r);if(a.match.key!==n)throw Ce(`configuration changed while resolving '${r.query}' — retry`);return{...await fE(e,a,r),sync:{status:i}}},fE=async(e,t,n)=>{let{config:r,home:i,match:a,state:o}=t,{now:s}=n,c=CS(r,a.key),l=B(i,a.key),u=ol(jg(`sync_ttl`,c,r.settings)),d=o.refs[a.key]?.last_fetched_at,f=await gT({allowFileUrls:qv(e.env),dest:l,expectedUrl:c.url,hooksDir:i.hooksDir,sourcesDir:i.sourcesDir}),p=await sE(a,n.project);return{checkout:f,key:a.key,...d===void 0?{}:{last_fetched_at:d},...p===void 0?{}:{installed:p},local_path:l,missing:f.status===`missing`,package:await iE({checkout:f,dest:l,home:i,match:a}),stale:DS(d,u,s)}},pE=(e,t)=>{let n=[`ref: ${e.key}`,`path: ${e.local_path}`,...AS({lastFetchedAt:e.last_fetched_at,missing:e.missing,now:t,stale:e.stale}),...e.checkout.status===`managed`||e.checkout.status===`missing`?[]:[`checkout: ${e.checkout.status}${e.checkout.reason===void 0?``:` (${e.checkout.reason})`}`]];return e.package!==null&&n.push(...gw(e.package)),e.sync!==void 0&&n.push(`sync: ${e.sync.status}`),e.installed!==void 0&&n.push(`installed: ${e.installed.version??`(${e.installed.status})`}`,...e.installed.name===void 0?[]:[`installed name: ${e.installed.name}`],...e.installed.reason===void 0?[]:[`installed reason: ${e.installed.reason}`]),n},mE=(e,t,n)=>({now:t,...n.project===void 0?{}:{project:n.project},query:e,...n.ref===void 0?{}:{ref:n.ref},...n.syncIfStale===!0?{syncIfStale:!0}:{}}),hE=(e,t)=>{e.command(`resolve`).description(`Resolve a git url, npm package name, import path, or ref-key suffix to its ref/package.`).argument(`<query>`,`git url, npm package name, import path, or unique ref-key suffix`).option(`--ref <ref>`,`resolve the query as a package within this ref (full key or unique suffix)`).option(`--project <dir>`,`report the version this project has installed of the query's package`).option(`--sync-if-stale`,`fetch or clone first when the ref is stale or its checkout is absent`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let r=Date.now(),a=await uE(t,mE(e,r,n));X(t,i,pE(a,r),a)})()})},gE={},_E=async(e,t)=>{if(!H(t))return{tags:[]};try{let{tags:n}=await Fd(e.runner,t,5);return{tags:n}}catch(e){return{tags:[],warning:`could not list tags: ${Cv(e)}`}}},vE=async(e,t,n,r)=>{let i=z(e.env),a=await V(i),o=RS(a,t),s=CS(a,o),c=await Pg(i),l=B(i,o),{packages:u,...d}=s,f=n.tags?await _E(e,l):void 0,p=c.refs[o]??gE;return{data:{...d,key:o,local_path:l,missing:!H(l),...n.packages?{packages:u??{}}:{},packages_count:Object.keys(u??{}).length,...f===void 0?{}:{sample_tags:f.tags},stale:DS(p.last_fetched_at,ol(jg(`sync_ttl`,s,a.settings)),r),state:p},warnings:Sv(f?.warning)}},yE=(e,t)=>{let n=[`ref: ${e.key}`,`description: ${e.description}`,`url: ${e.url}`,`path: ${e.local_path}`,...AS({lastFetchedAt:e.state.last_fetched_at,missing:e.missing,now:t,stale:e.stale})];return e.sample_tags!==void 0&&e.sample_tags.length>0&&n.push(`tags: ${e.sample_tags.join(`, `)}`),n},bE=(e,t)=>{e.command(`show`).description(`Show a configured ref: entry, state, local path, package count; --packages/--tags add the package map and sample tags to --json.`).argument(`<ref>`,`full ref key or a unique suffix, e.g. zod`).option(`--packages`,`include the ref's full package map in --json output (off by default)`).option(`--tags`,`include sample tags in --json output (human output always probes for them)`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let r={packages:n.packages===!0,tags:!i.json||n.tags===!0},a=Date.now(),{data:o,warnings:s}=await vE(t,e,r,a);X(t,i,yE(o,a),o,s)})()})},xE=(e,t,n)=>({home:e,key:n,ref:CS(t,n),settings:t.settings}),SE=(e,t,n)=>n.length===0?Object.keys(t.refs).toSorted().map(n=>xE(e,t,il.parse(n))):n.map(n=>xE(e,t,RS(t,n))),CE=(e,t,n)=>{let r=Date.now();return t.filter(t=>{let i=ol(jg(`sync_ttl`,t.ref,t.settings)),a=DS(n.refs[t.key]?.last_fetched_at,i,r),o=!H(B(e,t.key));return a||o})},wE=async(e,t,n)=>{if(!e_({env:e.env,updates:n.updates}))return[];let{latest:r,refreshed:i}=await Kg({fetch:e.fetcher,home:t,nowMs:Date.now()});return!i||r===void 0||!qg(e.cliVersion,r)?[]:[Jg(e.cliVersion,r)]},TE=async(e,t,n)=>{if(!n)return t;let r=await Pg(e);return CE(e,t,r)},EE=async(e,t)=>{let n=z(e.env),r=await V(n),i=SE(n,r,t.refs),a=await TE(n,i,t.staleOnly),[o,s]=await Promise.all([rE(e,a),a.length>0?wE(e,n,r):Promise.resolve([])]);return{failedCount:o.filter(e=>e.status===`failed`).length,results:o,warnings:s}},DE=[`updated`,`fresh`,`cloned`,`restored`,`failed`],OE={cloned:`Cloned`,failed:`Failed`,fresh:`Fresh`,restored:`Restored`,updated:`Updated`},kE=e=>{let t={cloned:[],failed:[],fresh:[],restored:[],updated:[]};for(let n of e)t[n.status].push(n);return t},AE=e=>{if(e.status===`failed`)return[` ${e.key}: ${e.error??`unknown error`}`];let t=e.warning===void 0?` ${e.key}`:` ${e.key} (${e.warning})`;return e.structure===void 0?[t]:[t,...qb(e.structure,e.key).map(e=>` ${e}`)]},jE=e=>{let t=kE(e),n=[DE.map(e=>`${OE[e]} (${t[e].length})`).join(` / `)];for(let e of DE)for(let r of t[e])n.push(...AE(r));return n},ME=(e,t)=>({refs:e,staleOnly:t.staleOnly===!0}),NE=(e,t)=>{e.command(`sync`).description(`Fetch (or re-clone, if the checkout is missing) configured refs — all by default.`).argument(`[refs...]`,`ref keys or unique suffixes to sync (default: every configured ref)`).option(`--stale-only`,`skip refs whose last sync is still within their ref's sync_ttl`).action((e,n,r)=>{let i=Y(r);return Z(t,i,async()=>{let r=await EE(t,ME(e,n));X(t,i,jE(r.results),{results:r.results},r.warnings),r.failedCount>0&&(process.exitCode=Se.UNEXPECTED)})()})},PE=(e,t,n)=>n===void 0?e.tag_format:TS(e,t,n).tag_format??e.tag_format,FE=(e,t,n)=>{if(e!==void 0)return e;let r=n===void 0?`ref '${t}'`:`package '${n}'`,i=n===void 0?[]:[`--package=${Q(n)}`];throw y(`${r} has no tag_format configured — inspect the repository's real tags and set one with: ${Ev(i,[t,`tag_format`,`<format>`])}`)},IE=async(e,t)=>{let n=z(e.env),r=await V(n),i=RS(r,t.query),a=CS(r,i),o=FE(PE(a,i,t.opts.packageName),i,t.opts.packageName),s=B(n,i);wS(s,i);let c=await qd(e.runner,s,o,t.version);return{key:i,ref_path:`refs/tags/${c}`,tag:c,version:t.version}},LE=e=>[`${e.key}@${e.version} -> ${e.tag}`],RE=e=>{let t={};return e.package!==void 0&&(t.packageName=e.package),t},zE=[JC,nb,UC,zS,SS,ZC,lw,hE,bE,NE,(e,t)=>{e.command(`tag`).description(`Resolve a version to its git tag, via the ref's (or a package's) tag_format.`).argument(`<ref>`,`full ref key or a unique suffix, e.g. zod`).argument(`<version>`,`version to resolve, e.g. 4.1.0`).option(`--package <name>`,`resolve against this package's tag_format instead of the ref's`).action((e,n,r,i)=>{let a=Y(i);return Z(t,a,async()=>{let i=await IE(t,{opts:RE(r),query:e,version:n});X(t,a,LE(i),i)})()})}],BE=(e,t)=>{for(let n of zE)n(e,t)},VE=[``,`Examples:`,` $ refs list --json`,` $ refs sync --stale-only --json`,` $ refs resolve zod/mini --json`,``,`Every command accepts --json for structured output and --verbose for stack traces on error.`].join(`
356
+ `),HE=new Set([`commander.help`,`commander.helpDisplayed`,`commander.version`]),UE=`--json`,WE=`--verbose`,GE=/\n$/u,KE=/^error: /u,qE=e=>e.replace(KE,``),JE=(e,t)=>{for(let n of e){if(n===`--`)return!1;if(n===t)return!0}return!1},YE=e=>JE(e,UE),XE=e=>JE(e,WE),ZE=(e,t,n)=>n&&t!==void 0?`${e}\n${t}`:e,QE=e=>{let t=new _v().name(`refs`).description(`Manage git-based reference checkouts shared across a workspace.`).version(nv).option(UE,`emit machine-readable JSON on stdout instead of human-readable text`).option(WE,`include stack traces in error output`).allowExcessArguments(!1).exitOverride().configureOutput({outputError:()=>{},writeErr:t=>{e.errLine(t.replace(GE,``))},writeOut:t=>{e.out(t.replace(GE,``))}});return t.addHelpText(`after`,VE),BE(t,e),t},$E=()=>{process.exitCode=Se.OK},eD=(e,t,n)=>{let r={code:`usage`,message:ZE(qE(n.message),n.stack,t.verbose)};wv(e,t,r),process.exitCode=Se.USAGE},tD=(e,t,n)=>{if(HE.has(n.code)){$E();return}eD(e,t,n)},nD=(e,t,n)=>{let r=Te(n,{verbose:t.verbose});wv(e,t,r),process.exitCode=r.exitCode},rD=async(e,t,n)=>{let r={json:YE(n),verbose:XE(n)};try{await t.parseAsync(n)}catch(t){if(t instanceof ov){tD(e,r,t);return}nD(e,r,t)}},iD=(e,t)=>rD(e,QE(e),t);import.meta.main&&await iD(av(),process.argv);export{QE as buildProgram,Y as cliOptsOf,X as emit,wv as emitError,Cv as errorMessageOf,Tv as progress,av as realContext,BE as registerCommands,iD as run,rD as runProgram,Sv as warningsFor,Z as wrapAction};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kaisers-io/refs",
3
- "version": "0.14.0",
3
+ "version": "0.15.0",
4
4
  "description": "Gives coding agents the real source of your dependencies, not a guess.",
5
5
  "keywords": [
6
6
  "ai",