quantex-cli 1.5.0 → 1.7.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 (78) hide show
  1. package/dist/{agent-installation-CeZKkWL5.mjs → agent-installation-C493XDFa.mjs} +1 -1
  2. package/dist/{agent-observation-CRB402ql.mjs → agent-observation-Ci5R0GnA.mjs} +1 -1
  3. package/dist/{agents-B7pltU6w.mjs → agents-BVhg2uqJ.mjs} +1 -1
  4. package/dist/{agents-CeaGD7Mf.mjs → agents-_8Ay_O2P.mjs} +1 -1
  5. package/dist/capabilities-BzIaPy6l.mjs +1 -0
  6. package/dist/capabilities-DdjhIFGH.mjs +7 -0
  7. package/dist/cli-operation-context-Da1gPsE9.mjs +1 -0
  8. package/dist/cli.mjs +1 -1
  9. package/dist/commands-B_aFMzNX.mjs +1 -0
  10. package/dist/commands-DgQeHPFE.mjs +3 -0
  11. package/dist/{config-BZiwMCpG.mjs → config-sIdMC5n8.mjs} +1 -1
  12. package/dist/{core-installation-cli-CyUr__qb.mjs → core-installation-cli-B9HHOMSK.mjs} +1 -1
  13. package/dist/{core-read-observations-DywRuhf7.mjs → core-read-observations-DJ_PiNxk.mjs} +1 -1
  14. package/dist/doctor-DLqh1mWM.mjs +4 -0
  15. package/dist/{ensure-BGOBnDc7.mjs → ensure-C8eFff3H.mjs} +1 -1
  16. package/dist/ensure-OJEUoNgi.mjs +1 -0
  17. package/dist/errors-BxB8LWeu.mjs +1 -0
  18. package/dist/human-D52z36dT.mjs +6 -0
  19. package/dist/index.mjs +1 -1
  20. package/dist/info-dUPDOWt7.mjs +3 -0
  21. package/dist/inspect-B7UWjmMH.mjs +1 -0
  22. package/dist/inspect-DPdPhXyQ.mjs +5 -0
  23. package/dist/{install-C_f7SGQz.mjs → install-GVNdjsy9.mjs} +1 -1
  24. package/dist/{installation-compatibility-BUIdD4fg.mjs → installation-compatibility-CvvA-gQU.mjs} +1 -1
  25. package/dist/{installation-executor-DvXaa9X4.mjs → installation-executor-DCbb9ysQ.mjs} +1 -1
  26. package/dist/{installation-production-BXWTdqW5.mjs → installation-production-J8c0VlZL.mjs} +1 -1
  27. package/dist/{installation-provider-registry-Cs3gM0wK.mjs → installation-provider-registry-CDpBEMLi.mjs} +1 -1
  28. package/dist/installation-routing-Ce-jeQYX.mjs +1 -0
  29. package/dist/{lifecycle-observations-CueO9I2o.mjs → lifecycle-observations-iAw4vKAs.mjs} +1 -1
  30. package/dist/{lifecycle-policy-rE0BK2Nu.mjs → lifecycle-policy-DP7_kYIQ.mjs} +1 -1
  31. package/dist/list-DK3fj9d5.mjs +3 -0
  32. package/dist/{npm-BMnWqkaW.mjs → npm-fDgYmVes.mjs} +1 -1
  33. package/dist/output-CemK152l.mjs +5 -0
  34. package/dist/{production-observation-CU1HQ10p.mjs → production-observation-uZ_BKubA.mjs} +1 -1
  35. package/dist/{provider-evidence-BE2knt4o.mjs → provider-evidence-8Zlo9P36.mjs} +1 -1
  36. package/dist/{provider-observations-BLinSKLj.mjs → provider-observations-DV-1-oTB.mjs} +1 -1
  37. package/dist/{providers-DKCPx1ao.mjs → providers-BsRQVnXd.mjs} +1 -1
  38. package/dist/resolve-D3ign4At.mjs +1 -0
  39. package/dist/resolve-DtJ2VGPP.mjs +1 -0
  40. package/dist/schema-D7kyWJeh.mjs +3 -0
  41. package/dist/schema-ra2FB_Qb.mjs +1 -0
  42. package/dist/{uninstall-C8WjB6Lb.mjs → uninstall-X2wXg7ic.mjs} +1 -1
  43. package/dist/{unmanaged-install-compatibility-4407lfNm.mjs → unmanaged-install-compatibility-DSOO1giL.mjs} +1 -1
  44. package/dist/{update-Dl-7RbMY.mjs → update-CLOjmvmZ.mjs} +1 -1
  45. package/dist/upgrade-BDncA4Lq.mjs +1 -0
  46. package/dist/{winget-C-UHM_On.mjs → winget-BVbhk2rg.mjs} +1 -1
  47. package/package.json +4 -1
  48. package/dist/capabilities-BEI1cl_2.mjs +0 -5
  49. package/dist/capabilities-CbOhZRTn.mjs +0 -1
  50. package/dist/cli-operation-context-9cYbrgIi.mjs +0 -1
  51. package/dist/commands-BOH52G-d.mjs +0 -3
  52. package/dist/commands-DFa1a2wK.mjs +0 -1
  53. package/dist/doctor-5mFBnw3T.mjs +0 -3
  54. package/dist/ensure-CZD6oJoU.mjs +0 -1
  55. package/dist/errors-BE_UKvvM.mjs +0 -1
  56. package/dist/info-C19Rra2W.mjs +0 -2
  57. package/dist/inspect-DIWVlKvN.mjs +0 -3
  58. package/dist/inspect-pDLr7vew.mjs +0 -1
  59. package/dist/installation-routing-BV8ZnVFY.mjs +0 -1
  60. package/dist/list-C5e5PhNE.mjs +0 -3
  61. package/dist/output-DZkIsf0G.mjs +0 -5
  62. package/dist/resolve-D5TUQ0PU.mjs +0 -1
  63. package/dist/resolve-DK5DEL2q.mjs +0 -1
  64. package/dist/schema-QsoaSx0p.mjs +0 -3
  65. package/dist/schema-jRwES4Qf.mjs +0 -1
  66. package/dist/upgrade-t0jJS977.mjs +0 -1
  67. /package/dist/{cli-operation-context-QEqKxWgM.mjs → cli-operation-context-BhNiJdQ3.mjs} +0 -0
  68. /package/dist/{color-BAlKATeY.mjs → color-FZclrXnv.mjs} +0 -0
  69. /package/dist/{errors-D-W3vO4v.mjs → errors-QBvXzYA-.mjs} +0 -0
  70. /package/dist/{installation-routing-Cyn08Qdm.mjs → installation-routing-BEwlmhg8.mjs} +0 -0
  71. /package/dist/{invocation-hZT7H6Sx.mjs → invocation-XbLUFnPY.mjs} +0 -0
  72. /package/dist/{lifecycle-errors-DGA1j4MM.mjs → lifecycle-errors-B0bwmxkB.mjs} +0 -0
  73. /package/dist/{mutation-recipe-catalog-Cr-4qobK.mjs → mutation-recipe-catalog-MVUziTOe.mjs} +0 -0
  74. /package/dist/{provider-binding-DMLQQGPh.mjs → provider-binding-D1muQsgD.mjs} +0 -0
  75. /package/dist/{provider-observation-registry-l4duFenx.mjs → provider-observation-registry-SxHLNuhc.mjs} +0 -0
  76. /package/dist/{update-planner-D1_UjTb8.mjs → update-planner-DIhkPXeI.mjs} +0 -0
  77. /package/dist/{user-output-C4bJjtc-.mjs → user-output-B-zDs13K.mjs} +0 -0
  78. /package/dist/{version-cache-BdkaOTM-.mjs → version-cache-C5F6SycS.mjs} +0 -0
