quantex-cli 1.11.2 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/README.md +3 -3
  2. package/README.zh-CN.md +3 -3
  3. package/dist/agent-inspection-2y2K-DCH.mjs +1 -0
  4. package/dist/{agent-observation-CmpP7VL_.mjs → agent-observation-CmB6ofFL.mjs} +1 -1
  5. package/dist/agents-CESJI54l.mjs +1 -0
  6. package/dist/{agents-Caewjqrg.mjs → agents-iJvqIhMa.mjs} +1 -1
  7. package/dist/capabilities-CMnop3RC.mjs +1 -0
  8. package/dist/{capabilities-CThAG1Si.mjs → capabilities-DIRMPhTg.mjs} +1 -1
  9. package/dist/cli-operation-context-9ndzC1zq.mjs +1 -0
  10. package/dist/cli-read-projection-Cj1sCG7X.mjs +1 -0
  11. package/dist/cli.mjs +1 -1
  12. package/dist/commands-BPpo5qw8.mjs +1 -0
  13. package/dist/commands-BQuwJ1s0.mjs +3 -0
  14. package/dist/config-CW3EEuhm.mjs +3 -0
  15. package/dist/config-DzIZHWeq.mjs +1 -0
  16. package/dist/config-jsaRCEWF.mjs +1 -0
  17. package/dist/core-installation-cli-B-UNzCXn.mjs +1 -0
  18. package/dist/{detect-BUVMt8jZ.mjs → detect-Dou6fit1.mjs} +1 -1
  19. package/dist/doctor-CFLfa3z8.mjs +4 -0
  20. package/dist/ensure-BfY3mjy5.mjs +1 -0
  21. package/dist/ensure-CsRGwJHS.mjs +1 -0
  22. package/dist/errors-euUlFXri.mjs +1 -0
  23. package/dist/file-store-oHCTTnLn.mjs +2 -0
  24. package/dist/index.mjs +1 -1
  25. package/dist/info-DP2wtQYw.mjs +3 -0
  26. package/dist/inspect-DVgAp7qL.mjs +1 -0
  27. package/dist/inspect-OQUNwZEP.mjs +5 -0
  28. package/dist/install-D5IP8S3z.mjs +1 -0
  29. package/dist/{installation-compatibility-BnanRlky.mjs → installation-compatibility-BBIt-_Gy.mjs} +1 -1
  30. package/dist/installation-compatibility-CBA7XDvH.mjs +1 -0
  31. package/dist/{installation-executor-BHtW4ZTn.mjs → installation-executor-BS0GowyT.mjs} +1 -1
  32. package/dist/{installation-production-BBJukMkB.mjs → installation-production-Dy8XTuRy.mjs} +1 -1
  33. package/dist/{installation-provider-registry-Ca45gNu5.mjs → installation-provider-registry-CpJjzAO7.mjs} +1 -1
  34. package/dist/installation-routing-BhB6puwg.mjs +1 -0
  35. package/dist/installation-routing-D_8D3v0X.mjs +1 -0
  36. package/dist/lifecycle-observations-DIBfXLT1.mjs +1 -0
  37. package/dist/{lifecycle-policy-B5rqTthw.mjs → lifecycle-policy-0Wodv3-H.mjs} +1 -1
  38. package/dist/{list-Bb7xNAel.mjs → list-aak6ch3E.mjs} +1 -1
  39. package/dist/{npm-DUDR-Khz.mjs → npm-PO9Nwgt_.mjs} +1 -1
  40. package/dist/output-CLgmLN2q.mjs +5 -0
  41. package/dist/package-manager-uPteT1B0.mjs +1 -0
  42. package/dist/{production-observation-BOalSjcd.mjs → production-observation-CLYtqs1E.mjs} +1 -1
  43. package/dist/{provider-binding-BmBPz4YE.mjs → provider-binding-DB7IXxJp.mjs} +1 -1
  44. package/dist/{provider-evidence-ByRBnbzW.mjs → provider-evidence-AfeylhA4.mjs} +1 -1
  45. package/dist/{provider-observations-DASRzaj3.mjs → provider-observations-CY8vphIo.mjs} +1 -1
  46. package/dist/{providers-CMuU0Elu.mjs → providers-CjFAR4Vt.mjs} +1 -1
  47. package/dist/resolve-BihHZ39p.mjs +1 -0
  48. package/dist/resolve-Cf5ZZLZM.mjs +1 -0
  49. package/dist/schema-DxgWH0za.mjs +1 -0
  50. package/dist/{schema-BhMOO-QU.mjs → schema-rHlg-voJ.mjs} +1 -1
  51. package/dist/uninstall-USu8oluL.mjs +1 -0
  52. package/dist/unmanaged-install-compatibility-KGtKiyzS.mjs +1 -0
  53. package/dist/update-aRYrYbRj.mjs +1 -0
  54. package/dist/{upgrade-Bfnj72Gp.mjs → upgrade-CI-MZFjs.mjs} +1 -1
  55. package/dist/version-cache-BPRXYft0.mjs +1 -0
  56. package/dist/{winget-C8yBIi3u.mjs → winget-BA9H6Ve-.mjs} +1 -1
  57. package/package.json +1 -1
  58. package/dist/agent-installation-sRbwS1dk.mjs +0 -1
  59. package/dist/agents-aJwt-ODK.mjs +0 -1
  60. package/dist/capabilities-DJWAHfR0.mjs +0 -1
  61. package/dist/cli-operation-context-yd4c0OQH.mjs +0 -1
  62. package/dist/commands-BJjmzz_A.mjs +0 -3
  63. package/dist/commands-CL5a3fZy.mjs +0 -1
  64. package/dist/config-BNZPEYqW.mjs +0 -3
  65. package/dist/core-installation-cli-COYAy55w.mjs +0 -1
  66. package/dist/core-read-observations-BHbMkcGV.mjs +0 -1
  67. package/dist/doctor-D5PV1TbG.mjs +0 -4
  68. package/dist/ensure-BNQhG8iC.mjs +0 -1
  69. package/dist/ensure-D1TP3y6h.mjs +0 -1
  70. package/dist/errors-BsSS_i9A.mjs +0 -1
  71. package/dist/file-store-XNyirRRY.mjs +0 -2
  72. package/dist/info-JhNNgM-i.mjs +0 -3
  73. package/dist/inspect-CD-3DSkb.mjs +0 -1
  74. package/dist/inspect-DhGE_G13.mjs +0 -5
  75. package/dist/install-DiyyJCgV.mjs +0 -1
  76. package/dist/installation-routing-B1snz7YR.mjs +0 -1
  77. package/dist/installation-routing-n62Du1fV.mjs +0 -1
  78. package/dist/lifecycle-observations-CqYFJfMT.mjs +0 -1
  79. package/dist/output-BRIAY0Oa.mjs +0 -5
  80. package/dist/resolve-NvqD19LV.mjs +0 -1
  81. package/dist/resolve-kcE_XhB3.mjs +0 -1
  82. package/dist/schema-31zl9J9y.mjs +0 -1
  83. package/dist/uninstall-Df2Y_ygk.mjs +0 -1
  84. package/dist/unmanaged-install-compatibility-BJBsLVDL.mjs +0 -1
  85. package/dist/update-RJNar2D3.mjs +0 -1
  86. package/dist/version-cache-jjIoeyWQ.mjs +0 -1
  87. /package/dist/{cli-operation-context-BS5a069W.mjs → cli-operation-context-CzjG_eom.mjs} +0 -0
  88. /package/dist/{color-iQl4CJwm.mjs → color-CLDVRyIs.mjs} +0 -0
  89. /package/dist/{errors-fT9JApTf.mjs → errors-CISYuFuT.mjs} +0 -0
  90. /package/dist/{human-BL2-F6cA.mjs → human-BbO37wBs.mjs} +0 -0
  91. /package/dist/{installation-failure-diagnostics-BJnxrzTa.mjs → installation-failure-diagnostics-DjaKNCw3.mjs} +0 -0
  92. /package/dist/{invocation-DXH0mQUH.mjs → invocation-DDozaggZ.mjs} +0 -0
  93. /package/dist/{lifecycle-errors-BtlAp_sz.mjs → lifecycle-errors-Elpn7QSu.mjs} +0 -0
  94. /package/dist/{mutation-recipe-catalog-DfkeFj0q.mjs → mutation-recipe-catalog-COCTDfME.mjs} +0 -0
  95. /package/dist/{provider-observation-registry-DRRQKxkl.mjs → provider-observation-registry-CgFXbZHd.mjs} +0 -0
  96. /package/dist/{types-D0YMPN5w.mjs → types-DAYz9yrG.mjs} +0 -0
  97. /package/dist/{user-output-DLbKXqDm.mjs → user-output-c8fjdhfk.mjs} +0 -0
