quantex-cli 1.9.1 → 1.9.3

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 (48) hide show
  1. package/dist/{agent-installation-BJJU5uXF.mjs → agent-installation-DHO0ow7r.mjs} +1 -1
  2. package/dist/agent-observation-CfcMn9WV.mjs +1 -0
  3. package/dist/{agents-CB6EgrCq.mjs → agents-CrpEet3k.mjs} +1 -1
  4. package/dist/{agents-C7P-xA0v.mjs → agents-D8cKnruY.mjs} +1 -1
  5. package/dist/capabilities-CsiJ-C_m.mjs +1 -0
  6. package/dist/{capabilities-DRpX0oYJ.mjs → capabilities-D6qhscrW.mjs} +1 -1
  7. package/dist/cli.mjs +1 -1
  8. package/dist/commands-BJ23SK0L.mjs +1 -0
  9. package/dist/{commands-CEzaL8Yd.mjs → commands-BzecusgX.mjs} +1 -1
  10. package/dist/{config-BLkuHAGk.mjs → config-C-JI4qpR.mjs} +1 -1
  11. package/dist/{core-installation-cli-CkmOzkYO.mjs → core-installation-cli-DZ1e77t7.mjs} +1 -1
  12. package/dist/{core-read-observations-py_L86ID.mjs → core-read-observations-BrpZcWvc.mjs} +1 -1
  13. package/dist/{doctor-DWkPOpd3.mjs → doctor-DX1lDHyF.mjs} +1 -1
  14. package/dist/ensure-Doeatx1U.mjs +1 -0
  15. package/dist/{ensure-B1bA6QVE.mjs → ensure-qTmfrIZH.mjs} +1 -1
  16. package/dist/index.mjs +1 -1
  17. package/dist/{info-C18_hff4.mjs → info-C2zlWeSO.mjs} +1 -1
  18. package/dist/inspect-Cgbbp8BQ.mjs +1 -0
  19. package/dist/{inspect-C9j-GclY.mjs → inspect-DMFORkjq.mjs} +1 -1
  20. package/dist/{install-D1BMnGhP.mjs → install-CJ7MEEGP.mjs} +1 -1
  21. package/dist/{installation-compatibility-Mc1ZlVS1.mjs → installation-compatibility-Bp2fRly-.mjs} +1 -1
  22. package/dist/{installation-production-BuCazkkr.mjs → installation-production-CNd4gpYS.mjs} +1 -1
  23. package/dist/{lifecycle-observations-CfxGqoG1.mjs → lifecycle-observations-C0_5T7Bb.mjs} +1 -1
  24. package/dist/{lifecycle-policy-CqPn6tyi.mjs → lifecycle-policy-zCN2-yuJ.mjs} +1 -1
  25. package/dist/{list-CWw2-6sr.mjs → list-DJ1pmciF.mjs} +1 -1
  26. package/dist/{output-V8N4qh1L.mjs → output-B4sRR2tr.mjs} +2 -2
  27. package/dist/{production-observation-DCU7IJZl.mjs → production-observation-naggaOuu.mjs} +1 -1
  28. package/dist/{provider-evidence-B67K3coo.mjs → provider-evidence-DR-QuMEo.mjs} +1 -1
  29. package/dist/{provider-observations-Csayzb91.mjs → provider-observations-BDE3i4I5.mjs} +1 -1
  30. package/dist/{providers-Dm1YYCk4.mjs → providers-p64zNxTK.mjs} +1 -1
  31. package/dist/resolve-BSe6Xsos.mjs +1 -0
  32. package/dist/{resolve-D0GUoUxE.mjs → resolve-BSissTmf.mjs} +1 -1
  33. package/dist/{schema-CbhvnjCG.mjs → schema-CBWLV0OP.mjs} +1 -1
  34. package/dist/schema-DYeOpHFC.mjs +1 -0
  35. package/dist/uninstall-DQD-DRVC.mjs +1 -0
  36. package/dist/{unmanaged-install-compatibility-wJLJfXlr.mjs → unmanaged-install-compatibility-DxP2dgAO.mjs} +1 -1
  37. package/dist/update-CFqegK9t.mjs +1 -0
  38. package/dist/{upgrade-DQFtQVSO.mjs → upgrade-rX9m7AFr.mjs} +1 -1
  39. package/package.json +1 -1
  40. package/dist/agent-observation-CwtWTGGR.mjs +0 -1
  41. package/dist/capabilities-Crhw_Blt.mjs +0 -1
  42. package/dist/commands-xtFP6b7b.mjs +0 -1
  43. package/dist/ensure-BADZwjFz.mjs +0 -1
  44. package/dist/inspect-c7uT6XE1.mjs +0 -1
  45. package/dist/resolve-DcQY7beJ.mjs +0 -1
  46. package/dist/schema-D-0a1QKv.mjs +0 -1
  47. package/dist/uninstall-BknTn1R8.mjs +0 -1
  48. package/dist/update-1wac4HvD.mjs +0 -1
@@ -1 +1 @@
1
- import{i as e,n as t,t as n}from"./output-V8N4qh1L.mjs";import{a as r,o as i}from"./providers-Dm1YYCk4.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-py_L86ID.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};
1
+ import{i as e,n as t,t as n}from"./output-B4sRR2tr.mjs";import{a as r,o as i}from"./providers-p64zNxTK.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-BrpZcWvc.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};
@@ -1,3 +1,3 @@
1
- import{G as e,i as t,n,t as r}from"./output-V8N4qh1L.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(e){let i=u(),a=e?i.filter(t=>t.name===e):i;return e&&a.length===0?t(r({action:`schema`,error:{code:`INVALID_ARGUMENT`,details:{command:e},message:`Unknown schema target: ${e}`},target:{kind:`system`,name:`schema`}}),l):t(n({action:`schema`,data:{commands:a},target:{kind:`system`,name:`schema`}}),l)}function l(e){if(e.error){console.log(s.red(e.error.message));return}if(!e.data)return;let t=o();console.log(s.bold(`
1
+ import{G as e,i as t,n,t as r}from"./output-B4sRR2tr.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(e){let i=u(),a=e?i.filter(t=>t.name===e):i;return e&&a.length===0?t(r({action:`schema`,error:{code:`INVALID_ARGUMENT`,details:{command:e},message:`Unknown schema target: ${e}`},target:{kind:`system`,name:`schema`}}),l):t(n({action:`schema`,data:{commands:a},target:{kind:`system`,name:`schema`}}),l)}function l(e){if(e.error){console.log(s.red(e.error.message));return}if(!e.data)return;let t=o();console.log(s.bold(`
2
2
  Quantex Schemas