package/dist/cli.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{n as e}from"./child-process-CBKnpMWt.mjs";import{n as t}from"./agents-B7pltU6w.mjs";import{a as n,n as r,o as i,s as a,t as o}from"./cli-context-xudTdmO7.mjs";import{s}from"./file-store-Caz7fnAB.mjs";import{B as c,C as l,H as u,R as d,_ as f,b as p,i as m,n as ee,p as te,q as ne,r as h,t as g,v as re,w as _,z as v}from"./output-DZkIsf0G.mjs";import{a as ie,o as ae}from"./providers-DKCPx1ao.mjs";import{t as oe}from"./cli-operation-context-QEqKxWgM.mjs";import{t as y}from"./color-BAlKATeY.mjs";import{t as se}from"./agent-installation-CeZKkWL5.mjs";import{t as ce}from"./lifecycle-observations-CueO9I2o.mjs";import{n as le}from"./lifecycle-errors-DGA1j4MM.mjs";import{a as ue,i as b,n as de,o as x,r as S,t as fe}from"./user-output-C4bJjtc-.mjs";import{n as C,t as pe}from"./errors-D-W3vO4v.mjs";import{n as me,t as he}from"./version-cache-BdkaOTM-.mjs";import{d as w,f as T,i as E,n as ge,o as _e,t as ve}from"./lifecycle-policy-rE0BK2Nu.mjs";import{join as D}from"node:path";import O from"node:process";import{mkdir as ye,readFile as be,rename as xe,rm as k,writeFile as A}from"node:fs/promises";import{createHash as j,randomUUID as M}from"node:crypto";import{Command as Se}from"commander";import Ce from"prompts";function we(e){return e.executable.present?{decision:e.dryRun?`dry-run`:`launch`}:e.installPolicy===`never`?{decision:`reject`,errorCode:`AGENT_NOT_INSTALLED`}:e.installPolicy===`prompt`&&!e.interactive?{decision:`reject`,errorCode:`INTERACTION_REQUIRED`}:e.dryRun?{decision:`dry-run`}:{decision:e.installPolicy===`prompt`?`prompt-install`:`install-and-launch`}}async function Te(e,t){let n=await t.observe(e.agentName);if(n.kind===`failure`)return{error:n.error,kind:`observation-failed`};if(!n.value)return{kind:`not-found`};let r=n.value,i=we({dryRun:t.dryRun,executable:r.executable,installPolicy:e.installPolicy,interactive:t.interactive,observation:r.observation});if(i.decision===`reject`)return i.errorCode===`AGENT_NOT_INSTALLED`?{kind:`not-installed`,observed:r}:{kind:`interaction-required`,observed:r};let a=[r.agent.binaryName,...e.args];if(i.decision===`dry-run`)return{argv:a,kind:`dry-run`,observed:r,wouldInstall:!r.executable.present};if(i.decision===`prompt-install`&&!await t.confirmInstall(r))return{kind:`install-declined`,observed:r};if(i.decision===`install-and-launch`||i.decision===`prompt-install`){await t.onInstallStart?.(r);let n=Ee(await t.install(r),r);if(n)return n;let i=await t.observe(e.agentName);if(i.kind===`failure`)return{error:i.error,kind:`observation-failed`};if(!i.value)return{kind:`install-failed`,observed:r,reason:`agent-missing-after-install`};if(r=i.value,!r.executable.present)return{kind:`install-failed`,observed:r,reason:`executable-absent-after-install`}}return De(await t.process.run({argv:a,signal:t.signal,stdio:t.outputMode===`human`?[`inherit`,`inherit`,`inherit`]:[`ignore`,`pipe`,`pipe`],timeoutMs:t.timeoutMs}),r,t.timeoutMs)}function Ee(e,t){switch(e.kind){case`success`:return;case`cancelled`:return{kind:`cancelled`,observed:t,phase:`install`,reason:e.reason};case`timed-out`:return{kind:`timed-out`,observed:t,phase:`install`,timeoutMs:e.timeoutMs};case`failed`:case`indeterminate`:return{kind:`install-failed`,observed:t,reason:e.reason};case`unsupported`:return{kind:`install-failed`,observed:t,reason:e.reason??`Missing installation capability: ${e.capability}`}}}function De(e,t,n){return e.kind===`failure`?e.error.kind===`cancelled`?{kind:`cancelled`,observed:t,phase:`launch`,reason:e.error.message}:e.error.kind===`timed-out`?{kind:`timed-out`,observed:t,phase:`launch`,reason:e.error.message,timeoutMs:n??0}:{kind:`launch-failed`,observed:t,reason:e.error.message}:e.value.exitCode===null?{kind:`launch-failed`,observed:t,reason:e.value.terminationSignal?`Agent terminated by ${e.value.terminationSignal}.`:`Agent process exited without an exit code.`}:{exitCode:e.value.exitCode,kind:`exited`,observed:t,stderr:e.value.stderr,stdout:e.value.stdout}}const Oe={cancelOperations:o,createObservationService:ce,createOperationContext:oe,createProcessPort:me,reconcileAgentInstallation:se};function ke(e,t=Oe){let n=t.createOperationContext(),r=t.createObservationService(n.context,{resolveLatestVersion:!1}),i=t.createProcessPort();return{dispose:n.dispose,execute:a=>Te(a,{confirmInstall:e.confirmInstall,dryRun:e.dryRun,install:n=>je(n,e.timeoutMs,t),interactive:e.interactive,observe:e=>Ae(e,r),onInstallStart:e.onInstallStart,outputMode:e.outputMode,process:i,signal:n.context.signal,timeoutMs:e.timeoutMs})}}async function Ae(e,t){try{let n=await t.resolveAgentObservation(e);return{kind:`success`,value:n?{agent:n.agent,executable:n.pathExecutable,installedState:n.installedState,methods:n.methods,observation:n.observation}:void 0}}catch(e){return{error:Ne(e),kind:`failure`}}}async function je(t,n,r){try{if(t.executable.present)return{kind:`success`,value:void 0};let e=await Me(r.reconcileAgentInstallation({agent:t.agent,observation:{inPath:t.executable.present,installedState:t.installedState,lifecycle:t.observation,methods:t.methods},operation:`install`,route:`install`}),n,r.cancelOperations);return e?e.kind===`success`?{kind:`success`,value:void 0}:e:{kind:`timed-out`,timeoutMs:n}}catch(t){return e(t)?t.kind===`timed-out`?{kind:`timed-out`,timeoutMs:n??0}:{kind:`cancelled`,reason:t.message}:{kind:`failed`,reason:N(t,`Failed to install agent.`),retryable:!1}}}async function Me(e,t,n){if(t===void 0)return e;let r;try{let i=await Promise.race([e.then(e=>({kind:`completed`,value:e})),new Promise(e=>{r=setTimeout(()=>e({kind:`timed-out`}),t)})]);if(i.kind===`completed`)return i.value;let a=await Pe(e,Math.max(1,Math.min(t,250)));if(a!==void 0)return a;await n();return}finally{r&&clearTimeout(r)}}function Ne(t){return t instanceof p?{code:`STATE_READ_ERROR`,details:{stateFilePath:_()},kind:`invalid-data`,message:t.message}:e(t)?{kind:t.kind,message:t.message}:{kind:`failed`,message:N(t,`Failed to observe agent execution state.`)}}function N(e,t){return e instanceof Error&&e.message.trim()?e.message:t}async function Pe(e,t){let n;try{return await Promise.race([e,new Promise(e=>{n=setTimeout(()=>e(void 0),t)})])}finally{n&&clearTimeout(n)}}function P(){return D(s(),`idempotency`)}function F(e){return D(P(),`${Ie(e)}.json`)}async function I(e,t={}){let n=F(e),r;try{r=await be(n,`utf8`)}catch(e){if(Re(e)&&e.code===`ENOENT`)return{kind:`missing`};throw e}let i;try{i=JSON.parse(r)}catch{return{kind:`invalid`,reason:`invalid-json`}}let a=w(i);return a.kind===`invalid`?a:Date.parse(a.record.expiresAt)<=L(t).getTime()?(await k(n),{kind:`expired`,record:a.record}):a}async function Fe(e,t,n={}){let r=L(n),i=n.ttlMs??864e5,a=w({...t,createdAt:r.toISOString(),expiresAt:new Date(r.getTime()+i).toISOString(),schemaVersion:1});if(a.kind===`invalid`)throw TypeError(`Invalid versioned idempotency record: ${a.reason}`);let o=P(),s=F(e),c=`${s}.${process.pid}.${M()}.tmp`,l=n.fileSystem?.writeFile??A;await ye(o,{recursive:!0});try{await l(c,Le(a.record),`utf8`),await xe(c,s)}catch(e){throw await k(c,{force:!0}),e}}function Ie(e){return j(`sha256`).update(e,`utf8`).digest(`hex`)}function L(e){let t=e.now?.()??new Date;if(!Number.isFinite(t.getTime()))throw TypeError(`Idempotency clock must return a valid date.`);return t}function Le(e){return`${JSON.stringify(e,(e,t)=>typeof t!=`object`||!t||Array.isArray(t)?t:Object.fromEntries(Object.keys(t).sort().map(e=>[e,t[e]])),2)}\n`}function Re(e){return e instanceof Error&&`code`in e}async function ze(e){let t=T(e.request),n=T(e.resolvedPlan);switch(e.loaded.kind){case`missing`:return{fingerprints:z(t,n),kind:`reconcile`,reason:`missing`};case`expired`:return{fingerprints:R(e.loaded.record,t,n),kind:`reconcile`,reason:`expired`};case`invalid`:return{fingerprints:z(t,n),invalidReason:e.loaded.reason,kind:`reject`,reason:`invalid-evidence`};case`valid`:return Be(e,e.loaded.record,t,n)}}async function Be(e,t,n,r){let i=R(t,n,r);if(t.request.fingerprint!==n)return{fingerprints:i,kind:`reject`,reason:`request-mismatch`};if(t.resolvedPlan.fingerprint!==r)return{fingerprints:i,kind:`reconcile`,reason:`resolved-plan-changed`};switch((await e.validateLive({postcondition:t.postcondition.payload,receipt:t.receipt.payload})).kind){case`satisfied`:return{fingerprints:i,kind:`replay`,result:structuredClone(t.result)};case`drifted`:return{fingerprints:i,kind:`reconcile`,reason:`live-drifted`};case`inconclusive`:return{fingerprints:i,kind:`reconcile`,reason:`live-inconclusive`}}}function R(e,t,n){return{existingPlan:e.resolvedPlan.fingerprint,existingRequest:e.request.fingerprint,requestedPlan:n,requestedRequest:t}}function z(e,t){return{existingPlan:void 0,existingRequest:void 0,requestedPlan:t,requestedRequest:e}}const Ve=new Set([`doctor`,`upgrade`]);async function He(e,t={cache:he(),getSelfState:l,now:Date.now,resolveFacts:re}){if(!e.ok||Ve.has(e.action))return;let n=r();if(n.outputMode!==`human`||n.quiet)return;let i=await t.resolveFacts(),a=t.now(),o=await te({cache:t.cache,facts:i,nowMs:a,signal:new AbortController().signal});if(!o||!ne(o.targetVersion,i.currentVersion))return;let s=await t.getSelfState();Ue(s.updateNoticeVersion,s.updateNoticeAt,o.targetVersion,a)||b(y.yellow(`Quantex CLI ${o.targetVersion} is available (current ${i.currentVersion}). Run \`quantex upgrade\`.`))}function Ue(e,t,n,r){if(!e||!t||e!==n)return!1;let i=Date.parse(t);return Number.isNaN(i)?!1:r-i<864e5}function We(e){return e.warnings.some(e=>e.code===`DRY_RUN`)}async function Ge(e){try{return await Ke(e)}catch(t){if(t instanceof p)return Ze(e,t);throw t}}async function Ke(e){return it(e,()=>qe(e))}async function qe(e){let t=r().timeoutMs,n={expired:!1},i=!1,a,o=async()=>{let o=await Ye(e,()=>n.expired);return n.expired&&t!==void 0?W(e,t):o.replayedResult?(i=!0,o.replayedResult):(a={action:e.action,...o.policy?{idempotencyPolicy:o.policy}:{},run:e.run,...e.target?{target:e.target}:{}},r().cancelled?Xe(e):e.run())},s=t===void 0?await o():await Je(e,o,t,n);return i||!a?s:$e(a,s)}async function Je(e,t,n,r){let i;try{let a=new Promise(t=>{i=setTimeout(()=>{r.expired=!0,t(W(e,n))},n)}),o=ot(t,()=>a),s=await Promise.race([o,a]);if(!s.ok&&s.error?.code===`TIMEOUT`){let t=await at(o,n);s=t&&t.error?.code!==`TIMEOUT`?t:await ct(e,n)}return i!==void 0&&(clearTimeout(i),i=void 0),s}finally{i&&clearTimeout(i)}}async function Ye(e,t=()=>!1){let n=r();if(!n.idempotencyKey||n.dryRun||!U(e.action)||!e.idempotencyPolicy)return{};let i=await I(n.idempotencyKey);if(n.cancelled||t())return{};if(i.kind===`invalid`)return{replayedResult:m(V(e,n.idempotencyKey,i.reason),B,{force:!0})};let a=typeof e.idempotencyPolicy==`function`?await e.idempotencyPolicy():e.idempotencyPolicy;if(n.cancelled||t())return{};let o=await ze({loaded:i,request:a.request,resolvedPlan:a.resolvedPlan,validateLive:a.validateLive});if(n.cancelled||t())return{};if(o.kind===`reconcile`)return{policy:a};if(o.kind===`reject`)return{replayedResult:nt(e,n.idempotencyKey,o,i)};let s=rt(o.result);return m(s,B,{force:!0}),{replayedResult:s}}function Xe(e){return g({action:e.action,error:{code:`CANCELLED`,message:`Command was cancelled before execution could start.`},target:e.target})}async function Ze(e,t){return m(g({action:e.action,...le(t,_(),e.target)}),Qe)}function Qe(e){e.error&&console.error(y.red(e.error.message))}async function $e(e,t){if(r().cancelled)return t;let n=await et(e,t);try{await He({action:e.action,ok:n.ok})}catch{}return n}function B(e){e.error&&console.error(y.red(e.error.message))}async function et(e,t){let n=r();if(!n.idempotencyKey||!U(e.action)||!t.ok||n.dryRun||We(t)||!e.idempotencyPolicy)return t;let i=await e.idempotencyPolicy.captureEvidence(t);if(!i)return t;let a=await I(n.idempotencyKey);return tt(e,n.idempotencyKey,a)||(await Fe(n.idempotencyKey,{postcondition:H(i.postcondition),receipt:H(i.receipt),request:H(e.idempotencyPolicy.request),resolvedPlan:H(e.idempotencyPolicy.resolvedPlan),result:t}),t)}function tt(e,t,n){if(!e.idempotencyPolicy)return;let r=T(e.idempotencyPolicy.request);if(n.kind===`invalid`)return m(V(e,t,n.reason),B,{force:!0});if(!(n.kind!==`valid`||n.record.request.fingerprint===r))return m(g({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{conflict:`concurrent-request-mismatch`,existingAction:n.record.request.payload.action,idempotencyKey:t},message:`Idempotency key ${t} changed while the command was running; replay evidence was not overwritten.`},target:e.target}),B,{force:!0})}function nt(e,t,n,r){return n.reason===`invalid-evidence`?m(V(e,t,n.invalidReason),B,{force:!0}):m(g({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{existingAction:r.kind===`valid`?r.record.request.payload.action:void 0,idempotencyKey:t,reason:`request-mismatch`},message:`Idempotency key ${t} was already used for a different canonical request.`},target:e.target}),B,{force:!0})}function V(e,t,n){return g({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{idempotencyKey:t,invalidReason:n,reason:`invalid-evidence`},message:`Idempotency key ${t} contains invalid replay evidence (${n}).`},target:e.target})}function rt(e){let t=r();return{...e,meta:{...e.meta,mode:t.outputMode,runId:t.runId,timestamp:new Date().toISOString()}}}function H(e){return{fingerprint:T(e),payload:e}}function U(e){return e===`ensure`||e===`install`||e===`uninstall`||e===`update`}async function it(e,t){let n,r;try{let i=new Promise(t=>{let i=r=>{n??=lt(e,r),n.then(t)},a=()=>i(`SIGINT`),o=()=>i(`SIGTERM`);O.once(`SIGINT`,a),O.once(`SIGTERM`,o),r=()=>{O.off(`SIGINT`,a),O.off(`SIGTERM`,o)}});return await Promise.race([st(t,()=>n),i])}finally{r?.()}}async function at(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function ot(t,n){try{return await t()}catch(t){if(e(t)&&t.kind===`timed-out`||r().cancelled)return n();throw t}}async function st(e,t){try{let n=await e(),i=t();return r().cancelled&&i?i:n}catch(e){let n=t();if(r().cancelled&&n)return n;throw e}}function W(e,t){return g({action:e.action,error:{code:`TIMEOUT`,details:{timeoutMs:t},message:`Command timed out after ${t}ms.`},target:e.target})}async function ct(e,t){return await o(),h({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),m(W(e,t),B,{force:!0})}async function lt(e,t){return await o(),h({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),m(g({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),B,{force:!0})}const ut={cancelOperations:o,createExecutionService:ke};async function G(e,t,n={},i=ut){let a=r(),o=n.nonInteractive?!1:a.interactive,s=n.assumeYes??fe(),c=n.dryRun??de(),l=n.install??`prompt`,u,d=i.createExecutionService({confirmInstall:async e=>s?!0:!!(await Ce({initial:!0,message:`${e.agent.displayName} is not installed. Would you like to install it?`,name:`install`,type:`confirm`})).install,dryRun:c,interactive:o,onInstallStart:e=>{b(y.cyan(`Installing ${e.agent.displayName}...`))},outputMode:a.outputMode,timeoutMs:a.timeoutMs}),f=e=>{u??=e,i.cancelOperations()},p=()=>f(`SIGINT`),m=()=>f(`SIGTERM`);O.once(`SIGINT`,p),O.once(`SIGTERM`,m);try{return dt(await d.execute({agentName:e,args:t,installPolicy:l}),{agentName:e,args:t,cancellationSignal:u,installPolicy:l,interactive:o})}finally{O.off(`SIGINT`,p),O.off(`SIGTERM`,m),d.dispose()}}function dt(e,t){if(e.kind===`not-found`)return q({agent:{name:t.agentName},errorCode:`AGENT_NOT_FOUND`,errorMessage:`Unknown agent: ${t.agentName}`,execution:K(t,!1)}),C(`AGENT_NOT_FOUND`);if(e.kind===`observation-failed`)return ft(t.agentName,e.error);let{observed:n}=e,r=n.agent;if(e.kind===`not-installed`||e.kind===`interaction-required`){let i=e.kind===`interaction-required`;return q({agent:r,errorCode:i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`,errorMessage:i?`${r.displayName} is not installed and interactive installation is disabled.`:`${r.displayName} is not installed.`,execution:{...K(t,!1),installGuidance:mt(r,n.methods,t.args)}}),C(i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`)}switch(e.kind){case`install-declined`:return ue(y.yellow(`Installation cancelled.`)),1;case`install-failed`:return S(y.red(`Failed to install ${r.displayName}.`)),C(`INSTALL_FAILED`);case`dry-run`:return e.wouldInstall&&x(y.cyan(`Dry run: would install ${r.displayName}.`)),ht({agent:r,execution:K(t,!0),message:`Dry run: would run ${e.argv.join(` `)}`}),0;case`launch-failed`:return S(y.red(`Failed to launch ${r.displayName}: ${e.reason}`)),1;case`cancelled`:return S(y.red(t.cancellationSignal?`${r.displayName} was cancelled by ${t.cancellationSignal}.`:`${r.displayName} was cancelled.`)),C(`CANCELLED`);case`timed-out`:return S(y.red(e.phase===`install`?`Installing ${r.displayName} timed out after ${e.timeoutMs}ms.`:`${r.displayName} timed out after ${e.timeoutMs}ms.`)),C(`TIMEOUT`);case`exited`:return e.exitCode}}function K(e,t){return{args:e.args,installPolicy:e.installPolicy,installed:t,interactive:e.interactive,launched:!1}}function ft(e,t){let n=pt(t.code)?t.code:`INSTALL_FAILED`;return r().outputMode===`human`?S(y.red(t.message)):m(g({action:`exec`,error:{code:n,details:t.details,message:t.message},target:{kind:`agent`,name:e}}),()=>{}),C(n)}function pt(e){return e!==void 0&&pe.includes(e)}function mt(e,t,n){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:ie(e,t),label:ae(t),type:t.type})).filter(e=>e.command),suggestedAction:`rerun-with-install-policy`,suggestedEnsureCommand:`quantex ensure ${e.name}`,suggestedExecCommand:[`quantex`,`exec`,e.name,`--install`,`if-missing`,`--`,...n].join(` `)}}function q(e){if(r().outputMode===`human`){S(y.red(e.errorMessage));let t=e.execution.installGuidance;t&&(x(y.dim(`Try: ${t.suggestedEnsureCommand}`)),x(y.dim(`Or: ${t.suggestedExecCommand}`)));return}m(g({action:`exec`,data:{agent:e.agent,execution:e.execution},error:{code:e.errorCode,details:e.execution.installGuidance,message:e.errorMessage},target:{kind:`agent`,name:e.agent.name}}),()=>{})}function ht(e){if(r().outputMode===`human`){x(y.cyan(e.message));return}m(ee({action:`exec`,data:{agent:e.agent,execution:e.execution},target:{kind:`agent`,name:e.agent.name}}),()=>{})}const gt={capabilities:async()=>{let{capabilitiesCommand:e}=await import(`./capabilities-CbOhZRTn.mjs`);await J({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})},commands:async()=>{let{commandsCommand:e}=await import(`./commands-DFa1a2wK.mjs`);await J({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})},config:async(...e)=>{let{configCommand:t}=await import(`./config-BZiwMCpG.mjs`),[n,r,i]=e;await J({action:`config`,run:()=>t(n,r,i),target:{kind:`config`,name:r}})},doctor:async()=>{let{doctorCommand:e}=await import(`./doctor-5mFBnw3T.mjs`);await J({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})},ensure:async(...e)=>{let t=e[0],[{ensureCommandWithRoute:n},{selectInstallationEngineRoute:r}]=await Promise.all([import(`./ensure-CZD6oJoU.mjs`),import(`./installation-routing-BV8ZnVFY.mjs`)]),i=r(`ensure`);await J({action:`ensure`,idempotencyPolicy:()=>E(`ensure`,t),run:()=>n(t,i),target:{kind:`agent`,name:t}})},exec:async(...e)=>{let[t,n,r,i]=e,a=r.install??`never`;if(a!==`never`&&a!==`if-missing`&&a!==`always`){O.stdout.write(`${y.red(`Unknown install policy: ${a}`)}\n`),O.exitCode=2;return}let o=vt(i);O.exitCode=await G(t,o.length>0?o:n,{install:a,nonInteractive:i.optsWithGlobals().nonInteractive})},info:async(...e)=>{let t=e[0],{infoCommand:n}=await import(`./info-C19Rra2W.mjs`);await J({action:`info`,run:()=>n(t),target:{kind:`agent`,name:t}})},inspect:async(...e)=>{let t=e[0],{inspectCommand:n}=await import(`./inspect-pDLr7vew.mjs`);await J({action:`inspect`,run:()=>n(t),target:{kind:`agent`,name:t}})},install:async(...e)=>{let[{installCommandWithRoute:t},{selectInstallationEngineRoute:n}]=await Promise.all([import(`./install-C_f7SGQz.mjs`),import(`./installation-routing-BV8ZnVFY.mjs`)]),r=n(`install`),i=_e(e[0]),a=i.length===1;await J({action:`install`,...a?{idempotencyPolicy:()=>E(`install`,i[0])}:{idempotencyPolicy:()=>ge(i)},run:()=>t(i,r),target:a?{kind:`agent`,name:i[0]}:{kind:`agent`,name:i.join(`,`)}})},list:async()=>{let{listCommand:e}=await import(`./list-C5e5PhNE.mjs`);await J({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})},resolve:async(...e)=>{let t=e[0],{resolveCommand:n}=await import(`./resolve-DK5DEL2q.mjs`);await J({action:`resolve`,run:()=>n(t),target:{kind:`agent`,name:t}})},schema:async(...e)=>{let t=e[0],{schemaCommand:n}=await import(`./schema-jRwES4Qf.mjs`);await J({action:`schema`,run:()=>n(t),target:{kind:`system`,name:`schema`}})},uninstall:async(...e)=>{let t=e[0],{uninstallCommand:n}=await import(`./uninstall-C8WjB6Lb.mjs`);await J({action:`uninstall`,idempotencyPolicy:()=>ve(t),run:()=>n(t),target:{kind:`agent`,name:t}})},update:async(...e)=>{let[t,n]=e,{createUpdateCommandInvocation:r}=await import(`./update-Dl-7RbMY.mjs`),i=r(t,n.all??!1);try{await J({action:`update`,...i.idempotencyPolicy?{idempotencyPolicy:i.idempotencyPolicy}:{},run:i.run,target:{kind:`agent`,name:t}})}finally{i.dispose()}},upgrade:async(...e)=>{let t=e[0],{resolveUpgradeChannelOption:n,upgradeCommand:r}=await import(`./upgrade-t0jJS977.mjs`);await J({action:`upgrade`,run:()=>r({channel:n(t.channel),check:t.check??!1}),target:{kind:`self`,name:`quantex`}})}};function _t(e){return gt[e]}function vt(e){let t=e.processedArgs.at(-1);return Array.isArray(t)?t:e.args.slice(1)}async function J(e){let{getExitCodeForResult:t}=await import(`./errors-BE_UKvvM.mjs`);O.exitCode=t(await Ge(e))}function yt(){let e=d();u(e,e.map(e=>e.schema.name));let t=new Se;t.name(`quantex`).description(`统一的 AI Agent CLI 管理工具`);for(let e of v())t.option(e.flags,e.description,e.defaultValue);t.version(f()),t.hook(`preAction`,(e,t)=>{try{a(i(c(t.optsWithGlobals())))}catch(e){O.stdout.write(`${y.red(e instanceof Error?e.message:String(e))}\n`),O.exit(2)}}),t.hook(`postAction`,()=>{n()});for(let n of e){let e=t.command(n.name).description(n.description);for(let t of n.aliases)e.alias(t);for(let t of n.arguments)e.argument(t.syntax,t.description);n.allowUnknownOptions&&e.allowUnknownOption();for(let t of n.options)e.option(t.flags,t.description,t.defaultValue);e.action(_t(n.handlerId))}return t}const bt=new Map(v().map(e=>[xt(e.flags),e]));function Y(e,t,n){let r={},i=0;for(;i<e.length;){let a=e[i],o=bt.get(a);if(o){if(o.value===`string`){let t=e[i+1];if(!t)return St(a);r[o.id]=t,i+=2}else r[o.id]=!0,i+=1;continue}if(a.startsWith(`-`)||t.has(a))return;let s=Z(r.output);return r.json===!0||s===`json`||s===`ndjson`||n.agentFriendly&&s!==`human`?{agentArgs:[],agentName:``,error:`Structured output is not supported for shortcut agent execution yet. Use a management command instead.`}:{agentArgs:e.slice(i+1),agentName:a,color:Z(r.color),dryRun:X(r.dryRun),idempotencyKey:Z(r.idempotencyKey),logLevel:Z(r.logLevel),noCache:X(r.noCache),nonInteractive:X(r.nonInteractive),quiet:X(r.quiet),refresh:X(r.refresh),runId:Z(r.runId),timeout:Z(r.timeout),yes:X(r.yes)}}}function xt(e){let t=e.match(/--[a-z][a-z-]*/);if(!t)throw Error(`Global option requires a long flag: ${e}`);return t[0]}function X(e){return e===!0}function Z(e){return typeof e==`string`?e:void 0}function St(e){return{agentArgs:[],agentName:``,error:`${e} requires a value`}}const Q=yt(),Ct=new Set([...Q.commands.map(e=>e.name()),...Q.commands.flatMap(e=>e.aliases()),`help`,`--help`,`--version`,`-v`]),$=Y(O.argv.slice(2),Ct,{agentFriendly:O.stdin.isTTY===!1||O.stdout.isTTY===!1});if($?.error&&(console.log(y.red($.error)),O.exit(2)),$&&t($.agentName)){try{a(i({color:$.color,dryRun:$.dryRun,idempotencyKey:$.idempotencyKey,logLevel:$.logLevel,noCache:$.noCache,nonInteractive:$.nonInteractive,quiet:$.quiet,refresh:$.refresh,runId:$.runId,timeout:$.timeout,yes:$.yes}))}catch(e){console.log(y.red(e instanceof Error?e.message:String(e))),O.exit(2)}try{let e=await G($.agentName,$.agentArgs,{assumeYes:$.yes,dryRun:$.dryRun,nonInteractive:$.nonInteractive});O.exit(e)}finally{n()}}await Q.parseAsync();export{};
2
+ import{n as e}from"./child-process-CBKnpMWt.mjs";import{n as t}from"./agents-BVhg2uqJ.mjs";import{a as n,n as r,o as i,s as a,t as o}from"./cli-context-xudTdmO7.mjs";import{s}from"./file-store-Caz7fnAB.mjs";import{B as c,C as l,H as u,R as d,_ as f,b as p,i as m,n as ee,p as te,q as ne,r as h,t as g,v as re,w as _,z as v}from"./output-CemK152l.mjs";import{a as ie,o as ae}from"./providers-BsRQVnXd.mjs";import{t as oe}from"./cli-operation-context-BhNiJdQ3.mjs";import{t as y}from"./color-FZclrXnv.mjs";import{t as se}from"./agent-installation-C493XDFa.mjs";import{t as ce}from"./lifecycle-observations-iAw4vKAs.mjs";import{n as le}from"./lifecycle-errors-B0bwmxkB.mjs";import{a as ue,i as b,n as de,o as x,r as S,t as fe}from"./user-output-B-zDs13K.mjs";import{n as C,t as pe}from"./errors-QBvXzYA-.mjs";import{n as me,t as he}from"./version-cache-C5F6SycS.mjs";import{d as w,f as T,i as E,n as ge,o as _e,t as ve}from"./lifecycle-policy-DP7_kYIQ.mjs";import{join as D}from"node:path";import O from"node:process";import{mkdir as ye,readFile as be,rename as xe,rm as k,writeFile as A}from"node:fs/promises";import{createHash as j,randomUUID as M}from"node:crypto";import{Command as Se}from"commander";import Ce from"prompts";function we(e){return e.executable.present?{decision:e.dryRun?`dry-run`:`launch`}:e.installPolicy===`never`?{decision:`reject`,errorCode:`AGENT_NOT_INSTALLED`}:e.installPolicy===`prompt`&&!e.interactive?{decision:`reject`,errorCode:`INTERACTION_REQUIRED`}:e.dryRun?{decision:`dry-run`}:{decision:e.installPolicy===`prompt`?`prompt-install`:`install-and-launch`}}async function Te(e,t){let n=await t.observe(e.agentName);if(n.kind===`failure`)return{error:n.error,kind:`observation-failed`};if(!n.value)return{kind:`not-found`};let r=n.value,i=we({dryRun:t.dryRun,executable:r.executable,installPolicy:e.installPolicy,interactive:t.interactive,observation:r.observation});if(i.decision===`reject`)return i.errorCode===`AGENT_NOT_INSTALLED`?{kind:`not-installed`,observed:r}:{kind:`interaction-required`,observed:r};let a=[r.agent.binaryName,...e.args];if(i.decision===`dry-run`)return{argv:a,kind:`dry-run`,observed:r,wouldInstall:!r.executable.present};if(i.decision===`prompt-install`&&!await t.confirmInstall(r))return{kind:`install-declined`,observed:r};if(i.decision===`install-and-launch`||i.decision===`prompt-install`){await t.onInstallStart?.(r);let n=Ee(await t.install(r),r);if(n)return n;let i=await t.observe(e.agentName);if(i.kind===`failure`)return{error:i.error,kind:`observation-failed`};if(!i.value)return{kind:`install-failed`,observed:r,reason:`agent-missing-after-install`};if(r=i.value,!r.executable.present)return{kind:`install-failed`,observed:r,reason:`executable-absent-after-install`}}return De(await t.process.run({argv:a,signal:t.signal,stdio:t.outputMode===`human`?[`inherit`,`inherit`,`inherit`]:[`ignore`,`pipe`,`pipe`],timeoutMs:t.timeoutMs}),r,t.timeoutMs)}function Ee(e,t){switch(e.kind){case`success`:return;case`cancelled`:return{kind:`cancelled`,observed:t,phase:`install`,reason:e.reason};case`timed-out`:return{kind:`timed-out`,observed:t,phase:`install`,timeoutMs:e.timeoutMs};case`failed`:case`indeterminate`:return{kind:`install-failed`,observed:t,reason:e.reason};case`unsupported`:return{kind:`install-failed`,observed:t,reason:e.reason??`Missing installation capability: ${e.capability}`}}}function De(e,t,n){return e.kind===`failure`?e.error.kind===`cancelled`?{kind:`cancelled`,observed:t,phase:`launch`,reason:e.error.message}:e.error.kind===`timed-out`?{kind:`timed-out`,observed:t,phase:`launch`,reason:e.error.message,timeoutMs:n??0}:{kind:`launch-failed`,observed:t,reason:e.error.message}:e.value.exitCode===null?{kind:`launch-failed`,observed:t,reason:e.value.terminationSignal?`Agent terminated by ${e.value.terminationSignal}.`:`Agent process exited without an exit code.`}:{exitCode:e.value.exitCode,kind:`exited`,observed:t,stderr:e.value.stderr,stdout:e.value.stdout}}const Oe={cancelOperations:o,createObservationService:ce,createOperationContext:oe,createProcessPort:me,reconcileAgentInstallation:se};function ke(e,t=Oe){let n=t.createOperationContext(),r=t.createObservationService(n.context,{resolveLatestVersion:!1}),i=t.createProcessPort();return{dispose:n.dispose,execute:a=>Te(a,{confirmInstall:e.confirmInstall,dryRun:e.dryRun,install:n=>je(n,e.timeoutMs,t),interactive:e.interactive,observe:e=>Ae(e,r),onInstallStart:e.onInstallStart,outputMode:e.outputMode,process:i,signal:n.context.signal,timeoutMs:e.timeoutMs})}}async function Ae(e,t){try{let n=await t.resolveAgentObservation(e);return{kind:`success`,value:n?{agent:n.agent,executable:n.pathExecutable,installedState:n.installedState,methods:n.methods,observation:n.observation}:void 0}}catch(e){return{error:Ne(e),kind:`failure`}}}async function je(t,n,r){try{if(t.executable.present)return{kind:`success`,value:void 0};let e=await Me(r.reconcileAgentInstallation({agent:t.agent,observation:{inPath:t.executable.present,installedState:t.installedState,lifecycle:t.observation,methods:t.methods},operation:`install`,route:`install`}),n,r.cancelOperations);return e?e.kind===`success`?{kind:`success`,value:void 0}:e:{kind:`timed-out`,timeoutMs:n}}catch(t){return e(t)?t.kind===`timed-out`?{kind:`timed-out`,timeoutMs:n??0}:{kind:`cancelled`,reason:t.message}:{kind:`failed`,reason:N(t,`Failed to install agent.`),retryable:!1}}}async function Me(e,t,n){if(t===void 0)return e;let r;try{let i=await Promise.race([e.then(e=>({kind:`completed`,value:e})),new Promise(e=>{r=setTimeout(()=>e({kind:`timed-out`}),t)})]);if(i.kind===`completed`)return i.value;let a=await Pe(e,Math.max(1,Math.min(t,250)));if(a!==void 0)return a;await n();return}finally{r&&clearTimeout(r)}}function Ne(t){return t instanceof p?{code:`STATE_READ_ERROR`,details:{stateFilePath:_()},kind:`invalid-data`,message:t.message}:e(t)?{kind:t.kind,message:t.message}:{kind:`failed`,message:N(t,`Failed to observe agent execution state.`)}}function N(e,t){return e instanceof Error&&e.message.trim()?e.message:t}async function Pe(e,t){let n;try{return await Promise.race([e,new Promise(e=>{n=setTimeout(()=>e(void 0),t)})])}finally{n&&clearTimeout(n)}}function P(){return D(s(),`idempotency`)}function F(e){return D(P(),`${Ie(e)}.json`)}async function I(e,t={}){let n=F(e),r;try{r=await be(n,`utf8`)}catch(e){if(Re(e)&&e.code===`ENOENT`)return{kind:`missing`};throw e}let i;try{i=JSON.parse(r)}catch{return{kind:`invalid`,reason:`invalid-json`}}let a=w(i);return a.kind===`invalid`?a:Date.parse(a.record.expiresAt)<=L(t).getTime()?(await k(n),{kind:`expired`,record:a.record}):a}async function Fe(e,t,n={}){let r=L(n),i=n.ttlMs??864e5,a=w({...t,createdAt:r.toISOString(),expiresAt:new Date(r.getTime()+i).toISOString(),schemaVersion:1});if(a.kind===`invalid`)throw TypeError(`Invalid versioned idempotency record: ${a.reason}`);let o=P(),s=F(e),c=`${s}.${process.pid}.${M()}.tmp`,l=n.fileSystem?.writeFile??A;await ye(o,{recursive:!0});try{await l(c,Le(a.record),`utf8`),await xe(c,s)}catch(e){throw await k(c,{force:!0}),e}}function Ie(e){return j(`sha256`).update(e,`utf8`).digest(`hex`)}function L(e){let t=e.now?.()??new Date;if(!Number.isFinite(t.getTime()))throw TypeError(`Idempotency clock must return a valid date.`);return t}function Le(e){return`${JSON.stringify(e,(e,t)=>typeof t!=`object`||!t||Array.isArray(t)?t:Object.fromEntries(Object.keys(t).sort().map(e=>[e,t[e]])),2)}\n`}function Re(e){return e instanceof Error&&`code`in e}async function ze(e){let t=T(e.request),n=T(e.resolvedPlan);switch(e.loaded.kind){case`missing`:return{fingerprints:z(t,n),kind:`reconcile`,reason:`missing`};case`expired`:return{fingerprints:R(e.loaded.record,t,n),kind:`reconcile`,reason:`expired`};case`invalid`:return{fingerprints:z(t,n),invalidReason:e.loaded.reason,kind:`reject`,reason:`invalid-evidence`};case`valid`:return Be(e,e.loaded.record,t,n)}}async function Be(e,t,n,r){let i=R(t,n,r);if(t.request.fingerprint!==n)return{fingerprints:i,kind:`reject`,reason:`request-mismatch`};if(t.resolvedPlan.fingerprint!==r)return{fingerprints:i,kind:`reconcile`,reason:`resolved-plan-changed`};switch((await e.validateLive({postcondition:t.postcondition.payload,receipt:t.receipt.payload})).kind){case`satisfied`:return{fingerprints:i,kind:`replay`,result:structuredClone(t.result)};case`drifted`:return{fingerprints:i,kind:`reconcile`,reason:`live-drifted`};case`inconclusive`:return{fingerprints:i,kind:`reconcile`,reason:`live-inconclusive`}}}function R(e,t,n){return{existingPlan:e.resolvedPlan.fingerprint,existingRequest:e.request.fingerprint,requestedPlan:n,requestedRequest:t}}function z(e,t){return{existingPlan:void 0,existingRequest:void 0,requestedPlan:t,requestedRequest:e}}const Ve=new Set([`doctor`,`upgrade`]);async function He(e,t={cache:he(),getSelfState:l,now:Date.now,resolveFacts:re}){if(!e.ok||Ve.has(e.action))return;let n=r();if(n.outputMode!==`human`||n.quiet)return;let i=await t.resolveFacts(),a=t.now(),o=await te({cache:t.cache,facts:i,nowMs:a,signal:new AbortController().signal});if(!o||!ne(o.targetVersion,i.currentVersion))return;let s=await t.getSelfState();Ue(s.updateNoticeVersion,s.updateNoticeAt,o.targetVersion,a)||b(y.yellow(`Quantex CLI ${o.targetVersion} is available (current ${i.currentVersion}). Run \`quantex upgrade\`.`))}function Ue(e,t,n,r){if(!e||!t||e!==n)return!1;let i=Date.parse(t);return Number.isNaN(i)?!1:r-i<864e5}function We(e){return e.warnings.some(e=>e.code===`DRY_RUN`)}async function Ge(e){try{return await Ke(e)}catch(t){if(t instanceof p)return Ze(e,t);throw t}}async function Ke(e){return it(e,()=>qe(e))}async function qe(e){let t=r().timeoutMs,n={expired:!1},i=!1,a,o=async()=>{let o=await Ye(e,()=>n.expired);return n.expired&&t!==void 0?W(e,t):o.replayedResult?(i=!0,o.replayedResult):(a={action:e.action,...o.policy?{idempotencyPolicy:o.policy}:{},run:e.run,...e.target?{target:e.target}:{}},r().cancelled?Xe(e):e.run())},s=t===void 0?await o():await Je(e,o,t,n);return i||!a?s:$e(a,s)}async function Je(e,t,n,r){let i;try{let a=new Promise(t=>{i=setTimeout(()=>{r.expired=!0,t(W(e,n))},n)}),o=ot(t,()=>a),s=await Promise.race([o,a]);if(!s.ok&&s.error?.code===`TIMEOUT`){let t=await at(o,n);s=t&&t.error?.code!==`TIMEOUT`?t:await ct(e,n)}return i!==void 0&&(clearTimeout(i),i=void 0),s}finally{i&&clearTimeout(i)}}async function Ye(e,t=()=>!1){let n=r();if(!n.idempotencyKey||n.dryRun||!U(e.action)||!e.idempotencyPolicy)return{};let i=await I(n.idempotencyKey);if(n.cancelled||t())return{};if(i.kind===`invalid`)return{replayedResult:m(V(e,n.idempotencyKey,i.reason),B,{force:!0})};let a=typeof e.idempotencyPolicy==`function`?await e.idempotencyPolicy():e.idempotencyPolicy;if(n.cancelled||t())return{};let o=await ze({loaded:i,request:a.request,resolvedPlan:a.resolvedPlan,validateLive:a.validateLive});if(n.cancelled||t())return{};if(o.kind===`reconcile`)return{policy:a};if(o.kind===`reject`)return{replayedResult:nt(e,n.idempotencyKey,o,i)};let s=rt(o.result);return m(s,B,{force:!0}),{replayedResult:s}}function Xe(e){return g({action:e.action,error:{code:`CANCELLED`,message:`Command was cancelled before execution could start.`},target:e.target})}async function Ze(e,t){return m(g({action:e.action,...le(t,_(),e.target)}),Qe)}function Qe(e){e.error&&console.error(y.red(e.error.message))}async function $e(e,t){if(r().cancelled)return t;let n=await et(e,t);try{await He({action:e.action,ok:n.ok})}catch{}return n}function B(e){e.error&&console.error(y.red(e.error.message))}async function et(e,t){let n=r();if(!n.idempotencyKey||!U(e.action)||!t.ok||n.dryRun||We(t)||!e.idempotencyPolicy)return t;let i=await e.idempotencyPolicy.captureEvidence(t);if(!i)return t;let a=await I(n.idempotencyKey);return tt(e,n.idempotencyKey,a)||(await Fe(n.idempotencyKey,{postcondition:H(i.postcondition),receipt:H(i.receipt),request:H(e.idempotencyPolicy.request),resolvedPlan:H(e.idempotencyPolicy.resolvedPlan),result:t}),t)}function tt(e,t,n){if(!e.idempotencyPolicy)return;let r=T(e.idempotencyPolicy.request);if(n.kind===`invalid`)return m(V(e,t,n.reason),B,{force:!0});if(!(n.kind!==`valid`||n.record.request.fingerprint===r))return m(g({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{conflict:`concurrent-request-mismatch`,existingAction:n.record.request.payload.action,idempotencyKey:t},message:`Idempotency key ${t} changed while the command was running; replay evidence was not overwritten.`},target:e.target}),B,{force:!0})}function nt(e,t,n,r){return n.reason===`invalid-evidence`?m(V(e,t,n.invalidReason),B,{force:!0}):m(g({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{existingAction:r.kind===`valid`?r.record.request.payload.action:void 0,idempotencyKey:t,reason:`request-mismatch`},message:`Idempotency key ${t} was already used for a different canonical request.`},target:e.target}),B,{force:!0})}function V(e,t,n){return g({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{idempotencyKey:t,invalidReason:n,reason:`invalid-evidence`},message:`Idempotency key ${t} contains invalid replay evidence (${n}).`},target:e.target})}function rt(e){let t=r();return{...e,meta:{...e.meta,mode:t.outputMode,runId:t.runId,timestamp:new Date().toISOString()}}}function H(e){return{fingerprint:T(e),payload:e}}function U(e){return e===`ensure`||e===`install`||e===`uninstall`||e===`update`}async function it(e,t){let n,r;try{let i=new Promise(t=>{let i=r=>{n??=lt(e,r),n.then(t)},a=()=>i(`SIGINT`),o=()=>i(`SIGTERM`);O.once(`SIGINT`,a),O.once(`SIGTERM`,o),r=()=>{O.off(`SIGINT`,a),O.off(`SIGTERM`,o)}});return await Promise.race([st(t,()=>n),i])}finally{r?.()}}async function at(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function ot(t,n){try{return await t()}catch(t){if(e(t)&&t.kind===`timed-out`||r().cancelled)return n();throw t}}async function st(e,t){try{let n=await e(),i=t();return r().cancelled&&i?i:n}catch(e){let n=t();if(r().cancelled&&n)return n;throw e}}function W(e,t){return g({action:e.action,error:{code:`TIMEOUT`,details:{timeoutMs:t},message:`Command timed out after ${t}ms.`},target:e.target})}async function ct(e,t){return await o(),h({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),m(W(e,t),B,{force:!0})}async function lt(e,t){return await o(),h({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),m(g({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),B,{force:!0})}const ut={cancelOperations:o,createExecutionService:ke};async function G(e,t,n={},i=ut){let a=r(),o=n.nonInteractive?!1:a.interactive,s=n.assumeYes??fe(),c=n.dryRun??de(),l=n.install??`prompt`,u,d=i.createExecutionService({confirmInstall:async e=>s?!0:!!(await Ce({initial:!0,message:`${e.agent.displayName} is not installed. Would you like to install it?`,name:`install`,type:`confirm`})).install,dryRun:c,interactive:o,onInstallStart:e=>{b(y.cyan(`Installing ${e.agent.displayName}...`))},outputMode:a.outputMode,timeoutMs:a.timeoutMs}),f=e=>{u??=e,i.cancelOperations()},p=()=>f(`SIGINT`),m=()=>f(`SIGTERM`);O.once(`SIGINT`,p),O.once(`SIGTERM`,m);try{return dt(await d.execute({agentName:e,args:t,installPolicy:l}),{agentName:e,args:t,cancellationSignal:u,installPolicy:l,interactive:o})}finally{O.off(`SIGINT`,p),O.off(`SIGTERM`,m),d.dispose()}}function dt(e,t){if(e.kind===`not-found`)return q({agent:{name:t.agentName},errorCode:`AGENT_NOT_FOUND`,errorMessage:`Unknown agent: ${t.agentName}`,execution:K(t,!1)}),C(`AGENT_NOT_FOUND`);if(e.kind===`observation-failed`)return ft(t.agentName,e.error);let{observed:n}=e,r=n.agent;if(e.kind===`not-installed`||e.kind===`interaction-required`){let i=e.kind===`interaction-required`;return q({agent:r,errorCode:i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`,errorMessage:i?`${r.displayName} is not installed and interactive installation is disabled.`:`${r.displayName} is not installed.`,execution:{...K(t,!1),installGuidance:mt(r,n.methods,t.args)}}),C(i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`)}switch(e.kind){case`install-declined`:return ue(y.yellow(`Installation cancelled.`)),1;case`install-failed`:return S(y.red(`Failed to install ${r.displayName}.`)),C(`INSTALL_FAILED`);case`dry-run`:return e.wouldInstall&&x(y.cyan(`Dry run: would install ${r.displayName}.`)),ht({agent:r,execution:K(t,!0),message:`Dry run: would run ${e.argv.join(` `)}`}),0;case`launch-failed`:return S(y.red(`Failed to launch ${r.displayName}: ${e.reason}`)),1;case`cancelled`:return S(y.red(t.cancellationSignal?`${r.displayName} was cancelled by ${t.cancellationSignal}.`:`${r.displayName} was cancelled.`)),C(`CANCELLED`);case`timed-out`:return S(y.red(e.phase===`install`?`Installing ${r.displayName} timed out after ${e.timeoutMs}ms.`:`${r.displayName} timed out after ${e.timeoutMs}ms.`)),C(`TIMEOUT`);case`exited`:return e.exitCode}}function K(e,t){return{args:e.args,installPolicy:e.installPolicy,installed:t,interactive:e.interactive,launched:!1}}function ft(e,t){let n=pt(t.code)?t.code:`INSTALL_FAILED`;return r().outputMode===`human`?S(y.red(t.message)):m(g({action:`exec`,error:{code:n,details:t.details,message:t.message},target:{kind:`agent`,name:e}}),()=>{}),C(n)}function pt(e){return e!==void 0&&pe.includes(e)}function mt(e,t,n){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:ie(e,t),label:ae(t),type:t.type})).filter(e=>e.command),suggestedAction:`rerun-with-install-policy`,suggestedEnsureCommand:`quantex ensure ${e.name}`,suggestedExecCommand:[`quantex`,`exec`,e.name,`--install`,`if-missing`,`--`,...n].join(` `)}}function q(e){if(r().outputMode===`human`){S(y.red(e.errorMessage));let t=e.execution.installGuidance;t&&(x(y.dim(`Try: ${t.suggestedEnsureCommand}`)),x(y.dim(`Or: ${t.suggestedExecCommand}`)));return}m(g({action:`exec`,data:{agent:e.agent,execution:e.execution},error:{code:e.errorCode,details:e.execution.installGuidance,message:e.errorMessage},target:{kind:`agent`,name:e.agent.name}}),()=>{})}function ht(e){if(r().outputMode===`human`){x(y.cyan(e.message));return}m(ee({action:`exec`,data:{agent:e.agent,execution:e.execution},target:{kind:`agent`,name:e.agent.name}}),()=>{})}const gt={capabilities:async()=>{let{capabilitiesCommand:e}=await import(`./capabilities-BzIaPy6l.mjs`);await J({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})},commands:async()=>{let{commandsCommand:e}=await import(`./commands-B_aFMzNX.mjs`);await J({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})},config:async(...e)=>{let{configCommand:t}=await import(`./config-sIdMC5n8.mjs`),[n,r,i]=e;await J({action:`config`,run:()=>t(n,r,i),target:{kind:`config`,name:r}})},doctor:async()=>{let{doctorCommand:e}=await import(`./doctor-DLqh1mWM.mjs`);await J({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})},ensure:async(...e)=>{let t=e[0],[{ensureCommandWithRoute:n},{selectInstallationEngineRoute:r}]=await Promise.all([import(`./ensure-OJEUoNgi.mjs`),import(`./installation-routing-Ce-jeQYX.mjs`)]),i=r(`ensure`);await J({action:`ensure`,idempotencyPolicy:()=>E(`ensure`,t),run:()=>n(t,i),target:{kind:`agent`,name:t}})},exec:async(...e)=>{let[t,n,r,i]=e,a=r.install??`never`;if(a!==`never`&&a!==`if-missing`&&a!==`always`){O.stdout.write(`${y.red(`Unknown install policy: ${a}`)}\n`),O.exitCode=2;return}let o=vt(i);O.exitCode=await G(t,o.length>0?o:n,{install:a,nonInteractive:i.optsWithGlobals().nonInteractive})},info:async(...e)=>{let t=e[0],{infoCommand:n}=await import(`./info-dUPDOWt7.mjs`);await J({action:`info`,run:()=>n(t),target:{kind:`agent`,name:t}})},inspect:async(...e)=>{let t=e[0],{inspectCommand:n}=await import(`./inspect-B7UWjmMH.mjs`);await J({action:`inspect`,run:()=>n(t),target:{kind:`agent`,name:t}})},install:async(...e)=>{let[{installCommandWithRoute:t},{selectInstallationEngineRoute:n}]=await Promise.all([import(`./install-GVNdjsy9.mjs`),import(`./installation-routing-Ce-jeQYX.mjs`)]),r=n(`install`),i=_e(e[0]),a=i.length===1;await J({action:`install`,...a?{idempotencyPolicy:()=>E(`install`,i[0])}:{idempotencyPolicy:()=>ge(i)},run:()=>t(i,r),target:a?{kind:`agent`,name:i[0]}:{kind:`agent`,name:i.join(`,`)}})},list:async()=>{let{listCommand:e}=await import(`./list-DK3fj9d5.mjs`);await J({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})},resolve:async(...e)=>{let t=e[0],{resolveCommand:n}=await import(`./resolve-D3ign4At.mjs`);await J({action:`resolve`,run:()=>n(t),target:{kind:`agent`,name:t}})},schema:async(...e)=>{let t=e[0],{schemaCommand:n}=await import(`./schema-ra2FB_Qb.mjs`);await J({action:`schema`,run:()=>n(t),target:{kind:`system`,name:`schema`}})},uninstall:async(...e)=>{let t=e[0],{uninstallCommand:n}=await import(`./uninstall-X2wXg7ic.mjs`);await J({action:`uninstall`,idempotencyPolicy:()=>ve(t),run:()=>n(t),target:{kind:`agent`,name:t}})},update:async(...e)=>{let[t,n]=e,{createUpdateCommandInvocation:r}=await import(`./update-CLOjmvmZ.mjs`),i=r(t,n.all??!1);try{await J({action:`update`,...i.idempotencyPolicy?{idempotencyPolicy:i.idempotencyPolicy}:{},run:i.run,target:{kind:`agent`,name:t}})}finally{i.dispose()}},upgrade:async(...e)=>{let t=e[0],{resolveUpgradeChannelOption:n,upgradeCommand:r}=await import(`./upgrade-BDncA4Lq.mjs`);await J({action:`upgrade`,run:()=>r({channel:n(t.channel),check:t.check??!1}),target:{kind:`self`,name:`quantex`}})}};function _t(e){return gt[e]}function vt(e){let t=e.processedArgs.at(-1);return Array.isArray(t)?t:e.args.slice(1)}async function J(e){let{getExitCodeForResult:t}=await import(`./errors-BxB8LWeu.mjs`);O.exitCode=t(await Ge(e))}function yt(){let e=d();u(e,e.map(e=>e.schema.name));let t=new Se;t.name(`quantex`).description(`统一的 AI Agent CLI 管理工具`);for(let e of v())t.option(e.flags,e.description,e.defaultValue);t.version(f()),t.hook(`preAction`,(e,t)=>{try{a(i(c(t.optsWithGlobals())))}catch(e){O.stdout.write(`${y.red(e instanceof Error?e.message:String(e))}\n`),O.exit(2)}}),t.hook(`postAction`,()=>{n()});for(let n of e){let e=t.command(n.name).description(n.description);for(let t of n.aliases)e.alias(t);for(let t of n.arguments)e.argument(t.syntax,t.description);n.allowUnknownOptions&&e.allowUnknownOption();for(let t of n.options)e.option(t.flags,t.description,t.defaultValue);e.action(_t(n.handlerId))}return t}const bt=new Map(v().map(e=>[xt(e.flags),e]));function Y(e,t,n){let r={},i=0;for(;i<e.length;){let a=e[i],o=bt.get(a);if(o){if(o.value===`string`){let t=e[i+1];if(!t)return St(a);r[o.id]=t,i+=2}else r[o.id]=!0,i+=1;continue}if(a.startsWith(`-`)||t.has(a))return;let s=Z(r.output);return r.json===!0||s===`json`||s===`ndjson`||n.agentFriendly&&s!==`human`?{agentArgs:[],agentName:``,error:`Structured output is not supported for shortcut agent execution yet. Use a management command instead.`}:{agentArgs:e.slice(i+1),agentName:a,color:Z(r.color),dryRun:X(r.dryRun),idempotencyKey:Z(r.idempotencyKey),logLevel:Z(r.logLevel),noCache:X(r.noCache),nonInteractive:X(r.nonInteractive),quiet:X(r.quiet),refresh:X(r.refresh),runId:Z(r.runId),timeout:Z(r.timeout),yes:X(r.yes)}}}function xt(e){let t=e.match(/--[a-z][a-z-]*/);if(!t)throw Error(`Global option requires a long flag: ${e}`);return t[0]}function X(e){return e===!0}function Z(e){return typeof e==`string`?e:void 0}function St(e){return{agentArgs:[],agentName:``,error:`${e} requires a value`}}const Q=yt(),Ct=new Set([...Q.commands.map(e=>e.name()),...Q.commands.flatMap(e=>e.aliases()),`help`,`--help`,`--version`,`-v`]),$=Y(O.argv.slice(2),Ct,{agentFriendly:O.stdin.isTTY===!1||O.stdout.isTTY===!1});if($?.error&&(console.log(y.red($.error)),O.exit(2)),$&&t($.agentName)){try{a(i({color:$.color,dryRun:$.dryRun,idempotencyKey:$.idempotencyKey,logLevel:$.logLevel,noCache:$.noCache,nonInteractive:$.nonInteractive,quiet:$.quiet,refresh:$.refresh,runId:$.runId,timeout:$.timeout,yes:$.yes}))}catch(e){console.log(y.red(e instanceof Error?e.message:String(e))),O.exit(2)}try{let e=await G($.agentName,$.agentArgs,{assumeYes:$.yes,dryRun:$.dryRun,nonInteractive:$.nonInteractive});O.exit(e)}finally{n()}}await Q.parseAsync();export{};
@@ -0,0 +1 @@
1
+ import{t as e}from"./commands-DgQeHPFE.mjs";export{e as commandsCommand};
@@ -0,0 +1,3 @@
1
+ import{R as e,V as t,i as n,n as r}from"./output-CemK152l.mjs";import{i,r as a,t as o}from"./human-D52z36dT.mjs";import{t as s}from"./color-FZclrXnv.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,3 +1,3 @@
1
- import{r as e}from"./registry-N9jeGQcX.mjs";import{d as t,f as n,l as r,p as i,u as a}from"./file-store-Caz7fnAB.mjs";import{i as o,n as s,t as c}from"./output-DZkIsf0G.mjs";import{t as l}from"./color-BAlKATeY.mjs";async function u(l,u,f){if(!l)return o(s({action:`config`,data:{action:`list`,config:await t()},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 e=(await t())[u];return o(s({action:`config`,data:{action:`get`,key:u,value:typeof e==`number`||typeof e==`string`?e: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`&&!r(f))return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`defaultPackageManager must be bun, npm, or mise`},target:{kind:`config`,name:u}}),d);if(u===`npmBunUpdateStrategy`&&!a(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`&&!e(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 i={};try{i=await t()}catch{}return i[u]=[`networkRetries`,`networkTimeoutMs`,`versionCacheTtlHours`].includes(u)?Number.parseInt(f,10):u===`selfUpdateRegistry`?e(f):f,await n(i),o(s({action:`config`,data:{action:`set`,key:u,value:i[u]},target:{kind:`config`,name:u}}),d)}case`reset`:return await n(i),o(s({action:`config`,data:{action:`reset`,config:i},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(`
1
+ import{r as e}from"./registry-N9jeGQcX.mjs";import{d as t,f as n,l as r,p as i,u as a}from"./file-store-Caz7fnAB.mjs";import{i as o,n as s,t as c}from"./output-CemK152l.mjs";import{t as l}from"./color-FZclrXnv.mjs";async function u(l,u,f){if(!l)return o(s({action:`config`,data:{action:`list`,config:await t()},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 e=(await t())[u];return o(s({action:`config`,data:{action:`get`,key:u,value:typeof e==`number`||typeof e==`string`?e: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`&&!r(f))return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`defaultPackageManager must be bun, npm, or mise`},target:{kind:`config`,name:u}}),d);if(u===`npmBunUpdateStrategy`&&!a(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`&&!e(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 i={};try{i=await t()}catch{}return i[u]=[`networkRetries`,`networkTimeoutMs`,`versionCacheTtlHours`].includes(u)?Number.parseInt(f,10):u===`selfUpdateRegistry`?e(f):f,await n(i),o(s({action:`config`,data:{action:`set`,key:u,value:i[u]},target:{kind:`config`,name:u}}),d)}case`reset`:return await n(i),o(s({action:`config`,data:{action:`reset`,config:i},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
2
  Current Configuration:
3
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 +1 @@
1
- import{t as e}from"./schema-hCKyxJjR.mjs";import{i as t,n}from"./cli-context-xudTdmO7.mjs";import{a as r}from"./file-store-Caz7fnAB.mjs";import{b as i,n as a,r as o,t as s,w as c}from"./output-DZkIsf0G.mjs";import{l}from"./providers-DKCPx1ao.mjs";import{n as u}from"./cli-operation-context-QEqKxWgM.mjs";import{n as d,o as f}from"./agents-CeaGD7Mf.mjs";import{r as p}from"./provider-binding-DMLQQGPh.mjs";import{n as m,t as h}from"./lifecycle-errors-DGA1j4MM.mjs";import g from"node:process";function _(e,r={}){let i=n(),a=new AbortController,o=new Set,s=r.loadExecutor??I,c=!1,l,u=()=>(l??=s(),l);i.cancelled&&a.abort(`cancelled`);let d=t(async()=>{a.abort(`cancelled`),await Promise.allSettled(o)});return{dispose(){c||(c=!0,d())},async execute(t,n={}){if(c)return O(e,t);if(a.signal.aborted)return D(e,t);let r=v(u,e,t,a.signal,n.emitStartedEvent??!1);o.add(r);try{return await r}finally{o.delete(r)}}}}async function v(e,t,r,i,a){try{let o=await e(),s=n(),c={mode:s.dryRun?`preview`:`apply`,name:r,onMutationStart:a?e=>F(t,e.before.agent):void 0,operation:t,outputPolicy:u(s.outputMode),providerTimeoutMs:s.timeoutMs,resolveAdoption:b,signal:i};return y(t,r,await o.execute(c))}catch(e){return L(t,e),A(t,r,e)}}function y(e,t,n){if(n.kind===`failure`)return n.error.code===`cancelled`?D(e,t):n.error.code===`timed-out`?k(e,t):O(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`?S(e,t,r.error):x(e,r.value)}async function b(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 x(e,t){let n=t.before.agent;if(t.decision===`already-satisfied`)return C(e,n);if(t.decision===`external-preserved`)return t.compatibility?t.kind===`preview`?T(e,n,`adopt`):E(e,n,t):w(e,n);if(t.kind===`preview`)return T(e,n,t.decision===`reinstall`?`reinstall`:`install`);let r=t.after.installedState;return r?a({action:e,data:j(n,!0,!0,r),target:{kind:`agent`,name:n.name}}):s({action:e,data:j(n,!1,!1),error:P(e,n),target:{kind:`agent`,name:n.name}})}function S(e,t,n){let r=H(n.cause,B);if(r)return s({action:e,...h(r,{kind:`agent`,name:t})});let i=n.sideEffect===`none`?H(n.cause,z):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=o===`recording-failed`?{code:`INSTALL_FAILED`,details:{lifecycle:`state-write-failed`},message:`Failed to record verified state for ${a?.displayName??t}.`}:o===`decision-conflict`||o===`decision-indeterminate`||o===`verification-failed`?P(e,a??N(t)):{code:`INSTALL_FAILED`,message:`Failed to install ${a?.displayName??t}.`};return s({action:e,data:a?j(a,!1,!1):M(t),error:l,target:{kind:`agent`,name:a?.name??t}})}function C(e,t){return a({action:e,data:j(t,!1,!0),target:{kind:`agent`,name:t.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${t.displayName} is already installed.`}]})}function w(e,t){return a({action:e,data:j(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 T(e,t,n){return a({action:e,data:j(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 E(e,t,n){let r=n.after.installedState;return r?a({action:e,data:j(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:j(t,!1,!0),error:P(e,t),target:{kind:`agent`,name:t.name}})}function D(e,t){return s({action:e,data:M(t),error:{code:`CANCELLED`,message:`${e===`ensure`?`Ensure`:`Install`} was cancelled before tracking could complete.`},target:{kind:`agent`,name:t}})}function O(e,t){return s({action:e,data:M(t),error:{code:`INSTALL_FAILED`,message:`Failed to initialize the ${e} lifecycle engine.`},target:{kind:`agent`,name:t}})}function k(e,t){let n=d(t);return s({action:e,data:n?j(n,!1,!1):M(t),error:{code:`INSTALL_FAILED`,message:`Failed to install ${n?.displayName??t}.`},target:{kind:`agent`,name:n?.name??t}})}function A(e,t,n){let r=H(n,B);if(r)return s({action:e,...h(r,{kind:`agent`,name:t})});let i=H(n,z);return i?s({action:e,...m(i,c(),{kind:`agent`,name:t})}):O(e,t)}function j(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 M(e){return j(d(e)??N(e),!1,!1)}function N(e){return{displayName:e,name:e}}function P(e,t){return{code:`INSTALL_FAILED`,details:{lifecycle:`verification-failed`},message:e===`ensure`?`${t.displayName} could not be verified after ensure completed.`:`${t.displayName} could not be verified after installation.`}}function F(e,t){o({action:e,data:{agent:{displayName:t.displayName,name:t.name}},target:{kind:`agent`,name:t.name},type:`started`})}async function I(){return(await import(`./installation-compatibility-BUIdD4fg.mjs`)).createCoreInstallationCompatibilityExecutor()}function L(e,t){n().logLevel===`debug`&&g.stderr.write(`[quantex:debug] ${e} core engine failure: ${R(t)}\n`)}function R(e){return e instanceof Error&&e.message.trim()?e.message:`unknown failure`}function z(t){if(t instanceof i)return t;if(t instanceof e)return new i(`Failed to read Quantex state file: ${t.message}`,{cause:t});if(V(t))return new i(`Failed to read Quantex state file.`,{cause:t})}function B(e){return r(e)?e:void 0}function V(e){return!!(e&&typeof e==`object`&&`path`in e&&String(e.path)===c())}function H(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{_ as createCoreInstallationCliSession};
1
+ import{t as e}from"./schema-hCKyxJjR.mjs";import{i as t,n}from"./cli-context-xudTdmO7.mjs";import{a as r}from"./file-store-Caz7fnAB.mjs";import{b as i,n as a,r as o,t as s,w as c}from"./output-CemK152l.mjs";import{l}from"./providers-BsRQVnXd.mjs";import{n as u}from"./cli-operation-context-BhNiJdQ3.mjs";import{n as d,o as f}from"./agents-_8Ay_O2P.mjs";import{r as p}from"./provider-binding-D1muQsgD.mjs";import{n as m,t as h}from"./lifecycle-errors-B0bwmxkB.mjs";import g from"node:process";function _(e,r={}){let i=n(),a=new AbortController,o=new Set,s=r.loadExecutor??I,c=!1,l,u=()=>(l??=s(),l);i.cancelled&&a.abort(`cancelled`);let d=t(async()=>{a.abort(`cancelled`),await Promise.allSettled(o)});return{dispose(){c||(c=!0,d())},async execute(t,n={}){if(c)return O(e,t);if(a.signal.aborted)return D(e,t);let r=v(u,e,t,a.signal,n.emitStartedEvent??!1);o.add(r);try{return await r}finally{o.delete(r)}}}}async function v(e,t,r,i,a){try{let o=await e(),s=n(),c={mode:s.dryRun?`preview`:`apply`,name:r,onMutationStart:a?e=>F(t,e.before.agent):void 0,operation:t,outputPolicy:u(s.outputMode),providerTimeoutMs:s.timeoutMs,resolveAdoption:b,signal:i};return y(t,r,await o.execute(c))}catch(e){return L(t,e),A(t,r,e)}}function y(e,t,n){if(n.kind===`failure`)return n.error.code===`cancelled`?D(e,t):n.error.code===`timed-out`?k(e,t):O(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`?S(e,t,r.error):x(e,r.value)}async function b(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 x(e,t){let n=t.before.agent;if(t.decision===`already-satisfied`)return C(e,n);if(t.decision===`external-preserved`)return t.compatibility?t.kind===`preview`?T(e,n,`adopt`):E(e,n,t):w(e,n);if(t.kind===`preview`)return T(e,n,t.decision===`reinstall`?`reinstall`:`install`);let r=t.after.installedState;return r?a({action:e,data:j(n,!0,!0,r),target:{kind:`agent`,name:n.name}}):s({action:e,data:j(n,!1,!1),error:P(e,n),target:{kind:`agent`,name:n.name}})}function S(e,t,n){let r=H(n.cause,B);if(r)return s({action:e,...h(r,{kind:`agent`,name:t})});let i=n.sideEffect===`none`?H(n.cause,z):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=o===`recording-failed`?{code:`INSTALL_FAILED`,details:{lifecycle:`state-write-failed`},message:`Failed to record verified state for ${a?.displayName??t}.`}:o===`decision-conflict`||o===`decision-indeterminate`||o===`verification-failed`?P(e,a??N(t)):{code:`INSTALL_FAILED`,message:`Failed to install ${a?.displayName??t}.`};return s({action:e,data:a?j(a,!1,!1):M(t),error:l,target:{kind:`agent`,name:a?.name??t}})}function C(e,t){return a({action:e,data:j(t,!1,!0),target:{kind:`agent`,name:t.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${t.displayName} is already installed.`}]})}function w(e,t){return a({action:e,data:j(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 T(e,t,n){return a({action:e,data:j(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 E(e,t,n){let r=n.after.installedState;return r?a({action:e,data:j(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:j(t,!1,!0),error:P(e,t),target:{kind:`agent`,name:t.name}})}function D(e,t){return s({action:e,data:M(t),error:{code:`CANCELLED`,message:`${e===`ensure`?`Ensure`:`Install`} was cancelled before tracking could complete.`},target:{kind:`agent`,name:t}})}function O(e,t){return s({action:e,data:M(t),error:{code:`INSTALL_FAILED`,message:`Failed to initialize the ${e} lifecycle engine.`},target:{kind:`agent`,name:t}})}function k(e,t){let n=d(t);return s({action:e,data:n?j(n,!1,!1):M(t),error:{code:`INSTALL_FAILED`,message:`Failed to install ${n?.displayName??t}.`},target:{kind:`agent`,name:n?.name??t}})}function A(e,t,n){let r=H(n,B);if(r)return s({action:e,...h(r,{kind:`agent`,name:t})});let i=H(n,z);return i?s({action:e,...m(i,c(),{kind:`agent`,name:t})}):O(e,t)}function j(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 M(e){return j(d(e)??N(e),!1,!1)}function N(e){return{displayName:e,name:e}}function P(e,t){return{code:`INSTALL_FAILED`,details:{lifecycle:`verification-failed`},message:e===`ensure`?`${t.displayName} could not be verified after ensure completed.`:`${t.displayName} could not be verified after installation.`}}function F(e,t){o({action:e,data:{agent:{displayName:t.displayName,name:t.name}},target:{kind:`agent`,name:t.name},type:`started`})}async function I(){return(await import(`./installation-compatibility-CvvA-gQU.mjs`)).createCoreInstallationCompatibilityExecutor()}function L(e,t){n().logLevel===`debug`&&g.stderr.write(`[quantex:debug] ${e} core engine failure: ${R(t)}\n`)}function R(e){return e instanceof Error&&e.message.trim()?e.message:`unknown failure`}function z(t){if(t instanceof i)return t;if(t instanceof e)return new i(`Failed to read Quantex state file: ${t.message}`,{cause:t});if(V(t))return new i(`Failed to read Quantex state file.`,{cause:t})}function B(e){return r(e)?e:void 0}function V(e){return!!(e&&typeof e==`object`&&`path`in e&&String(e.path)===c())}function H(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{_ as createCoreInstallationCliSession};
@@ -1 +1 @@
1
- import{t as e}from"./child-process-CBKnpMWt.mjs";import{I as t,n}from"./agents-B7pltU6w.mjs";import{t as r}from"./schema-hCKyxJjR.mjs";import{G as i,b as a}from"./output-DZkIsf0G.mjs";import{c as o,h as s,s as c,u as l}from"./providers-DKCPx1ao.mjs";import{t as u}from"./cli-operation-context-QEqKxWgM.mjs";import{t as d}from"./invocation-hZT7H6Sx.mjs";import{n as f,t as p}from"./production-observation-CU1HQ10p.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
+ import{t as e}from"./child-process-CBKnpMWt.mjs";import{I as t,n}from"./agents-BVhg2uqJ.mjs";import{t as r}from"./schema-hCKyxJjR.mjs";import{G as i,b as a}from"./output-CemK152l.mjs";import{c as o,h as s,s as c,u as l}from"./providers-BsRQVnXd.mjs";import{t as u}from"./cli-operation-context-BhNiJdQ3.mjs";import{t as d}from"./invocation-XbLUFnPY.mjs";import{n as f,t as p}from"./production-observation-uZ_BKubA.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};
@@ -0,0 +1,4 @@
1
+ import{n as e,t}from"./messages-qcLhD-Gc.mjs";import{L as n,i as r,n as i,q as a,s as o,u as s}from"./output-CemK152l.mjs";import{i as c,n as l,r as u,t as d}from"./human-D52z36dT.mjs";import{t as f}from"./cli-operation-context-BhNiJdQ3.mjs";import{n as p,t as m}from"./provider-observations-DV-1-oTB.mjs";import{t as h}from"./color-FZclrXnv.mjs";import{r as g,t as _}from"./core-read-observations-DJ_PiNxk.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?a(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 available in PATH 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=t(n.agent,n.agent.selfUpdate?`self-update`:`manual-hint`)??e(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 r(i({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 +1 @@
1
- import{a as e}from"./file-store-Caz7fnAB.mjs";import{i as t,n,r,t as i}from"./output-DZkIsf0G.mjs";import{l as a}from"./providers-DKCPx1ao.mjs";import{t as o}from"./color-BAlKATeY.mjs";import{g as s,n as c}from"./agents-CeaGD7Mf.mjs";import{t as l}from"./agent-installation-CeZKkWL5.mjs";import{n as u}from"./lifecycle-observations-CueO9I2o.mjs";import{t as d}from"./lifecycle-errors-DGA1j4MM.mjs";import{a as f,i as p,n as m,r as h}from"./user-output-C4bJjtc-.mjs";import{n as g,r as _}from"./installation-routing-Cyn08Qdm.mjs";import{t as v}from"./unmanaged-install-compatibility-4407lfNm.mjs";async function y(e){return await b(e,_(`ensure`))}async function b(n,r){if(g(`ensure`,r),r.engine===`core`){let e=await v(n);if(e)return t(T(e),D);let{createCoreInstallationCliSession:r}=await import(`./core-installation-cli-CyUr__qb.mjs`),i=r(`ensure`);try{return t(await i.execute(n,{emitStartedEvent:!0}),D)}finally{i.dispose()}}if(!c(n)||m())return x(n);try{return await s(()=>x(n))}catch(r){if(e(r))return t(i({action:`ensure`,...d(r,{kind:`agent`,name:n}),target:{kind:`agent`,name:n}}),D);throw r}}async function x(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}}),D);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(T(o),D);let p=c&&s?`satisfied`:f?`adopt`:`install`;if(m())return t(p===`satisfied`?w(o):C(o,p===`adopt`,!!c),D);p!==`satisfied`&&S(o);try{return t(E(o,p,await l({adoptableMethod:f,agent:o,observation:{inPath:s,installedState:c,lifecycle:r.observation,methods:r.methods},operation:`ensure`,route:p})),D)}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})}),D);throw n}}function S(e){r({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name}},target:{kind:`agent`,name:e.name},type:`started`})}function C(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 w(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 T(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 E(e,t,r){if(r.kind===`success`){if(t===`satisfied`)return w(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=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:{lifecycle:`state-write-failed`},message:`Failed to record verified state for ${e.displayName}.`}:r.kind===`failed`&&r.reason.endsWith(`-after-ensure`)||r.kind===`indeterminate`?{code:`INSTALL_FAILED`,details:{lifecycle:`verification-failed`},message:`${e.displayName} could not be verified after ensure completed.`}:{code:`INSTALL_FAILED`,message:`Failed to install ${e.displayName}.`};return i({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!1},error:a,target:{kind:`agent`,name:e.name}})}function D(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{b as n,y as t};
1
+ import{a as e}from"./file-store-Caz7fnAB.mjs";import{i as t,n,r,t as i}from"./output-CemK152l.mjs";import{l as a}from"./providers-BsRQVnXd.mjs";import{t as o}from"./color-FZclrXnv.mjs";import{g as s,n as c}from"./agents-_8Ay_O2P.mjs";import{t as l}from"./agent-installation-C493XDFa.mjs";import{n as u}from"./lifecycle-observations-iAw4vKAs.mjs";import{t as d}from"./lifecycle-errors-B0bwmxkB.mjs";import{a as f,i as p,n as m,r as h}from"./user-output-B-zDs13K.mjs";import{n as g,r as _}from"./installation-routing-BEwlmhg8.mjs";import{t as v}from"./unmanaged-install-compatibility-DSOO1giL.mjs";async function y(e){return await b(e,_(`ensure`))}async function b(n,r){if(g(`ensure`,r),r.engine===`core`){let e=await v(n);if(e)return t(T(e),D);let{createCoreInstallationCliSession:r}=await import(`./core-installation-cli-B9HHOMSK.mjs`),i=r(`ensure`);try{return t(await i.execute(n,{emitStartedEvent:!0}),D)}finally{i.dispose()}}if(!c(n)||m())return x(n);try{return await s(()=>x(n))}catch(r){if(e(r))return t(i({action:`ensure`,...d(r,{kind:`agent`,name:n}),target:{kind:`agent`,name:n}}),D);throw r}}async function x(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}}),D);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(T(o),D);let p=c&&s?`satisfied`:f?`adopt`:`install`;if(m())return t(p===`satisfied`?w(o):C(o,p===`adopt`,!!c),D);p!==`satisfied`&&S(o);try{return t(E(o,p,await l({adoptableMethod:f,agent:o,observation:{inPath:s,installedState:c,lifecycle:r.observation,methods:r.methods},operation:`ensure`,route:p})),D)}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})}),D);throw n}}function S(e){r({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name}},target:{kind:`agent`,name:e.name},type:`started`})}function C(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 w(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 T(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 E(e,t,r){if(r.kind===`success`){if(t===`satisfied`)return w(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=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:{lifecycle:`state-write-failed`},message:`Failed to record verified state for ${e.displayName}.`}:r.kind===`failed`&&r.reason.endsWith(`-after-ensure`)||r.kind===`indeterminate`?{code:`INSTALL_FAILED`,details:{lifecycle:`verification-failed`},message:`${e.displayName} could not be verified after ensure completed.`}:{code:`INSTALL_FAILED`,message:`Failed to install ${e.displayName}.`};return i({action:`ensure`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!1},error:a,target:{kind:`agent`,name:e.name}})}function D(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{b as n,y as t};
@@ -0,0 +1 @@
1
+ import{n as e,t}from"./ensure-C8eFff3H.mjs";export{t as ensureCommand,e as ensureCommandWithRoute};
@@ -0,0 +1 @@
1
+ import{r as e}from"./errors-QBvXzYA-.mjs";export{e as getExitCodeForResult};
@@ -0,0 +1,6 @@
1
+ import e from"node:process";import t from"slice-ansi";import n from"string-width";import r from"wrap-ansi";function i(t=e.stdout.columns){return t===void 0||!Number.isFinite(t)||t<=0?80:Math.max(8,Math.floor(t))}function a(e,t,n={}){if(t.length===0)return[];let a=i(n.width),o=Math.max(0,n.indent??2),s=Math.max(1,n.gap??2),u=Math.max(1,a-o),m=t.map(t=>l(e,t)),h=c(t,m,u,s),g=h.map(e=>t[e]),_=d(g,h.map(e=>m[e]),Math.max(1,u-s*Math.max(0,g.length-1))),v=` `.repeat(o),y=` `.repeat(s),b=n.headerStyle??(e=>e),x=[v+g.map((e,t)=>f(b(e.header),_[t],e.align)).join(y).trimEnd()];for(let t of e){let e=g.map((e,n)=>{let i=e.value(t),a=_[n];return e.wrap?r(i,a,{hard:!0}).split(`
2
+ `):[p(i,a)]}),n=Math.max(...e.map(e=>e.length));for(let t=0;t<n;t+=1)x.push(v+g.map((n,r)=>f(e[r]?.[t]??``,_[r],n.align)).join(y).trimEnd())}return x}function o(e,t={}){if(e.length===0)return[];let a=i(t.width),o=Math.max(0,t.indent??2),c=Math.max(1,t.gap??2),l=Math.max(1,t.minValueWidth??16),u=t.labelStyle??(e=>e),d=Math.max(...e.map(e=>n(`${e.label}:`)));if(a-o-d-c<l)return e.flatMap(e=>[`${` `.repeat(o)}${u(`${e.label}:`)}`,...s(e.value,{indent:` `.repeat(Math.min(a-1,o+2)),width:a})]);let p=` `.repeat(o),m=` `.repeat(o+d+c),h=Math.max(1,a-n(m));return e.flatMap(e=>{let t=f(u(`${e.label}:`),d);return r(e.value,h,{hard:!0}).split(`
3
+ `).map((e,n)=>n===0?`${p}${t}${` `.repeat(c)}${e}`:`${m}${e}`)})}function s(e,t={}){let a=i(t.width),o=t.indent??``,s=t.continuationIndent??o,c=Math.max(1,a-n(o)),l=Math.max(1,a-n(s)),u=e.split(`
4
+ `),d=[];for(let e of u){let t=r(e,c,{hard:!0}).split(`
5
+ `),n=t.shift()??``;d.push(`${o}${n}`);let i=t.join(` `);if(i)for(let e of r(i,l,{hard:!0}).split(`
6
+ `))d.push(`${s}${e}`)}return d}function c(e,t,n,r){let i=e.map((e,t)=>t),a=e.map((e,t)=>({index:t,optional:e.optional,priority:e.priority??0})).filter(e=>e.optional).sort((e,t)=>e.priority-t.priority||t.index-e.index);for(let e of a){if(u(i,t,r)<=n)break;i.splice(i.indexOf(e.index),1)}return i}function l(e,t){let r=Math.max(n(t.header),...e.map(e=>n(t.value(e))));return t.maxWidth===void 0?r:Math.min(r,t.maxWidth)}function u(e,t,n){return e.reduce((e,n)=>e+t[n],0)+n*Math.max(0,e.length-1)}function d(e,t,r){let i=[...t],a=e.map((e,t)=>Math.max(1,Math.min(i[t],e.minWidth??Math.min(n(e.header),8)))),o=i.reduce((e,t)=>e+t,0)-r;for(;o>0;){let e=-1,t=0;for(let n=0;n<i.length;n+=1){let r=i[n]-a[n];r>t&&(e=n,t=r)}if(e===-1)break;--i[e],--o}for(;o>0;){let e=i.reduce((e,t,n)=>t>i[e]&&t>1?n:e,0);if(i[e]===1)break;--i[e],--o}return i}function f(e,t,r=`left`){let i=p(e,t),a=` `.repeat(Math.max(0,t-n(i)));return r===`right`?`${a}${i}`:`${i}${a}`}function p(e,r){return n(e)<=r?e:r<=1?`…`:`${t(e,0,r-1)}…`}export{s as i,o as n,a as r,i as t};
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{n as e,t}from"./messages-qcLhD-Gc.mjs";import{c as n,i as r,n as i,o as a,t as o}from"./detect-BdnZzKbm.mjs";import{A as s,C as c,D as l,E as ee,F as te,M as ne,N as re,O as ie,P as ae,S as oe,T as se,_ as ce,a as le,b as ue,c as de,d as fe,f as pe,g as u,h as d,i as f,j as p,k as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as C,v as w,w as T,x as E,y as D}from"./agents-B7pltU6w.mjs";import{a as O,n as k,o as A,s as j}from"./cli-context-xudTdmO7.mjs";import{c as M,d as N,f as P,s as F}from"./file-store-Caz7fnAB.mjs";import{C as I,D as L,E as R,F as z,G as B,I as me,N as he,P as ge,U as _e,W as ve,_ as ye,a as be,c as xe,g as Se,h as Ce,i as we,j as Te,k as Ee,l as De,n as Oe,o as ke,t as Ae,u as je,w as Me,x as V}from"./output-DZkIsf0G.mjs";import{_ as H,d as Ne,f as Pe,g as Fe,h as Ie,i as U,m as Le,n as Re,p as ze,r as Be,t as Ve,v as He}from"./providers-DKCPx1ao.mjs";import{t as Ue}from"./capabilities-BEI1cl_2.mjs";import{t as We}from"./commands-BOH52G-d.mjs";import{_ as Ge,a as Ke,c as qe,f as Je,h as Ye,i as W,m as Xe,n as Ze,r as Qe,s as $e,t as G,v as et,y as tt}from"./agents-CeaGD7Mf.mjs";import{t as nt}from"./update-planner-D1_UjTb8.mjs";import{t as rt}from"./ensure-BGOBnDc7.mjs";import{t as it}from"./inspect-DIWVlKvN.mjs";import{t as at}from"./resolve-D5TUQ0PU.mjs";import{n as ot,t as st}from"./schema-QsoaSx0p.mjs";import{n as ct,r as lt}from"./errors-D-W3vO4v.mjs";function K(e,t={}){let n=H(),r=n.reduce((e,t)=>(e[t]=[],e),{}),i=[],a=[],o=[],s=[];for(let n of e){if(!n.inPath)continue;if(t.skipUntrackedInPath&&!n.installedState){o.push(n);continue}let e=J(n);if(e===`indeterminate`||e===`manual-required`||e===`blocked-source`){a.push(n);continue}if(e!==`upgrade`){s.push(n);continue}let c=U({agent:n.agent,installedState:n.installedState,methods:n.methods}),l=c.strategy===`managed`?c.getManagedInstallerType?.({agent:n.agent,installedState:n.installedState,methods:n.methods}):void 0;if(l){let e={inspection:n,installerType:l,strategy:`grouped`};r[l].push(e);continue}i.push({inspection:n,strategy:c.strategy===`self-update`?`self-update`:`manual`})}return{entries:[...n.flatMap(e=>r[e]),...i],grouped:r,manual:i,skippedManualCheck:a,untrackedInPath:o,upToDate:s}}function q(e){return J(e)===`upgrade`}function J(e){return nt({intent:{kind:`update`,targetId:`compatibility-update`,targetVersion:e.latestVersion},observation:{drift:{kind:`none`},kind:`present`,providerId:`compatibility`,providerTargetId:`compatibility-update`,providerTargetKind:`package`,targetId:`compatibility-update`,version:e.installedVersion},provider:{capabilities:[`observe`,`update`,`verify`],providerId:`compatibility`,targetId:`compatibility-update`,targetKind:`package`}}).decision}const ut=[`quantex-darwin-arm64`,`quantex-darwin-x64`,`quantex-linux-arm64`,`quantex-linux-x64`,`quantex-windows-x64.exe`];function dt(e){return`${e.sort((e,t)=>e.name.localeCompare(t.name)).map(e=>`${e.checksum} ${e.name}`).join(`
1
+ import{n as e,t}from"./messages-qcLhD-Gc.mjs";import{c as n,i as r,n as i,o as a,t as o}from"./detect-BdnZzKbm.mjs";import{A as s,C as c,D as l,E as ee,F as te,M as ne,N as re,O as ie,P as ae,S as oe,T as se,_ as ce,a as le,b as ue,c as de,d as fe,f as pe,g as u,h as d,i as f,j as p,k as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as C,v as w,w as T,x as E,y as D}from"./agents-BVhg2uqJ.mjs";import{a as O,n as k,o as A,s as j}from"./cli-context-xudTdmO7.mjs";import{c as M,d as N,f as P,s as F}from"./file-store-Caz7fnAB.mjs";import{C as I,D as L,E as R,F as z,G as B,I as me,N as he,P as ge,U as _e,W as ve,_ as ye,a as be,c as xe,g as Se,h as Ce,i as we,j as Te,k as Ee,l as De,n as Oe,o as ke,t as Ae,u as je,w as Me,x as V}from"./output-CemK152l.mjs";import{_ as H,d as Ne,f as Pe,g as Fe,h as Ie,i as U,m as Le,n as Re,p as ze,r as Be,t as Ve,v as He}from"./providers-BsRQVnXd.mjs";import{t as Ue}from"./capabilities-DdjhIFGH.mjs";import{t as We}from"./commands-DgQeHPFE.mjs";import{_ as Ge,a as Ke,c as qe,f as Je,h as Ye,i as W,m as Xe,n as Ze,r as Qe,s as $e,t as G,v as et,y as tt}from"./agents-_8Ay_O2P.mjs";import{t as nt}from"./update-planner-DIhkPXeI.mjs";import{t as rt}from"./ensure-C8eFff3H.mjs";import{t as it}from"./inspect-DPdPhXyQ.mjs";import{t as at}from"./resolve-DtJ2VGPP.mjs";import{n as ot,t as st}from"./schema-D7kyWJeh.mjs";import{n as ct,r as lt}from"./errors-QBvXzYA-.mjs";function K(e,t={}){let n=H(),r=n.reduce((e,t)=>(e[t]=[],e),{}),i=[],a=[],o=[],s=[];for(let n of e){if(!n.inPath)continue;if(t.skipUntrackedInPath&&!n.installedState){o.push(n);continue}let e=J(n);if(e===`indeterminate`||e===`manual-required`||e===`blocked-source`){a.push(n);continue}if(e!==`upgrade`){s.push(n);continue}let c=U({agent:n.agent,installedState:n.installedState,methods:n.methods}),l=c.strategy===`managed`?c.getManagedInstallerType?.({agent:n.agent,installedState:n.installedState,methods:n.methods}):void 0;if(l){let e={inspection:n,installerType:l,strategy:`grouped`};r[l].push(e);continue}i.push({inspection:n,strategy:c.strategy===`self-update`?`self-update`:`manual`})}return{entries:[...n.flatMap(e=>r[e]),...i],grouped:r,manual:i,skippedManualCheck:a,untrackedInPath:o,upToDate:s}}function q(e){return J(e)===`upgrade`}function J(e){return nt({intent:{kind:`update`,targetId:`compatibility-update`,targetVersion:e.latestVersion},observation:{drift:{kind:`none`},kind:`present`,providerId:`compatibility`,providerTargetId:`compatibility-update`,providerTargetKind:`package`,targetId:`compatibility-update`,version:e.installedVersion},provider:{capabilities:[`observe`,`update`,`verify`],providerId:`compatibility`,targetId:`compatibility-update`,targetKind:`package`}}).decision}const ut=[`quantex-darwin-arm64`,`quantex-darwin-x64`,`quantex-linux-arm64`,`quantex-linux-x64`,`quantex-windows-x64.exe`];function dt(e){return`${e.sort((e,t)=>e.name.localeCompare(t.name)).map(e=>`${e.checksum} ${e.name}`).join(`
2
2
  `)}\n`}function ft(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 Y(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 X(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 Z(e){return e.includes(`beta`)?`beta`:`stable`}function pt(e){let t=X(e.repositoryUrl),n=Z(e.version),r=e.files.map(n=>{let r=Y(n.name);if(!r)return;let i=e.checksums.get(n.name);if(!i)throw Error(`Missing checksum entry for ${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 ut)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(!Y(n.name))throw Error(`manifest.json contains an invalid binary asset name: ${n.name}.`)}}async function ht(e){let t=await W(e);return{agent:e,inspection:t,updateAvailable:q(t)}}async function gt(){return _t(await G(),{skipUntrackedInPath:!0})}function _t(e,t={}){let n=K(e,t),r=[],i=H().map(e=>vt(e,n.grouped[e],r)).filter(e=>e!==void 0);return{entries:n.entries.map(e=>$(e.inspection)),grouped:i,manual:[...r,...n.manual.map(e=>$(e.inspection))],skippedManualCheck:n.skippedManualCheck,untrackedInPath:n.untrackedInPath,upToDate:n.upToDate}}function vt(e,t,n){if(t.length===0)return;let r=t.map(e=>$(e.inspection)),i=r.filter(Q);if(n.push(...r.filter(e=>!Q(e))),i.length!==0)return{type:e,packages:i.map(e=>e.package),updates:i}}function Q(e){return!!e.package?.packageName}function $(e){let t=U({agent:e.agent,installedState:e.installedState,methods:e.methods}),n=t.getManagedInstallerType?.({agent:e.agent,installedState:e.installedState,methods:e.methods});return{agent:e.agent,inspection:e,installerType:n,package:n?yt(e.agent,e.installedState,e.methods,n):void 0,state:e.installedState,strategy:t.strategy}}function yt(e,t,n,r){if(t?.packageName&&t.installType===r)return{packageName:t.packageName,binaryName:r===`deno`?t.binaryName:void 0,packageInstallArgs:t.packageInstallArgs,packageTargetKind:t.packageTargetKind};let i=n.find(e=>e.type===r);if(!i)return;let a=Ne(e,i);if(a)return{packageName:a,binaryName:i.binaryName??(r===`deno`?e.binaryName:void 0),packageInstallArgs:i.packageInstallArgs,packageTargetKind:i.packageTargetKind}}async function bt(e,t){try{let n=await tt(et([e,...t]));return{success:n===0,exitCode:n}}catch{return{success:!1,exitCode:1}}}export{re as agentCatalogEntrySchema,ae as agentCatalogJsonSchema,te as agentCatalogSchema,Ve as agentUpdateProviders,f as autohand,Ce as canAutoUpdateSelf,Pe as canLookupLatestVersionForInstallType,Re as canResolveAgentUpdate,ze as canUninstallInstallType,Le as canUpdateInstallType,Ue as capabilitiesCommand,le as claude,v as codebuddy,x as codewhale,de as codex,We as commandsCommand,h as copilot,Ae as createErrorResult,pt as createReleaseManifest,Oe as createSuccessResult,K as createUpdatePlan,C as cursor,fe as deepcode,Se as detectSelfInstallSource,pe as devin,y as droid,we as emitCommandResult,rt as ensureCommand,bt as execCommand,dt as formatChecksums,g as gemini,d as genie,S as getAgentByLookupName,_ as getAgentByNameOrAlias,t as getAgentUpdateFailureHint,Be as getAgentUpdateStrategy,b as getAllAgents,_e as getBinaryPath,z as getBinaryReleaseAssetName,me as getBinaryReleaseDownloadUrl,p as getCatalogAgent,ne as getCatalogAgents,k as getCliContext,F as getConfigDir,M as getConfigFilePath,ct as getExitCodeForError,lt as getExitCodeForResult,Ie as getInstallLifecycle,V as getInstalledAgentState,ve as getInstalledVersion,Fe as getInstallerCapabilities,B as getLatestVersion,Ge as getManagedInstaller,e as getManualAgentUpdateMessage,be as getManualSelfUpgradeCommand,$e as getOrderedInstallMethods,o as getPlatform,st as getSchemaCatalog,I as getSelfState,De as getSelfUpgradeRecoveryHint,je as getSelfUpgradeRecoveryHintForInspection,ye as getSelfVersion,ht as getSingleAgentUpdateStatus,Me as getStateFilePath,u as grok,ce as hermes,W as inspectAgent,Ke as inspectAllAgents,it as inspectCommand,G as inspectRegisteredAgents,ke as inspectSelf,qe as installAgent,i as isBinaryInPath,r as isBunAvailable,a as isDenoAvailable,q as isInspectionUpdateAvailable,He as isManagedInstallType,n as isNpmAvailable,w as jcode,D as junie,ue as kilo,N as loadConfig,R as loadState,E as mimo,X as normalizeRepositoryUrl,oe as omp,c as openclaw,T as opencode,se as openhands,Y as parseBinaryTarget,ft as parseChecksums,ee as pi,gt as planAgentUpdates,l as qoder,ie as reasonix,L as removeInstalledAgentState,O as resetCliContext,Ze as resolveAgent,Qe as resolveAgentInspection,U as resolveAgentUpdateProvider,A as resolveCliContext,at as resolveCommand,Z as resolveReleaseChannel,P as saveConfig,Ee as saveState,ot as schemaCommand,j as setCliContext,Te as setInstalledAgentState,he as setSelfInstallSource,ge as setSelfUpdateNoticeState,Je as uninstallAgent,Xe as updateAgent,Ye as updateAgentsByType,xe as upgradeSelf,mt as validateReleaseManifest,m as vibe,s as vtcode};
@@ -0,0 +1,3 @@
1
+ import{i as e,n as t,t as n}from"./output-CemK152l.mjs";import{a as r,o as i}from"./providers-BsRQVnXd.mjs";import{n as a,r as o,t as s}from"./human-D52z36dT.mjs";import{t as c}from"./color-FZclrXnv.mjs";import{n as l,r as u}from"./core-read-observations-DJ_PiNxk.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};
@@ -0,0 +1 @@
1
+ import{t as e}from"./inspect-DPdPhXyQ.mjs";export{e as inspectCommand};
@@ -0,0 +1,5 @@
1
+ import{i as e,n as t,t as n}from"./output-CemK152l.mjs";import{a as r,o as i}from"./providers-BsRQVnXd.mjs";import{n as a,r as o,t as s}from"./human-D52z36dT.mjs";import{t as c}from"./color-FZclrXnv.mjs";import{n as l,r as u}from"./core-read-observations-DJ_PiNxk.mjs";async function d(a){let o=await l(a);if(!o)return e(n({action:`inspect`,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:`inspect`,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},capabilities:{canAutoInstall:c.methods.length>0,canAutoUninstall:c.inPath&&c.lifecycle===`managed`,canRun:c.inPath,canSelfUpdate:d.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}}),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:`Installed`,value:e.data.inspection.installed?c.green(`yes`):c.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 a(n,{labelStyle:c.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(c.bold(`
2
+ Capabilities
3
+ `));for(let e of o(r,[{header:`Capability`,minWidth:8,value:e=>e.capability},{header:`Available`,value:e=>e.value?c.green(`yes`):c.dim(`no`)}],{headerStyle:c.bold,width:t}))console.log(e);if(console.log(c.bold(`
4
+ Install Methods
5
+ `)),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 t};
@@ -1 +1 @@
1
- import{n as e}from"./cli-context-xudTdmO7.mjs";import{a as t}from"./file-store-Caz7fnAB.mjs";import{i as n,n as r,r as i,t as a}from"./output-DZkIsf0G.mjs";import{l as o}from"./providers-DKCPx1ao.mjs";import{t as s}from"./color-BAlKATeY.mjs";import{g as c,n as l}from"./agents-CeaGD7Mf.mjs";import{t as u}from"./agent-installation-CeZKkWL5.mjs";import{n as d}from"./lifecycle-observations-CueO9I2o.mjs";import{t as f}from"./lifecycle-errors-DGA1j4MM.mjs";import{a as p,i as m,n as h,r as g}from"./user-output-C4bJjtc-.mjs";import{n as _,r as v}from"./installation-routing-Cyn08Qdm.mjs";import{t as y}from"./unmanaged-install-compatibility-4407lfNm.mjs";import{o as b}from"./lifecycle-policy-rE0BK2Nu.mjs";async function x(e){return await S(e,v(`install`))}async function S(e,t){_(`install`,t);let n=t.engine===`core`?(await import(`./core-installation-cli-CyUr__qb.mjs`)).createCoreInstallationCliSession(`install`):void 0;try{return await C(e,n)}finally{n?.dispose()}}async function C(t,o){let s=b(Array.isArray(t)?t:[t]);if(s.length<=1)return n(await w(s[0],{emitStartedEvent:!0},o),F);i({action:`install`,data:{scope:`batch`},target:{kind:`agent`},type:`started`});let c=[];for(let t of s){if(e().cancelled)break;let n=j(t,await w(t,{},o));if(c.push(n),i({action:`install`,data:n,target:{kind:`agent`,name:n.agent.name},type:`progress`}),e().cancelled)break}let l={results:c,scope:`batch`,summary:N(c)};return e().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`}}),I):n(c.some(e=>!e.ok)?a({action:`install`,data:l,error:P(c),target:{kind:`agent`}}):r({action:`install`,data:l,target:{kind:`agent`}}),I)}async function w(n,r={},i){if(i){let e=await y(n);return e?k(e):await i.execute(n,r)}if(e().cancelled||!l(n)||h())return T(n,r);try{return await c(()=>T(n,r))}catch(e){if(t(e))return a({action:`install`,...f(e,{kind:`agent`,name:n}),target:{kind:`agent`,name:n}});throw e}}async function T(n,r){if(e().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 k(s);let m=l&&c?`satisfied`:p?`adopt`:`install`;if(h())return m===`satisfied`?D(s):O(s,m===`adopt`,!!l);m!==`satisfied`&&A(s,r.emitStartedEvent);try{return E(s,m,await u({adoptableMethod:p,agent:s,observation:{inPath:c,installedState:l,lifecycle:i.observation,methods:i.methods},operation:`install`,route:m}))}catch(e){if(t(e))return a({action:`install`,data:{agent:{displayName:s.displayName,name:s.name},changed:!1,installed:c},...f(e,{kind:`agent`,name:s.name})});throw e}}function E(e,t,n){if(n.kind===`success`){if(t===`satisfied`)return D(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=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:{lifecycle:`state-write-failed`},message:`Failed to record verified state for ${e.displayName}.`}:n.kind===`failed`&&n.reason.endsWith(`-after-install`)||n.kind===`indeterminate`?{code:`INSTALL_FAILED`,details:{lifecycle:`verification-failed`},message:`${e.displayName} could not be verified after installation.`}:{code:`INSTALL_FAILED`,message:`Failed to install ${e.displayName}.`};return a({action:`install`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!1},error:i,target:{kind:`agent`,name:e.name}})}function D(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 O(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 k(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 A(e,t=!1){t&&i({action:`install`,data:{agent:{displayName:e.displayName,name:e.name}},target:{kind:`agent`,name:e.name},type:`started`})}function j(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:M(t),warnings:r}}function M(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 N(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 P(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 F(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 I(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(L(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`already-installed`:case`untracked-existing-install`:p(s.yellow(L(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`planned`:p(s.cyan(L(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}R(e.data.summary)}function L(e,t){return e[0]?.message??t}function R(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{x as installCommand,S as installCommandWithRoute};
1
+ import{n as e}from"./cli-context-xudTdmO7.mjs";import{a as t}from"./file-store-Caz7fnAB.mjs";import{i as n,n as r,r as i,t as a}from"./output-CemK152l.mjs";import{l as o}from"./providers-BsRQVnXd.mjs";import{t as s}from"./color-FZclrXnv.mjs";import{g as c,n as l}from"./agents-_8Ay_O2P.mjs";import{t as u}from"./agent-installation-C493XDFa.mjs";import{n as d}from"./lifecycle-observations-iAw4vKAs.mjs";import{t as f}from"./lifecycle-errors-B0bwmxkB.mjs";import{a as p,i as m,n as h,r as g}from"./user-output-B-zDs13K.mjs";import{n as _,r as v}from"./installation-routing-BEwlmhg8.mjs";import{t as y}from"./unmanaged-install-compatibility-DSOO1giL.mjs";import{o as b}from"./lifecycle-policy-DP7_kYIQ.mjs";async function x(e){return await S(e,v(`install`))}async function S(e,t){_(`install`,t);let n=t.engine===`core`?(await import(`./core-installation-cli-B9HHOMSK.mjs`)).createCoreInstallationCliSession(`install`):void 0;try{return await C(e,n)}finally{n?.dispose()}}async function C(t,o){let s=b(Array.isArray(t)?t:[t]);if(s.length<=1)return n(await w(s[0],{emitStartedEvent:!0},o),F);i({action:`install`,data:{scope:`batch`},target:{kind:`agent`},type:`started`});let c=[];for(let t of s){if(e().cancelled)break;let n=j(t,await w(t,{},o));if(c.push(n),i({action:`install`,data:n,target:{kind:`agent`,name:n.agent.name},type:`progress`}),e().cancelled)break}let l={results:c,scope:`batch`,summary:N(c)};return e().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`}}),I):n(c.some(e=>!e.ok)?a({action:`install`,data:l,error:P(c),target:{kind:`agent`}}):r({action:`install`,data:l,target:{kind:`agent`}}),I)}async function w(n,r={},i){if(i){let e=await y(n);return e?k(e):await i.execute(n,r)}if(e().cancelled||!l(n)||h())return T(n,r);try{return await c(()=>T(n,r))}catch(e){if(t(e))return a({action:`install`,...f(e,{kind:`agent`,name:n}),target:{kind:`agent`,name:n}});throw e}}async function T(n,r){if(e().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 k(s);let m=l&&c?`satisfied`:p?`adopt`:`install`;if(h())return m===`satisfied`?D(s):O(s,m===`adopt`,!!l);m!==`satisfied`&&A(s,r.emitStartedEvent);try{return E(s,m,await u({adoptableMethod:p,agent:s,observation:{inPath:c,installedState:l,lifecycle:i.observation,methods:i.methods},operation:`install`,route:m}))}catch(e){if(t(e))return a({action:`install`,data:{agent:{displayName:s.displayName,name:s.name},changed:!1,installed:c},...f(e,{kind:`agent`,name:s.name})});throw e}}function E(e,t,n){if(n.kind===`success`){if(t===`satisfied`)return D(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=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:{lifecycle:`state-write-failed`},message:`Failed to record verified state for ${e.displayName}.`}:n.kind===`failed`&&n.reason.endsWith(`-after-install`)||n.kind===`indeterminate`?{code:`INSTALL_FAILED`,details:{lifecycle:`verification-failed`},message:`${e.displayName} could not be verified after installation.`}:{code:`INSTALL_FAILED`,message:`Failed to install ${e.displayName}.`};return a({action:`install`,data:{agent:{displayName:e.displayName,name:e.name},changed:!1,installed:!1},error:i,target:{kind:`agent`,name:e.name}})}function D(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 O(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 k(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 A(e,t=!1){t&&i({action:`install`,data:{agent:{displayName:e.displayName,name:e.name}},target:{kind:`agent`,name:e.name},type:`started`})}function j(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:M(t),warnings:r}}function M(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 N(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 P(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 F(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 I(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(L(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`already-installed`:case`untracked-existing-install`:p(s.yellow(L(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`planned`:p(s.cyan(L(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}R(e.data.summary)}function L(e,t){return e[0]?.message??t}function R(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{x as installCommand,S as installCommandWithRoute};
@@ -1 +1 @@
1
- import{t as e}from"./invocation-hZT7H6Sx.mjs";import{n as t}from"./production-observation-CU1HQ10p.mjs";function n(n={}){let a=t(n.configDir),o=n.loadPorts??r,s,c=()=>(s??=o(a),s);return Object.freeze({execute(t){return e({signal:t.signal},async e=>{let[n,r]=await Promise.all([import(`./installation-executor-DvXaa9X4.mjs`),c()]);return await n.executeCoreInstallation({mode:t.mode,name:t.name,operation:t.operation},e,i(r,t.outputPolicy,t.providerTimeoutMs),{...t.onMutationStart?{onMutationStart:t.onMutationStart}:{},...t.resolveAdoption?{resolveAdoption:t.resolveAdoption}:{}})})}})}async function r(e){return await(await import(`./installation-production-BXWTdqW5.mjs`)).loadProductionCoreInstallationPorts(e)}function i(e,t,n){let r=e=>({...e,outputPolicy:t,...n===void 0?{}:{timeoutMs:n}}),i=e=>({...e,outputPolicy:t});return{...e,compensate:(t,n)=>e.compensate(t,i(n)),install:(t,n)=>e.install(t,r(n)),observe:(t,r,i)=>e.observe(t,n===void 0?r:{...r,timeoutMs:n},i),resolveRecipe:t=>e.resolveRecipe({...t,context:r(t.context)}),verify:(t,n)=>e.verify(t,r(n))}}export{n as createCoreInstallationCompatibilityExecutor};
1
+ import{t as e}from"./invocation-XbLUFnPY.mjs";import{n as t}from"./production-observation-uZ_BKubA.mjs";function n(n={}){let a=t(n.configDir),o=n.loadPorts??r,s,c=()=>(s??=o(a),s);return Object.freeze({execute(t){return e({signal:t.signal},async e=>{let[n,r]=await Promise.all([import(`./installation-executor-DCbb9ysQ.mjs`),c()]);return await n.executeCoreInstallation({mode:t.mode,name:t.name,operation:t.operation},e,i(r,t.outputPolicy,t.providerTimeoutMs),{...t.onMutationStart?{onMutationStart:t.onMutationStart}:{},...t.resolveAdoption?{resolveAdoption:t.resolveAdoption}:{}})})}})}async function r(e){return await(await import(`./installation-production-J8c0VlZL.mjs`)).loadProductionCoreInstallationPorts(e)}function i(e,t,n){let r=e=>({...e,outputPolicy:t,...n===void 0?{}:{timeoutMs:n}}),i=e=>({...e,outputPolicy:t});return{...e,compensate:(t,n)=>e.compensate(t,i(n)),install:(t,n)=>e.install(t,r(n)),observe:(t,r,i)=>e.observe(t,n===void 0?r:{...r,timeoutMs:n},i),resolveRecipe:t=>e.resolveRecipe({...t,context:r(t.context)}),verify:(t,n)=>e.verify(t,r(n))}}export{n as createCoreInstallationCompatibilityExecutor};
@@ -1 +1 @@
1
- import{a as e,i as t,t as n}from"./provider-binding-DMLQQGPh.mjs";function r(e){let t=e.providerOutcome;if(t?.kind===`cancelled`||t?.kind===`timed-out`)return{kind:`interrupted`,outcome:t};let n=e.observation;if(n.drift.kind===`conflicting-source`)return{code:`conflict`,kind:`blocked`,reason:`Live and recorded installation evidence conflict.`};if(n.kind===`indeterminate`||n.drift.kind===`indeterminate`)return{code:`indeterminate`,kind:`blocked`,reason:n.kind===`indeterminate`?n.reason:n.drift.kind===`indeterminate`?n.drift.reason:`Provider evidence is indeterminate.`};if(n.kind===`present`){if(n.drift.kind===`untracked`)return{...e.binding?{binding:e.binding}:{},changed:!1,decision:`external-preserved`,kind:`ready`};let t=e.persistedBinding??e.binding;return t?{binding:t,changed:!1,decision:`already-satisfied`,kind:`ready`}:{code:`indeterminate`,kind:`blocked`,reason:`A present managed installation has no resolvable source evidence.`}}return n.drift.kind===`recorded-absent`?e.persistedBinding?{decision:`reinstall`,kind:`ready`,requiredBinding:e.persistedBinding,wouldChange:!0}:{code:`indeterminate`,kind:`blocked`,reason:`Recorded installation evidence cannot be resolved to a supported source.`}:{decision:`install`,kind:`ready`,wouldChange:!0}}var i=class{active=!0;cleanupPromise;commitStarted=!1;record;recordWrite;unregister;constructor(e,t,n){this.recipe=e,this.context=t,this.ports=n}register(){this.unregister=this.context.registerCleanup(this)}attachRecord(e){this.record=e}async applyRecord(){if(!this.record)throw Error(`Installation record was not prepared.`);this.recordWrite=Promise.resolve().then(()=>this.record.apply()),await this.recordWrite}async commitRecord(){if(!this.record)throw Error(`Installation record was not prepared.`);this.commitStarted=!0,await this.record.commit()}cleanup(){return this.recover().then(()=>void 0)}force(){return this.cleanup()}recover(){return this.cleanupPromise||=this.runRecovery(),this.cleanupPromise}close(){this.active=!1,this.unregister?.()}async runRecovery(){if(!this.active)return{sideEffect:`none`};if(this.commitStarted)return c(this.context,`compensate`,`may-remain`),{reason:`State commit crossed its irreversible boundary; resources were preserved.`,remediation:p(),sideEffect:`may-remain`};let e=await this.rollbackState();if(e)return c(this.context,`compensate`,`may-remain`),{reason:e,remediation:p(),sideEffect:`may-remain`};if(this.recipe.ownership===`pre-existing`)return c(this.context,`compensate`,`compensated`),{sideEffect:`compensated`};if(this.recipe.compensation===`manual`)return c(this.context,`compensate`,`may-remain`),{sideEffect:`may-remain`};let t;try{t=await this.ports.compensate(this.recipe,u(this.context.timeoutMs))}catch(e){return c(this.context,`compensate`,`may-remain`),{reason:`Compensation failed: ${f(e)}`,sideEffect:`may-remain`}}return t.kind===`success`?(c(this.context,`compensate`,`compensated`),{sideEffect:`compensated`}):(c(this.context,`compensate`,`may-remain`),{reason:d(t),sideEffect:`may-remain`})}async rollbackState(){if(this.record)try{await this.recordWrite?.catch(()=>void 0),await this.record.rollback();return}catch(e){return`State rollback failed: ${f(e)}`}}},a=class extends Error{details;kind;reason;timeoutMs;constructor(e,t,n){super(e.kind===`timed-out`?`Core mutation timed out.`:`Core mutation was cancelled.`),this.name=`CoreMutationInterruption`,this.kind=e.kind,this.details={phase:t,sideEffect:n},e.kind===`timed-out`?this.timeoutMs=e.timeoutMs:this.reason=e.reason}};function o(e,t,n){return new a(e,t,n)}function s(e,t,n){return o({kind:`cancelled`,...e.reason===void 0?{}:{reason:f(e.reason)}},t,n)}function c(e,t,n){e.setInterruptionDetails({phase:t,sideEffect:n})}function l(e){let t,n=new Promise(e=>{t=e}),r=e.registerCleanup({cleanup:()=>n,force:()=>n});return{release(){r(),t()}}}function u(e){return{signal:new AbortController().signal,timeoutMs:e===void 0?5e3:Math.max(10,Math.min(e,5e3))}}function d(e){return`reason`in e&&e.reason?e.reason:e.kind===`unsupported`?`Provider does not support ${e.operation}.`:`Provider ${e.kind} during compensation.`}function f(e){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:`Core lifecycle operation failed.`}function p(){return`Keep the installed resource in place. Inspect Quantex state and lock files, then run inspect or ensure again.`}async function m(e,t,n,r={}){let i=l(t);c(t,`decide`,`none`);let o;try{return e.mode===`preview`?await h(e,t,n,r):(V(t,`decide`,`none`),await n.withMutationLock(e.name,t,async()=>(o=await g(e,t,n,r),o)))}catch(e){if(e instanceof a)throw e;let n=I(o);if(t.signal.aborted)throw s(t.signal,n===`none`?`decide`:`record`,n);return O(`execution-failed`,n===`none`?`decide`:`record`,n,`Lifecycle mutation lock failed: ${q(e)}`,!1,void 0,e)}finally{i.release()}}async function h(e,t,n,r){let i=await b(e.name,t,n);if(i.kind!==`ready`)return i.outcome;let{before:a,directive:o}=i;if(!z(o)){if(o.decision!==`external-preserved`)return E(a,o);let e=await _(a,t,r);return e.kind===`terminal`?e.outcome:e.kind===`none`?E(a,o):{kind:`success`,value:{before:a,binding:e.value.binding,compatibility:{kind:`adopt`},decision:o.decision,kind:`preview`,wouldChange:!0}}}let s=await x(e,a,o,t,n);return s.kind===`ready`?{kind:`success`,value:{before:a,binding:s.value.binding,decision:o.decision,kind:`preview`,wouldChange:!0}}:s.outcome}async function g(e,t,n,r){let a=await b(e.name,t,n);if(a.kind!==`ready`)return a.outcome;let{before:l,directive:u}=a;if(!z(u)){if(u.decision!==`external-preserved`)return await S(e.name,l,u,t,n);let i=await _(l,t,r);return i.kind===`terminal`?i.outcome:i.kind===`ready`?await y(e.name,l,i.value,t,n,r):await S(e.name,l,u,t,n)}let d=await x(e,l,u,t,n);if(d.kind!==`ready`)return d.outcome;let f=d.value;r.onMutationStart?.({before:l,binding:f.binding,decision:u.decision}),c(t,`execute`,`may-remain`);let p;try{p=await n.install(f,H(t))}catch(e){if(t.signal.aborted)throw s(t.signal,`execute`,`may-remain`);return O(`execution-failed`,`execute`,`may-remain`,q(e),!1,K())}if(B(p))throw o(p,`execute`,`may-remain`);if(p.kind!==`success`)return D(`execution-failed`,`execute`,p);let m=new i(f,t,n);if(m.register(),t.signal.aborted)return await w(t.signal,`execute`,m);c(t,`verify`,`may-remain`);let h;try{h=await n.verify(f,H(t))}catch(e){return await C(m,`verification-failed`,`verify`,q(e),!1,e)}if(B(h))return await T(h,`verify`,m);if(h.kind!==`success`)return await C(m,`verification-failed`,`verify`,U(h),W(h));if(h.value.kind===`unsatisfied`)return await C(m,`verification-failed`,`verify`,h.value.reason,!1);let g;try{g=await n.observe(e.name,t,{observationBinding:f.binding})}catch(e){return await C(m,`verification-failed`,`verify`,q(e),!1,e)}if(t.signal.aborted)return await w(t.signal,`verify`,m);let v=F(g);if(v)return await T(v,`verify`,m);if(!g||!k(g,f))return await C(m,`verification-failed`,`verify`,`Fresh post-mutation observation did not confirm the selected provider source.`,!1);try{if(c(t,`record`,`may-remain`),m.attachRecord(await n.prepareRecord({before:l,context:t,recipe:f,verified:g})),t.signal.aborted)return await w(t.signal,`record`,m);await m.applyRecord()}catch(e){return await C(m,`recording-failed`,`record`,q(e),!1,e)}if(t.signal.aborted)return await w(t.signal,`record`,m);c(t,`verify`,`may-remain`);let E;try{E=await n.observe(e.name,t)}catch(e){return await C(m,`verification-failed`,`verify`,q(e),!1,e)}if(t.signal.aborted)return await w(t.signal,`verify`,m);let A=F(E);if(A)return await T(A,`verify`,m);if(!E||!j(E,f))return await C(m,`verification-failed`,`verify`,`Fresh post-mutation observation did not confirm the recorded provider source.`,!1);try{if(c(t,`record`,`may-remain`),t.signal.aborted)return await w(t.signal,`record`,m);await m.commitRecord()}catch(e){return await C(m,`recording-failed`,`record`,q(e),!1,e)}return t.signal.aborted?await w(t.signal,`record`,m):(m.close(),{kind:`success`,value:{after:E,before:l,binding:f.binding,changed:!0,decision:u.decision,kind:`apply`}})}async function _(e,t,n){if(!n.resolveAdoption)return{kind:`none`};let r;try{r=await n.resolveAdoption(e,t)}catch(e){if(t.signal.aborted)throw s(t.signal,`decide`,`none`);return{kind:`terminal`,outcome:O(`decision-indeterminate`,`decide`,`none`,q(e),!1,void 0,e)}}if(V(t,`decide`,`none`),!r)return{kind:`none`};let i=v(e,r);return i?{kind:`terminal`,outcome:O(`decision-indeterminate`,`decide`,`none`,i,!1)}:{kind:`ready`,value:r}}function v(t,n){if(t.observation.kind!==`present`||t.observation.drift.kind!==`untracked`)return`Compatibility adoption requires a fresh untracked present observation.`;if(n.installedState.agentName!==t.agent.name)return`Compatibility adoption state does not target the observed agent.`;if(t.binding&&!N(t.binding,n.binding,t.agent.binaryName))return`Compatibility adoption does not preserve the observed provider source.`;let r=e(t.agent,n.installedState);if(!r||!N(r,n.binding,t.agent.binaryName))return`Compatibility adoption state does not resolve to the selected provider source.`}async function y(e,t,n,r,a,l){let u={binding:n.binding,compensation:`manual`,installedState:n.installedState,ownership:`pre-existing`};c(r,`verify`,`none`);let d;try{d=await a.verify(u,H(r))}catch(e){if(r.signal.aborted)throw s(r.signal,`verify`,`none`);return O(`verification-failed`,`verify`,`none`,q(e),!1,void 0,e)}if(B(d))throw o(d,`verify`,`none`);if(d.kind!==`success`)return O(`verification-failed`,`verify`,`none`,U(d),W(d),G(d));if(d.value.kind===`unsatisfied`)return O(`verification-failed`,`verify`,`none`,d.value.reason,!1);let f;try{f=await a.observe(e,r,{observationBinding:u.binding})}catch(e){if(r.signal.aborted)throw s(r.signal,`verify`,`none`);return O(`verification-failed`,`verify`,`none`,q(e),!1,void 0,e)}V(r,`verify`,`none`);let p=F(f);if(p)throw o(p,`verify`,`none`);if(!f||!A(f,u))return O(`verification-failed`,`verify`,`none`,`Fresh observation did not confirm the compatibility adoption source.`,!1);l.onMutationStart?.({before:t,binding:u.binding,decision:`external-preserved`});let m;try{c(r,`record`,`none`),m=await a.prepareRecord({before:t,context:r,recipe:u,verified:f})}catch(e){if(r.signal.aborted)throw s(r.signal,`record`,`none`);return O(`recording-failed`,`record`,`none`,q(e),!1,void 0,e)}let h=new i(u,r,a);if(h.attachRecord(m),h.register(),r.signal.aborted)return await w(r.signal,`record`,h);try{c(r,`record`,`may-remain`),await h.applyRecord()}catch(e){return await C(h,`recording-failed`,`record`,q(e),!1,e)}if(r.signal.aborted)return await w(r.signal,`record`,h);c(r,`verify`,`may-remain`);let g;try{g=await a.observe(e,r)}catch(e){return await C(h,`verification-failed`,`verify`,q(e),!1,e)}if(r.signal.aborted)return await w(r.signal,`verify`,h);let _=F(g);if(_)return await T(_,`verify`,h);if(!g||!j(g,u))return await C(h,`verification-failed`,`verify`,`Fresh observation did not confirm the recorded compatibility adoption source.`,!1);try{c(r,`record`,`may-remain`),await h.commitRecord()}catch(e){return await C(h,`recording-failed`,`record`,q(e),!1,e)}return r.signal.aborted?await w(r.signal,`record`,h):(h.close(),{kind:`success`,value:{after:g,before:t,binding:u.binding,changed:!0,compatibility:{kind:`adopt`},decision:`external-preserved`,kind:`apply`}})}async function b(e,t,n){V(t,`decide`,`none`);let i;try{i=await n.observe(e,t)}catch(e){if(t.signal.aborted)throw s(t.signal,`decide`,`none`);return{kind:`terminal`,outcome:O(`decision-indeterminate`,`decide`,`none`,q(e),!1,void 0,e)}}if(V(t,`decide`,`none`),!i)return{kind:`terminal`,outcome:{kind:`agent-not-found`,name:e}};let a=r(i);if(a.kind===`interrupted`)throw o(a.outcome,`decide`,`none`);return a.kind===`blocked`?{kind:`terminal`,outcome:O(a.code===`conflict`?`decision-conflict`:`decision-indeterminate`,`decide`,`none`,a.reason,!1)}:{before:i,directive:a,kind:`ready`}}async function x(e,t,n,r,i){let a;try{a=await i.resolveRecipe({context:H(r),directive:n,observed:t,operation:e.operation})}catch(e){if(r.signal.aborted)throw s(r.signal,`decide`,`none`);return{kind:`terminal`,outcome:O(`recipe-unavailable`,`decide`,`none`,q(e),!1)}}if(V(r,`decide`,`none`),a.kind===`interrupted`)throw o(a.outcome,`decide`,`none`);if(a.kind===`ready`){let e=M(t,a.recipe);return e?{kind:`terminal`,outcome:O(`recipe-unavailable`,`decide`,`none`,e,!1)}:{kind:`ready`,value:a.recipe}}return{kind:`terminal`,outcome:O(`recipe-unavailable`,`decide`,`none`,a.reason,a.retryable,a.remediation)}}async function S(e,t,n,i,a){c(i,`verify`,`none`);let l;try{l=await a.observe(e,i)}catch(e){if(i.signal.aborted)throw s(i.signal,`verify`,`none`);return O(`verification-failed`,`verify`,`none`,q(e),!1,void 0,e)}if(V(i,`verify`,`none`),!l)return O(`verification-failed`,`verify`,`none`,`The agent disappeared.`,!0);let u=r(l);if(u.kind!==`ready`||!(`changed`in u)||u.decision!==n.decision||!L(u.binding,n.binding,t.agent.binaryName)||!R(t,l)){if(u.kind===`interrupted`)throw o(u.outcome,`verify`,`none`);return O(`verification-failed`,`verify`,`none`,`Fresh observation changed the no-op decision.`,!0)}return{kind:`success`,value:{after:l,before:t,...n.binding?{binding:n.binding}:{},changed:!1,decision:n.decision,kind:`apply`}}}async function C(e,t,n,r,i,a){let o=await e.recover();return e.close(),o.reason?O(`compensation-failed`,`compensate`,o.sideEffect,`${r} ${o.reason}`,!1,o.remediation??K(),a,t===`compensation-failed`?void 0:t):O(t,n,o.sideEffect,r,i,o.sideEffect===`may-remain`?K():void 0,a)}async function w(e,t,n){let r=await n.recover();throw n.close(),s(e,t,r.sideEffect)}async function T(e,t,n){let r=await n.recover();throw n.close(),o(e,t,r.sideEffect)}function E(e,t){return{kind:`success`,value:{before:e,...t.binding?{binding:t.binding}:{},decision:t.decision,kind:`preview`,wouldChange:!1}}}function D(e,t,n){return O(e,t,`may-remain`,U(n),W(n),G(n))}function O(e,t,n,r,i,a,o,s){return{error:{...o===void 0?{}:{cause:o},code:e,...s?{originCode:s}:{},phase:t,reason:r,...a?{remediation:a}:{},retryable:i,sideEffect:n},kind:`failed`}}function k(e,t){return e.observation.kind===`present`&&e.executable.present&&e.binding!==void 0&&N(e.binding,t.binding,e.agent.binaryName)}function A(e,t){return k(e,t)&&e.observation.drift.kind===`untracked`&&e.installedState===void 0&&e.persistedBinding===void 0&&e.receipt===void 0}function j(i,a){let o=r(i),s=i.installedState?e(i.agent,i.installedState):void 0,c=i.receipt?t(i.receipt):void 0;return o.kind===`ready`&&`changed`in o&&o.decision===`already-satisfied`&&s!==void 0&&c!==void 0&&N(s,a.binding,i.agent.binaryName)&&n(c,a.binding,i.agent.binaryName)}function M(t,n){if(n.ownership!==`created-on-success`)return`Resolved installation recipes must prove created-on-success ownership.`;if(n.installedState.agentName!==t.agent.name)return`Resolved recipe state does not target the observed agent.`;let r=e(t.agent,n.installedState);if(!r||!N(r,n.binding,t.agent.binaryName))return`Resolved recipe does not preserve the schema-v2 provider source identity.`}function N(e,t,r){return n(e,t,r)&&P(e.target.arguments,t.target.arguments)}function P(e,t){return!e||!t?e===t:e.length===t.length&&e.every((e,n)=>e===t[n])}function F(e){let t=e?.providerOutcome;return t&&B(t)?t:void 0}function I(e){return e?e.kind===`failed`?e.error.sideEffect:e.kind===`success`&&e.value.kind===`apply`&&e.value.changed?`may-remain`:`none`:`none`}function L(e,t,n){return!e||!t?e===t:N(e,t,n)}function R(n,r){return L(n.installedState?e(n.agent,n.installedState):void 0,r.installedState?e(r.agent,r.installedState):void 0,n.agent.binaryName)?L(n.receipt?t(n.receipt):void 0,r.receipt?t(r.receipt):void 0,n.agent.binaryName):!1}function z(e){return`wouldChange`in e}function B(e){return e.kind===`cancelled`||e.kind===`timed-out`}function V(e,t,n){if(e.signal.aborted)throw s(e.signal,t,n)}function H(e){return{registerCleanup:e.registerCleanup,signal:e.signal,timeoutMs:e.timeoutMs}}function U(e){return`reason`in e&&e.reason?e.reason:e.kind===`unsupported`?`Provider does not support ${e.operation}.`:`Provider ${e.kind} during the lifecycle mutation.`}function W(e){return e.kind===`failed`?e.retryable:e.kind===`unavailable`?e.retryable??!0:!1}function G(e){return e.kind===`failed`?e.remediation:void 0}function K(){return`Inspect the selected provider target and remove any partial installation manually before retrying.`}function q(e){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:`Core lifecycle operation failed.`}export{a as CoreMutationInterruption,m as executeCoreInstallation};
1
+ import{a as e,i as t,t as n}from"./provider-binding-D1muQsgD.mjs";function r(e){let t=e.providerOutcome;if(t?.kind===`cancelled`||t?.kind===`timed-out`)return{kind:`interrupted`,outcome:t};let n=e.observation;if(n.drift.kind===`conflicting-source`)return{code:`conflict`,kind:`blocked`,reason:`Live and recorded installation evidence conflict.`};if(n.kind===`indeterminate`||n.drift.kind===`indeterminate`)return{code:`indeterminate`,kind:`blocked`,reason:n.kind===`indeterminate`?n.reason:n.drift.kind===`indeterminate`?n.drift.reason:`Provider evidence is indeterminate.`};if(n.kind===`present`){if(n.drift.kind===`untracked`)return{...e.binding?{binding:e.binding}:{},changed:!1,decision:`external-preserved`,kind:`ready`};let t=e.persistedBinding??e.binding;return t?{binding:t,changed:!1,decision:`already-satisfied`,kind:`ready`}:{code:`indeterminate`,kind:`blocked`,reason:`A present managed installation has no resolvable source evidence.`}}return n.drift.kind===`recorded-absent`?e.persistedBinding?{decision:`reinstall`,kind:`ready`,requiredBinding:e.persistedBinding,wouldChange:!0}:{code:`indeterminate`,kind:`blocked`,reason:`Recorded installation evidence cannot be resolved to a supported source.`}:{decision:`install`,kind:`ready`,wouldChange:!0}}var i=class{active=!0;cleanupPromise;commitStarted=!1;record;recordWrite;unregister;constructor(e,t,n){this.recipe=e,this.context=t,this.ports=n}register(){this.unregister=this.context.registerCleanup(this)}attachRecord(e){this.record=e}async applyRecord(){if(!this.record)throw Error(`Installation record was not prepared.`);this.recordWrite=Promise.resolve().then(()=>this.record.apply()),await this.recordWrite}async commitRecord(){if(!this.record)throw Error(`Installation record was not prepared.`);this.commitStarted=!0,await this.record.commit()}cleanup(){return this.recover().then(()=>void 0)}force(){return this.cleanup()}recover(){return this.cleanupPromise||=this.runRecovery(),this.cleanupPromise}close(){this.active=!1,this.unregister?.()}async runRecovery(){if(!this.active)return{sideEffect:`none`};if(this.commitStarted)return c(this.context,`compensate`,`may-remain`),{reason:`State commit crossed its irreversible boundary; resources were preserved.`,remediation:p(),sideEffect:`may-remain`};let e=await this.rollbackState();if(e)return c(this.context,`compensate`,`may-remain`),{reason:e,remediation:p(),sideEffect:`may-remain`};if(this.recipe.ownership===`pre-existing`)return c(this.context,`compensate`,`compensated`),{sideEffect:`compensated`};if(this.recipe.compensation===`manual`)return c(this.context,`compensate`,`may-remain`),{sideEffect:`may-remain`};let t;try{t=await this.ports.compensate(this.recipe,u(this.context.timeoutMs))}catch(e){return c(this.context,`compensate`,`may-remain`),{reason:`Compensation failed: ${f(e)}`,sideEffect:`may-remain`}}return t.kind===`success`?(c(this.context,`compensate`,`compensated`),{sideEffect:`compensated`}):(c(this.context,`compensate`,`may-remain`),{reason:d(t),sideEffect:`may-remain`})}async rollbackState(){if(this.record)try{await this.recordWrite?.catch(()=>void 0),await this.record.rollback();return}catch(e){return`State rollback failed: ${f(e)}`}}},a=class extends Error{details;kind;reason;timeoutMs;constructor(e,t,n){super(e.kind===`timed-out`?`Core mutation timed out.`:`Core mutation was cancelled.`),this.name=`CoreMutationInterruption`,this.kind=e.kind,this.details={phase:t,sideEffect:n},e.kind===`timed-out`?this.timeoutMs=e.timeoutMs:this.reason=e.reason}};function o(e,t,n){return new a(e,t,n)}function s(e,t,n){return o({kind:`cancelled`,...e.reason===void 0?{}:{reason:f(e.reason)}},t,n)}function c(e,t,n){e.setInterruptionDetails({phase:t,sideEffect:n})}function l(e){let t,n=new Promise(e=>{t=e}),r=e.registerCleanup({cleanup:()=>n,force:()=>n});return{release(){r(),t()}}}function u(e){return{signal:new AbortController().signal,timeoutMs:e===void 0?5e3:Math.max(10,Math.min(e,5e3))}}function d(e){return`reason`in e&&e.reason?e.reason:e.kind===`unsupported`?`Provider does not support ${e.operation}.`:`Provider ${e.kind} during compensation.`}function f(e){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:`Core lifecycle operation failed.`}function p(){return`Keep the installed resource in place. Inspect Quantex state and lock files, then run inspect or ensure again.`}async function m(e,t,n,r={}){let i=l(t);c(t,`decide`,`none`);let o;try{return e.mode===`preview`?await h(e,t,n,r):(V(t,`decide`,`none`),await n.withMutationLock(e.name,t,async()=>(o=await g(e,t,n,r),o)))}catch(e){if(e instanceof a)throw e;let n=I(o);if(t.signal.aborted)throw s(t.signal,n===`none`?`decide`:`record`,n);return O(`execution-failed`,n===`none`?`decide`:`record`,n,`Lifecycle mutation lock failed: ${q(e)}`,!1,void 0,e)}finally{i.release()}}async function h(e,t,n,r){let i=await b(e.name,t,n);if(i.kind!==`ready`)return i.outcome;let{before:a,directive:o}=i;if(!z(o)){if(o.decision!==`external-preserved`)return E(a,o);let e=await _(a,t,r);return e.kind===`terminal`?e.outcome:e.kind===`none`?E(a,o):{kind:`success`,value:{before:a,binding:e.value.binding,compatibility:{kind:`adopt`},decision:o.decision,kind:`preview`,wouldChange:!0}}}let s=await x(e,a,o,t,n);return s.kind===`ready`?{kind:`success`,value:{before:a,binding:s.value.binding,decision:o.decision,kind:`preview`,wouldChange:!0}}:s.outcome}async function g(e,t,n,r){let a=await b(e.name,t,n);if(a.kind!==`ready`)return a.outcome;let{before:l,directive:u}=a;if(!z(u)){if(u.decision!==`external-preserved`)return await S(e.name,l,u,t,n);let i=await _(l,t,r);return i.kind===`terminal`?i.outcome:i.kind===`ready`?await y(e.name,l,i.value,t,n,r):await S(e.name,l,u,t,n)}let d=await x(e,l,u,t,n);if(d.kind!==`ready`)return d.outcome;let f=d.value;r.onMutationStart?.({before:l,binding:f.binding,decision:u.decision}),c(t,`execute`,`may-remain`);let p;try{p=await n.install(f,H(t))}catch(e){if(t.signal.aborted)throw s(t.signal,`execute`,`may-remain`);return O(`execution-failed`,`execute`,`may-remain`,q(e),!1,K())}if(B(p))throw o(p,`execute`,`may-remain`);if(p.kind!==`success`)return D(`execution-failed`,`execute`,p);let m=new i(f,t,n);if(m.register(),t.signal.aborted)return await w(t.signal,`execute`,m);c(t,`verify`,`may-remain`);let h;try{h=await n.verify(f,H(t))}catch(e){return await C(m,`verification-failed`,`verify`,q(e),!1,e)}if(B(h))return await T(h,`verify`,m);if(h.kind!==`success`)return await C(m,`verification-failed`,`verify`,U(h),W(h));if(h.value.kind===`unsatisfied`)return await C(m,`verification-failed`,`verify`,h.value.reason,!1);let g;try{g=await n.observe(e.name,t,{observationBinding:f.binding})}catch(e){return await C(m,`verification-failed`,`verify`,q(e),!1,e)}if(t.signal.aborted)return await w(t.signal,`verify`,m);let v=F(g);if(v)return await T(v,`verify`,m);if(!g||!k(g,f))return await C(m,`verification-failed`,`verify`,`Fresh post-mutation observation did not confirm the selected provider source.`,!1);try{if(c(t,`record`,`may-remain`),m.attachRecord(await n.prepareRecord({before:l,context:t,recipe:f,verified:g})),t.signal.aborted)return await w(t.signal,`record`,m);await m.applyRecord()}catch(e){return await C(m,`recording-failed`,`record`,q(e),!1,e)}if(t.signal.aborted)return await w(t.signal,`record`,m);c(t,`verify`,`may-remain`);let E;try{E=await n.observe(e.name,t)}catch(e){return await C(m,`verification-failed`,`verify`,q(e),!1,e)}if(t.signal.aborted)return await w(t.signal,`verify`,m);let A=F(E);if(A)return await T(A,`verify`,m);if(!E||!j(E,f))return await C(m,`verification-failed`,`verify`,`Fresh post-mutation observation did not confirm the recorded provider source.`,!1);try{if(c(t,`record`,`may-remain`),t.signal.aborted)return await w(t.signal,`record`,m);await m.commitRecord()}catch(e){return await C(m,`recording-failed`,`record`,q(e),!1,e)}return t.signal.aborted?await w(t.signal,`record`,m):(m.close(),{kind:`success`,value:{after:E,before:l,binding:f.binding,changed:!0,decision:u.decision,kind:`apply`}})}async function _(e,t,n){if(!n.resolveAdoption)return{kind:`none`};let r;try{r=await n.resolveAdoption(e,t)}catch(e){if(t.signal.aborted)throw s(t.signal,`decide`,`none`);return{kind:`terminal`,outcome:O(`decision-indeterminate`,`decide`,`none`,q(e),!1,void 0,e)}}if(V(t,`decide`,`none`),!r)return{kind:`none`};let i=v(e,r);return i?{kind:`terminal`,outcome:O(`decision-indeterminate`,`decide`,`none`,i,!1)}:{kind:`ready`,value:r}}function v(t,n){if(t.observation.kind!==`present`||t.observation.drift.kind!==`untracked`)return`Compatibility adoption requires a fresh untracked present observation.`;if(n.installedState.agentName!==t.agent.name)return`Compatibility adoption state does not target the observed agent.`;if(t.binding&&!N(t.binding,n.binding,t.agent.binaryName))return`Compatibility adoption does not preserve the observed provider source.`;let r=e(t.agent,n.installedState);if(!r||!N(r,n.binding,t.agent.binaryName))return`Compatibility adoption state does not resolve to the selected provider source.`}async function y(e,t,n,r,a,l){let u={binding:n.binding,compensation:`manual`,installedState:n.installedState,ownership:`pre-existing`};c(r,`verify`,`none`);let d;try{d=await a.verify(u,H(r))}catch(e){if(r.signal.aborted)throw s(r.signal,`verify`,`none`);return O(`verification-failed`,`verify`,`none`,q(e),!1,void 0,e)}if(B(d))throw o(d,`verify`,`none`);if(d.kind!==`success`)return O(`verification-failed`,`verify`,`none`,U(d),W(d),G(d));if(d.value.kind===`unsatisfied`)return O(`verification-failed`,`verify`,`none`,d.value.reason,!1);let f;try{f=await a.observe(e,r,{observationBinding:u.binding})}catch(e){if(r.signal.aborted)throw s(r.signal,`verify`,`none`);return O(`verification-failed`,`verify`,`none`,q(e),!1,void 0,e)}V(r,`verify`,`none`);let p=F(f);if(p)throw o(p,`verify`,`none`);if(!f||!A(f,u))return O(`verification-failed`,`verify`,`none`,`Fresh observation did not confirm the compatibility adoption source.`,!1);l.onMutationStart?.({before:t,binding:u.binding,decision:`external-preserved`});let m;try{c(r,`record`,`none`),m=await a.prepareRecord({before:t,context:r,recipe:u,verified:f})}catch(e){if(r.signal.aborted)throw s(r.signal,`record`,`none`);return O(`recording-failed`,`record`,`none`,q(e),!1,void 0,e)}let h=new i(u,r,a);if(h.attachRecord(m),h.register(),r.signal.aborted)return await w(r.signal,`record`,h);try{c(r,`record`,`may-remain`),await h.applyRecord()}catch(e){return await C(h,`recording-failed`,`record`,q(e),!1,e)}if(r.signal.aborted)return await w(r.signal,`record`,h);c(r,`verify`,`may-remain`);let g;try{g=await a.observe(e,r)}catch(e){return await C(h,`verification-failed`,`verify`,q(e),!1,e)}if(r.signal.aborted)return await w(r.signal,`verify`,h);let _=F(g);if(_)return await T(_,`verify`,h);if(!g||!j(g,u))return await C(h,`verification-failed`,`verify`,`Fresh observation did not confirm the recorded compatibility adoption source.`,!1);try{c(r,`record`,`may-remain`),await h.commitRecord()}catch(e){return await C(h,`recording-failed`,`record`,q(e),!1,e)}return r.signal.aborted?await w(r.signal,`record`,h):(h.close(),{kind:`success`,value:{after:g,before:t,binding:u.binding,changed:!0,compatibility:{kind:`adopt`},decision:`external-preserved`,kind:`apply`}})}async function b(e,t,n){V(t,`decide`,`none`);let i;try{i=await n.observe(e,t)}catch(e){if(t.signal.aborted)throw s(t.signal,`decide`,`none`);return{kind:`terminal`,outcome:O(`decision-indeterminate`,`decide`,`none`,q(e),!1,void 0,e)}}if(V(t,`decide`,`none`),!i)return{kind:`terminal`,outcome:{kind:`agent-not-found`,name:e}};let a=r(i);if(a.kind===`interrupted`)throw o(a.outcome,`decide`,`none`);return a.kind===`blocked`?{kind:`terminal`,outcome:O(a.code===`conflict`?`decision-conflict`:`decision-indeterminate`,`decide`,`none`,a.reason,!1)}:{before:i,directive:a,kind:`ready`}}async function x(e,t,n,r,i){let a;try{a=await i.resolveRecipe({context:H(r),directive:n,observed:t,operation:e.operation})}catch(e){if(r.signal.aborted)throw s(r.signal,`decide`,`none`);return{kind:`terminal`,outcome:O(`recipe-unavailable`,`decide`,`none`,q(e),!1)}}if(V(r,`decide`,`none`),a.kind===`interrupted`)throw o(a.outcome,`decide`,`none`);if(a.kind===`ready`){let e=M(t,a.recipe);return e?{kind:`terminal`,outcome:O(`recipe-unavailable`,`decide`,`none`,e,!1)}:{kind:`ready`,value:a.recipe}}return{kind:`terminal`,outcome:O(`recipe-unavailable`,`decide`,`none`,a.reason,a.retryable,a.remediation)}}async function S(e,t,n,i,a){c(i,`verify`,`none`);let l;try{l=await a.observe(e,i)}catch(e){if(i.signal.aborted)throw s(i.signal,`verify`,`none`);return O(`verification-failed`,`verify`,`none`,q(e),!1,void 0,e)}if(V(i,`verify`,`none`),!l)return O(`verification-failed`,`verify`,`none`,`The agent disappeared.`,!0);let u=r(l);if(u.kind!==`ready`||!(`changed`in u)||u.decision!==n.decision||!L(u.binding,n.binding,t.agent.binaryName)||!R(t,l)){if(u.kind===`interrupted`)throw o(u.outcome,`verify`,`none`);return O(`verification-failed`,`verify`,`none`,`Fresh observation changed the no-op decision.`,!0)}return{kind:`success`,value:{after:l,before:t,...n.binding?{binding:n.binding}:{},changed:!1,decision:n.decision,kind:`apply`}}}async function C(e,t,n,r,i,a){let o=await e.recover();return e.close(),o.reason?O(`compensation-failed`,`compensate`,o.sideEffect,`${r} ${o.reason}`,!1,o.remediation??K(),a,t===`compensation-failed`?void 0:t):O(t,n,o.sideEffect,r,i,o.sideEffect===`may-remain`?K():void 0,a)}async function w(e,t,n){let r=await n.recover();throw n.close(),s(e,t,r.sideEffect)}async function T(e,t,n){let r=await n.recover();throw n.close(),o(e,t,r.sideEffect)}function E(e,t){return{kind:`success`,value:{before:e,...t.binding?{binding:t.binding}:{},decision:t.decision,kind:`preview`,wouldChange:!1}}}function D(e,t,n){return O(e,t,`may-remain`,U(n),W(n),G(n))}function O(e,t,n,r,i,a,o,s){return{error:{...o===void 0?{}:{cause:o},code:e,...s?{originCode:s}:{},phase:t,reason:r,...a?{remediation:a}:{},retryable:i,sideEffect:n},kind:`failed`}}function k(e,t){return e.observation.kind===`present`&&e.executable.present&&e.binding!==void 0&&N(e.binding,t.binding,e.agent.binaryName)}function A(e,t){return k(e,t)&&e.observation.drift.kind===`untracked`&&e.installedState===void 0&&e.persistedBinding===void 0&&e.receipt===void 0}function j(i,a){let o=r(i),s=i.installedState?e(i.agent,i.installedState):void 0,c=i.receipt?t(i.receipt):void 0;return o.kind===`ready`&&`changed`in o&&o.decision===`already-satisfied`&&s!==void 0&&c!==void 0&&N(s,a.binding,i.agent.binaryName)&&n(c,a.binding,i.agent.binaryName)}function M(t,n){if(n.ownership!==`created-on-success`)return`Resolved installation recipes must prove created-on-success ownership.`;if(n.installedState.agentName!==t.agent.name)return`Resolved recipe state does not target the observed agent.`;let r=e(t.agent,n.installedState);if(!r||!N(r,n.binding,t.agent.binaryName))return`Resolved recipe does not preserve the schema-v2 provider source identity.`}function N(e,t,r){return n(e,t,r)&&P(e.target.arguments,t.target.arguments)}function P(e,t){return!e||!t?e===t:e.length===t.length&&e.every((e,n)=>e===t[n])}function F(e){let t=e?.providerOutcome;return t&&B(t)?t:void 0}function I(e){return e?e.kind===`failed`?e.error.sideEffect:e.kind===`success`&&e.value.kind===`apply`&&e.value.changed?`may-remain`:`none`:`none`}function L(e,t,n){return!e||!t?e===t:N(e,t,n)}function R(n,r){return L(n.installedState?e(n.agent,n.installedState):void 0,r.installedState?e(r.agent,r.installedState):void 0,n.agent.binaryName)?L(n.receipt?t(n.receipt):void 0,r.receipt?t(r.receipt):void 0,n.agent.binaryName):!1}function z(e){return`wouldChange`in e}function B(e){return e.kind===`cancelled`||e.kind===`timed-out`}function V(e,t,n){if(e.signal.aborted)throw s(e.signal,t,n)}function H(e){return{registerCleanup:e.registerCleanup,signal:e.signal,timeoutMs:e.timeoutMs}}function U(e){return`reason`in e&&e.reason?e.reason:e.kind===`unsupported`?`Provider does not support ${e.operation}.`:`Provider ${e.kind} during the lifecycle mutation.`}function W(e){return e.kind===`failed`?e.retryable:e.kind===`unavailable`?e.retryable??!0:!1}function G(e){return e.kind===`failed`?e.remediation:void 0}function K(){return`Inspect the selected provider target and remove any partial installation manually before retrying.`}function q(e){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:`Core lifecycle operation failed.`}export{a as CoreMutationInterruption,m as executeCoreInstallation};
@@ -1 +1 @@
1
- import{t as e}from"./detect-BdnZzKbm.mjs";import{i as t}from"./schema-hCKyxJjR.mjs";import{i as n,t as r}from"./file-store-Caz7fnAB.mjs";import{a as i,i as a,r as o}from"./provider-binding-DMLQQGPh.mjs";import{t as s}from"./production-observation-CU1HQ10p.mjs";import{isDeepStrictEqual as c}from"node:util";async function l(){let{coreMutationRecipeCatalog:e}=await import(`./mutation-recipe-catalog-Cr-4qobK.mjs`);return e}async function u(e){if(e.context.signal.aborted)return D(e.context.signal);let t=e.catalog.filter(t=>t.name===e.observed.agent.name);if(t.length!==1)return O(t.length===0?`No mutation recipes are registered for ${e.observed.agent.name}.`:`Multiple mutation recipe entries are registered for ${e.observed.agent.name}.`,!1);let n=t[0].platforms[e.platform]??[];if(n.length===0)return O(`${e.observed.agent.displayName} has no ${e.operation} recipe for ${e.platform}.`,!1);let r;try{r=n.map(t=>g(e.observed,t))}catch(e){return O(j(e,`Mutation recipe projection failed.`),!1)}if(e.directive.decision===`reinstall`)return d(e,r);let i=f(e.observed,r);return i.kind===`blocked`?i:p(e,i.candidates)}async function d(e,t){let n=e.observed.installedState;if(!n)return O(`Stale installation evidence has no schema-v2 installed-agent source.`,!1);let r=i(e.observed.agent,n);if(!r)return O(`The recorded installed-agent source cannot be resolved.`,!1);let o=e.directive.decision===`reinstall`?e.directive.requiredBinding:void 0;if(!o)return O(`The stale decision has no exact required provider source.`,!1);if(!x(r,o,e.observed.agent.binaryName,w(o)))return O(`The stale decision no longer matches the installed-agent source.`,!1);if(e.observed.persistedBinding&&!x(r,e.observed.persistedBinding,e.observed.agent.binaryName,w(e.observed.persistedBinding)))return O(`Persisted provider evidence conflicts with the installed-agent source.`,!1);if(e.observed.receipt){let t=a(e.observed.receipt);if(!t||!x(r,t,e.observed.agent.binaryName,!1))return O(`The lifecycle receipt conflicts with the installed-agent source.`,!1)}let s=t.filter(t=>x(t.recipe.binding,r,e.observed.agent.binaryName,!0));return s.length===1?m(e,s[0],!1):O(s.length===0?`The exact recorded source is no longer present in the mutation catalog.`:`The mutation catalog contains multiple recipes for the exact recorded source.`,!1)}function f(e,t){let n=new Set(t.map((e,t)=>t)),r=[];for(let i of e.methods){let a=o(e.agent,i);if(!a)return O(`An ordered install method cannot be resolved to a provider recipe.`,!1);let s=[...n].find(n=>x(t[n].recipe.binding,a,e.agent.binaryName,!0));if(s===void 0)return O(`The ordered install methods and generated mutation recipes do not match.`,!1);r.push(t[s]),n.delete(s)}return n.size>0?O(`The generated mutation recipes contain candidates absent from the ordered install methods.`,!1):{candidates:r,kind:`ready`}}async function p(e,t){let n=[],r=!1;for(let i of t){let t=await m(e,i,!0);if(t.kind===`ready`||t.kind===`interrupted`||!t.reason.startsWith(`provider-unavailable:`))return t;n.push(t.reason.slice(21)),r||=t.retryable}return O(n.length>0?`No installation provider is currently available: ${n.join(`; `)}`:`No usable ${e.operation} recipe is available.`,r)}async function m(e,t,n){let r=e.providerRegistry.get(t.recipe.binding.providerId);if(!r)return O(`Provider ${t.recipe.binding.providerId} is not registered.`,!1);if(!r.install||!r.verify)return O(`Provider ${r.id} does not implement both install and verify.`,!1);let i=await h(()=>r.availability(e.context),r,`availability`,e.context);if(i.kind===`interrupted`)return E(i.outcome);if(i.kind===`threw`)return O(i.reason,!1);if(i.outcome.kind===`cancelled`||i.outcome.kind===`timed-out`)return E(i.outcome);if(i.outcome.kind===`unavailable`){let e=`${r.id}: ${i.outcome.reason}`;return O(n?`provider-unavailable:${e}`:`The exact recorded provider is unavailable: ${e}`,i.outcome.retryable??!0)}if(i.outcome.kind!==`success`)return O(k(r,`availability`,i.outcome),A(i.outcome));if(e.context.signal.aborted)return D(e.context.signal);let a=await h(()=>r.observe({context:e.context,target:t.recipe.binding.target}),r,`observation`,e.context);return a.kind===`interrupted`?E(a.outcome):a.kind===`threw`?O(a.reason,!1):a.outcome.kind===`cancelled`||a.outcome.kind===`timed-out`?E(a.outcome):a.outcome.kind===`success`?!S(a.outcome.value.target,t.recipe.binding.target)||!C(a.outcome.value.target.arguments,t.recipe.binding.target.arguments)?O(`Provider ${r.id} returned evidence for a different target.`,!1):a.outcome.value.kind===`present`?O(`Provider ${r.id} reports the selected target became present before mutation.`,!0):{kind:`ready`,recipe:t.recipe}:O(k(r,`observation`,a.outcome),A(a.outcome))}async function h(e,t,n,r){try{return{kind:`outcome`,outcome:await e()}}catch(e){let i=T(e,r);return i?{kind:`interrupted`,outcome:i}:{kind:`threw`,reason:`Provider ${t.id} ${n} rejected: ${j(e,`unexpected provider rejection`)}`}}}function g(e,t){let n=_(e,t);return{recipe:{binding:{providerId:t.provider,target:n},compensation:t.provider===`script`||t.provider===`binary`?`manual`:`provider-uninstall`,installedState:v(e,t,n),ownership:`created-on-success`}}}function _(e,t){let n=t.provider===`script`||t.provider===`binary`,r=t.target.effect;if(n&&!r)throw Error(`${t.provider} recipe is missing its execution effect.`);if(!n&&r)throw Error(`${t.provider} recipe unexpectedly contains an execution effect.`);let i=n?y(r):t.target.id,a=t.provider===`deno`||n;return{...t.target.arguments?.length?{arguments:[...t.target.arguments]}:{},...t.target.binaryName||a?{binaryName:t.target.binaryName??e.agent.binaryName}:{},...r?{effect:r.kind===`executable`?{command:[...r.command],kind:r.kind}:{command:r.command,kind:r.kind}}:{},id:i,kind:t.target.kind}}function v(e,t,n){return t.provider===`script`||t.provider===`binary`?{agentName:e.agent.name,...t.target.binaryName?{binaryName:t.target.binaryName}:{},command:n.id,installType:t.provider}:{agentName:e.agent.name,...t.target.binaryName||t.provider===`deno`?{binaryName:t.target.binaryName??e.agent.binaryName}:{},installType:t.provider,...t.target.arguments?.length?{packageInstallArgs:[...t.target.arguments]}:{},packageName:t.target.id,...t.target.kind===`cask`||t.target.kind===`id`?{packageTargetKind:t.target.kind}:{}}}function y(e){return e.kind===`shell-script`?e.command:e.command.map(b).join(` `)}function b(e){return e.includes(` `)?JSON.stringify(e):e}function x(e,t,n,r){return e.providerId===t.providerId&&S(e.target,t.target,n)&&(!r||C(e.target.arguments,t.target.arguments))}function S(e,t,n){return e.id===t.id&&e.kind===t.kind&&(e.binaryName??n)===(t.binaryName??n)}function C(e,t){let n=e??[],r=t??[];return n.length===r.length&&n.every((e,t)=>e===r[t])}function w(e){return(e.target.arguments?.length??0)>0}function T(e,t){if(e&&typeof e==`object`&&`kind`in e){if(e.kind===`timed-out`){let n=`timeoutMs`in e&&typeof e.timeoutMs==`number`?e.timeoutMs:t.timeoutMs;if(n!==void 0&&Number.isInteger(n)&&n>0)return{kind:`timed-out`,timeoutMs:n}}if(e.kind===`cancelled`){let t=`reason`in e?e.reason:void 0;return{kind:`cancelled`,...t===void 0?{}:{reason:String(t)}}}}if(t.signal.aborted){let e=t.signal.reason;return{kind:`cancelled`,...e===void 0?{}:{reason:j(e,`cancelled`)}}}}function E(e){return{kind:`interrupted`,outcome:e}}function D(e){let t=e.reason instanceof Error?e.reason.message:e.reason;return{kind:`interrupted`,outcome:{kind:`cancelled`,...t===void 0?{}:{reason:String(t)}}}}function O(e,t){return{kind:`blocked`,reason:e,retryable:t}}function k(e,t,n){return`reason`in n&&n.reason?`Provider ${e.id} ${t} failed: ${n.reason}`:n.kind===`unsupported`?`Provider ${e.id} does not support ${n.operation}.`:`Provider ${e.id} ${t} returned ${n.kind}.`}function A(e){return e.kind===`failed`?e.retryable:e.kind===`unavailable`?e.retryable??!0:!1}function j(e,t){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:t}async function M(e,t,n,r){if(t.agentName!==n.targetId)throw Error(`Installed agent state and lifecycle receipt must target the same agent.`);let i=await r();try{let r=P(await e.loadDocument());return new N(e,r,P({...r,installedAgents:{...r.installedAgents,[t.agentName]:t},lifecycleReceipts:{...r.lifecycleReceipts,[n.targetId]:n}}),i)}catch(e){return await F(i,e,`Failed to release the state lock after record preparation.`)}}var N=class{applyPromise;commitPromise;rawApplyPromise;releasePromise;rollbackPromise;terminal;constructor(e,t,n,r){this.store=e,this.original=t,this.next=n,this.releaseStateLock=r}apply(){if(this.terminal===`rollback`)throw Error(`Cannot apply an installation record after rollback started.`);return this.applyPromise?this.applyPromise:(this.rawApplyPromise=Promise.resolve().then(()=>this.store.saveDocument(this.next)),this.applyPromise=this.rawApplyPromise.catch(async e=>{this.terminal=`rollback`;try{await this.startRollback()}catch(t){throw I(e,t,`State recording failed and the original document could not be restored cleanly.`)}throw e}),this.applyPromise)}commit(){return this.terminal===`rollback`?this.startRollback().then(()=>{throw Error(`Cannot commit an installation record after rollback started.`)}):this.applyPromise?this.commitPromise?this.commitPromise:(this.terminal=`commit`,this.commitPromise=this.applyPromise.then(()=>this.releaseOnce()),this.commitPromise):(this.terminal=`rollback`,this.startRollback().then(()=>{throw Error(`Cannot commit an installation record before apply completes.`)}))}rollback(){return this.terminal===`commit`?this.commitPromise??Promise.resolve():(this.terminal=`rollback`,this.startRollback())}startRollback(){return this.rollbackPromise??=this.runRollback(),this.rollbackPromise}async runRollback(){if(!this.rawApplyPromise){await this.releaseOnce();return}await this.rawApplyPromise.catch(()=>void 0);let e;try{await this.store.saveDocument(this.original)}catch(t){e=t}try{await this.releaseOnce()}catch(t){throw e===void 0?t:I(e,t,`Failed to restore the original state and release its lock.`)}if(e!==void 0)throw e}releaseOnce(){return this.releasePromise??=Promise.resolve().then(()=>this.releaseStateLock()),this.releasePromise}};function P(e){let n=t(e);if(n.source!==`current`)throw Error(`Core mutations require the current state schema.`);return n.document}async function F(e,t,n){try{await e()}catch(e){throw I(t,e,n)}throw t}function I(e,t,n){return AggregateError([e,t],n,{cause:e})}async function L(e){let[t,n]=await Promise.all([l(),import(`./installation-provider-registry-Cs3gM0wK.mjs`)]);return R({configDir:e,providerRegistry:n.createCoreInstallationProviderRegistry(),recipeCatalog:t})}function R(t){let i=t.acquireResourceLock??n,a=t.clock??(()=>new Date().toISOString()),o=t.platform??e(),c=t.providerRegistry,l=t.readPorts??s({providerRegistry:c}),d=t.stateStore??r(t.configDir);return{compensate:(e,t)=>V(c,e,t),install:(e,t)=>z(c,e,`install`,t),observe:(e,n,r)=>l.inspectAgent(e,{...n,configDir:t.configDir},r),prepareRecord:({before:e,context:n,recipe:r,verified:o})=>H({acquireLock:i,before:e,clock:a,configDir:t.configDir,context:n,recipe:r,stateStore:d,verified:o}),resolveRecipe:e=>u({...e,catalog:t.recipeCatalog,platform:o,providerRegistry:c}),verify:(e,t)=>B(c,e,t),withMutationLock:(e,n,r)=>K(i,t.configDir,{resource:`agent lifecycle`,scope:[`agent-lifecycle`]},n,r)}}async function z(e,t,n,r){let i=e.get(t.binding.providerId),a=i?.[n];return!i||!a?J(n,t):await q(()=>a({context:r,target:t.binding.target}),r,n)}async function B(e,t,n){let r=e.get(t.binding.providerId);return r?.verify?await q(()=>r.verify({context:n,target:t.binding.target}),n,`verify`):J(`verify`,t)}async function V(e,t,n){if(t.compensation===`manual`)return J(`uninstall`,t);let r=e.get(t.binding.providerId);if(!r?.uninstall)return J(`uninstall`,t);let i=await q(()=>r.uninstall({context:n,target:t.binding.target}),n,`uninstall`);if(i.kind!==`success`)return i;let a=await q(()=>r.observe({context:n,target:t.binding.target}),n,`observe`);return a.kind===`success`&&a.value.kind===`absent`&&X(a.value.target,t.binding.target)?i:{kind:`failed`,reason:Q(a,`Compensation did not verify the selected target as absent.`),remediation:`Inspect and remove the selected provider target manually before retrying.`,retryable:!1}}async function H(e){let t=U(e.recipe,e.verified,e.clock),n,r;return r=await M(e.stateStore,e.recipe.installedState,t,async()=>{n=await G(e.acquireLock,e.configDir,{resource:`state`,scope:[`state`]},e.context);try{return W(await e.stateStore.loadDocument(),e.before),n.release}catch(e){throw await n.release(),e}}),n?.transferCleanup(()=>r.rollback()),r}function U(e,t,n){let r=t.observation,i=t.resolvedBinaryPath??(r.kind===`present`?r.executablePath:t.executable.path),a=r.kind===`present`?r.version:t.executable.version;return{...e.binding.target.binaryName?{executableName:e.binding.target.binaryName}:{},...i?{executablePath:i}:{},kind:`lifecycle-receipt`,providerId:e.binding.providerId,providerTargetId:e.binding.target.id,providerTargetKind:e.binding.target.kind,schemaVersion:1,targetId:e.installedState.agentName,verifiedAt:r.observedAt??n(),...a?{version:a}:{}}}function W(e,t){let n=t.agent.name;if(!c(e.installedAgents[n],t.installedState)||!c(e.lifecycleReceipts[n],t.receipt))throw Error(`Recorded agent evidence changed while the lifecycle mutation was in progress.`)}async function G(e,t,n,r){let i=await e(t,n),a,o=()=>s(),s=()=>(a??=Promise.resolve().then(()=>i()),a),c=r.registerCleanup({cleanup:()=>o(),force:()=>o()});return{release:async()=>{c(),await s()},transferCleanup(e){o=e}}}async function K(e,t,n,r,i){let a=await G(e,t,n,r),o,s=new Promise(e=>{o=e});a.transferCleanup(async()=>{await s,await a.release()});try{return await i()}finally{o(),await a.release()}}async function q(e,t,n){try{return await e()}catch(e){return t.signal.aborted?{kind:`cancelled`,...t.signal.reason===void 0?{}:{reason:$(t.signal.reason)}}:Y(e)||{kind:`failed`,reason:`${n} provider rejected: ${$(e)}`,retryable:!1}}}function J(e,t){return{kind:`unsupported`,operation:e,reason:`Provider ${t.binding.providerId} does not support ${e}.`}}function Y(e){if(!(!e||typeof e!=`object`||!(`kind`in e))){if(e.kind===`cancelled`)return{kind:`cancelled`,...`reason`in e&&e.reason!==void 0?{reason:$(e.reason)}:{}};if(e.kind===`timed-out`&&`timeoutMs`in e&&typeof e.timeoutMs==`number`)return{kind:`timed-out`,timeoutMs:e.timeoutMs}}}function X(e,t){return e.id===t.id&&e.kind===t.kind&&e.binaryName===t.binaryName&&Z(e.arguments,t.arguments)}function Z(e,t){return!e||!t?e===t:e.length===t.length&&e.every((e,n)=>e===t[n])}function Q(e,t){return e.kind!==`success`&&`reason`in e&&e.reason?e.reason:t}function $(e){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:`Core provider operation failed.`}export{L as loadProductionCoreInstallationPorts};
1
+ import{t as e}from"./detect-BdnZzKbm.mjs";import{i as t}from"./schema-hCKyxJjR.mjs";import{i as n,t as r}from"./file-store-Caz7fnAB.mjs";import{a as i,i as a,r as o}from"./provider-binding-D1muQsgD.mjs";import{t as s}from"./production-observation-uZ_BKubA.mjs";import{isDeepStrictEqual as c}from"node:util";async function l(){let{coreMutationRecipeCatalog:e}=await import(`./mutation-recipe-catalog-MVUziTOe.mjs`);return e}async function u(e){if(e.context.signal.aborted)return D(e.context.signal);let t=e.catalog.filter(t=>t.name===e.observed.agent.name);if(t.length!==1)return O(t.length===0?`No mutation recipes are registered for ${e.observed.agent.name}.`:`Multiple mutation recipe entries are registered for ${e.observed.agent.name}.`,!1);let n=t[0].platforms[e.platform]??[];if(n.length===0)return O(`${e.observed.agent.displayName} has no ${e.operation} recipe for ${e.platform}.`,!1);let r;try{r=n.map(t=>g(e.observed,t))}catch(e){return O(j(e,`Mutation recipe projection failed.`),!1)}if(e.directive.decision===`reinstall`)return d(e,r);let i=f(e.observed,r);return i.kind===`blocked`?i:p(e,i.candidates)}async function d(e,t){let n=e.observed.installedState;if(!n)return O(`Stale installation evidence has no schema-v2 installed-agent source.`,!1);let r=i(e.observed.agent,n);if(!r)return O(`The recorded installed-agent source cannot be resolved.`,!1);let o=e.directive.decision===`reinstall`?e.directive.requiredBinding:void 0;if(!o)return O(`The stale decision has no exact required provider source.`,!1);if(!x(r,o,e.observed.agent.binaryName,w(o)))return O(`The stale decision no longer matches the installed-agent source.`,!1);if(e.observed.persistedBinding&&!x(r,e.observed.persistedBinding,e.observed.agent.binaryName,w(e.observed.persistedBinding)))return O(`Persisted provider evidence conflicts with the installed-agent source.`,!1);if(e.observed.receipt){let t=a(e.observed.receipt);if(!t||!x(r,t,e.observed.agent.binaryName,!1))return O(`The lifecycle receipt conflicts with the installed-agent source.`,!1)}let s=t.filter(t=>x(t.recipe.binding,r,e.observed.agent.binaryName,!0));return s.length===1?m(e,s[0],!1):O(s.length===0?`The exact recorded source is no longer present in the mutation catalog.`:`The mutation catalog contains multiple recipes for the exact recorded source.`,!1)}function f(e,t){let n=new Set(t.map((e,t)=>t)),r=[];for(let i of e.methods){let a=o(e.agent,i);if(!a)return O(`An ordered install method cannot be resolved to a provider recipe.`,!1);let s=[...n].find(n=>x(t[n].recipe.binding,a,e.agent.binaryName,!0));if(s===void 0)return O(`The ordered install methods and generated mutation recipes do not match.`,!1);r.push(t[s]),n.delete(s)}return n.size>0?O(`The generated mutation recipes contain candidates absent from the ordered install methods.`,!1):{candidates:r,kind:`ready`}}async function p(e,t){let n=[],r=!1;for(let i of t){let t=await m(e,i,!0);if(t.kind===`ready`||t.kind===`interrupted`||!t.reason.startsWith(`provider-unavailable:`))return t;n.push(t.reason.slice(21)),r||=t.retryable}return O(n.length>0?`No installation provider is currently available: ${n.join(`; `)}`:`No usable ${e.operation} recipe is available.`,r)}async function m(e,t,n){let r=e.providerRegistry.get(t.recipe.binding.providerId);if(!r)return O(`Provider ${t.recipe.binding.providerId} is not registered.`,!1);if(!r.install||!r.verify)return O(`Provider ${r.id} does not implement both install and verify.`,!1);let i=await h(()=>r.availability(e.context),r,`availability`,e.context);if(i.kind===`interrupted`)return E(i.outcome);if(i.kind===`threw`)return O(i.reason,!1);if(i.outcome.kind===`cancelled`||i.outcome.kind===`timed-out`)return E(i.outcome);if(i.outcome.kind===`unavailable`){let e=`${r.id}: ${i.outcome.reason}`;return O(n?`provider-unavailable:${e}`:`The exact recorded provider is unavailable: ${e}`,i.outcome.retryable??!0)}if(i.outcome.kind!==`success`)return O(k(r,`availability`,i.outcome),A(i.outcome));if(e.context.signal.aborted)return D(e.context.signal);let a=await h(()=>r.observe({context:e.context,target:t.recipe.binding.target}),r,`observation`,e.context);return a.kind===`interrupted`?E(a.outcome):a.kind===`threw`?O(a.reason,!1):a.outcome.kind===`cancelled`||a.outcome.kind===`timed-out`?E(a.outcome):a.outcome.kind===`success`?!S(a.outcome.value.target,t.recipe.binding.target)||!C(a.outcome.value.target.arguments,t.recipe.binding.target.arguments)?O(`Provider ${r.id} returned evidence for a different target.`,!1):a.outcome.value.kind===`present`?O(`Provider ${r.id} reports the selected target became present before mutation.`,!0):{kind:`ready`,recipe:t.recipe}:O(k(r,`observation`,a.outcome),A(a.outcome))}async function h(e,t,n,r){try{return{kind:`outcome`,outcome:await e()}}catch(e){let i=T(e,r);return i?{kind:`interrupted`,outcome:i}:{kind:`threw`,reason:`Provider ${t.id} ${n} rejected: ${j(e,`unexpected provider rejection`)}`}}}function g(e,t){let n=_(e,t);return{recipe:{binding:{providerId:t.provider,target:n},compensation:t.provider===`script`||t.provider===`binary`?`manual`:`provider-uninstall`,installedState:v(e,t,n),ownership:`created-on-success`}}}function _(e,t){let n=t.provider===`script`||t.provider===`binary`,r=t.target.effect;if(n&&!r)throw Error(`${t.provider} recipe is missing its execution effect.`);if(!n&&r)throw Error(`${t.provider} recipe unexpectedly contains an execution effect.`);let i=n?y(r):t.target.id,a=t.provider===`deno`||n;return{...t.target.arguments?.length?{arguments:[...t.target.arguments]}:{},...t.target.binaryName||a?{binaryName:t.target.binaryName??e.agent.binaryName}:{},...r?{effect:r.kind===`executable`?{command:[...r.command],kind:r.kind}:{command:r.command,kind:r.kind}}:{},id:i,kind:t.target.kind}}function v(e,t,n){return t.provider===`script`||t.provider===`binary`?{agentName:e.agent.name,...t.target.binaryName?{binaryName:t.target.binaryName}:{},command:n.id,installType:t.provider}:{agentName:e.agent.name,...t.target.binaryName||t.provider===`deno`?{binaryName:t.target.binaryName??e.agent.binaryName}:{},installType:t.provider,...t.target.arguments?.length?{packageInstallArgs:[...t.target.arguments]}:{},packageName:t.target.id,...t.target.kind===`cask`||t.target.kind===`id`?{packageTargetKind:t.target.kind}:{}}}function y(e){return e.kind===`shell-script`?e.command:e.command.map(b).join(` `)}function b(e){return e.includes(` `)?JSON.stringify(e):e}function x(e,t,n,r){return e.providerId===t.providerId&&S(e.target,t.target,n)&&(!r||C(e.target.arguments,t.target.arguments))}function S(e,t,n){return e.id===t.id&&e.kind===t.kind&&(e.binaryName??n)===(t.binaryName??n)}function C(e,t){let n=e??[],r=t??[];return n.length===r.length&&n.every((e,t)=>e===r[t])}function w(e){return(e.target.arguments?.length??0)>0}function T(e,t){if(e&&typeof e==`object`&&`kind`in e){if(e.kind===`timed-out`){let n=`timeoutMs`in e&&typeof e.timeoutMs==`number`?e.timeoutMs:t.timeoutMs;if(n!==void 0&&Number.isInteger(n)&&n>0)return{kind:`timed-out`,timeoutMs:n}}if(e.kind===`cancelled`){let t=`reason`in e?e.reason:void 0;return{kind:`cancelled`,...t===void 0?{}:{reason:String(t)}}}}if(t.signal.aborted){let e=t.signal.reason;return{kind:`cancelled`,...e===void 0?{}:{reason:j(e,`cancelled`)}}}}function E(e){return{kind:`interrupted`,outcome:e}}function D(e){let t=e.reason instanceof Error?e.reason.message:e.reason;return{kind:`interrupted`,outcome:{kind:`cancelled`,...t===void 0?{}:{reason:String(t)}}}}function O(e,t){return{kind:`blocked`,reason:e,retryable:t}}function k(e,t,n){return`reason`in n&&n.reason?`Provider ${e.id} ${t} failed: ${n.reason}`:n.kind===`unsupported`?`Provider ${e.id} does not support ${n.operation}.`:`Provider ${e.id} ${t} returned ${n.kind}.`}function A(e){return e.kind===`failed`?e.retryable:e.kind===`unavailable`?e.retryable??!0:!1}function j(e,t){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:t}async function M(e,t,n,r){if(t.agentName!==n.targetId)throw Error(`Installed agent state and lifecycle receipt must target the same agent.`);let i=await r();try{let r=P(await e.loadDocument());return new N(e,r,P({...r,installedAgents:{...r.installedAgents,[t.agentName]:t},lifecycleReceipts:{...r.lifecycleReceipts,[n.targetId]:n}}),i)}catch(e){return await F(i,e,`Failed to release the state lock after record preparation.`)}}var N=class{applyPromise;commitPromise;rawApplyPromise;releasePromise;rollbackPromise;terminal;constructor(e,t,n,r){this.store=e,this.original=t,this.next=n,this.releaseStateLock=r}apply(){if(this.terminal===`rollback`)throw Error(`Cannot apply an installation record after rollback started.`);return this.applyPromise?this.applyPromise:(this.rawApplyPromise=Promise.resolve().then(()=>this.store.saveDocument(this.next)),this.applyPromise=this.rawApplyPromise.catch(async e=>{this.terminal=`rollback`;try{await this.startRollback()}catch(t){throw I(e,t,`State recording failed and the original document could not be restored cleanly.`)}throw e}),this.applyPromise)}commit(){return this.terminal===`rollback`?this.startRollback().then(()=>{throw Error(`Cannot commit an installation record after rollback started.`)}):this.applyPromise?this.commitPromise?this.commitPromise:(this.terminal=`commit`,this.commitPromise=this.applyPromise.then(()=>this.releaseOnce()),this.commitPromise):(this.terminal=`rollback`,this.startRollback().then(()=>{throw Error(`Cannot commit an installation record before apply completes.`)}))}rollback(){return this.terminal===`commit`?this.commitPromise??Promise.resolve():(this.terminal=`rollback`,this.startRollback())}startRollback(){return this.rollbackPromise??=this.runRollback(),this.rollbackPromise}async runRollback(){if(!this.rawApplyPromise){await this.releaseOnce();return}await this.rawApplyPromise.catch(()=>void 0);let e;try{await this.store.saveDocument(this.original)}catch(t){e=t}try{await this.releaseOnce()}catch(t){throw e===void 0?t:I(e,t,`Failed to restore the original state and release its lock.`)}if(e!==void 0)throw e}releaseOnce(){return this.releasePromise??=Promise.resolve().then(()=>this.releaseStateLock()),this.releasePromise}};function P(e){let n=t(e);if(n.source!==`current`)throw Error(`Core mutations require the current state schema.`);return n.document}async function F(e,t,n){try{await e()}catch(e){throw I(t,e,n)}throw t}function I(e,t,n){return AggregateError([e,t],n,{cause:e})}async function L(e){let[t,n]=await Promise.all([l(),import(`./installation-provider-registry-CDpBEMLi.mjs`)]);return R({configDir:e,providerRegistry:n.createCoreInstallationProviderRegistry(),recipeCatalog:t})}function R(t){let i=t.acquireResourceLock??n,a=t.clock??(()=>new Date().toISOString()),o=t.platform??e(),c=t.providerRegistry,l=t.readPorts??s({providerRegistry:c}),d=t.stateStore??r(t.configDir);return{compensate:(e,t)=>V(c,e,t),install:(e,t)=>z(c,e,`install`,t),observe:(e,n,r)=>l.inspectAgent(e,{...n,configDir:t.configDir},r),prepareRecord:({before:e,context:n,recipe:r,verified:o})=>H({acquireLock:i,before:e,clock:a,configDir:t.configDir,context:n,recipe:r,stateStore:d,verified:o}),resolveRecipe:e=>u({...e,catalog:t.recipeCatalog,platform:o,providerRegistry:c}),verify:(e,t)=>B(c,e,t),withMutationLock:(e,n,r)=>K(i,t.configDir,{resource:`agent lifecycle`,scope:[`agent-lifecycle`]},n,r)}}async function z(e,t,n,r){let i=e.get(t.binding.providerId),a=i?.[n];return!i||!a?J(n,t):await q(()=>a({context:r,target:t.binding.target}),r,n)}async function B(e,t,n){let r=e.get(t.binding.providerId);return r?.verify?await q(()=>r.verify({context:n,target:t.binding.target}),n,`verify`):J(`verify`,t)}async function V(e,t,n){if(t.compensation===`manual`)return J(`uninstall`,t);let r=e.get(t.binding.providerId);if(!r?.uninstall)return J(`uninstall`,t);let i=await q(()=>r.uninstall({context:n,target:t.binding.target}),n,`uninstall`);if(i.kind!==`success`)return i;let a=await q(()=>r.observe({context:n,target:t.binding.target}),n,`observe`);return a.kind===`success`&&a.value.kind===`absent`&&X(a.value.target,t.binding.target)?i:{kind:`failed`,reason:Q(a,`Compensation did not verify the selected target as absent.`),remediation:`Inspect and remove the selected provider target manually before retrying.`,retryable:!1}}async function H(e){let t=U(e.recipe,e.verified,e.clock),n,r;return r=await M(e.stateStore,e.recipe.installedState,t,async()=>{n=await G(e.acquireLock,e.configDir,{resource:`state`,scope:[`state`]},e.context);try{return W(await e.stateStore.loadDocument(),e.before),n.release}catch(e){throw await n.release(),e}}),n?.transferCleanup(()=>r.rollback()),r}function U(e,t,n){let r=t.observation,i=t.resolvedBinaryPath??(r.kind===`present`?r.executablePath:t.executable.path),a=r.kind===`present`?r.version:t.executable.version;return{...e.binding.target.binaryName?{executableName:e.binding.target.binaryName}:{},...i?{executablePath:i}:{},kind:`lifecycle-receipt`,providerId:e.binding.providerId,providerTargetId:e.binding.target.id,providerTargetKind:e.binding.target.kind,schemaVersion:1,targetId:e.installedState.agentName,verifiedAt:r.observedAt??n(),...a?{version:a}:{}}}function W(e,t){let n=t.agent.name;if(!c(e.installedAgents[n],t.installedState)||!c(e.lifecycleReceipts[n],t.receipt))throw Error(`Recorded agent evidence changed while the lifecycle mutation was in progress.`)}async function G(e,t,n,r){let i=await e(t,n),a,o=()=>s(),s=()=>(a??=Promise.resolve().then(()=>i()),a),c=r.registerCleanup({cleanup:()=>o(),force:()=>o()});return{release:async()=>{c(),await s()},transferCleanup(e){o=e}}}async function K(e,t,n,r,i){let a=await G(e,t,n,r),o,s=new Promise(e=>{o=e});a.transferCleanup(async()=>{await s,await a.release()});try{return await i()}finally{o(),await a.release()}}async function q(e,t,n){try{return await e()}catch(e){return t.signal.aborted?{kind:`cancelled`,...t.signal.reason===void 0?{}:{reason:$(t.signal.reason)}}:Y(e)||{kind:`failed`,reason:`${n} provider rejected: ${$(e)}`,retryable:!1}}}function J(e,t){return{kind:`unsupported`,operation:e,reason:`Provider ${t.binding.providerId} does not support ${e}.`}}function Y(e){if(!(!e||typeof e!=`object`||!(`kind`in e))){if(e.kind===`cancelled`)return{kind:`cancelled`,...`reason`in e&&e.reason!==void 0?{reason:$(e.reason)}:{}};if(e.kind===`timed-out`&&`timeoutMs`in e&&typeof e.timeoutMs==`number`)return{kind:`timed-out`,timeoutMs:e.timeoutMs}}}function X(e,t){return e.id===t.id&&e.kind===t.kind&&e.binaryName===t.binaryName&&Z(e.arguments,t.arguments)}function Z(e,t){return!e||!t?e===t:e.length===t.length&&e.every((e,n)=>e===t[n])}function Q(e,t){return e.kind!==`success`&&`reason`in e&&e.reason?e.reason:t}function $(e){return e instanceof Error&&e.message.trim()?e.message:typeof e==`string`&&e.trim()?e:`Core provider operation failed.`}export{L as loadProductionCoreInstallationPorts};
@@ -1 +1 @@
1
- import{a as e,g as t,p as n,r,u as i}from"./npm-BMnWqkaW.mjs";import{D as a,E as o,F as s,N as c,S as l,V as u,b as d,c as f,g as p,i as m,k as h,m as g,n as _,u as v,z as y}from"./winget-C-UHM_On.mjs";import{r as b}from"./registry-N9jeGQcX.mjs";import{t as x}from"./types-D3y_n7iy.mjs";import{t as S}from"./provider-observation-registry-l4duFenx.mjs";const C=Object.freeze([`availability`,`observe`,`install`,`uninstall`,`verify`]),w=Object.freeze([`availability`,`observe`,`install`,`verify`]),T=Object.freeze([]),E={bun:{install:e=>i(e.target.id,e.options?.distTag,e.options?.registry,e.context),installCommand:e=>{let t=b(e.options?.registry),n=e.options?.distTag?`${e.target.id}@${e.options.distTag}`:e.target.id;return[`bun`,`add`,`-g`,...t?[`--registry`,t]:[],n]},uninstall:e=>n(e.target.id,e.context),uninstallCommand:e=>[`bun`,`remove`,`-g`,e.target.id]},brew:{install:e=>y(e.target.id,F(e.target),e.context),installCommand:e=>I(`install`,e.target),uninstall:e=>u(e.target.id,F(e.target),e.context),uninstallCommand:e=>I(`uninstall`,e.target)},cargo:{install:e=>c(e.target.id,P(e.target),e.context),installCommand:e=>[`cargo`,`install`,e.target.id,...e.target.arguments??[]],uninstall:e=>s(e.target.id,e.context),uninstallCommand:e=>[`cargo`,`uninstall`,e.target.id]},deno:{install:e=>a(e.target.id,P(e.target),e.context),installCommand:e=>[`deno`,`install`,`--global`,...e.target.arguments??[],e.target.id],uninstall:e=>h(o(e.target.id,e.target.binaryName),e.context),uninstallCommand:e=>[`deno`,`uninstall`,`--global`,o(e.target.id,e.target.binaryName)]},mise:{install:e=>d(e.target.id,e.context),installCommand:e=>[`mise`,`use`,`--global`,e.target.id],uninstall:e=>l(e.target.id,e.context),uninstallCommand:e=>[`mise`,`unuse`,`--global`,e.target.id]},npm:{install:e=>r(e.target.id,e.options?.distTag,e.options?.registry,e.context),installCommand:e=>{let t=b(e.options?.registry);return[`npm`,`install`,`-g`,e.options?.distTag?`${e.target.id}@${e.options.distTag}`:e.target.id,...t?[`--registry`,t]:[]]},uninstall:t=>e(t.target.id,t.context),uninstallCommand:e=>[`npm`,`uninstall`,`-g`,e.target.id]},pip:{install:e=>g(e.target.id,e.context),installCommand:e=>[`pip`,`install`,e.target.id],uninstall:e=>p(e.target.id,e.context),uninstallCommand:e=>[`pip`,`uninstall`,`-y`,e.target.id]},uv:{install:e=>f(e.target.id,P(e.target),e.context),installCommand:e=>[`uv`,`tool`,`install`,e.target.id,...e.target.arguments??[]],uninstall:e=>v(e.target.id,e.context),uninstallCommand:e=>[`uv`,`tool`,`uninstall`,e.target.id]},winget:{install:e=>_(e.target.id,e.context),installCommand:e=>L(`install`,e.target),uninstall:e=>m(e.target.id,e.context),uninstallCommand:e=>L(`uninstall`,e.target)}};function D(e={}){let n=e.observationRegistry??S(),r=e.platform??z(),i=e.executeEffect??((e,n)=>t(e,n,`install effect failed`)),a=x.map(e=>{let t=n.get(e);if(!t)throw Error(`Core observation registry is missing first-party provider ${e}.`);return e===`binary`||e===`script`?k(e,t,r,i):O(e,t,E[e])}),o=Object.freeze([...a]),s=new Map(o.map(e=>[e.id,e]));return Object.freeze({get:e=>s.get(e),getCapabilities:e=>s.has(e)?e===`binary`||e===`script`?w:C:T,list:()=>o})}function O(e,t,n){let r={availability:t.availability,id:e,install:t=>A(e,t.target,n.installCommand(t),()=>n.install(t)),observe:t.observe,uninstall:t=>A(e,t.target,n.uninstallCommand(t),()=>n.uninstall(t)),verify:e=>j(t,e)};return Object.freeze(r)}function k(e,t,n,r){let i={availability:t.availability,id:e,async install(t){let i=t.target.effect;if(!i)return{evidence:[{kind:`provider`,value:e}],kind:`failed`,reason:`${e} install target ${t.target.id} has no execution effect`,remediation:`Select a candidate with an explicit shell-script or executable effect.`,retryable:!1};let a=R(i,n);return A(e,t.target,a,()=>r(a,t.context))},observe:t.observe,verify:e=>j(t,e)};return Object.freeze(i)}async function A(e,t,n,r){let i=await r();if(i.kind===`success`)return{kind:`success`,value:{evidence:M(e,n),target:t}};if(i.kind!==`failed`)return i;let a=i.command??n;return{...i,command:a,evidence:N(e,a,i.evidence)}}async function j(e,t){let n=await e.observe(t);if(n.kind!==`success`)return n;let r=n.value.evidence??[];return{kind:`success`,value:n.value.kind===`absent`?{evidence:r,kind:`unsatisfied`,reason:`${t.target.id} is not installed through ${e.id}`}:{evidence:r,kind:`satisfied`}}}function M(e,t){return[{kind:`provider`,value:e},{kind:`command`,value:t.join(` `)}]}function N(e,t,n){let r=M(e,t);return n?.length?[...r,...n.filter(e=>!r.some(t=>t.kind===e.kind&&t.value===e.value))]:r}function P(e){return e.arguments?[...e.arguments]:void 0}function F(e){return e.kind===`cask`?`cask`:`package`}function I(e,t){return[`brew`,e,...t.kind===`cask`?[`--cask`]:[],t.id]}function L(e,t){return[`winget`,e,`--id`,t.id,`-e`]}function R(e,t){return e.kind===`executable`?e.command:t===`windows`?[`powershell.exe`,`-Command`,e.command]:[`sh`,`-c`,e.command]}function z(){switch(process.platform){case`win32`:return`windows`;case`darwin`:return`macos`;default:return`linux`}}export{D as createCoreInstallationProviderRegistry};
1
+ import{a as e,g as t,p as n,r,u as i}from"./npm-fDgYmVes.mjs";import{D as a,E as o,F as s,N as c,S as l,V as u,b as d,c as f,g as p,i as m,k as h,m as g,n as _,u as v,z as y}from"./winget-BVbhk2rg.mjs";import{r as b}from"./registry-N9jeGQcX.mjs";import{t as x}from"./types-D3y_n7iy.mjs";import{t as S}from"./provider-observation-registry-SxHLNuhc.mjs";const C=Object.freeze([`availability`,`observe`,`install`,`uninstall`,`verify`]),w=Object.freeze([`availability`,`observe`,`install`,`verify`]),T=Object.freeze([]),E={bun:{install:e=>i(e.target.id,e.options?.distTag,e.options?.registry,e.context),installCommand:e=>{let t=b(e.options?.registry),n=e.options?.distTag?`${e.target.id}@${e.options.distTag}`:e.target.id;return[`bun`,`add`,`-g`,...t?[`--registry`,t]:[],n]},uninstall:e=>n(e.target.id,e.context),uninstallCommand:e=>[`bun`,`remove`,`-g`,e.target.id]},brew:{install:e=>y(e.target.id,F(e.target),e.context),installCommand:e=>I(`install`,e.target),uninstall:e=>u(e.target.id,F(e.target),e.context),uninstallCommand:e=>I(`uninstall`,e.target)},cargo:{install:e=>c(e.target.id,P(e.target),e.context),installCommand:e=>[`cargo`,`install`,e.target.id,...e.target.arguments??[]],uninstall:e=>s(e.target.id,e.context),uninstallCommand:e=>[`cargo`,`uninstall`,e.target.id]},deno:{install:e=>a(e.target.id,P(e.target),e.context),installCommand:e=>[`deno`,`install`,`--global`,...e.target.arguments??[],e.target.id],uninstall:e=>h(o(e.target.id,e.target.binaryName),e.context),uninstallCommand:e=>[`deno`,`uninstall`,`--global`,o(e.target.id,e.target.binaryName)]},mise:{install:e=>d(e.target.id,e.context),installCommand:e=>[`mise`,`use`,`--global`,e.target.id],uninstall:e=>l(e.target.id,e.context),uninstallCommand:e=>[`mise`,`unuse`,`--global`,e.target.id]},npm:{install:e=>r(e.target.id,e.options?.distTag,e.options?.registry,e.context),installCommand:e=>{let t=b(e.options?.registry);return[`npm`,`install`,`-g`,e.options?.distTag?`${e.target.id}@${e.options.distTag}`:e.target.id,...t?[`--registry`,t]:[]]},uninstall:t=>e(t.target.id,t.context),uninstallCommand:e=>[`npm`,`uninstall`,`-g`,e.target.id]},pip:{install:e=>g(e.target.id,e.context),installCommand:e=>[`pip`,`install`,e.target.id],uninstall:e=>p(e.target.id,e.context),uninstallCommand:e=>[`pip`,`uninstall`,`-y`,e.target.id]},uv:{install:e=>f(e.target.id,P(e.target),e.context),installCommand:e=>[`uv`,`tool`,`install`,e.target.id,...e.target.arguments??[]],uninstall:e=>v(e.target.id,e.context),uninstallCommand:e=>[`uv`,`tool`,`uninstall`,e.target.id]},winget:{install:e=>_(e.target.id,e.context),installCommand:e=>L(`install`,e.target),uninstall:e=>m(e.target.id,e.context),uninstallCommand:e=>L(`uninstall`,e.target)}};function D(e={}){let n=e.observationRegistry??S(),r=e.platform??z(),i=e.executeEffect??((e,n)=>t(e,n,`install effect failed`)),a=x.map(e=>{let t=n.get(e);if(!t)throw Error(`Core observation registry is missing first-party provider ${e}.`);return e===`binary`||e===`script`?k(e,t,r,i):O(e,t,E[e])}),o=Object.freeze([...a]),s=new Map(o.map(e=>[e.id,e]));return Object.freeze({get:e=>s.get(e),getCapabilities:e=>s.has(e)?e===`binary`||e===`script`?w:C:T,list:()=>o})}function O(e,t,n){let r={availability:t.availability,id:e,install:t=>A(e,t.target,n.installCommand(t),()=>n.install(t)),observe:t.observe,uninstall:t=>A(e,t.target,n.uninstallCommand(t),()=>n.uninstall(t)),verify:e=>j(t,e)};return Object.freeze(r)}function k(e,t,n,r){let i={availability:t.availability,id:e,async install(t){let i=t.target.effect;if(!i)return{evidence:[{kind:`provider`,value:e}],kind:`failed`,reason:`${e} install target ${t.target.id} has no execution effect`,remediation:`Select a candidate with an explicit shell-script or executable effect.`,retryable:!1};let a=R(i,n);return A(e,t.target,a,()=>r(a,t.context))},observe:t.observe,verify:e=>j(t,e)};return Object.freeze(i)}async function A(e,t,n,r){let i=await r();if(i.kind===`success`)return{kind:`success`,value:{evidence:M(e,n),target:t}};if(i.kind!==`failed`)return i;let a=i.command??n;return{...i,command:a,evidence:N(e,a,i.evidence)}}async function j(e,t){let n=await e.observe(t);if(n.kind!==`success`)return n;let r=n.value.evidence??[];return{kind:`success`,value:n.value.kind===`absent`?{evidence:r,kind:`unsatisfied`,reason:`${t.target.id} is not installed through ${e.id}`}:{evidence:r,kind:`satisfied`}}}function M(e,t){return[{kind:`provider`,value:e},{kind:`command`,value:t.join(` `)}]}function N(e,t,n){let r=M(e,t);return n?.length?[...r,...n.filter(e=>!r.some(t=>t.kind===e.kind&&t.value===e.value))]:r}function P(e){return e.arguments?[...e.arguments]:void 0}function F(e){return e.kind===`cask`?`cask`:`package`}function I(e,t){return[`brew`,e,...t.kind===`cask`?[`--cask`]:[],t.id]}function L(e,t){return[`winget`,e,`--id`,t.id,`-e`]}function R(e,t){return e.kind===`executable`?e.command:t===`windows`?[`powershell.exe`,`-Command`,e.command]:[`sh`,`-c`,e.command]}function z(){switch(process.platform){case`win32`:return`windows`;case`darwin`:return`macos`;default:return`linux`}}export{D as createCoreInstallationProviderRegistry};
@@ -0,0 +1 @@
1
+ import{n as e,r as t,t as n}from"./installation-routing-BEwlmhg8.mjs";export{n as createCoreInstallationTestRoute,e as reportInstallationEngineRoute,t as selectInstallationEngineRoute};
@@ -1 +1 @@
1
- import{n as e,t}from"./detect-BdnZzKbm.mjs";import{I as n,n as r,r as i}from"./agents-B7pltU6w.mjs";import{G as a,K as o,S as s,U as c,W as l,x as u}from"./output-DZkIsf0G.mjs";import{u as d}from"./providers-DKCPx1ao.mjs";import{t as f}from"./cli-operation-context-QEqKxWgM.mjs";import{s as p}from"./agents-CeaGD7Mf.mjs";import{r as m}from"./provider-binding-DMLQQGPh.mjs";import{t as h}from"./agent-observation-CRB402ql.mjs";function g(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]?m(n,a[0]):void 0,providerRegistry:e.providerRegistry,readInstalledState:i,readReceipt:e.readReceipt,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 _(e,t){return t?v(t).resolveAgentObservation(e):y(t=>t.resolveAgentObservation(e))}function v(e,a={}){return g({clock:()=>new Date().toISOString(),getAllAgents:i,getAgentByNameOrAlias:r,getLatestVersion:(t,n,r)=>S(t,n,r,e),getOrderedInstallMethods:p,getPlatform:t,getResolvedBinaryPath:t=>o(t,e),inspectExecutable:(t,n)=>b(t,n,e),observeAgentLifecycle:h,providerRegistry:n,readInstalledState:u,readReceipt:s,signal:e.signal,timeoutMs:e.timeoutMs},a)}async function y(e){let t=f(),n=v(t.context);try{return await t.run(()=>e(n))}finally{t.dispose()}}async function b(t,n,r){let i=await e(t.binaryName,r);if(!i)return{present:!1};let[a,s]=await Promise.all([c(t.binaryName,r),x(t,n,r)]);return{path:await o(a,r)??a,present:i,version:s}}async function x(e,t,n){return l(e.binaryName,e.versionProbe,n)}async function S(e,t,n,r){let i=d(e,t,n);return i?a(i,`latest`,{context:r}):void 0}export{_ as n,v as t};
1
+ import{n as e,t}from"./detect-BdnZzKbm.mjs";import{I as n,n as r,r as i}from"./agents-BVhg2uqJ.mjs";import{G as a,K as o,S as s,U as c,W as l,x as u}from"./output-CemK152l.mjs";import{u as d}from"./providers-BsRQVnXd.mjs";import{t as f}from"./cli-operation-context-BhNiJdQ3.mjs";import{s as p}from"./agents-_8Ay_O2P.mjs";import{r as m}from"./provider-binding-D1muQsgD.mjs";import{t as h}from"./agent-observation-Ci5R0GnA.mjs";function g(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]?m(n,a[0]):void 0,providerRegistry:e.providerRegistry,readInstalledState:i,readReceipt:e.readReceipt,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 _(e,t){return t?v(t).resolveAgentObservation(e):y(t=>t.resolveAgentObservation(e))}function v(e,a={}){return g({clock:()=>new Date().toISOString(),getAllAgents:i,getAgentByNameOrAlias:r,getLatestVersion:(t,n,r)=>S(t,n,r,e),getOrderedInstallMethods:p,getPlatform:t,getResolvedBinaryPath:t=>o(t,e),inspectExecutable:(t,n)=>b(t,n,e),observeAgentLifecycle:h,providerRegistry:n,readInstalledState:u,readReceipt:s,signal:e.signal,timeoutMs:e.timeoutMs},a)}async function y(e){let t=f(),n=v(t.context);try{return await t.run(()=>e(n))}finally{t.dispose()}}async function b(t,n,r){let i=await e(t.binaryName,r);if(!i)return{present:!1};let[a,s]=await Promise.all([c(t.binaryName,r),x(t,n,r)]);return{path:await o(a,r)??a,present:i,version:s}}async function x(e,t,n){return l(e.binaryName,e.versionProbe,n)}async function S(e,t,n,r){let i=d(e,t,n);return i?a(i,`latest`,{context:r}):void 0}export{_ as n,v as t};