@@ -0,0 +1 @@
1
+ import{a as e}from"./file-store-oHCTTnLn.mjs";import{n as t}from"./detect-Dou6fit1.mjs";import{n}from"./agents-iJvqIhMa.mjs";import{n as r}from"./cli-context-DI43ouBg.mjs";import{A as i,D as a,O as o,S as s,i as c,j as l,n as u,t as d,x as f}from"./output-CLgmLN2q.mjs";import{m as p}from"./providers-CjFAR4Vt.mjs";import{t as m}from"./color-CLDVRyIs.mjs";import{l as h,o as g}from"./package-manager-uPteT1B0.mjs";import{a as _,o as v,t as y}from"./provider-binding-DB7IXxJp.mjs";import{t as b}from"./provider-evidence-AfeylhA4.mjs";import{a as x,i as S,n as C,r as w}from"./user-output-c8fjdhfk.mjs";import{n as T,r as E}from"./installation-routing-BhB6puwg.mjs";import{t as D}from"./lifecycle-errors-Elpn7QSu.mjs";const O=e=>new Promise(t=>setTimeout(t,e));async function k(e,t={}){let n=Math.max(1,t.attempts??6),r=t.delay??O,i=Math.max(0,t.delayMs??100);for(let a=0;a<n;a+=1){if(t.signal?.aborted||t.isCancelled?.())return!1;let o=await e();if(t.signal?.aborted||t.isCancelled?.())return!1;if(o)return!0;a+1<n&&await r(i)}return!1}async function A(t,n=M()){let r=n.resolveAgent(t.name);if(!r)return{agent:N(t.name),kind:`agent-not-found`,name:t.name};try{return await n.withMutationLock(async()=>j(r,t.name,n))}catch(t){if(e(t))return{agent:r,kind:`locked`,lock:t};throw t}}async function j(e,t,n){let[r,i]=await Promise.all([n.readInstalledState(e.name),n.readReceipt(e.name)]);if(!r&&!i)return{agent:e,kind:`unmanaged`,name:t};let a=await n.isBinaryInPath(e.binaryName),o=r?v(e,r):void 0,s=i?_(i):void 0;if(r&&!o||i&&!s)return{agent:e,kind:`failed`,lifecycle:`indeterminate-source`,message:`Cannot resolve provider evidence for ${e.displayName}.`};if(o&&s&&!y(o,s,e.binaryName))return{agent:e,kind:`failed`,lifecycle:`conflicting-source`,message:`Recorded sources disagree for ${e.displayName}.`};let c=o??s,l=await n.observeProvider(c);if(l.kind!==`success`)return{agent:e,kind:`failed`,lifecycle:`indeterminate-source`,message:`Cannot verify provider state for ${e.displayName}.`};if(l.value.kind===`absent`)return a?{agent:e,kind:`failed`,lifecycle:`conflicting-source`,message:`${e.displayName} is on PATH but its recorded provider target is absent.`}:n.dryRun?{action:`would reconcile stale lifecycle evidence`,agent:e,kind:`dry-run`}:(r&&await n.removeInstalledState(e.name),i&&await n.removeReceipt(e.name),{agent:e,kind:`ghost-reconciled`});if(!r)return{agent:e,kind:`failed`,lifecycle:`indeterminate-source`,message:`Cannot safely reconstruct ${e.displayName}'s uninstall source.`};if(n.dryRun)return{action:`would uninstall ${e.displayName}`,agent:e,kind:`dry-run`};if(!p(r.installType))return(await n.uninstallInstalled(e,r)).kind===`success`?(await n.removeReceipt(e.name),{agent:e,changed:!0,kind:`uninstalled`}):{agent:e,kind:`failed`,lifecycle:`provider-failure`,message:`Failed to uninstall ${e.displayName}.`};if(i||await n.setReceipt({...c.target.binaryName?{executableName:c.target.binaryName}:{},kind:`lifecycle-receipt`,providerId:c.providerId,providerTargetId:c.target.id,providerTargetKind:c.target.kind,schemaVersion:1,targetId:e.name,verifiedAt:new Date().toISOString(),...l.value.executablePath?{executablePath:l.value.executablePath}:{},...l.value.version?{version:l.value.version}:{}}),(await n.uninstallInstalled(e,r)).kind!==`success`)return{agent:e,kind:`failed`,lifecycle:`provider-failure`,message:`Failed to uninstall ${e.displayName}.`};if(!await k(async()=>{let t=await n.observeProvider(c);return t.kind!==`success`||t.value.kind!==`absent`?!1:!await n.isBinaryInPath(e.binaryName)},{isCancelled:n.isCancelled})){let t=await n.observeProvider(c);return t.kind===`success`&&t.value.kind===`absent`?(await n.removeReceipt(e.name),{agent:e,kind:`failed`,lifecycle:`conflicting-source`,message:`${e.displayName}'s managed package was removed, but another copy remains on PATH.`}):(await n.setInstalledState(r),{agent:e,kind:`failed`,lifecycle:`verification-failed`,message:`${e.displayName} is still present after provider removal.`})}return await n.removeReceipt(e.name),{agent:e,changed:!0,kind:`uninstalled`}}function M(e={}){let r=e.signal;return{dryRun:e.dryRun??!1,isBinaryInPath:t,isCancelled:e.isCancelled??(()=>!!r?.aborted),observeProvider:t=>b(t,{signal:r??new AbortController().signal,timeoutMs:e.timeoutMs}),readInstalledState:f,readReceipt:s,removeInstalledState:a,removeReceipt:o,resolveAgent:n,setInstalledState:i,setReceipt:l,signal:r,timeoutMs:e.timeoutMs,uninstallInstalled:g,withMutationLock:h}}function N(e){return{binaryName:e,displayName:e,homepage:``,name:e,platforms:{}}}function P(e={}){let t=e.loadPorts??(e=>M({dryRun:e.dryRun,isCancelled:e.isCancelled,signal:e.signal,timeoutMs:e.timeoutMs}));return Object.freeze({execute(e){return A({name:e.name},t(e))}})}async function F(e){return await I(e,E(`uninstall`))}async function I(e,t){T(`uninstall`,t);let n=r(),i=new AbortController;return n.cancelled&&i.abort(`cli-cancelled`),c(L(await P().execute({dryRun:C(),isCancelled:()=>!!n.cancelled||i.signal.aborted,name:e,signal:i.signal,timeoutMs:n.timeoutMs}),e),R)}function L(e,t){switch(e.kind){case`agent-not-found`:return d({action:`uninstall`,error:{code:`AGENT_NOT_FOUND`,details:{input:t},message:`Unknown agent: ${t}`},target:{kind:`agent`,name:t}});case`unmanaged`:return d({action:`uninstall`,data:{agent:{displayName:e.agent.displayName,name:e.agent.name},changed:!1},error:{code:`UNINSTALL_UNMANAGED`,details:{canAutoUninstall:!1,displayName:e.agent.displayName,input:t,lifecycle:`unmanaged`,name:e.agent.name},message:`${e.agent.displayName} is not managed by qtx, so qtx cannot auto-uninstall it. Run qtx inspect ${e.agent.name} for details.`},target:{kind:`agent`,name:e.agent.name}});case`locked`:return d({action:`uninstall`,data:{agent:{displayName:e.agent.displayName,name:e.agent.name},changed:!1},...D(e.lock,{kind:`agent`,name:e.agent.name})});case`failed`:return d({action:`uninstall`,data:{agent:{displayName:e.agent.displayName,name:e.agent.name},changed:!1},error:{code:`UNINSTALL_FAILED`,details:{lifecycle:e.lifecycle},message:e.message},target:{kind:`agent`,name:e.agent.name}});case`dry-run`:return u({action:`uninstall`,data:{agent:{displayName:e.agent.displayName,name:e.agent.name},changed:!1},target:{kind:`agent`,name:e.agent.name},warnings:[{code:`DRY_RUN`,message:`Dry run: ${e.action}.`}]});case`ghost-reconciled`:return u({action:`uninstall`,data:{agent:{displayName:e.agent.displayName,name:e.agent.name},changed:!0},target:{kind:`agent`,name:e.agent.name},warnings:[{code:`GHOST_STATE_RECONCILED`,message:`${e.agent.displayName} was already absent; stale lifecycle evidence was removed.`}]});case`uninstalled`:return u({action:`uninstall`,data:{agent:{displayName:e.agent.displayName,name:e.agent.name},changed:!0},target:{kind:`agent`,name:e.agent.name}})}}function R(e){if(e.error){w(m.red(e.error.message));return}if(e.data){if(e.warnings&&e.warnings.length>0){for(let t of e.warnings)x(m.yellow(t.message));return}S(m.cyan(`Uninstalling ${e.data.agent.displayName}...`)),S(m.green(`${e.data.agent.displayName} uninstalled successfully!`))}}export{F as uninstallCommand};
@@ -0,0 +1 @@
1
+ import{n as e}from"./detect-Dou6fit1.mjs";import{l as t}from"./providers-CjFAR4Vt.mjs";import{n}from"./agents-CESJI54l.mjs";import{n as r}from"./lifecycle-observations-DIBfXLT1.mjs";async function i(i){let a=n(i);if(!a||!await e(a.binaryName))return;let o=await r(i);if(!(!o?.pathExecutable.present||o.installedState||o.receipt))return t(o.methods,o.resolvedBinaryPath??o.pathExecutable.path)?void 0:o.agent}export{i as t};
@@ -0,0 +1 @@
1
+ import{a as e,n as t,r as n,t as r}from"./messages-D6r2o7w-.mjs";import{g as i}from"./npm-PO9Nwgt_.mjs";import{a,c as o}from"./file-store-oHCTTnLn.mjs";import{t as s}from"./detect-Dou6fit1.mjs";import{R as c,r as l}from"./agents-iJvqIhMa.mjs";import{n as ee}from"./cli-context-DI43ouBg.mjs";import{a as te}from"./config-jsaRCEWF.mjs";import{E as u,Q as d,S as ne,T as f,et as re,i as p,n as m,r as h,t as g,x as _}from"./output-CLgmLN2q.mjs";import{f as v,r as ie}from"./providers-CjFAR4Vt.mjs";import{t as y}from"./cli-operation-context-CzjG_eom.mjs";import{t as b}from"./color-CLDVRyIs.mjs";import{l as x,r as S}from"./package-manager-uPteT1B0.mjs";import{n as C}from"./agents-CESJI54l.mjs";import{t as w}from"./update-planner-Cr9XVW1l.mjs";import{r as ae}from"./provider-binding-DB7IXxJp.mjs";import{t as oe}from"./agent-observation-CmB6ofFL.mjs";import{t as se}from"./lifecycle-observations-DIBfXLT1.mjs";import{a as T,i as E,n as D,r as O}from"./user-output-c8fjdhfk.mjs";import{n as ce,r as le}from"./installation-routing-BhB6puwg.mjs";import{i as ue,n as de,r as fe}from"./production-observation-CLYtqs1E.mjs";import{a as pe,c as me,l as he,r as ge,s as _e,u as k}from"./lifecycle-policy-0Wodv3-H.mjs";import{n as A}from"./installation-failure-diagnostics-DjaKNCw3.mjs";async function j(e){let t;for(let n of e.commands){let r=await i(n,e.context,`agent self-update failed`);if(r.kind===`success`)return{kind:`success`,value:{evidence:[{kind:`command`,value:n.join(` `)}],target:e.target}};if(r.kind===`cancelled`||r.kind===`timed-out`)return r;t=r}return t??{kind:`unsupported`,operation:`update`,reason:`No self-update command is configured.`}}async function M(e={}){let t=e.npmBunUpdateStrategy??(await import(`./config-DzIZHWeq.mjs`)).loadConfig().then(e=>e.npmBunUpdateStrategy);return N({...e,configDir:de(e.configDir),npmBunUpdateStrategy:typeof t==`string`?t:await t})}function N(e){let t=e.providerRegistry??c,n=e.signal??new AbortController().signal;return{clock:()=>new Date().toISOString(),dryRun:e.dryRun??!1,executeSelfUpdate:j,observe:r=>F(r,{providerRegistry:t,signal:n,timeoutMs:e.timeoutMs}),planLifecycleUpdate:w,providerRegistry:t,registerCleanup:e.registerCleanup,signal:n,timeoutMs:e.timeoutMs,updateOptions:{updateStrategy:e.npmBunUpdateStrategy},withMutationLock:x,writeReceipt:f.write,classifyMutationLockError:e=>a(e)?{reason:e.message,resource:e.resource}:void 0,listRegisteredAgentNames:e.listRegisteredAgentNames??(()=>ue().map(e=>e.name))}}function P(){return async()=>Object.keys((await u()).installedAgents)}async function F(e,t){let n=fe(e);if(!n)return;let r={signal:t.signal,...t.timeoutMs===void 0?{}:{timeoutMs:t.timeoutMs}},i,a=()=>(i??=_(n.name),i),o=await S(n);return I(n,o,await oe(n,{clock:()=>new Date().toISOString(),inspectExecutable:async()=>ve(n,r),platform:s(),preferredCatalogBinding:o[0]?ae(n,o[0]):void 0,providerRegistry:t.providerRegistry,readInstalledState:a,readReceipt:()=>ne(n.name),resolveExecutablePath:e=>d(e,r),signal:t.signal,timeoutMs:t.timeoutMs}))}function I(e,t,n){return{agent:{binaryName:e.binaryName,displayName:e.displayName,name:e.name,...e.packages?{packages:e.packages}:{},...e.selfUpdate?{selfUpdate:e.selfUpdate}:{}},...n.binding?{binding:n.binding}:{},capabilities:n.capabilities,executable:n.executable,...n.installedState?{installedState:n.installedState}:{},methods:[...t],observation:n.observation,...n.persistedBinding?{persistedBinding:n.persistedBinding}:{},...n.receipt?{receipt:n.receipt}:{}}}async function ve(e,t){let n=await o(e.binaryName,t);if(!n)return{present:!1};let r=await re(e.binaryName,e.versionProbe,t,n);return{path:await d(n,t)??n,present:!0,version:r}}function ye(e,t={}){let n=!1,r,i,a,o,s=()=>(a??=t.loadPorts?.()??M({configDir:t.configDir,dryRun:t.dryRun,registerCleanup:t.registerCleanup,signal:t.signal,timeoutMs:t.timeoutMs}),a);return{dispose(){n=!0},getOutcome:()=>r,async observe(e){if(n)throw Error(`Core update invocation has been disposed.`);return(await s()).observe(e)},prepare(){return n?Promise.reject(Error(`Core update invocation has been disposed.`)):(i??=s().then(t=>k(e,t)),i)},run(){return n?Promise.reject(Error(`Core update invocation has been disposed.`)):(o??=(async()=>{let e=await this.prepare();if(n)throw Error(`Core update invocation has been disposed.`);return r=e.kind===`planned`?await me(e.planned,await s()):e,r})(),o)}}}function be(e,t={}){let n=!1,r,i,a,o,s=()=>(a??=t.loadPorts?.()??M({configDir:t.configDir,dryRun:t.dryRun,listRegisteredAgentNames:e===`managed`?P():void 0,registerCleanup:t.registerCleanup,signal:t.signal,timeoutMs:t.timeoutMs}),a);return{dispose(){n=!0},getOutcome:()=>r,async observe(e){if(n)throw Error(`Core update batch invocation has been disposed.`);return(await s()).observe(e)},prepare(){return n?Promise.reject(Error(`Core update batch invocation has been disposed.`)):(i??=s().then(e=>he(e)),i)},run(){return n?Promise.reject(Error(`Core update batch invocation has been disposed.`)):(o??=(async()=>{let e=await this.prepare();if(n)throw Error(`Core update batch invocation has been disposed.`);return r=await _e(e,await s()),r})(),o)}}}async function L(){let e=R();try{return await e.run()}finally{e.dispose()}}function R(){return V(`all`,()=>l().map(e=>e.name))}function xe(){return V(`managed`,async()=>Object.keys((await u()).installedAgents))}async function z(e){let t=B(e);try{return await t.run()}finally{t.dispose()}}function B(e){return Se(e)}function Se(e){let t=y(),n=0,r=!1,i=!1,a=ye(e,H(t)),o=()=>{!r||i||n>0||(i=!0,t.dispose())},s=async e=>{if(r)throw Error(`Single-agent update invocation has been disposed.`);n+=1;try{return await t.run(e)}finally{--n,o()}};return{dispose(){r||(r=!0,a.dispose(),o())},getOutcome:()=>a.getOutcome(),observe(e){return s(()=>a.observe(e))},prepare(){return s(()=>a.prepare())},run(){return s(()=>a.run())}}}function V(e,t){let n=y(),r=0,i=!1,o=!1,s=be(e,{...H(n),loadPorts:async()=>({...await U(n),classifyMutationLockError:e=>a(e)?{reason:e.message,resource:e.resource}:void 0,listRegisteredAgentNames:t})}),c=()=>{!i||o||r>0||(o=!0,n.dispose())},l=async e=>{if(i)throw Error(`Lifecycle update batch invocation has been disposed.`);r+=1;try{return await n.run(e)}finally{--r,c()}};return{dispose(){i||(i=!0,s.dispose(),c())},getOutcome:()=>s.getOutcome(),observe(e){return l(()=>s.observe(e))},prepare(){return l(()=>s.prepare())},run(){return l(()=>s.run())}}}function H(e){return{dryRun:D(),loadPorts:()=>U(e),registerCleanup:e.context.registerCleanup,signal:e.context.signal,timeoutMs:e.context.timeoutMs}}async function U(e){let t=await te(),n=se(e.context);return{classifyMutationLockError:e=>a(e)?{reason:e.message,resource:e.resource}:void 0,clock:()=>new Date().toISOString(),dryRun:D(),executeSelfUpdate:j,listRegisteredAgentNames:()=>l().map(e=>e.name),observe:n.resolveAgentObservation,planLifecycleUpdate:w,providerRegistry:c,registerCleanup:e.context.registerCleanup,signal:e.context.signal,timeoutMs:e.context.timeoutMs,updateOptions:{updateStrategy:t.npmBunUpdateStrategy},withMutationLock:x,writeReceipt:f.write}}async function W(e,t,n={runBatch:L,runManagedBatch:L,runSingle:z},r=!1){if(ce(`update`,le(`update`)),r&&!t)return p(g({action:`update`,error:{code:`INVALID_ARGUMENT`,message:`The --managed option requires --all.`},target:{kind:`agent`}}),Q);if(t)return we(n,r?`managed`:`all`);if(!e)return p(g({action:`update`,error:{code:`INVALID_ARGUMENT`,message:`Please specify an agent name or use --all flag`},target:{kind:`agent`}}),Q);let i=C(e);return i?Te(i,n):p(g({action:`update`,error:{code:`AGENT_NOT_FOUND`,details:{input:e},message:`Unknown agent: ${e}`},target:{kind:`agent`,name:e}}),Q)}function Ce(e,t,n=!1){if(t){let t=n?xe():R();return{dispose:t.dispose,idempotencyPolicy:()=>ge(t),run:()=>W(e,!0,{runBatch:()=>t.run(),runManagedBatch:()=>t.run(),runSingle:z},n)}}if(!e)return{dispose(){},run:()=>W(e,t,void 0,n)};let r=B(e);return{dispose:r.dispose,idempotencyPolicy:()=>pe(e,r),run:()=>W(e,!1,{runBatch:L,runManagedBatch:L,runSingle:()=>r.run()},n)}}async function we(e,t){h({action:`update`,data:{scope:t},target:{kind:`agent`},type:`started`});let n=await(t===`managed`?(e.runManagedBatch??e.runBatch)():e.runBatch()),r=q(n),i=ke(n);return Ae(n)?p(g({action:`update`,data:{results:r,scope:t},error:{code:`CANCELLED`,message:`Update was cancelled before all agents could be updated.`},target:{kind:`agent`},warnings:i}),Q):r.some(e=>e.status===`failed`||e.status===`locked`)?p(g({action:`update`,data:{results:r,scope:t},error:{code:`UPDATE_FAILED`,message:`One or more agents failed to update.`},target:{kind:`agent`},warnings:i}),Q):p(m({action:`update`,data:{results:r,scope:t},target:{kind:`agent`},warnings:i}),Q)}async function Te(e,t){h({action:`update`,data:{agent:e.name,scope:`single`},target:{kind:`agent`,name:e.name},type:`started`});let n;try{n=await t.runSingle(e.name)}catch(t){if(!a(t))throw t;return p(g({action:`update`,data:{results:[{displayName:e.displayName,message:t.message,name:e.name,resource:t.resource,status:`locked`}],scope:`single`},error:{code:`RESOURCE_LOCKED`,details:{resource:t.resource},message:t.message},target:{kind:`agent`,name:e.name}}),Q)}let r=K(n);if(n.kind===`unknown-agent`)return p(g({action:`update`,error:{code:`AGENT_NOT_FOUND`,message:`Unknown agent: ${e.name}`},target:{kind:`agent`,name:e.name}}),Q);if(r?.observation.kind===`absent`){let t=r.observation.drift.kind===`recorded-absent`?[J(e)]:[];return p(g({action:`update`,error:{code:`AGENT_NOT_INSTALLED`,message:`${e.displayName} is not installed.`},target:{kind:`agent`,name:e.name},warnings:t}),Q)}let i=G(e,n);return Z([],i),n.kind===`cancelled`?p(g({action:`update`,data:{results:[i],scope:`single`},error:{code:`CANCELLED`,message:`Update of ${e.displayName} was cancelled.`},target:{kind:`agent`,name:e.name}}),Q):i.status===`failed`||i.status===`locked`?p(g({action:`update`,data:{results:[i],scope:`single`},error:{code:`UPDATE_FAILED`,message:`Failed to update ${e.displayName}.`},target:{kind:`agent`,name:e.name}}),Q):p(m({action:`update`,data:{results:[i],scope:`single`},target:{kind:`agent`,name:e.name},warnings:Ee(e,n)}),Q)}function Ee(e,t){if(t.kind!==`blocked`||t.category!==`superseded-package`)return[];let n=v(e,t.before.installedState);return n?[r(e,n)]:[]}function G(t,r){let i=K(r),a=`plan`in r?r.plan:void 0,o=i?.observation.kind===`present`?i.observation.version:void 0,s=Y(a),c=X(a)??i?.binding?.providerId;switch(r.kind){case`updated`:return{displayName:t.displayName,installedVersion:o,latestVersion:r.receipt.version??s,name:t.name,status:`updated`,strategy:c};case`up-to-date`:return{displayName:t.displayName,installedVersion:r.receipt.version??o,name:t.name,status:`up-to-date`,strategy:c};case`dry-run`:return{displayName:t.displayName,installedVersion:o,latestVersion:s,message:`Dry run: would update ${t.displayName}.`,name:t.name,status:`planned`,strategy:c};case`not-executed`:return r.plan.planning.decision===`up-to-date`?{displayName:t.displayName,installedVersion:o,latestVersion:s,name:t.name,status:`up-to-date`}:{displayName:t.displayName,installedVersion:o,latestVersion:s,message:n(t),name:t.name,status:`manual-required`};case`blocked`:return r.category===`untracked`?{displayName:t.displayName,installedVersion:o,message:e(t),name:t.name,status:`manual-required`}:r.category===`manual-required`?{displayName:t.displayName,installedVersion:o,message:n(t),name:t.name,status:`manual-required`}:r.category===`superseded-package`?{displayName:t.displayName,installedVersion:o,message:r.reason,name:t.name,status:`manual-required`}:{displayName:t.displayName,installedVersion:o,message:r.reason,name:t.name,status:`failed`};case`cancelled`:return{displayName:t.displayName,installedVersion:o,latestVersion:s,message:r.reason??`Update was cancelled before it could complete.`,name:t.name,status:`failed`,strategy:c};case`timed-out`:return{displayName:t.displayName,installedVersion:o,latestVersion:s,message:`Update timed out after ${r.timeoutMs}ms.`,name:t.name,status:`failed`,strategy:c};case`provider-failed`:return{displayName:t.displayName,installedVersion:o,latestVersion:s,name:t.name,status:`failed`,strategy:c};case`verification-failed`:case`receipt-failed`:return{displayName:t.displayName,installedVersion:o,latestVersion:s,message:r.kind===`receipt-failed`?r.reason:r.verification.reason,name:t.name,status:`failed`,strategy:c};case`unknown-agent`:return{displayName:t.displayName,name:t.name,status:`failed`}}}function K(e){if(`plan`in e)return e.plan.before;if(`before`in e)return e.before}function q(e){let t=new Map(e.results.map(e=>[e.id,e])),n=new Map(e.cancellationRemainder.map(e=>[e.id,e])),r=[];for(let i of e.plan.targets){let e=t.get(i.id),a=n.get(i.id);if(e){let t=De(e);t&&Z(r,t)}else a&&Z(r,Oe(a))}return r}function De(e){let n=e.planning.kind===`unknown-agent`?void 0:e.planning.kind===`planned`?e.planning.planned.before:e.planning.before,r=C(e.agentName);if(!r)return{displayName:n?.agent.displayName??e.agentName,name:e.agentName,status:`failed`};let i=e.execution;if(e.planning.kind===`blocked`&&e.planning.category===`stale-state`)return;if(i?.kind===`locked`)return{displayName:r.displayName,installedVersion:i.plan.before.observation.kind===`present`?i.plan.before.observation.version:void 0,latestVersion:Y(i.plan),message:i.reason,name:r.name,resource:i.resource,status:`locked`,strategy:X(i.plan)};if(i?.kind===`unexpected-failure`)return{displayName:r.displayName,installedVersion:i.plan.before.observation.kind===`present`?i.plan.before.observation.version:void 0,latestVersion:Y(i.plan),message:i.reason,name:r.name,status:`failed`,strategy:X(i.plan)};let a=i??(e.planning.kind===`planned`?{kind:`not-executed`,plan:e.planning.planned}:e.planning),o=G(r,a);return o.status===`failed`&&a.kind===`provider-failed`&&(o.hint=t(r,ie({agent:r,installedState:n?.installedState,methods:[...n?.methods??[]]}))),o}function Oe(e){let t=C(e.agentName),n=e.planning.planned.before;return{displayName:t?.displayName??n.agent.displayName,installedVersion:n.observation.kind===`present`?n.observation.version:void 0,latestVersion:Y(e.planning.planned),message:e.reason??`Update was cancelled before it could start.`,name:t?.name??e.agentName,status:`failed`,strategy:X(e.planning.planned)}}function ke(e){return e.plan.targets.flatMap(e=>{if(e.outcome.kind!==`blocked`)return[];let t=C(e.agentName)??e.outcome.before.agent;if(e.outcome.category===`stale-state`)return[J(t)];if(e.outcome.category===`superseded-package`){let n=v(t,e.outcome.before.installedState);return n?[r(t,n)]:[]}return[]})}function J(e){return{code:`AGENT_STALE_STATE`,details:{agentName:e.name,suggestedAction:`reconcile-agent-state`,suggestedCommands:[`quantex uninstall ${e.name}`]},message:`${e.displayName} is not installed but has stale lifecycle evidence. Run \`quantex uninstall ${e.name}\` to reconcile it.`}}function Y(e){return e?.strategy===`managed-provider`?e.plannedTargetVersion:void 0}function X(e){if(e)return e.strategy===`self-update`?`self-update`:`managed/${e.binding.providerId}`}function Ae(e){return ee().cancelled||e.cancellationRemainder.length>0||e.results.some(e=>e.planning.kind===`cancelled`||e.execution?.kind===`cancelled`)}function Z(e,t){e.push(t),h({action:`update`,data:t,target:{kind:`agent`,name:t.name},type:`progress`})}function Q(e){if(!e.data){e.error&&O(b.red(e.error.message));return}for(let t of e.warnings)T(b.yellow(t.message));for(let t of e.data.results)switch(t.status){case`up-to-date`:E(b.green(`${t.displayName} is up to date (${t.installedVersion??`unknown`})`));break;case`manual-required`:T(b.yellow(`${t.displayName}: manual action required.`)),t.message&&T(b.cyan(`Next step: ${t.message}`));break;case`planned`:T(b.cyan(`Would update ${t.displayName}${t.strategy?` via ${t.strategy}`:``}${$(t.installedVersion,t.latestVersion)}`));break;case`updated`:E(b.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${$(t.installedVersion,t.latestVersion)}`)),E(b.green(`${t.displayName} updated successfully!`));break;case`failed`:E(b.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${$(t.installedVersion,t.latestVersion)}`)),O(b.red(A(`Failed to update ${t.displayName}.`,t.message))),t.hint&&T(b.cyan(`Next step: ${t.hint}`));break;case`locked`:T(b.yellow(t.message??`Another quantex process is already updating ${t.displayName}.`));break}e.data.results.length>1&&je(e.data.results),!e.data.results.length&&e.error&&O(b.red(e.error.message))}function $(e,t){return e?` (${e} -> ${t??`latest`})`:``}function je(e){let t={failed:0,locked:0,manualRequired:0,planned:0,upToDate:0,updated:0};for(let n of e)switch(n.status){case`up-to-date`:t.upToDate+=1;break;case`manual-required`:t.manualRequired+=1;break;case`planned`:t.planned+=1;break;case`updated`:t.updated+=1;break;case`failed`:t.failed+=1;break;case`locked`:t.locked+=1;break}let n=[t.updated?`updated ${t.updated}`:void 0,t.upToDate?`up to date ${t.upToDate}`:void 0,t.manualRequired?`manual ${t.manualRequired}`:void 0,t.failed?`failed ${t.failed}`:void 0,t.locked?`locked ${t.locked}`:void 0,t.planned?`planned ${t.planned}`:void 0].filter(Boolean);n.length>0&&E(b.bold(`Summary: ${n.join(`, `)}`))}export{Ce as createUpdateCommandInvocation};
@@ -1 +1 @@
1
- import{c as e,o as t,t as n}from"./child-process-DzIdysOm.mjs";import{s as r}from"./schema-BBnWVY6R.mjs";import{i,n as a}from"./cli-context-DI43ouBg.mjs";import{c as o,d as s,f as c,i as l,m as u,n as d,t as f,u as p,y as m}from"./output-BRIAY0Oa.mjs";import{t as h}from"./color-iQl4CJwm.mjs";import{a as g,i as _,n as v,r as y}from"./user-output-DLbKXqDm.mjs";import{n as b,t as x}from"./version-cache-jjIoeyWQ.mjs";const S={platform:process.platform,spawn:(e,n)=>t(e,{...n,stdio:n.stdio?[...n.stdio]:void 0}),terminate:e,writeStderr:e=>{process.stderr.write(e)}};function C(e=S){let t=b(e);return{run:e=>t.run({...e,forwardPipedOutput:e.forwardPipedOutput??!1})}}const w={fetch:globalThis.fetch.bind(globalThis)};function T(e=w){return{async request(t){if(t.signal.aborted)return E(t.signal);let n=new AbortController,r,i,a=!1,o=new Promise(e=>i=e),s=e=>{a||(a=!0,n.abort(),i(e))},c=()=>s(E(t.signal));t.signal.addEventListener(`abort`,c,{once:!0}),t.signal.aborted&&c(),t.timeoutMs!==void 0&&(r=setTimeout(()=>s(D(`timed-out`,`Network request timed out after ${t.timeoutMs}ms.`)),t.timeoutMs));let l=Promise.resolve().then(async()=>{let r=await e.fetch(t.url,{body:t.body,headers:t.headers,method:t.method,signal:n.signal}),i={};return r.headers.forEach((e,t)=>i[t.toLowerCase()]=e),{kind:`success`,value:{body:new Uint8Array(await r.arrayBuffer()),headers:i,status:r.status}}}).catch(e=>t.signal.aborted?E(t.signal):n.signal.aborted&&t.timeoutMs!==void 0?D(`timed-out`,`Network request timed out after ${t.timeoutMs}ms.`):D(`failed`,e instanceof Error?e.message:`Network request failed.`));try{return await Promise.race([l,o])}finally{a=!0,r&&clearTimeout(r),t.signal.removeEventListener(`abort`,c)}}}}function E(e){return D(`cancelled`,e.reason instanceof Error?e.reason.message:String(e.reason??`Network request was cancelled.`))}function D(e,t){return{error:{kind:e,message:t},kind:`failure`}}function O(e){let t=new AbortController,n=new Set,r=Object.freeze({cacheMode:e.cacheMode??`default`,dryRun:e.dryRun??!1,outputMode:e.outputMode??`human`,quiet:e.quiet??!1,timeoutMs:e.timeoutMs}),i=Object.freeze({...e.ports}),a;return{options:r,ports:i,signal:t.signal,cancel(e){if(a)return a;let r;a=new Promise(e=>{r=e}),t.abort(e);let i=[...n];return n.clear(),Promise.allSettled(i.map(t=>Promise.resolve().then(()=>t(e)))).then(()=>r()),a},onCancel(e){return t.signal.aborted?()=>void 0:(n.add(e),()=>{n.delete(e)})}}}async function k(e,t,n){if(t.signal.aborted)return A();let r=await n.plan({context:{signal:t.signal,timeoutMs:t.options.timeoutMs},metadataCache:t.ports.cache,metadataCacheMode:t.options.cacheMode===`no-cache`?`no-cache`:`refresh`,networkPort:t.ports.network,persistencePort:t.ports.persistence,updateChannel:e.updateChannel});return t.signal.aborted?A(r):e.check||e.dryRun||r.status!==`update-available`?{kind:`planned`,plan:r}:{kind:`executed`,plan:r,result:await n.upgrade(r,{lockPort:t.ports.locks,networkPort:t.ports.network,processPort:t.ports.process,signal:t.signal,stdio:t.options.outputMode===`human`?[`inherit`,`inherit`,`inherit`]:[`ignore`,`pipe`,`pipe`],timeoutMs:t.options.timeoutMs})}}function A(e){return{error:{kind:`cancelled`,message:`Self-upgrade invocation was cancelled.`},kind:`interrupted`,...e?{plan:e}:{}}}function j(){let e=a(),t=O({cacheMode:e.cacheMode,dryRun:e.dryRun,outputMode:e.outputMode,ports:M(),quiet:e.quiet,timeoutMs:e.timeoutMs});e.cancelled&&t.cancel(`cancelled`);let n=i(()=>t.cancel(`cancelled`)),r=!1,s={plan:e=>c({context:e.context,metadataCache:e.metadataCache,metadataCacheMode:e.metadataCacheMode,networkPort:e.networkPort,persistencePort:e.persistencePort,updateChannel:e.updateChannel}),upgrade:(e,t)=>o(e,t)};return{dispose(){r||(r=!0,n())},run:e=>k(e,t,s)}}function M(){return{cache:x(),clock:{now:Date.now,sleep:N},fileSystem:{makeDirectory:N,readFile:N,remove:N,rename:N,writeFile:N},locks:u(),network:T(),persistence:m(),process:C()}}async function N(){return{error:{kind:`unavailable`,message:`Runtime port is not bound for this self-upgrade operation.`},kind:`failure`}}function P(e){if(e===`stable`||e===`beta`)return e}async function F(e={}){let t=v(),r=j(),i=await r.run({check:e.check??!1,dryRun:t,updateChannel:e.channel}).finally(()=>r.dispose());if(i.kind===`interrupted`)throw new n({kind:`cancelled`,reason:i.error.message});let a=i.plan,o=s(a),c=L(o),u=z(o);if(a.status===`up-to-date`)return l(d({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,status:`up-to-date`},target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[]]}),I);if(e.check||t)return a.status===`update-available`?l(d({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,status:`update-available`},exitCode:e.check?1:void 0,target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[],...t?[{code:`DRY_RUN`,message:`Dry run: would upgrade Quantex CLI.`}]:[]]}),I):l(f({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,status:`check-unavailable`},error:{code:`NETWORK_ERROR`,message:`Unable to determine the latest Quantex CLI version.`},target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[]]}),I);if(a.status===`manual-required`){let e=p(o);return l(f({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,recoveryHint:e,status:`manual-required`},error:{code:`MANUAL_ACTION_REQUIRED`,message:`Quantex CLI cannot auto-update from the current install source: ${o.installSource}.`},target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[]]}),I)}if(i.kind!==`executed`)throw Error(`Self-upgrade execution did not produce a result.`);let m=i.result;if(m.success)return l(d({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,status:`updated`},target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[]]}),I);let h=p(o,m);return l(f({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,recoveryHint:h,status:`manual-required`},error:{code:`UPGRADE_FAILED`,details:m.error?.kind?{kind:m.error.kind}:void 0,message:m.error?.message??`Failed to upgrade Quantex CLI.`},target:{kind:`self`,name:`quantex`},warnings:[...c,...h?[{code:`MANUAL_RECOVERY`,message:`Manual recovery: ${h}`}]:[]]}),I)}function I(e){if(!e.data){e.error&&y(h.red(e.error.message));return}if(e.data.status===`up-to-date`){_(h.green(`Quantex CLI is already up to date (${e.data.currentVersion}).`)),R(e.warnings);return}if(e.data.status===`update-available`){let t=e.warnings.some(e=>e.message.includes(`Dry run`))?`Dry run: `:``;g(h.yellow(`${t}Update available for Quantex CLI: ${e.data.currentVersion} -> ${e.data.latestVersion} (${e.data.channel}).`)),R(e.warnings);return}if(e.data.status===`check-unavailable`){e.error&&g(h.yellow(e.error.message)),R(e.warnings);return}if(e.data.status===`manual-required`&&e.error?.code===`MANUAL_ACTION_REQUIRED`){g(h.yellow(e.error.message)),e.data.recoveryHint&&g(h.cyan(`Next step: ${e.data.recoveryHint}`));return}let t=e.data.latestVersion?` (${e.data.currentVersion} -> ${e.data.latestVersion})`:` (${e.data.currentVersion})`;if(_(h.cyan(`Upgrading Quantex CLI...${t}`)),!e.error){_(h.green(`Quantex CLI upgraded successfully.`)),R(e.warnings);return}y(h.red(`Failed to upgrade Quantex CLI.`)),g(h.yellow(`Reason: ${e.error.message}`));for(let t of e.warnings)g(h.cyan(t.message.replace(/^Manual recovery:/,`Next step:`)))}function L(e){return!e.latestVersion||!e.upstreamLatestVersion||e.latestVersion===e.upstreamLatestVersion||e.installSource!==`bun`&&e.installSource!==`npm`?[]:[{code:`MIRROR_LAG`,details:{installableLatestVersion:e.latestVersion,upstreamLatestVersion:e.upstreamLatestVersion},message:`The selected registry currently installs ${e.latestVersion}, while upstream npm has ${e.upstreamLatestVersion}. Retry later or set selfUpdateRegistry / QTX_SELF_UPDATE_REGISTRY to another registry if you need the upstream release now.`}]}function R(e){for(let t of e)t.code===`DRY_RUN`||t.code===`MANUAL_RECOVERY`||g(h.yellow(t.message))}function z(e){if(!e.latestVersion)return;let t=r(e.latestVersion,e.currentVersion);if(!(t===void 0||t>=0))return{code:`STALE_LATEST_VERSION`,details:{currentVersion:e.currentVersion,latestVersion:e.latestVersion},message:`The resolved latest version ${e.latestVersion} is older than the installed Quantex CLI ${e.currentVersion}. Quantex will not downgrade; retry with --refresh or --no-cache if you need a fresh check.`}}export{P as resolveUpgradeChannelOption,F as upgradeCommand};
1
+ import{c as e,o as t,t as n}from"./child-process-DzIdysOm.mjs";import{s as r}from"./schema-BBnWVY6R.mjs";import{i,n as a}from"./cli-context-DI43ouBg.mjs";import{c as o,d as s,f as c,i as l,m as u,n as d,t as f,u as p,y as m}from"./output-CLgmLN2q.mjs";import{t as h}from"./color-CLDVRyIs.mjs";import{a as g,i as _,n as v,r as y}from"./user-output-c8fjdhfk.mjs";import{n as b,t as x}from"./version-cache-BPRXYft0.mjs";const S={platform:process.platform,spawn:(e,n)=>t(e,{...n,stdio:n.stdio?[...n.stdio]:void 0}),terminate:e,writeStderr:e=>{process.stderr.write(e)}};function C(e=S){let t=b(e);return{run:e=>t.run({...e,forwardPipedOutput:e.forwardPipedOutput??!1})}}const w={fetch:globalThis.fetch.bind(globalThis)};function T(e=w){return{async request(t){if(t.signal.aborted)return E(t.signal);let n=new AbortController,r,i,a=!1,o=new Promise(e=>i=e),s=e=>{a||(a=!0,n.abort(),i(e))},c=()=>s(E(t.signal));t.signal.addEventListener(`abort`,c,{once:!0}),t.signal.aborted&&c(),t.timeoutMs!==void 0&&(r=setTimeout(()=>s(D(`timed-out`,`Network request timed out after ${t.timeoutMs}ms.`)),t.timeoutMs));let l=Promise.resolve().then(async()=>{let r=await e.fetch(t.url,{body:t.body,headers:t.headers,method:t.method,signal:n.signal}),i={};return r.headers.forEach((e,t)=>i[t.toLowerCase()]=e),{kind:`success`,value:{body:new Uint8Array(await r.arrayBuffer()),headers:i,status:r.status}}}).catch(e=>t.signal.aborted?E(t.signal):n.signal.aborted&&t.timeoutMs!==void 0?D(`timed-out`,`Network request timed out after ${t.timeoutMs}ms.`):D(`failed`,e instanceof Error?e.message:`Network request failed.`));try{return await Promise.race([l,o])}finally{a=!0,r&&clearTimeout(r),t.signal.removeEventListener(`abort`,c)}}}}function E(e){return D(`cancelled`,e.reason instanceof Error?e.reason.message:String(e.reason??`Network request was cancelled.`))}function D(e,t){return{error:{kind:e,message:t},kind:`failure`}}function O(e){let t=new AbortController,n=new Set,r=Object.freeze({cacheMode:e.cacheMode??`default`,dryRun:e.dryRun??!1,outputMode:e.outputMode??`human`,quiet:e.quiet??!1,timeoutMs:e.timeoutMs}),i=Object.freeze({...e.ports}),a;return{options:r,ports:i,signal:t.signal,cancel(e){if(a)return a;let r;a=new Promise(e=>{r=e}),t.abort(e);let i=[...n];return n.clear(),Promise.allSettled(i.map(t=>Promise.resolve().then(()=>t(e)))).then(()=>r()),a},onCancel(e){return t.signal.aborted?()=>void 0:(n.add(e),()=>{n.delete(e)})}}}async function k(e,t,n){if(t.signal.aborted)return A();let r=await n.plan({context:{signal:t.signal,timeoutMs:t.options.timeoutMs},metadataCache:t.ports.cache,metadataCacheMode:t.options.cacheMode===`no-cache`?`no-cache`:`refresh`,networkPort:t.ports.network,persistencePort:t.ports.persistence,updateChannel:e.updateChannel});return t.signal.aborted?A(r):e.check||e.dryRun||r.status!==`update-available`?{kind:`planned`,plan:r}:{kind:`executed`,plan:r,result:await n.upgrade(r,{lockPort:t.ports.locks,networkPort:t.ports.network,processPort:t.ports.process,signal:t.signal,stdio:t.options.outputMode===`human`?[`inherit`,`inherit`,`inherit`]:[`ignore`,`pipe`,`pipe`],timeoutMs:t.options.timeoutMs})}}function A(e){return{error:{kind:`cancelled`,message:`Self-upgrade invocation was cancelled.`},kind:`interrupted`,...e?{plan:e}:{}}}function j(){let e=a(),t=O({cacheMode:e.cacheMode,dryRun:e.dryRun,outputMode:e.outputMode,ports:M(),quiet:e.quiet,timeoutMs:e.timeoutMs});e.cancelled&&t.cancel(`cancelled`);let n=i(()=>t.cancel(`cancelled`)),r=!1,s={plan:e=>c({context:e.context,metadataCache:e.metadataCache,metadataCacheMode:e.metadataCacheMode,networkPort:e.networkPort,persistencePort:e.persistencePort,updateChannel:e.updateChannel}),upgrade:(e,t)=>o(e,t)};return{dispose(){r||(r=!0,n())},run:e=>k(e,t,s)}}function M(){return{cache:x(),clock:{now:Date.now,sleep:N},fileSystem:{makeDirectory:N,readFile:N,remove:N,rename:N,writeFile:N},locks:u(),network:T(),persistence:m(),process:C()}}async function N(){return{error:{kind:`unavailable`,message:`Runtime port is not bound for this self-upgrade operation.`},kind:`failure`}}function P(e){if(e===`stable`||e===`beta`)return e}async function F(e={}){let t=v(),r=j(),i=await r.run({check:e.check??!1,dryRun:t,updateChannel:e.channel}).finally(()=>r.dispose());if(i.kind===`interrupted`)throw new n({kind:`cancelled`,reason:i.error.message});let a=i.plan,o=s(a),c=L(o),u=z(o);if(a.status===`up-to-date`)return l(d({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,status:`up-to-date`},target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[]]}),I);if(e.check||t)return a.status===`update-available`?l(d({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,status:`update-available`},exitCode:e.check?1:void 0,target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[],...t?[{code:`DRY_RUN`,message:`Dry run: would upgrade Quantex CLI.`}]:[]]}),I):l(f({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,status:`check-unavailable`},error:{code:`NETWORK_ERROR`,message:`Unable to determine the latest Quantex CLI version.`},target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[]]}),I);if(a.status===`manual-required`){let e=p(o);return l(f({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,recoveryHint:e,status:`manual-required`},error:{code:`MANUAL_ACTION_REQUIRED`,message:`Quantex CLI cannot auto-update from the current install source: ${o.installSource}.`},target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[]]}),I)}if(i.kind!==`executed`)throw Error(`Self-upgrade execution did not produce a result.`);let m=i.result;if(m.success)return l(d({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,status:`updated`},target:{kind:`self`,name:`quantex`},warnings:[...c,...u?[u]:[]]}),I);let h=p(o,m);return l(f({action:`upgrade`,data:{canAutoUpdate:o.canAutoUpdate,channel:o.updateChannel,currentVersion:o.currentVersion,installSource:o.installSource,latestVersion:o.latestVersion,recoveryHint:h,status:`manual-required`},error:{code:`UPGRADE_FAILED`,details:m.error?.kind?{kind:m.error.kind}:void 0,message:m.error?.message??`Failed to upgrade Quantex CLI.`},target:{kind:`self`,name:`quantex`},warnings:[...c,...h?[{code:`MANUAL_RECOVERY`,message:`Manual recovery: ${h}`}]:[]]}),I)}function I(e){if(!e.data){e.error&&y(h.red(e.error.message));return}if(e.data.status===`up-to-date`){_(h.green(`Quantex CLI is already up to date (${e.data.currentVersion}).`)),R(e.warnings);return}if(e.data.status===`update-available`){let t=e.warnings.some(e=>e.message.includes(`Dry run`))?`Dry run: `:``;g(h.yellow(`${t}Update available for Quantex CLI: ${e.data.currentVersion} -> ${e.data.latestVersion} (${e.data.channel}).`)),R(e.warnings);return}if(e.data.status===`check-unavailable`){e.error&&g(h.yellow(e.error.message)),R(e.warnings);return}if(e.data.status===`manual-required`&&e.error?.code===`MANUAL_ACTION_REQUIRED`){g(h.yellow(e.error.message)),e.data.recoveryHint&&g(h.cyan(`Next step: ${e.data.recoveryHint}`));return}let t=e.data.latestVersion?` (${e.data.currentVersion} -> ${e.data.latestVersion})`:` (${e.data.currentVersion})`;if(_(h.cyan(`Upgrading Quantex CLI...${t}`)),!e.error){_(h.green(`Quantex CLI upgraded successfully.`)),R(e.warnings);return}y(h.red(`Failed to upgrade Quantex CLI.`)),g(h.yellow(`Reason: ${e.error.message}`));for(let t of e.warnings)g(h.cyan(t.message.replace(/^Manual recovery:/,`Next step:`)))}function L(e){return!e.latestVersion||!e.upstreamLatestVersion||e.latestVersion===e.upstreamLatestVersion||e.installSource!==`bun`&&e.installSource!==`npm`?[]:[{code:`MIRROR_LAG`,details:{installableLatestVersion:e.latestVersion,upstreamLatestVersion:e.upstreamLatestVersion},message:`The selected registry currently installs ${e.latestVersion}, while upstream npm has ${e.upstreamLatestVersion}. Retry later or set selfUpdateRegistry / QTX_SELF_UPDATE_REGISTRY to another registry if you need the upstream release now.`}]}function R(e){for(let t of e)t.code===`DRY_RUN`||t.code===`MANUAL_RECOVERY`||g(h.yellow(t.message))}function z(e){if(!e.latestVersion)return;let t=r(e.latestVersion,e.currentVersion);if(!(t===void 0||t>=0))return{code:`STALE_LATEST_VERSION`,details:{currentVersion:e.currentVersion,latestVersion:e.latestVersion},message:`The resolved latest version ${e.latestVersion} is older than the installed Quantex CLI ${e.currentVersion}. Quantex will not downgrade; retry with --refresh or --no-cache if you need a fresh check.`}}export{P as resolveUpgradeChannelOption,F as upgradeCommand};
@@ -0,0 +1 @@
1
+ import{c as e,o as t,r as n}from"./child-process-DzIdysOm.mjs";import{n as r}from"./cli-context-DI43ouBg.mjs";import{t as i}from"./config-jsaRCEWF.mjs";import{dirname as a,join as o}from"node:path";import{mkdir as s,readFile as c,writeFile as l}from"node:fs/promises";const u={platform:process.platform,spawn:(e,n)=>t(e,{...n,stdio:n.stdio?[...n.stdio]:void 0}),terminate:e,writeStderr:e=>{process.stderr.write(e)}};function d(e=u){return{async run(t){if(t.signal.aborted)return p(t.signal);let r;try{r=e.spawn(t.argv,{...t.cwd?{cwd:t.cwd}:{},detached:e.platform!==`win32`,...t.env?{env:{...process.env,...t.env}}:{},stdio:t.stdio})}catch(e){return m(`failed`,g(e,`Failed to launch agent process.`))}let i=n(r),a,o,s=new Promise(e=>{o=()=>e({kind:`cancelled`}),t.signal.addEventListener(`abort`,o,{once:!0}),t.signal.aborted&&o()}),c=i.then(e=>({kind:`completed`,result:e})),l=t.timeoutMs===void 0?void 0:new Promise(e=>{a=setTimeout(()=>e({kind:`timed-out`}),t.timeoutMs)});try{let n=await Promise.race(l?[c,s,l]:[c,s]);if(n.kind===`completed`)return f(n.result,t,e);if(n.kind===`cancelled`)return await e.terminate(r),await i.catch(()=>void 0),p(t.signal);let a=await v(c,_(t.timeoutMs));return a?f(a.result,t,e):(await e.terminate(r),await i.catch(()=>void 0),m(`timed-out`,`Agent process timed out after ${t.timeoutMs}ms.`))}finally{a&&clearTimeout(a),t.signal.removeEventListener(`abort`,o)}}}}function f(e,t,n){t.forwardPipedOutput!==!1&&(t.stdio?.[1]===`pipe`&&e.stdout&&n.writeStderr?.(e.stdout),t.stdio?.[2]===`pipe`&&e.stderr&&n.writeStderr?.(e.stderr));let r=new TextEncoder;return{kind:`success`,value:{exitCode:e.exitCode,...e.stderr?{stderr:r.encode(e.stderr)}:{},...e.stdout?{stdout:r.encode(e.stdout)}:{}}}}function p(e){return m(`cancelled`,h(e)??`Agent process was cancelled.`)}function m(e,t){return{error:{kind:e,message:t},kind:`failure`}}function h(e){if(e.reason!==void 0)return e.reason instanceof Error?e.reason.message:String(e.reason)}function g(e,t){return e instanceof Error&&e.message.trim()?e.message:t}function _(e){return Math.max(1,Math.min(e,250))}async function v(e,t){let n;try{return await Promise.race([e,new Promise(e=>{n=setTimeout(()=>e(void 0),t)})])}finally{n&&clearTimeout(n)}}function y(e={}){let t=e.filePath??o(i(),`cache`,`versions.json`),n=e.getCacheMode??(()=>r().cacheMode??`default`),a=e.now??Date.now;return{async read(e){let r=T(e.signal);if(r)return r;if(n()===`no-cache`)return C({kind:`miss`});try{let n=await b(t),r=T(e.signal);if(r)return r;let i=n.entries[e.key];if(!i||i.expiresAt<=a())return C({kind:`miss`});try{return C({expiresAtMs:i.expiresAt,kind:`hit`,value:JSON.parse(i.body)})}catch{return w(`invalid-data`,`Cached value for ${e.key} is not valid JSON.`)}}catch(e){return E(e,`Failed to read the version cache.`)}},async remove(e){let r=T(e.signal);if(r)return r;if(n()===`no-cache`)return C(void 0);try{let n=await b(t);return T(e.signal)||(Object.hasOwn(n.entries,e.key)?(delete n.entries[e.key],await x(t,n),T(e.signal)??C(void 0)):C(void 0))}catch(e){return E(e,`Failed to remove a version cache entry.`)}},async write(e){let r=T(e.signal);if(r)return r;if(n()===`no-cache`)return C(void 0);try{let n=await b(t),r=T(e.signal);if(r)return r;let i=a(),o=JSON.stringify(e.value);return o===void 0?w(`invalid-data`,`Cached value for ${e.key} is not JSON serializable.`):(n.entries[e.key]={body:o,expiresAt:e.expiresAtMs??2**53-1,fetchedAt:i},await x(t,n),T(e.signal)??C(void 0))}catch(e){return E(e,`Failed to write the version cache.`)}}}}async function b(e){try{return S(JSON.parse(await c(e,`utf8`)))}catch(e){if(D(e)||e instanceof SyntaxError)return{entries:{}};throw e}}async function x(e,t){await s(a(e),{recursive:!0}),await l(e,`${JSON.stringify(t,null,2)}\n`,`utf8`)}function S(e){if(!O(e)||!O(e.entries))return{entries:{}};let t={};for(let[n,r]of Object.entries(e.entries))!O(r)||typeof r.body!=`string`||!k(r.expiresAt)||(t[n]={body:r.body,etag:typeof r.etag==`string`?r.etag:void 0,expiresAt:r.expiresAt,fetchedAt:k(r.fetchedAt)?r.fetchedAt:void 0});return{entries:t}}function C(e){return{kind:`success`,value:e}}function w(e,t,n){return{error:{code:n,kind:e,message:t},kind:`failure`}}function T(e){return e.aborted?w(`cancelled`,`Cache operation was cancelled.`):void 0}function E(e,t){return w(`failed`,t,O(e)&&typeof e.code==`string`?e.code:void 0)}function D(e){return O(e)&&(e.code===`ENOENT`||e.code===`ENOTDIR`)}function O(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function k(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0}export{d as n,y as t};
@@ -1,2 +1,2 @@
1
- import{i as e,n as t,o as n,r}from"./child-process-DzIdysOm.mjs";import{_ as i,g as a}from"./npm-DUDR-Khz.mjs";import{join as o}from"node:path";import s from"node:process";import{access as c,constants as l}from"node:fs/promises";import{homedir as u}from"node:os";function d(e){return e===`cask`?[`--cask`]:[]}function ee(e){return e===`cask`?[`--cask`]:[`--formula`]}function f(e,t,n,r){return a([`brew`,e,...d(n),t],r,`brew ${e} failed`)}function te(e,t,n){return f(`install`,e,t,n)}function ne(e,t,n){return f(`upgrade`,e,t,n)}function re(e,t){return i(e.map(e=>[`brew`,`upgrade`,...d(e.packageTargetKind),e.packageName]),t,`brew update failed`)}function ie(e,t,n){return f(`uninstall`,e,t,n)}async function p(i,a,o){try{let t=n([`brew`,`list`,...ee(a),`--versions`,i],{detached:o!==void 0&&s.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),{exitCode:c,stderr:l,stdout:u}=o?await e(t,o):await r(t),d=g(u);return c===0?d?{presence:`present`,version:d}:{presence:`present`}:c===1&&_(l)?{presence:`absent`}:{presence:`unknown`}}catch(e){if(t(e))throw e;return{presence:`unknown`}}}async function m(e,t,n){return(await p(e,t,n)).presence}async function h(e,t,n){return(await p(e,t,n)).version}function g(e){let t=e.trim().split(`
1
+ import{i as e,n as t,o as n,r}from"./child-process-DzIdysOm.mjs";import{_ as i,g as a}from"./npm-PO9Nwgt_.mjs";import{join as o}from"node:path";import s from"node:process";import{access as c,constants as l}from"node:fs/promises";import{homedir as u}from"node:os";function d(e){return e===`cask`?[`--cask`]:[]}function ee(e){return e===`cask`?[`--cask`]:[`--formula`]}function f(e,t,n,r){return a([`brew`,e,...d(n),t],r,`brew ${e} failed`)}function te(e,t,n){return f(`install`,e,t,n)}function ne(e,t,n){return f(`upgrade`,e,t,n)}function re(e,t){return i(e.map(e=>[`brew`,`upgrade`,...d(e.packageTargetKind),e.packageName]),t,`brew update failed`)}function ie(e,t,n){return f(`uninstall`,e,t,n)}async function p(i,a,o){try{let t=n([`brew`,`list`,...ee(a),`--versions`,i],{detached:o!==void 0&&s.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),{exitCode:c,stderr:l,stdout:u}=o?await e(t,o):await r(t),d=g(u);return c===0?d?{presence:`present`,version:d}:{presence:`present`}:c===1&&_(l)?{presence:`absent`}:{presence:`unknown`}}catch(e){if(t(e))throw e;return{presence:`unknown`}}}async function m(e,t,n){return(await p(e,t,n)).presence}async function h(e,t,n){return(await p(e,t,n)).version}function g(e){let t=e.trim().split(`
2
2
  `).find(e=>e.trim());if(!t)return;let n=t.trim().split(/\s+/);if(n.length<2)return;let r=n.at(-1);return r&&/^\d/.test(r)?r:void 0}function _(e){let t=e.toLowerCase();return t.includes(`no such keg`)||t.includes(`is not installed`)}function v(e,t,n,r){return a([`cargo`,e,t,...n],r,`cargo ${e} failed`)}function y(e,t,n){return v(`install`,e,t??[],n)}function ae(e,t,n){return y(e,[`--force`,...t??[]],n)}function oe(e,t){return i(e.map(e=>[`cargo`,`install`,e.packageName,`--force`,...e.packageInstallArgs??[]]),t,`cargo update failed`)}function se(e,t){return v(`uninstall`,e,[],t)}async function b(i,a){try{let t=n([`cargo`,`install`,`--list`],{detached:a!==void 0&&s.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),{exitCode:o,stdout:c}=a?await e(t,a):await r(t);if(o!==0)return{presence:`unknown`};let l=ue(c,i);return l?{presence:`present`,version:l}:de(c,i)?{presence:`present`}:{presence:`absent`}}catch(e){if(t(e))throw e;return{presence:`unknown`}}}async function ce(e,t){return(await b(e,t)).presence}async function le(e,t){return(await b(e,t)).version}function ue(e,t){let n=x(e,t);if(!n)return;let r=n[1];return r&&/^\d/.test(r)?r:void 0}function de(e,t){return x(e,t)!==void 0}function x(e,t){let n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),r=RegExp(`^${n}\\s+v([^:\\s]+):\\s*$`,`m`);return e.match(r)??void 0}function S(e,t,n,r){let i=[`deno`,`install`,`--global`];return n.force&&i.push(`--force`),i.push(...t,e),a(i,r,`deno ${n.force?`update`:`install`} failed`)}function fe(e,t,n){return S(e,t??[],{},n)}function C(e,t,n){return S(e,t??[],{force:!0},n)}function w(e,t){return i(e.map(e=>[`deno`,`install`,`--global`,`--force`,...e.packageInstallArgs??[],e.packageName]),t,`deno update failed`)}function T(e,t){return a([`deno`,`uninstall`,`--global`,e],t,`deno uninstall failed`)}async function E(e,n){if(!e.trim())return{presence:`unknown`};try{return await c(o(A(),`bin`,e),l.F_OK),{presence:`present`}}catch(e){if(t(e))throw e;return j(e)&&(e.code===`ENOENT`||e.code===`ENOTDIR`)?{presence:`absent`}:{presence:`unknown`}}}async function D(e,t){return(await E(e,t)).presence}async function O(e,t){return(await E(e,t)).version}function k(e,t){if(t?.trim())return t.trim();let n=e.trim().split(`/`).pop()?.replace(/@.*$/,``);return n&&n.length>0?n:e.trim()}function A(){let e=s.env.DENO_INSTALL_ROOT?.trim();return e&&e.length>0?e:o(u(),`.deno`)}function j(e){return typeof e==`object`&&!!e&&`code`in e}function M(e,t,n){return a([`mise`,`use`,`--global`,...t?[`--force`]:[],e],n,`mise ${t?`update`:`install`} failed`)}function N(e,t){return M(e,!1,t)}function P(e,t){return M(e,!0,t)}function F(e,t){return i(e.map(e=>[`mise`,`use`,`--global`,`--force`,e.packageName]),t,`mise update failed`)}function I(e,t){return a([`mise`,`unuse`,`--global`,e],t,`mise uninstall failed`)}async function L(i,a){try{let t=n([`mise`,`ls`,`--installed`,`--json`,i],{detached:a!==void 0&&s.platform!==`win32`,stdio:[`ignore`,`pipe`,`ignore`]}),{stdout:o}=a?await e(t,a):await r(t);if(!o.trim())return{presence:`unknown`};try{let e=JSON.parse(o);if(!H(e))return{presence:`unknown`};let t=V(e,i),n=t?e[t]:void 0;if(!Array.isArray(n)||n.length===0)return{presence:`absent`};let r=B(o,i);return r?{presence:`present`,version:r}:{presence:`present`}}catch{return{presence:`unknown`}}}catch(e){if(t(e))throw e;return{presence:`unknown`}}}async function R(e,t){return(await L(e,t)).presence}async function z(e,t){return(await L(e,t)).version}function B(e,t){try{let n=JSON.parse(e);if(!H(n))return;let r=V(n,t),i=r?n[r]:void 0;if(!Array.isArray(i))return;for(let e of i)if(H(e)&&typeof e.version==`string`&&e.version.length>0)return e.version;return}catch{return}}function V(e,t){if(Array.isArray(e[t]))return t;let n=t.split(`:`).pop()?.split(`/`).pop();if(n)return Object.keys(e).find(t=>t===n&&Array.isArray(e[t]))}function H(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}let U=null;async function W(r){if(U)return{kind:`success`,value:U};for(let i of[[`pip`],[`pip3`],[`python`,`-m`,`pip`],[`python3`,`-m`,`pip`]])try{let{exitCode:t}=await e(n([...i,`--version`],{detached:s.platform!==`win32`,stdio:[`ignore`,`pipe`,`ignore`]}),r);if(t===0)return U=i,{kind:`success`,value:i}}catch(e){if(t(e))return e.kind===`timed-out`?{kind:`timed-out`,timeoutMs:e.timeoutMs??r.timeoutMs??0}:{kind:`cancelled`,...e.reason?{reason:e.reason}:{}}}return U=[`pip`],{kind:`success`,value:U}}async function G(e,t){let n=await W(t);return n.kind===`success`?a([...n.value,...e],t,`pip command failed`):n}function pe(e,t){return G([`install`,e],t)}function me(e,t){return G([`install`,`--upgrade`,e],t)}async function he(e,t){if(e.length===0)return{kind:`success`,value:void 0};let n=await W(t);return n.kind===`success`?i(e.map(e=>[...n.value,`install`,`--upgrade`,e.packageName]),t,`pip update failed`):n}function ge(e,t){return G([`uninstall`,`-y`,e],t)}async function K(i,a){let o=a??{signal:new AbortController().signal,timeoutMs:5e3};try{let t=await W(o);if(t.kind!==`success`)return{presence:`unknown`};let c=n([...t.value,`show`,i],{detached:a!==void 0&&s.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),{exitCode:l,stderr:u,stdout:d}=a?await e(c,a):await r(c);if(l===0){let e=ye(d);return e?{presence:`present`,version:e}:{presence:`present`}}return l===1&&be(u)?{presence:`absent`}:{presence:`unknown`}}catch(e){if(t(e))throw e;return{presence:`unknown`}}}async function _e(e,t){return(await K(e,t)).presence}async function ve(e,t){return(await K(e,t)).version}function ye(e){for(let t of e.split(/\r?\n/)){let e=/^Version:\s*(.+)\s*$/i.exec(t.trim());if(e?.[1])return e[1].trim()}}function be(e){let t=e.toLowerCase();return t.includes(`package(s) not found`)||t.includes(`not found`)}function q(e,t,n,r){return a([`uv`,`tool`,e,t,...n],r,`uv ${e} failed`)}function xe(e,t,n){return q(`install`,e,t??[],n)}function Se(e,t,n){return q(`upgrade`,e,t??[],n)}function Ce(e,t){return i(e.map(e=>[`uv`,`tool`,`upgrade`,e.packageName,...e.packageInstallArgs??[]]),t,`uv update failed`)}function we(e,t){return a([`uv`,`tool`,`uninstall`,e],t,`uv uninstall failed`)}async function J(i,a){try{let t=n([`uv`,`tool`,`list`],{detached:a!==void 0&&s.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),o=a?await e(t,a):await r(t),{stdout:c}=o;if(Oe(o))return{presence:`absent`};if(!c.trim())return{presence:`unknown`};let l=ke(c,i);return l?{presence:`present`,version:l}:De(c)?{presence:`absent`}:{presence:`unknown`}}catch(e){if(t(e))throw e;return{presence:`unknown`}}}async function Te(e,t){return(await J(e,t)).presence}async function Ee(e,t){return(await J(e,t)).version}function De(e){return e.split(/\r?\n/).some(e=>/^\S+\s+v[^\s]+/.test(e.trim()))}function Oe(e){if(e.exitCode!==0)return!1;let t=`${e.stdout}\n${e.stderr}`.split(/\r?\n/).map(e=>e.trim()).filter(Boolean);return t.length===1&&/^no tools installed\.?$/i.test(t[0])}function ke(e,t){let n=Y(t);for(let t of e.split(/\r?\n/)){let e=t.trim(),r=/^(\S+)\s+v([^\s]+)/.exec(e);if(!r)continue;let[,i,a]=r;if(Y(i)===n)return a}}function Y(e){return e.toLowerCase().replaceAll(/[-_.]+/g,`-`)}function X(e,t,n){return a([`winget`,e,`--id`,t,`-e`],n,`winget ${e} failed`)}function Z(e,t){return X(`install`,e,t)}function Ae(e,t){return X(`upgrade`,e,t)}function je(e,t){return i(e.map(e=>[`winget`,`upgrade`,`--id`,e.packageName,`-e`]),t,`winget update failed`)}function Me(e,t){return X(`uninstall`,e,t)}async function Q(i,a){try{let t=n([`winget`,`list`,`--id`,i,`-e`],{detached:a!==void 0&&s.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),{exitCode:o,stderr:c,stdout:l}=a?await e(t,a):await r(t);if(o===0){let e=Fe(l,i);return e?{presence:`present`,version:e}:l.toLowerCase().includes(i.toLowerCase())?{presence:`present`}:{presence:`unknown`}}return $(c)||$(l)?{presence:`absent`}:{presence:`unknown`}}catch(e){if(t(e))throw e;return{presence:`unknown`}}}async function Ne(e,t){return(await Q(e,t)).presence}async function Pe(e,t){return(await Q(e,t)).version}function Fe(e,t){let n=t.toLowerCase();for(let t of e.split(/\r?\n/)){let e=t.trim();if(!e||e.toLowerCase().startsWith(`name`)||e.startsWith(`-`))continue;let r=e.split(/\s{2,}|\t+/).map(e=>e.trim()).filter(Boolean);if(r.length<2)continue;let i=r.findIndex(e=>e.toLowerCase()===n);if(i<0)continue;let a=r[i+1];return a&&a.length>0?a:void 0}}function $(e){let t=e.toLowerCase();return t.includes(`no installed package found`)||t.includes(`no package found matching input criteria`)||t.includes(`no installed package matched`)}export{w as A,m as B,F as C,fe as D,k as E,se as F,re as H,oe as I,ae as L,le as M,y as N,D as O,ce as P,h as R,I as S,O as T,ne as U,ie as V,he as _,je as a,N as b,xe as c,Ce as d,Se as f,ge as g,_e as h,Me as i,C as j,T as k,Te as l,pe as m,Z as n,Ae as o,ve as p,Ne as r,Ee as s,Pe as t,we as u,me as v,P as w,R as x,z as y,te as z};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quantex-cli",
3
- "version": "1.11.2",
3
+ "version": "1.12.0",
4
4
  "description": "Agent-friendly lifecycle CLI for AI coding assistant CLIs: install, inspect, update, uninstall, run, and automate Codex, Claude Code, Gemini, Cursor, OpenCode, and more",
5
5
  "keywords": [
6
6
  "agent-cli",
@@ -1 +0,0 @@
1
- import{n as e}from"./detect-BUVMt8jZ.mjs";import{n as t}from"./cli-context-DI43ouBg.mjs";import{A as n}from"./output-BRIAY0Oa.mjs";import{t as r}from"./cli-operation-context-BS5a069W.mjs";import{d as i,g as a,l as o,o as s,u as c}from"./agents-aJwt-ODK.mjs";import{o as l}from"./provider-binding-BmBPz4YE.mjs";import{t as u}from"./provider-evidence-ByRBnbzW.mjs";function d(e){let t=f(e);return{decision:t,plan:{id:`${e.intent.kind}-${e.intent.targetId}`,intent:e.intent,kind:`lifecycle-plan`,observation:e.observation,steps:h(t,e)}}}function f(e){let{intent:t,observation:n}=e;return n.kind===`indeterminate`||n.drift.kind===`indeterminate`||n.drift.kind===`conflicting-source`||p(e)?`blocked`:t.kind===`uninstall`?n.kind===`absent`?n.drift.kind===`recorded-absent`?`clear-ghost`:`preserve-unmanaged`:!n.providerId||!y(e)?`preserve-unmanaged`:m(e,`uninstall`)?`uninstall`:`unsupported`:n.kind===`present`?n.drift.kind===`untracked`?n.providerId?`adopt`:`preserve-unmanaged`:`satisfied`:!v(e)||!y(e)?`blocked`:m(e,`install`)?`install`:`unsupported`}function p(e){let{observation:t,provider:n}=e;return t.kind!==`present`||n===void 0?!1:t.providerId!==void 0&&t.providerId!==n.providerId||t.providerTargetId!==void 0&&t.providerTargetId!==n.targetId||t.providerTargetKind!==void 0&&t.providerTargetKind!==n.targetKind}function m(e,t){return e.provider===void 0||e.provider.capabilities.includes(t)}function h(e,t){switch(e){case`install`:return[g(`install`,t,_(`package-present`,t))];case`uninstall`:return[g(`uninstall`,t,_(`package-absent`,t))];case`adopt`:return[b(`adopt-${t.intent.targetId}`,[{executable:t.observation.kind===`present`?t.observation.executablePath??t.intent.targetId:t.intent.targetId,kind:`executable-present`}])];case`clear-ghost`:return[b(`clear-ghost-${t.intent.targetId}`,[])];case`blocked`:case`preserve-unmanaged`:case`satisfied`:case`unsupported`:return[]}}function g(e,t,n){let r=v(t),i=y(t);return{dependsOn:[],effects:[{capability:`${r}-${e}`,kind:`provider-mutation`,providerId:r,targetId:i}],id:`${e}-${t.intent.targetId}`,kind:`operation`,postconditions:[n],preconditions:[]}}function _(e,t){return{kind:e,providerId:v(t),targetId:y(t)}}function v(e){return e.observation.kind===`present`?e.observation.providerId??e.provider?.providerId??e.providerId:e.provider?.providerId??e.providerId}function y(e){return e.observation.kind===`present`?e.observation.providerTargetId??e.provider?.targetId??e.providerTargetId:e.provider?.targetId??e.providerTargetId}function b(e,t){return{dependsOn:[],effects:[],id:e,kind:`operation`,postconditions:t,preconditions:[]}}async function x(e){let t=await e.execute();if(t.kind!==`success`)return t;let n;try{n=await e.verify(t.value,e.plan)}catch{return await S(e,t.value),{kind:`failed`,reason:`verification-failed`,retryable:!0}}if(n.kind!==`satisfied`)return await S(e,t.value),n.kind===`indeterminate`?{kind:`indeterminate`,reason:n.reason}:{kind:`failed`,reason:n.reason,retryable:!1};let r=e.createReceipt(n,t.value);try{await e.recordReceipt(r,t.value)}catch{return await S(e,t.value),{kind:`failed`,reason:`receipt-write-failed`,retryable:!0}}return{kind:`success`,value:{...t.value,receipt:r,verification:n}}}async function S(e,t){if(!(!t.changed||!e.compensate))try{await e.compensate(t)}catch{}}function C(e){let{adoptableMethod:t,agent:r,observation:o,operation:s,route:c}=e,f=o.installedState?void 0:o.methods[0],p=o.installedState??t??f,m=D(o.lifecycle,r,t),h=d({intent:{kind:s,targetId:r.name},observation:m,providerId:O(p),providerTargetId:k(r,p)});return h.decision===c?a(async()=>{if(c===`install`&&o.installedState&&!o.inPath){let e=l(r,o.installedState);if(!e)return{kind:`indeterminate`,reason:`tracked-provider-binding-unresolved`};let t=await E(t=>u(e,t));if(t.kind!==`success`||t.value.kind!==`absent`)return{kind:`indeterminate`,reason:`tracked-provider-not-conclusively-absent`}}return x({createReceipt:(e,t)=>{let n=l(r,t.value.installedState);if(!n)throw Error(`Cannot resolve provider binding for ${r.name}.`);let i=e.observation.kind===`present`?e.observation:void 0;return{...n.target.binaryName?{executableName:n.target.binaryName}:{},kind:`lifecycle-receipt`,providerId:n.providerId,providerTargetId:n.target.id,providerTargetKind:n.target.kind,schemaVersion:1,targetId:r.name,verifiedAt:new Date().toISOString(),...i?.executablePath?{executablePath:i.executablePath}:{},...i?.version?{version:i.version}:{}}},compensate:e=>c===`install`?i(r,e.value.installedState):Promise.resolve(),execute:async()=>w(r,c,o.installedState,t,f),plan:h.plan,recordReceipt:(e,t)=>n(t.value.installedState,e),verify:async e=>T(r,e.value.installedState,s,h.plan.steps[0]?.postconditions[0])})}):Promise.resolve({kind:`indeterminate`,reason:`planned-${h.decision}-cannot-execute-${c}`})}async function w(e,n,r,i,a){if(n===`satisfied`&&r)return{kind:`success`,value:{changed:!1,value:{installedState:r}}};if(n===`adopt`&&i)return t().cancelled?{kind:`cancelled`,reason:`tracking-cancelled`}:{kind:`success`,value:{changed:!0,value:{installedState:s(e,i)}}};if(n===`install`&&r){let t=await c(e,r);return t.kind===`success`&&t.value.installedState?{kind:`success`,value:{changed:!0,value:{installedState:t.value.installedState}}}:t.kind===`success`?{kind:`failed`,reason:`installed-state-missing`,retryable:!1}:t}if(!a)return{kind:`indeterminate`,reason:`install-method-unresolved`};let l=await o(e,[a]);return l.kind===`success`?l.value.installedState?{kind:`success`,value:{changed:!0,value:{installedState:l.value.installedState}}}:{kind:`failed`,reason:`installed-state-missing`,retryable:!1}:l}async function T(t,n,r,i){let a=i??{executable:t.binaryName,kind:`executable-present`},o=l(t,n);if(!o)return{kind:`indeterminate`,postcondition:a,reason:`provider-binding-unresolved-after-${r}`};let[s,c]=await E(n=>Promise.all([e(t.binaryName,n),u(o,n)])),d=c.kind===`success`&&c.value.kind===`present`,f=c.kind===`success`?c.value:void 0,p=s&&d?{drift:{kind:`none`},executablePath:f?.kind===`present`?f.executablePath:void 0,kind:`present`,providerId:o.providerId,providerTargetId:o.target.id,targetId:t.name,version:f?.kind===`present`?f.version:void 0}:{drift:{kind:`recorded-absent`},kind:`absent`,targetId:t.name};return s&&d?{kind:`satisfied`,observation:p,postcondition:a}:{kind:`unsatisfied`,observation:p,postcondition:a,reason:s?`provider-target-not-present-after-${r}`:`binary-not-found-after-${r}`}}async function E(e){let t=r();try{return await e(t.context)}finally{t.dispose()}}function D(e,t,n){return e.kind!==`present`||!n?e:{...e,providerId:O(n),providerTargetId:k(t,n)}}function O(e){if(e)return`installType`in e?e.installType:e.type}function k(e,t){if(t){if(t.packageName)return t.packageName;if(t.command)return t.command;if(t.binaryName)return t.binaryName;let n=O(t);if(n===`bun`||n===`npm`)return e.packages?.npm??e.binaryName;if(n===`cargo`)return e.packages?.cargo??e.binaryName;if(n===`deno`)return e.packages?.deno??e.binaryName;if(n===`mise`)return e.packages?.mise??e.binaryName;if(n===`pip`)return e.packages?.pip??e.binaryName;if(n===`uv`)return e.packages?.uv??e.binaryName}return e.binaryName}export{C as t};
@@ -1 +0,0 @@
1
- import{c as e,s as t}from"./child-process-DzIdysOm.mjs";import{c as n,f as r,i,t as a}from"./npm-DUDR-Khz.mjs";import{B as o,E as s,M as c,O as ee,P as te,R as ne,T as re,h as ie,l as ae,p as oe,r as se,s as l,t as u,x as ce,y as le}from"./winget-C8yBIi3u.mjs";import{d,h as ue,o as de}from"./file-store-XNyirRRY.mjs";import{t as f}from"./detect-BUVMt8jZ.mjs";import{B as fe,G as pe,H as me,J as he,K as ge,U as _e,V as ve,W as ye,Y as be,n as xe,q as Se,r as Ce,z as we}from"./agents-Caewjqrg.mjs";import{i as Te,n as p}from"./cli-context-DI43ouBg.mjs";import{$ as Ee,D as m,Q as De,j as h,tt as Oe,x as g}from"./output-BRIAY0Oa.mjs";import{c as ke,d as _,g as Ae,h as je,m as v,s as Me,u as y,y as b}from"./providers-CMuU0Elu.mjs";import{n as x,t as S}from"./cli-operation-context-BS5a069W.mjs";import Ne from"node:process";import{AsyncLocalStorage as Pe}from"node:async_hooks";function C(n,r={}){let i=t(n,x(p().outputMode),r),a=Te(()=>e(i.proc));return{...i,cleanup:()=>{a(),i.cleanup()}}}async function w(e){let t=p();try{let n=await e.proc.exited;return await e.outputDrained,t.cancelled?1:n}finally{e.cleanup()}}async function T(e){let t=f(),n=typeof e==`function`?e(t):e;try{return Ne.platform===`win32`?await w(C([`powershell.exe`,`-Command`,n]))===0:await w(C([`sh`,`-c`,n]))===0}catch{return!1}}function E(e,t,n){return{type:e,getInstalledVersion:e=>n.getInstalledVersion(e),probePackagePresence:e=>n.probePackagePresence(e),isAvailable:e=>D(e,async e=>(await t.availability(e)).kind===`success`),install:async(e,n,r,i)=>t.install?D(i,i=>t.install({context:i,target:O(e,n,void 0,r)})):N(`install`),uninstall:async(e,n,r,i)=>t.uninstall?D(i,i=>t.uninstall({context:i,target:O(e,n,r?.binaryName)})):N(`uninstall`),update:async(e,n,r,i)=>{if(!t.update)return N(`update`);let a=k(r);return D(i,i=>t.update({context:i,...a?{options:a}:{},target:O(e,n,r?.binaryName,r?.packageInstallArgs)}))},updateMany:async(e,n,r)=>{if(!t.updateMany)return N(`update-many`);let i=k(n);return D(r,n=>t.updateMany({context:n,...i?{options:i}:{},targets:e.map(e=>O(e.packageName,e.packageTargetKind,e.binaryName,e.packageInstallArgs))}))}}}async function D(e,t){if(e)return t(e);let n=S();try{return await t(n.context)}finally{n.dispose()}}function O(e,t,n,r){return{...r?.length?{arguments:r}:{},...n?{binaryName:n}:{},id:e,kind:t??`package`}}function k(e){return e?.npmBunUpdateStrategy?{updateStrategy:e.npmBunUpdateStrategy}:void 0}function A(e,t,n,r={}){let i=(e,t,r,i)=>({...r?.length?{arguments:r}:{},...i?{binaryName:i}:{},id:e,kind:n(t)});return{...r,type:e,isAvailable:e=>D(e,async e=>(await t.availability(e)).kind===`success`),install:async(e,n,r,a)=>t.install?D(a,a=>t.install({context:a,target:i(e,n,r)})):N(`install`),uninstall:async(e,n,r,a)=>t.uninstall?D(a,a=>t.uninstall({context:a,target:i(e,n,void 0,r?.binaryName)})):N(`uninstall`),update:async(e,n,r,a)=>t.update?D(a,a=>t.update({context:a,target:i(e,n,r?.packageInstallArgs,r?.binaryName)})):N(`update`),updateMany:async(e,n,r)=>t.updateMany?D(r,n=>t.updateMany({context:n,targets:e.map(e=>i(e.packageName,e.packageTargetKind,e.packageInstallArgs,e.binaryName))})):N(`update-many`)}}const j={brew:A(`brew`,be,e=>e===`cask`?`cask`:`formula`,{getInstalledVersion:(e,t)=>ne(e,t),probePackagePresence:(e,t)=>o(e,t)}),bun:E(`bun`,he,{getInstalledVersion:e=>n(e),probePackagePresence:e=>r(e)}),cargo:A(`cargo`,Se,()=>`package`,{getInstalledVersion:e=>c(e),probePackagePresence:e=>te(e)}),deno:A(`deno`,ge,()=>`tool`,{getInstalledVersion:e=>re(s(e)),probePackagePresence:e=>ee(s(e))}),mise:A(`mise`,_e,()=>`tool`,{getInstalledVersion:e=>le(e),probePackagePresence:e=>ce(e)}),npm:E(`npm`,me,{getInstalledVersion:e=>a(e),probePackagePresence:e=>i(e)}),pip:A(`pip`,ve,()=>`package`,{getInstalledVersion:e=>oe(e),probePackagePresence:e=>ie(e)}),uv:A(`uv`,fe,()=>`tool`,{getInstalledVersion:e=>l(e),probePackagePresence:e=>ae(e)}),winget:A(`winget`,we,()=>`id`,{getInstalledVersion:e=>u(e),probePackagePresence:e=>se(e)})},Fe=Object.fromEntries(Object.entries(j).map(([e,t])=>[e,Le(t)]));function Ie(e){return Fe[e]}function M(e){return j[e]}function Le(e){return{getInstalledVersion:e.getInstalledVersion,install:async(...t)=>(await e.install(...t)).kind===`success`,isAvailable:e.isAvailable,probePackagePresence:e.probePackagePresence,type:e.type,uninstall:async(...t)=>(await e.uninstall(...t)).kind===`success`,update:async(...t)=>(await e.update(...t)).kind===`success`,updateMany:async(...t)=>(await e.updateMany(...t)).kind===`success`}}function N(e){return{kind:`unsupported`,operation:e}}const Re={resource:`agent lifecycle`,scope:[`agent-lifecycle`]},P=new Pe;function F(e){return P.getStore()?e():de(Re,()=>P.run(!0,e))}async function ze(){return(await d()).defaultPackageManager}async function I(){return{npmBunUpdateStrategy:(await d()).npmBunUpdateStrategy}}async function L(e){let t=f(),n=e.platforms[t];if(!n)return[];let r=await ze();return r?[...n.filter(e=>e.type===r),...n.filter(e=>e.type!==r)]:[...n]}async function R(e,t,n,r,i,a,o,s){if(!s){let s=S();try{return await R(e,t,n,r,i,a,o,s.context)}finally{s.dispose()}}let c=M(e);return await c.isAvailable(s)?a===`install`?c.install(t,i,r,s):a===`update`?c.update(t,i,{binaryName:n,npmBunUpdateStrategy:o,packageInstallArgs:r},s):c.uninstall(t,i,{binaryName:n},s):{kind:`unavailable`,reason:`${e} executable is unavailable`,retryable:!1}}async function z(e,t,n,r){if(b(t.type)){let i=_(e,t);return i?R(t.type,i,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,n,r):{kind:`failed`,reason:`package target is missing for ${e.name}`,retryable:!1}}if(n===`update`&&!je(t.type))return{kind:`unsupported`,operation:`update`};if(!t.command)return{kind:`failed`,reason:`install effect is missing for ${e.name}`,retryable:!1};let i=t.type===`script`?pe:ye,a=S();try{return await i.install?.({context:a.context,target:{binaryName:t.binaryName??e.binaryName,effect:{command:t.command,kind:`shell-script`},id:e.name,kind:t.type}})??{kind:`unsupported`,operation:n}}finally{a.dispose()}}function B(e,t){if(e.packageName)return e.packageName;if(!(!t||!b(e.installType)))return _(t,{type:e.installType})}async function V(e,t,n){if(b(e.installType)){let r=B(e,n?.agent);return r?R(e.installType,r,e.binaryName??n?.agent?.binaryName,e.packageInstallArgs,e.packageTargetKind,t,n?.updateStrategy):{kind:`failed`,reason:`package target is missing for ${e.agentName}`,retryable:!1}}return t!==`install`||!e.command?{kind:`unsupported`,operation:t}:await T(e.command)?{kind:`success`,value:void 0}:{kind:`failed`,reason:`${t} command failed for ${e.agentName}`,retryable:!1}}async function H(e,t){if(!b(t.type))return;let n=_(e,t);n&&await R(t.type,n,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`,void 0,J())}async function Be(e){if(!e.selfUpdate)return!1;let t=[e.selfUpdate.command,...e.selfUpdate.fallbackCommands??[]];for(let e of t)if(await T(e.join(` `)))return!0;return!1}function U(e,t){let n={agentName:e.name,installType:t.type,packageName:_(e,t),packageTargetKind:t.packageTargetKind,command:`command`in t?t.command:void 0},r=t.binaryName??(t.type===`deno`?e.binaryName:void 0);return r&&(n.binaryName=r),t.packageInstallArgs?.length&&(n.packageInstallArgs=t.packageInstallArgs),n}async function Ve(e,t){if(p().cancelled)return null;let n=U(e,t);return p().cancelled?null:(await h(n),p().cancelled?(await m(e.name),null):n)}async function W(e,t){return F(async()=>{let n=t?[...t]:await L(e),r;for(let t of n){if(p().cancelled)return{kind:`cancelled`,reason:`install-cancelled`};let n=await z(e,t,`install`);if(n.kind===`success`)return p().cancelled?(await H(e,t),{kind:`cancelled`,reason:`install-cancelled`}):{kind:`success`,value:{installedState:U(e,t)}};let i=X(n);if(i.kind===`cancelled`||i.kind===`timed-out`)return i;if(r=i,p().cancelled)return await H(e,t),{kind:`cancelled`,reason:`install-cancelled`}}return r??{kind:`failed`,reason:`install-failed`,retryable:!1}})}async function He(e){return F(async()=>{let t=await W(e);if(t.kind!==`success`||!t.value.installedState)return Y(t);try{return p().cancelled?(await q(e,t.value.installedState),{success:!1}):(await h(t.value.installedState),p().cancelled?(await m(e.name),await q(e,t.value.installedState),{success:!1}):Y(t))}catch(n){throw await q(e,t.value.installedState),n}})}async function Ue(e,t){return F(async()=>{let{npmBunUpdateStrategy:n}=await I(),r=await L(e),i=t&&b(t.installType)?B(t,e):void 0,a=t?await V(t,`update`,{agent:e,updateStrategy:n}):void 0;if(t&&a?.kind===`success`)return p().cancelled||(await h(t),p().cancelled)?{kind:`cancelled`,reason:`update-cancelled`}:{kind:`success`,value:{installedState:t}};if(a?.kind===`cancelled`||a?.kind===`timed-out`)return X(a);if(!t)for(let t of r){let r=await z(e,t,`update`,n);if(r.kind===`success`){let n=await Ve(e,t);return n?{kind:`success`,value:{installedState:n}}:{kind:`cancelled`,reason:`update-cancelled`}}if(r.kind===`cancelled`||r.kind===`timed-out`)return X(r)}return(!t||!b(t.installType)||i)&&await Be(e)?{kind:`success`,value:{}}:{kind:`failed`,reason:`update-failed`,retryable:!1}})}async function We(e,t){return Y(await Ue(e,t))}async function Ge(e,t){return F(async()=>{let n=[...new Map(t.filter(e=>e.packageName).map(e=>[`${e.packageTargetKind??`package`}:${e.packageName}:${e.packageInstallArgs?.join(` `)??``}`,e])).values()];if(n.length===0)return!1;let r=M(e);return await r.isAvailable()?(await r.updateMany(n,await I())).kind===`success`:!1})}async function Ke(e,t,n){let r=M(e);if(r.getInstalledVersion&&await r.isAvailable())return r.getInstalledVersion(t,n)}async function qe(e,t){if(!b(e.installType))return!1;let n=M(e.installType);if(!n.getInstalledVersion||!await n.isAvailable())return!1;let r=B(e,t);return r?n.probePackagePresence?await n.probePackagePresence(r,e.packageTargetKind)===`absent`:await n.getInstalledVersion(r,e.packageTargetKind)===void 0:!1}async function Je(e){return(await F(async()=>{let t=await g(e.name);return t?G(e,t):{kind:`failed`,reason:`installed-state-missing`,retryable:!1}})).kind===`success`}async function G(e,t){if(!v(t.installType))return await m(e.name),{kind:`success`,value:{installedState:t}};let n=await V(t,`uninstall`,{agent:e});return n.kind===`success`||await qe(t,e)?(await m(e.name),{kind:`success`,value:{installedState:t}}):X(n)}async function K(e,t){let n=await V(t,`install`,{agent:e});return n.kind===`success`?{kind:`success`,value:{installedState:t}}:X(n)}async function q(e,t){if(!v(t.installType)||!b(t.installType))return;let n=B(t,e);n&&await R(t.installType,n,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`,void 0,J())}function J(){let e=p(),t=e.timeoutMs;return{outputPolicy:x(e.outputMode),signal:new AbortController().signal,timeoutMs:t===void 0?5e3:Math.max(10,Math.min(t,5e3))}}function Y(e){return e.kind===`success`?e.value.installedState?{installedState:e.value.installedState,success:!0}:{success:!0}:{success:!1}}function X(e){switch(e.kind){case`success`:return{kind:`success`,value:{}};case`cancelled`:return e;case`timed-out`:return e;case`failed`:return{kind:`failed`,reason:e.reason,retryable:e.retryable};case`unsupported`:return{capability:`provider-${e.operation}`,kind:`unsupported`,reason:e.reason};case`unavailable`:case`indeterminate`:return{kind:`indeterminate`,reason:e.reason}}}async function Z(e){let[t,n,r]=await Promise.all([L(e),g(e.name),ue(e.binaryName)]),i=r!==void 0,[a,o]=await Promise.all([i?Ye(e,n,r):Promise.resolve(void 0),Xe(e,n,t)]);return{agent:e,methods:t,installedState:n,inPath:i,installedVersion:a,latestVersion:o,binaryPath:r,resolvedBinaryPath:await Ee(r),sourceLabel:Me(n),updateLabel:ke(e,n),lifecycle:n?Ae(n.installType):`unmanaged`}}async function Q(e){return Promise.all(e.map(Z))}async function Ye(e,t,n){if(t&&b(t.installType)&&t.packageName){let e=await Ke(t.installType,t.packageName,t.packageTargetKind);if(e)return e}return Oe(e.binaryName,e.versionProbe,void 0,n)}async function Xe(e,t,n){let r=y(e,t,n);if(r)return De(r)}function $(e){return xe(e)}async function Ze(e){let t=$(e);if(t)return{agent:t,inspection:await Z(t)}}async function Qe(){return Q(Ce())}export{Ie as _,Q as a,He as c,q as d,Je as f,F as g,Ge as h,Z as i,W as l,We as m,$ as n,U as o,G as p,Ze as r,L as s,Qe as t,K as u,C as v,w as y};
@@ -1 +0,0 @@
1
- import{t as e}from"./capabilities-CThAG1Si.mjs";export{e as capabilitiesCommand};
@@ -1 +0,0 @@
1
- import{t as e}from"./cli-operation-context-BS5a069W.mjs";export{e as createCliOperationContext};
@@ -1,3 +0,0 @@
1
- import{G as e,J as t,i as n,n as r}from"./output-BRIAY0Oa.mjs";import{i,r as a,t as o}from"./human-BL2-F6cA.mjs";import{t as s}from"./color-iQl4CJwm.mjs";async function c(){return n(r({action:`commands`,data:{commands:e().map(t)},target:{kind:`system`,name:`commands`}}),l)}function l(e){if(!e.data)return;let t=o();console.log(s.bold(`
2
- Quantex Commands
3
- `));for(let n of a(e.data.commands,[{header:`Command`,maxWidth:24,minWidth:8,value:e=>s.cyan(e.name)},{header:`Summary`,minWidth:16,value:e=>e.summary,wrap:!0}],{headerStyle:s.bold,width:t}))console.log(n);console.log();for(let e of i(s.dim(`Contracts: qtx commands --json · Schemas: qtx schema <command>`),{indent:` `,width:t}))console.log(e);console.log()}export{c as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./commands-BJjmzz_A.mjs";export{e as commandsCommand};
@@ -1,3 +0,0 @@
1
- import{d as e,f as t,l as n,p as r,u as i}from"./file-store-XNyirRRY.mjs";import{r as a}from"./registry-vhJzh8dW.mjs";import{i as o,n as s,t as c}from"./output-BRIAY0Oa.mjs";import{t as l}from"./color-iQl4CJwm.mjs";async function u(l,u,f){if(!l)return o(s({action:`config`,data:{action:`list`,config:await e()},target:{kind:`config`}}),d);switch(l){case`get`:{if(!u)return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`Please specify a key`},target:{kind:`config`}}),d);let t=(await e())[u];return o(s({action:`config`,data:{action:`get`,key:u,value:typeof t==`number`||typeof t==`string`?t:void 0},target:{kind:`config`,name:u}}),d)}case`set`:{if(!u||f===void 0)return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`Please specify both key and value`},target:{kind:`config`}}),d);if(u===`defaultPackageManager`&&!n(f))return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`defaultPackageManager must be bun, npm, mise, or uv`},target:{kind:`config`,name:u}}),d);if(u===`npmBunUpdateStrategy`&&!i(f))return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`npmBunUpdateStrategy must be latest-major or respect-semver`},target:{kind:`config`,name:u}}),d);if(u===`selfUpdateChannel`&&f!==`stable`&&f!==`beta`)return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`selfUpdateChannel must be stable or beta`},target:{kind:`config`,name:u}}),d);if(u===`selfUpdateRegistry`&&!a(f))return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`selfUpdateRegistry must be a valid absolute URL`},target:{kind:`config`,name:u}}),d);if([`networkRetries`,`networkTimeoutMs`,`versionCacheTtlHours`].includes(u)){let e=Number.parseInt(f,10);if(!Number.isInteger(e)||e<=0)return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`${u} must be a positive integer`},target:{kind:`config`,name:u}}),d);f=`${e}`}let r={};try{r=await e()}catch{}return r[u]=[`networkRetries`,`networkTimeoutMs`,`versionCacheTtlHours`].includes(u)?Number.parseInt(f,10):u===`selfUpdateRegistry`?a(f):f,await t(r),o(s({action:`config`,data:{action:`set`,key:u,value:r[u]},target:{kind:`config`,name:u}}),d)}case`reset`:return await t(r),o(s({action:`config`,data:{action:`reset`,config:r},target:{kind:`config`}}),d);default:return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,details:{action:l},message:`Unknown action: ${l}`},target:{kind:`config`},warnings:[{code:`AVAILABLE_ACTIONS`,message:`Available actions: get, set, reset`}]}),d)}}function d(e){if(e.error){console.log(l.red(e.error.message));for(let t of e.warnings)console.log(t.message);return}if(e.data)switch(e.data.action){case`list`:console.log(l.bold(`
2
- Current Configuration:
3
- `)),console.log(JSON.stringify(e.data.config,null,2)),console.log();break;case`get`:console.log(e.data.value===void 0?l.gray(`(not set)`):String(e.data.value));break;case`set`:console.log(l.green(`Set ${e.data.key} = ${e.data.value}`));break;case`reset`:console.log(l.green(`Configuration reset to defaults.`));break}}export{u as configCommand};
@@ -1 +0,0 @@
1
- import{a as e}from"./file-store-XNyirRRY.mjs";import{t}from"./schema-BBnWVY6R.mjs";import{i as n,n as r}from"./cli-context-DI43ouBg.mjs";import{b as i,n as a,r as o,t as s,w as c}from"./output-BRIAY0Oa.mjs";import{l}from"./providers-CMuU0Elu.mjs";import{n as u}from"./cli-operation-context-BS5a069W.mjs";import{n as d,o as f}from"./agents-aJwt-ODK.mjs";import{r as p}from"./provider-binding-BmBPz4YE.mjs";import{n as m,t as h}from"./lifecycle-errors-BtlAp_sz.mjs";import{i as g,n as _,r as v,t as y}from"./installation-failure-diagnostics-BJnxrzTa.mjs";import b from"node:process";function x(e,t={}){let i=r(),a=new AbortController,o=new Set,s=t.loadExecutor??B,c=!1,l,u=()=>(l??=s(),l);i.cancelled&&a.abort(`cancelled`);let d=n(async()=>{a.abort(`cancelled`),await Promise.allSettled(o)});return{dispose(){c||(c=!0,d())},async execute(t,n={}){if(c)return M(e,t);if(a.signal.aborted)return j(e,t);let r=S(u,e,t,a.signal,n.emitStartedEvent??!1);o.add(r);try{return await r}finally{o.delete(r)}}}}async function S(e,t,n,i,a){try{let o=await e(),s=r(),c={mode:s.dryRun?`preview`:`apply`,name:n,onMutationStart:a?e=>z(t,e.before.agent):void 0,operation:t,outputPolicy:u(s.outputMode),providerTimeoutMs:s.timeoutMs,resolveAdoption:w,signal:i};return C(t,n,await o.execute(c))}catch(e){return V(t,e),P(t,n,e)}}function C(e,t,n){if(n.kind===`failure`)return n.error.code===`cancelled`?j(e,t):n.error.code===`timed-out`?N(e,t):M(e,t);let r=n.value;return r.kind===`agent-not-found`?s({action:e,error:{code:`AGENT_NOT_FOUND`,details:{input:t},message:`Unknown agent: ${t}`},target:{kind:`agent`,name:t}}):r.kind===`failed`?E(e,t,r.error):T(e,r.value)}async function w(e){let t=l([...e.methods],e.resolvedBinaryPath??e.pathExecutable.path);if(!t)return;let n=p(e.agent,t);if(n)return{binding:n,installedState:f(e.agent,t)}}function T(e,t){let n=t.before.agent;if(t.decision===`already-satisfied`)return D(e,n);if(t.decision===`external-preserved`)return t.compatibility?t.kind===`preview`?k(e,n,`adopt`):A(e,n,t):O(e,n);if(t.kind===`preview`)return k(e,n,t.decision===`reinstall`?`reinstall`:`install`);let r=t.after.installedState;return r?a({action:e,data:F(n,!0,!0,r),target:{kind:`agent`,name:n.name}}):s({action:e,data:F(n,!1,!1),error:R(e,n),target:{kind:`agent`,name:n.name}})}function E(e,t,n){let r=K(n.cause,W);if(r)return s({action:e,...h(r,{kind:`agent`,name:t})});let i=n.sideEffect===`none`?K(n.cause,U):void 0;if(i)return s({action:e,...m(i,c(),{kind:`agent`,name:t})});let a=d(t),o=n.code===`compensation-failed`?n.originCode??n.code:n.code,l=a?.displayName??t,u={reason:n.reason,...n.remediation?{remediation:n.remediation}:{}},f=o===`recording-failed`?{code:`INSTALL_FAILED`,details:v(u,`state-write-failed`),message:`Failed to record verified state for ${l}.`}:o===`verification-failed`?R(e,a??L(t),u):o===`decision-conflict`||o===`decision-indeterminate`?{code:`INSTALL_FAILED`,details:v(u,`decision-indeterminate`),message:_(`Quantex could not determine the installed state of ${l}.`,n.reason)}:{code:`INSTALL_FAILED`,details:v(u,g(n.reason)?y:void 0),message:_(`Failed to install ${l}.`,n.reason)};return s({action:e,data:a?F(a,!1,!1):I(t),error:f,target:{kind:`agent`,name:a?.name??t}})}function D(e,t){return a({action:e,data:F(t,!1,!0),target:{kind:`agent`,name:t.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${t.displayName} is already installed.`}]})}function O(e,t){return a({action:e,data:F(t,!1,!0),target:{kind:`agent`,name:t.name},warnings:[{code:`UNTRACKED_EXISTING_INSTALL`,message:`${t.displayName} is already installed but not tracked by Quantex. Quantex could not safely determine the supported install source, so the existing install remains unmanaged.`}]})}function k(e,t,n){return a({action:e,data:F(t,!1,n===`adopt`),target:{kind:`agent`,name:t.name},warnings:[{code:`DRY_RUN`,message:n===`adopt`?`Dry run: would record the existing ${t.displayName} install in Quantex state.`:n===`reinstall`?`Dry run: would reinstall ${t.displayName} only if its recorded provider target is confirmed absent.`:`Dry run: would install ${t.displayName}.`}]})}function A(e,t,n){let r=n.after.installedState;return r?a({action:e,data:F(t,n.changed,!0,r),target:{kind:`agent`,name:t.name},warnings:[{code:`TRACKED_EXISTING_INSTALL`,message:`${t.displayName} is already installed. Quantex is now tracking the existing install.`}]}):s({action:e,data:F(t,!1,!0),error:R(e,t),target:{kind:`agent`,name:t.name}})}function j(e,t){return s({action:e,data:I(t),error:{code:`CANCELLED`,message:`${e===`ensure`?`Ensure`:`Install`} was cancelled before tracking could complete.`},target:{kind:`agent`,name:t}})}function M(e,t){return s({action:e,data:I(t),error:{code:`INSTALL_FAILED`,message:`Failed to initialize the ${e} lifecycle engine.`},target:{kind:`agent`,name:t}})}function N(e,t){let n=d(t);return s({action:e,data:n?F(n,!1,!1):I(t),error:{code:`INSTALL_FAILED`,message:`Failed to install ${n?.displayName??t}.`},target:{kind:`agent`,name:n?.name??t}})}function P(e,t,n){let r=K(n,W);if(r)return s({action:e,...h(r,{kind:`agent`,name:t})});let i=K(n,U);return i?s({action:e,...m(i,c(),{kind:`agent`,name:t})}):M(e,t)}function F(e,t,n,r){return{agent:{displayName:e.displayName,name:e.name},changed:t,...r?{installState:{installType:r.installType,...r.packageName===void 0?{}:{packageName:r.packageName}}}:{},installed:n}}function I(e){return F(d(e)??L(e),!1,!1)}function L(e){return{displayName:e,name:e}}function R(e,t,n={}){return{code:`INSTALL_FAILED`,details:v(n,`verification-failed`),message:e===`ensure`?`${t.displayName} could not be verified after ensure completed.`:`${t.displayName} could not be verified after installation.`}}function z(e,t){o({action:e,data:{agent:{displayName:t.displayName,name:t.name}},target:{kind:`agent`,name:t.name},type:`started`})}async function B(){return(await import(`./installation-compatibility-BnanRlky.mjs`)).createCoreInstallationCompatibilityExecutor()}function V(e,t){r().logLevel===`debug`&&b.stderr.write(`[quantex:debug] ${e} core engine failure: ${H(t)}\n`)}function H(e){return e instanceof Error&&e.message.trim()?e.message:`unknown failure`}function U(e){if(e instanceof i)return e;if(e instanceof t)return new i(`Failed to read Quantex state file: ${e.message}`,{cause:e});if(G(e))return new i(`Failed to read Quantex state file.`,{cause:e})}function W(t){return e(t)?t:void 0}function G(e){return!!(e&&typeof e==`object`&&`path`in e&&String(e.path)===c())}function K(e,t){let n=new Set,r=[e];for(;r.length>0;){let e=r.shift();if(e==null||n.has(e))continue;n.add(e);let i=t(e);if(i)return i;e instanceof AggregateError&&r.push(...e.errors),typeof e==`object`&&`cause`in e&&r.push(e.cause)}}export{x as createCoreInstallationCliSession};
@@ -1 +0,0 @@
1
- import{t as e}from"./child-process-DzIdysOm.mjs";import{R as t,n}from"./agents-Caewjqrg.mjs";import{t as r}from"./schema-BBnWVY6R.mjs";import{Q as i,b as a}from"./output-BRIAY0Oa.mjs";import{c as o,g as s,s as c,u as l}from"./providers-CMuU0Elu.mjs";import{t as u}from"./cli-operation-context-BS5a069W.mjs";import{t as d}from"./invocation-DXH0mQUH.mjs";import{n as f,t as p}from"./production-observation-BOalSjcd.mjs";import{join as m}from"node:path";function h(e){let t=e.pathExecutable;return{agent:e.agent,methods:e.methods,installedState:e.installedState,inPath:t.present,installedVersion:t.present?t.version:void 0,latestVersion:e.latestVersion,binaryPath:t.present?t.path:void 0,resolvedBinaryPath:t.present?e.resolvedBinaryPath:void 0,sourceLabel:c(e.installedState),updateLabel:o(e.agent,e.installedState),lifecycle:e.installedState?s(e.installedState.installType):`unmanaged`}}function g(e,r=b()){let i=t=>y(e,r.configDir,t),a=async(e,i)=>{let a=n(e.agent.name)??e.agent,o=e.binding&&e.capabilities.length>0?t.getCapabilities(e.binding.providerId):e.capabilities;return{...e,agent:a,capabilities:o,latestVersion:await r.resolveLatestVersion(e.agent,e.installedState,e.methods,x(i)),methods:[...e.methods]}};return{observeRegisteredAgents(){return i(async e=>{let t=await r.core.listAgents({...e,configDir:r.configDir});return Promise.all(t.map(async t=>{let n=await r.core.inspectAgent(t.name,{...e,configDir:r.configDir});if(!n)throw Error(`Core did not resolve registered agent: ${t.name}`);return a(n,e)}))})},resolveAgentObservation(e){return i(async t=>{let n=await r.core.inspectAgent(e,{...t,configDir:r.configDir});return n?a(n,t):void 0})}}}function _(e,t){return g(t).resolveAgentObservation(e)}function v(e){return g(e).observeRegisteredAgents()}async function y(e,t,n){let r=e?void 0:u(),i=e??r?.context;if(!i)throw Error(`CLI read operation context is unavailable.`);try{let e=await d({signal:i.signal},e=>n({...e,timeoutMs:i.timeoutMs}));return e.kind===`failure`&&S(e.error,i.timeoutMs),e.value}catch(e){throw C(e,t)}finally{r?.dispose()}}function b(){return{configDir:f(),core:p({providerRegistry:t}),async resolveLatestVersion(e,t,n,r){let a=l(e,t,[...n]);return a?i(a,`latest`,{context:r}):void 0}}}function x(e){return{registerCleanup:e.registerCleanup,signal:e.signal,timeoutMs:e.timeoutMs}}function S(t,n){throw t.code===`cancelled`?new e({kind:`cancelled`,reason:typeof t.details?.reason==`string`?t.details.reason:void 0}):t.code===`timed-out`?new e({kind:`timed-out`,timeoutMs:typeof t.details?.timeoutMs==`number`?t.details.timeoutMs:n??0}):Error(t.message)}function C(t,n){return t instanceof a||t instanceof e?t:t instanceof r?new a(`Failed to read Quantex state file: ${t.message}`,{cause:t}):w(t,m(n,`state.json`))?new a(`Failed to read Quantex state file.`,{cause:t}):t}function w(e,t){return!e||typeof e!=`object`||!(`path`in e)?!1:String(e.path)===t}export{_ as n,h as r,v as t};
@@ -1,4 +0,0 @@
1
- import{n as e,r as t}from"./messages-D6r2o7w-.mjs";import{W as n,et as r,i,n as a,s as o,u as s}from"./output-BRIAY0Oa.mjs";import{i as c,n as l,r as u,t as d}from"./human-BL2-F6cA.mjs";import{t as f}from"./cli-operation-context-BS5a069W.mjs";import{n as p,t as m}from"./provider-observations-DASRzaj3.mjs";import{t as h}from"./color-iQl4CJwm.mjs";import{r as g,t as _}from"./core-read-observations-BHbMkcGV.mjs";async function v(){let n=f(),c,l,u;try{[c,l,u]=await n.run(()=>Promise.all([m({context:n.context}),o({context:n.context}),_(n.context)]))}finally{n.dispose()}let d=p(c,e=>e.availability.kind===`success`),{brew:h,bun:v,cargo:x,deno:S}=d,{mise:C,npm:w,pip:T,uv:E,winget:D}=d,O=l.latestVersion?r(l.latestVersion,l.currentVersion):!1,k=u.map(e=>({inspection:g(e),observation:e})),A=k.filter(({inspection:e})=>e.inPath).map(({inspection:e})=>({displayName:e.agent.displayName,installedVersion:e.installedVersion,latestVersion:e.latestVersion,lifecycle:e.lifecycle,outdated:!!(e.installedVersion&&e.latestVersion&&e.installedVersion!==e.latestVersion),sourceLabel:e.sourceLabel})),j=[],M=`docs/runbooks/quantex-troubleshooting.md`,N=`docs/runbooks/release-and-self-upgrade-debugging.md`;if(!v&&!w&&!h&&!x&&!S&&!C&&!T&&!E&&!D&&j.push({blocking:!0,category:`installers`,code:`NO_MANAGED_INSTALLER`,docsRef:M,message:`No managed installer found. Install bun, npm, brew, cargo, deno, mise, pip, uv, or winget before relying on managed lifecycle operations.`,severity:`warning`,subject:{kind:`system`},suggestedAction:`restore-managed-installer`,suggestedCommands:[]}),(l.installSource===`bun`&&!v||l.installSource===`npm`&&!w)&&j.push({blocking:!0,category:`self`,code:`SELF_INSTALLER_MISSING`,docsRef:N,message:`Quantex CLI is tracked as a ${l.installSource} install, but ${l.installSource} is not available in PATH. Reinstall that package manager or reinstall Quantex from a supported source.`,severity:`warning`,subject:{kind:`self`,name:`quantex`},suggestedAction:`restore-self-installer`,suggestedCommands:b(l.installSource,l.updateChannel)}),l.canAutoUpdate||j.push({blocking:!1,category:`self`,code:`SELF_AUTO_UPDATE_UNAVAILABLE`,docsRef:N,message:`Quantex CLI cannot auto-update from install source "${l.installSource}". Reinstall via bun, npm, or the standalone binary if you want \`quantex upgrade\` support.`,severity:`warning`,subject:{kind:`self`,name:`quantex`},suggestedAction:`reinstall-self-with-auto-update-source`,suggestedCommands:[]}),O&&l.recommendedUpgradeCommand){let e=s(l);j.push({blocking:!1,category:`self`,code:`SELF_UPDATE_AVAILABLE`,docsRef:N,message:e?`Quantex CLI ${l.currentVersion} is behind ${l.latestVersion}. Run ${l.recommendedUpgradeCommand} or follow: ${e}`:`Quantex CLI ${l.currentVersion} is behind ${l.latestVersion}. Run ${l.recommendedUpgradeCommand}.`,severity:`warning`,subject:{kind:`self`,name:`quantex`},suggestedAction:`run-self-upgrade`,suggestedCommands:[l.recommendedUpgradeCommand]})}for(let{inspection:n,observation:r}of k.filter(e=>e.inspection.inPath)){if(r.observation.drift.kind===`untracked`&&j.push({blocking:!1,category:`agent`,code:`AGENT_UNTRACKED_IN_PATH`,docsRef:M,message:`${n.agent.displayName} is detected on disk but not tracked as a managed Quantex install. Use \`quantex inspect ${n.agent.name} --json\` to confirm the source, then reinstall through Quantex if you want managed lifecycle operations.`,severity:`warning`,subject:{kind:`agent`,name:n.agent.name},suggestedAction:`inspect-agent-install-source`,suggestedCommands:[`quantex inspect ${n.agent.name} --json`,`quantex install ${n.agent.name}`]}),!(n.installedVersion&&n.latestVersion&&n.installedVersion!==n.latestVersion)||n.lifecycle===`managed`)continue;let i=e(n.agent,n.agent.selfUpdate?`self-update`:`manual-hint`)??t(n.agent);j.push({blocking:!1,category:`agent`,code:`AGENT_MANUAL_UPDATE_REQUIRED`,docsRef:M,message:`${n.agent.displayName} ${n.installedVersion} is behind ${n.latestVersion}, but the current source is ${n.sourceLabel}. ${i}`,severity:`warning`,subject:{kind:`agent`,name:n.agent.name},suggestedAction:n.agent.selfUpdate?`run-agent-self-update`:`follow-manual-agent-update`,suggestedCommands:n.agent.selfUpdate?[n.agent.selfUpdate.command.join(` `)]:[]})}return i(a({action:`doctor`,data:{agents:A,issues:j,installers:d,self:{canAutoUpdate:l.canAutoUpdate,currentVersion:l.currentVersion,installSource:l.installSource,latestVersion:l.latestVersion,outdated:!!O,recoveryHint:O?s(l):void 0}},target:{kind:`system`,name:`doctor`}}),y)}function y(e){if(!e.data)return;let t=d();console.log(h.bold(`
2
- Quantex CLI Environment Check
3
- `));let n=Object.entries(e.data.installers).map(([e,t])=>({available:t,name:e}));console.log(h.bold(`Managed Installers
4
- `));for(let e of u(n,[{header:`Installer`,value:e=>e.name},{header:`Status`,value:e=>e.available?h.green(`available`):h.red(`not found`)}],{headerStyle:h.bold,width:t}))console.log(e);let r=[{label:`Version`,value:e.data.self.currentVersion},{label:`Source`,value:e.data.self.installSource},{label:`Auto-update`,value:e.data.self.canAutoUpdate?h.green(`supported`):h.yellow(`unsupported`)},...e.data.self.latestVersion?[{label:`Latest`,value:`${e.data.self.latestVersion}${e.data.self.outdated?h.yellow(` (update available)`):``}`}]:[],...e.data.self.recoveryHint?[{label:`Recovery`,value:e.data.self.recoveryHint}]:[]];console.log(`\n${h.bold(`Quantex CLI`)}\n`);for(let e of l(r,{labelStyle:h.bold,width:t}))console.log(e);if(console.log(`\n${h.bold(`Installed Agents`)}\n`),e.data.agents.length===0)console.log(h.dim(` No agents installed`));else for(let n of u(e.data.agents,[{header:`Agent`,minWidth:8,value:e=>e.displayName},{header:`Version`,maxWidth:24,value:e=>e.outdated&&e.latestVersion?h.yellow(`${e.installedVersion??`unknown`} → ${e.latestVersion}`):e.installedVersion??`unknown`},{header:`Lifecycle`,optional:!0,priority:2,value:e=>e.lifecycle},{header:`Source`,optional:!0,priority:1,value:e=>h.dim(e.sourceLabel)}],{headerStyle:h.bold,width:t}))console.log(n);if(console.log(`\n${h.bold(`Issues`)}\n`),e.data.issues.length===0)console.log(h.green(` No issues found.`));else for(let n of e.data.issues){for(let e of c(h.yellow(n.message),{continuationIndent:` `,indent:` - `,width:t}))console.log(e);if(n.suggestedCommands.length>0)for(let e of c(h.dim(`Next: ${n.suggestedCommands.join(` | `)}`),{indent:` `,width:t}))console.log(e)}console.log()}function b(e,t){let r=t===`beta`?`beta`:`latest`;return e===`bun`?[`bun add -g ${n}@${r}`]:e===`npm`?[`npm install -g ${n}@${r}`]:[]}export{v as doctorCommand};
@@ -1 +0,0 @@
1
- import{a as e}from"./file-store-XNyirRRY.mjs";import{i as t,n,r,t as i}from"./output-BRIAY0Oa.mjs";import{l as a}from"./providers-CMuU0Elu.mjs";import{t as o}from"./color-iQl4CJwm.mjs";import{g as s,n as c}from"./agents-aJwt-ODK.mjs";import{t as l}from"./agent-installation-sRbwS1dk.mjs";import{n as u}from"./lifecycle-observations-CqYFJfMT.mjs";import{t as d}from"./lifecycle-errors-BtlAp_sz.mjs";import{a as f,i as p,n as m,r as h}from"./user-output-DLbKXqDm.mjs";import{i as g,n as _,r as v,t as y}from"./installation-failure-diagnostics-BJnxrzTa.mjs";import{n as b,r as x}from"./installation-routing-n62Du1fV.mjs";import{t as S}from"./unmanaged-install-compatibility-BJBsLVDL.mjs";async function C(e){return await w(e,x(`ensure`))}async function w(n,r){if(b(`ensure`,r),r.engine===`core`){let e=await S(n);if(e)return t(k(e),j);let{createCoreInstallationCliSession:r}=await import(`./core-installation-cli-COYAy55w.mjs`),i=r(`ensure`);try{return t(await i.execute(n,{emitStartedEvent:!0}),j)}finally{i.dispose()}}if(!c(n)||m())return T(n);try{return await s(()=>T(n))}catch(r){if(e(r))return t(i({action:`ensure`,...d(r,{kind:`agent`,name:n}),target:{kind:`agent`,name:n}}),j);throw r}}async function T(n){let r=await u(n);if(!r)return t(i({action:`ensure`,error:{code:`AGENT_NOT_FOUND`,details:{input:n},message:`Unknown agent: ${n}`},target:{kind:`agent`,name:n}}),j);let{agent:o}=r,s=r.pathExecutable.present,c=r.installedState,f=s&&!c?a(r.methods,r.resolvedBinaryPath??r.pathExecutable.path):void 0;if(s&&!c&&!f)return t(k(o),j);let p=c&&s?`satisfied`:f?`adopt`:`install`;if(m())return t(p===`satisfied`?O(o):D(o,p===`adopt`,!!c),j);p!==`satisfied`&&E(o);try{return t(A(o,p,await l({adoptableMethod:f,agent:o,observation:{inPath:s,installedState:c,lifecycle:r.observation,methods:r.methods},operation:`ensure`,route:p})),j)}catch(n){if(e(n))return t(i({action:`ensure`,data:{agent:{displayName:o.displayName,name:o.name},changed:!1,installed:s},...d(n,{kind:`agent`,name:o.name})}),j);throw n}}function E(e){r({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name}},target:{kind:`agent`,name:e.name},type:`started`})}function D(e,t,r){return n({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:t},target:{kind:`agent`,name:e.name},warnings:[{code:`DRY_RUN`,message:t?`Dry run: would record the existing ${e.displayName} install in Quantex state.`:r?`Dry run: would reinstall ${e.displayName} only if its recorded provider target is confirmed absent.`:`Dry run: would install ${e.displayName}.`}]})}function O(e){return n({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!0},target:{kind:`agent`,name:e.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${e.displayName} is already installed.`}]})}function k(e){return n({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!0},target:{kind:`agent`,name:e.name},warnings:[{code:`UNTRACKED_EXISTING_INSTALL`,message:`${e.displayName} is already installed but not tracked by Quantex. Quantex could not safely determine the supported install source, so the existing install remains unmanaged.`}]})}function A(e,t,r){if(r.kind===`success`){if(t===`satisfied`)return O(e);let i=r.value.value.installedState;return n({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name},changed:r.value.changed,installState:r.value.changed?{installType:i.installType,packageName:i.packageName}:void 0,installed:!0},target:{kind:`agent`,name:e.name},warnings:t===`adopt`?[{code:`TRACKED_EXISTING_INSTALL`,message:`${e.displayName} is already installed. Quantex is now tracking the existing install.`}]:[]})}let a=`reason`in r&&r.reason?{reason:r.reason}:{},o=`reason`in r&&!!r.reason?.endsWith(`-after-ensure`),s=r.kind===`cancelled`?{code:`CANCELLED`,message:`Ensure was cancelled before tracking could complete.`}:r.kind===`failed`&&r.reason===`receipt-write-failed`?{code:`INSTALL_FAILED`,details:v(a,`state-write-failed`),message:`Failed to record verified state for ${e.displayName}.`}:o&&(r.kind===`failed`||r.kind===`indeterminate`)?{code:`INSTALL_FAILED`,details:v(a,`verification-failed`),message:`${e.displayName} could not be verified after ensure completed.`}:r.kind===`indeterminate`?{code:`INSTALL_FAILED`,details:v(a,`decision-indeterminate`),message:_(`Quantex could not determine the installed state of ${e.displayName}.`,a.reason)}:{code:`INSTALL_FAILED`,details:v(a,g(a.reason)?y:void 0),message:_(`Failed to install ${e.displayName}.`,a.reason)};return i({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!1},error:s,target:{kind:`agent`,name:e.name}})}function j(e){if(e.error){h(o.red(e.error.message));return}if(e.data){if(e.warnings.length>0){for(let t of e.warnings){if(t.code===`TRACKED_EXISTING_INSTALL`){p(o.green(t.message));continue}if(t.code===`DRY_RUN`){f(o.cyan(t.message));continue}f(o.yellow(t.message))}return}if(e.data.changed){p(o.cyan(`Installing ${e.data.agent.displayName}...`)),p(o.green(`${e.data.agent.displayName} is now installed.`));return}p(o.green(`${e.data.agent.displayName} is already installed.`))}}export{w as n,C as t};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./ensure-BNQhG8iC.mjs";export{t as ensureCommand,e as ensureCommandWithRoute};
@@ -1 +0,0 @@
1
- import{r as e}from"./errors-fT9JApTf.mjs";export{e as getExitCodeForResult};
@@ -1,2 +0,0 @@
1
- import{i as e,n as t,o as n,r}from"./child-process-DzIdysOm.mjs";import{n as i,t as a}from"./executable-search-paths-Do0aoA1z.mjs";import{r as o}from"./registry-vhJzh8dW.mjs";import{a as s,i as c,n as l,o as u,r as d}from"./schema-BBnWVY6R.mjs";import{constants as f,mkdirSync as p,writeFileSync as m}from"node:fs";import{dirname as ee,join as h}from"node:path";import g from"node:process";import{access as _,mkdir as v,readFile as y,rename as b,rm as x,writeFile as S}from"node:fs/promises";import{homedir as C}from"node:os";function te(){return{env:g.env,homeDir:C(),platform:g.platform}}async function w(i,a){try{let t=n([g.platform===`win32`?`where`:`which`,i],{detached:a!==void 0&&g.platform!==`win32`}),{exitCode:o,stdout:s}=a?await e(t,a):await r(t);return o===0&&s.trim().split(`
2
- `)[0]?.trim()||void 0}catch(e){if(t(e))throw e;return}}async function T(e,t){let n=a(e,t);for(let e of i(t))for(let t of n){let n=h(e,t);try{return await _(n,f.X_OK),n}catch{}}}async function E(e,t){let n=await w(e,t);if(n)return n;if(!t?.signal.aborted)return T(e,te())}async function D(e,t){return await E(e,t)!==void 0}const O={defaultPackageManager:`bun`,networkRetries:2,networkTimeoutMs:1e4,npmBunUpdateStrategy:`latest-major`,selfUpdateChannel:`stable`,selfUpdateRegistry:void 0,versionCacheTtlHours:6};function k(){return h(g.env.HOME||g.env.USERPROFILE||C(),`.quantex`)}function A(){return h(k(),`config.json`)}async function ne(){let e={...O,...await N()};return{...e,defaultPackageManager:j(e.defaultPackageManager)?e.defaultPackageManager:`bun`,networkRetries:P(e.networkRetries,2),networkTimeoutMs:P(e.networkTimeoutMs,1e4),npmBunUpdateStrategy:e.npmBunUpdateStrategy===`respect-semver`?`respect-semver`:`latest-major`,selfUpdateChannel:e.selfUpdateChannel===`beta`?`beta`:`stable`,selfUpdateRegistry:typeof e.selfUpdateRegistry==`string`?o(e.selfUpdateRegistry):void 0,versionCacheTtlHours:P(e.versionCacheTtlHours,6)}}function j(e){return e===`bun`||e===`mise`||e===`npm`||e===`uv`}function re(e){return e===`latest-major`||e===`respect-semver`}async function M(e){await v(k(),{recursive:!0}),await S(A(),`${JSON.stringify(e,null,2)}\n`,`utf8`)}async function N(){try{let e=await y(A(),`utf8`),t=JSON.parse(e);return F(t)?t:{}}catch{return{}}}function P(e,t){if(typeof e==`number`&&Number.isInteger(e)&&e>0)return e;if(typeof e==`string`){let t=Number.parseInt(e,10);if(Number.isInteger(t)&&t>0)return t}return t}function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var I=class extends Error{lockPath;resource;constructor(e,t){super(`Another quantex process is already using the ${e} lock.`),this.name=`ResourceLockError`,this.lockPath=t,this.resource=e}};function L(e){return e instanceof I}function R(e,t){let n=t.map(e=>e.trim().replaceAll(/[^\w.-]+/g,`-`).replaceAll(/-+/g,`-`).replaceAll(/^-|-$/g,``)).filter(Boolean),r=n.length>0?n:[`default`],i=r.slice(0,-1),a=`${r.at(-1)}.lock`;return h(e,`locks`,...i,a)}async function z(e,t){let n=R(e,t.scope);return await v(ee(n),{recursive:!0}),await V(t.resource,n),async()=>{await x(n,{force:!0,recursive:!0})}}async function B(e){return await z(k(),e)}async function V(e,t){try{p(t,{recursive:!1}),H(t);return}catch(e){if(!q(e))throw e}if(!await U(t))throw new I(e,t);try{p(t,{recursive:!1}),H(t)}catch(n){throw q(n)?new I(e,t):n}}function H(e){m(h(e,`owner.json`),`${JSON.stringify({pid:g.pid,createdAt:new Date().toISOString()})}\n`,`utf8`)}async function U(e){let t;try{t=await W(e)}catch{return!1}return t&&K(t.pid)?!1:(await x(e,{force:!0,recursive:!0}),!0)}async function W(e){let t=Date.now()+100;for(;Date.now()<t;){let t=await G(e);if(t)return t;await new Promise(e=>setTimeout(e,2))}return await G(e)}async function G(e){try{let t=await y(h(e,`owner.json`),`utf8`),n=JSON.parse(t);return typeof n.pid==`number`&&Number.isInteger(n.pid)&&n.pid>0?{pid:n.pid}:void 0}catch(e){if(J(e))return;throw e}}function K(e){try{return g.kill(e,0),!0}catch(e){return(typeof e==`object`&&e&&`code`in e?e.code:void 0)===`EPERM`}}function q(e){return typeof e==`object`&&!!e&&`code`in e&&e.code===`EEXIST`}function J(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;return t===`ENOENT`||t===`ENOTDIR`}async function Y(e,t,n){let r=await z(e,t);try{return await n()}finally{await r()}}async function ie(e,t){return await Y(k(),e,t)}var ae=class extends Error{backupFilePath;primaryError;recoveryError;constructor(e){super(`Failed to restore the original Quantex state after a persistence failure.`,{cause:e.recoveryError}),this.name=`StateRecoveryError`,this.backupFilePath=e.backupFilePath,this.primaryError=e.primaryError,this.recoveryError=e.recoveryError}},oe=class{constructor(e){this.options=e}async load(){let e=await this.readOptional(this.options.stateFilePath);return e===void 0?void 0:X(e)}async save(e){let t=c(e);if(t.source!==`current`)throw Error(`Refusing to persist an unversioned state document.`);let{backupFilePath:n,directoryPath:r,stateFilePath:i,tempFileSuffix:a}=this.options,o=`${n}.tmp-${a}`,s=`${i}.tmp-${a}`,l=`${i}.restore-${a}`,u=await this.readOptional(i),d=u===void 0?void 0:c(X(u)),f=`${JSON.stringify(t.document,null,2)}\n`,p=!1;await this.options.fileSystem.makeDirectory(r);try{u!==void 0&&d?.source===`legacy`&&(await this.options.fileSystem.writeText(o,u),await this.validateBackup(o,u),await this.options.fileSystem.rename(o,n),await this.validateBackup(n,u)),await this.options.fileSystem.writeText(s,f),Z(await this.options.fileSystem.readText(s)),await this.options.fileSystem.rename(s,i),p=!0,Z(await this.options.fileSystem.readText(i))}catch(e){let t;try{p&&await this.restoreOriginal(u,l,i)}catch(e){t=e}finally{await this.removeTemporaryFiles(o,s,l)}throw t===void 0?e:new ae({backupFilePath:n,primaryError:e,recoveryError:t})}await this.removeTemporaryFiles(o,s,l)}async readOptional(e){try{return await this.options.fileSystem.readText(e)}catch(e){if(Q(e))return;throw e}}async validateBackup(e,t){let n=await this.options.fileSystem.readText(e);if(n!==t)throw Error(`State migration backup does not match the original state.`);c(X(n))}async restoreOriginal(e,t,n){if(e===void 0){if(await this.options.fileSystem.remove(n),await this.readOptional(n)!==void 0)throw Error(`New state remained after rollback removal.`);return}await this.options.fileSystem.writeText(t,e),await this.options.fileSystem.rename(t,n);let r=await this.options.fileSystem.readText(n);if(r!==e)throw Error(`Restored state does not match the original state.`);c(X(r))}async removeTemporaryFiles(...e){await Promise.all(e.map(e=>this.options.fileSystem.remove(e).catch(()=>void 0)))}},se=class{constructor(e){this.persistence=e}async loadDocument(){let e=await this.persistence.load();return e===void 0?l():c(e).document}async loadProjection(){return s(await this.loadDocument())}async saveDocument(e){let t=c(e);if(t.source!==`current`)throw Error(`State documents must use the current state schema.`);await this.persistence.save(t.document)}async saveProjection(e){let t=u(await this.loadDocument(),e);await this.saveDocument(t)}async getReceipt(e){return(await this.loadDocument()).lifecycleReceipts[e]}async setReceipt(e){let t=d(e.targetId,e),n=await this.loadDocument(),r=c({...n,lifecycleReceipts:{...n.lifecycleReceipts,[t.targetId]:t}});if(r.source!==`current`)throw Error(`Verified lifecycle evidence must use the current state schema.`);await this.saveDocument(r.document)}async setAgentLifecycleEvidence(e,t){let n=d(t.targetId,t);if(e.agentName!==n.targetId)throw Error(`Installed agent state and lifecycle receipt must target the same agent.`);let r=await this.loadDocument(),i=c({...r,installedAgents:{...r.installedAgents,[e.agentName]:e},lifecycleReceipts:{...r.lifecycleReceipts,[n.targetId]:n}});if(i.source!==`current`)throw Error(`Verified lifecycle evidence must use the current state schema.`);await this.saveDocument(i.document)}async removeReceipt(e){let t=await this.loadDocument(),n={...t.lifecycleReceipts};delete n[e],await this.saveDocument({...t,lifecycleReceipts:n})}};function X(e){return JSON.parse(e)}function Z(e){if(c(X(e)).source!==`current`)throw Error(`Persisted state validation did not produce a current document.`)}function Q(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;return t===`ENOENT`||t===`ENOTDIR`}const ce={async makeDirectory(e){await v(e,{recursive:!0})},async readText(e){return y(e,`utf8`)},async remove(e){await x(e,{force:!0})},async rename(e,t){await b(e,t)},async writeText(e,t){await S(e,t,`utf8`)}};function $(e){return h(e,`state.json`)}function le(e,t=String(g.pid)){let n=$(e);return new se(new oe({backupFilePath:`${n}.v1.bak`,directoryPath:e,fileSystem:ce,stateFilePath:n,tempFileSuffix:t}))}export{L as a,A as c,ne as d,M as f,E as h,z as i,j as l,D as m,$ as n,ie as o,O as p,B as r,k as s,le as t,re as u};
@@ -1,3 +0,0 @@
1
- import{i as e,n as t,t as n}from"./output-BRIAY0Oa.mjs";import{a as r,o as i}from"./providers-CMuU0Elu.mjs";import{n as a,r as o,t as s}from"./human-BL2-F6cA.mjs";import{t as c}from"./color-iQl4CJwm.mjs";import{n as l,r as u}from"./core-read-observations-BHbMkcGV.mjs";async function d(a){let o=await l(a);if(!o)return e(n({action:`info`,error:{code:`AGENT_NOT_FOUND`,details:{input:a},message:`Unknown agent: ${a}`},target:{kind:`agent`,name:a}}),f);let{agent:s}=o,c=u(o),d=s.selfUpdate?[s.selfUpdate.command,...s.selfUpdate.fallbackCommands??[]].map(e=>e.join(` `)):[];return e(t({action:`info`,data:{agent:{aliases:s.lookupAliases??[],binaryName:s.binaryName,displayName:s.displayName,installMethods:c.methods.map(e=>({command:r(s,e),label:i(e),type:e.type})),name:s.name,packageName:s.packages?.npm,selfUpdateCommands:d},inspection:{binaryPath:c.binaryPath,installed:c.inPath,installedVersion:c.installedVersion,latestVersion:c.latestVersion,lifecycle:c.lifecycle,sourceLabel:c.inPath?c.sourceLabel:void 0}},target:{kind:`agent`,name:s.name}}),f)}function f(e){if(e.error){console.log(c.red(e.error.message));return}if(!e.data)return;let t=s();console.log(c.bold(`\n${e.data.agent.displayName}\n`));let n=[{label:`Name`,value:e.data.agent.name},{label:`Aliases`,value:e.data.agent.aliases.join(`, `)||`—`},{label:`Package`,value:e.data.agent.packageName??`—`},{label:`Binary`,value:e.data.agent.binaryName},{label:`Self update`,value:e.data.agent.selfUpdateCommands.join(` · `)||`—`},{label:`Installed`,value:e.data.inspection.installed?c.green(`yes`):c.red(`no`)},...e.data.inspection.sourceLabel?[{label:`Source`,value:e.data.inspection.sourceLabel}]:[],...e.data.inspection.installed?[{label:`Lifecycle`,value:e.data.inspection.lifecycle}]:[],...e.data.inspection.installedVersion?[{label:`Version`,value:e.data.inspection.installedVersion}]:[],...e.data.inspection.latestVersion?[{label:`Latest`,value:e.data.inspection.latestVersion}]:[],...e.data.inspection.binaryPath?[{label:`Path`,value:e.data.inspection.binaryPath}]:[]];for(let e of a(n,{labelStyle:c.bold,width:t}))console.log(e);if(console.log(c.bold(`
2
- Install Methods
3
- `)),e.data.agent.installMethods.length===0)console.log(c.dim(` No managed install methods`));else for(let n of o(e.data.agent.installMethods,[{header:`Method`,maxWidth:24,minWidth:8,value:e=>c.green(e.label)},{header:`Command`,minWidth:16,value:e=>e.command,wrap:!0}],{headerStyle:c.bold,width:t}))console.log(n);console.log()}export{d as infoCommand};
@@ -1 +0,0 @@
1
- import{t as e}from"./inspect-DhGE_G13.mjs";export{e as inspectCommand};
@@ -1,5 +0,0 @@
1
- import{t as e}from"./messages-D6r2o7w-.mjs";import{i as t,n,t as r}from"./output-BRIAY0Oa.mjs";import{a as i,f as a,o}from"./providers-CMuU0Elu.mjs";import{n as s,r as c,t as l}from"./human-BL2-F6cA.mjs";import{t as u}from"./color-iQl4CJwm.mjs";import{a as d}from"./user-output-DLbKXqDm.mjs";import{n as f,r as p}from"./core-read-observations-BHbMkcGV.mjs";async function m(e){let a=await f(e);if(!a)return t(r({action:`inspect`,error:{code:`AGENT_NOT_FOUND`,details:{input:e},message:`Unknown agent: ${e}`},target:{kind:`agent`,name:e}}),g);let{agent:s}=a,c=p(a),l=s.selfUpdate?[s.selfUpdate.command,...s.selfUpdate.fallbackCommands??[]].map(e=>e.join(` `)):[];return t(n({action:`inspect`,data:{agent:{aliases:s.lookupAliases??[],binaryName:s.binaryName,displayName:s.displayName,installMethods:c.methods.map(e=>({command:i(s,e),label:o(e),type:e.type})),name:s.name,packageName:s.packages?.npm,selfUpdateCommands:l},capabilities:{canAutoInstall:c.methods.length>0,canAutoUninstall:c.inPath&&c.lifecycle===`managed`,canRun:c.inPath,canSelfUpdate:l.length>0},inspection:{binaryPath:c.binaryPath,installed:c.inPath,installedVersion:c.installedVersion,latestVersion:c.latestVersion,lifecycle:c.lifecycle,sourceLabel:c.inPath?c.sourceLabel:void 0,updateLabel:c.updateLabel}},target:{kind:`agent`,name:s.name},warnings:h(s,c.installedState)}),g)}function h(t,n){let r=a(t,n);return r?[e(t,r)]:[]}function g(e){if(e.error){console.log(u.red(e.error.message));return}if(!e.data)return;let t=l();console.log(u.bold(`\n${e.data.agent.displayName}\n`));let n=[{label:`Name`,value:e.data.agent.name},{label:`Aliases`,value:e.data.agent.aliases.join(`, `)||`—`},{label:`Package`,value:e.data.agent.packageName??`—`},{label:`Binary`,value:e.data.agent.binaryName},{label:`Installed`,value:e.data.inspection.installed?u.green(`yes`):u.red(`no`)},{label:`Update mode`,value:e.data.inspection.updateLabel},{label:`Self update`,value:e.data.agent.selfUpdateCommands.join(` · `)||`—`},...e.data.inspection.sourceLabel?[{label:`Source`,value:e.data.inspection.sourceLabel}]:[],...e.data.inspection.installedVersion?[{label:`Version`,value:e.data.inspection.installedVersion}]:[],...e.data.inspection.latestVersion?[{label:`Latest`,value:e.data.inspection.latestVersion}]:[],...e.data.inspection.binaryPath?[{label:`Path`,value:e.data.inspection.binaryPath}]:[]];for(let e of s(n,{labelStyle:u.bold,width:t}))console.log(e);let r=[{capability:`Auto install`,value:e.data.capabilities.canAutoInstall},{capability:`Self update`,value:e.data.capabilities.canSelfUpdate},{capability:`Auto uninstall`,value:e.data.capabilities.canAutoUninstall},{capability:`Runnable`,value:e.data.capabilities.canRun}];console.log(u.bold(`
2
- Capabilities
3
- `));for(let e of c(r,[{header:`Capability`,minWidth:8,value:e=>e.capability},{header:`Available`,value:e=>e.value?u.green(`yes`):u.dim(`no`)}],{headerStyle:u.bold,width:t}))console.log(e);if(console.log(u.bold(`
4
- Install Methods
5
- `)),e.data.agent.installMethods.length===0)console.log(u.dim(` No managed install methods`));else for(let n of c(e.data.agent.installMethods,[{header:`Method`,maxWidth:24,minWidth:8,value:e=>u.green(e.label)},{header:`Command`,minWidth:16,value:e=>e.command,wrap:!0}],{headerStyle:u.bold,width:t}))console.log(n);console.log();for(let t of e.warnings)d(u.yellow(t.message))}export{m as t};
@@ -1 +0,0 @@
1
- import{a as e}from"./file-store-XNyirRRY.mjs";import{n as t}from"./cli-context-DI43ouBg.mjs";import{i as n,n as r,r as i,t as a}from"./output-BRIAY0Oa.mjs";import{l as o}from"./providers-CMuU0Elu.mjs";import{t as s}from"./color-iQl4CJwm.mjs";import{g as c,n as l}from"./agents-aJwt-ODK.mjs";import{t as u}from"./agent-installation-sRbwS1dk.mjs";import{n as d}from"./lifecycle-observations-CqYFJfMT.mjs";import{t as f}from"./lifecycle-errors-BtlAp_sz.mjs";import{a as p,i as m,n as h,r as g}from"./user-output-DLbKXqDm.mjs";import{i as _,n as v,r as y,t as b}from"./installation-failure-diagnostics-BJnxrzTa.mjs";import{n as x,r as S}from"./installation-routing-n62Du1fV.mjs";import{t as C}from"./unmanaged-install-compatibility-BJBsLVDL.mjs";import{o as w}from"./lifecycle-policy-B5rqTthw.mjs";async function T(e){return await E(e,S(`install`))}async function E(e,t){x(`install`,t);let n=t.engine===`core`?(await import(`./core-installation-cli-COYAy55w.mjs`)).createCoreInstallationCliSession(`install`):void 0;try{return await D(e,n)}finally{n?.dispose()}}async function D(e,o){let s=w(Array.isArray(e)?e:[e]);if(s.length<=1)return n(await O(s[0],{emitStartedEvent:!0},o),z);i({action:`install`,data:{scope:`batch`},target:{kind:`agent`},type:`started`});let c=[];for(let e of s){if(t().cancelled)break;let n=F(e,await O(e,{},o));if(c.push(n),i({action:`install`,data:n,target:{kind:`agent`,name:n.agent.name},type:`progress`}),t().cancelled)break}let l={results:c,scope:`batch`,summary:L(c)};return t().cancelled&&c.length<s.length?n(a({action:`install`,data:l,error:{code:`CANCELLED`,message:`Install was cancelled before all agents could be installed.`},target:{kind:`agent`}}),B):n(c.some(e=>!e.ok)?a({action:`install`,data:l,error:R(c),target:{kind:`agent`}}):r({action:`install`,data:l,target:{kind:`agent`}}),B)}async function O(n,r={},i){if(i){let e=await C(n);return e?N(e):await i.execute(n,r)}if(t().cancelled||!l(n)||h())return k(n,r);try{return await c(()=>k(n,r))}catch(t){if(e(t))return a({action:`install`,...f(t,{kind:`agent`,name:n}),target:{kind:`agent`,name:n}});throw t}}async function k(n,r){if(t().cancelled)return a({action:`install`,error:{code:`CANCELLED`,message:`Install was cancelled before it could start.`},target:{kind:`agent`,name:n}});let i=await d(n);if(!i)return a({action:`install`,error:{code:`AGENT_NOT_FOUND`,details:{input:n},message:`Unknown agent: ${n}`},target:{kind:`agent`,name:n}});let{agent:s}=i,c=i.pathExecutable.present,l=i.installedState,p=c&&!l?o(i.methods,i.resolvedBinaryPath??i.pathExecutable.path):void 0;if(c&&!l&&!p)return N(s);let m=l&&c?`satisfied`:p?`adopt`:`install`;if(h())return m===`satisfied`?j(s):M(s,m===`adopt`,!!l);m!==`satisfied`&&P(s,r.emitStartedEvent);try{return A(s,m,await u({adoptableMethod:p,agent:s,observation:{inPath:c,installedState:l,lifecycle:i.observation,methods:i.methods},operation:`install`,route:m}))}catch(t){if(e(t))return a({action:`install`,data:{agent:{displayName:s.displayName,name:s.name},changed:!1,installed:c},...f(t,{kind:`agent`,name:s.name})});throw t}}function A(e,t,n){if(n.kind===`success`){if(t===`satisfied`)return j(e);let i=n.value.value.installedState;return r({action:`install`,data:{agent:{displayName:e.displayName,name:e.name},changed:n.value.changed,installState:{installType:i.installType,packageName:i.packageName},installed:!0},target:{kind:`agent`,name:e.name},warnings:t===`adopt`?[{code:`TRACKED_EXISTING_INSTALL`,message:`${e.displayName} is already installed. Quantex is now tracking the existing install.`}]:[]})}let i=`reason`in n&&n.reason?{reason:n.reason}:{},o=`reason`in n&&!!n.reason?.endsWith(`-after-install`),s=n.kind===`cancelled`?{code:`CANCELLED`,message:`Install was cancelled before tracking could complete.`}:n.kind===`failed`&&n.reason===`receipt-write-failed`?{code:`INSTALL_FAILED`,details:y(i,`state-write-failed`),message:`Failed to record verified state for ${e.displayName}.`}:o&&(n.kind===`failed`||n.kind===`indeterminate`)?{code:`INSTALL_FAILED`,details:y(i,`verification-failed`),message:`${e.displayName} could not be verified after installation.`}:n.kind===`indeterminate`?{code:`INSTALL_FAILED`,details:y(i,`decision-indeterminate`),message:v(`Quantex could not determine the installed state of ${e.displayName}.`,i.reason)}:{code:`INSTALL_FAILED`,details:y(i,_(i.reason)?b:void 0),message:v(`Failed to install ${e.displayName}.`,i.reason)};return a({action:`install`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!1},error:s,target:{kind:`agent`,name:e.name}})}function j(e){return r({action:`install`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!0},target:{kind:`agent`,name:e.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${e.displayName} is already installed.`}]})}function M(e,t,n){return r({action:`install`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:t},target:{kind:`agent`,name:e.name},warnings:[{code:`DRY_RUN`,message:t?`Dry run: would record the existing ${e.displayName} install in Quantex state.`:n?`Dry run: would reinstall ${e.displayName} only if its recorded provider target is confirmed absent.`:`Dry run: would install ${e.displayName}.`}]})}function N(e){return r({action:`install`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!0},target:{kind:`agent`,name:e.name},warnings:[{code:`UNTRACKED_EXISTING_INSTALL`,message:`${e.displayName} is already installed but not tracked by Quantex. Quantex could not safely determine the supported install source, so the existing install remains unmanaged.`}]})}function P(e,t=!1){t&&i({action:`install`,data:{agent:{displayName:e.displayName,name:e.name}},target:{kind:`agent`,name:e.name},type:`started`})}function F(e,t){let n=t.data,r=t.warnings.map(e=>({code:e.code,message:e.message}));return{agent:n?.agent??{displayName:e,name:t.target?.name??e},changed:n?.changed??!1,error:t.error?{code:t.error.code,message:t.error.message}:void 0,input:e,installState:n?.installState,installed:n?.installed??!1,ok:t.ok,status:I(t),warnings:r}}function I(e){return e.ok?e.warnings.some(e=>e.code===`TRACKED_EXISTING_INSTALL`)?`tracked-existing-install`:e.warnings.some(e=>e.code===`UNTRACKED_EXISTING_INSTALL`)?`untracked-existing-install`:e.warnings.some(e=>e.code===`ALREADY_INSTALLED`)?`already-installed`:e.warnings.some(e=>e.code===`DRY_RUN`)?`planned`:`installed`:e.error?.code===`RESOURCE_LOCKED`?`locked`:`failed`}function L(e){let t={alreadyInstalled:0,failed:0,installed:0,locked:0,planned:0,trackedExistingInstall:0,untrackedExistingInstall:0};for(let n of e)switch(n.status){case`already-installed`:t.alreadyInstalled+=1;break;case`failed`:t.failed+=1;break;case`installed`:t.installed+=1;break;case`locked`:t.locked+=1;break;case`planned`:t.planned+=1;break;case`tracked-existing-install`:t.trackedExistingInstall+=1;break;case`untracked-existing-install`:t.untrackedExistingInstall+=1;break}return t}function R(e){let t=e.filter(e=>!e.ok),n=new Set(t.map(e=>e.error?.code));return n.size===1&&n.has(`RESOURCE_LOCKED`)?{code:`RESOURCE_LOCKED`,details:{failedAgents:t.map(e=>e.input)},message:`One or more agents could not be installed because another Quantex process is already using the agent lifecycle lock.`}:{code:`INSTALL_FAILED`,details:{failedAgents:t.map(e=>e.input)},message:`One or more agents failed to install.`}}function z(e){if(e.error){g(s.red(e.error.message));return}if(e.data){if(e.warnings.length>0){for(let t of e.warnings){if(t.code===`TRACKED_EXISTING_INSTALL`){m(s.green(t.message));continue}if(t.code===`DRY_RUN`){p(s.cyan(t.message));continue}p(s.yellow(t.message))}return}m(s.cyan(`Installing ${e.data.agent.displayName}...`)),m(s.green(`${e.data.agent.displayName} installed successfully!`))}}function B(e){if(!e.data){e.error&&g(s.red(e.error.message));return}for(let t of e.data.results)switch(t.status){case`installed`:m(s.cyan(`Installing ${t.agent.displayName}...`)),m(s.green(`${t.agent.displayName} installed successfully!`));break;case`tracked-existing-install`:m(s.green(V(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`already-installed`:case`untracked-existing-install`:p(s.yellow(V(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`planned`:p(s.cyan(V(t.warnings,`Dry run: would install ${t.agent.displayName}.`)));break;case`locked`:p(s.yellow(t.error?.message??`Another quantex process is already installing ${t.agent.displayName}.`));break;case`failed`:g(s.red(t.error?.message??`Failed to install ${t.agent.displayName}.`));break}H(e.data.summary)}function V(e,t){return e[0]?.message??t}function H(e){let t=[e.installed?`installed ${e.installed}`:void 0,e.alreadyInstalled?`already installed ${e.alreadyInstalled}`:void 0,e.trackedExistingInstall?`tracked existing ${e.trackedExistingInstall}`:void 0,e.untrackedExistingInstall?`untracked existing ${e.untrackedExistingInstall}`:void 0,e.failed?`failed ${e.failed}`:void 0,e.locked?`locked ${e.locked}`:void 0,e.planned?`planned ${e.planned}`:void 0].filter(Boolean);t.length>0&&m(s.bold(`Summary: ${t.join(`, `)}`))}export{T as installCommand,E as installCommandWithRoute};
@@ -1 +0,0 @@
1
- import{n as e,r as t,t as n}from"./installation-routing-n62Du1fV.mjs";export{n as createCoreInstallationTestRoute,e as reportInstallationEngineRoute,t as selectInstallationEngineRoute};
@@ -1 +0,0 @@
1
- import{n as e}from"./cli-context-DI43ouBg.mjs";import t from"node:process";const n=Object.freeze({adoption:`v1-safe`,engine:`core`,source:`stable-default`}),r=Object.freeze({engine:`legacy`,source:`compatibility-escape`}),i=Object.freeze({engine:`legacy`,source:`dry-run-compatibility`});function a(a){return e().dryRun?i:t.env.QUANTEX_INSTALLATION_ENGINE===`legacy`?r:n}function o(){return Object.freeze({adoption:`v1-safe`,engine:`core`,source:`test`})}function s(n,r){e().logLevel===`debug`&&t.stderr.write(`[quantex:debug] ${n} engine=${r.engine} source=${r.source}\n`)}export{s as n,a as r,o as t};
@@ -1 +0,0 @@
1
- import{h as e}from"./file-store-XNyirRRY.mjs";import{t}from"./detect-BUVMt8jZ.mjs";import{R as n,n as r,r as i}from"./agents-Caewjqrg.mjs";import{$ as a,Q as o,S as s,tt as c,x as l}from"./output-BRIAY0Oa.mjs";import{u}from"./providers-CMuU0Elu.mjs";import{t as d}from"./cli-operation-context-BS5a069W.mjs";import{s as f}from"./agents-aJwt-ODK.mjs";import{r as p}from"./provider-binding-BmBPz4YE.mjs";import{t as m}from"./agent-observation-CmpP7VL_.mjs";function h(e,t={}){async function n(n){let r,i=()=>(r??=e.readInstalledState(n.name),r),a=await e.getOrderedInstallMethods(n),o=await e.observeAgentLifecycle(n,{clock:e.clock,inspectExecutable:async()=>e.inspectExecutable(n,await i()),platform:e.getPlatform(),preferredCatalogBinding:a[0]?p(n,a[0]):void 0,providerRegistry:e.providerRegistry,readInstalledState:i,readReceipt:e.readReceipt,resolveExecutablePath:t=>e.getResolvedBinaryPath(t),signal:e.signal,timeoutMs:e.timeoutMs}),[s,c]=await Promise.all([t.resolveLatestVersion===!1?Promise.resolve(void 0):e.getLatestVersion(n,o.installedState,a),e.getResolvedBinaryPath(o.pathExecutable.path)]);return{agent:n,...o,latestVersion:s,methods:a,resolvedBinaryPath:c}}return{observeRegisteredAgents(){return Promise.all(e.getAllAgents().map(n))},async resolveAgentObservation(t){let r=e.getAgentByNameOrAlias(t);return r?n(r):void 0}}}function g(e,t){return t?_(t).resolveAgentObservation(e):v(t=>t.resolveAgentObservation(e))}function _(e,o={}){return h({clock:()=>new Date().toISOString(),getAllAgents:i,getAgentByNameOrAlias:r,getLatestVersion:(t,n,r)=>x(t,n,r,e),getOrderedInstallMethods:f,getPlatform:t,getResolvedBinaryPath:t=>a(t,e),inspectExecutable:(t,n)=>y(t,n,e),observeAgentLifecycle:m,providerRegistry:n,readInstalledState:l,readReceipt:s,signal:e.signal,timeoutMs:e.timeoutMs},o)}async function v(e){let t=d(),n=_(t.context);try{return await t.run(()=>e(n))}finally{t.dispose()}}async function y(t,n,r){let i=await e(t.binaryName,r);if(!i)return{present:!1};let o=await b(t,n,r,i);return{path:await a(i,r)??i,present:!0,version:o}}async function b(e,t,n,r){return c(e.binaryName,e.versionProbe,n,r)}async function x(e,t,n,r){let i=u(e,t,n);return i?o(i,`latest`,{context:r}):void 0}export{g as n,_ as t};
@@ -1,5 +0,0 @@
1
- import{i as e,n as t,o as n,r,t as i}from"./child-process-DzIdysOm.mjs";import{d as a,l as o,n as s}from"./npm-DUDR-Khz.mjs";import{a as c,d as l,h as u,n as d,r as f,s as p,t as m}from"./file-store-XNyirRRY.mjs";import{n as h,r as g,t as _}from"./registry-vhJzh8dW.mjs";import{s as v,t as ee}from"./schema-BBnWVY6R.mjs";import{n as y,r as te}from"./cli-context-DI43ouBg.mjs";import{existsSync as ne}from"node:fs";import{basename as b,dirname as x,join as S,win32 as C}from"node:path";import w from"node:process";import{chmod as re,mkdir as ie,mkdtemp as ae,readFile as T,realpath as oe,rename as E,rm as D,stat as se,writeFile as ce}from"node:fs/promises";import{homedir as le}from"node:os";import{createHash as ue}from"node:crypto";import{fileURLToPath as de}from"node:url";import{gunzipSync as fe,inflateRawSync as pe}from"node:zlib";import{Buffer as O}from"node:buffer";var me=class extends Error{timeoutMs;constructor(e){super(`Network attempt timed out after ${e}ms.`),this.name=`NetworkAttemptTimeoutError`,this.timeoutMs=e}};async function he(e,t,n={}){let r=await ge(e,t,`json`,n);if(r)try{return JSON.parse(r)}catch{return}}async function ge(e,t,n=`text`,r={}){let i=r.context?.signal??r.signal;k(i);let a=await l();k(i);let o=a.versionCacheTtlHours*60*60*1e3,s=r.cacheMode??y().cacheMode,c=s===`no-cache`?{entries:{}}:await Se();k(i);let u=c.entries[t],d=Date.now();if(s===`default`&&u&&u.expiresAt>d)return k(i),j(u,o),u.body;let f=await _e(e,{context:r.context,headers:s!==`no-cache`&&u?.etag?{"If-None-Match":u.etag}:void 0,mode:n,networkPort:r.networkPort,retries:a.networkRetries,signal:i,timeoutMs:a.networkTimeoutMs});if(k(i),!f)return u&&(k(i),j(u,o)),u?.body;if(f.status===304&&u)return k(i),c.entries[t]={...u,expiresAt:d+o,fetchedAt:d},s!==`no-cache`&&(k(i),await Ce(c)),k(i),Te(d,d+o),u.body;if(!f.ok||!f.valid||f.body===void 0)return u&&(k(i),j(u,o)),u?.body;k(i);let p={body:f.body,etag:f.etag,expiresAt:d+o,fetchedAt:d};return s!==`no-cache`&&(c.entries[t]=p,k(i),await Ce(c)),k(i),Te(d,d+o),f.body}async function _e(e,t){let n=t.context?.timeoutMs===void 0?void 0:Date.now()+t.context.timeoutMs;for(let r=0;r<=t.retries;r++)try{return await ve(e,{...t,invocationDeadline:n})}catch(e){if(e instanceof i)throw e;if(r===t.retries)return}}async function ve(e,t){let n=t.networkPort;if(n)return ye(e,{...t,networkPort:n});let r=new AbortController,a,o,s,c,l,u=new Promise((e,t)=>c=t),d=()=>l??=xe(Promise.resolve().then(async()=>{a?await a.cancel(s):o?.body&&!o.body.locked&&await o.body.cancel(s)}).then(()=>void 0).catch(()=>void 0),250),f=e=>{let n=e===`cancelled`?A(t.signal):e===`invocation-timeout`?new i({kind:`timed-out`,timeoutMs:t.context?.timeoutMs??0}):new me(t.timeoutMs),a=s===void 0;return(a||s instanceof me&&n instanceof i)&&(s=n),a&&(r.abort(s),d().finally(()=>c(s))),d()},p=()=>void f(`cancelled`);t.signal?.addEventListener(`abort`,p,{once:!0});let m=t.context?.registerCleanup?.({cleanup:()=>f(`cancelled`),force:d}),h=Date.now()+t.timeoutMs,g=setTimeout(()=>void f(`network-timeout`),t.timeoutMs),_=t.invocationDeadline===void 0?void 0:setTimeout(()=>void f(`invocation-timeout`),Math.max(0,t.invocationDeadline-Date.now())),v=async()=>{if(s||(t.signal?.aborted?await f(`cancelled`):t.invocationDeadline!==void 0&&Date.now()>=t.invocationDeadline?await f(`invocation-timeout`):Date.now()>=h&&await f(`network-timeout`),s))throw s};try{t.signal?.aborted&&await f(`cancelled`);let n=(async()=>{o=await fetch(e,{headers:t.headers,signal:r.signal}),await v();let n=o.status,i=o.headers?.get?.(`etag`)??void 0;if(!o.ok)return await d(),{etag:i,ok:!1,status:n,valid:!0};let s=await be(o,e=>a=e);await v();let c=!0;if(t.mode===`json`)try{JSON.parse(s)}catch{c=!1}return await v(),{body:s,etag:i,ok:!0,status:n,valid:c}})();try{return await Promise.race([n,u])}catch(e){throw s?(await d(),s):e}}finally{clearTimeout(g),_&&clearTimeout(_),t.signal?.removeEventListener(`abort`,p),m?.()}}async function ye(e,t){if(t.signal?.aborted)throw A(t.signal);let n=Date.now();if(t.invocationDeadline!==void 0&&t.invocationDeadline<=n)throw new i({kind:`timed-out`,timeoutMs:t.context?.timeoutMs??0});let r=t.invocationDeadline===void 0?t.timeoutMs:Math.max(1,Math.min(t.timeoutMs,t.invocationDeadline-n)),a=t.signal??new AbortController().signal,o=await t.networkPort.request({headers:t.headers,signal:a,timeoutMs:r,url:e});if(o.kind===`failure`)throw t.signal?.aborted||o.error.kind===`cancelled`?A(t.signal):o.error.kind===`timed-out`?t.invocationDeadline!==void 0&&Date.now()>=t.invocationDeadline?new i({kind:`timed-out`,timeoutMs:t.context?.timeoutMs??0}):new me(t.timeoutMs):Error(o.error.message);let s=new TextDecoder().decode(o.value.body),c=!0;if(t.mode===`json`&&o.value.status>=200&&o.value.status<300)try{JSON.parse(s)}catch{c=!1}return{body:o.value.status>=200&&o.value.status<300?s:void 0,etag:o.value.headers.etag,ok:o.value.status>=200&&o.value.status<300,status:o.value.status,valid:c}}async function be(e,t){if(!e.body)return``;let n=e.body.getReader();t(n);let r=new TextDecoder,i=``;for(;;){let e=await n.read();if(e.done)break;i+=r.decode(e.value,{stream:!0})}return i+r.decode()}async function xe(e,t){let n;try{await Promise.race([e,new Promise(e=>{n=setTimeout(e,t)})])}finally{n&&clearTimeout(n)}}function k(e){if(e?.aborted)throw A(e)}function A(e){return e?.reason instanceof i?e.reason:new i({kind:`cancelled`,reason:typeof e?.reason==`string`?e.reason:e?.reason instanceof Error?e.reason.message:e?.reason===void 0?void 0:String(e.reason)})}async function Se(){try{return JSON.parse(await T(we(),`utf8`))}catch{return{entries:{}}}}async function Ce(e){await ie(S(p(),`cache`),{recursive:!0}),await ce(we(),`${JSON.stringify(e,null,2)}\n`,`utf8`)}function we(){return S(p(),`cache`,`versions.json`)}function j(e,t){let n=e.fetchedAt??Math.max(0,e.expiresAt-t);te({fetchedAt:new Date(n).toISOString(),source:`cache`,staleAfter:new Date(e.expiresAt).toISOString()})}function Te(e,t){te({fetchedAt:new Date(e).toISOString(),source:`network`,staleAfter:new Date(t).toISOString()})}const Ee=/v?(\d+\.\d+\.\d+(?:-[a-z0-9.]+)?)/i;function De(e,t){if(t)return t(e);let n=e.trim().split(`
2
- `)[0],r=n.match(Ee);return r?r[1]:n||void 0}function Oe(e,t){return v(e,t)===1}function ke(e,t,n){let r=t?.command??[e,`--version`];return!n||r[0]!==e?[...r]:[n,...r.slice(1)]}async function Ae(e,t,n){return je(e,t,n)}async function je(i,a,o,s){let c=ke(i,a,s);try{let t=n(c,{detached:o!==void 0&&w.platform!==`win32`}),{exitCode:i,stderr:s,stdout:l}=o?await e(t,o):await r(t);return i===0?De(l,a?.parser)??De(s,a?.parser):void 0}catch(e){if(t(e))throw e;return}}async function Me(e,t=`latest`,n={}){return Ne(e,t,n)}async function Ne(e,n=`latest`,r={}){try{let t=g(r.registry)??`https://registry.npmjs.org`,i=await he(h(e,n,t),`npm:${t}:${e}:${n}`,{cacheMode:r.cacheMode,context:r.context,networkPort:r.networkPort});if(r.context?.signal.aborted)throw M(r.context.signal);return i?.version}catch(e){if(t(e))throw e;if(r.context?.signal.aborted)throw M(r.context.signal);return}}async function Pe(e,t){return u(e,t)}async function Fe(e,t){if(e){if(t?.signal.aborted)throw M(t.signal);try{let n=await oe(e);if(t?.signal.aborted)throw M(t.signal);return n}catch{if(t?.signal.aborted)throw M(t.signal);return e}}}function M(e){return new i({kind:`cancelled`,reason:typeof e.reason==`string`?e.reason:void 0})}const N={additionalProperties:!1,properties:{action:{type:`string`},data:{type:`object`},error:{additionalProperties:!1,properties:{code:{type:`string`},message:{type:`string`}},required:[`code`,`message`],type:`object`},exitCode:{type:`integer`},meta:{additionalProperties:!1,properties:{mode:{type:`string`},runId:{type:`string`},schemaVersion:{type:`string`},source:{type:`string`},fetchedAt:{type:`string`},staleAfter:{type:`string`},timestamp:{type:`string`},version:{type:`string`}},required:[`mode`,`runId`,`schemaVersion`,`timestamp`,`version`],type:`object`},ok:{type:`boolean`},target:{additionalProperties:!1,properties:{kind:{type:`string`},name:{type:`string`}},required:[`kind`],type:`object`},warnings:{items:{additionalProperties:!1,properties:{code:{type:`string`},message:{type:`string`}},required:[`code`,`message`],type:`object`},type:`array`}},required:[`action`,`error`,`meta`,`ok`,`warnings`],type:`object`},P={additionalProperties:!1,properties:{action:{type:`string`},data:{type:`object`},meta:{additionalProperties:!1,properties:{mode:{type:`string`},runId:{type:`string`},schemaVersion:{type:`string`},source:{type:`string`},fetchedAt:{type:`string`},staleAfter:{type:`string`},timestamp:{type:`string`},version:{type:`string`}},required:[`mode`,`runId`,`schemaVersion`,`timestamp`,`version`],type:`object`},target:{additionalProperties:!1,properties:{kind:{type:`string`},name:{type:`string`}},required:[`kind`],type:`object`},type:{type:`string`}},required:[`action`,`meta`,`type`],type:`object`},F={additionalProperties:!1,properties:{available:{type:`boolean`},reason:{type:`string`}},required:[`available`],type:`object`},Ie={brew:F,bun:F,cargo:F,deno:F,mise:F,npm:F,pip:F,uv:F,winget:F},Le=[`brew`,`bun`,`cargo`,`deno`,`mise`,`npm`,`pip`,`uv`,`winget`],Re=[{dataSchema:{additionalProperties:!1,properties:{agents:{items:{type:`string`},type:`array`},features:{additionalProperties:!1,properties:{assumeYes:{type:`boolean`},cacheBypass:{type:`boolean`},cacheRefresh:{type:`boolean`},channels:{items:{type:`string`},type:`array`},colorModes:{items:{type:`string`},type:`array`},dryRun:{type:`boolean`},execInstallPolicies:{items:{type:`string`},type:`array`},freshnessMetadata:{type:`boolean`},idempotencyKey:{type:`boolean`},logLevels:{items:{type:`string`},type:`array`},quietLogs:{type:`boolean`},selfUpgrade:{type:`boolean`},timeout:{type:`boolean`}},required:[`assumeYes`,`cacheBypass`,`cacheRefresh`,`channels`,`colorModes`,`dryRun`,`execInstallPolicies`,`freshnessMetadata`,`idempotencyKey`,`logLevels`,`quietLogs`,`selfUpgrade`,`timeout`],type:`object`},installers:{additionalProperties:!1,properties:Ie,required:Le,type:`object`},outputModes:{items:{type:`string`},type:`array`},platform:{additionalProperties:!1,properties:{arch:{type:`string`},os:{type:`string`}},required:[`arch`,`os`],type:`object`}},required:[`agents`,`features`,`installers`,`outputModes`,`platform`],type:`object`},description:`Environment and surface capabilities`,envelopeSchema:N,name:`capabilities`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{commands:{items:{additionalProperties:!1,properties:{flags:{items:{type:`string`},type:`array`},name:{type:`string`},outputSchemaRef:{type:`string`},stability:{type:`string`},summary:{type:`string`}},required:[`flags`,`name`,`outputSchemaRef`,`stability`,`summary`],type:`object`},type:`array`}},required:[`commands`],type:`object`},description:`Stable command catalog`,envelopeSchema:N,name:`commands`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{action:{type:`string`},config:{type:`object`},key:{type:`string`},value:{type:[`number`,`string`]}},required:[`action`],type:`object`},description:`Configuration read or mutation result`,envelopeSchema:N,name:`config`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{agents:{items:{additionalProperties:!1,properties:{displayName:{type:`string`},installedVersion:{type:`string`},latestVersion:{type:`string`},lifecycle:{type:`string`},outdated:{type:`boolean`},sourceLabel:{type:`string`}},required:[`displayName`,`lifecycle`,`outdated`,`sourceLabel`],type:`object`},type:`array`},installers:{additionalProperties:!1,properties:{brew:{type:`boolean`},bun:{type:`boolean`},cargo:{type:`boolean`},deno:{type:`boolean`},mise:{type:`boolean`},npm:{type:`boolean`},pip:{type:`boolean`},uv:{type:`boolean`},winget:{type:`boolean`}},required:Le,type:`object`},issues:{items:{additionalProperties:!1,properties:{blocking:{type:`boolean`},category:{type:`string`},code:{type:`string`},docsRef:{type:`string`},message:{type:`string`},severity:{type:`string`},subject:{additionalProperties:!1,properties:{kind:{type:`string`},name:{type:`string`}},required:[`kind`],type:`object`},suggestedAction:{type:`string`},suggestedCommands:{items:{type:`string`},type:`array`}},required:[`blocking`,`category`,`code`,`message`,`severity`,`subject`,`suggestedAction`,`suggestedCommands`],type:`object`},type:`array`},self:{additionalProperties:!1,properties:{canAutoUpdate:{type:`boolean`},currentVersion:{type:`string`},installSource:{type:`string`},latestVersion:{type:`string`},outdated:{type:`boolean`},recoveryHint:{type:`string`}},required:[`canAutoUpdate`,`currentVersion`,`installSource`,`outdated`],type:`object`}},required:[`agents`,`installers`,`issues`,`self`],type:`object`},description:`Diagnostic state and remediation guidance for the current environment`,envelopeSchema:N,name:`doctor`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{agent:{additionalProperties:!1,properties:{binaryName:{type:`string`},displayName:{type:`string`},name:{type:`string`}},required:[`name`],type:`object`},execution:{additionalProperties:!1,properties:{args:{items:{type:`string`},type:`array`},installGuidance:{additionalProperties:!1,properties:{docsRef:{type:`string`},installMethods:{items:{additionalProperties:!1,properties:{command:{type:`string`},label:{type:`string`},type:{type:`string`}},required:[`command`,`label`,`type`],type:`object`},type:`array`},suggestedAction:{type:`string`},suggestedEnsureCommand:{type:`string`},suggestedExecCommand:{type:`string`}},required:[`docsRef`,`installMethods`,`suggestedAction`,`suggestedEnsureCommand`,`suggestedExecCommand`],type:`object`},installPolicy:{type:`string`},installed:{type:`boolean`},interactive:{type:`boolean`},launched:{type:`boolean`}},required:[`args`,`installPolicy`,`installed`,`interactive`,`launched`],type:`object`}},required:[`agent`,`execution`],type:`object`},description:`Preflight contract for managed agent execution`,envelopeSchema:N,name:`exec`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{agent:{type:`object`},changed:{type:`boolean`},installState:{type:`object`},installed:{type:`boolean`}},required:[`agent`,`changed`,`installed`],type:`object`},description:`Ensure result for an agent`,envelopeSchema:N,name:`ensure`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{agent:{additionalProperties:!1,properties:{aliases:{items:{type:`string`},type:`array`},binaryName:{type:`string`},displayName:{type:`string`},installMethods:{items:{additionalProperties:!1,properties:{command:{type:`string`},label:{type:`string`},type:{type:`string`}},required:[`command`,`label`,`type`],type:`object`},type:`array`},name:{type:`string`},packageName:{type:`string`},selfUpdateCommands:{items:{type:`string`},type:`array`}},required:[`aliases`,`binaryName`,`displayName`,`installMethods`,`name`,`selfUpdateCommands`],type:`object`},inspection:{additionalProperties:!1,properties:{binaryPath:{type:`string`},installed:{type:`boolean`},installedVersion:{type:`string`},latestVersion:{type:`string`},lifecycle:{type:`string`},sourceLabel:{type:`string`}},required:[`installed`,`lifecycle`],type:`object`}},required:[`agent`,`inspection`],type:`object`},description:`Human-friendly details for an agent`,envelopeSchema:N,name:`info`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{agent:{type:`object`},capabilities:{type:`object`},inspection:{type:`object`}},required:[`agent`,`capabilities`,`inspection`],type:`object`},description:`Structured inspection result for an agent`,envelopeSchema:N,name:`inspect`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{agent:{type:`object`},changed:{type:`boolean`},installState:{type:`object`},installed:{type:`boolean`},results:{items:{additionalProperties:!1,properties:{agent:{type:`object`},changed:{type:`boolean`},error:{type:`object`},input:{type:`string`},installState:{type:`object`},installed:{type:`boolean`},ok:{type:`boolean`},status:{type:`string`},warnings:{items:{type:`object`},type:`array`}},required:[`agent`,`changed`,`input`,`installed`,`ok`,`status`,`warnings`],type:`object`},type:`array`},scope:{type:`string`},summary:{type:`object`}},type:`object`},description:`Install result for one or more agents`,envelopeSchema:N,name:`install`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{agents:{items:{additionalProperties:!1,properties:{binaryName:{type:`string`},displayName:{type:`string`},installed:{type:`boolean`},installedVersion:{type:`string`},latestVersion:{type:`string`},lifecycle:{type:`string`},name:{type:`string`},sourceLabel:{type:`string`},updateLabel:{type:`string`}},required:[`binaryName`,`displayName`,`installed`,`lifecycle`,`name`,`sourceLabel`,`updateLabel`],type:`object`},type:`array`}},required:[`agents`],type:`object`},description:`Supported agent catalog`,envelopeSchema:N,name:`list`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{agent:{type:`object`},resolution:{additionalProperties:!1,properties:{binaryPath:{type:`string`},installGuidance:{additionalProperties:!1,properties:{docsRef:{type:`string`},installMethods:{items:{additionalProperties:!1,properties:{command:{type:`string`},label:{type:`string`},type:{type:`string`}},required:[`command`,`label`,`type`],type:`object`},type:`array`},suggestedAction:{type:`string`},suggestedEnsureCommand:{type:`string`}},required:[`docsRef`,`installMethods`,`suggestedAction`,`suggestedEnsureCommand`],type:`object`},installed:{type:`boolean`},installSource:{type:`string`},installedVersion:{type:`string`},lifecycle:{type:`string`},sourceLabel:{type:`string`},suggestedLaunchCommand:{items:{type:`string`},type:`array`}},required:[`binaryPath`,`installed`,`installSource`,`lifecycle`,`sourceLabel`,`suggestedLaunchCommand`],type:`object`}},required:[`agent`,`resolution`],type:`object`},description:`Resolved executable entrypoint for an agent`,envelopeSchema:N,name:`resolve`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{commands:{items:{additionalProperties:!1,properties:{dataSchema:{type:`object`},description:{type:`string`},envelopeSchema:{type:`object`},name:{type:`string`},ndjsonEventSchema:{type:`object`}},required:[`dataSchema`,`description`,`envelopeSchema`,`name`],type:`object`},type:`array`}},required:[`commands`],type:`object`},description:`Structured schema catalog`,envelopeSchema:N,name:`schema`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{results:{items:{additionalProperties:!1,properties:{displayName:{type:`string`},hint:{type:`string`},installedVersion:{type:`string`},latestVersion:{type:`string`},message:{type:`string`},name:{type:`string`},resource:{type:`string`},status:{type:`string`},strategy:{type:`string`}},required:[`displayName`,`name`,`status`],type:`object`},type:`array`},scope:{type:`string`}},required:[`results`,`scope`],type:`object`},description:`Update result for one or all agents`,envelopeSchema:N,name:`update`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{agent:{additionalProperties:!1,properties:{displayName:{type:`string`},name:{type:`string`}},required:[`displayName`,`name`],type:`object`},changed:{type:`boolean`}},required:[`agent`,`changed`],type:`object`},description:`Uninstall result for an agent`,envelopeSchema:N,name:`uninstall`,ndjsonEventSchema:P},{dataSchema:{additionalProperties:!1,properties:{canAutoUpdate:{type:`boolean`},channel:{type:`string`},currentVersion:{type:`string`},installSource:{type:`string`},latestVersion:{type:`string`},recoveryHint:{type:`string`},status:{type:`string`}},required:[`canAutoUpdate`,`channel`,`currentVersion`,`installSource`,`status`],type:`object`},description:`Quantex self-upgrade status`,envelopeSchema:N,name:`upgrade`,ndjsonEventSchema:P}],ze=[{description:`Output structured JSON`,flags:`--json`,id:`json`,value:`boolean`},{description:`Output mode: human, json, or ndjson`,flags:`--output <mode>`,id:`output`,value:`string`},{description:`Disable interactive prompts and confirmations`,flags:`--non-interactive`,id:`nonInteractive`,value:`boolean`},{description:`Automatically accept safe default confirmations`,flags:`--yes`,id:`yes`,value:`boolean`},{description:`Suppress non-essential human logs`,flags:`--quiet`,id:`quiet`,value:`boolean`},{description:`Color mode: auto, always, or never`,flags:`--color <mode>`,id:`color`,value:`string`},{description:`Log level: silent, error, warn, info, or debug`,flags:`--log-level <level>`,id:`logLevel`,value:`string`},{description:`Show what would happen without making changes`,flags:`--dry-run`,id:`dryRun`,value:`boolean`},{description:`Refresh cached version metadata before returning results`,flags:`--refresh`,id:`refresh`,value:`boolean`},{commanderProperty:`cache`,description:`Bypass the local version cache for this command`,flags:`--no-cache`,id:`noCache`,negateCommanderValue:!0,value:`boolean`},{description:`Attach a run id to structured output and logs`,flags:`--run-id <id>`,id:`runId`,value:`string`},{description:`Deduplicate repeated mutating requests by client-supplied key`,flags:`--idempotency-key <key>`,id:`idempotencyKey`,value:`string`},{description:`Abort a command after the given duration, e.g. 500ms, 30s, 5m`,flags:`--timeout <duration>`,id:`timeout`,value:`string`}],Be=new Map(ze.map(e=>[e.id,e])),Ve=new Map(Re.map(e=>[e.name,e])),I=[`json`,`output`,`quiet`,`color`,`logLevel`,`refresh`,`noCache`,`timeout`],He=[`json`,`output`,`yes`,`quiet`,`color`,`logLevel`,`dryRun`,`timeout`,`idempotencyKey`],Ue=[L({aliases:[],description:`查看当前环境与 surface 能力`,effects:[`filesystem`,`network`,`process`],globalOptions:[`json`,`output`,`nonInteractive`,`quiet`,`color`,`logLevel`,`refresh`,`noCache`,`timeout`],name:`capabilities`,summary:`Return environment and surface capabilities`}),L({aliases:[],description:`查看命令目录与稳定能力`,effects:[],globalOptions:[`json`,`output`,`quiet`,`color`,`logLevel`,`timeout`],name:`commands`,summary:`Return the stable command catalog`}),L({aliases:[],arguments:[{description:`Action: get, set, reset`,name:`action`,syntax:`[action]`},{description:`Config key`,name:`key`,syntax:`[key]`},{description:`Config value`,name:`value`,syntax:`[value]`}],catalogTokens:[`get`,`set`,`reset`],description:`配置管理`,effects:[`filesystem`,`mutation`],globalOptions:[`json`,`output`,`quiet`,`color`,`logLevel`,`timeout`],name:`config`,summary:`Read and modify Quantex configuration`}),L({aliases:[],description:`检查环境`,effects:[`filesystem`,`network`,`process`],globalOptions:I,name:`doctor`,summary:`Diagnose the current environment and installed tools`}),L({aliases:[],allowUnknownOptions:!0,arguments:[{description:`Agent name or alias`,name:`agent`,syntax:`<agent>`},{description:`Arguments passed through to the agent`,name:`args`,syntax:`[args...]`}],description:`以显式策略启动 agent`,effects:[`filesystem`,`interaction`,`mutation`,`network`,`process`],globalOptions:[`nonInteractive`,`yes`,`quiet`,`color`,`logLevel`,`dryRun`,`output`],name:`exec`,options:[{defaultValue:`never`,description:`Install policy: never, if-missing, always`,flags:`--install <policy>`,id:`install`,value:`string`}],summary:`Run an agent with explicit install policy`}),L({aliases:[],arguments:[{description:`Agent name or alias`,name:`agent`,syntax:`<agent>`}],description:`确保指定 agent 已安装`,effects:[`filesystem`,`interaction`,`mutation`,`network`,`process`],globalOptions:He,name:`ensure`,summary:`Ensure an agent is installed`}),L({aliases:[],arguments:[{description:`Agent name or alias`,name:`agent`,syntax:`<agent>`}],description:`查看 agent 详细信息`,effects:[`filesystem`,`network`,`process`],globalOptions:I,name:`info`,summary:`Show human-friendly agent details`}),L({aliases:[],arguments:[{description:`Agent name or alias`,name:`agent`,syntax:`<agent>`}],description:`查看 agent 结构化状态`,effects:[`filesystem`,`network`,`process`],globalOptions:I,name:`inspect`,summary:`Return structured agent state`}),L({aliases:[`i`],arguments:[{description:`Agent names or aliases`,name:`agents`,syntax:`<agents...>`}],description:`安装指定 agent`,effects:[`filesystem`,`interaction`,`mutation`,`network`,`process`],globalOptions:He,name:`install`,summary:`Install one or more agents`}),L({aliases:[`ls`],description:`列出所有支持的 agent`,effects:[`filesystem`,`network`,`process`],globalOptions:I,name:`list`,summary:`List supported agents`}),L({aliases:[],arguments:[{description:`Agent name or alias`,name:`agent`,syntax:`<agent>`}],description:`解析 agent 可执行入口`,effects:[`filesystem`,`network`,`process`],globalOptions:I,name:`resolve`,summary:`Resolve an agent executable entrypoint`}),L({aliases:[],arguments:[{description:`Optional command name`,name:`command`,syntax:`[command]`}],description:`查看结构化输出 schema`,effects:[],globalOptions:[`json`,`output`,`quiet`,`color`,`logLevel`,`timeout`],name:`schema`,summary:`Return structured output schemas`}),L({aliases:[`u`],arguments:[{description:`Agent name or alias`,name:`agent`,syntax:`[agent]`}],description:`更新指定 agent`,effects:[`filesystem`,`mutation`,`network`,`process`],globalOptions:[`json`,`output`,`nonInteractive`,`quiet`,`color`,`logLevel`,`dryRun`,`refresh`,`noCache`,`timeout`,`idempotencyKey`],name:`update`,options:[{description:`Update all installed agents`,flags:`--all`,id:`all`,value:`boolean`},{description:`With --all, limit the batch to persisted Quantex-managed agents`,flags:`--managed`,id:`managed`,value:`boolean`}],summary:`Update one or all agents`}),L({aliases:[`rm`],arguments:[{description:`Agent name or alias`,name:`agent`,syntax:`<agent>`}],description:`卸载指定 agent`,effects:[`filesystem`,`mutation`,`process`],globalOptions:[`json`,`output`,`quiet`,`color`,`logLevel`,`dryRun`,`timeout`,`idempotencyKey`],name:`uninstall`,summary:`Uninstall an agent`}),L({aliases:[],description:`升级 Quantex CLI`,effects:[`filesystem`,`mutation`,`network`,`process`],globalOptions:[`json`,`output`,`quiet`,`color`,`logLevel`,`dryRun`,`refresh`,`noCache`,`timeout`,`idempotencyKey`],name:`upgrade`,options:[{description:`Only check whether an update is available`,flags:`--check`,id:`check`,value:`boolean`},{description:`Update channel: stable or beta`,flags:`--channel <channel>`,id:`channel`,value:`string`}],summary:`Upgrade Quantex CLI itself`})];function We(){return Ue}function Ge(){return ze}function Ke(e){let t={...e};for(let n of ze){let r=n.commanderProperty??n.id;r in e&&(t[n.id]=n.negateCommanderValue?e[r]===!1:e[r],r!==n.id&&delete t[r])}return t}function qe(e){return{flags:R(e),name:e.name,outputSchemaRef:`#/commands/${e.schema.name}`,stability:e.stability,summary:e.summary}}function Je(e,t){let n=new Set,r=new Set;for(let t of e){if(n.has(t.name))throw Error(`Duplicate command name: ${t.name}`);n.add(t.name)}for(let t of e){let e=new Set,i=new Set,a=new Set,o=new Set;for(let e of t.aliases){if(n.has(e))throw Error(`Command alias collides with command name: ${e}`);if(r.has(e))throw Error(`Duplicate command alias: ${e}`);r.add(e)}for(let n of t.effects){if(e.has(n))throw Error(`Duplicate command effect: ${n}`);e.add(n)}for(let[e,n]of t.arguments.entries()){if(i.has(n.name))throw Error(`Duplicate command argument: ${t.name} ${n.name}`);if(i.add(n.name),n.syntax.includes(`...`)&&e!==t.arguments.length-1)throw Error(`Variadic command argument must be last: ${t.name} ${n.name}`)}let s=new Set;for(let e of t.globalOptions){let n=Be.get(e);if(!n)throw Error(`Unknown global option: ${t.name} ${e}`);let r=z(n.flags);if(s.has(r))throw Error(`Duplicate command global option: ${t.name} ${r}`);s.add(r)}for(let e of t.options){let n=z(e.flags);if(a.has(n))throw Error(`Duplicate command option: ${t.name} ${n}`);if(o.has(e.id))throw Error(`Duplicate command option id: ${t.name} ${e.id}`);if(s.has(n))throw Error(`Command option duplicates global option: ${t.name} ${n}`);Xe(e,t.name),a.add(n),o.add(e.id)}if((t.globalOptions.includes(`dryRun`)||t.globalOptions.includes(`idempotencyKey`)||t.options.some(e=>e.id===`dryRun`||e.id===`idempotencyKey`))&&!e.has(`mutation`)){let e=t.globalOptions.includes(`dryRun`)?`--dry-run`:`--idempotency-key`;throw Error(`Command effect mismatch: ${t.name} exposes ${e} without mutation`)}let c=R(t);if(c.length!==t.flags.length||c.some((e,n)=>e!==t.flags[n]))throw Error(`Command discovery option mismatch: ${t.name}`)}for(let t of e){if(!n.has(t.handlerId))throw Error(`Unresolved command handler: ${t.handlerId}`);if(!n.has(t.presenterId))throw Error(`Unresolved command presenter: ${t.presenterId}`)}let i=new Set(t);for(let t of e){if(!i.has(t.schemaName))throw Error(`Missing command schema: ${t.schemaName}`);if(t.schema.name!==t.schemaName)throw Error(`Command schema mismatch: ${t.name} ${t.schema.name}`)}}function L(e){let t=Ye(e.name),n={...e,arguments:e.arguments??[],catalogTokens:e.catalogTokens??[],flags:[],handlerId:e.name,options:e.options??[],presenterId:e.name,schema:t,schemaName:e.name,stability:`stable`};return{...n,flags:R(n)}}function Ye(e){let t=Ve.get(e);if(!t)throw Error(`Missing command schema: ${e}`);return t}function R(e){return[...e.catalogTokens,...e.options.map(e=>z(e.flags)),...e.globalOptions.map(t=>{let n=Be.get(t);if(!n)throw Error(`Unknown global option: ${e.name} ${t}`);return z(n.flags)})]}function z(e){let t=e.match(/--[a-z][a-z-]*/);if(!t)throw Error(`Command option requires a long flag: ${e}`);return t[0]}function Xe(e,t){let n=e.flags.includes(`<`)||e.flags.includes(`[`);if(e.value===`string`!==n)throw Error(`Command option value mismatch: ${t} ${z(e.flags)}`);if(e.value===`boolean`&&typeof e.defaultValue==`string`)throw Error(`Command option default mismatch: ${t} ${z(e.flags)}`)}const Ze=new Map(We().map(e=>[e.name,tt(e.presenterId)]));function Qe(e){return Ze.get(e)}function $e(e,t,n,r,i,a){if(t===`json`){i(e?.serializeJson(n)??JSON.stringify(n,null,2));return}if(t===`ndjson`){a(e?.toResultEvent(n)??nt(n));return}e?e.presentHuman(n,r):r(n)}function et(e,t,n,r){if(t===`ndjson`)return r(e?.toEvent(n)??n)}function tt(e){return{presenterId:e,presentHuman:(e,t)=>t(e),serializeJson:e=>JSON.stringify(e,null,2),toEvent:e=>e,toResultEvent:nt}}function nt(e){return{action:e.action,data:e,target:e.target,type:`result`}}const B=`quantex-cli`,rt=`https://github.com/Drswith/quantex-cli`,it=`1.11.2`,at=[`quantex-darwin-arm64`,`quantex-darwin-x64`,`quantex-linux-arm64`,`quantex-linux-x64`,`quantex-windows-x64.exe`].map(ot);function ot(e){return`${e}.${st(e)}`}function st(e){return gt(e)?.platform===`win32`?`zip`:`tar.gz`}function V(e){let t=e.endsWith(`.zip`)?`.zip`:e.endsWith(`.tar.gz`)?`.tar.gz`:void 0;if(!t)return;let n=e.slice(0,-t.length),r=gt(n),i=t===`.zip`?`zip`:`tar.gz`;return r&&st(n)===i?n:void 0}function ct(e){return`${e.sort((e,t)=>e.name.localeCompare(t.name)).map(e=>`${e.checksum} ${e.name}`).join(`
3
- `)}\n`}function lt(e){let t=new Map;for(let n of e.split(/\r?\n/)){let e=n.trim();if(!e)continue;let[r,i]=e.split(/\s+/,2),a=i?.replace(/^\*/,``);r&&a&&t.set(a,r)}return t}function ut(e){return gt(V(e)??e)}function dt(e){return e?e.startsWith(`git+`)?e.slice(4).replace(/\.git$/,``):e.startsWith(`git@github.com:`)?e.replace(`git@github.com:`,`https://github.com/`).replace(/\.git$/,``):e.replace(/\.git$/,``):`https://github.com/Drswith/quantex-cli`}function ft(e){return e.includes(`beta`)?`beta`:`stable`}function pt(e){let t=dt(e.repositoryUrl),n=ft(e.version),r=e.files.map(n=>{let r=ut(n.name);if(!r)return;let i=e.checksums.get(n.name);if(!i)throw Error(`Missing checksum entry for ${n.name}.`);if(!V(n.name))throw Error(`Release asset is not a compressed binary archive: ${n.name}.`);return{arch:r.arch,checksum:i,downloadUrl:`${t}/releases/download/v${e.version}/${n.name}`,name:n.name,platform:r.platform,size:n.size}}).filter(e=>e!==void 0).sort((e,t)=>e.name.localeCompare(t.name));if(r.length===0)throw Error(`No release binaries were found when creating manifest.json.`);return{assets:r,channel:n,version:e.version}}function mt(e,t){if(e.assets.length===0)throw Error(`manifest.json must contain at least one binary asset.`);let n=new Set(e.assets.map(e=>e.name));for(let e of at)if(!n.has(e))throw Error(`manifest.json is missing required release asset: ${e}.`);for(let n of e.assets){let e=t.get(n.name);if(!e)throw Error(`manifest.json references ${n.name}, but it is missing from SHA256SUMS.txt.`);if(n.checksum!==e)throw Error(`manifest.json checksum mismatch for ${n.name}.`);if(!ut(n.name))throw Error(`manifest.json contains an invalid binary asset name: ${n.name}.`)}}function ht(e,t){if(V(ot(t))!==t)throw Error(`Invalid expected release binary name: ${t}.`);return st(t)===`zip`?vt(e,t):_t(e,t)}function gt(e){let t=e.match(/^quantex-(darwin|linux|windows)-(arm64|x64)(?:\.exe)?$/);if(t)return{arch:t[2]===`arm64`?`arm64`:`x64`,platform:t[1]===`windows`?`win32`:t[1]===`darwin`?`darwin`:`linux`}}function _t(e,t){let n;try{n=fe(e)}catch(e){throw Error(`Release archive is not a valid gzip stream.`,{cause:e})}let r=0,i;for(;r+512<=n.length;){let e=n.subarray(r,r+512);if(e.every(e=>e===0))break;let a=bt(e.subarray(0,100)),o=bt(e.subarray(345,500)),s=o?`${o}/${a}`:a,c=e[156],l=xt(e.subarray(124,136)),u=r+512,d=u+l;if(!a||d>n.length)throw Error(`Release archive contains an invalid tar entry.`);if(c!==0&&c!==48)throw Error(`Release archive must contain only a regular file.`);if(s!==t||i)throw Error(`Release archive must contain exactly ${t}.`);i=n.slice(u,d),r=u+Math.ceil(l/512)*512}if(!i)throw Error(`Release archive does not contain ${t}.`);return i}function vt(e,t){let n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=0,i;for(;r+4<=e.length;){let a=U(n,r);if(a===wt){W(n,r,30);let a=H(n,r+6),o=H(n,r+8),s=U(n,r+14),c=U(n,r+18),l=U(n,r+22),u=H(n,r+26),d=H(n,r+28),f=r+30,p=f+u+d;if(W(n,r,30+u+d+c),a&1||a&8)throw Error(`Release archive contains an unsupported zip entry.`);if(new TextDecoder().decode(e.subarray(f,f+u))!==t||i)throw Error(`Release archive must contain exactly ${t}.`);let m=e.subarray(p,p+c),h;try{if(o===0)h=m;else if(o===8)h=pe(m);else throw Error(`unsupported compression method`)}catch(e){throw Error(`Release archive contains an invalid zip entry.`,{cause:e})}if(h.length!==l||St(h)!==s)throw Error(`Release archive contains an invalid zip entry.`);i=h.slice(),r=p+c;continue}if(a===Tt){if(!i)throw Error(`Release archive does not contain ${t}.`);return yt(e,n,r,t),i}throw Error(`Release archive is not a valid zip file.`)}throw Error(`Release archive does not contain ${t}.`)}function yt(e,t,n,r){let i=n,a=0;for(;i+4<=e.length&&U(t,i)===Tt;){W(t,i,46);let n=H(t,i+28),o=H(t,i+30),s=H(t,i+32);if(W(t,i,46+n+o+s),new TextDecoder().decode(e.subarray(i+46,i+46+n))!==r||a>0)throw Error(`Release archive must contain exactly ${r}.`);a+=1,i+=46+n+o+s}if(W(t,i,22),U(t,i)!==Et||a!==1||H(t,i+10)!==a)throw Error(`Release archive is not a valid zip file.`)}function bt(e){let t=e.indexOf(0);return new TextDecoder().decode(t===-1?e:e.subarray(0,t))}function xt(e){let t=bt(e).trim();if(!/^[0-7]+$/u.test(t))throw Error(`Release archive contains an invalid tar size.`);let n=Number.parseInt(t,8);if(!Number.isSafeInteger(n)||n<0)throw Error(`Release archive contains an unsafe tar size.`);return n}function H(e,t){return W(e,t,2),e.getUint16(t,!0)}function U(e,t){return W(e,t,4),e.getUint32(t,!0)}function W(e,t,n){if(t<0||n<0||t+n>e.byteLength)throw Error(`Release archive contains an invalid zip entry.`)}function St(e){let t=4294967295;for(let n of e)t=Ct[(t^n)&255]^t>>>8;return(t^4294967295)>>>0}const Ct=Array.from({length:256},(e,t)=>{let n=t;for(let e=0;e<8;e+=1)n=n&1?n>>>1^3988292384:n>>>1;return n>>>0}),wt=67324752,Tt=33639248,Et=101010256;function Dt(e){return e.replaceAll(`\\`,`/`).toLowerCase()}function Ot(e=w.execPath){let t=kt(e);return t?ot(t):void 0}function kt(e=w.execPath){if(b(Dt(e)).endsWith(`.exe`))return`quantex-windows-x64.exe`;if(w.platform===`darwin`)return w.arch===`arm64`?`quantex-darwin-arm64`:`quantex-darwin-x64`;if(w.platform===`linux`)return w.arch===`arm64`?`quantex-linux-arm64`:`quantex-linux-x64`}function At(e=w.execPath){let t=Ot(e);if(t)return`${rt}/releases/latest/download/${t}`}function jt(e,t,n=w.env){return e||(n.QUANTEX_UPDATE_CHANNEL===`beta`?`beta`:n.QUANTEX_UPDATE_CHANNEL===`stable`?`stable`:t===`beta`?`beta`:`stable`)}async function Mt(e,t,n,r){let i=await he(await Nt(e,t,n,r),`self:manifest:${e}`,{cacheMode:r,context:t,networkPort:n});if(!i)throw Error(`Failed to download release manifest.`);return i}async function Nt(e,t,n,r){if(e===`stable`)return`${rt}/releases/latest/download/manifest.json`;let i=(await Pt(e,t,n,r)).assets.find(e=>e.name===`manifest.json`);if(!i?.browser_download_url)throw Error(`No manifest.json asset was found for the ${e} release channel.`);return i.browser_download_url}async function Pt(e,t,n,r){let i=It();if(!i)throw Error(`Failed to resolve the GitHub repository slug for Quantex releases.`);let a=await he(`https://api.github.com/repos/${i}/releases?per_page=20`,`self:github-releases`,{cacheMode:r,context:t,networkPort:n});if(!a)throw Error(`Failed to query GitHub releases.`);let o=a.find(t=>e===`beta`?t.prerelease:!t.prerelease);if(!o)throw Error(`No GitHub release was found for the ${e} channel.`);return o}function Ft(e,t=w.execPath){let n=w.platform,r=w.arch===`arm64`?`arm64`:`x64`,i=Ot(t);return e.assets.find(e=>e.platform===n&&e.arch===r&&(!i||e.name===i))}function It(){return rt.match(/github\.com\/([^/]+\/[^/]+)$/)?.[1]}var G=class extends Error{constructor(e,t){super(e,t),this.name=`StateFileError`}};const Lt={installedAgents:{},self:{}};function Rt(){return d(p())}async function zt(){return $t()}async function Bt(e){let t=await f({resource:`state`,scope:[`state`]});try{await en(e)}finally{await t()}}async function Vt(e){return(await zt()).installedAgents[e]}async function Ht(e){try{return await K().getReceipt(e)}catch(e){throw e instanceof G?e:new G(`Failed to read Quantex state file.`,{cause:e})}}async function Ut(e){let t=await f({resource:`state`,scope:[`state`]});try{await K().setReceipt(e)}catch(e){throw e instanceof G?e:new G(`Failed to write Quantex state file.`,{cause:e})}finally{await t()}}async function Wt(e,t){let n=await f({resource:`state`,scope:[`state`]});try{await K().setAgentLifecycleEvidence(e,t)}catch(e){throw e instanceof G?e:new G(`Failed to write Quantex state file.`,{cause:e})}finally{await n()}}async function Gt(e){let t=await f({resource:`state`,scope:[`state`]});try{await K().removeReceipt(e)}catch(e){throw e instanceof G?e:new G(`Failed to write Quantex state file.`,{cause:e})}finally{await t()}}const Kt=Object.freeze({read:Ht,remove:Gt,write:Ut});async function qt(e){await q(t=>{t.installedAgents[e.agentName]=e})}async function Jt(e){await q(t=>{delete t.installedAgents[e]})}async function Yt(){return(await zt()).self}async function Xt(e){await q(t=>{t.self.installSource=e})}async function Zt(){await q(e=>{delete e.self.installSource})}async function Qt(e,t){await q(n=>{n.self.updateNoticeVersion=e,n.self.updateNoticeAt=t})}async function $t(){try{return await K().loadProjection()}catch(e){if(tn(e))return{...Lt};throw e instanceof G?e:e instanceof ee?new G(`Failed to read Quantex state file: ${e.message}`,{cause:e}):new G(`Failed to read Quantex state file.`,{cause:e})}}async function en(e){try{await K().saveProjection(e)}catch(e){throw e instanceof G?e:new G(`Failed to write Quantex state file.`,{cause:e})}}function K(){return m(p())}function tn(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;return t===`ENOENT`||t===`ENOTDIR`}async function q(e){let t=await f({resource:`state`,scope:[`state`]});try{let t=await $t();await e(t),await en(t)}finally{await t()}}const nn=`self:install-source`,rn={clearInstallSource:Zt,getSelfState:Yt,setInstallSource:Xt};function an(e=rn){return{async load(t){let n=on(t.key,t.signal);if(n)return n;try{let t=(await e.getSelfState()).installSource;return cn(t===void 0?{kind:`missing`}:{kind:`found`,snapshot:{value:t}})}catch(e){return ln(`Failed to read the persisted self install source.`,e)}},async remove(t){let n=on(t.key,t.signal);if(n)return n;try{return await e.clearInstallSource(),cn(void 0)}catch(e){return ln(`Failed to remove the persisted self install source.`,e)}},async save(t){let n=on(t.key,t.signal);if(n)return n;if(!sn(t.value))return J({kind:`invalid-data`,message:`The persisted self install source is invalid.`});try{return await e.setInstallSource(t.value),cn({})}catch(e){return ln(`Failed to persist the self install source.`,e)}}}}function on(e,t){if(t.aborted)return J({kind:`cancelled`,message:`Self install-source persistence was cancelled.`});if(e!==`self:install-source`)return J({kind:`invalid-data`,message:`Unsupported self persistence key "${e}".`})}function sn(e){return e===`binary`||e===`bun`||e===`npm`||e===`source`||e===`unknown`}function cn(e){return{kind:`success`,value:e}}function J(e){return{error:e,kind:`failure`}}function ln(e,t){return J({details:{cause:t},kind:`failed`,message:e})}const un=B,dn=`/node_modules/${un}`;async function fn(e){return mn(e,!0)}async function pn(e){return mn(e,!1)}async function mn(e,t){let n=await xn(),r=w.execPath,i=n.foundPackageJson?bn(n.packageRoot):bn(``,r),a=e?.persistence??an(),o=e?.signal??new AbortController().signal,s=await vn(a,o),c=t?await _n(s,i,{persistence:a,signal:o}):hn(s,i),u=await l(),d=jt(e?.updateChannel,u.selfUpdateChannel);return{canAutoUpdate:gn(c),currentVersion:n.version||`1.11.2`,executablePath:r,installSource:c,packageRoot:n.packageRoot,updateChannel:d}}function hn(e,t){return t===`unknown`?e??t:t}function gn(e){return e===`binary`||e===`bun`||e===`npm`}async function _n(e,t,n){if(t!==`unknown`&&e!==t){let e=await(n?.persistence??an()).save({key:nn,signal:n?.signal??new AbortController().signal,value:t});return e.kind===`failure`&&yn(e.error),t}return hn(e,t)}async function vn(e,t){let n=await e.load({key:nn,signal:t});if(n.kind===`failure`&&yn(n.error),n.value.kind===`missing`)return;let r=n.value.snapshot.value;if(r===`binary`||r===`bun`||r===`npm`||r===`source`||r===`unknown`)return r;throw Error(`The persisted self install source is invalid.`)}function yn(e){let t=e.details?.cause;throw t instanceof Error?t:e.kind===`cancelled`?new i({kind:`cancelled`,reason:e.message}):e.kind===`timed-out`?new i({kind:`timed-out`,timeoutMs:0}):Error(e.message)}function bn(e,t=w.execPath){let n=wn(e);return n.includes(`/.bun/install/global/`)?`bun`:n.includes(dn)?`npm`:n?`source`:Tn(t)?`binary`:`unknown`}async function xn(e=import.meta.url){let t=En(e),n=x(t);for(;;){let e=S(n,`package.json`),t=await Cn(e);if(t?.name===un)return{foundPackageJson:!0,packageJsonPath:e,packageRoot:n,version:t.version??`1.11.2`};let r=x(n);if(r===n)break;n=r}return{foundPackageJson:!1,packageJsonPath:S(x(t),`package.json`),packageRoot:x(t),version:it}}function Sn(){return it}async function Cn(e){try{return JSON.parse(await T(e,`utf8`))}catch{return}}function wn(e){return e.replaceAll(`\\`,`/`).toLowerCase()}function Tn(e){let t=b(wn(e));return t!==`bun`&&t!==`bun.exe`}function En(e){try{return de(e)}catch{return w.execPath}}async function Dn(){try{return await f({resource:`self upgrade`,scope:[`self-upgrade`]})}catch(e){if(c(e))return;throw e}}function On(){return{async acquire(e){if(e.signal.aborted)return Y(`cancelled`,`Self-upgrade lock acquisition was cancelled.`);if(e.scope.length!==1||e.scope[0]!==`self-upgrade`)return Y(`unavailable`,`Unsupported self-upgrade lock scope: ${e.scope.join(`/`)}`);let t=await Dn();if(!t)return Y(`conflict`,`Another qtx upgrade is already running.`);if(e.signal.aborted)return await t(),Y(`cancelled`,`Self-upgrade lock acquisition was cancelled.`);let n=!1;return{kind:`success`,value:{async release(){if(n)return{kind:`success`,value:void 0};n=!0;try{return await t(),{kind:`success`,value:void 0}}catch(e){return Y(`failed`,e instanceof Error?e.message:`Failed to release self-upgrade lock.`)}}}}}}}function Y(e,t){return{error:{kind:e,message:t},kind:`failure`}}async function kn(e,t,n=w.env,r=w.cwd()){if(e!==`bun`&&e!==`npm`)return;let i=g(n.QTX_SELF_UPDATE_REGISTRY);return i?{isOverride:!0,registry:i,source:`quantex-env`}:t.selfUpdateRegistry?{isOverride:!0,registry:t.selfUpdateRegistry,source:`quantex-config`}:await An(e,n,r)||{isOverride:!1,registry:_,source:`fallback`}}async function An(e,t,n){if(e===`bun`){let e=jn(t,[`BUN_CONFIG_REGISTRY`,`NPM_CONFIG_REGISTRY`,`npm_config_registry`]);if(e)return{isOverride:!1,registry:e,source:`bun-env`};let r=await Mn(n,t);if(r)return{isOverride:!1,registry:r,source:`bunfig`}}let r=jn(t,[`NPM_CONFIG_REGISTRY`,`npm_config_registry`]);if(r)return{isOverride:!1,registry:r,source:`npm-env`};let i=await Pn(n,t);if(i)return{isOverride:!1,registry:i,source:`npmrc`}}function jn(e,t){for(let n of t){let t=g(e[n]);if(t)return t}}async function Mn(e,t){let n=Ln(t),r=t.XDG_CONFIG_HOME,i=In(e,`bunfig.toml`),a=[S(n,`.bunfig.toml`),r?S(r,`.bunfig.toml`):void 0];if(i){let e=await Nn(i);if(e)return e}for(let e of a){if(!e||!ne(e))continue;let t=await Nn(e);if(t)return t}}async function Nn(e){try{return Rn(await T(e,`utf8`))}catch{return}}async function Pn(e,t){let n=Ln(t),r=In(e,`.npmrc`),i=S(n,`.npmrc`);if(r){let e=await Fn(r);if(e)return e}if(ne(i))return Fn(i)}async function Fn(e){try{let t=(await T(e,`utf8`)).split(`
4
- `).map(e=>e.trim());for(let e=t.length-1;e>=0;--e){let n=t[e];if(!n||n.startsWith(`#`)||n.startsWith(`;`))continue;let r=n.match(/^registry\s*=\s*(.+)$/);if(!r?.[1])continue;let i=g(r[1]);if(i)return i}}catch{}}function In(e,t){let n=e;for(;;){let e=S(n,t);if(ne(e))return e;let r=x(n);if(r===n)return;n=r}}function Ln(e){return e.HOME||e.USERPROFILE||le()}function Rn(e){let t=zn(e,[/(?:^|\n)\s*install\.registry\s*=\s*["']([^"'#\n]+)["']/,/(?:^|\n)\s*install\.registry\s*=\s*\{\s*url\s*=\s*["']([^"'#\n]+)["']/,/(?:^|\n)\s*install\s*=\s*\{[\s\S]*?\bregistry\s*=\s*["']([^"'#\n]+)["'][\s\S]*?\}/,/(?:^|\n)\s*install\s*=\s*\{[\s\S]*?\bregistry\s*=\s*\{\s*url\s*=\s*["']([^"'#\n]+)["'][\s\S]*?\}[\s\S]*?\}/]);if(t)return g(t);let n=e.match(/(?:^|\n)\s*\[install\]\s*\n([\s\S]*?)(?=\n\s*\[[^\]]+\]|\s*$)/)?.[1];if(n)return g(zn(n,[/(?:^|\n)\s*registry\s*=\s*["']([^"'#\n]+)["']/,/(?:^|\n)\s*registry\s*=\s*\{\s*url\s*=\s*["']([^"'#\n]+)["']/]))}function zn(e,t){for(let n of t){let t=e.match(n)?.[1];if(t)return t}}function Bn(e){return`self:update-metadata:${e.installSource}:${e.updateChannel}`}function Vn(e){return{canAutoUpdate:!0,expiresAtMs:e.expiresAtMs,fetchedAtMs:e.fetchedAtMs,installSource:e.facts.installSource,schemaVersion:1,targetVersion:e.targetVersion,updateChannel:e.facts.updateChannel}}function Hn(e,t){if(Gn(e)&&e.schemaVersion===1&&!(e.canAutoUpdate!==!0||!t.facts.canAutoUpdate)&&!(e.installSource!==t.facts.installSource||e.updateChannel!==t.facts.updateChannel)&&!(typeof e.targetVersion!=`string`||v(e.targetVersion,e.targetVersion)!==0)&&!(!Kn(e.fetchedAtMs)||!Kn(e.expiresAtMs))&&!(e.fetchedAtMs>t.nowMs||e.expiresAtMs<=t.nowMs||e.fetchedAtMs>=e.expiresAtMs))return e}async function Un(e){let t=await e.cache.read({key:Bn(e.facts),signal:e.signal});if(!(t.kind===`failure`||t.value.kind===`miss`)&&!(t.value.expiresAtMs!==void 0&&t.value.expiresAtMs<=e.nowMs))return Hn(t.value.value,e)}function Wn(e){return e.cache.write({expiresAtMs:e.metadata.expiresAtMs,key:Bn(e.metadata),signal:e.signal,value:e.metadata})}function Gn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Kn(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0}async function qn(e,n,r,i){let a=await l();if(e.installSource===`binary`)try{let t=n?await Mt(e.updateChannel,n,r,i):await Mt(e.updateChannel,void 0,r,i),a=Ft(t,e.executablePath);return a?{binaryAsset:a,targetVersion:t.version}:{resolutionError:{detail:{channel:e.updateChannel},kind:`unsupported`,message:`No binary asset is available for the current platform on the ${e.updateChannel} channel.`}}}catch(n){if(t(n))throw n;return{resolutionError:{kind:`network`,message:`Failed to resolve the ${e.updateChannel} release manifest.`}}}let o=e.updateChannel===`beta`?`beta`:`latest`,s=await Ne(B,o,{...n?{context:n}:{},cacheMode:i,networkPort:r,registry:_});if(e.installSource===`bun`||e.installSource===`npm`){let t=await kn(e.installSource,a);return{managedRegistry:t?.registry,managedRegistryIsOverride:t?.isOverride??!1,packageTag:o,targetVersion:await Ne(B,o,{...n?{context:n}:{},cacheMode:i,networkPort:r,registry:t?.registry}),upstreamLatestVersion:s,verificationCommand:er(e.packageRoot)}}return{packageTag:o,targetVersion:s,upstreamLatestVersion:s}}async function X(e){let t=e?.facts??await fn({persistence:e?.persistencePort,signal:e?.context?.signal,updateChannel:e?.updateChannel}),n=e?.target??await qn(t,e?.context,e?.networkPort,e?.metadataCacheMode),r=n.targetVersion?Oe(n.targetVersion,t.currentVersion):!1,i={facts:t,status:Zn(t,n,r),target:n,updateAvailable:r};if(e?.metadataCache&&t.canAutoUpdate&&n.targetVersion){let r=e.nowMs??Date.now(),i=e.metadataTtlMs??(await l()).versionCacheTtlHours*60*60*1e3;await Wn({cache:e.metadataCache,metadata:Vn({expiresAtMs:r+i,facts:t,fetchedAtMs:r,targetVersion:n.targetVersion}),signal:e.context?.signal??new AbortController().signal})}return i}function Jn(e){return{canAutoUpdate:e.facts.canAutoUpdate,currentVersion:e.facts.currentVersion,executablePath:e.facts.executablePath,installSource:e.facts.installSource,latestVersion:e.target.targetVersion,managedRegistry:e.target.managedRegistry,managedRegistryIsOverride:e.target.managedRegistryIsOverride,packageRoot:e.facts.packageRoot,recommendedUpgradeCommand:e.facts.canAutoUpdate?`quantex upgrade`:void 0,upstreamLatestVersion:e.target.upstreamLatestVersion,updateChannel:e.facts.updateChannel}}async function Yn(e,t,n){if(!t.success||e.facts.installSource!==`bun`&&e.facts.installSource!==`npm`)return t;let r=await Qn(e,n);if(!r)return{error:{kind:`verify`,message:`Managed self-upgrade finished but Quantex could not verify the installed version afterwards.`},installSource:e.facts.installSource,success:!1};let i=t.newVersion??e.target.targetVersion;return i&&r!==i?{error:{detail:{expectedVersion:i,observedVersion:r},kind:`verify`,message:`Managed self-upgrade installed version ${r}, but expected ${i}.`},installSource:e.facts.installSource,success:!1}:!i&&r===e.facts.currentVersion&&e.target.targetVersion!==void 0?{error:{detail:{observedVersion:r},kind:`verify`,message:`Managed self-upgrade completed without changing the installed Quantex version.`},installSource:e.facts.installSource,success:!1}:{...t,newVersion:r}}function Xn(e){let t={canAutoUpdate:e.canAutoUpdate,currentVersion:e.currentVersion,executablePath:e.executablePath,installSource:e.installSource,packageRoot:e.packageRoot,updateChannel:e.updateChannel},n={managedRegistry:e.managedRegistry,managedRegistryIsOverride:e.managedRegistryIsOverride,packageTag:e.updateChannel===`beta`?`beta`:`latest`,targetVersion:e.latestVersion,upstreamLatestVersion:e.upstreamLatestVersion,verificationCommand:er(e.packageRoot)},r=e.latestVersion?Oe(e.latestVersion,e.currentVersion):!1;return{facts:t,status:Zn(t,n,r),target:n,updateAvailable:r}}function Zn(e,t,n){return e.canAutoUpdate?t.targetVersion&&!n?`up-to-date`:t.targetVersion?`update-available`:`check-unavailable`:`manual-required`}async function Qn(e,t){let n=t?.process;if(n&&t){let r={...t,process:n};if(e.target.verificationCommand){let t=await $n(e.target.verificationCommand,r);if(t)return t}return $n([e.facts.executablePath,`--version`],r)}if(e.target.verificationCommand){let t=await Ae(e.facts.executablePath,{command:e.target.verificationCommand});if(t)return t}return Ae(e.facts.executablePath)}async function $n(e,t){let n=await t.process.run({argv:e,signal:t.signal,stdio:[`ignore`,`pipe`,`ignore`],timeoutMs:t.timeoutMs});if(n.kind===`failure`){if(n.error.kind===`cancelled`)throw new i({kind:`cancelled`,reason:n.error.message});if(n.error.kind===`timed-out`)throw new i({kind:`timed-out`,timeoutMs:t.timeoutMs??0});return}if(n.value.exitCode!==0||!n.value.stdout)return;let r=new TextDecoder().decode(n.value.stdout).trim().split(`
5
- `)[0];if(r)return r.match(/v?(\d+\.\d+\.\d+(?:-[a-z0-9.]+)?)/i)?.[1]??r}function er(e){if(e)return[w.execPath,S(e,`dist`,`cli.mjs`),`--version`]}async function tr(e,t,n,r,a=ir(t),o){let s=o?.networkPort,c=s&&o?await rr(e,{...o,networkPort:s}):await nr(e);if(c.kind===`failure`)return c.result;let l=c.binary;Z(o);let u=dr(c.binary);if(u!==fr(n))return $(`checksum`,`Checksum mismatch for ${e}. Expected ${fr(n)}, got ${u}.`);if(o?.archiveEntryName)try{l=O.from(ht(l,o.archiveEntryName))}catch(t){return $(`unknown`,`Failed to extract the expected binary from ${e}.`,t)}let d=await ae(S(x(t),`.quantex-upgrade-`)),f=S(d,b(t)),p=`${t}.bak`,m=!1,h=!1;try{Z(o);let e=await ar(t);if(await ce(f,l),Z(o),w.platform===`win32`){let e=or(f,t,p,d,r,a);return h=e.success,e}await re(f,e),Z(o),await D(p,{force:!0}),await E(t,p),m=!0,await E(f,t);let n=await ur(t,r,o);return n.success?(m=!1,await D(p,{force:!0}),{success:!0}):(await lr(p,t),m=!1,n)}catch(e){if(m){try{await lr(p,t)}catch{}m=!1}if(e instanceof i)throw e;return $(cr(e),`Failed to replace the current Quantex binary.`,e)}finally{(w.platform!==`win32`||!h)&&await D(d,{recursive:!0,force:!0})}}function Z(e){if(e?.signal.aborted)throw new i({kind:`cancelled`,reason:e.signal.reason instanceof Error?e.signal.reason.message:String(e.signal.reason??``)})}async function nr(e){let t;try{t=await fetch(e)}catch(t){return{kind:`failure`,result:$(`network`,`Failed to download ${e}.`,t)}}return t.ok?{binary:O.from(await t.arrayBuffer()),kind:`success`}:{kind:`failure`,result:$(`network`,`Failed to download ${e}: HTTP ${t.status}.`)}}async function rr(e,t){let n=await t.networkPort.request({signal:t.signal,timeoutMs:t.timeoutMs,url:e});if(n.kind===`failure`){if(n.error.kind===`cancelled`)throw new i({kind:`cancelled`,reason:n.error.message});if(n.error.kind===`timed-out`)throw new i({kind:`timed-out`,timeoutMs:t.timeoutMs??0});return{kind:`failure`,result:$(`network`,`Failed to download ${e}.`,n.error)}}return n.value.status<200||n.value.status>=300?{kind:`failure`,result:$(`network`,`Failed to download ${e}: HTTP ${n.value.status}.`)}:{binary:O.from(n.value.body),kind:`success`}}function ir(e){if(w.platform!==`win32`)return;let t=C.basename(e).toLowerCase();if(t===`qtx.exe`)return C.join(C.dirname(e),`quantex.exe`);if(t===`quantex.exe`)return C.join(C.dirname(e),`qtx.exe`)}async function ar(e){try{return(await se(e)).mode&511}catch{return 493}}function or(e,t,r,i,a,o){try{return n([`powershell.exe`,`-NoProfile`,`-NonInteractive`,`-ExecutionPolicy`,`Bypass`,`-WindowStyle`,`Hidden`,`-Command`,sr(e,t,r,i,w.pid,a,o)],{stdio:[`ignore`,`ignore`,`ignore`],windowsHide:!0}).unref(),{success:!0}}catch(e){return $(`locked`,`Failed to schedule Windows binary replacement.`,e)}}function sr(e,t,n,r,i,a,o){let s=Q(e),c=Q(t),l=Q(n),u=Q(r),d=Q(a??``),f=Q(o??``);return[`$ErrorActionPreference = 'Stop'`,`$pidToWait = ${i}`,`$tempPath = '${s}'`,`$targetPath = '${c}'`,`$backupPath = '${l}'`,`$tempDir = '${u}'`,`$expectedVersion = '${d}'`,`$peerPath = '${f}'`,`while (Get-Process -Id $pidToWait -ErrorAction SilentlyContinue) { Start-Sleep -Milliseconds 200 }`,`$backupReady = $false`,`for ($attempt = 0; $attempt -lt 50; $attempt++) {`,` try {`,` if (Test-Path -LiteralPath $backupPath) { Remove-Item -LiteralPath $backupPath -Force -ErrorAction SilentlyContinue }`,` Move-Item -LiteralPath $targetPath -Destination $backupPath -Force -ErrorAction Stop`,` $backupReady = $true`,` break`,` }`,` catch {`,` Start-Sleep -Milliseconds 200`,` }`,`}`,`if (-not $backupReady) {`,` Remove-Item -LiteralPath $tempDir -Force -Recurse -ErrorAction SilentlyContinue`,` exit 1`,`}`,`try {`,` Move-Item -LiteralPath $tempPath -Destination $targetPath -Force`,`}`,`catch {`,` if (Test-Path -LiteralPath $backupPath) {`,` Move-Item -LiteralPath $backupPath -Destination $targetPath -Force -ErrorAction SilentlyContinue`,` }`,` Remove-Item -LiteralPath $tempDir -Force -Recurse -ErrorAction SilentlyContinue`,` exit 1`,`}`,`if ($expectedVersion -ne '') {`,` $output = & $targetPath --version 2>$null`,` if ($LASTEXITCODE -ne 0 -or ($output -notmatch [regex]::Escape($expectedVersion))) {`,` Remove-Item -LiteralPath $targetPath -Force -ErrorAction SilentlyContinue`,` Move-Item -LiteralPath $backupPath -Destination $targetPath -Force`,` Remove-Item -LiteralPath $tempDir -Force -Recurse -ErrorAction SilentlyContinue`,` exit 1`,` }`,`}`,`if ($peerPath -ne '') {`,` Copy-Item -LiteralPath $targetPath -Destination $peerPath -Force`,`}`,`Remove-Item -LiteralPath $backupPath -Force -ErrorAction SilentlyContinue`,`Remove-Item -LiteralPath $tempDir -Force -Recurse -ErrorAction SilentlyContinue`].join(`; `)}function Q(e){return e.replaceAll(`'`,`''`)}function $(e,t,n){return{error:{detail:n,kind:e,message:t},success:!1}}function cr(e){let t=typeof e==`object`&&e&&`code`in e?String(e.code):``;return t===`EACCES`||t===`EPERM`?`permission`:t===`EBUSY`?`locked`:`unknown`}async function lr(e,t){await D(t,{force:!0}),await E(e,t)}async function ur(e,t,a){if(!t)return{success:!0};try{if(a?.processPort){let n=await a.processPort.run({argv:[e,`--version`],signal:a.signal,stdio:[`ignore`,`pipe`,`ignore`],timeoutMs:a.timeoutMs});if(n.kind===`failure`){if(n.error.kind===`cancelled`)throw new i({kind:`cancelled`,reason:n.error.message});if(n.error.kind===`timed-out`)throw new i({kind:`timed-out`,timeoutMs:a.timeoutMs??0});return $(`verify`,`Failed to execute the upgraded Quantex binary for verification.`,n.error)}let r=n.value.stdout?new TextDecoder().decode(n.value.stdout):``;return n.value.exitCode===0?r.includes(t)?{success:!0}:$(`verify`,`The upgraded Quantex binary reported an unexpected version during verification.`):$(`verify`,`The upgraded Quantex binary exited with code ${n.value.exitCode} during verification.`)}let{exitCode:o,stdout:s}=await r(n([e,`--version`],{stdio:[`ignore`,`pipe`,`ignore`]}));return o===0?s.includes(t)?{success:!0}:$(`verify`,`The upgraded Quantex binary reported an unexpected version during verification.`):$(`verify`,`The upgraded Quantex binary exited with code ${o} during verification.`)}catch(e){if(e instanceof i)throw e;return $(`verify`,`Failed to execute the upgraded Quantex binary for verification.`,e)}}function dr(e){return ue(`sha256`).update(e).digest(`hex`)}function fr(e){return e.trim().toLowerCase()}const pr={source:`binary`,canHandle:e=>mr(e)===`binary`,getRecoveryHint:(e,t)=>{let n=t?.error?.detail&&typeof t.error.detail==`object`&&`downloadUrl`in t.error.detail?String(t.error.detail.downloadUrl):At(e.executablePath);if(n)return t?.error?.kind===`locked`?`close other qtx processes and retry, or download and replace the binary from ${n}`:t?.error?.kind===`permission`?`check write permission for the current binary path, or download and replace the binary from ${n}`:t?.error?.kind===`network`?`check network access and retry, or download and replace the binary from ${n}`:`download and replace the binary from ${n}`},async upgrade(e,t){let n=e.target.binaryAsset;if(!n)return{error:e.target.resolutionError??{kind:`unsupported`,message:`No release artifact is available for the current platform and architecture.`},installSource:e.facts.installSource,success:!1};let r=ir(e.facts.executablePath),i=V(n.name);if(!i)return{error:{kind:`unsupported`,message:`The resolved release artifact is not a compressed standalone binary archive.`},installSource:e.facts.installSource,success:!1};let a=await tr(n.downloadUrl,e.facts.executablePath,n.checksum,e.target.targetVersion??`latest`,r,t?{archiveEntryName:i,networkPort:t.network,processPort:t.process,signal:t.signal,timeoutMs:t.timeoutMs}:{archiveEntryName:i,signal:new AbortController().signal});return{...!a.success&&a.error?{...a,error:{...a.error,detail:{...typeof a.error.detail==`object`&&a.error.detail?a.error.detail:{},downloadUrl:n.downloadUrl}}}:a,installSource:e.facts.installSource,newVersion:a.success?e.target.targetVersion:void 0}}};function mr(e){return`facts`in e?e.facts.installSource:e.installSource}async function hr(e,t){return t.process?(await _r(e,t,{forwardPipedOutput:!0,stdio:t.stdio}))?.exitCode===0:!1}async function gr(e,t,n){if(!await hr(e,n))return!1;let r=await _r([`bun`,`pm`,`-g`,`untrusted`],n,{forwardPipedOutput:!1,stdio:[`ignore`,`pipe`,`pipe`]});return!r||r.exitCode!==0?!1:a(r.stdout?new TextDecoder().decode(r.stdout):``).has(t)?hr([`bun`,`pm`,`-g`,`trust`,t],n):!0}async function _r(e,t,n){if(!t.process)return;let r=await t.process.run({argv:e,forwardPipedOutput:n.forwardPipedOutput,signal:t.signal,stdio:n.stdio,timeoutMs:t.timeoutMs});if(r.kind===`success`)return r.value;if(r.error.kind===`cancelled`)throw new i({kind:`cancelled`,reason:r.error.message});if(r.error.kind===`timed-out`)throw new i({kind:`timed-out`,timeoutMs:t.timeoutMs??0})}const vr={source:`bun`,canHandle:e=>yr(e)===`bun`,getRecoveryHint:e=>`bun add -g ${B}@${e.updateChannel===`beta`?`beta`:`latest`}`,async upgrade(e,t){let n=e.target.packageTag??(e.facts.updateChannel===`beta`?`beta`:`latest`),r=t?.process?await gr([`bun`,`add`,`-g`,...e.target.managedRegistry?[`--registry`,e.target.managedRegistry]:[],`${B}@${n}`],B,t):await o(B,n,e.target.managedRegistry);return{error:r?void 0:{kind:`unknown`,message:`Failed to update ${B} through Bun.`},installSource:e.facts.installSource,newVersion:r?e.target.targetVersion:void 0,success:r}}};function yr(e){return`facts`in e?e.facts.installSource:e.installSource}const br={source:`npm`,canHandle:e=>xr(e)===`npm`,getRecoveryHint:e=>`npm install -g ${B}@${e.updateChannel===`beta`?`beta`:`latest`}`,async upgrade(e,t){let n=e.target.packageTag??(e.facts.updateChannel===`beta`?`beta`:`latest`),r=t?.process?await hr([`npm`,`install`,`-g`,`${B}@${n}`,...e.target.managedRegistry?[`--registry`,e.target.managedRegistry]:[]],t):await s(B,n,e.target.managedRegistry);return{error:r?void 0:{kind:`unknown`,message:`Failed to update ${B} through npm.`},installSource:e.facts.installSource,newVersion:r?e.target.targetVersion:void 0,success:r}}};function xr(e){return`facts`in e?e.facts.installSource:e.installSource}const Sr={source:`source`,canHandle:e=>{let t=`facts`in e?e.facts.installSource:e.installSource;return t===`source`||t===`unknown`},getRecoveryHint:()=>void 0,async upgrade(e){return{error:{kind:`unsupported`,message:`Install source "${e.facts.installSource}" does not support auto-update.`},installSource:e.facts.installSource,success:!1}}},Cr=[vr,br,pr,Sr];function wr(e){return Cr.find(t=>t.canHandle(e))??Sr}function Tr(e,t,n=`stable`){return wr({canAutoUpdate:e===`binary`||e===`bun`||e===`npm`,currentVersion:``,executablePath:t,installSource:e,packageRoot:``,updateChannel:n})}function Er(e,t,n=`stable`,r){return r?.error?.kind===`locked`?`another qtx upgrade is already running; wait for it to finish and retry`:Tr(e,t,n).getRecoveryHint({canAutoUpdate:e===`binary`||e===`bun`||e===`npm`,currentVersion:``,executablePath:t,installSource:e,packageRoot:``,updateChannel:n},r)}function Dr(e,t){return t?.error?.kind===`locked`?`another qtx upgrade is already running; wait for it to finish and retry`:wr(e).getRecoveryHint(e,t)}async function Or(e){return Jn(await X({updateChannel:e?.updateChannel}))}async function kr(e){let t=await pn({updateChannel:e?.updateChannel});return Jn(await X({context:e?.context,facts:t}))}async function Ar(e,t={}){let n=await Nr(e),r=t.lockPort?await t.lockPort.acquire({resource:`self upgrade`,scope:[`self-upgrade`],signal:t.signal??new AbortController().signal,timeoutMs:t.timeoutMs}):await jr();if(r.kind===`failure`){if(r.error.kind===`cancelled`)throw new i({kind:`cancelled`});if(r.error.kind===`timed-out`)throw new i({kind:`timed-out`,timeoutMs:t.timeoutMs??0});return{error:{kind:r.error.kind===`conflict`?`locked`:`unknown`,message:r.error.message},installSource:n.facts.installSource,success:!1}}let a;try{let e=t.networkPort!==void 0||t.processPort!==void 0,r=t.signal??new AbortController().signal;a=await Yn(n,await wr(n).upgrade(n,e?{network:t.networkPort,process:t.processPort,signal:r,stdio:t.stdio,timeoutMs:t.timeoutMs}:void 0),t.processPort?{process:t.processPort,signal:r,timeoutMs:t.timeoutMs}:void 0)}catch(e){let t=await r.value.release();throw t.kind===`failure`?Error(`Self-upgrade failed and its lock could not be released: ${t.error.message}`,{cause:e}):e}let o=await r.value.release();if(o.kind===`failure`)throw Error(o.error.message);return a}async function jr(){let e=await Dn();return e?{kind:`success`,value:{async release(){return await e(),{kind:`success`,value:void 0}}}}:{error:{kind:`conflict`,message:`Another qtx upgrade is already running.`},kind:`failure`}}function Mr(e,t=w.execPath){return Er(e,t)}async function Nr(e){return e?`facts`in e?e:e.installSource===`binary`?X({facts:{canAutoUpdate:e.canAutoUpdate,currentVersion:e.currentVersion,executablePath:e.executablePath,installSource:e.installSource,packageRoot:e.packageRoot,updateChannel:e.updateChannel}}):Xn(e):X()}function Pr(e){return Rr({...e,error:null,ok:!0})}function Fr(e){return Rr({...e,ok:!1})}function Ir(e,t,n={}){let r=y();return r.cancelled&&!n.force||$e(Qe(e.action),r.outputMode,e,t,e=>console.log(e),e=>Br(e)),e}function Lr(e,t={}){let n=y();if(!(n.cancelled&&!t.force))return et(Qe(e.action),n.outputMode,e,e=>Br(e))}function Rr(e){let t=y();return{action:e.action,data:e.data,error:e.error??null,exitCode:e.exitCode,meta:{fetchedAt:t.freshness?.fetchedAt,mode:t.outputMode,runId:t.runId,schemaVersion:`1`,source:t.freshness?.source,staleAfter:t.freshness?.staleAfter,timestamp:new Date().toISOString(),version:Sn()},ok:e.ok,target:e.target,warnings:e.warnings??[]}}function zr(e){let t=y();return{action:e.action,data:e.data,meta:{fetchedAt:t.freshness?.fetchedAt,mode:`ndjson`,runId:t.runId,schemaVersion:`1`,source:t.freshness?.source,staleAfter:t.freshness?.staleAfter,timestamp:new Date().toISOString(),version:Sn()},target:e.target,type:e.type}}function Br(e){let t=zr(e);return Vr(t),t}function Vr(e){console.log(JSON.stringify(e))}export{Fe as $,Wt as A,ut as B,Yt as C,Jt as D,zt as E,Ot as F,We as G,ft as H,At as I,qe as J,Ge as K,pt as L,Ut as M,Xt as N,Gt as O,Qt as P,Me as Q,ct as R,Ht as S,Kt as T,mt as U,lt as V,B as W,Pe as X,Je as Y,Ae as Z,Sn as _,Mr as a,G as b,Ar as c,Jn as d,Oe as et,X as f,bn as g,gn as h,Ir as i,qt as j,Bt as k,Er as l,On as m,Pr as n,Or as o,Un as p,Ke as q,Lr as r,kr as s,Fr as t,je as tt,Dr as u,pn as v,Rt as w,Vt as x,an as y,dt as z};
@@ -1 +0,0 @@
1
- import{i as e,n as t,t as n}from"./output-BRIAY0Oa.mjs";import{a as r,o as i}from"./providers-CMuU0Elu.mjs";import{i as a,n as o,t as s}from"./human-BL2-F6cA.mjs";import{t as c}from"./color-iQl4CJwm.mjs";import{n as l,r as u}from"./core-read-observations-BHbMkcGV.mjs";async function d(a){let o=await l(a);if(!o)return e(n({action:`resolve`,error:{code:`AGENT_NOT_FOUND`,details:{input:a},message:`Unknown agent: ${a}`},target:{kind:`agent`,name:a}}),f);let{agent:s}=o,c=u(o);if(!c.inPath||!c.binaryPath){let t=c.methods.map(e=>({command:r(s,e),label:i(e),type:e.type})).filter(e=>e.command);return e(n({action:`resolve`,data:{agent:{binaryName:s.binaryName,displayName:s.displayName,name:s.name},resolution:{binaryPath:``,installGuidance:{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t,suggestedAction:`ensure-agent-installed`,suggestedEnsureCommand:`quantex ensure ${s.name}`},installed:!1,installSource:`not-installed`,lifecycle:`unmanaged`,sourceLabel:`not installed`,suggestedLaunchCommand:[]}},error:{code:`AGENT_NOT_INSTALLED`,details:{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t,suggestedAction:`ensure-agent-installed`,suggestedEnsureCommand:`quantex ensure ${s.name}`},message:`${s.displayName} is not installed.`},target:{kind:`agent`,name:s.name}}),f)}return e(t({action:`resolve`,data:{agent:{binaryName:s.binaryName,displayName:s.displayName,name:s.name},resolution:{binaryPath:c.binaryPath,installed:!0,installSource:c.installedState?.installType??`detected-in-path`,installedVersion:c.installedVersion,lifecycle:c.lifecycle,sourceLabel:c.sourceLabel,suggestedLaunchCommand:[c.binaryPath]}},target:{kind:`agent`,name:s.name}}),f)}function f(e){let t=s();if(e.error){for(let n of a(c.red(e.error.message),{width:t}))console.log(n);let n=e.data?.resolution.installGuidance;if(n){for(let e of a(c.dim(`Try: ${n.suggestedEnsureCommand}`),{continuationIndent:` `,width:t}))console.log(e);for(let e of n.installMethods)for(let n of a(c.dim(`[${e.label}] ${e.command}`),{continuationIndent:` `,indent:`Install: `,width:t}))console.log(n)}return}if(!e.data)return;console.log(c.bold(`\n${e.data.agent.displayName}\n`));let n=[{label:`Name`,value:e.data.agent.name},{label:`Binary`,value:e.data.agent.binaryName},{label:`Path`,value:e.data.resolution.binaryPath},{label:`Source`,value:e.data.resolution.sourceLabel},{label:`Lifecycle`,value:e.data.resolution.lifecycle},{label:`Install type`,value:e.data.resolution.installSource},...e.data.resolution.installedVersion?[{label:`Version`,value:e.data.resolution.installedVersion}]:[],{label:`Launch`,value:e.data.resolution.suggestedLaunchCommand.join(` `)}];for(let e of o(n,{labelStyle:c.bold,width:t}))console.log(e);console.log()}export{d as t};