3
3
  `));for(let n of a(e.data.commands,[{header:`Command`,maxWidth:24,minWidth:8,value:e=>s.cyan(e.name)},{header:`Description`,minWidth:16,value:e=>e.description,wrap:!0}],{headerStyle:s.bold,width:t}))console.log(n);console.log();for(let e of i(s.dim(`Document: qtx schema <command> --json`),{indent:` `,width:t}))console.log(e);console.log()}function u(){return e().map(e=>e.schema)}export{c as n,u as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./schema-CBWLV0OP.mjs";export{e as schemaCommand};
@@ -0,0 +1 @@
1
+ import{a as e}from"./file-store-XNyirRRY.mjs";import{n as t}from"./detect-BUVMt8jZ.mjs";import{n}from"./cli-context-DI43ouBg.mjs";import{D as r,M as i,O as a,S as o,i as s,j as c,n as l,t as u,x as d}from"./output-B4sRR2tr.mjs";import{p as f}from"./providers-p64zNxTK.mjs";import{t as p}from"./color-iQl4CJwm.mjs";import{g as m,n as h,p as g}from"./agents-D8cKnruY.mjs";import{a as _,i as v,t as y}from"./provider-binding-DV5J36pp.mjs";import{t as b}from"./provider-evidence-DR-QuMEo.mjs";import{t as x}from"./lifecycle-errors-BtlAp_sz.mjs";import{a as S,i as C,n as w,r as T}from"./user-output-DLbKXqDm.mjs";const E=e=>new Promise(t=>setTimeout(t,e));async function D(e,t={}){let n=Math.max(1,t.attempts??6),r=t.delay??E,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 O(p){let b=h(p);if(!b)return s(u({action:`uninstall`,error:{code:`AGENT_NOT_FOUND`,details:{input:p},message:`Unknown agent: ${p}`},target:{kind:`agent`,name:p}}),P);try{return await m(async()=>{let[e,u]=await Promise.all([d(b.name),o(b.name)]);if(!e&&!u)return s(N(p,b),P);let m=await t(b.binaryName),h=e?_(b,e):void 0,x=u?v(u):void 0;if(e&&!h||u&&!x)return s(A(b,`indeterminate-source`,`Cannot resolve provider evidence for ${b.displayName}.`),P);if(h&&x&&!y(h,x,b.binaryName))return s(A(b,`conflicting-source`,`Recorded sources disagree for ${b.displayName}.`),P);let S=h??x,C=await k(S);if(C.kind!==`success`)return s(A(b,`indeterminate-source`,`Cannot verify provider state for ${b.displayName}.`),P);if(C.value.kind===`absent`)return m?s(A(b,`conflicting-source`,`${b.displayName} is on PATH but its recorded provider target is absent.`),P):w()?s(j(b,`would reconcile stale lifecycle evidence`),P):(e&&await r(b.name),u&&await a(b.name),s(M(b),P));if(!e)return s(A(b,`indeterminate-source`,`Cannot safely reconstruct ${b.displayName}'s uninstall source.`),P);if(w())return s(j(b,`would uninstall ${b.displayName}`),P);if(!f(e.installType))return(await g(b,e)).kind===`success`?(await a(b.name),s(l({action:`uninstall`,data:{agent:{displayName:b.displayName,name:b.name},changed:!0},target:{kind:`agent`,name:b.name}}),P)):s(A(b,`provider-failure`,`Failed to uninstall ${b.displayName}.`),P);if(u||await i({...S.target.binaryName?{executableName:S.target.binaryName}:{},kind:`lifecycle-receipt`,providerId:S.providerId,providerTargetId:S.target.id,providerTargetKind:S.target.kind,schemaVersion:1,targetId:b.name,verifiedAt:new Date().toISOString(),...C.value.executablePath?{executablePath:C.value.executablePath}:{},...C.value.version?{version:C.value.version}:{}}),(await g(b,e)).kind===`success`){if(!await D(async()=>{let e=await k(S);return e.kind!==`success`||e.value.kind!==`absent`?!1:!await t(b.binaryName)},{isCancelled:()=>!!n().cancelled})){let t=await k(S);return t.kind===`success`&&t.value.kind===`absent`?(await a(b.name),s(A(b,`conflicting-source`,`${b.displayName}'s managed package was removed, but another copy remains on PATH.`),P)):(await c(e),s(A(b,`verification-failed`,`${b.displayName} is still present after provider removal.`),P))}return await a(b.name),s(l({action:`uninstall`,data:{agent:{displayName:b.displayName,name:b.name},changed:!0},target:{kind:`agent`,name:b.name}}),P)}return s(A(b,`provider-failure`,`Failed to uninstall ${b.displayName}.`),P)})}catch(t){if(e(t))return s(u({action:`uninstall`,data:{agent:{displayName:b.displayName,name:b.name},changed:!1},...x(t,{kind:`agent`,name:b.name})}),P);throw t}}async function k(e){let t=n(),r=new AbortController;return t.cancelled&&r.abort(`cli-cancelled`),b(e,{signal:r.signal,timeoutMs:t.timeoutMs})}function A(e,t,n){return u({action:`uninstall`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1},error:{code:`UNINSTALL_FAILED`,details:{lifecycle:t},message:n},target:{kind:`agent`,name:e.name}})}function j(e,t){return l({action:`uninstall`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1},target:{kind:`agent`,name:e.name},warnings:[{code:`DRY_RUN`,message:`Dry run: ${t}.`}]})}function M(e){return l({action:`uninstall`,data:{agent:{displayName:e.displayName,name:e.name},changed:!0},target:{kind:`agent`,name:e.name},warnings:[{code:`GHOST_STATE_RECONCILED`,message:`${e.displayName} was already absent; stale lifecycle evidence was removed.`}]})}function N(e,t){return u({action:`uninstall`,data:{agent:{displayName:t.displayName,name:t.name},changed:!1},error:{code:`UNINSTALL_UNMANAGED`,details:{canAutoUninstall:!1,displayName:t.displayName,input:e,lifecycle:`unmanaged`,name:t.name},message:`${t.displayName} is not managed by qtx, so qtx cannot auto-uninstall it. Run qtx inspect ${t.name} for details.`},target:{kind:`agent`,name:t.name}})}function P(e){if(e.error){T(p.red(e.error.message));return}if(e.data){if(e.warnings&&e.warnings.length>0){for(let t of e.warnings)S(p.yellow(t.message));return}C(p.cyan(`Uninstalling ${e.data.agent.displayName}...`)),C(p.green(`${e.data.agent.displayName} uninstalled successfully!`))}}export{O as uninstallCommand};
@@ -1 +1 @@
1
- import{n as e}from"./detect-BUVMt8jZ.mjs";import{l as t}from"./providers-Dm1YYCk4.mjs";import{n}from"./agents-C7P-xA0v.mjs";import{n as r}from"./lifecycle-observations-CfxGqoG1.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};
1
+ import{n as e}from"./detect-BUVMt8jZ.mjs";import{l as t}from"./providers-p64zNxTK.mjs";import{n}from"./agents-D8cKnruY.mjs";import{n as r}from"./lifecycle-observations-C0_5T7Bb.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{n as e,r as t,t as n}from"./messages-CoROK9f4.mjs";import{g as r}from"./npm-DUDR-Khz.mjs";import{a as i,d as a}from"./file-store-XNyirRRY.mjs";import{I as o,r as s}from"./agents-CrpEet3k.mjs";import{n as c}from"./cli-context-DI43ouBg.mjs";import{T as l,i as u,n as d,r as f,t as p}from"./output-B4sRR2tr.mjs";import{r as m}from"./providers-p64zNxTK.mjs";import{t as h}from"./cli-operation-context-BS5a069W.mjs";import{t as g}from"./color-iQl4CJwm.mjs";import{g as _,n as v}from"./agents-D8cKnruY.mjs";import{t as y}from"./update-planner-Cr9XVW1l.mjs";import{t as b}from"./lifecycle-observations-C0_5T7Bb.mjs";import{a as x,i as S,n as C,r as w}from"./user-output-DLbKXqDm.mjs";import{n as T}from"./installation-failure-diagnostics-BJnxrzTa.mjs";import{a as E,c as D,l as O,r as k,s as A,u as j}from"./lifecycle-policy-zCN2-yuJ.mjs";async function M(e){let t;for(let n of e.commands){let i=await r(n,e.context,`agent self-update failed`);if(i.kind===`success`)return{kind:`success`,value:{evidence:[{kind:`command`,value:n.join(` `)}],target:e.target}};if(i.kind===`cancelled`||i.kind===`timed-out`)return i;t=i}return t??{kind:`unsupported`,operation:`update`,reason:`No self-update command is configured.`}}async function N(){let e=P();try{return await e.run()}finally{e.dispose()}}function P(){let e=h(),t=0,n=!1,r=!1,c,u,d,f,p=()=>{!n||r||t>0||(r=!0,e.dispose())},m=async r=>{if(n)throw Error(`Lifecycle update batch invocation has been disposed.`);t+=1;try{return await e.run(r)}finally{--t,p()}},g=()=>(d??=a().then(t=>{let n=b(e.context);return{classifyMutationLockError:e=>i(e)?{reason:e.message,resource:e.resource}:void 0,clock:()=>new Date().toISOString(),dryRun:C(),executeSelfUpdate:M,listRegisteredAgentNames:()=>s().map(e=>e.name),observe:n.resolveAgentObservation,planLifecycleUpdate:y,providerRegistry:o,registerCleanup:e.context.registerCleanup,signal:e.context.signal,timeoutMs:e.context.timeoutMs,updateOptions:{updateStrategy:t.npmBunUpdateStrategy},withMutationLock:_,writeReceipt:l.write}}),d),v=()=>n?Promise.reject(Error(`Lifecycle update batch invocation has been disposed.`)):(u??=m(async()=>O(await g())),u);return{dispose(){n||(n=!0,p())},getOutcome:()=>c,async observe(e){return m(async()=>(await g()).observe(e))},prepare:v,run(){return n?Promise.reject(Error(`Lifecycle update batch invocation has been disposed.`)):(f??=(async()=>{let e=await v();return c=await m(async()=>A(e,await g())),c})(),f)}}}async function F(e){let t=I(e);try{return await t.run()}finally{t.dispose()}}function I(e){let t=h(),n=0,r=!1,i=!1,s,c,u,d,f=()=>{!r||i||n>0||(i=!0,t.dispose())},p=async e=>{if(r)throw Error(`Single-agent update invocation has been disposed.`);n+=1;try{return await t.run(e)}finally{--n,f()}},m=()=>(u??=a().then(e=>{let n=b(t.context);return{clock:()=>new Date().toISOString(),dryRun:C(),executeSelfUpdate:M,observe:n.resolveAgentObservation,planLifecycleUpdate:y,providerRegistry:o,registerCleanup:t.context.registerCleanup,signal:t.context.signal,timeoutMs:t.context.timeoutMs,updateOptions:{updateStrategy:e.npmBunUpdateStrategy},withMutationLock:_,writeReceipt:l.write}}),u),g=()=>r?Promise.reject(Error(`Single-agent update invocation has been disposed.`)):(c??=p(async()=>j(e,await m())),c);return{dispose(){r||(r=!0,f())},getOutcome:()=>s,async observe(e){return p(async()=>(await m()).observe(e))},prepare:g,run(){return r?Promise.reject(Error(`Single-agent update invocation has been disposed.`)):(d??=(async()=>{let e=await g();return s=e.kind===`planned`?await p(async()=>D(e.planned,await m())):e,s})(),d)}}}async function L(e,t,n={runBatch:N,runSingle:F}){if(t)return z(n);if(!e)return u(p({action:`update`,error:{code:`INVALID_ARGUMENT`,message:`Please specify an agent name or use --all flag`},target:{kind:`agent`}}),Q);let r=v(e);return r?B(r,n):u(p({action:`update`,error:{code:`AGENT_NOT_FOUND`,details:{input:e},message:`Unknown agent: ${e}`},target:{kind:`agent`,name:e}}),Q)}function R(e,t){if(t){let t=P();return{dispose:t.dispose,idempotencyPolicy:()=>k(t),run:()=>L(e,!0,{runBatch:()=>t.run(),runSingle:F})}}if(!e)return{dispose(){},run:()=>L(e,t)};let n=I(e);return{dispose:n.dispose,idempotencyPolicy:()=>E(e,n),run:()=>L(e,!1,{runBatch:N,runSingle:()=>n.run()})}}async function z(e){f({action:`update`,data:{scope:`all`},target:{kind:`agent`},type:`started`});let t=await e.runBatch(),n=U(t),r=K(t);return X(t)?u(p({action:`update`,data:{results:n,scope:`all`},error:{code:`CANCELLED`,message:`Update was cancelled before all agents could be updated.`},target:{kind:`agent`},warnings:r}),Q):n.some(e=>e.status===`failed`||e.status===`locked`)?u(p({action:`update`,data:{results:n,scope:`all`},error:{code:`UPDATE_FAILED`,message:`One or more agents failed to update.`},target:{kind:`agent`},warnings:r}),Q):u(d({action:`update`,data:{results:n,scope:`all`},target:{kind:`agent`},warnings:r}),Q)}async function B(e,t){f({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(!i(t))throw t;return u(p({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=H(n);if(n.kind===`unknown-agent`)return u(p({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`?[q(e)]:[];return u(p({action:`update`,error:{code:`AGENT_NOT_INSTALLED`,message:`${e.displayName} is not installed.`},target:{kind:`agent`,name:e.name},warnings:t}),Q)}let a=V(e,n);return Z([],a),n.kind===`cancelled`?u(p({action:`update`,data:{results:[a],scope:`single`},error:{code:`CANCELLED`,message:`Update of ${e.displayName} was cancelled.`},target:{kind:`agent`,name:e.name}}),Q):a.status===`failed`||a.status===`locked`?u(p({action:`update`,data:{results:[a],scope:`single`},error:{code:`UPDATE_FAILED`,message:`Failed to update ${e.displayName}.`},target:{kind:`agent`,name:e.name}}),Q):u(d({action:`update`,data:{results:[a],scope:`single`},target:{kind:`agent`,name:e.name}}),Q)}function V(n,r){let i=H(r),a=`plan`in r?r.plan:void 0,o=i?.observation.kind===`present`?i.observation.version:void 0,s=J(a),c=Y(a)??i?.binding?.providerId;switch(r.kind){case`updated`:return{displayName:n.displayName,installedVersion:o,latestVersion:r.receipt.version??s,name:n.name,status:`updated`,strategy:c};case`up-to-date`:return{displayName:n.displayName,installedVersion:r.receipt.version??o,name:n.name,status:`up-to-date`,strategy:c};case`dry-run`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,message:`Dry run: would update ${n.displayName}.`,name:n.name,status:`planned`,strategy:c};case`not-executed`:return r.plan.planning.decision===`up-to-date`?{displayName:n.displayName,installedVersion:o,latestVersion:s,name:n.name,status:`up-to-date`}:{displayName:n.displayName,installedVersion:o,latestVersion:s,message:e(n),name:n.name,status:`manual-required`};case`blocked`:return r.category===`untracked`?{displayName:n.displayName,installedVersion:o,message:t(n),name:n.name,status:`manual-required`}:r.category===`manual-required`?{displayName:n.displayName,installedVersion:o,message:e(n),name:n.name,status:`manual-required`}:{displayName:n.displayName,installedVersion:o,message:r.reason,name:n.name,status:`failed`};case`cancelled`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,message:r.reason??`Update was cancelled before it could complete.`,name:n.name,status:`failed`,strategy:c};case`timed-out`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,message:`Update timed out after ${r.timeoutMs}ms.`,name:n.name,status:`failed`,strategy:c};case`provider-failed`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,name:n.name,status:`failed`,strategy:c};case`verification-failed`:case`receipt-failed`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,message:r.kind===`receipt-failed`?r.reason:r.verification.reason,name:n.name,status:`failed`,strategy:c};case`unknown-agent`:return{displayName:n.displayName,name:n.name,status:`failed`}}}function H(e){if(`plan`in e)return e.plan.before;if(`before`in e)return e.before}function U(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=W(e);t&&Z(r,t)}else a&&Z(r,G(a))}return r}function W(e){let t=e.planning.kind===`unknown-agent`?void 0:e.planning.kind===`planned`?e.planning.planned.before:e.planning.before,r=v(e.agentName);if(!r)return{displayName:t?.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:J(i.plan),message:i.reason,name:r.name,resource:i.resource,status:`locked`,strategy:Y(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:J(i.plan),message:i.reason,name:r.name,status:`failed`,strategy:Y(i.plan)};let a=i??(e.planning.kind===`planned`?{kind:`not-executed`,plan:e.planning.planned}:e.planning),o=V(r,a);return o.status===`failed`&&a.kind===`provider-failed`&&(o.hint=n(r,m({agent:r,installedState:t?.installedState,methods:[...t?.methods??[]]}))),o}function G(e){let t=v(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:J(e.planning.planned),message:e.reason??`Update was cancelled before it could start.`,name:t?.name??e.agentName,status:`failed`,strategy:Y(e.planning.planned)}}function K(e){return e.plan.targets.flatMap(e=>e.outcome.kind!==`blocked`||e.outcome.category!==`stale-state`?[]:[q(v(e.agentName)??e.outcome.before.agent)])}function q(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 J(e){return e?.strategy===`managed-provider`?e.plannedTargetVersion:void 0}function Y(e){if(e)return e.strategy===`self-update`?`self-update`:`managed/${e.binding.providerId}`}function X(e){return c().cancelled||e.cancellationRemainder.length>0||e.results.some(e=>e.planning.kind===`cancelled`||e.execution?.kind===`cancelled`)}function Z(e,t){e.push(t),f({action:`update`,data:t,target:{kind:`agent`,name:t.name},type:`progress`})}function Q(e){if(!e.data){e.error&&w(g.red(e.error.message));return}for(let t of e.warnings)x(g.yellow(t.message));for(let t of e.data.results)switch(t.status){case`up-to-date`:S(g.green(`${t.displayName} is up to date (${t.installedVersion??`unknown`})`));break;case`manual-required`:x(g.yellow(`${t.displayName}: manual action required.`)),t.message&&x(g.cyan(`Next step: ${t.message}`));break;case`planned`:x(g.cyan(`Would update ${t.displayName}${t.strategy?` via ${t.strategy}`:``}${$(t.installedVersion,t.latestVersion)}`));break;case`updated`:S(g.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${$(t.installedVersion,t.latestVersion)}`)),S(g.green(`${t.displayName} updated successfully!`));break;case`failed`:S(g.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${$(t.installedVersion,t.latestVersion)}`)),w(g.red(T(`Failed to update ${t.displayName}.`,t.message))),t.hint&&x(g.cyan(`Next step: ${t.hint}`));break;case`locked`:x(g.yellow(t.message??`Another quantex process is already updating ${t.displayName}.`));break}e.data.results.length>1&&ee(e.data.results),!e.data.results.length&&e.error&&w(g.red(e.error.message))}function $(e,t){return e?` (${e} -> ${t??`latest`})`:``}function ee(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&&S(g.bold(`Summary: ${n.join(`, `)}`))}export{R 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-V8N4qh1L.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-B4sRR2tr.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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quantex-cli",
3
- "version": "1.9.1",
3
+ "version": "1.9.3",
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{s as e}from"./schema-BBnWVY6R.mjs";import{a as t,i as n,n as r,t as i}from"./provider-binding-DV5J36pp.mjs";async function a(e,a){let[s,y,b]=await Promise.all([a.inspectExecutable(e),a.readInstalledState(e.name),a.readReceipt(e.name)]),x=a.clock(),S=r(e,a.platform),C=S.bindings,w=o(C,a.observationBinding,e.binaryName),T=w?[w]:C,E=y?t(e,y):void 0,D=b?n(b):void 0,O=D??E,k={catalogMethods:C,executable:s,installedState:y,pathExecutable:s,persistedBinding:O,receipt:b};if(y&&!E||b&&!D)return{...k,capabilities:[],observation:u(e,x,`Persisted provider binding cannot be resolved.`)};if(E&&D&&!i(E,D,e.binaryName))return{...k,capabilities:[],observation:s.present?l(e,s,x,{kind:`conflicting-source`,observedProviderId:E.providerId,recordedProviderId:D.providerId}):{drift:{kind:`conflicting-source`,observedProviderId:E.providerId,recordedProviderId:D.providerId},kind:`absent`,observedAt:x,targetId:e.name}};let A=O;if(A){let t=await c(A,a),n=a.providerRegistry.getCapabilities(A.providerId);if(t.kind!==`success`)return{...k,binding:A,capabilities:n,observation:u(e,x,_(t)),providerOutcome:t};let r=t.value;if(!h(A,r))return{...k,binding:A,capabilities:n,observation:g(e,s,x),providerOutcome:t};if(r.kind===`absent`&&!s.present)return{...k,binding:A,capabilities:n,observation:{drift:{kind:`recorded-absent`},kind:`absent`,observedAt:x,targetId:e.name},providerOutcome:t};let[i,o]=await Promise.all([r.kind===`present`?p(r.executablePath,s.path,a):!1,p(b?.executablePath,s.path,a)]),v=r.kind!==(s.present?`present`:`absent`)||s.present&&i||r.kind===`present`&&f(r.version,s.version)||o||m(e,y,b,A),S=d(s,r);return{...k,binding:A,capabilities:n,executable:S,observation:l(e,S,x,v?{kind:`conflicting-source`,observedProviderId:r.kind===`present`?A.providerId:void 0,recordedProviderId:A.providerId}:{kind:`none`},r.kind===`present`?A:void 0),providerOutcome:t}}let j=await Promise.all(T.map(async e=>({binding:e,outcome:await c(e,a)}))),M=j.find(e=>e.outcome.kind===`success`&&!h(e.binding,e.outcome.value));if(M)return{...k,capabilities:[],observation:g(e,s,x),providerOutcome:M.outcome};let N=j.filter(e=>e.outcome.kind===`success`&&e.outcome.value.kind===`present`),P=j.filter(e=>e.binding.providerId!==`binary`&&e.binding.providerId!==`script`),F=P.filter(e=>e.outcome.kind===`success`&&e.outcome.value.kind===`present`),I=P.some(e=>e.outcome.kind!==`success`),L=F.length>0?F:I?[]:N;if(L.length>1)return{...k,capabilities:[],observation:s.present?l(e,s,x,{kind:`conflicting-source`}):{drift:{kind:`conflicting-source`},kind:`indeterminate`,observedAt:x,reason:`Multiple catalog providers report the agent as present.`,targetId:e.name}};if(!w&&S.unresolvedCandidates.length>0)return{...k,capabilities:[],observation:u(e,x,`A catalog provider binding cannot be resolved.`)};let R=j.map(e=>e.outcome).find(v),z=j.map(e=>e.outcome).find(e=>e.kind===`cancelled`||e.kind===`timed-out`);if(z)return{...k,capabilities:[],observation:u(e,x,_(z)),providerOutcome:z};let B=L[0];if(B){let t=B.binding,n=B.outcome.value,r=d(s,n),i=await p(n.executablePath,s.path,a),o=!s.present||i||f(n.version,s.version);return{...k,binding:t,capabilities:a.providerRegistry.getCapabilities(t.providerId),executable:r,observation:l(e,r,x,o?{kind:`conflicting-source`,observedProviderId:t.providerId}:{kind:`untracked`},t),providerOutcome:B.outcome}}let V=w??a.preferredCatalogBinding,H=V?j.find(t=>i(t.binding,V,e.binaryName)&&t.outcome.kind===`success`&&t.outcome.value.kind===`absent`):void 0;return!s.present&&N.length===0&&R&&H?{...k,capabilities:[],observation:{drift:{kind:`none`},kind:`absent`,observedAt:x,targetId:e.name},providerOutcome:H.outcome}:R?{...k,capabilities:[],observation:u(e,x,_(R)),providerOutcome:R}:{...k,capabilities:[],observation:s.present?l(e,s,x,{kind:`untracked`}):{drift:{kind:`none`},kind:`absent`,observedAt:x,targetId:e.name}}}function o(e,t,n){if(t)return e.find(e=>i(e,t,n)&&s(e.target.arguments,t.target.arguments))}function s(e,t){return!e||!t?e===t:e.length===t.length&&e.every((e,n)=>e===t[n])}async function c(e,t){try{if(t.observeProvider)return await t.observeProvider(e,{registry:t.providerRegistry,signal:t.signal,timeoutMs:t.timeoutMs});let n=t.providerRegistry.get(e.providerId);return n?await n.observe({context:{signal:t.signal,timeoutMs:t.timeoutMs},target:e.target}):{kind:`unavailable`,reason:`Provider ${e.providerId} is not registered.`,retryable:!1}}catch(e){return{kind:`failed`,reason:y(e),retryable:!1}}}function l(e,t,n,r,i){return{drift:r,...t.path?{executablePath:t.path}:{},kind:`present`,observedAt:n,...i?{providerId:i.providerId,providerTargetId:i.target.id,providerTargetKind:i.target.kind}:{},targetId:e.name,...t.version?{version:t.version}:{}}}function u(e,t,n){return{drift:{kind:`indeterminate`,reason:n},kind:`indeterminate`,observedAt:t,reason:n,targetId:e.name}}function d(e,t){return t.kind===`absent`?e:{path:e.path??t.executablePath,present:!0,version:e.version??t.version}}function f(t,n){if(t===void 0||n===void 0)return!1;let r=e(t,n);return r===void 0?t!==n:r!==0}async function p(e,t,n){if(e===void 0||t===void 0||e===t)return!1;if(!n.resolveExecutablePath)return!0;let[r,i]=await Promise.all([n.resolveExecutablePath(e),n.resolveExecutablePath(t)]);return r===void 0||i===void 0||r!==i}function m(e,t,n,r){let i=[e.binaryName,t?.binaryName,n?.executableName,r.target.binaryName].filter(e=>e!==void 0);return new Set(i).size>1}function h(e,t){return e.target.id===t.target.id&&e.target.kind===t.target.kind}function g(e,t,n){return t.present?l(e,t,n,{kind:`conflicting-source`}):{drift:{kind:`conflicting-source`},kind:`indeterminate`,observedAt:n,reason:`Provider evidence does not match the requested target identity.`,targetId:e.name}}function _(e){switch(e.kind){case`unsupported`:return e.reason??`Provider does not support ${e.operation}.`;case`unavailable`:case`failed`:case`indeterminate`:return e.reason;case`cancelled`:return e.reason??`Provider observation was cancelled.`;case`timed-out`:return`Provider observation timed out after ${e.timeoutMs}ms.`}}function v(e){return e.kind!==`success`}function y(e){return e instanceof Error&&e.message.trim().length>0?`Provider observation rejected: ${e.message.trim().slice(0,500)}`:`Provider observation rejected unexpectedly.`}export{a as t};
@@ -1 +0,0 @@
1
- import{t as e}from"./capabilities-DRpX0oYJ.mjs";export{e as capabilitiesCommand};
@@ -1 +0,0 @@
1
- import{t as e}from"./commands-CEzaL8Yd.mjs";export{e as commandsCommand};
@@ -1 +0,0 @@
1
- import{n as e,t}from"./ensure-B1bA6QVE.mjs";export{t as ensureCommand,e as ensureCommandWithRoute};
@@ -1 +0,0 @@
1
- import{t as e}from"./inspect-C9j-GclY.mjs";export{e as inspectCommand};
@@ -1 +0,0 @@
1
- import{t as e}from"./resolve-D0GUoUxE.mjs";export{e as resolveCommand};
@@ -1 +0,0 @@
1
- import{n as e}from"./schema-CbhvnjCG.mjs";export{e as schemaCommand};
@@ -1 +0,0 @@
1
- import{a as e}from"./file-store-XNyirRRY.mjs";import{n as t}from"./detect-BUVMt8jZ.mjs";import{n}from"./cli-context-DI43ouBg.mjs";import{D as r,M as i,O as a,S as o,i as s,j as c,n as l,t as u,x as d}from"./output-V8N4qh1L.mjs";import{p as f}from"./providers-Dm1YYCk4.mjs";import{t as p}from"./color-iQl4CJwm.mjs";import{g as m,n as h,p as g}from"./agents-C7P-xA0v.mjs";import{a as _,i as v}from"./provider-binding-DV5J36pp.mjs";import{t as y}from"./provider-evidence-B67K3coo.mjs";import{t as b}from"./lifecycle-errors-BtlAp_sz.mjs";import{a as x,i as S,n as C,r as w}from"./user-output-DLbKXqDm.mjs";const T=e=>new Promise(t=>setTimeout(t,e));async function E(e,t={}){let n=Math.max(1,t.attempts??6),r=t.delay??T,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 D(p){let y=h(p);if(!y)return s(u({action:`uninstall`,error:{code:`AGENT_NOT_FOUND`,details:{input:p},message:`Unknown agent: ${p}`},target:{kind:`agent`,name:p}}),P);try{return await m(async()=>{let[e,u]=await Promise.all([d(y.name),o(y.name)]);if(!e&&!u)return s(N(p,y),P);let m=await t(y.binaryName),h=e?_(y,e):void 0,b=u?v(u):void 0;if(e&&!h||u&&!b)return s(A(y,`indeterminate-source`,`Cannot resolve provider evidence for ${y.displayName}.`),P);if(h&&b&&!O(h,b))return s(A(y,`conflicting-source`,`Recorded sources disagree for ${y.displayName}.`),P);let x=h??b,S=await k(x);if(S.kind!==`success`)return s(A(y,`indeterminate-source`,`Cannot verify provider state for ${y.displayName}.`),P);if(S.value.kind===`absent`)return m?s(A(y,`conflicting-source`,`${y.displayName} is on PATH but its recorded provider target is absent.`),P):C()?s(j(y,`would reconcile stale lifecycle evidence`),P):(e&&await r(y.name),u&&await a(y.name),s(M(y),P));if(!e)return s(A(y,`indeterminate-source`,`Cannot safely reconstruct ${y.displayName}'s uninstall source.`),P);if(C())return s(j(y,`would uninstall ${y.displayName}`),P);if(!f(e.installType))return(await g(y,e)).kind===`success`?(await a(y.name),s(l({action:`uninstall`,data:{agent:{displayName:y.displayName,name:y.name},changed:!0},target:{kind:`agent`,name:y.name}}),P)):s(A(y,`provider-failure`,`Failed to uninstall ${y.displayName}.`),P);if(u||await i({...x.target.binaryName?{executableName:x.target.binaryName}:{},kind:`lifecycle-receipt`,providerId:x.providerId,providerTargetId:x.target.id,providerTargetKind:x.target.kind,schemaVersion:1,targetId:y.name,verifiedAt:new Date().toISOString(),...S.value.executablePath?{executablePath:S.value.executablePath}:{},...S.value.version?{version:S.value.version}:{}}),(await g(y,e)).kind===`success`){if(!await E(async()=>{let e=await k(x);return e.kind!==`success`||e.value.kind!==`absent`?!1:!await t(y.binaryName)},{isCancelled:()=>!!n().cancelled})){let t=await k(x);return t.kind===`success`&&t.value.kind===`absent`?(await a(y.name),s(A(y,`conflicting-source`,`${y.displayName}'s managed package was removed, but another copy remains on PATH.`),P)):(await c(e),s(A(y,`verification-failed`,`${y.displayName} is still present after provider removal.`),P))}return await a(y.name),s(l({action:`uninstall`,data:{agent:{displayName:y.displayName,name:y.name},changed:!0},target:{kind:`agent`,name:y.name}}),P)}return s(A(y,`provider-failure`,`Failed to uninstall ${y.displayName}.`),P)})}catch(t){if(e(t))return s(u({action:`uninstall`,data:{agent:{displayName:y.displayName,name:y.name},changed:!1},...b(t,{kind:`agent`,name:y.name})}),P);throw t}}function O(e,t){return e.providerId===t.providerId&&e.target.id===t.target.id&&e.target.kind===t.target.kind&&e.target.binaryName===t.target.binaryName}async function k(e){let t=n(),r=new AbortController;return t.cancelled&&r.abort(`cli-cancelled`),y(e,{signal:r.signal,timeoutMs:t.timeoutMs})}function A(e,t,n){return u({action:`uninstall`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1},error:{code:`UNINSTALL_FAILED`,details:{lifecycle:t},message:n},target:{kind:`agent`,name:e.name}})}function j(e,t){return l({action:`uninstall`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1},target:{kind:`agent`,name:e.name},warnings:[{code:`DRY_RUN`,message:`Dry run: ${t}.`}]})}function M(e){return l({action:`uninstall`,data:{agent:{displayName:e.displayName,name:e.name},changed:!0},target:{kind:`agent`,name:e.name},warnings:[{code:`GHOST_STATE_RECONCILED`,message:`${e.displayName} was already absent; stale lifecycle evidence was removed.`}]})}function N(e,t){return u({action:`uninstall`,data:{agent:{displayName:t.displayName,name:t.name},changed:!1},error:{code:`UNINSTALL_UNMANAGED`,details:{canAutoUninstall:!1,displayName:t.displayName,input:e,lifecycle:`unmanaged`,name:t.name},message:`${t.displayName} is not managed by qtx, so qtx cannot auto-uninstall it. Run qtx inspect ${t.name} for details.`},target:{kind:`agent`,name:t.name}})}function P(e){if(e.error){w(p.red(e.error.message));return}if(e.data){if(e.warnings&&e.warnings.length>0){for(let t of e.warnings)x(p.yellow(t.message));return}S(p.cyan(`Uninstalling ${e.data.agent.displayName}...`)),S(p.green(`${e.data.agent.displayName} uninstalled successfully!`))}}export{D as uninstallCommand};
@@ -1 +0,0 @@
1
- import{n as e,r as t,t as n}from"./messages-CoROK9f4.mjs";import{g as r}from"./npm-DUDR-Khz.mjs";import{a as i,d as a}from"./file-store-XNyirRRY.mjs";import{I as o,r as s}from"./agents-CB6EgrCq.mjs";import{n as c}from"./cli-context-DI43ouBg.mjs";import{T as l,i as u,n as d,r as f,t as p}from"./output-V8N4qh1L.mjs";import{r as m}from"./providers-Dm1YYCk4.mjs";import{t as h}from"./cli-operation-context-BS5a069W.mjs";import{t as g}from"./color-iQl4CJwm.mjs";import{g as _,n as v}from"./agents-C7P-xA0v.mjs";import{t as y}from"./update-planner-Cr9XVW1l.mjs";import{t as b}from"./lifecycle-observations-CfxGqoG1.mjs";import{a as x,i as S,n as C,r as w}from"./user-output-DLbKXqDm.mjs";import{a as T,c as E,l as D,r as O,s as k,u as A}from"./lifecycle-policy-CqPn6tyi.mjs";async function j(e){let t;for(let n of e.commands){let i=await r(n,e.context,`agent self-update failed`);if(i.kind===`success`)return{kind:`success`,value:{evidence:[{kind:`command`,value:n.join(` `)}],target:e.target}};if(i.kind===`cancelled`||i.kind===`timed-out`)return i;t=i}return t??{kind:`unsupported`,operation:`update`,reason:`No self-update command is configured.`}}async function M(){let e=N();try{return await e.run()}finally{e.dispose()}}function N(){let e=h(),t=0,n=!1,r=!1,c,u,d,f,p=()=>{!n||r||t>0||(r=!0,e.dispose())},m=async r=>{if(n)throw Error(`Lifecycle update batch invocation has been disposed.`);t+=1;try{return await e.run(r)}finally{--t,p()}},g=()=>(d??=a().then(t=>{let n=b(e.context);return{classifyMutationLockError:e=>i(e)?{reason:e.message,resource:e.resource}:void 0,clock:()=>new Date().toISOString(),dryRun:C(),executeSelfUpdate:j,listRegisteredAgentNames:()=>s().map(e=>e.name),observe:n.resolveAgentObservation,planLifecycleUpdate:y,providerRegistry:o,registerCleanup:e.context.registerCleanup,signal:e.context.signal,timeoutMs:e.context.timeoutMs,updateOptions:{updateStrategy:t.npmBunUpdateStrategy},withMutationLock:_,writeReceipt:l.write}}),d),v=()=>n?Promise.reject(Error(`Lifecycle update batch invocation has been disposed.`)):(u??=m(async()=>D(await g())),u);return{dispose(){n||(n=!0,p())},getOutcome:()=>c,async observe(e){return m(async()=>(await g()).observe(e))},prepare:v,run(){return n?Promise.reject(Error(`Lifecycle update batch invocation has been disposed.`)):(f??=(async()=>{let e=await v();return c=await m(async()=>k(e,await g())),c})(),f)}}}async function P(e){let t=F(e);try{return await t.run()}finally{t.dispose()}}function F(e){let t=h(),n=0,r=!1,i=!1,s,c,u,d,f=()=>{!r||i||n>0||(i=!0,t.dispose())},p=async e=>{if(r)throw Error(`Single-agent update invocation has been disposed.`);n+=1;try{return await t.run(e)}finally{--n,f()}},m=()=>(u??=a().then(e=>{let n=b(t.context);return{clock:()=>new Date().toISOString(),dryRun:C(),executeSelfUpdate:j,observe:n.resolveAgentObservation,planLifecycleUpdate:y,providerRegistry:o,registerCleanup:t.context.registerCleanup,signal:t.context.signal,timeoutMs:t.context.timeoutMs,updateOptions:{updateStrategy:e.npmBunUpdateStrategy},withMutationLock:_,writeReceipt:l.write}}),u),g=()=>r?Promise.reject(Error(`Single-agent update invocation has been disposed.`)):(c??=p(async()=>A(e,await m())),c);return{dispose(){r||(r=!0,f())},getOutcome:()=>s,async observe(e){return p(async()=>(await m()).observe(e))},prepare:g,run(){return r?Promise.reject(Error(`Single-agent update invocation has been disposed.`)):(d??=(async()=>{let e=await g();return s=e.kind===`planned`?await p(async()=>E(e.planned,await m())):e,s})(),d)}}}async function I(e,t,n={runBatch:M,runSingle:P}){if(t)return R(n);if(!e)return u(p({action:`update`,error:{code:`INVALID_ARGUMENT`,message:`Please specify an agent name or use --all flag`},target:{kind:`agent`}}),Z);let r=v(e);return r?z(r,n):u(p({action:`update`,error:{code:`AGENT_NOT_FOUND`,details:{input:e},message:`Unknown agent: ${e}`},target:{kind:`agent`,name:e}}),Z)}function L(e,t){if(t){let t=N();return{dispose:t.dispose,idempotencyPolicy:()=>O(t),run:()=>I(e,!0,{runBatch:()=>t.run(),runSingle:P})}}if(!e)return{dispose(){},run:()=>I(e,t)};let n=F(e);return{dispose:n.dispose,idempotencyPolicy:()=>T(e,n),run:()=>I(e,!1,{runBatch:M,runSingle:()=>n.run()})}}async function R(e){f({action:`update`,data:{scope:`all`},target:{kind:`agent`},type:`started`});let t=await e.runBatch(),n=H(t),r=G(t);return Y(t)?u(p({action:`update`,data:{results:n,scope:`all`},error:{code:`CANCELLED`,message:`Update was cancelled before all agents could be updated.`},target:{kind:`agent`},warnings:r}),Z):n.some(e=>e.status===`failed`||e.status===`locked`)?u(p({action:`update`,data:{results:n,scope:`all`},error:{code:`UPDATE_FAILED`,message:`One or more agents failed to update.`},target:{kind:`agent`},warnings:r}),Z):u(d({action:`update`,data:{results:n,scope:`all`},target:{kind:`agent`},warnings:r}),Z)}async function z(e,t){f({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(!i(t))throw t;return u(p({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}}),Z)}let r=V(n);if(n.kind===`unknown-agent`)return u(p({action:`update`,error:{code:`AGENT_NOT_FOUND`,message:`Unknown agent: ${e.name}`},target:{kind:`agent`,name:e.name}}),Z);if(r?.observation.kind===`absent`){let t=r.observation.drift.kind===`recorded-absent`?[K(e)]:[];return u(p({action:`update`,error:{code:`AGENT_NOT_INSTALLED`,message:`${e.displayName} is not installed.`},target:{kind:`agent`,name:e.name},warnings:t}),Z)}let a=B(e,n);return X([],a),n.kind===`cancelled`?u(p({action:`update`,data:{results:[a],scope:`single`},error:{code:`CANCELLED`,message:`Update of ${e.displayName} was cancelled.`},target:{kind:`agent`,name:e.name}}),Z):a.status===`failed`||a.status===`locked`?u(p({action:`update`,data:{results:[a],scope:`single`},error:{code:`UPDATE_FAILED`,message:`Failed to update ${e.displayName}.`},target:{kind:`agent`,name:e.name}}),Z):u(d({action:`update`,data:{results:[a],scope:`single`},target:{kind:`agent`,name:e.name}}),Z)}function B(n,r){let i=V(r),a=`plan`in r?r.plan:void 0,o=i?.observation.kind===`present`?i.observation.version:void 0,s=q(a),c=J(a)??i?.binding?.providerId;switch(r.kind){case`updated`:return{displayName:n.displayName,installedVersion:o,latestVersion:r.receipt.version??s,name:n.name,status:`updated`,strategy:c};case`up-to-date`:return{displayName:n.displayName,installedVersion:r.receipt.version??o,name:n.name,status:`up-to-date`,strategy:c};case`dry-run`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,message:`Dry run: would update ${n.displayName}.`,name:n.name,status:`planned`,strategy:c};case`not-executed`:return r.plan.planning.decision===`up-to-date`?{displayName:n.displayName,installedVersion:o,latestVersion:s,name:n.name,status:`up-to-date`}:{displayName:n.displayName,installedVersion:o,latestVersion:s,message:e(n),name:n.name,status:`manual-required`};case`blocked`:return r.category===`untracked`?{displayName:n.displayName,installedVersion:o,message:t(n),name:n.name,status:`manual-required`}:r.category===`manual-required`?{displayName:n.displayName,installedVersion:o,message:e(n),name:n.name,status:`manual-required`}:{displayName:n.displayName,installedVersion:o,message:r.reason,name:n.name,status:`failed`};case`cancelled`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,message:r.reason??`Update was cancelled before it could complete.`,name:n.name,status:`failed`,strategy:c};case`timed-out`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,message:`Update timed out after ${r.timeoutMs}ms.`,name:n.name,status:`failed`,strategy:c};case`provider-failed`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,name:n.name,status:`failed`,strategy:c};case`verification-failed`:case`receipt-failed`:return{displayName:n.displayName,installedVersion:o,latestVersion:s,message:r.kind===`receipt-failed`?r.reason:r.verification.reason,name:n.name,status:`failed`,strategy:c};case`unknown-agent`:return{displayName:n.displayName,name:n.name,status:`failed`}}}function V(e){if(`plan`in e)return e.plan.before;if(`before`in e)return e.before}function H(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=U(e);t&&X(r,t)}else a&&X(r,W(a))}return r}function U(e){let t=e.planning.kind===`unknown-agent`?void 0:e.planning.kind===`planned`?e.planning.planned.before:e.planning.before,r=v(e.agentName);if(!r)return{displayName:t?.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:q(i.plan),message:i.reason,name:r.name,resource:i.resource,status:`locked`,strategy:J(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:q(i.plan),message:i.reason,name:r.name,status:`failed`,strategy:J(i.plan)};let a=i??(e.planning.kind===`planned`?{kind:`not-executed`,plan:e.planning.planned}:e.planning),o=B(r,a);return o.status===`failed`&&a.kind===`provider-failed`&&(o.hint=n(r,m({agent:r,installedState:t?.installedState,methods:[...t?.methods??[]]}))),o}function W(e){let t=v(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:q(e.planning.planned),message:e.reason??`Update was cancelled before it could start.`,name:t?.name??e.agentName,status:`failed`,strategy:J(e.planning.planned)}}function G(e){return e.plan.targets.flatMap(e=>e.outcome.kind!==`blocked`||e.outcome.category!==`stale-state`?[]:[K(v(e.agentName)??e.outcome.before.agent)])}function K(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 q(e){return e?.strategy===`managed-provider`?e.plannedTargetVersion:void 0}function J(e){if(e)return e.strategy===`self-update`?`self-update`:`managed/${e.binding.providerId}`}function Y(e){return c().cancelled||e.cancellationRemainder.length>0||e.results.some(e=>e.planning.kind===`cancelled`||e.execution?.kind===`cancelled`)}function X(e,t){e.push(t),f({action:`update`,data:t,target:{kind:`agent`,name:t.name},type:`progress`})}function Z(e){if(!e.data){e.error&&w(g.red(e.error.message));return}for(let t of e.warnings)x(g.yellow(t.message));for(let t of e.data.results)switch(t.status){case`up-to-date`:S(g.green(`${t.displayName} is up to date (${t.installedVersion??`unknown`})`));break;case`manual-required`:x(g.yellow(`${t.displayName}: manual action required.`)),t.message&&x(g.cyan(`Next step: ${t.message}`));break;case`planned`:x(g.cyan(`Would update ${t.displayName}${t.strategy?` via ${t.strategy}`:``}${Q(t.installedVersion,t.latestVersion)}`));break;case`updated`:S(g.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${Q(t.installedVersion,t.latestVersion)}`)),S(g.green(`${t.displayName} updated successfully!`));break;case`failed`:S(g.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${Q(t.installedVersion,t.latestVersion)}`)),w(g.red(`Failed to update ${t.displayName}.`)),t.hint&&x(g.cyan(`Next step: ${t.hint}`));break;case`locked`:x(g.yellow(t.message??`Another quantex process is already updating ${t.displayName}.`));break}e.data.results.length>1&&$(e.data.results),!e.data.results.length&&e.error&&w(g.red(e.error.message))}function Q(e,t){return e?` (${e} -> ${t??`latest`})`:``}function $(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&&S(g.bold(`Summary: ${n.join(`, `)}`))}export{L as createUpdateCommandInvocation};