quantex-cli 0.25.0 → 0.25.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/README.zh-CN.md +8 -5
- package/dist/agents-5FZfizCZ.mjs +1 -0
- package/dist/{capabilities-D5V68Dv8.mjs → capabilities-DZykz2Wo.mjs} +1 -1
- package/dist/capabilities-HlD6b-5Z.mjs +1 -0
- package/dist/cli.mjs +1 -1
- package/dist/{color-P2gkDtbT.mjs → color-Brg6IVS7.mjs} +2 -2
- package/dist/commands-DuKcedi0.mjs +1 -0
- package/dist/{commands-x1OJyrod.mjs → commands-wopeYsFl.mjs} +1 -1
- package/dist/{config-OsdDt_Li.mjs → config-C0RPwNR5.mjs} +1 -1
- package/dist/{detect-ha4CNko6.mjs → detect-CP166fHX.mjs} +1 -1
- package/dist/{doctor-Do1o85vd.mjs → doctor-DlQW_Ukl.mjs} +1 -1
- package/dist/ensure-DGauKpfW.mjs +1 -0
- package/dist/ensure-wQEX_cAs.mjs +1 -0
- package/dist/index.mjs +1 -1
- package/dist/{info-BsRJCm6m.mjs → info-Bn9gifLW.mjs} +1 -1
- package/dist/{inspect-cL6WV563.mjs → inspect-BU3I5crt.mjs} +1 -1
- package/dist/inspect-Bw3vwutT.mjs +1 -0
- package/dist/install-D-wcBATz.mjs +1 -0
- package/dist/{list-C6iUd2OH.mjs → list-BkcM9ceq.mjs} +1 -1
- package/dist/resolve-D5ETKDnn.mjs +1 -0
- package/dist/{resolve-D_hJuTw_.mjs → resolve-pbqtA_jk.mjs} +1 -1
- package/dist/{schema-BrRg-KvQ.mjs → schema-B-c3-fEZ.mjs} +1 -1
- package/dist/schema-CtXk-4vF.mjs +1 -0
- package/dist/{uninstall-1IbDy4rP.mjs → uninstall-Bt7lsRP5.mjs} +1 -1
- package/dist/{update-3H-vFkBZ.mjs → update-BgtIfzfC.mjs} +1 -1
- package/dist/update-D0vp6Tzx.mjs +1 -0
- package/dist/{upgrade-Cg0JGxAX.mjs → upgrade-LDNvlEIT.mjs} +1 -1
- package/dist/{user-output-BQ6dCRsI.mjs → user-output-BaPTpUe_.mjs} +1 -1
- package/package.json +1 -1
- package/dist/agents-DznN3xrB.mjs +0 -1
- package/dist/capabilities-BaC4XmCX.mjs +0 -1
- package/dist/commands-BEF26wDR.mjs +0 -1
- package/dist/ensure-BnS4r4Tt.mjs +0 -1
- package/dist/ensure-CrCJrMYq.mjs +0 -1
- package/dist/inspect-DvCMlYtq.mjs +0 -1
- package/dist/install-_LYCQPh6.mjs +0 -1
- package/dist/resolve-D_Mf_ot8.mjs +0 -1
- package/dist/schema-DOHQE2bD.mjs +0 -1
- package/dist/update-Cckz9hVd.mjs +0 -1
package/README.md
CHANGED
|
@@ -22,14 +22,14 @@ Install, inspect, update, uninstall, and run AI coding assistant CLIs from one a
|
|
|
22
22
|
|
|
23
23
|
</div>
|
|
24
24
|
|
|
25
|
-
Quantex is a `human-friendly + agent-friendly` lifecycle CLI for AI coding assistants and terminal coding agents. Use one `qtx` surface to install, inspect, update, uninstall, run, and automate Codex CLI, Claude Code, Gemini CLI, Cursor CLI, OpenCode, Amp, Kilo
|
|
25
|
+
Quantex is a `human-friendly + agent-friendly` lifecycle CLI for AI coding assistants and terminal coding agents. Use one `qtx` surface to install, inspect, update, uninstall, run, and automate Codex CLI, Claude Code, Gemini CLI, Cursor CLI, OpenCode, Antigravity CLI, MiMoCode, Amp, Kilo CLI, and other assistant CLIs with stable machine-readable output. This README uses the shorter `qtx` form as the recommended entry point, while `quantex` remains the fully equivalent long command name.
|
|
26
26
|
|
|
27
27
|
## Why Quantex
|
|
28
28
|
|
|
29
29
|
- Manage multiple AI coding assistant CLIs from one lifecycle command: install, ensure, inspect, update, uninstall, and run.
|
|
30
30
|
- Designed for scripts and coding agents: stable `--json`, `--output ndjson`, `--non-interactive`, and `--dry-run` contracts for machine-readable automation.
|
|
31
31
|
- Tracks real install sources: `update --all` groups updates by recorded source instead of guessing from PATH alone.
|
|
32
|
-
- Supports managed agent installs through available Bun, npm, Homebrew, Cargo, Deno, pip, uv, and winget providers.
|
|
32
|
+
- Supports managed agent installs through available Bun, npm, Homebrew, Cargo, Deno, mise, pip, uv, and winget providers.
|
|
33
33
|
- Supports Quantex self-upgrade across Bun, npm, and standalone binary installs.
|
|
34
34
|
|
|
35
35
|
## Agent Quick Start
|
|
@@ -177,6 +177,7 @@ Note: `qtx upgrade` follows the registry actually used by the current Bun/npm se
|
|
|
177
177
|
|
|
178
178
|
| Agent | Run Command | Description |
|
|
179
179
|
|-------|-------------|-------------|
|
|
180
|
+
| Antigravity CLI | `qtx antigravity` | Google's Antigravity terminal coding agent CLI |
|
|
180
181
|
| Auggie CLI | `qtx auggie` | Augment's official terminal coding agent |
|
|
181
182
|
| Autohand Code CLI | `qtx autohand` | Autohand's autonomous terminal coding agent CLI |
|
|
182
183
|
| Amp | `qtx amp` | Sourcegraph's frontier AI coding agent CLI |
|
|
@@ -199,6 +200,7 @@ Note: `qtx upgrade` follows the registry actually used by the current Bun/npm se
|
|
|
199
200
|
| Kilo CLI | `qtx kilo` | Kilo's official AI coding assistant CLI |
|
|
200
201
|
| Kimi Code | `qtx kimi` | Moonshot AI's coding assistant CLI |
|
|
201
202
|
| Kiro CLI | `qtx kiro` | Amazon's AI coding agent CLI |
|
|
203
|
+
| MiMoCode | `qtx mimo` | Xiaomi's terminal-native AI coding assistant CLI |
|
|
202
204
|
| Mistral Vibe | `qtx vibe` | Mistral's open-source CLI coding assistant |
|
|
203
205
|
| OpenHands CLI | `qtx openhands` | OpenHands' open-source software development agent CLI |
|
|
204
206
|
| OpenCode | `qtx opencode` | Open-source AI coding CLI |
|
|
@@ -246,7 +248,6 @@ User configuration lives at `~/.quantex/config.json`:
|
|
|
246
248
|
"defaultPackageManager": "bun",
|
|
247
249
|
"npmBunUpdateStrategy": "latest-major",
|
|
248
250
|
"selfUpdateChannel": "stable",
|
|
249
|
-
"selfUpdateRegistry": "https://registry.npmjs.org",
|
|
250
251
|
"networkRetries": 2,
|
|
251
252
|
"networkTimeoutMs": 10000,
|
|
252
253
|
"versionCacheTtlHours": 6
|
|
@@ -255,7 +256,7 @@ User configuration lives at `~/.quantex/config.json`:
|
|
|
255
256
|
|
|
256
257
|
`defaultPackageManager` can be `bun`, `npm`, or `mise`. It only changes agent install-method ordering when the selected agent exposes that managed installer; it does not make Quantex install missing package managers for you.
|
|
257
258
|
|
|
258
|
-
`selfUpdateRegistry` only affects the registry used when Quantex upgrades itself through Bun/npm
|
|
259
|
+
`selfUpdateRegistry` is unset by default. When unset, Quantex follows the active Bun/npm registry for self-upgrade. If you set `selfUpdateRegistry`, it only affects the registry used when Quantex upgrades itself through Bun/npm and does not change the default install source for your other projects. For a one-off override, use the `QTX_SELF_UPDATE_REGISTRY` environment variable.
|
|
259
260
|
|
|
260
261
|
Runtime state lives at `~/.quantex/state.json`. Quantex records the actual install source for agents and itself, which powers grouped `update --all` execution, `doctor` recovery guidance, and self-upgrade source detection.
|
|
261
262
|
|
package/README.zh-CN.md
CHANGED
|
@@ -22,14 +22,14 @@
|
|
|
22
22
|
|
|
23
23
|
</div>
|
|
24
24
|
|
|
25
|
-
Quantex 是一个 `human-friendly + agent-friendly` 的 AI 编程助手 CLI lifecycle manager。它帮你把 Codex CLI、Claude Code、Gemini CLI、Cursor CLI、OpenCode、Amp、Kilo
|
|
25
|
+
Quantex 是一个 `human-friendly + agent-friendly` 的 AI 编程助手 CLI lifecycle manager。它帮你把 Codex CLI、Claude Code、Gemini CLI、Cursor CLI、OpenCode、Antigravity CLI、MiMoCode、Amp、Kilo CLI 等终端 coding agent 的安装、检查、更新、卸载、启动和自动化调用统一到一组稳定命令里:人可以直接用,脚本和 coding agent 也可以通过结构化输出可靠调用。本文默认使用更短的 `qtx` 作为推荐入口,`quantex` 是完全等价的完整命令名。
|
|
26
26
|
|
|
27
27
|
## 为什么用 Quantex
|
|
28
28
|
|
|
29
29
|
- 一个生命周期命令管理多个 AI 编程助手 CLI:安装、确保可用、查询状态、更新、卸载、启动。
|
|
30
30
|
- 适合脚本和 agent 调用:支持 `--json`、`--output ndjson`、`--non-interactive`、`--dry-run` 等适合机器读取的稳定契约。
|
|
31
31
|
- 记住真实安装来源:`update --all` 会优先按已记录来源分组更新,避免混合安装环境下误用更新方式。
|
|
32
|
-
- 支持通过可用的 Bun、npm、Homebrew、Cargo、Deno、pip、uv、winget provider 管理 agent 安装。
|
|
32
|
+
- 支持通过可用的 Bun、npm、Homebrew、Cargo、Deno、mise、pip、uv、winget provider 管理 agent 安装。
|
|
33
33
|
- 支持 Quantex 自升级:Bun、npm、独立二进制安装来源都有对应升级路径。
|
|
34
34
|
|
|
35
35
|
## Agent 快速接入
|
|
@@ -156,7 +156,7 @@ qtx upgrade --channel beta
|
|
|
156
156
|
|
|
157
157
|
| 推荐命令 | 等价长命令 | 作用 |
|
|
158
158
|
|------|------|------|
|
|
159
|
-
| `qtx i <agent
|
|
159
|
+
| `qtx i <agent> [more-agents...]` | `quantex install <agent> [more-agents...]` | 安装一个或多个 agent |
|
|
160
160
|
| `qtx ensure <agent>` | `quantex ensure <agent>` | 幂等确保 agent 已安装 |
|
|
161
161
|
| `qtx u <agent>` | `quantex update <agent>` | 更新 agent |
|
|
162
162
|
| `qtx update --all` | `quantex update --all` | 更新所有已安装 agent |
|
|
@@ -177,6 +177,7 @@ qtx upgrade --channel beta
|
|
|
177
177
|
|
|
178
178
|
| Agent | 启动命令 | 描述 |
|
|
179
179
|
|-------|----------|------|
|
|
180
|
+
| Antigravity CLI | `qtx antigravity` | Google Antigravity 终端编程 Agent CLI |
|
|
180
181
|
| Auggie CLI | `qtx auggie` | Augment 官方终端编程 Agent CLI |
|
|
181
182
|
| Autohand Code CLI | `qtx autohand` | Autohand 官方自主终端编程 Agent CLI |
|
|
182
183
|
| Amp | `qtx amp` | Sourcegraph 前沿 AI 编程 Agent CLI |
|
|
@@ -199,6 +200,7 @@ qtx upgrade --channel beta
|
|
|
199
200
|
| Kilo CLI | `qtx kilo` | Kilo 官方 AI 编程助手 CLI |
|
|
200
201
|
| Kimi Code | `qtx kimi` | Moonshot AI 编程助手 CLI |
|
|
201
202
|
| Kiro CLI | `qtx kiro` | Amazon AI 编程 Agent CLI |
|
|
203
|
+
| MiMoCode | `qtx mimo` | 小米终端原生 AI 编程助手 CLI |
|
|
202
204
|
| Mistral Vibe | `qtx vibe` | Mistral 开源终端编程助手 |
|
|
203
205
|
| OpenHands CLI | `qtx openhands` | OpenHands 开源软件开发 Agent CLI |
|
|
204
206
|
| OpenCode | `qtx opencode` | 开源 AI 编程 CLI |
|
|
@@ -246,14 +248,15 @@ quantex schema --json
|
|
|
246
248
|
"defaultPackageManager": "bun",
|
|
247
249
|
"npmBunUpdateStrategy": "latest-major",
|
|
248
250
|
"selfUpdateChannel": "stable",
|
|
249
|
-
"selfUpdateRegistry": "https://registry.npmjs.org",
|
|
250
251
|
"networkRetries": 2,
|
|
251
252
|
"networkTimeoutMs": 10000,
|
|
252
253
|
"versionCacheTtlHours": 6
|
|
253
254
|
}
|
|
254
255
|
```
|
|
255
256
|
|
|
256
|
-
`
|
|
257
|
+
`defaultPackageManager` 可以是 `bun`、`npm` 或 `mise`。它只会在目标 agent 暴露对应 managed installer 时调整 agent 安装方式排序,不会让 Quantex 自动替你安装缺失的 package manager。
|
|
258
|
+
|
|
259
|
+
`selfUpdateRegistry` 默认不设置。未设置时,Quantex 自升级会跟随当前 Bun/npm 实际使用的 registry。设置 `selfUpdateRegistry` 后,它只影响 Quantex 自身通过 Bun/npm 执行 `qtx upgrade` 的 registry 选择,不会修改你其他项目的默认安装源。一次性覆盖可使用环境变量 `QTX_SELF_UPDATE_REGISTRY`。
|
|
257
260
|
|
|
258
261
|
运行时状态位于 `~/.quantex/state.json`。Quantex 会记录 agent 和自身的实际安装来源,用于 `update --all` 分组更新、`doctor` 恢复建议和 self upgrade 来源判断。
|
|
259
262
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{B as e,Et as t,F as n,G as r,H as i,K as a,N as o,Ot as s,St as c,Tt as l,V as ee,W as u,X as d,_ as te,b as ne,d as re,f as ie,g as ae,h as oe,k as f,m as se,p as ce,q as p,st as m,tt as h,v as g,vt as _,wt as v,xt as le,y as ue,yt as de,z as fe}from"./color-Brg6IVS7.mjs";import{a as pe,c as me,d as he,i as ge,l as _e,m as ve,n as ye,o as be,p as xe,r as Se,s as Ce,t as y,u as we}from"./detect-CP166fHX.mjs";import Te from"node:process";async function b(e){let t=y(),n=typeof e==`function`?e(t):e;try{return Te.platform===`win32`?await p(a([`powershell.exe`,`-Command`,n]))===0:await p(a([`sh`,`-c`,n]))===0}catch{return!1}}function Ee(e){return e===`cask`?[`--cask`]:[]}async function x(e,t,n){try{return await p(a([`brew`,e,...Ee(n),t]))===0}catch{return!1}}async function De(e,t){return x(`install`,e,t)}async function S(e,t){return x(`upgrade`,e,t)}async function C(e){for(let t of e)if(!await S(t.packageName,t.packageTargetKind))return!1;return!0}async function w(e,t){return x(`uninstall`,e,t)}async function T(e,t,n=[]){try{return await p(a([`cargo`,e,t,...n]))===0}catch{return!1}}async function E(e,t){return T(`install`,e,t)}async function D(e,t){return E(e,[`--force`,...t??[]])}async function Oe(e){for(let t of e)if(!await D(t.packageName,t.packageInstallArgs))return!1;return!0}async function ke(e){return T(`uninstall`,e)}async function O(e,t=[],n={}){let r=[`deno`,`install`,`--global`];n.force&&r.push(`--force`),r.push(...t,e);try{return await p(a(r))===0}catch{return!1}}async function Ae(e,t){return O(e,t)}async function k(e,t){return O(e,t,{force:!0})}async function je(e){for(let t of e)if(!await k(t.packageName,t.packageInstallArgs))return!1;return!0}async function Me(e){try{return await p(a([`deno`,`uninstall`,`--global`,e]))===0}catch{return!1}}async function A(e,t=!1){try{return await p(a([`mise`,`use`,`--global`,...t?[`--force`]:[],e]))===0}catch{return!1}}async function Ne(e){return A(e)}async function j(e){return A(e,!0)}async function Pe(e){for(let t of e)if(!await j(t.packageName))return!1;return!0}async function Fe(e){try{return await p(a([`mise`,`unuse`,`--global`,e]))===0}catch{return!1}}async function Ie(e){try{let{exitCode:t,stdout:n}=await u(r([`mise`,`ls`,`--installed`,`--json`,e],{stdio:[`ignore`,`pipe`,`ignore`]}));return t===0?Le(n,e):void 0}catch{return}}function Le(e,t){try{let n=JSON.parse(e);if(!M(n))return;let r=Re(n,t),i=r?n[r]:void 0;if(!Array.isArray(i))return;for(let e of i)if(M(e)&&typeof e.version==`string`&&e.version.length>0)return e.version;return}catch{return}}function Re(e,t){if(Array.isArray(e[t]))return t;let n=t.split(`:`).pop()?.split(`/`).pop();if(n)return Object.keys(e).find(t=>t===n&&Array.isArray(e[t]))}function M(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}let N=null;async function ze(){if(N)return N;for(let e of[[`pip`],[`pip3`],[`python`,`-m`,`pip`],[`python3`,`-m`,`pip`]])try{let{exitCode:t}=await u(r([...e,`--version`]));if(t===0)return N=e,e}catch{}return N=[`pip`],N}async function P(e){try{return await p(a([...await ze(),...e]))===0}catch{return!1}}async function Be(e){return P([`install`,e])}async function F(e){return P([`install`,`--upgrade`,e])}async function Ve(e){if(e.length===0)return!0;for(let t of e)if(!await F(t.packageName))return!1;return!0}async function He(e){return P([`uninstall`,`-y`,e])}async function I(e,t,n=[]){try{return await p(a([`uv`,`tool`,e,t,...n]))===0}catch{return!1}}async function Ue(e,t){return I(`install`,e,t)}async function L(e,t){return I(`upgrade`,e,t)}async function We(e){for(let t of e)if(!await L(t.packageName,t.packageInstallArgs))return!1;return!0}async function Ge(e){try{return await p(a([`uv`,`tool`,`uninstall`,e]))===0}catch{return!1}}async function Ke(e){try{let{exitCode:t,stdout:n}=await u(r([`uv`,`tool`,`list`],{stdio:[`ignore`,`pipe`,`ignore`]}));return t===0?qe(n,e):void 0}catch{return}}function qe(e,t){let n=R(t);for(let t of e.split(/\r?\n/)){let e=t.trim(),r=/^(\S+)\s+v([^\s]+)/.exec(e);if(!r)continue;let[,i,a]=r;if(R(i)===n)return a}}function R(e){return e.toLowerCase().replaceAll(/[-_.]+/g,`-`)}async function z(e,t){try{return await p(a([`winget`,e,`--id`,t,`-e`]))===0}catch{return!1}}async function Je(e){return z(`install`,e)}async function B(e){return z(`upgrade`,e)}async function Ye(e){for(let t of e)if(!await B(t.packageName))return!1;return!0}async function Xe(e){return z(`uninstall`,e)}const Ze={brew:{type:`brew`,isAvailable:async()=>Se(),install:async(e,t)=>De(e,t),uninstall:async(e,t)=>w(e,t),update:async(e,t)=>S(e,t),updateMany:async e=>C(e)},bun:{type:`bun`,getInstalledVersion:async e=>ae(e),isAvailable:async()=>ge(),install:async e=>te(e),uninstall:async e=>g(e),update:async(e,t,n)=>ue(e,n?.npmBunUpdateStrategy),updateMany:async(e,t)=>ne(e.map(e=>e.packageName),t?.npmBunUpdateStrategy)},cargo:{type:`cargo`,isAvailable:async()=>pe(),install:async(e,t,n)=>E(e,n),uninstall:async e=>ke(e),update:async(e,t,n)=>D(e,n?.packageInstallArgs),updateMany:async e=>Oe(e.map(e=>({packageInstallArgs:e.packageInstallArgs,packageName:e.packageName})))},deno:{type:`deno`,isAvailable:async()=>be(),install:async(e,t,n)=>Ae(e,n),uninstall:async(e,t,n)=>Me(n?.binaryName??e),update:async(e,t,n)=>k(e,n?.packageInstallArgs),updateMany:async e=>je(e.map(e=>({binaryName:e.binaryName,packageInstallArgs:e.packageInstallArgs,packageName:e.packageName})))},mise:{type:`mise`,getInstalledVersion:async e=>Ie(e),isAvailable:async()=>Ce(),install:async e=>Ne(e),uninstall:async e=>Fe(e),update:async e=>j(e),updateMany:async e=>Pe(e.map(e=>({packageName:e.packageName})))},npm:{type:`npm`,getInstalledVersion:async e=>re(e),isAvailable:async()=>me(),install:async e=>ie(e),uninstall:async e=>ce(e),update:async(e,t,n)=>se(e,n?.npmBunUpdateStrategy),updateMany:async(e,t)=>oe(e.map(e=>e.packageName),t?.npmBunUpdateStrategy)},pip:{type:`pip`,isAvailable:async()=>_e(),install:async e=>Be(e),uninstall:async e=>He(e),update:async e=>F(e),updateMany:async e=>Ve(e.map(e=>({packageName:e.packageName})))},uv:{type:`uv`,getInstalledVersion:async e=>Ke(e),isAvailable:async()=>we(),install:async(e,t,n)=>Ue(e,n),uninstall:async e=>Ge(e),update:async(e,t,n)=>L(e,n?.packageInstallArgs),updateMany:async e=>We(e.map(e=>({packageInstallArgs:e.packageInstallArgs,packageName:e.packageName})))},winget:{type:`winget`,isAvailable:async()=>he(),install:async e=>Je(e),uninstall:async e=>Xe(e),update:async e=>B(e),updateMany:async e=>Ye(e.map(e=>({packageName:e.packageName})))}};function V(e){return Ze[e]}const H={resource:`agent lifecycle`,scope:[`agent-lifecycle`]};async function Qe(){return(await h()).defaultPackageManager}async function U(){return{npmBunUpdateStrategy:(await h()).npmBunUpdateStrategy}}async function W(e){let t=y(),n=e.platforms[t];if(!n)return[];let r=await Qe();return r?[...n.filter(e=>e.type===r),...n.filter(e=>e.type!==r)]:[...n]}async function G(e,t,n,r,i,a,o){let s=V(e);return await s.isAvailable()?a===`install`?s.install(t,i,r):a===`update`?s.update(t,i,{binaryName:n,npmBunUpdateStrategy:o,packageInstallArgs:r}):s.uninstall(t,i,{binaryName:n}):!1}async function K(e,t,n,r){if(s(t.type)){let i=c(e,t);return i?G(t.type,i,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,n,r):!1}return n===`update`&&!l(t.type)||!t.command?!1:b(t.command)}function q(e,t){if(e.packageName)return e.packageName;if(!(!t||!s(e.installType)))return c(t,{type:e.installType})}async function J(e,t,n){if(s(e.installType)){let r=q(e,n?.agent);return r?G(e.installType,r,e.binaryName,e.packageInstallArgs,e.packageTargetKind,t,n?.updateStrategy):!1}return t!==`install`||!e.command?!1:b(e.command)}async function Y(e,t){if(!s(t.type))return;let n=c(e,t);n&&await G(t.type,n,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`)}async function $e(e){if(!e.selfUpdate)return!1;let t=[e.selfUpdate.command,...e.selfUpdate.fallbackCommands??[]];for(let e of t)if(await b(e.join(` `)))return!0;return!1}function et(e,t){let n={agentName:e.name,installType:t.type,packageName:c(e,t),packageTargetKind:t.packageTargetKind,command:`command`in t?t.command:void 0},r=t.binaryName??(t.type===`deno`?e.binaryName:void 0);return r&&(n.binaryName=r),t.packageInstallArgs?.length&&(n.packageInstallArgs=t.packageInstallArgs),n}async function X(e,t){if(m().cancelled)return null;let r=et(e,t);return m().cancelled?null:(await n(r),m().cancelled?(await o(e.name),null):r)}async function tt(e,t){return d(H,async()=>X(e,t))}async function nt(e){return d(H,async()=>{let t=await W(e);for(let n of t)if(await K(e,n,`install`)){if(m().cancelled)return await Y(e,n),{success:!1};try{let t=await X(e,n);return t?{success:!0,installedState:t}:(await Y(e,n),{success:!1})}catch(t){throw await Y(e,n),t}}return{success:!1}})}async function rt(e,t){return d(H,async()=>{let{npmBunUpdateStrategy:r}=await U(),i=await W(e),a=t&&s(t.installType)?q(t,e):void 0;if(t&&await J(t,`update`,{agent:e,updateStrategy:r}))return m().cancelled?{success:!1}:(await n(t),m().cancelled?(await o(e.name),{success:!1}):{success:!0,installedState:t});if(!t){for(let t of i)if(await K(e,t,`update`,r)){let n=await X(e,t);return n?{success:!0,installedState:n}:{success:!1}}}return(!t||!s(t.installType)||a)&&await $e(e)?{success:!0}:{success:!1}})}async function it(e,t){return d(H,async()=>{let n=[...new Map(t.filter(e=>e.packageName).map(e=>[`${e.packageTargetKind??`package`}:${e.packageName}:${e.packageInstallArgs?.join(` `)??``}`,e])).values()];if(n.length===0)return!1;let r=V(e);return await r.isAvailable()?r.updateMany(n,await U()):!1})}async function at(e,t,n){let r=V(e);if(r.getInstalledVersion&&await r.isAvailable())return r.getInstalledVersion(t,n)}async function ot(e){return d(H,async()=>{let t=await f(e.name);if(!t)return!1;if(!v(t.installType))return await o(e.name),!0;let n=await J(t,`uninstall`,{agent:e});return n&&await o(e.name),n})}async function Z(e){let[n,r,a]=await Promise.all([W(e),f(e.name),ye(e.binaryName)]),[o,s,c]=await Promise.all([a?st(e,r):Promise.resolve(void 0),a?fe(e.binaryName):Promise.resolve(void 0),ct(e,r,n)]);return{agent:e,methods:n,installedState:r,inPath:a,installedVersion:o,latestVersion:c,binaryPath:s,resolvedBinaryPath:await i(s),sourceLabel:_(r),updateLabel:de(e,r),lifecycle:r?t(r.installType):`unmanaged`}}async function Q(e){return Promise.all(e.map(Z))}async function st(t,n){if(n&&s(n.installType)&&n.packageName){let e=await at(n.installType,n.packageName,n.packageTargetKind);if(e)return e}return e(t.binaryName,t.versionProbe)}async function ct(e,t,n){let r=le(e,t,n);if(r)return ee(r)}function $(e){return xe(e)}async function lt(e){let t=$(e);if(t)return{agent:t,inspection:await Z(t)}}async function ut(){return Q(ve())}export{Q as a,tt as c,it as d,V as f,Z as i,ot as l,$ as n,W as o,lt as r,nt as s,ut as t,rt as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as e,r as t,s as n,t as r}from"./color-
|
|
1
|
+
import{a as e,r as t,s as n,t as r}from"./color-Brg6IVS7.mjs";import{a as i,c as a,d as o,i as s,l as c,m as l,o as u,r as d,s as f,t as p,u as m}from"./detect-CP166fHX.mjs";import h from"node:process";async function g(){let[r,g,y,b,x,S,C,w,T,E]=await Promise.all([s(),a(),d(),i(),u(),f(),c(),m(),o(),n()]);return e(t({action:`capabilities`,data:{agents:l().map(e=>e.name),features:{assumeYes:!0,cacheBypass:!0,cacheRefresh:!0,channels:[`stable`,`beta`],colorModes:[`auto`,`always`,`never`],dryRun:!0,execInstallPolicies:[`never`,`if-missing`,`always`],freshnessMetadata:!0,idempotencyKey:!0,logLevels:[`silent`,`error`,`warn`,`info`,`debug`],quietLogs:!0,selfUpgrade:E.canAutoUpdate,timeout:!0},installers:{brew:{available:y,reason:y?void 0:_(`brew`)},bun:{available:r,reason:r?void 0:_(`bun`)},cargo:{available:b,reason:b?void 0:_(`cargo`)},deno:{available:x,reason:x?void 0:_(`deno`)},mise:{available:S,reason:S?void 0:_(`mise`)},npm:{available:g,reason:g?void 0:_(`npm`)},pip:{available:C,reason:C?void 0:_(`pip`)},uv:{available:w,reason:w?void 0:_(`uv`)},winget:{available:T,reason:T?void 0:_(`winget`)}},outputModes:[`human`,`json`,`ndjson`],platform:{arch:h.arch,os:p()}},target:{kind:`system`,name:`capabilities`}}),v)}function _(e){return e===`winget`&&h.platform!==`win32`||e===`brew`&&h.platform===`win32`?`not-on-platform`:`not-found`}function v(e){e.data&&(console.log(r.bold(`
|
|
2
2
|
Quantex Capabilities
|
|
3
3
|
`)),console.log(` Platform: ${e.data.platform.os}/${e.data.platform.arch}`),console.log(` Output Modes: ${e.data.outputModes.join(`, `)}`),console.log(` Agents: ${e.data.agents.join(`, `)}`),console.log(r.bold(`
|
|
4
4
|
Installers:`)),console.log(` bun: ${y(e.data.installers.bun)}`),console.log(` npm: ${y(e.data.installers.npm)}`),console.log(` brew: ${y(e.data.installers.brew)}`),console.log(` cargo: ${y(e.data.installers.cargo)}`),console.log(` deno: ${y(e.data.installers.deno)}`),console.log(` mise: ${y(e.data.installers.mise)}`),console.log(` pip: ${y(e.data.installers.pip)}`),console.log(` uv: ${y(e.data.installers.uv)}`),console.log(` winget: ${y(e.data.installers.winget)}`),console.log(r.bold(`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./capabilities-DZykz2Wo.mjs";export{e as capabilitiesCommand};
|
package/dist/cli.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{A as e,K as t,L as n,O as r,T as i,U as a,Y as o,Z as s,_t as c,a as l,at as u,ct as d,gt as f,i as p,j as m,lt as h,n as g,ot as _,q as ee,r as te,s as ne,st as v,t as y,ut as b}from"./color-P2gkDtbT.mjs";import{p as re}from"./detect-ha4CNko6.mjs";import{r as x,s as ie}from"./agents-DznN3xrB.mjs";import{n as S}from"./lifecycle-errors-BtqYfS-v.mjs";import{a as ae,i as C,n as w,o as T,r as E,t as oe}from"./user-output-BQ6dCRsI.mjs";import{n as se,t as D}from"./errors-BzXIrX6h.mjs";import{createHash as ce}from"node:crypto";import O from"node:process";import{mkdir as k,readFile as le,rm as ue,writeFile as de}from"node:fs/promises";import{join as A}from"node:path";import{program as j}from"commander";import fe from"prompts";function M(){return A(s(),`idempotency`)}function N(e){return A(M(),`${I(e)}.json`)}async function P(e){try{let t=JSON.parse(await le(N(e),`utf8`));if(Date.parse(t.expiresAt)<=Date.now()){await ue(N(e),{force:!0});return}return t}catch{return}}async function F(e,t){await k(M(),{recursive:!0});let n=new Date().toISOString(),r=new Date(Date.now()+864e5).toISOString(),i={action:t.action,createdAt:n,expiresAt:r,result:t.result,target:t.target};await de(N(e),`${JSON.stringify(i,null,2)}\n`,`utf8`)}function I(e){return ce(`sha256`).update(e,`utf8`).digest(`hex`)}const L=new Set([`doctor`,`upgrade`]);async function R(t){if(!t.ok||L.has(t.action))return;let r=v();if(r.outputMode!==`human`||r.quiet)return;let i=await ne();if(!i.latestVersion||!a(i.latestVersion,i.currentVersion))return;let o=await e(),s=Date.now();if(z(o.updateNoticeVersion,o.updateNoticeAt,i.latestVersion,s))return;let c=i.canAutoUpdate?"Run `quantex upgrade`.":"Run `quantex doctor` for source-specific update steps.";C(y.yellow(`Quantex CLI ${i.latestVersion} is available (current ${i.currentVersion}). ${c}`)),await n(i.latestVersion,new Date(s).toISOString())}function z(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 B(e,t){return e===void 0&&t===void 0?!0:e===void 0||t===void 0||e.kind!==t.kind||e.kind===`agent`&&(!e.name||!t.name)?!1:e.name===t.name}function V(e){return e.warnings.some(e=>e.code===`DRY_RUN`)}async function pe(e){try{return await me(e)}catch(t){if(t instanceof r)return H(e,t);throw t}}async function me(e){let t=await ge(e.action,e.target);if(t)return t;let n=v().timeoutMs;if(n===void 0)return G(e,()=>e.run().then(t=>U(e.action,e.target,t)));let r;try{let t=new Promise(t=>{r=setTimeout(()=>{t(K(e,n))},n)});return await G(e,async()=>{let i=ye(e.run,()=>t),a=await Promise.race([i,t]);return!a.ok&&a.error?.code===`TIMEOUT`&&(a=await ve(i,n)??await xe(e,n)),r!==void 0&&(clearTimeout(r),r=void 0),U(e.action,e.target,a)})}finally{r&&clearTimeout(r)}}async function H(e,t){return l(g({action:e.action,...S(t,m(),e.target)}),he)}function he(e){e.error&&console.error(y.red(e.error.message))}async function U(e,t,n){let r=await _e(e,t,n);try{await R({action:e,ok:r.ok})}catch{}return r}function W(e){e.error&&console.error(y.red(e.error.message))}async function ge(e,t){let n=v();if(!n.idempotencyKey)return;let r=await P(n.idempotencyKey);if(!r)return;if(r.action!==e)return l(g({action:e,error:{code:`INVALID_ARGUMENT`,details:{existingAction:r.action,idempotencyKey:n.idempotencyKey},message:`Idempotency key ${n.idempotencyKey} was already used for ${r.action}.`},target:t}),W,{force:!0});if(!B(r.target,t)||V(r.result))return;let i={...r.result,meta:{...r.result.meta,mode:n.outputMode,runId:n.runId,timestamp:new Date().toISOString()}};return l(i,W,{force:!0}),i}async function _e(e,t,n){let r=v();return r.idempotencyKey&&n.ok&&!r.dryRun&&!V(n)&&await F(r.idempotencyKey,{action:e,result:n,target:t}),n}async function G(e,t){let n,r;try{let i=new Promise(t=>{let i=r=>{n??=Se(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([be(t,()=>n),i])}finally{r?.()}}async function ve(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function ye(e,t){try{return await e()}catch(e){if(v().cancelled)return t();throw e}}async function be(e,t){try{let n=await e(),r=t();return v().cancelled&&r?r:n}catch(e){let n=t();if(v().cancelled&&n)return n;throw e}}function K(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 xe(e,t){return await u(),p({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),l(K(e,t),W,{force:!0})}async function Se(e,t){return await u(),p({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),l(g({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),W,{force:!0})}async function q(e,n,i={}){let a;try{a=await x(e)}catch(t){if(t instanceof r)return Ce(e,t),D(`STATE_READ_ERROR`);throw t}if(!a)return Y({agent:{name:e},errorCode:`AGENT_NOT_FOUND`,errorMessage:`Unknown agent: ${e}`,execution:{args:n,installPolicy:i.install??`prompt`,installed:!1,interactive:!1,launched:!1}}),D(`AGENT_NOT_FOUND`);let{agent:o,inspection:s}=a,c=i.nonInteractive?!1:v().interactive,l=i.assumeYes??oe(),u=i.dryRun??w(),d=i.install??`prompt`;if(!s.inPath){if(d===`never`)return Y({agent:{binaryName:o.binaryName,displayName:o.displayName,name:o.name},errorCode:`AGENT_NOT_INSTALLED`,errorMessage:`${o.displayName} is not installed.`,execution:{args:n,installGuidance:J(o,s.methods,n),installPolicy:d,installed:!1,interactive:c,launched:!1}}),D(`AGENT_NOT_INSTALLED`);if(d===`if-missing`||d===`always`){u?T(y.cyan(`Dry run: would install ${o.displayName}.`)):C(y.cyan(`Installing ${o.displayName}...`));let e=await X(o,u);if(e===`timeout`)return D(`TIMEOUT`);if(!e.success)return E(y.red(`Failed to install ${o.displayName}.`)),1}else if(c){if(!(l||u?{install:!0}:await fe({type:`confirm`,name:`install`,message:`${o.displayName} is not installed. Would you like to install it?`,initial:!0})).install)return ae(y.yellow(`Installation cancelled.`)),1;u?T(y.cyan(`Dry run: would install ${o.displayName}.`)):C(y.cyan(`Installing ${o.displayName}...`));let e=await X(o,u);if(e===`timeout`)return D(`TIMEOUT`);if(!e.success)return E(y.red(`Failed to install ${o.displayName}.`)),1}else return Y({agent:{binaryName:o.binaryName,displayName:o.displayName,name:o.name},errorCode:`INTERACTION_REQUIRED`,errorMessage:`${o.displayName} is not installed and interactive installation is disabled.`,execution:{args:n,installGuidance:J(o,s.methods,n),installPolicy:d,installed:!1,interactive:c,launched:!1}}),D(`INTERACTION_REQUIRED`)}if(u)return we({agent:{binaryName:o.binaryName,displayName:o.displayName,name:o.name},execution:{args:n,installPolicy:d,installed:!0,interactive:c,launched:!1},message:`Dry run: would run ${[o.binaryName,...n].join(` `)}`}),0;try{return await Ee(t([o.binaryName,...n]),o.displayName)}catch(e){return E(y.red(`Failed to launch ${o.displayName}: ${e instanceof Error?e.message:String(e)}`)),1}}function J(e,t,n){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:f(e,t),label:c(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 Ce(e,t){let n=S(t,m(),{kind:`agent`,name:e});if(v().outputMode===`human`){E(y.red(n.error.message));return}l(g({action:`exec`,...n}),()=>{})}function Y(e){if(v().outputMode===`human`){E(y.red(e.errorMessage));let t=e.execution.installGuidance;t&&(T(y.dim(`Try: ${t.suggestedEnsureCommand}`)),T(y.dim(`Or: ${t.suggestedExecCommand}`)));return}l(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 we(e){if(v().outputMode===`human`){T(y.cyan(e.message));return}l(te({action:`exec`,data:{agent:e.agent,execution:e.execution},target:{kind:`agent`,name:e.agent.name}}),()=>{})}async function X(e,t=w()){let{timeoutMs:n}=v();if(n===void 0)return Z(e,t);let r,i=Z(e,t);try{let t=new Promise(e=>{r=setTimeout(()=>{e(`timeout`)},n)}),a=await Promise.race([i,t]);if(a===`timeout`){let t=await Te(i,n);return t?.success?(_(),t):t||(await u(),E(y.red(`Installing ${e.displayName} timed out after ${n}ms.`)),`timeout`)}return v().cancelled&&a.success&&_(),a}finally{r&&clearTimeout(r)}}async function Te(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function Z(e,t=w()){if(t)return{success:!0};try{return await ie(e)}catch(t){return o(t)?(E(y.red(t.message)),{success:!1}):(E(y.red(`Failed to install ${e.displayName}: ${t instanceof Error?t.message:String(t)}`)),{success:!1})}}async function Ee(e,t){let{timeoutMs:n}=v(),r,i,a;try{let o=new Promise(e=>{let n=n=>{r??=(async()=>(await u(),E(y.red(`${t} was cancelled by ${n}.`)),D(`CANCELLED`)))(),r.then(e)},a=()=>n(`SIGINT`),o=()=>n(`SIGTERM`);O.once(`SIGINT`,a),O.once(`SIGTERM`,o),i=()=>{O.off(`SIGINT`,a),O.off(`SIGTERM`,o)}}),s=Oe(e,()=>r);if(n===void 0)return await Promise.race([s,o]);let c=new Promise(e=>{a=setTimeout(()=>{e(`timeout`)},n)}),l=await Promise.race([s,o,c]);if(l===`timeout`){let e=await De(s,n);return e===void 0?(r??=(async()=>(await u(),E(y.red(`${t} timed out after ${n}ms.`)),D(`TIMEOUT`)))(),await r):(_(),e)}return l}finally{a&&clearTimeout(a),i?.()}}async function De(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function Oe(e,t){try{let n=await ee(e),r=t();return v().cancelled&&r?r:n}catch(e){let n=t();if(v().cancelled&&n)return n;throw e}}j.name(`quantex`).description(`统一的 AI Agent CLI 管理工具`).option(`--json`,`Output structured JSON`).option(`--output <mode>`,`Output mode: human, json, or ndjson`).option(`--non-interactive`,`Disable interactive prompts and confirmations`).option(`--yes`,`Automatically accept safe default confirmations`).option(`--quiet`,`Suppress non-essential human logs`).option(`--color <mode>`,`Color mode: auto, always, or never`).option(`--log-level <level>`,`Log level: silent, error, warn, info, or debug`).option(`--dry-run`,`Show what would happen without making changes`).option(`--refresh`,`Refresh cached version metadata before returning results`).option(`--no-cache`,`Bypass the local version cache for this command`).option(`--run-id <id>`,`Attach a run id to structured output and logs`).option(`--idempotency-key <key>`,`Deduplicate repeated mutating requests by client-supplied key`).option(`--timeout <duration>`,`Abort a command after the given duration, e.g. 500ms, 30s, 5m`).version(i()),j.hook(`preAction`,(e,t)=>{try{b(h(t.optsWithGlobals()))}catch(e){console.log(y.red(e instanceof Error?e.message:String(e))),O.exit(2)}}),j.hook(`postAction`,()=>{d()}),j.command(`schema`).argument(`[command]`,`Optional command name`).description(`查看结构化输出 schema`).action(async e=>{let{schemaCommand:t}=await import(`./schema-DOHQE2bD.mjs`);O.exitCode=await $({action:`schema`,run:()=>t(e),target:{kind:`system`,name:`schema`}})}),j.command(`commands`).description(`查看命令目录与稳定能力`).action(async()=>{let{commandsCommand:e}=await import(`./commands-BEF26wDR.mjs`);O.exitCode=await $({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})}),j.command(`capabilities`).description(`查看当前环境与 surface 能力`).action(async()=>{let{capabilitiesCommand:e}=await import(`./capabilities-BaC4XmCX.mjs`);O.exitCode=await $({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})}),j.command(`inspect <agent>`).description(`查看 agent 结构化状态`).action(async e=>{let{inspectCommand:t}=await import(`./inspect-DvCMlYtq.mjs`);O.exitCode=await $({action:`inspect`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`resolve <agent>`).description(`解析 agent 可执行入口`).action(async e=>{let{resolveCommand:t}=await import(`./resolve-D_Mf_ot8.mjs`);O.exitCode=await $({action:`resolve`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`install <agents...>`).alias(`i`).description(`安装指定 agent`).action(async e=>{let{installCommand:t}=await import(`./install-_LYCQPh6.mjs`);O.exitCode=await $({action:`install`,run:()=>t(e),target:e.length===1?{kind:`agent`,name:e[0]}:{kind:`agent`,name:[...e].sort().join(`,`)}})}),j.command(`ensure <agent>`).description(`确保指定 agent 已安装`).action(async e=>{let{ensureCommand:t}=await import(`./ensure-CrCJrMYq.mjs`);O.exitCode=await $({action:`ensure`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`exec <agent>`).description(`以显式策略启动 agent`).allowUnknownOption().option(`--install <policy>`,`Install policy: never, if-missing, always`,`never`).argument(`[args...]`,`Arguments passed through to the agent`).action(async(e,t,n,r)=>{let i=n.install;if(i!==`never`&&i!==`if-missing`&&i!==`always`){console.log(y.red(`Unknown install policy: ${i}`)),O.exitCode=2;return}let a=Ae(r);O.exitCode=await q(e,a.length>0?a:t,{install:i,nonInteractive:r.optsWithGlobals().nonInteractive})}),j.command(`update`).argument(`[agent]`,`Agent name or alias`).option(`--all`,`更新所有已安装的 agent`).alias(`u`).description(`更新指定 agent`).action(async(e,t)=>{let{updateCommand:n}=await import(`./update-Cckz9hVd.mjs`);O.exitCode=await $({action:`update`,run:()=>n(e,t.all??!1),target:{kind:`agent`,name:e}})}),j.command(`uninstall <agent>`).alias(`rm`).description(`卸载指定 agent`).action(async e=>{let{uninstallCommand:t}=await import(`./uninstall-1IbDy4rP.mjs`);O.exitCode=await $({action:`uninstall`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`list`).alias(`ls`).description(`列出所有支持的 agent`).action(async()=>{let{listCommand:e}=await import(`./list-C6iUd2OH.mjs`);O.exitCode=await $({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})}),j.command(`info <agent>`).description(`查看 agent 详细信息`).action(async e=>{let{infoCommand:t}=await import(`./info-BsRJCm6m.mjs`);O.exitCode=await $({action:`info`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`config`).argument(`[action]`,`Action: get, set, reset`).argument(`[key]`,`Config key`).argument(`[value]`,`Config value`).description(`配置管理`).action(async(e,t,n)=>{let{configCommand:r}=await import(`./config-OsdDt_Li.mjs`);O.exitCode=await $({action:`config`,run:()=>r(e,t,n),target:{kind:`config`,name:t}})}),j.command(`upgrade`).description(`升级 Quantex CLI`).option(`--channel <channel>`,`Update channel: stable or beta`).option(`--check`,`Only check whether an update is available`).action(async e=>{let{upgradeCommand:t}=await import(`./upgrade-Cg0JGxAX.mjs`);O.exitCode=await $({action:`upgrade`,run:()=>t({channel:e.channel===`beta`?`beta`:void 0,check:e.check??!1}),target:{kind:`self`,name:`quantex`}})}),j.command(`doctor`).description(`检查环境`).action(async()=>{let{doctorCommand:e}=await import(`./doctor-Do1o85vd.mjs`);O.exitCode=await $({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})});const ke=new Set([...j.commands.map(e=>e.name()),...j.commands.flatMap(e=>e.aliases()),`help`,`--help`,`--version`,`-v`]),Q=je(O.argv.slice(2),ke);if(Q?.error&&(console.log(y.red(Q.error)),O.exit(2)),Q&&re(Q.agentName)){try{b(h({color:Q.color,dryRun:Q.dryRun,idempotencyKey:Q.idempotencyKey,logLevel:Q.logLevel,noCache:Q.noCache,nonInteractive:Q.nonInteractive,quiet:Q.quiet,refresh:Q.refresh,runId:Q.runId,timeout:Q.timeout,yes:Q.yes}))}catch(e){console.log(y.red(e instanceof Error?e.message:String(e))),O.exit(2)}try{let e=await q(Q.agentName,Q.agentArgs,{assumeYes:Q.yes,dryRun:Q.dryRun,nonInteractive:Q.nonInteractive});O.exit(e)}finally{d()}}j.parse();function Ae(e){let t=e.processedArgs.at(-1);return Array.isArray(t)?t:e.args.slice(1)}function je(e,t){let n=O.stdin.isTTY===!1||O.stdout.isTTY===!1,r,i=!1,a=0,o,s=!1,c,l=!1,u=!1,d,f=!1,p=!1,m,h,g=!1;for(;a<e.length;){let _=e[a];if(_===`--json`){s=!0,a+=1;continue}if(_===`--output`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--output requires a value`};d=t,a+=2;continue}if(_===`--non-interactive`){u=!0,a+=1;continue}if(_===`--yes`){g=!0,a+=1;continue}if(_===`--quiet`){f=!0,a+=1;continue}if(_===`--color`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--color requires a value`};r=t,a+=2;continue}if(_===`--log-level`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--log-level requires a value`};c=t,a+=2;continue}if(_===`--dry-run`){i=!0,a+=1;continue}if(_===`--refresh`){p=!0,a+=1;continue}if(_===`--no-cache`){l=!0,a+=1;continue}if(_===`--idempotency-key`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--idempotency-key requires a value`};o=t,a+=2;continue}if(_===`--run-id`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--run-id requires a value`};m=t,a+=2;continue}if(_===`--timeout`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--timeout requires a value`};h=t,a+=2;continue}return _.startsWith(`-`)||t.has(_)?void 0:s||d===`json`||d===`ndjson`||n&&d!==`human`?{agentArgs:[],agentName:``,error:`Structured output is not supported for shortcut agent execution yet. Use a management command instead.`}:{agentArgs:e.slice(a+1),agentName:_,color:r,dryRun:i,idempotencyKey:o,logLevel:c,noCache:l,nonInteractive:u,quiet:f,refresh:p,runId:m,timeout:h,yes:g}}}async function $(e){return se(await pe(e))}export{};
|
|
2
|
+
import{A as e,K as t,L as n,O as r,T as i,U as a,Y as o,Z as s,_t as c,a as l,at as u,ct as d,gt as f,i as p,j as m,lt as h,n as g,ot as _,q as ee,r as te,s as ne,st as v,t as y,ut as b}from"./color-Brg6IVS7.mjs";import{p as re}from"./detect-CP166fHX.mjs";import{r as x,s as ie}from"./agents-5FZfizCZ.mjs";import{n as S}from"./lifecycle-errors-BtqYfS-v.mjs";import{a as ae,i as C,n as w,o as T,r as E,t as oe}from"./user-output-BaPTpUe_.mjs";import{n as se,t as D}from"./errors-BzXIrX6h.mjs";import{createHash as ce}from"node:crypto";import O from"node:process";import{mkdir as le,readFile as k,rm as ue,writeFile as de}from"node:fs/promises";import{join as A}from"node:path";import{program as j}from"commander";import fe from"prompts";function M(){return A(s(),`idempotency`)}function N(e){return A(M(),`${I(e)}.json`)}async function P(e){try{let t=JSON.parse(await k(N(e),`utf8`));if(Date.parse(t.expiresAt)<=Date.now()){await ue(N(e),{force:!0});return}return t}catch{return}}async function F(e,t){await le(M(),{recursive:!0});let n=new Date().toISOString(),r=new Date(Date.now()+864e5).toISOString(),i={action:t.action,createdAt:n,expiresAt:r,result:t.result,target:t.target};await de(N(e),`${JSON.stringify(i,null,2)}\n`,`utf8`)}function I(e){return ce(`sha256`).update(e,`utf8`).digest(`hex`)}const L=new Set([`doctor`,`upgrade`]);async function R(t){if(!t.ok||L.has(t.action))return;let r=v();if(r.outputMode!==`human`||r.quiet)return;let i=await ne();if(!i.latestVersion||!a(i.latestVersion,i.currentVersion))return;let o=await e(),s=Date.now();if(z(o.updateNoticeVersion,o.updateNoticeAt,i.latestVersion,s))return;let c=i.canAutoUpdate?"Run `quantex upgrade`.":"Run `quantex doctor` for source-specific update steps.";C(y.yellow(`Quantex CLI ${i.latestVersion} is available (current ${i.currentVersion}). ${c}`)),await n(i.latestVersion,new Date(s).toISOString())}function z(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 B(e,t){return e===void 0&&t===void 0?!0:e===void 0||t===void 0||e.kind!==t.kind||e.kind===`agent`&&(!e.name||!t.name)?!1:e.name===t.name}function V(e){return e.warnings.some(e=>e.code===`DRY_RUN`)}const pe=new Set([`install`,`ensure`,`update`]),me=new Set([`uninstall`]);function he(e){if(!(e?.kind!==`agent`||!e.name))return e.name.split(`,`).map(e=>e.trim()).filter(Boolean)}async function ge(e){if(!e.result.ok)return!0;let t=he(e.target);if(!t||t.length===0)return!0;if(pe.has(e.action)){for(let e of t)if(!(await x(e))?.inspection.inPath)return!1;return!0}if(me.has(e.action)){for(let e of t)if((await x(e))?.inspection.inPath)return!1;return!0}return!0}async function _e(e){try{return await ve(e)}catch(t){if(t instanceof r)return ye(e,t);throw t}}async function ve(e){let t=await be(e.action,e.target);if(t)return t;let n=v().timeoutMs;if(n===void 0)return G(e,()=>e.run().then(t=>U(e.action,e.target,t)));let r;try{let t=new Promise(t=>{r=setTimeout(()=>{t(K(e,n))},n)});return await G(e,async()=>{let i=Ce(e.run,()=>t),a=await Promise.race([i,t]);return!a.ok&&a.error?.code===`TIMEOUT`&&(a=await Se(i,n)??await Te(e,n)),r!==void 0&&(clearTimeout(r),r=void 0),U(e.action,e.target,a)})}finally{r&&clearTimeout(r)}}async function ye(e,t){return l(g({action:e.action,...S(t,m(),e.target)}),H)}function H(e){e.error&&console.error(y.red(e.error.message))}async function U(e,t,n){let r=await xe(e,t,n);try{await R({action:e,ok:r.ok})}catch{}return r}function W(e){e.error&&console.error(y.red(e.error.message))}async function be(e,t){let n=v();if(!n.idempotencyKey)return;let r=await P(n.idempotencyKey);if(!r)return;if(r.action!==e)return l(g({action:e,error:{code:`INVALID_ARGUMENT`,details:{existingAction:r.action,idempotencyKey:n.idempotencyKey},message:`Idempotency key ${n.idempotencyKey} was already used for ${r.action}.`},target:t}),W,{force:!0});if(!B(r.target,t)||V(r.result)||!await ge(r))return;let i={...r.result,meta:{...r.result.meta,mode:n.outputMode,runId:n.runId,timestamp:new Date().toISOString()}};return l(i,W,{force:!0}),i}async function xe(e,t,n){let r=v();return r.idempotencyKey&&n.ok&&!r.dryRun&&!V(n)&&await F(r.idempotencyKey,{action:e,result:n,target:t}),n}async function G(e,t){let n,r;try{let i=new Promise(t=>{let i=r=>{n??=Ee(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([we(t,()=>n),i])}finally{r?.()}}async function Se(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function Ce(e,t){try{return await e()}catch(e){if(v().cancelled)return t();throw e}}async function we(e,t){try{let n=await e(),r=t();return v().cancelled&&r?r:n}catch(e){let n=t();if(v().cancelled&&n)return n;throw e}}function K(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 Te(e,t){return await u(),p({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),l(K(e,t),W,{force:!0})}async function Ee(e,t){return await u(),p({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),l(g({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),W,{force:!0})}async function q(e,n,i={}){let a;try{a=await x(e)}catch(t){if(t instanceof r)return De(e,t),D(`STATE_READ_ERROR`);throw t}if(!a)return Y({agent:{name:e},errorCode:`AGENT_NOT_FOUND`,errorMessage:`Unknown agent: ${e}`,execution:{args:n,installPolicy:i.install??`prompt`,installed:!1,interactive:!1,launched:!1}}),D(`AGENT_NOT_FOUND`);let{agent:o,inspection:s}=a,c=i.nonInteractive?!1:v().interactive,l=i.assumeYes??oe(),u=i.dryRun??w(),d=i.install??`prompt`;if(!s.inPath){if(d===`never`)return Y({agent:{binaryName:o.binaryName,displayName:o.displayName,name:o.name},errorCode:`AGENT_NOT_INSTALLED`,errorMessage:`${o.displayName} is not installed.`,execution:{args:n,installGuidance:J(o,s.methods,n),installPolicy:d,installed:!1,interactive:c,launched:!1}}),D(`AGENT_NOT_INSTALLED`);if(d===`if-missing`||d===`always`){u?T(y.cyan(`Dry run: would install ${o.displayName}.`)):C(y.cyan(`Installing ${o.displayName}...`));let e=await X(o,u);if(e===`timeout`)return D(`TIMEOUT`);if(!e.success)return E(y.red(`Failed to install ${o.displayName}.`)),1}else if(c){if(!(l||u?{install:!0}:await fe({type:`confirm`,name:`install`,message:`${o.displayName} is not installed. Would you like to install it?`,initial:!0})).install)return ae(y.yellow(`Installation cancelled.`)),1;u?T(y.cyan(`Dry run: would install ${o.displayName}.`)):C(y.cyan(`Installing ${o.displayName}...`));let e=await X(o,u);if(e===`timeout`)return D(`TIMEOUT`);if(!e.success)return E(y.red(`Failed to install ${o.displayName}.`)),1}else return Y({agent:{binaryName:o.binaryName,displayName:o.displayName,name:o.name},errorCode:`INTERACTION_REQUIRED`,errorMessage:`${o.displayName} is not installed and interactive installation is disabled.`,execution:{args:n,installGuidance:J(o,s.methods,n),installPolicy:d,installed:!1,interactive:c,launched:!1}}),D(`INTERACTION_REQUIRED`)}if(u)return Oe({agent:{binaryName:o.binaryName,displayName:o.displayName,name:o.name},execution:{args:n,installPolicy:d,installed:!0,interactive:c,launched:!1},message:`Dry run: would run ${[o.binaryName,...n].join(` `)}`}),0;try{return await Ae(t([o.binaryName,...n]),o.displayName)}catch(e){return E(y.red(`Failed to launch ${o.displayName}: ${e instanceof Error?e.message:String(e)}`)),1}}function J(e,t,n){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:f(e,t),label:c(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 De(e,t){let n=S(t,m(),{kind:`agent`,name:e});if(v().outputMode===`human`){E(y.red(n.error.message));return}l(g({action:`exec`,...n}),()=>{})}function Y(e){if(v().outputMode===`human`){E(y.red(e.errorMessage));let t=e.execution.installGuidance;t&&(T(y.dim(`Try: ${t.suggestedEnsureCommand}`)),T(y.dim(`Or: ${t.suggestedExecCommand}`)));return}l(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 Oe(e){if(v().outputMode===`human`){T(y.cyan(e.message));return}l(te({action:`exec`,data:{agent:e.agent,execution:e.execution},target:{kind:`agent`,name:e.agent.name}}),()=>{})}async function X(e,t=w()){let{timeoutMs:n}=v();if(n===void 0)return Z(e,t);let r,i=Z(e,t);try{let t=new Promise(e=>{r=setTimeout(()=>{e(`timeout`)},n)}),a=await Promise.race([i,t]);if(a===`timeout`){let t=await ke(i,n);return t?.success?(_(),t):t||(await u(),E(y.red(`Installing ${e.displayName} timed out after ${n}ms.`)),`timeout`)}return v().cancelled&&a.success&&_(),a}finally{r&&clearTimeout(r)}}async function ke(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function Z(e,t=w()){if(t)return{success:!0};try{return await ie(e)}catch(t){return o(t)?(E(y.red(t.message)),{success:!1}):(E(y.red(`Failed to install ${e.displayName}: ${t instanceof Error?t.message:String(t)}`)),{success:!1})}}async function Ae(e,t){let{timeoutMs:n}=v(),r,i,a;try{let o=new Promise(e=>{let n=n=>{r??=(async()=>(await u(),E(y.red(`${t} was cancelled by ${n}.`)),D(`CANCELLED`)))(),r.then(e)},a=()=>n(`SIGINT`),o=()=>n(`SIGTERM`);O.once(`SIGINT`,a),O.once(`SIGTERM`,o),i=()=>{O.off(`SIGINT`,a),O.off(`SIGTERM`,o)}}),s=Me(e,()=>r);if(n===void 0)return await Promise.race([s,o]);let c=new Promise(e=>{a=setTimeout(()=>{e(`timeout`)},n)}),l=await Promise.race([s,o,c]);if(l===`timeout`){let e=await je(s,n);return e===void 0?(r??=(async()=>(await u(),E(y.red(`${t} timed out after ${n}ms.`)),D(`TIMEOUT`)))(),await r):(_(),e)}return l}finally{a&&clearTimeout(a),i?.()}}async function je(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function Me(e,t){try{let n=await ee(e),r=t();return v().cancelled&&r?r:n}catch(e){let n=t();if(v().cancelled&&n)return n;throw e}}j.name(`quantex`).description(`统一的 AI Agent CLI 管理工具`).option(`--json`,`Output structured JSON`).option(`--output <mode>`,`Output mode: human, json, or ndjson`).option(`--non-interactive`,`Disable interactive prompts and confirmations`).option(`--yes`,`Automatically accept safe default confirmations`).option(`--quiet`,`Suppress non-essential human logs`).option(`--color <mode>`,`Color mode: auto, always, or never`).option(`--log-level <level>`,`Log level: silent, error, warn, info, or debug`).option(`--dry-run`,`Show what would happen without making changes`).option(`--refresh`,`Refresh cached version metadata before returning results`).option(`--no-cache`,`Bypass the local version cache for this command`).option(`--run-id <id>`,`Attach a run id to structured output and logs`).option(`--idempotency-key <key>`,`Deduplicate repeated mutating requests by client-supplied key`).option(`--timeout <duration>`,`Abort a command after the given duration, e.g. 500ms, 30s, 5m`).version(i()),j.hook(`preAction`,(e,t)=>{try{b(h(t.optsWithGlobals()))}catch(e){console.log(y.red(e instanceof Error?e.message:String(e))),O.exit(2)}}),j.hook(`postAction`,()=>{d()}),j.command(`schema`).argument(`[command]`,`Optional command name`).description(`查看结构化输出 schema`).action(async e=>{let{schemaCommand:t}=await import(`./schema-CtXk-4vF.mjs`);O.exitCode=await $({action:`schema`,run:()=>t(e),target:{kind:`system`,name:`schema`}})}),j.command(`commands`).description(`查看命令目录与稳定能力`).action(async()=>{let{commandsCommand:e}=await import(`./commands-DuKcedi0.mjs`);O.exitCode=await $({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})}),j.command(`capabilities`).description(`查看当前环境与 surface 能力`).action(async()=>{let{capabilitiesCommand:e}=await import(`./capabilities-HlD6b-5Z.mjs`);O.exitCode=await $({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})}),j.command(`inspect <agent>`).description(`查看 agent 结构化状态`).action(async e=>{let{inspectCommand:t}=await import(`./inspect-Bw3vwutT.mjs`);O.exitCode=await $({action:`inspect`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`resolve <agent>`).description(`解析 agent 可执行入口`).action(async e=>{let{resolveCommand:t}=await import(`./resolve-D5ETKDnn.mjs`);O.exitCode=await $({action:`resolve`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`install <agents...>`).alias(`i`).description(`安装指定 agent`).action(async e=>{let{installCommand:t}=await import(`./install-D-wcBATz.mjs`);O.exitCode=await $({action:`install`,run:()=>t(e),target:e.length===1?{kind:`agent`,name:e[0]}:{kind:`agent`,name:[...e].sort().join(`,`)}})}),j.command(`ensure <agent>`).description(`确保指定 agent 已安装`).action(async e=>{let{ensureCommand:t}=await import(`./ensure-DGauKpfW.mjs`);O.exitCode=await $({action:`ensure`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`exec <agent>`).description(`以显式策略启动 agent`).allowUnknownOption().option(`--install <policy>`,`Install policy: never, if-missing, always`,`never`).argument(`[args...]`,`Arguments passed through to the agent`).action(async(e,t,n,r)=>{let i=n.install;if(i!==`never`&&i!==`if-missing`&&i!==`always`){console.log(y.red(`Unknown install policy: ${i}`)),O.exitCode=2;return}let a=Pe(r);O.exitCode=await q(e,a.length>0?a:t,{install:i,nonInteractive:r.optsWithGlobals().nonInteractive})}),j.command(`update`).argument(`[agent]`,`Agent name or alias`).option(`--all`,`更新所有已安装的 agent`).alias(`u`).description(`更新指定 agent`).action(async(e,t)=>{let{updateCommand:n}=await import(`./update-D0vp6Tzx.mjs`);O.exitCode=await $({action:`update`,run:()=>n(e,t.all??!1),target:{kind:`agent`,name:e}})}),j.command(`uninstall <agent>`).alias(`rm`).description(`卸载指定 agent`).action(async e=>{let{uninstallCommand:t}=await import(`./uninstall-Bt7lsRP5.mjs`);O.exitCode=await $({action:`uninstall`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`list`).alias(`ls`).description(`列出所有支持的 agent`).action(async()=>{let{listCommand:e}=await import(`./list-BkcM9ceq.mjs`);O.exitCode=await $({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})}),j.command(`info <agent>`).description(`查看 agent 详细信息`).action(async e=>{let{infoCommand:t}=await import(`./info-Bn9gifLW.mjs`);O.exitCode=await $({action:`info`,run:()=>t(e),target:{kind:`agent`,name:e}})}),j.command(`config`).argument(`[action]`,`Action: get, set, reset`).argument(`[key]`,`Config key`).argument(`[value]`,`Config value`).description(`配置管理`).action(async(e,t,n)=>{let{configCommand:r}=await import(`./config-C0RPwNR5.mjs`);O.exitCode=await $({action:`config`,run:()=>r(e,t,n),target:{kind:`config`,name:t}})}),j.command(`upgrade`).description(`升级 Quantex CLI`).option(`--channel <channel>`,`Update channel: stable or beta`).option(`--check`,`Only check whether an update is available`).action(async e=>{let{upgradeCommand:t}=await import(`./upgrade-LDNvlEIT.mjs`);O.exitCode=await $({action:`upgrade`,run:()=>t({channel:e.channel===`beta`?`beta`:void 0,check:e.check??!1}),target:{kind:`self`,name:`quantex`}})}),j.command(`doctor`).description(`检查环境`).action(async()=>{let{doctorCommand:e}=await import(`./doctor-DlQW_Ukl.mjs`);O.exitCode=await $({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})});const Ne=new Set([...j.commands.map(e=>e.name()),...j.commands.flatMap(e=>e.aliases()),`help`,`--help`,`--version`,`-v`]),Q=Fe(O.argv.slice(2),Ne);if(Q?.error&&(console.log(y.red(Q.error)),O.exit(2)),Q&&re(Q.agentName)){try{b(h({color:Q.color,dryRun:Q.dryRun,idempotencyKey:Q.idempotencyKey,logLevel:Q.logLevel,noCache:Q.noCache,nonInteractive:Q.nonInteractive,quiet:Q.quiet,refresh:Q.refresh,runId:Q.runId,timeout:Q.timeout,yes:Q.yes}))}catch(e){console.log(y.red(e instanceof Error?e.message:String(e))),O.exit(2)}try{let e=await q(Q.agentName,Q.agentArgs,{assumeYes:Q.yes,dryRun:Q.dryRun,nonInteractive:Q.nonInteractive});O.exit(e)}finally{d()}}j.parse();function Pe(e){let t=e.processedArgs.at(-1);return Array.isArray(t)?t:e.args.slice(1)}function Fe(e,t){let n=O.stdin.isTTY===!1||O.stdout.isTTY===!1,r,i=!1,a=0,o,s=!1,c,l=!1,u=!1,d,f=!1,p=!1,m,h,g=!1;for(;a<e.length;){let _=e[a];if(_===`--json`){s=!0,a+=1;continue}if(_===`--output`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--output requires a value`};d=t,a+=2;continue}if(_===`--non-interactive`){u=!0,a+=1;continue}if(_===`--yes`){g=!0,a+=1;continue}if(_===`--quiet`){f=!0,a+=1;continue}if(_===`--color`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--color requires a value`};r=t,a+=2;continue}if(_===`--log-level`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--log-level requires a value`};c=t,a+=2;continue}if(_===`--dry-run`){i=!0,a+=1;continue}if(_===`--refresh`){p=!0,a+=1;continue}if(_===`--no-cache`){l=!0,a+=1;continue}if(_===`--idempotency-key`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--idempotency-key requires a value`};o=t,a+=2;continue}if(_===`--run-id`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--run-id requires a value`};m=t,a+=2;continue}if(_===`--timeout`){let t=e[a+1];if(!t)return{agentArgs:[],agentName:``,error:`--timeout requires a value`};h=t,a+=2;continue}return _.startsWith(`-`)||t.has(_)?void 0:s||d===`json`||d===`ndjson`||n&&d!==`human`?{agentArgs:[],agentName:``,error:`Structured output is not supported for shortcut agent execution yet. Use a management command instead.`}:{agentArgs:e.slice(a+1),agentName:_,color:r,dryRun:i,idempotencyKey:o,logLevel:c,noCache:l,nonInteractive:u,quiet:f,refresh:p,runId:m,timeout:h,yes:g}}}async function $(e){return se(await _e(e))}export{};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{createHash as e,randomUUID as t}from"node:crypto";import n from"node:process";import{existsSync as r,mkdirSync as i,writeFileSync as a}from"node:fs";import{chmod as o,mkdir as s,mkdtemp as c,readFile as l,realpath as u,rename as d,rm as f,stat as p,writeFile as m}from"node:fs/promises";import{basename as h,dirname as g,join as _,win32 as v}from"node:path";import{homedir as ee}from"node:os";import{spawn as te}from"node:child_process";import{text as ne}from"node:stream/consumers";import{fileURLToPath as re}from"node:url";import{Buffer as ie}from"node:buffer";import ae from"picocolors";const oe={binary:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!1,canUpdate:!1,lifecycle:`unmanaged`},brew:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},bun:{canInstall:!0,canLookupLatestVersion:!0,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},cargo:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},deno:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},mise:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},npm:{canInstall:!0,canLookupLatestVersion:!0,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},pip:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},uv:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},script:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!1,canUpdate:!1,lifecycle:`unmanaged`},winget:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`}};function y(e){return oe[e]}function b(e){return y(e).lifecycle===`managed`}function se(e){return y(e).lifecycle}function x(e){return y(e).canUpdate}function ce(e){return y(e).canUninstall}function le(e){return y(e).canLookupLatestVersion}function ue(e,t){return e?t===`cask`?` (${e} cask)`:t===`id`?` (${e} id)`:` (${e})`:``}function S(e,t){if(t.packageName)return t.packageName;if(t.type===`cargo`)return e.packages?.cargo;if(t.type===`deno`)return e.packages?.deno;if(t.type===`mise`)return e.packages?.mise;if(t.type===`pip`)return e.packages?.pip;if(t.type===`uv`)return e.packages?.uv;if(t.type===`bun`||t.type===`npm`)return e.packages?.npm}function de(e){return e?x(e.installType):!1}function fe(e,t){return de(t)||!!e.selfUpdate}function pe(e){return!!e&&le(e.installType)}function me(e){return e.length>0&&e.every(e=>le(e.type))}function he(e){return b(e.type)?`${se(e.type)}/${e.type}${ue(e.packageName,e.packageTargetKind)}`:e.type===`script`?`unmanaged/script`:`unmanaged/binary`}function ge(e){return e?b(e.installType)?`managed via ${e.installType}${ue(e.packageName,e.packageTargetKind)}`:e.installType===`script`?`script installer`:`binary installer`:`detected in PATH`}function _e(e,t){let n=Oe({agent:e,installedState:t,methods:[]});return n===`managed`?`managed update`:n===`self-update`?`command update`:`manual update`}function ve(e,t){if(t.type===`bun`){let n=S(e,t);return n?`bun add -g ${n}`:``}if(t.type===`npm`){let n=S(e,t);return n?`npm i -g ${n}`:``}if(t.type===`brew`)return t.packageName?t.packageTargetKind===`cask`?`brew install --cask ${t.packageName}`:`brew install ${t.packageName}`:``;if(t.type===`cargo`){let n=S(e,t);return n?[`cargo`,`install`,n,...t.packageInstallArgs??[]].join(` `):``}if(t.type===`deno`){let n=S(e,t);return n?[`deno`,`install`,`--global`,...t.packageInstallArgs??[],n].join(` `):``}if(t.type===`mise`){let n=S(e,t);return n?`mise use --global ${n}`:``}if(t.type===`pip`){let n=S(e,t);return n?`pip install ${n}`:``}if(t.type===`uv`){let n=S(e,t);return n?[`uv`,`tool`,`install`,n,...t.packageInstallArgs??[]].join(` `):``}return t.type===`winget`?t.packageName?`winget install --id ${t.packageName} -e`:``:t.command??``}function ye(e,t,n){if(t)return pe(t)&&(t.packageName||e.packages?.npm)||void 0;if(!(!e.packages?.npm||!me(n)))return e.packages.npm}function be(e,t){let n=xe(t);if(n){let t=e.find(e=>e.type===n);if(t)return t}if(e.length!==1)return;let[r]=e;if(!(r.type!==`script`&&r.type!==`binary`))return r}function xe(e){if(!e)return;let t=e.replaceAll(`\\`,`/`);if(t.includes(`/.bun/bin/`)||t.includes(`/.bun/install/global/`))return`bun`;if(t.includes(`/.local/share/mise/shims/`)||t.includes(`/.mise/shims/`))return`mise`;if(t.includes(`/node_modules/.bin/`)||t.includes(`/node_modules/`))return`npm`}function Se(e){if(e.installedState)return b(e.installedState.installType)?e.installedState.installType:void 0;for(let t of e.methods)if(b(t.type)&&x(t.type))return t.type}const Ce={strategy:`managed`,canHandle:e=>!!Se(e),getManagedInstallerType:e=>Se(e)},we={strategy:`self-update`,canHandle:e=>!de(e.installedState)&&!!e.agent.selfUpdate},Te={strategy:`manual-hint`,canHandle:()=>!0},Ee=[Ce,we,Te];function De(e){return Ee.find(t=>t.canHandle(e))??Te}function Oe(e){return De(e).strategy}function ke(e){return fe(e.agent,e.installedState)}function Ae(e){let t=e.trim().match(/^(\d+)(ms|[smh])?$/);if(!t)return;let n=Number.parseInt(t[1],10),r=t[2]??`ms`;if(Number.isFinite(n))switch(r){case`ms`:return n;case`s`:return n*1e3;case`m`:return n*60*1e3;case`h`:return n*60*60*1e3;default:return}}let C,w=new Set;function T(){return C??=ze(),C}function je(e){w=new Set,C={...e,cacheMode:e.cacheMode??`default`,cancelled:e.cancelled??!1}}function Me(){C=void 0,w=new Set}function Ne(e={}){let r=n.stdin.isTTY!==!1,i=n.stdout.isTTY!==!1,a=!r||!i,o=e.json||e.output===`json`?`json`:e.output===`ndjson`?`ndjson`:e.output===`human`?`human`:a?`json`:`human`,s=e.timeout===void 0?void 0:Ae(e.timeout),c=Be(e.color),l=Ve(e.logLevel);if(e.timeout!==void 0&&s===void 0)throw Error(`Invalid timeout value: ${e.timeout}`);if(e.refresh&&e.noCache)throw Error(`Cannot combine --refresh with --no-cache.`);return{assumeYes:e.yes,cacheMode:e.noCache?`no-cache`:e.refresh?`refresh`:`default`,cancelled:!1,colorMode:c,dryRun:e.dryRun,idempotencyKey:e.idempotencyKey,interactive:!e.nonInteractive&&!a&&r&&i,logLevel:l,outputMode:o,quiet:e.quiet,runId:e.runId??n.env.QUANTEX_RUN_ID??t(),timeoutMs:s}}function Pe(){C&&(C.cancelled=!0)}function Fe(){C&&(C.cancelled=!1)}async function Ie(){Pe();let e=[...w];w.clear(),await Promise.allSettled(e.map(e=>Promise.resolve().then(e)))}function Le(e){return w.add(e),()=>{w.delete(e)}}function Re(e){let t=T();if(!t.freshness){t.freshness=e;return}t.freshness={fetchedAt:t.freshness.fetchedAt<=e.fetchedAt?t.freshness.fetchedAt:e.fetchedAt,source:t.freshness.source===`network`&&e.source===`network`?`network`:`cache`,staleAfter:t.freshness.staleAfter<=e.staleAfter?t.freshness.staleAfter:e.staleAfter}}function ze(){return Ne()}function Be(e){if(e===void 0||e===`auto`)return`auto`;if(e===`always`)return`always`;if(e===`never`)return`never`;throw Error(`Invalid color mode: ${e}`)}function Ve(e){if(e===void 0||e===`info`)return`info`;if(e===`silent`||e===`error`||e===`warn`||e===`debug`)return e;throw Error(`Invalid log level: ${e}`)}const He=`https://registry.npmjs.org`;function E(e){if(e)try{return new URL(e.trim()).toString().replace(/\/+$/,``)}catch{return}}function Ue(e,t,n){return`${E(n)}/${encodeURIComponent(e)}/${encodeURIComponent(t)}`}const We={defaultPackageManager:`bun`,networkRetries:2,networkTimeoutMs:1e4,npmBunUpdateStrategy:`latest-major`,selfUpdateChannel:`stable`,selfUpdateRegistry:void 0,versionCacheTtlHours:6};function D(){return _(n.env.HOME||n.env.USERPROFILE||ee(),`.quantex`)}function O(){return _(D(),`config.json`)}async function k(){let e={...We,...await Je()};return{...e,defaultPackageManager:Ge(e.defaultPackageManager)?e.defaultPackageManager:`bun`,networkRetries:A(e.networkRetries,2),networkTimeoutMs:A(e.networkTimeoutMs,1e4),npmBunUpdateStrategy:e.npmBunUpdateStrategy===`respect-semver`?`respect-semver`:`latest-major`,selfUpdateChannel:e.selfUpdateChannel===`beta`?`beta`:`stable`,selfUpdateRegistry:typeof e.selfUpdateRegistry==`string`?E(e.selfUpdateRegistry):void 0,versionCacheTtlHours:A(e.versionCacheTtlHours,6)}}function Ge(e){return e===`bun`||e===`mise`||e===`npm`}function Ke(e){return e===`latest-major`||e===`respect-semver`}async function qe(e){await s(D(),{recursive:!0}),await m(O(),`${JSON.stringify(e,null,2)}\n`,`utf8`)}async function Je(){try{let e=await l(O(),`utf8`),t=JSON.parse(e);return Ye(t)?t:{}}catch{return{}}}function A(e,t){if(typeof e==`number`&&Number.isInteger(e)&&e>0)return e;if(typeof e==`string`){let t=Number.parseInt(e,10);if(Number.isInteger(t)&&t>0)return t}return t}function Ye(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Xe=class extends Error{lockPath;resource;constructor(e,t){super(`Another quantex process is already using the ${e} lock.`),this.name=`ResourceLockError`,this.lockPath=t,this.resource=e}};function Ze(e){return e instanceof Xe}function Qe(e){let t=e.map(e=>e.trim().replaceAll(/[^\w.-]+/g,`-`).replaceAll(/-+/g,`-`).replaceAll(/^-|-$/g,``)).filter(Boolean),n=t.length>0?t:[`default`],r=n.slice(0,-1),i=`${n.at(-1)}.lock`;return _(D(),`locks`,...r,i)}async function j(e){let t=Qe(e.scope);return await s(g(t),{recursive:!0}),await $e(e.resource,t),async()=>{await f(t,{force:!0,recursive:!0})}}async function $e(e,t){try{i(t,{recursive:!1}),et(t);return}catch(e){if(!at(e))throw e}if(!await tt(t))throw new Xe(e,t);try{i(t,{recursive:!1}),et(t)}catch(n){throw at(n)?new Xe(e,t):n}}function et(e){a(_(e,`owner.json`),`${JSON.stringify({pid:n.pid,createdAt:new Date().toISOString()})}\n`,`utf8`)}async function tt(e){let t;try{t=await nt(e)}catch{return!1}return t&&it(t.pid)?!1:(await f(e,{force:!0,recursive:!0}),!0)}async function nt(e){let t=Date.now()+100;for(;Date.now()<t;){let t=await rt(e);if(t)return t;await new Promise(e=>setTimeout(e,2))}return await rt(e)}async function rt(e){try{let t=await l(_(e,`owner.json`),`utf8`),n=JSON.parse(t);return typeof n.pid==`number`&&Number.isInteger(n.pid)&&n.pid>0?{pid:n.pid}:void 0}catch(e){if(ot(e))return;throw e}}function it(e){try{return n.kill(e,0),!0}catch(e){return(typeof e==`object`&&e&&`code`in e?e.code:void 0)===`EPERM`}}function at(e){return typeof e==`object`&&!!e&&`code`in e&&e.code===`EEXIST`}function ot(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;return t===`ENOENT`||t===`ENOTDIR`}async function st(e,t){let n=await j(e);try{return await t()}finally{await n()}}async function ct(){try{return await j({resource:`self upgrade`,scope:[`self-upgrade`]})}catch(e){if(Ze(e))return;throw e}}const M=`quantex-cli`,lt=`https://github.com/Drswith/quantex-cli`,ut=`0.25.0`;function N(e,t={}){if(T().outputMode===`human`){let n=F(e,{...t,stdio:[`inherit`,`inherit`,`inherit`]});return{cleanup:Le(()=>gt(n)),outputDrained:Promise.resolve(),proc:n}}let n=F(e,{...t,stdio:[`ignore`,`pipe`,`pipe`]});return{cleanup:Le(()=>gt(n)),outputDrained:Promise.all([dt(n.stdout),dt(n.stderr)]).then(()=>void 0),proc:n}}async function P(e){let t=T();try{let n=await e.proc.exited;return await e.outputDrained,t.cancelled?1:n}finally{e.cleanup()}}function F(e,t={}){let n=mt();if(n)return ht(e,t,n);let[r,...i]=e;if(!r)throw Error(`spawnCommand requires a non-empty command array.`);let a=te(r,i,{...t,shell:t.shell??pt(r)});return{get exitCode(){return a.exitCode},pid:a.pid,stderr:a.stderr,stdout:a.stdout,exited:ft(a),kill:a.kill.bind(a),unref:()=>a.unref()}}async function I(e){let[t,n,r]=await Promise.all([L(e.stdout),L(e.stderr),e.exited]);return{exitCode:r,stderr:n,stdout:t}}async function dt(e){if(!e)return;let t=await L(e);t&&n.stderr.write(t)}async function ft(e){return new Promise((t,n)=>{e.once(`error`,n),e.once(`close`,e=>{t(typeof e==`number`?e:1)})})}async function L(e){return e?typeof e==`string`?e:typeof e.getReader==`function`?new Response(e).text():ne(e):``}function pt(e){return n.platform!==`win32`||e.includes(`/`)||e.includes(`\\`)?!1:!/\.[a-z0-9]+$/i.test(e)}function mt(){let e=globalThis.Bun?.spawn;return typeof e==`function`?e:void 0}function ht(e,t,n){let r=n([...e],t);return{get exitCode(){return r.exitCode},pid:r.pid,stderr:r.stderr,stdout:r.stdout,exited:r.exited.then(()=>typeof r.exitCode==`number`?r.exitCode:1),kill:e=>r.kill?.(e)??!1,unref:()=>r.unref?.()}}async function gt(e){n.platform===`win32`&&e.pid!==void 0&&await vt(_t(e.pid),2e3);try{e.kill?.(`SIGTERM`)}catch{}await vt(e.exited.then(()=>void 0).catch(()=>void 0),2e3)}async function _t(e){await new Promise(t=>{let n=te(`taskkill.exe`,[`/PID`,String(e),`/T`,`/F`],{stdio:[`ignore`,`ignore`,`ignore`],windowsHide:!0});n.once(`error`,()=>t()),n.once(`close`,()=>t())})}async function vt(e,t){let n;try{await Promise.race([e,new Promise(e=>{n=setTimeout(e,t)})])}finally{n&&clearTimeout(n)}}async function R(e,t){let n=await yt(e,t,`json`);if(n)try{return JSON.parse(n)}catch{return}}async function yt(e,t,n=`text`){let r=await k(),i=r.versionCacheTtlHours*60*60*1e3,a=T().cacheMode,o=a===`no-cache`?{entries:{}}:await xt(),s=o.entries[t],c=Date.now();if(a===`default`&&s&&s.expiresAt>c)return z(s,i),s.body;let l=await bt(e,{headers:a!==`no-cache`&&s?.etag?{"If-None-Match":s.etag}:void 0,retries:r.networkRetries,timeoutMs:r.networkTimeoutMs});if(!l)return s&&z(s,i),s?.body;if(l.status===304&&s)return o.entries[t]={...s,expiresAt:c+i,fetchedAt:c},a!==`no-cache`&&await St(o),wt(c,c+i),s.body;if(!l.ok)return s&&z(s,i),s?.body;let u=await l.text();if(n===`json`)try{JSON.parse(u)}catch{return s&&z(s,i),s?.body}let d={body:u,etag:l.headers.get(`etag`)??void 0,expiresAt:c+i,fetchedAt:c};return a!==`no-cache`&&(o.entries[t]=d,await St(o)),wt(c,c+i),u}async function bt(e,t){for(let n=0;n<=t.retries;n++){let r=new AbortController,i=setTimeout(()=>r.abort(),t.timeoutMs);try{return await fetch(e,{headers:t.headers,signal:r.signal})}catch{if(n===t.retries)return}finally{clearTimeout(i)}}}async function xt(){try{return JSON.parse(await l(Ct(),`utf8`))}catch{return{entries:{}}}}async function St(e){await s(_(D(),`cache`),{recursive:!0}),await m(Ct(),`${JSON.stringify(e,null,2)}\n`,`utf8`)}function Ct(){return _(D(),`cache`,`versions.json`)}function z(e,t){let n=e.fetchedAt??Math.max(0,e.expiresAt-t);Re({fetchedAt:new Date(n).toISOString(),source:`cache`,staleAfter:new Date(e.expiresAt).toISOString()})}function wt(e,t){Re({fetchedAt:new Date(e).toISOString(),source:`network`,staleAfter:new Date(t).toISOString()})}const Tt=/v?(\d+\.\d+\.\d+(?:-[a-z0-9.]+)?)/i;function Et(e,t){if(t)return t(e);let n=e.trim().split(`
|
|
1
|
+
import{createHash as e,randomUUID as t}from"node:crypto";import n from"node:process";import{existsSync as r,mkdirSync as i,writeFileSync as a}from"node:fs";import{chmod as o,mkdir as s,mkdtemp as c,readFile as l,realpath as u,rename as d,rm as f,stat as p,writeFile as m}from"node:fs/promises";import{basename as h,dirname as g,join as _,win32 as v}from"node:path";import{homedir as ee}from"node:os";import{spawn as te}from"node:child_process";import{text as ne}from"node:stream/consumers";import{fileURLToPath as re}from"node:url";import{Buffer as ie}from"node:buffer";import ae from"picocolors";const oe={binary:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!1,canUpdate:!1,lifecycle:`unmanaged`},brew:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},bun:{canInstall:!0,canLookupLatestVersion:!0,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},cargo:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},deno:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},mise:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},npm:{canInstall:!0,canLookupLatestVersion:!0,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},pip:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},uv:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`},script:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!1,canUpdate:!1,lifecycle:`unmanaged`},winget:{canInstall:!0,canLookupLatestVersion:!1,canUninstall:!0,canUpdate:!0,lifecycle:`managed`}};function y(e){return oe[e]}function b(e){return y(e).lifecycle===`managed`}function se(e){return y(e).lifecycle}function x(e){return y(e).canUpdate}function ce(e){return y(e).canUninstall}function le(e){return y(e).canLookupLatestVersion}function ue(e,t){return e?t===`cask`?` (${e} cask)`:t===`id`?` (${e} id)`:` (${e})`:``}function S(e,t){if(t.packageName)return t.packageName;if(t.type===`cargo`)return e.packages?.cargo;if(t.type===`deno`)return e.packages?.deno;if(t.type===`mise`)return e.packages?.mise;if(t.type===`pip`)return e.packages?.pip;if(t.type===`uv`)return e.packages?.uv;if(t.type===`bun`||t.type===`npm`)return e.packages?.npm}function de(e){return e?x(e.installType):!1}function fe(e,t){return de(t)||!!e.selfUpdate}function pe(e){return!!e&&le(e.installType)}function me(e){return e.length>0&&e.every(e=>le(e.type))}function he(e){return b(e.type)?`${se(e.type)}/${e.type}${ue(e.packageName,e.packageTargetKind)}`:e.type===`script`?`unmanaged/script`:`unmanaged/binary`}function ge(e){return e?b(e.installType)?`managed via ${e.installType}${ue(e.packageName,e.packageTargetKind)}`:e.installType===`script`?`script installer`:`binary installer`:`detected in PATH`}function _e(e,t){let n=Oe({agent:e,installedState:t,methods:[]});return n===`managed`?`managed update`:n===`self-update`?`command update`:`manual update`}function ve(e,t){if(t.type===`bun`){let n=S(e,t);return n?`bun add -g ${n}`:``}if(t.type===`npm`){let n=S(e,t);return n?`npm i -g ${n}`:``}if(t.type===`brew`)return t.packageName?t.packageTargetKind===`cask`?`brew install --cask ${t.packageName}`:`brew install ${t.packageName}`:``;if(t.type===`cargo`){let n=S(e,t);return n?[`cargo`,`install`,n,...t.packageInstallArgs??[]].join(` `):``}if(t.type===`deno`){let n=S(e,t);return n?[`deno`,`install`,`--global`,...t.packageInstallArgs??[],n].join(` `):``}if(t.type===`mise`){let n=S(e,t);return n?`mise use --global ${n}`:``}if(t.type===`pip`){let n=S(e,t);return n?`pip install ${n}`:``}if(t.type===`uv`){let n=S(e,t);return n?[`uv`,`tool`,`install`,n,...t.packageInstallArgs??[]].join(` `):``}return t.type===`winget`?t.packageName?`winget install --id ${t.packageName} -e`:``:t.command??``}function ye(e,t,n){if(t)return pe(t)&&(t.packageName||e.packages?.npm)||void 0;if(!(!e.packages?.npm||!me(n)))return e.packages.npm}function be(e,t){let n=xe(t);if(n){let t=e.find(e=>e.type===n);if(t)return t}if(e.length!==1)return;let[r]=e;if(!(r.type!==`script`&&r.type!==`binary`))return r}function xe(e){if(!e)return;let t=e.replaceAll(`\\`,`/`);if(t.includes(`/.bun/bin/`)||t.includes(`/.bun/install/global/`))return`bun`;if(t.includes(`/.local/share/mise/shims/`)||t.includes(`/.mise/shims/`))return`mise`;if(t.includes(`/node_modules/.bin/`)||t.includes(`/node_modules/`))return`npm`}function Se(e){if(e.installedState)return b(e.installedState.installType)?e.installedState.installType:void 0;for(let t of e.methods)if(b(t.type)&&x(t.type))return t.type}const Ce={strategy:`managed`,canHandle:e=>!!Se(e),getManagedInstallerType:e=>Se(e)},we={strategy:`self-update`,canHandle:e=>!de(e.installedState)&&!!e.agent.selfUpdate},Te={strategy:`manual-hint`,canHandle:()=>!0},Ee=[Ce,we,Te];function De(e){return Ee.find(t=>t.canHandle(e))??Te}function Oe(e){return De(e).strategy}function ke(e){return fe(e.agent,e.installedState)}function Ae(e){let t=e.trim().match(/^(\d+)(ms|[smh])?$/);if(!t)return;let n=Number.parseInt(t[1],10),r=t[2]??`ms`;if(Number.isFinite(n))switch(r){case`ms`:return n;case`s`:return n*1e3;case`m`:return n*60*1e3;case`h`:return n*60*60*1e3;default:return}}let C,w=new Set;function T(){return C??=ze(),C}function je(e){w=new Set,C={...e,cacheMode:e.cacheMode??`default`,cancelled:e.cancelled??!1}}function Me(){C=void 0,w=new Set}function Ne(e={}){let r=n.stdin.isTTY!==!1,i=n.stdout.isTTY!==!1,a=!r||!i,o=e.json||e.output===`json`?`json`:e.output===`ndjson`?`ndjson`:e.output===`human`?`human`:a?`json`:`human`,s=e.timeout===void 0?void 0:Ae(e.timeout),c=Be(e.color),l=Ve(e.logLevel);if(e.timeout!==void 0&&s===void 0)throw Error(`Invalid timeout value: ${e.timeout}`);if(e.refresh&&e.noCache)throw Error(`Cannot combine --refresh with --no-cache.`);return{assumeYes:e.yes,cacheMode:e.noCache?`no-cache`:e.refresh?`refresh`:`default`,cancelled:!1,colorMode:c,dryRun:e.dryRun,idempotencyKey:e.idempotencyKey,interactive:!e.nonInteractive&&!a&&r&&i,logLevel:l,outputMode:o,quiet:e.quiet,runId:e.runId??n.env.QUANTEX_RUN_ID??t(),timeoutMs:s}}function Pe(){C&&(C.cancelled=!0)}function Fe(){C&&(C.cancelled=!1)}async function Ie(){Pe();let e=[...w];w.clear(),await Promise.allSettled(e.map(e=>Promise.resolve().then(e)))}function Le(e){return w.add(e),()=>{w.delete(e)}}function Re(e){let t=T();if(!t.freshness){t.freshness=e;return}t.freshness={fetchedAt:t.freshness.fetchedAt<=e.fetchedAt?t.freshness.fetchedAt:e.fetchedAt,source:t.freshness.source===`network`&&e.source===`network`?`network`:`cache`,staleAfter:t.freshness.staleAfter<=e.staleAfter?t.freshness.staleAfter:e.staleAfter}}function ze(){return Ne()}function Be(e){if(e===void 0||e===`auto`)return`auto`;if(e===`always`)return`always`;if(e===`never`)return`never`;throw Error(`Invalid color mode: ${e}`)}function Ve(e){if(e===void 0||e===`info`)return`info`;if(e===`silent`||e===`error`||e===`warn`||e===`debug`)return e;throw Error(`Invalid log level: ${e}`)}const He=`https://registry.npmjs.org`;function E(e){if(e)try{return new URL(e.trim()).toString().replace(/\/+$/,``)}catch{return}}function Ue(e,t,n){return`${E(n)}/${encodeURIComponent(e)}/${encodeURIComponent(t)}`}const We={defaultPackageManager:`bun`,networkRetries:2,networkTimeoutMs:1e4,npmBunUpdateStrategy:`latest-major`,selfUpdateChannel:`stable`,selfUpdateRegistry:void 0,versionCacheTtlHours:6};function D(){return _(n.env.HOME||n.env.USERPROFILE||ee(),`.quantex`)}function O(){return _(D(),`config.json`)}async function k(){let e={...We,...await Je()};return{...e,defaultPackageManager:Ge(e.defaultPackageManager)?e.defaultPackageManager:`bun`,networkRetries:A(e.networkRetries,2),networkTimeoutMs:A(e.networkTimeoutMs,1e4),npmBunUpdateStrategy:e.npmBunUpdateStrategy===`respect-semver`?`respect-semver`:`latest-major`,selfUpdateChannel:e.selfUpdateChannel===`beta`?`beta`:`stable`,selfUpdateRegistry:typeof e.selfUpdateRegistry==`string`?E(e.selfUpdateRegistry):void 0,versionCacheTtlHours:A(e.versionCacheTtlHours,6)}}function Ge(e){return e===`bun`||e===`mise`||e===`npm`}function Ke(e){return e===`latest-major`||e===`respect-semver`}async function qe(e){await s(D(),{recursive:!0}),await m(O(),`${JSON.stringify(e,null,2)}\n`,`utf8`)}async function Je(){try{let e=await l(O(),`utf8`),t=JSON.parse(e);return Ye(t)?t:{}}catch{return{}}}function A(e,t){if(typeof e==`number`&&Number.isInteger(e)&&e>0)return e;if(typeof e==`string`){let t=Number.parseInt(e,10);if(Number.isInteger(t)&&t>0)return t}return t}function Ye(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Xe=class extends Error{lockPath;resource;constructor(e,t){super(`Another quantex process is already using the ${e} lock.`),this.name=`ResourceLockError`,this.lockPath=t,this.resource=e}};function Ze(e){return e instanceof Xe}function Qe(e){let t=e.map(e=>e.trim().replaceAll(/[^\w.-]+/g,`-`).replaceAll(/-+/g,`-`).replaceAll(/^-|-$/g,``)).filter(Boolean),n=t.length>0?t:[`default`],r=n.slice(0,-1),i=`${n.at(-1)}.lock`;return _(D(),`locks`,...r,i)}async function j(e){let t=Qe(e.scope);return await s(g(t),{recursive:!0}),await $e(e.resource,t),async()=>{await f(t,{force:!0,recursive:!0})}}async function $e(e,t){try{i(t,{recursive:!1}),et(t);return}catch(e){if(!at(e))throw e}if(!await tt(t))throw new Xe(e,t);try{i(t,{recursive:!1}),et(t)}catch(n){throw at(n)?new Xe(e,t):n}}function et(e){a(_(e,`owner.json`),`${JSON.stringify({pid:n.pid,createdAt:new Date().toISOString()})}\n`,`utf8`)}async function tt(e){let t;try{t=await nt(e)}catch{return!1}return t&&it(t.pid)?!1:(await f(e,{force:!0,recursive:!0}),!0)}async function nt(e){let t=Date.now()+100;for(;Date.now()<t;){let t=await rt(e);if(t)return t;await new Promise(e=>setTimeout(e,2))}return await rt(e)}async function rt(e){try{let t=await l(_(e,`owner.json`),`utf8`),n=JSON.parse(t);return typeof n.pid==`number`&&Number.isInteger(n.pid)&&n.pid>0?{pid:n.pid}:void 0}catch(e){if(ot(e))return;throw e}}function it(e){try{return n.kill(e,0),!0}catch(e){return(typeof e==`object`&&e&&`code`in e?e.code:void 0)===`EPERM`}}function at(e){return typeof e==`object`&&!!e&&`code`in e&&e.code===`EEXIST`}function ot(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;return t===`ENOENT`||t===`ENOTDIR`}async function st(e,t){let n=await j(e);try{return await t()}finally{await n()}}async function ct(){try{return await j({resource:`self upgrade`,scope:[`self-upgrade`]})}catch(e){if(Ze(e))return;throw e}}const M=`quantex-cli`,lt=`https://github.com/Drswith/quantex-cli`,ut=`0.25.2`;function N(e,t={}){if(T().outputMode===`human`){let n=F(e,{...t,stdio:[`inherit`,`inherit`,`inherit`]});return{cleanup:Le(()=>gt(n)),outputDrained:Promise.resolve(),proc:n}}let n=F(e,{...t,stdio:[`ignore`,`pipe`,`pipe`]});return{cleanup:Le(()=>gt(n)),outputDrained:Promise.all([dt(n.stdout),dt(n.stderr)]).then(()=>void 0),proc:n}}async function P(e){let t=T();try{let n=await e.proc.exited;return await e.outputDrained,t.cancelled?1:n}finally{e.cleanup()}}function F(e,t={}){let n=mt();if(n)return ht(e,t,n);let[r,...i]=e;if(!r)throw Error(`spawnCommand requires a non-empty command array.`);let a=te(r,i,{...t,shell:t.shell??pt(r)});return{get exitCode(){return a.exitCode},pid:a.pid,stderr:a.stderr,stdout:a.stdout,exited:ft(a),kill:a.kill.bind(a),unref:()=>a.unref()}}async function I(e){let[t,n,r]=await Promise.all([L(e.stdout),L(e.stderr),e.exited]);return{exitCode:r,stderr:n,stdout:t}}async function dt(e){if(!e)return;let t=await L(e);t&&n.stderr.write(t)}async function ft(e){return new Promise((t,n)=>{e.once(`error`,n),e.once(`close`,e=>{t(typeof e==`number`?e:1)})})}async function L(e){return e?typeof e==`string`?e:typeof e.getReader==`function`?new Response(e).text():ne(e):``}function pt(e){return n.platform!==`win32`||e.includes(`/`)||e.includes(`\\`)?!1:!/\.[a-z0-9]+$/i.test(e)}function mt(){let e=globalThis.Bun?.spawn;return typeof e==`function`?e:void 0}function ht(e,t,n){let r=n([...e],t);return{get exitCode(){return r.exitCode},pid:r.pid,stderr:r.stderr,stdout:r.stdout,exited:r.exited.then(()=>typeof r.exitCode==`number`?r.exitCode:1),kill:e=>r.kill?.(e)??!1,unref:()=>r.unref?.()}}async function gt(e){n.platform===`win32`&&e.pid!==void 0&&await vt(_t(e.pid),2e3);try{e.kill?.(`SIGTERM`)}catch{}await vt(e.exited.then(()=>void 0).catch(()=>void 0),2e3)}async function _t(e){await new Promise(t=>{let n=te(`taskkill.exe`,[`/PID`,String(e),`/T`,`/F`],{stdio:[`ignore`,`ignore`,`ignore`],windowsHide:!0});n.once(`error`,()=>t()),n.once(`close`,()=>t())})}async function vt(e,t){let n;try{await Promise.race([e,new Promise(e=>{n=setTimeout(e,t)})])}finally{n&&clearTimeout(n)}}async function R(e,t){let n=await yt(e,t,`json`);if(n)try{return JSON.parse(n)}catch{return}}async function yt(e,t,n=`text`){let r=await k(),i=r.versionCacheTtlHours*60*60*1e3,a=T().cacheMode,o=a===`no-cache`?{entries:{}}:await xt(),s=o.entries[t],c=Date.now();if(a===`default`&&s&&s.expiresAt>c)return z(s,i),s.body;let l=await bt(e,{headers:a!==`no-cache`&&s?.etag?{"If-None-Match":s.etag}:void 0,retries:r.networkRetries,timeoutMs:r.networkTimeoutMs});if(!l)return s&&z(s,i),s?.body;if(l.status===304&&s)return o.entries[t]={...s,expiresAt:c+i,fetchedAt:c},a!==`no-cache`&&await St(o),wt(c,c+i),s.body;if(!l.ok)return s&&z(s,i),s?.body;let u=await l.text();if(n===`json`)try{JSON.parse(u)}catch{return s&&z(s,i),s?.body}let d={body:u,etag:l.headers.get(`etag`)??void 0,expiresAt:c+i,fetchedAt:c};return a!==`no-cache`&&(o.entries[t]=d,await St(o)),wt(c,c+i),u}async function bt(e,t){for(let n=0;n<=t.retries;n++){let r=new AbortController,i=setTimeout(()=>r.abort(),t.timeoutMs);try{return await fetch(e,{headers:t.headers,signal:r.signal})}catch{if(n===t.retries)return}finally{clearTimeout(i)}}}async function xt(){try{return JSON.parse(await l(Ct(),`utf8`))}catch{return{entries:{}}}}async function St(e){await s(_(D(),`cache`),{recursive:!0}),await m(Ct(),`${JSON.stringify(e,null,2)}\n`,`utf8`)}function Ct(){return _(D(),`cache`,`versions.json`)}function z(e,t){let n=e.fetchedAt??Math.max(0,e.expiresAt-t);Re({fetchedAt:new Date(n).toISOString(),source:`cache`,staleAfter:new Date(e.expiresAt).toISOString()})}function wt(e,t){Re({fetchedAt:new Date(e).toISOString(),source:`network`,staleAfter:new Date(t).toISOString()})}const Tt=/v?(\d+\.\d+\.\d+(?:-[a-z0-9.]+)?)/i;function Et(e,t){if(t)return t(e);let n=e.trim().split(`
|
|
2
2
|
`)[0],r=n.match(Tt);return r?r[1]:n||void 0}function Dt(e,t){let n=At(e),r=At(t);if(!(!n||!r)){for(let e=0;e<3;e+=1){let t=n.core[e]-r.core[e];if(t!==0)return t>0?1:-1}return jt(n.prerelease,r.prerelease)}}function B(e,t){return Dt(e,t)===1}async function V(e,t){let n=t?.command??[e,`--version`];try{let{exitCode:e,stdout:r}=await I(F(n));return e===0?Et(r,t?.parser):void 0}catch{return}}async function H(e,t=`latest`,n={}){try{let r=E(n.registry)??`https://registry.npmjs.org`;return(await R(Ue(e,t,r),`npm:${r}:${e}:${t}`))?.version}catch{return}}async function Ot(e){try{let{exitCode:t,stdout:r}=await I(F([n.platform===`win32`?`where`:`which`,e]));return t===0?r.trim().split(`
|
|
3
|
-
`)[0]:void 0}catch{return}}async function kt(e){if(e)try{return await u(e)}catch{return e}}function At(e){let t=e.trim().match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9a-z.-]+))?$/i);if(t)return{core:[Number(t[1]),Number(t[2]),Number(t[3])],prerelease:t[4]?t[4].split(`.`):[]}}function jt(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return 1;if(t.length===0)return-1;let n=Math.max(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r],i=t[r];if(n===void 0)return-1;if(i===void 0)return 1;if(n===i)continue;let a=/^\d+$/.test(n),o=/^\d+$/.test(i);return a&&o?Number(n)>Number(i)?1:-1:a?-1:o||n>i?1:-1}return 0}var U=class extends Error{constructor(e,t){super(e,t),this.name=`StateFileError`}};const Mt={installedAgents:{},self:{}};function W(){return _(D(),`state.json`)}async function G(){return Bt()}async function Nt(e){let t=await j({resource:`state`,scope:[`state`]});try{await Yt(e)}finally{await t()}}async function Pt(e){return(await G()).installedAgents[e]}async function Ft(e){await q(t=>{t.installedAgents[e.agentName]=e})}async function It(e){await q(t=>{delete t.installedAgents[e]})}async function Lt(){return(await G()).self}async function Rt(e){await q(t=>{t.self.installSource=e})}async function zt(e,t){await q(n=>{n.self.updateNoticeVersion=e,n.self.updateNoticeAt=t})}async function Bt(){try{let e=JSON.parse(await l(W(),`utf8`));if(!K(e))throw new U(`Failed to read Quantex state file: root value must be an object.`);let t=qt(e.self);return{installedAgents:Ht(e.installedAgents),self:t}}catch(e){if(Xt(e))return{...Mt};throw e instanceof U?e:new U(`Failed to read Quantex state file.`,{cause:e})}}const Vt=new Set([`binary`,`brew`,`bun`,`cargo`,`deno`,`mise`,`npm`,`pip`,`script`,`uv`,`winget`]);function Ht(e){if(e===void 0)return{};if(!K(e))throw new U(`Failed to read Quantex state file: installedAgents must be an object.`);let t={};for(let[n,r]of Object.entries(e))t[n]=Ut(n,r);return t}function Ut(e,t){if(!K(t))throw new U(`Failed to read Quantex state file: installed agent "${e}" must be an object.`);if(typeof t.agentName!=`string`||t.agentName!==e)throw new U(`Failed to read Quantex state file: installed agent "${e}" has an invalid agentName.`);if(!Wt(t.installType))throw new U(`Failed to read Quantex state file: installed agent "${e}" has an invalid installType.`);let n={agentName:e,installType:t.installType};if(typeof t.binaryName==`string`&&(n.binaryName=t.binaryName),Array.isArray(t.packageInstallArgs)&&t.packageInstallArgs.every(Kt)&&(n.packageInstallArgs=t.packageInstallArgs),typeof t.packageName==`string`){if(t.packageName.length===0&&b(t.installType))throw new U(`Failed to read Quantex state file: installed agent "${e}" has an empty packageName.`);n.packageName=t.packageName}return Gt(t.packageTargetKind)&&(n.packageTargetKind=t.packageTargetKind),typeof t.command==`string`&&(n.command=t.command),n}function Wt(e){return typeof e==`string`&&Vt.has(e)}function Gt(e){return e===`package`||e===`cask`||e===`id`}function Kt(e){return typeof e==`string`}function qt(e){if(!K(e))return{};let t={...e};return Jt(e.installSource)?t.installSource=e.installSource:delete t.installSource,typeof e.updateNoticeAt==`string`?t.updateNoticeAt=e.updateNoticeAt:delete t.updateNoticeAt,typeof e.updateNoticeVersion==`string`?t.updateNoticeVersion=e.updateNoticeVersion:delete t.updateNoticeVersion,t}function Jt(e){return e===`binary`||e===`bun`||e===`npm`||e===`source`||e===`unknown`}function K(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function Yt(e){await s(D(),{recursive:!0});let t=W(),r=`${t}.tmp-${n.pid}`,i=`${JSON.stringify(e,null,2)}\n`;try{await m(r,i,`utf8`),await d(r,t)}catch(e){throw await f(r,{force:!0}),e}}function Xt(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;return t===`ENOENT`||t===`ENOTDIR`}async function q(e){let t=await j({resource:`state`,scope:[`state`]});try{let t=await Bt();await e(t),await Yt(t)}finally{await t()}}function Zt(e){return e.replaceAll(`\\`,`/`).toLowerCase()}function J(e=n.execPath){if(h(Zt(e)).endsWith(`.exe`))return`quantex-windows-x64.exe`;if(n.platform===`darwin`)return n.arch===`arm64`?`quantex-darwin-arm64`:`quantex-darwin-x64`;if(n.platform===`linux`)return n.arch===`arm64`?`quantex-linux-arm64`:`quantex-linux-x64`}function Qt(e=n.execPath){let t=J(e);if(t)return`${lt}/releases/latest/download/${t}`}function $t(e,t,r=n.env){return e||(r.QUANTEX_UPDATE_CHANNEL===`beta`?`beta`:r.QUANTEX_UPDATE_CHANNEL===`stable`?`stable`:t===`beta`?`beta`:`stable`)}async function en(e){let t=await R(await tn(e),`self:manifest:${e}`);if(!t)throw Error(`Failed to download release manifest.`);return t}async function tn(e){if(e===`stable`)return`${lt}/releases/latest/download/manifest.json`;let t=(await nn(e)).assets.find(e=>e.name===`manifest.json`);if(!t?.browser_download_url)throw Error(`No manifest.json asset was found for the ${e} release channel.`);return t.browser_download_url}async function nn(e){let t=an();if(!t)throw Error(`Failed to resolve the GitHub repository slug for Quantex releases.`);let n=await R(`https://api.github.com/repos/${t}/releases?per_page=20`,`self:github-releases`);if(!n)throw Error(`Failed to query GitHub releases.`);let r=n.find(t=>e===`beta`?t.prerelease:!t.prerelease);if(!r)throw Error(`No GitHub release was found for the ${e} channel.`);return r}function rn(e,t=n.execPath){let r=n.platform,i=n.arch===`arm64`?`arm64`:`x64`,a=J(t);return e.assets.find(e=>e.platform===r&&e.arch===i&&(!a||e.name===a))}function an(){return lt.match(/github\.com\/([^/]+\/[^/]+)$/)?.[1]}const on=M,sn=`/node_modules/${on}`;async function cn(e){let t=await dn(),r=n.execPath,i=t.foundPackageJson?Y(t.packageRoot):Y(``,r),a=await un((await Lt()).installSource,i),o=await k(),s=$t(e?.updateChannel,o.selfUpdateChannel);return{canAutoUpdate:ln(a),currentVersion:t.version||`0.25.
|
|
3
|
+
`)[0]:void 0}catch{return}}async function kt(e){if(e)try{return await u(e)}catch{return e}}function At(e){let t=e.trim().match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9a-z.-]+))?$/i);if(t)return{core:[Number(t[1]),Number(t[2]),Number(t[3])],prerelease:t[4]?t[4].split(`.`):[]}}function jt(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return 1;if(t.length===0)return-1;let n=Math.max(e.length,t.length);for(let r=0;r<n;r+=1){let n=e[r],i=t[r];if(n===void 0)return-1;if(i===void 0)return 1;if(n===i)continue;let a=/^\d+$/.test(n),o=/^\d+$/.test(i);return a&&o?Number(n)>Number(i)?1:-1:a?-1:o||n>i?1:-1}return 0}var U=class extends Error{constructor(e,t){super(e,t),this.name=`StateFileError`}};const Mt={installedAgents:{},self:{}};function W(){return _(D(),`state.json`)}async function G(){return Bt()}async function Nt(e){let t=await j({resource:`state`,scope:[`state`]});try{await Yt(e)}finally{await t()}}async function Pt(e){return(await G()).installedAgents[e]}async function Ft(e){await q(t=>{t.installedAgents[e.agentName]=e})}async function It(e){await q(t=>{delete t.installedAgents[e]})}async function Lt(){return(await G()).self}async function Rt(e){await q(t=>{t.self.installSource=e})}async function zt(e,t){await q(n=>{n.self.updateNoticeVersion=e,n.self.updateNoticeAt=t})}async function Bt(){try{let e=JSON.parse(await l(W(),`utf8`));if(!K(e))throw new U(`Failed to read Quantex state file: root value must be an object.`);let t=qt(e.self);return{installedAgents:Ht(e.installedAgents),self:t}}catch(e){if(Xt(e))return{...Mt};throw e instanceof U?e:new U(`Failed to read Quantex state file.`,{cause:e})}}const Vt=new Set([`binary`,`brew`,`bun`,`cargo`,`deno`,`mise`,`npm`,`pip`,`script`,`uv`,`winget`]);function Ht(e){if(e===void 0)return{};if(!K(e))throw new U(`Failed to read Quantex state file: installedAgents must be an object.`);let t={};for(let[n,r]of Object.entries(e))t[n]=Ut(n,r);return t}function Ut(e,t){if(!K(t))throw new U(`Failed to read Quantex state file: installed agent "${e}" must be an object.`);if(typeof t.agentName!=`string`||t.agentName!==e)throw new U(`Failed to read Quantex state file: installed agent "${e}" has an invalid agentName.`);if(!Wt(t.installType))throw new U(`Failed to read Quantex state file: installed agent "${e}" has an invalid installType.`);let n={agentName:e,installType:t.installType};if(typeof t.binaryName==`string`&&(n.binaryName=t.binaryName),Array.isArray(t.packageInstallArgs)&&t.packageInstallArgs.every(Kt)&&(n.packageInstallArgs=t.packageInstallArgs),typeof t.packageName==`string`){if(t.packageName.length===0&&b(t.installType))throw new U(`Failed to read Quantex state file: installed agent "${e}" has an empty packageName.`);n.packageName=t.packageName}return Gt(t.packageTargetKind)&&(n.packageTargetKind=t.packageTargetKind),typeof t.command==`string`&&(n.command=t.command),n}function Wt(e){return typeof e==`string`&&Vt.has(e)}function Gt(e){return e===`package`||e===`cask`||e===`id`}function Kt(e){return typeof e==`string`}function qt(e){if(!K(e))return{};let t={...e};return Jt(e.installSource)?t.installSource=e.installSource:delete t.installSource,typeof e.updateNoticeAt==`string`?t.updateNoticeAt=e.updateNoticeAt:delete t.updateNoticeAt,typeof e.updateNoticeVersion==`string`?t.updateNoticeVersion=e.updateNoticeVersion:delete t.updateNoticeVersion,t}function Jt(e){return e===`binary`||e===`bun`||e===`npm`||e===`source`||e===`unknown`}function K(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}async function Yt(e){await s(D(),{recursive:!0});let t=W(),r=`${t}.tmp-${n.pid}`,i=`${JSON.stringify(e,null,2)}\n`;try{await m(r,i,`utf8`),await d(r,t)}catch(e){throw await f(r,{force:!0}),e}}function Xt(e){let t=typeof e==`object`&&e&&`code`in e?e.code:void 0;return t===`ENOENT`||t===`ENOTDIR`}async function q(e){let t=await j({resource:`state`,scope:[`state`]});try{let t=await Bt();await e(t),await Yt(t)}finally{await t()}}function Zt(e){return e.replaceAll(`\\`,`/`).toLowerCase()}function J(e=n.execPath){if(h(Zt(e)).endsWith(`.exe`))return`quantex-windows-x64.exe`;if(n.platform===`darwin`)return n.arch===`arm64`?`quantex-darwin-arm64`:`quantex-darwin-x64`;if(n.platform===`linux`)return n.arch===`arm64`?`quantex-linux-arm64`:`quantex-linux-x64`}function Qt(e=n.execPath){let t=J(e);if(t)return`${lt}/releases/latest/download/${t}`}function $t(e,t,r=n.env){return e||(r.QUANTEX_UPDATE_CHANNEL===`beta`?`beta`:r.QUANTEX_UPDATE_CHANNEL===`stable`?`stable`:t===`beta`?`beta`:`stable`)}async function en(e){let t=await R(await tn(e),`self:manifest:${e}`);if(!t)throw Error(`Failed to download release manifest.`);return t}async function tn(e){if(e===`stable`)return`${lt}/releases/latest/download/manifest.json`;let t=(await nn(e)).assets.find(e=>e.name===`manifest.json`);if(!t?.browser_download_url)throw Error(`No manifest.json asset was found for the ${e} release channel.`);return t.browser_download_url}async function nn(e){let t=an();if(!t)throw Error(`Failed to resolve the GitHub repository slug for Quantex releases.`);let n=await R(`https://api.github.com/repos/${t}/releases?per_page=20`,`self:github-releases`);if(!n)throw Error(`Failed to query GitHub releases.`);let r=n.find(t=>e===`beta`?t.prerelease:!t.prerelease);if(!r)throw Error(`No GitHub release was found for the ${e} channel.`);return r}function rn(e,t=n.execPath){let r=n.platform,i=n.arch===`arm64`?`arm64`:`x64`,a=J(t);return e.assets.find(e=>e.platform===r&&e.arch===i&&(!a||e.name===a))}function an(){return lt.match(/github\.com\/([^/]+\/[^/]+)$/)?.[1]}const on=M,sn=`/node_modules/${on}`;async function cn(e){let t=await dn(),r=n.execPath,i=t.foundPackageJson?Y(t.packageRoot):Y(``,r),a=await un((await Lt()).installSource,i),o=await k(),s=$t(e?.updateChannel,o.selfUpdateChannel);return{canAutoUpdate:ln(a),currentVersion:t.version||`0.25.2`,executablePath:r,installSource:a,packageRoot:t.packageRoot,updateChannel:s}}function ln(e){return e===`binary`||e===`bun`||e===`npm`}async function un(e,t){return t!==`unknown`&&e!==t?(await Rt(t),t):e??t}function Y(e,t=n.execPath){let r=pn(e);return r.includes(`/.bun/install/global/`)?`bun`:r.includes(sn)?`npm`:r?`source`:mn(t)?`binary`:`unknown`}async function dn(e=import.meta.url){let t=hn(e),n=g(t);for(;;){let e=_(n,`package.json`),t=await fn(e);if(t?.name===on)return{foundPackageJson:!0,packageJsonPath:e,packageRoot:n,version:t.version??`0.25.2`};let r=g(n);if(r===n)break;n=r}return{foundPackageJson:!1,packageJsonPath:_(g(t),`package.json`),packageRoot:g(t),version:ut}}function X(){return ut}async function fn(e){try{return JSON.parse(await l(e,`utf8`))}catch{return}}function pn(e){return e.replaceAll(`\\`,`/`).toLowerCase()}function mn(e){let t=h(pn(e));return t!==`bun`&&t!==`bun.exe`}function hn(e){try{return re(e)}catch{return n.execPath}}async function gn(e,t,r=n.env,i=n.cwd()){if(e!==`bun`&&e!==`npm`)return;let a=E(r.QTX_SELF_UPDATE_REGISTRY);return a?{isOverride:!0,registry:a,source:`quantex-env`}:t.selfUpdateRegistry?{isOverride:!0,registry:t.selfUpdateRegistry,source:`quantex-config`}:await _n(e,r,i)||{isOverride:!1,registry:He,source:`fallback`}}async function _n(e,t,n){if(e===`bun`){let e=vn(t,[`BUN_CONFIG_REGISTRY`,`NPM_CONFIG_REGISTRY`,`npm_config_registry`]);if(e)return{isOverride:!1,registry:e,source:`bun-env`};let r=await yn(n,t);if(r)return{isOverride:!1,registry:r,source:`bunfig`}}let r=vn(t,[`NPM_CONFIG_REGISTRY`,`npm_config_registry`]);if(r)return{isOverride:!1,registry:r,source:`npm-env`};let i=await xn(n,t);if(i)return{isOverride:!1,registry:i,source:`npmrc`}}function vn(e,t){for(let n of t){let t=E(e[n]);if(t)return t}}async function yn(e,t){let n=wn(t),i=t.XDG_CONFIG_HOME,a=Cn(e,`bunfig.toml`),o=[_(n,`.bunfig.toml`),i?_(i,`.bunfig.toml`):void 0];if(a){let e=await bn(a);if(e)return e}for(let e of o){if(!e||!r(e))continue;let t=await bn(e);if(t)return t}}async function bn(e){try{return Tn(await l(e,`utf8`))}catch{return}}async function xn(e,t){let n=wn(t),i=Cn(e,`.npmrc`),a=_(n,`.npmrc`);if(i){let e=await Sn(i);if(e)return e}if(r(a))return Sn(a)}async function Sn(e){try{let t=(await l(e,`utf8`)).split(`
|
|
4
4
|
`).map(e=>e.trim());for(let e=t.length-1;e>=0;--e){let n=t[e];if(!n||n.startsWith(`#`)||n.startsWith(`;`))continue;let r=n.match(/^registry\s*=\s*(.+)$/);if(!r?.[1])continue;let i=E(r[1]);if(i)return i}}catch{}}function Cn(e,t){let n=e;for(;;){let e=_(n,t);if(r(e))return e;let i=g(n);if(i===n)return;n=i}}function wn(e){return e.HOME||e.USERPROFILE||ee()}function Tn(e){let t=En(e,[/(?:^|\n)\s*install\.registry\s*=\s*["']([^"'#\n]+)["']/,/(?:^|\n)\s*install\.registry\s*=\s*\{\s*url\s*=\s*["']([^"'#\n]+)["']/,/(?:^|\n)\s*install\s*=\s*\{[\s\S]*?\bregistry\s*=\s*["']([^"'#\n]+)["'][\s\S]*?\}/,/(?:^|\n)\s*install\s*=\s*\{[\s\S]*?\bregistry\s*=\s*\{\s*url\s*=\s*["']([^"'#\n]+)["'][\s\S]*?\}[\s\S]*?\}/]);if(t)return E(t);let n=e.match(/(?:^|\n)\s*\[install\]\s*\n([\s\S]*?)(?=\n\s*\[[^\]]+\]|\s*$)/)?.[1];if(n)return E(En(n,[/(?:^|\n)\s*registry\s*=\s*["']([^"'#\n]+)["']/,/(?:^|\n)\s*registry\s*=\s*\{\s*url\s*=\s*["']([^"'#\n]+)["']/]))}function En(e,t){for(let n of t){let t=e.match(n)?.[1];if(t)return t}}async function Dn(e){let t=await k();if(e.installSource===`binary`)try{let t=await en(e.updateChannel),n=rn(t,e.executablePath);return n?{binaryAsset:n,targetVersion:t.version}:{resolutionError:{detail:{channel:e.updateChannel},kind:`unsupported`,message:`No binary asset is available for the current platform on the ${e.updateChannel} channel.`}}}catch{return{resolutionError:{kind:`network`,message:`Failed to resolve the ${e.updateChannel} release manifest.`}}}let n=e.updateChannel===`beta`?`beta`:`latest`,r=await H(M,n,{registry:He});if(e.installSource===`bun`||e.installSource===`npm`){let i=await gn(e.installSource,t);return{managedRegistry:i?.registry,managedRegistryIsOverride:i?.isOverride??!1,packageTag:n,targetVersion:await H(M,n,{registry:i?.registry}),upstreamLatestVersion:r,verificationCommand:Nn(e.packageRoot)}}return{packageTag:n,targetVersion:r,upstreamLatestVersion:r}}async function Z(e){let t=e?.facts??await cn({updateChannel:e?.updateChannel}),n=e?.target??await Dn(t),r=n.targetVersion?B(n.targetVersion,t.currentVersion):!1;return{facts:t,status:jn(t,n,r),target:n,updateAvailable:r}}function On(e){return{canAutoUpdate:e.facts.canAutoUpdate,currentVersion:e.facts.currentVersion,executablePath:e.facts.executablePath,installSource:e.facts.installSource,latestVersion:e.target.targetVersion,managedRegistry:e.target.managedRegistry,managedRegistryIsOverride:e.target.managedRegistryIsOverride,packageRoot:e.facts.packageRoot,recommendedUpgradeCommand:e.facts.canAutoUpdate?`quantex upgrade`:void 0,upstreamLatestVersion:e.target.upstreamLatestVersion,updateChannel:e.facts.updateChannel}}async function kn(e,t){if(!t.success||e.facts.installSource!==`bun`&&e.facts.installSource!==`npm`)return t;let n=await Mn(e);if(!n)return{error:{kind:`verify`,message:`Managed self-upgrade finished but Quantex could not verify the installed version afterwards.`},installSource:e.facts.installSource,success:!1};let r=t.newVersion??e.target.targetVersion;return r&&n!==r?{error:{detail:{expectedVersion:r,observedVersion:n},kind:`verify`,message:`Managed self-upgrade installed version ${n}, but expected ${r}.`},installSource:e.facts.installSource,success:!1}:!r&&n===e.facts.currentVersion&&e.target.targetVersion!==void 0?{error:{detail:{observedVersion:n},kind:`verify`,message:`Managed self-upgrade completed without changing the installed Quantex version.`},installSource:e.facts.installSource,success:!1}:{...t,newVersion:n}}function An(e){let t={canAutoUpdate:e.canAutoUpdate,currentVersion:e.currentVersion,executablePath:e.executablePath,installSource:e.installSource,packageRoot:e.packageRoot,updateChannel:e.updateChannel},n={managedRegistry:e.managedRegistry,managedRegistryIsOverride:e.managedRegistryIsOverride,packageTag:e.updateChannel===`beta`?`beta`:`latest`,targetVersion:e.latestVersion,upstreamLatestVersion:e.upstreamLatestVersion,verificationCommand:Nn(e.packageRoot)},r=e.latestVersion?B(e.latestVersion,e.currentVersion):!1;return{facts:t,status:jn(t,n,r),target:n,updateAvailable:r}}function jn(e,t,n){return e.canAutoUpdate?t.targetVersion&&!n?`up-to-date`:t.targetVersion?`update-available`:`check-unavailable`:`manual-required`}async function Mn(e){if(e.target.verificationCommand){let t=await V(e.facts.executablePath,{command:e.target.verificationCommand});if(t)return t}return V(e.facts.executablePath)}function Nn(e){if(e)return[n.execPath,_(e,`dist`,`cli.mjs`),`--version`]}async function Pn(e,t,r,i,a=Fn(t)){let s;try{s=await fetch(e)}catch(t){return $(`network`,`Failed to download ${e}.`,t)}if(!s.ok)return $(`network`,`Failed to download ${e}: HTTP ${s.status}.`);let l=await c(_(g(t),`.quantex-upgrade-`)),u=_(l,h(t)),p=`${t}.bak`,v=!1;try{let c=ie.from(await s.arrayBuffer()),h=await In(t),g=Hn(c);if(g!==Un(r))return $(`checksum`,`Checksum mismatch for ${e}. Expected ${Un(r)}, got ${g}.`);if(await m(u,c),n.platform===`win32`)return Ln(u,t,p,l,i,a);await o(u,h),await f(p,{force:!0}),await d(t,p),v=!0,await d(u,t);let _=await Vn(t,i);return _.success?(v=!1,await f(p,{force:!0}),{success:!0}):(await Bn(p,t),v=!1,_)}catch(e){if(v){try{await Bn(p,t)}catch{}v=!1}return $(zn(e),`Failed to replace the current Quantex binary.`,e)}finally{n.platform!==`win32`&&await f(l,{recursive:!0,force:!0})}}function Fn(e){if(n.platform!==`win32`)return;let t=v.basename(e).toLowerCase();if(t===`qtx.exe`)return v.join(v.dirname(e),`quantex.exe`);if(t===`quantex.exe`)return v.join(v.dirname(e),`qtx.exe`)}async function In(e){try{return(await p(e)).mode&511}catch{return 493}}function Ln(e,t,r,i,a,o){try{return F([`powershell.exe`,`-NoProfile`,`-NonInteractive`,`-ExecutionPolicy`,`Bypass`,`-WindowStyle`,`Hidden`,`-Command`,Rn(e,t,r,i,n.pid,a,o)],{stdio:[`ignore`,`ignore`,`ignore`],windowsHide:!0}).unref(),{success:!0}}catch(e){return $(`locked`,`Failed to schedule Windows binary replacement.`,e)}}function Rn(e,t,n,r,i,a,o){let s=Q(e),c=Q(t),l=Q(n),u=Q(r),d=Q(a??``),f=Q(o??``);return[`$ErrorActionPreference = 'Stop'`,`$pidToWait = ${i}`,`$tempPath = '${s}'`,`$targetPath = '${c}'`,`$backupPath = '${l}'`,`$tempDir = '${u}'`,`$expectedVersion = '${d}'`,`$peerPath = '${f}'`,`while (Get-Process -Id $pidToWait -ErrorAction SilentlyContinue) { Start-Sleep -Milliseconds 200 }`,`$backupReady = $false`,`for ($attempt = 0; $attempt -lt 50; $attempt++) {`,` try {`,` if (Test-Path -LiteralPath $backupPath) { Remove-Item -LiteralPath $backupPath -Force -ErrorAction SilentlyContinue }`,` Move-Item -LiteralPath $targetPath -Destination $backupPath -Force -ErrorAction Stop`,` $backupReady = $true`,` break`,` }`,` catch {`,` Start-Sleep -Milliseconds 200`,` }`,`}`,`if (-not $backupReady) {`,` Remove-Item -LiteralPath $tempDir -Force -Recurse -ErrorAction SilentlyContinue`,` exit 1`,`}`,`try {`,` Move-Item -LiteralPath $tempPath -Destination $targetPath -Force`,`}`,`catch {`,` if (Test-Path -LiteralPath $backupPath) {`,` Move-Item -LiteralPath $backupPath -Destination $targetPath -Force -ErrorAction SilentlyContinue`,` }`,` Remove-Item -LiteralPath $tempDir -Force -Recurse -ErrorAction SilentlyContinue`,` exit 1`,`}`,`if ($expectedVersion -ne '') {`,` $output = & $targetPath --version 2>$null`,` if ($LASTEXITCODE -ne 0 -or ($output -notmatch [regex]::Escape($expectedVersion))) {`,` Remove-Item -LiteralPath $targetPath -Force -ErrorAction SilentlyContinue`,` Move-Item -LiteralPath $backupPath -Destination $targetPath -Force`,` Remove-Item -LiteralPath $tempDir -Force -Recurse -ErrorAction SilentlyContinue`,` exit 1`,` }`,`}`,`if ($peerPath -ne '') {`,` Copy-Item -LiteralPath $targetPath -Destination $peerPath -Force`,`}`,`Remove-Item -LiteralPath $backupPath -Force -ErrorAction SilentlyContinue`,`Remove-Item -LiteralPath $tempDir -Force -Recurse -ErrorAction SilentlyContinue`].join(`; `)}function Q(e){return e.replaceAll(`'`,`''`)}function $(e,t,n){return{error:{detail:n,kind:e,message:t},success:!1}}function zn(e){let t=typeof e==`object`&&e&&`code`in e?String(e.code):``;return t===`EACCES`||t===`EPERM`?`permission`:t===`EBUSY`?`locked`:`unknown`}async function Bn(e,t){await f(t,{force:!0}),await d(e,t)}async function Vn(e,t){if(!t)return{success:!0};try{let{exitCode:n,stdout:r}=await I(F([e,`--version`],{stdio:[`ignore`,`pipe`,`ignore`]}));return n===0?r.includes(t)?{success:!0}:$(`verify`,`The upgraded Quantex binary reported an unexpected version during verification.`):$(`verify`,`The upgraded Quantex binary exited with code ${n} during verification.`)}catch(e){return $(`verify`,`Failed to execute the upgraded Quantex binary for verification.`,e)}}function Hn(t){return e(`sha256`).update(t).digest(`hex`)}function Un(e){return e.trim().toLowerCase()}const Wn={source:`binary`,canHandle:e=>Gn(e)===`binary`,getRecoveryHint:(e,t)=>{let n=t?.error?.detail&&typeof t.error.detail==`object`&&`downloadUrl`in t.error.detail?String(t.error.detail.downloadUrl):Qt(e.executablePath);if(n)return t?.error?.kind===`locked`?`close other qtx processes and retry, or download and replace the binary from ${n}`:t?.error?.kind===`permission`?`check write permission for the current binary path, or download and replace the binary from ${n}`:t?.error?.kind===`network`?`check network access and retry, or download and replace the binary from ${n}`:`download and replace the binary from ${n}`},async upgrade(e){let t=e.target.binaryAsset;if(!t)return{error:e.target.resolutionError??{kind:`unsupported`,message:`No release artifact is available for the current platform and architecture.`},installSource:e.facts.installSource,success:!1};let n=await Pn(t.downloadUrl,e.facts.executablePath,t.checksum,e.target.targetVersion??`latest`,Fn(e.facts.executablePath));return{...!n.success&&n.error?{...n,error:{...n.error,detail:{...typeof n.error.detail==`object`&&n.error.detail?n.error.detail:{},downloadUrl:t.downloadUrl}}}:n,installSource:e.facts.installSource,newVersion:n.success?e.target.targetVersion:void 0}}};function Gn(e){return`facts`in e?e.facts.installSource:e.installSource}async function Kn(e,t,n){try{let r=t?`${e}@${t}`:e,i=E(n);return await Qn([`bun`,`add`,`-g`,...i?[`--registry`,i]:[],r],[e])}catch{return!1}}async function qn(e,t=`latest-major`,n=`latest`,r){try{let i=n===`latest`?e:`${e}@${n}`,a=E(r);return await Qn([`bun`,`update`,`-g`,...t===`latest-major`?[`--latest`]:[],...a?[`--registry`,a]:[],i],[e])}catch{return!1}}async function Jn(e,t=`latest-major`){if(e.length===0)return!0;try{return await Qn([`bun`,`update`,`-g`,...t===`latest-major`?[`--latest`]:[],...e],e)}catch{return!1}}async function Yn(e){try{return await P(N([`bun`,`remove`,`-g`,e]))===0}catch{return!1}}async function Xn(e){try{let{exitCode:t,stdout:n}=await I(F([`bun`,`pm`,`-g`,`ls`],{stdio:nr()}));return t===0?Zn(n,e):void 0}catch{return}}function Zn(e,t){let n=`${t}@`;for(let t of e.split(`
|
|
5
5
|
`)){let e=t.trim().split(/\s+/).at(-1);if(!e?.startsWith(n))continue;let r=e.slice(n.length);if(r)return r}}async function Qn(e,t){return await P(N(e))===0?$n(t):!1}async function $n(e){let t=[...new Set(e)];if(t.length===0)return!0;let n=await er();if(n===void 0)return!1;let r=tr(n),i=t.filter(e=>r.has(e));return i.length===0?!0:await P(N([`bun`,`pm`,`-g`,`trust`,...i]))===0}async function er(){try{let{exitCode:e,stdout:t}=await I(F([`bun`,`pm`,`-g`,`untrusted`],{stdio:nr()}));return e===0?t:void 0}catch{return}}function tr(e){let t=new Set;for(let n of e.split(`
|
|
6
6
|
`)){let e=n.replaceAll(`\\`,`/`).match(/^\.\/node_modules\/(.+?) @/);e?.[1]&&t.add(e[1])}return t}function nr(){return[`ignore`,`pipe`,`ignore`]}const rr={source:`bun`,canHandle:e=>ir(e)===`bun`,getRecoveryHint:e=>`bun add -g ${M}@${e.updateChannel===`beta`?`beta`:`latest`}`,async upgrade(e){let t=await Kn(M,e.target.packageTag??(e.facts.updateChannel===`beta`?`beta`:`latest`),e.target.managedRegistry);return{error:t?void 0:{kind:`unknown`,message:`Failed to update ${M} through Bun.`},installSource:e.facts.installSource,newVersion:t?e.target.targetVersion:void 0,success:t}}};function ir(e){return`facts`in e?e.facts.installSource:e.installSource}async function ar(e,t,n){try{let r=t?`${e}@${t}`:e,i=E(n);return await P(N([`npm`,`install`,`-g`,r,...i?[`--registry`,i]:[]]))===0}catch{return!1}}async function or(e,t=`latest-major`,n=`latest`,r){try{let i=E(r);return await P(N(t===`latest-major`?[`npm`,`install`,`-g`,`${e}@${n}`,...i?[`--registry`,i]:[]]:[`npm`,`update`,`-g`,e,...i?[`--registry`,i]:[]]))===0}catch{return!1}}async function sr(e,t=`latest-major`){if(e.length===0)return!0;try{return await P(N(t===`latest-major`?[`npm`,`install`,`-g`,...e.map(e=>`${e}@latest`)]:[`npm`,`update`,`-g`,...e]))===0}catch{return!1}}async function cr(e){try{return await P(N([`npm`,`uninstall`,`-g`,e]))===0}catch{return!1}}async function lr(e){try{let{exitCode:t,stdout:n}=await I(F([`npm`,`list`,`-g`,`--depth=0`,`--json`],{stdio:[`ignore`,`pipe`,`ignore`]}));return t===0?ur(n,e):void 0}catch{return}}function ur(e,t){let n=JSON.parse(e).dependencies?.[t]?.version;return typeof n==`string`?n:void 0}const dr={source:`npm`,canHandle:e=>fr(e)===`npm`,getRecoveryHint:e=>`npm install -g ${M}@${e.updateChannel===`beta`?`beta`:`latest`}`,async upgrade(e){let t=await ar(M,e.target.packageTag??(e.facts.updateChannel===`beta`?`beta`:`latest`),e.target.managedRegistry);return{error:t?void 0:{kind:`unknown`,message:`Failed to update ${M} through npm.`},installSource:e.facts.installSource,newVersion:t?e.target.targetVersion:void 0,success:t}}};function fr(e){return`facts`in e?e.facts.installSource:e.installSource}const pr={source:`source`,canHandle:e=>{let t=`facts`in e?e.facts.installSource:e.installSource;return t===`source`||t===`unknown`},getRecoveryHint:()=>void 0,async upgrade(e){return{error:{kind:`unsupported`,message:`Install source "${e.facts.installSource}" does not support auto-update.`},installSource:e.facts.installSource,success:!1}}},mr=[rr,dr,Wn,pr];function hr(e){return mr.find(t=>t.canHandle(e))??pr}function gr(e,t,n=`stable`){return hr({canAutoUpdate:e===`binary`||e===`bun`||e===`npm`,currentVersion:``,executablePath:t,installSource:e,packageRoot:``,updateChannel:n})}function _r(e,t,n=`stable`,r){return r?.error?.kind===`locked`?`another qtx upgrade is already running; wait for it to finish and retry`:gr(e,t,n).getRecoveryHint({canAutoUpdate:e===`binary`||e===`bun`||e===`npm`,currentVersion:``,executablePath:t,installSource:e,packageRoot:``,updateChannel:n},r)}function vr(e,t){return t?.error?.kind===`locked`?`another qtx upgrade is already running; wait for it to finish and retry`:hr(e).getRecoveryHint(e,t)}async function yr(e){return On(await Z({updateChannel:e?.updateChannel}))}async function br(e){let t=await Sr(e),n=await ct();if(!n)return{error:{kind:`locked`,message:`Another qtx upgrade is already running.`},installSource:t.facts.installSource,success:!1};try{return kn(t,await hr(t).upgrade(t))}finally{await n()}}function xr(e,t=n.execPath){return _r(e,t)}async function Sr(e){return e?`facts`in e?e:e.installSource===`binary`?Z({facts:{canAutoUpdate:e.canAutoUpdate,currentVersion:e.currentVersion,executablePath:e.executablePath,installSource:e.installSource,packageRoot:e.packageRoot,updateChannel:e.updateChannel}}):An(e):Z()}function Cr(e){return Dr({...e,error:null,ok:!0})}function wr(e){return Dr({...e,ok:!1})}function Tr(e,t,n={}){let r=T();return r.cancelled&&!n.force||(r.outputMode===`json`?console.log(JSON.stringify(e,null,2)):r.outputMode===`ndjson`?kr({action:e.action,data:e,target:e.target,type:`result`}):t(e)),e}function Er(e,t={}){let n=T();if(!(n.cancelled&&!t.force)&&n.outputMode===`ndjson`)return kr(e)}function Dr(e){let t=T();return{action:e.action,data:e.data,error:e.error??null,exitCode:e.exitCode,meta:{fetchedAt:t.freshness?.fetchedAt,mode:t.outputMode,runId:t.runId,schemaVersion:`1`,source:t.freshness?.source,staleAfter:t.freshness?.staleAfter,timestamp:new Date().toISOString(),version:X()},ok:e.ok,target:e.target,warnings:e.warnings??[]}}function Or(e){let t=T();return{action:e.action,data:e.data,meta:{fetchedAt:t.freshness?.fetchedAt,mode:`ndjson`,runId:t.runId,schemaVersion:`1`,source:t.freshness?.source,staleAfter:t.freshness?.staleAfter,timestamp:new Date().toISOString(),version:X()},target:e.target,type:e.type}}function kr(e){let t=Or(e);return console.log(JSON.stringify(t)),t}const{createColors:Ar,isColorSupported:jr}=ae;function Mr(){let e=T().colorMode??`auto`;return Ar(e===`always`?!0:e===`never`?!1:jr)}const Nr=new Proxy({},{get(e,t){let n=Mr(),r=n[t];return typeof r==`function`?r.bind(n):r}});export{Ge as $,Lt as A,V as B,ln as C,le as Ct,Qt as D,y as Dt,J as E,se as Et,Ft as F,F as G,kt as H,Rt as I,M as J,N as K,zt as L,G as M,It as N,U as O,b as Ot,Nt as P,O as Q,Dt as R,Z as S,S as St,X as T,x as Tt,B as U,H as V,I as W,st as X,Ze as Y,D as Z,Kn as _,he as _t,Tr as a,Ie as at,Jn as b,be as bt,br as c,Me as ct,lr as d,Ee as dt,Ke as et,ar as f,ke as ft,Xn as g,ve as gt,sr as h,fe as ht,Er as i,E as it,W as j,Pt as k,_r as l,Ne as lt,or as m,De as mt,wr as n,qe as nt,xr as o,Fe as ot,cr as p,Oe as pt,P as q,Cr as r,We as rt,yr as s,T as st,Nr as t,k as tt,vr as u,je as ut,Yn as v,ge as vt,Y as w,ce as wt,On as x,ye as xt,qn as y,_e as yt,Ot as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./commands-wopeYsFl.mjs";export{e as commandsCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as e,r as t,t as n}from"./color-
|
|
1
|
+
import{a as e,r as t,t as n}from"./color-Brg6IVS7.mjs";const r=[{flags:[`--json`,`--output`,`--non-interactive`,`--quiet`,`--color`,`--log-level`,`--refresh`,`--no-cache`,`--timeout`],name:`capabilities`,outputSchemaRef:`#/commands/capabilities`,stability:`stable`,summary:`Return environment and surface capabilities`},{flags:[`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--timeout`],name:`commands`,outputSchemaRef:`#/commands/commands`,stability:`stable`,summary:`Return the stable command catalog`},{flags:[`get`,`set`,`reset`,`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--timeout`],name:`config`,outputSchemaRef:`#/commands/config`,stability:`stable`,summary:`Read and modify Quantex configuration`},{flags:[`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--refresh`,`--no-cache`,`--timeout`],name:`doctor`,outputSchemaRef:`#/commands/doctor`,stability:`stable`,summary:`Diagnose the current environment and installed tools`},{flags:[`--install`,`--non-interactive`,`--yes`,`--quiet`,`--color`,`--log-level`,`--dry-run`,`--output`],name:`exec`,outputSchemaRef:`#/commands/exec`,stability:`stable`,summary:`Run an agent with explicit install policy`},{flags:[`--json`,`--output`,`--yes`,`--quiet`,`--color`,`--log-level`,`--dry-run`,`--timeout`,`--idempotency-key`],name:`ensure`,outputSchemaRef:`#/commands/ensure`,stability:`stable`,summary:`Ensure an agent is installed`},{flags:[`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--refresh`,`--no-cache`,`--timeout`],name:`info`,outputSchemaRef:`#/commands/info`,stability:`stable`,summary:`Show human-friendly agent details`},{flags:[`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--refresh`,`--no-cache`,`--timeout`],name:`inspect`,outputSchemaRef:`#/commands/inspect`,stability:`stable`,summary:`Return structured agent state`},{flags:[`--json`,`--output`,`--yes`,`--quiet`,`--color`,`--log-level`,`--dry-run`,`--timeout`,`--idempotency-key`],name:`install`,outputSchemaRef:`#/commands/install`,stability:`stable`,summary:`Install one or more agents`},{flags:[`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--refresh`,`--no-cache`,`--timeout`],name:`list`,outputSchemaRef:`#/commands/list`,stability:`stable`,summary:`List supported agents`},{flags:[`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--refresh`,`--no-cache`,`--timeout`],name:`resolve`,outputSchemaRef:`#/commands/resolve`,stability:`stable`,summary:`Resolve an agent executable entrypoint`},{flags:[`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--timeout`],name:`schema`,outputSchemaRef:`#/commands/schema`,stability:`stable`,summary:`Return structured output schemas`},{flags:[`--all`,`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--dry-run`,`--refresh`,`--no-cache`,`--timeout`,`--idempotency-key`],name:`update`,outputSchemaRef:`#/commands/update`,stability:`stable`,summary:`Update one or all agents`},{flags:[`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--dry-run`,`--timeout`,`--idempotency-key`],name:`uninstall`,outputSchemaRef:`#/commands/uninstall`,stability:`stable`,summary:`Uninstall an agent`},{flags:[`--check`,`--channel`,`--json`,`--output`,`--quiet`,`--color`,`--log-level`,`--dry-run`,`--refresh`,`--no-cache`,`--timeout`,`--idempotency-key`],name:`upgrade`,outputSchemaRef:`#/commands/upgrade`,stability:`stable`,summary:`Upgrade Quantex CLI itself`}];async function i(){return e(t({action:`commands`,data:{commands:r},target:{kind:`system`,name:`commands`}}),a)}function a(e){if(e.data){console.log(n.bold(`
|
|
2
2
|
Quantex Commands
|
|
3
3
|
`));for(let t of e.data.commands){let e=t.flags.length>0?n.dim(` [${t.flags.join(`, `)}]`):``;console.log(` ${n.cyan(t.name)}${e}`),console.log(` ${t.summary}`),console.log(` ${n.dim(t.outputSchemaRef)}`)}console.log()}}export{i as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{$ as e,a as t,et as n,it as r,n as i,nt as a,r as o,rt as s,t as c,tt as l}from"./color-
|
|
1
|
+
import{$ as e,a as t,et as n,it as r,n as i,nt as a,r as o,rt as s,t as c,tt as l}from"./color-Brg6IVS7.mjs";async function u(c,u,f){if(!c)return t(o({action:`config`,data:{action:`list`,config:await l()},target:{kind:`config`}}),d);switch(c){case`get`:{if(!u)return t(i({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`Please specify a key`},target:{kind:`config`}}),d);let e=(await l())[u];return t(o({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 t(i({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`Please specify both key and value`},target:{kind:`config`}}),d);if(u===`defaultPackageManager`&&!e(f))return t(i({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`defaultPackageManager must be bun, npm, or mise`},target:{kind:`config`,name:u}}),d);if(u===`npmBunUpdateStrategy`&&!n(f))return t(i({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 t(i({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`selfUpdateChannel must be stable or beta`},target:{kind:`config`,name:u}}),d);if(u===`selfUpdateRegistry`&&!r(f))return t(i({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 t(i({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`${u} must be a positive integer`},target:{kind:`config`,name:u}}),d);f=`${e}`}let s={};try{s=await l()}catch{}return s[u]=[`networkRetries`,`networkTimeoutMs`,`versionCacheTtlHours`].includes(u)?Number.parseInt(f,10):u===`selfUpdateRegistry`?r(f):f,await a(s),t(o({action:`config`,data:{action:`set`,key:u,value:s[u]},target:{kind:`config`,name:u}}),d)}case`reset`:return await a(s),t(o({action:`config`,data:{action:`reset`,config:s},target:{kind:`config`}}),d);default:return t(i({action:`config`,error:{code:`INVALID_ARGUMENT`,details:{action:c},message:`Unknown action: ${c}`},target:{kind:`config`},warnings:[{code:`AVAILABLE_ACTIONS`,message:`Available actions: get, set, reset`}]}),d)}}function d(e){if(e.error){console.log(c.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(c.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?c.gray(`(not set)`):String(e.data.value));break;case`set`:console.log(c.green(`Set ${e.data.key} = ${e.data.value}`));break;case`reset`:console.log(c.green(`Configuration reset to defaults.`));break}}export{u as configCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{G as e,W as t}from"./color-P2gkDtbT.mjs";import{toJSONSchema as n,z as r}from"zod";import i from"node:process";const a=[{name:`amp`,displayName:`Amp`,homepage:`https://ampcode.com/`,packages:{npm:`@sourcegraph/amp`},binaryName:`amp`,selfUpdate:{command:[`amp`,`update`]},versionProbe:{command:[`amp`,`version`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`}],linux:[{type:`bun`},{type:`npm`}]}},{name:`antigravity`,lookupAliases:[`agy`,`antigravity-cli`],displayName:`Antigravity CLI`,homepage:`https://antigravity.google/product/antigravity-cli`,binaryName:`agy`,selfUpdate:{command:[`agy`,`update`]},versionProbe:{command:[`agy`,`--version`]},platforms:{windows:[{command:`irm https://antigravity.google/cli/install.ps1 | iex`,type:`script`}],macos:[{command:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,type:`script`}],linux:[{command:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,type:`script`}]}},{name:`auggie`,displayName:`Auggie CLI`,homepage:`https://docs.augmentcode.com/cli/overview`,packages:{npm:`@augmentcode/auggie`},binaryName:`auggie`,selfUpdate:{command:[`auggie`,`upgrade`]},versionProbe:{command:[`auggie`,`--version`]},platforms:{macos:[{type:`bun`},{type:`npm`}],linux:[{type:`bun`},{type:`npm`}]}},{name:`autohand`,lookupAliases:[`autohand-cli`],displayName:`Autohand Code CLI`,homepage:`https://autohand.ai/cli/`,packages:{npm:`autohand-cli`},binaryName:`autohand`,versionProbe:{command:[`autohand`,`--version`]},platforms:{windows:[{command:`iwr -useb https://autohand.ai/install.ps1 | iex`,type:`script`}],macos:[{command:`curl -fsSL https://autohand.ai/install.sh | bash`,type:`script`}],linux:[{command:`curl -fsSL https://autohand.ai/install.sh | bash`,type:`script`}]}},{name:`claude`,displayName:`Claude Code`,homepage:`https://code.claude.com/docs`,packages:{npm:`@anthropic-ai/claude-code`},binaryName:`claude`,selfUpdate:{command:[`claude`,`update`],fallbackCommands:[[`claude`,`upgrade`]]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`irm https://claude.ai/install.ps1 | iex`,type:`script`},{packageName:`Anthropic.ClaudeCode`,packageTargetKind:`id`,type:`winget`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://claude.ai/install.sh | bash`,type:`script`},{packageName:`claude-code`,packageTargetKind:`cask`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://claude.ai/install.sh | bash`,type:`script`},{packageName:`claude-code`,packageTargetKind:`cask`,type:`brew`}]}},{name:`codebuddy`,lookupAliases:[`codebuddy-code`],displayName:`CodeBuddy Code`,homepage:`https://www.codebuddy.cn/docs/cli/installation`,packages:{npm:`@tencent-ai/codebuddy-code`},binaryName:`codebuddy`,selfUpdate:{command:[`codebuddy`,`update`]},versionProbe:{command:[`codebuddy`,`--version`]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`irm https://www.codebuddy.cn/cli/install.ps1 | iex`,type:`script`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://www.codebuddy.cn/cli/install.sh | bash`,type:`script`},{packageName:`Tencent-CodeBuddy/tap/codebuddy-code`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://www.codebuddy.cn/cli/install.sh | bash`,type:`script`},{packageName:`Tencent-CodeBuddy/tap/codebuddy-code`,type:`brew`}]}},{name:`codewhale`,displayName:`CodeWhale`,homepage:`https://github.com/Hmbown/CodeWhale`,packages:{cargo:`codewhale-cli`,npm:`codewhale`},binaryName:`codewhale`,selfUpdate:{command:[`codewhale`,`update`]},versionProbe:{command:[`codewhale`,`--version`]},platforms:{windows:[{type:`npm`},{packageInstallArgs:[`--locked`],type:`cargo`}],macos:[{type:`npm`},{packageInstallArgs:[`--locked`],type:`cargo`}],linux:[{type:`npm`},{packageInstallArgs:[`--locked`],type:`cargo`}]}},{name:`codex`,displayName:`Codex CLI`,homepage:`https://developers.openai.com/codex/cli`,packages:{mise:`npm:@openai/codex`,npm:`@openai/codex`},binaryName:`codex`,selfUpdate:{command:[`codex`,`--upgrade`]},platforms:{windows:[{type:`bun`},{type:`npm`},{type:`mise`}],macos:[{type:`bun`},{type:`npm`},{type:`mise`},{packageName:`codex`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{type:`mise`},{packageName:`codex`,type:`brew`}]}},{name:`copilot`,displayName:`GitHub Copilot CLI`,homepage:`https://github.com/features/copilot/cli`,packages:{npm:`@github/copilot`},binaryName:`copilot`,platforms:{windows:[{packageName:`GitHub.Copilot`,packageTargetKind:`id`,type:`winget`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://gh.io/copilot-install | bash`,type:`script`},{packageName:`copilot-cli`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://gh.io/copilot-install | bash`,type:`script`},{packageName:`copilot-cli`,type:`brew`}]}},{name:`crush`,displayName:`Crush`,homepage:`https://github.com/charmbracelet/crush`,packages:{npm:`@charmland/crush`},binaryName:`crush`,selfUpdate:{command:[`crush`,`update`]},versionProbe:{command:[`crush`,`--version`]},platforms:{windows:[{type:`bun`},{type:`npm`},{packageName:`charmbracelet.crush`,packageTargetKind:`id`,type:`winget`}],macos:[{type:`bun`},{type:`npm`},{packageName:`charmbracelet/tap/crush`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{packageName:`charmbracelet/tap/crush`,type:`brew`}]}},{name:`cursor`,lookupAliases:[`agent`],displayName:`Cursor CLI`,homepage:`https://cursor.com/docs/cli`,binaryName:`agent`,selfUpdate:{command:[`agent`,`update`]},versionProbe:{command:[`agent`,`--version`]},platforms:{windows:[{command:`irm 'https://cursor.com/install?win32=true' | iex`,type:`script`}],macos:[{command:`curl https://cursor.com/install -fsS | bash`,type:`script`}],linux:[{command:`curl https://cursor.com/install -fsS | bash`,type:`script`}]}},{name:`deepcode`,displayName:`Deep Code CLI`,homepage:`https://github.com/lessweb/deepcode-cli`,packages:{npm:`@vegamo/deepcode-cli`},binaryName:`deepcode`,versionProbe:{command:[`deepcode`,`--version`]},platforms:{windows:[{type:`npm`}],macos:[{type:`npm`}],linux:[{type:`npm`}]}},{name:`devin`,displayName:`Devin for Terminal`,homepage:`https://cli.devin.ai/`,binaryName:`devin`,selfUpdate:{command:[`devin`,`update`]},versionProbe:{command:[`devin`,`version`]},platforms:{windows:[{command:`irm https://static.devin.ai/cli/setup.ps1 | iex`,type:`script`}],macos:[{command:`curl -fsSL https://cli.devin.ai/install.sh | bash`,type:`script`}],linux:[{command:`curl -fsSL https://cli.devin.ai/install.sh | bash`,type:`script`}]}},{name:`droid`,displayName:`Droid`,homepage:`https://docs.factory.ai/cli/getting-started/overview`,packages:{npm:`droid`},binaryName:`droid`,selfUpdate:{command:[`droid`,`update`]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`irm https://app.factory.ai/cli/windows | iex`,type:`script`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://app.factory.ai/cli | sh`,type:`script`},{packageName:`droid`,packageTargetKind:`cask`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://app.factory.ai/cli | sh`,type:`script`},{packageName:`droid`,packageTargetKind:`cask`,type:`brew`}]}},{name:`forgecode`,lookupAliases:[`forge`],displayName:`ForgeCode`,homepage:`https://forgecode.dev`,packages:{npm:`forgecode`},binaryName:`forge`,selfUpdate:{command:[`forge`,`update`]},versionProbe:{command:[`forge`,`--version`]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`irm https://forgecode.dev/cli | iex`,type:`script`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://forgecode.dev/cli | sh`,type:`script`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://forgecode.dev/cli | sh`,type:`script`}]}},{name:`gemini`,displayName:`Gemini CLI`,homepage:`https://google-gemini.github.io/gemini-cli/docs/`,packages:{npm:`@google/gemini-cli`},binaryName:`gemini`,platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`},{packageName:`gemini-cli`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{packageName:`gemini-cli`,type:`brew`}]}},{name:`genie`,displayName:`Genie`,homepage:`https://jsr.io/@nicorio/genie`,packages:{deno:`jsr:@nicorio/genie`},binaryName:`genie`,platforms:{windows:[{packageInstallArgs:[`-A`],type:`deno`}],macos:[{packageInstallArgs:[`-A`],type:`deno`}],linux:[{packageInstallArgs:[`-A`],type:`deno`}]}},{name:`goose`,displayName:`Goose`,homepage:`https://github.com/aaif-goose/goose`,binaryName:`goose`,selfUpdate:{command:[`goose`,`update`]},versionProbe:{command:[`goose`,`--version`]},platforms:{windows:[{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,type:`script`},{command:`Invoke-WebRequest -Uri "https://raw.githubusercontent.com/aaif-goose/goose/main/download_cli.ps1" -OutFile "download_cli.ps1"; ./download_cli.ps1`,type:`script`}],macos:[{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,type:`script`},{packageName:`block-goose-cli`,type:`brew`}],linux:[{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,type:`script`},{packageName:`block-goose-cli`,type:`brew`}]}},{name:`jcode`,displayName:`JCode`,homepage:`https://github.com/1jehuang/jcode`,binaryName:`jcode`,versionProbe:{command:[`jcode`,`--version`]},platforms:{windows:[{command:`irm https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.ps1 | iex`,type:`script`}],macos:[{packageName:`1jehuang/jcode/jcode`,type:`brew`},{command:`curl -fsSL https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh | bash`,type:`script`}],linux:[{command:`curl -fsSL https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh | bash`,type:`script`}]}},{name:`junie`,displayName:`Junie CLI`,homepage:`https://junie.jetbrains.com/docs/junie-cli.html`,packages:{npm:`@jetbrains/junie`},binaryName:`junie`,versionProbe:{command:[`junie`,`--version`]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`iex (irm 'https://junie.jetbrains.com/install.ps1')`,type:`script`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://junie.jetbrains.com/install.sh | bash`,type:`script`},{packageName:`jetbrains-junie/junie/junie`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://junie.jetbrains.com/install.sh | bash`,type:`script`},{packageName:`jetbrains-junie/junie/junie`,type:`brew`}]}},{name:`kilo`,displayName:`Kilo CLI`,homepage:`https://kilo.ai/docs/cli`,packages:{npm:`@kilocode/cli`},binaryName:`kilo`,selfUpdate:{command:[`kilo`,`upgrade`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`}],linux:[{type:`bun`},{type:`npm`}]}},{name:`kimi`,lookupAliases:[`kimi-code`,`kimi-cli`],displayName:`Kimi Code`,homepage:`https://moonshotai.github.io/kimi-code/`,binaryName:`kimi`,packages:{npm:`@moonshot-ai/kimi-code`},selfUpdate:{command:[`kimi`,`upgrade`]},versionProbe:{command:[`kimi`,`--version`]},platforms:{windows:[{command:`irm https://code.kimi.com/kimi-code/install.ps1 | iex`,type:`script`},{type:`npm`}],macos:[{command:`curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash`,type:`script`},{type:`npm`}],linux:[{command:`curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash`,type:`script`},{type:`npm`}]}},{name:`kiro`,lookupAliases:[`kiro-cli`],displayName:`Kiro CLI`,homepage:`https://kiro.dev/cli/`,binaryName:`kiro-cli`,versionProbe:{command:[`kiro-cli`,`--version`]},platforms:{windows:[{command:`irm 'https://cli.kiro.dev/install.ps1' | iex`,type:`script`}],macos:[{command:`curl -fsSL https://cli.kiro.dev/install | bash`,type:`script`}],linux:[{command:`curl -fsSL https://cli.kiro.dev/install | bash`,type:`script`}]}},{name:`mimo`,lookupAliases:[`mimocode`,`mimo-code`],displayName:`MiMoCode`,homepage:`https://github.com/XiaomiMiMo/MiMo-Code`,packages:{npm:`@mimo-ai/cli`},binaryName:`mimo`,versionProbe:{command:[`mimo`,`--version`]},platforms:{windows:[{type:`npm`}],macos:[{command:`curl -fsSL https://mimo.xiaomi.com/install | bash`,type:`script`},{type:`npm`}],linux:[{command:`curl -fsSL https://mimo.xiaomi.com/install | bash`,type:`script`},{type:`npm`}]}},{name:`omp`,displayName:`oh-my-pi (OMP)`,homepage:`https://github.com/can1357/oh-my-pi`,packages:{npm:`@oh-my-pi/pi-coding-agent`},binaryName:`omp`,versionProbe:{command:[`omp`,`--version`]},platforms:{windows:[{type:`bun`},{command:`irm https://omp.sh/install.ps1 | iex`,type:`script`}],macos:[{type:`bun`},{command:`curl -fsSL https://omp.sh/install | sh`,type:`script`}],linux:[{type:`bun`},{command:`curl -fsSL https://omp.sh/install | sh`,type:`script`}]}},{name:`opencode`,displayName:`OpenCode`,homepage:`https://opencode.ai`,packages:{npm:`opencode-ai`},binaryName:`opencode`,selfUpdate:{command:[`opencode`,`upgrade`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://opencode.ai/install | bash`,type:`script`},{packageName:`anomalyco/tap/opencode`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://opencode.ai/install | bash`,type:`script`},{packageName:`anomalyco/tap/opencode`,type:`brew`}]}},{name:`openhands`,displayName:`OpenHands CLI`,homepage:`https://docs.openhands.dev/openhands/usage/cli/installation`,binaryName:`openhands`,packages:{uv:`openhands`},selfUpdate:{command:[`uv`,`tool`,`upgrade`,`openhands`,`--python`,`3.12`]},versionProbe:{command:[`openhands`,`--version`]},platforms:{macos:[{packageInstallArgs:[`--python`,`3.12`],type:`uv`},{command:`curl -fsSL https://install.openhands.dev/install.sh | sh`,type:`script`}],linux:[{packageInstallArgs:[`--python`,`3.12`],type:`uv`},{command:`curl -fsSL https://install.openhands.dev/install.sh | sh`,type:`script`}]}},{name:`pi`,displayName:`Pi`,homepage:`https://pi.dev`,packages:{npm:`@mariozechner/pi-coding-agent`},binaryName:`pi`,selfUpdate:{command:[`pi`,`update`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`}],linux:[{type:`bun`},{type:`npm`}]}},{name:`qoder`,lookupAliases:[`qodercli`],displayName:`Qoder CLI`,homepage:`https://docs.qoder.com/cli/quick-start`,packages:{npm:`@qoder-ai/qodercli`},binaryName:`qodercli`,selfUpdate:{command:[`qodercli`,`update`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://qoder.com/install | bash`,type:`script`},{packageName:`qoderai/qoder/qodercli`,packageTargetKind:`cask`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://qoder.com/install | bash`,type:`script`},{packageName:`qoderai/qoder/qodercli`,packageTargetKind:`cask`,type:`brew`}]}},{name:`qwen`,displayName:`Qwen Code`,homepage:`https://qwenlm.github.io/qwen-code-docs/`,packages:{npm:`@qwen-code/qwen-code`},binaryName:`qwen`,platforms:{windows:[{command:`curl -fsSL -o %TEMP%\\install-qwen.bat https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.bat && %TEMP%\\install-qwen.bat`,type:`script`},{type:`bun`},{type:`npm`}],macos:[{command:`curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh | bash`,type:`script`},{type:`bun`},{type:`npm`},{packageName:`qwen-code`,type:`brew`}],linux:[{command:`curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh | bash`,type:`script`},{type:`bun`},{type:`npm`},{packageName:`qwen-code`,type:`brew`}]}},{name:`reasonix`,lookupAliases:[`deepseek-reasonix`],displayName:`Reasonix`,homepage:`https://github.com/esengine/DeepSeek-Reasonix`,packages:{npm:`reasonix`},binaryName:`reasonix`,selfUpdate:{command:[`reasonix`,`update`]},versionProbe:{command:[`reasonix`,`--version`]},platforms:{windows:[{type:`npm`}],macos:[{type:`npm`}],linux:[{type:`npm`}]}},{name:`vibe`,lookupAliases:[`mistral-vibe`],displayName:`Mistral Vibe`,homepage:`https://docs.mistral.ai/mistral-vibe/terminal/install`,binaryName:`vibe`,packages:{pip:`mistral-vibe`,uv:`mistral-vibe`},versionProbe:{command:[`vibe`,`--version`]},platforms:{windows:[{packageName:`mistral-vibe`,type:`uv`},{packageName:`mistral-vibe`,type:`pip`}],macos:[{command:`curl -LsSf https://mistral.ai/vibe/install.sh | bash`,type:`script`},{packageName:`mistral-vibe`,type:`uv`},{packageName:`mistral-vibe`,type:`pip`}],linux:[{command:`curl -LsSf https://mistral.ai/vibe/install.sh | bash`,type:`script`},{packageName:`mistral-vibe`,type:`uv`},{packageName:`mistral-vibe`,type:`pip`}]}},{name:`vtcode`,displayName:`VTCode`,homepage:`https://github.com/vinhnx/vtcode`,packages:{cargo:`vtcode`},binaryName:`vtcode`,selfUpdate:{command:[`vtcode`,`update`]},versionProbe:{command:[`vtcode`,`--version`]},platforms:{windows:[{type:`cargo`},{command:`irm https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.ps1 | iex`,type:`script`}],macos:[{command:`curl -fsSL https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh | bash`,type:`script`},{type:`cargo`},{packageName:`vtcode`,type:`brew`}],linux:[{command:`curl -fsSL https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh | bash`,type:`script`},{type:`cargo`},{packageName:`vtcode`,type:`brew`}]}}],o=r.string().min(1),s=r.array(o).min(1);r.enum([`windows`,`macos`,`linux`]);const c=r.enum([`bun`,`npm`,`brew`,`cargo`,`deno`,`mise`,`pip`,`uv`,`winget`]),l=r.enum([`package`,`cask`,`id`]),u={binaryName:o.optional(),packageInstallArgs:r.array(o).min(1).optional(),packageName:o.optional(),packageTargetKind:l.optional()},d=r.object({...u,type:c}).strict(),f=r.object({...u,command:o,type:r.literal(`script`)}).strict(),p=r.object({...u,command:o,type:r.literal(`binary`)}).strict(),m=r.discriminatedUnion(`type`,[d,f,p]),ee=r.object({cargo:o.optional(),deno:o.optional(),mise:o.optional(),npm:o.optional(),pip:o.optional(),uv:o.optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`packages must include at least one package identifier`}),te=r.object({command:s,fallbackCommands:r.array(s).min(1).optional(),versionAfter:r.enum([`same-process`,`respawn`]).optional()}).strict(),ne=r.object({command:s.optional()}).strict().refine(e=>e.command!==void 0,{message:`versionProbe must include a serializable command`}),h=r.object({linux:r.array(m).min(1).optional(),macos:r.array(m).min(1).optional(),windows:r.array(m).min(1).optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`platforms must include at least one supported platform`}),g=r.object({binaryName:o,displayName:o,homepage:r.url().startsWith(`https://`),lookupAliases:r.array(o).min(1).optional(),name:o.regex(/^[a-z0-9][a-z0-9-]*$/),packages:ee.optional(),platforms:h,selfUpdate:te.optional(),versionProbe:ne.optional()}).strict(),_=r.array(g).min(1),v={...n(_),$id:`https://github.com/Drswith/quantex-cli/schemas/agent-catalog.schema.json`,title:`Quantex Supported Agent Catalog`},y={},b=_.parse(a).map(w),x=new Map(b.map(e=>[e.name,e]));function S(){return b}function C(e){let t=x.get(e);if(!t)throw Error(`Unknown catalog agent: ${e}`);return t}function w(e){let t=y[e.name],n=T(e.versionProbe,t);return{...e,versionProbe:n}}function T(e,t){if(!(!e&&!t?.versionProbeParser))return{...e,...t?.versionProbeParser?{parser:t.versionProbeParser}:{}}}C(`amp`),C(`antigravity`),C(`auggie`);const E=C(`autohand`),D=C(`claude`),O=C(`codebuddy`),k=C(`codewhale`),A=C(`codex`),j=C(`copilot`);C(`crush`);const M=C(`cursor`),N=C(`deepcode`),P=C(`devin`),F=C(`droid`);C(`forgecode`);const I=C(`gemini`),L=C(`genie`);C(`goose`);const R=C(`jcode`),re=C(`junie`),z=C(`kilo`);C(`kimi`),C(`kiro`);const B=C(`mimo`),V=C(`omp`),H=C(`opencode`),U=C(`openhands`),W=C(`pi`),G=C(`qoder`);C(`qwen`);const K=C(`reasonix`),q=C(`vibe`),J=C(`vtcode`),Y=S();function X(){return Y}function Z(e){return Y.find(t=>t.name===e||(t.lookupAliases?.includes(e)??!1))}function ie(e){return Z(e)}function ae(){switch(i.platform){case`win32`:return`windows`;case`darwin`:return`macos`;default:return`linux`}}async function Q(n){try{let{exitCode:r}=await t(e([n,`--version`]));return r===0}catch{return!1}}async function oe(){return Q(`bun`)}async function $(){return Q(`npm`)}async function se(){return Q(`brew`)}async function ce(){return Q(`deno`)}async function le(){return Q(`cargo`)}async function ue(){return Q(`mise`)}async function de(){return Q(`winget`)}async function fe(){return await Q(`pip`)||await Q(`pip3`)?!0:me()}async function pe(){return Q(`uv`)}async function me(){try{let{exitCode:n}=await t(e([`python`,`-m`,`pip`,`--version`]));if(n===0)return!0}catch{}try{let{exitCode:n}=await t(e([`python3`,`-m`,`pip`,`--version`]));return n===0}catch{return!1}}async function he(n){try{let{exitCode:r}=await t(e([i.platform===`win32`?`where`:`which`,n]));return r===0}catch{return!1}}export{B as A,S as B,P as C,R as D,L as E,G as F,v as H,K as I,q as L,H as M,U as N,re as O,W as P,J as R,N as S,I as T,_ as U,g as V,O as _,le as a,j as b,$ as c,de as d,Z as f,D as g,E as h,oe as i,V as j,z as k,fe as l,X as m,he as n,ce as o,ie as p,se as r,ue as s,ae as t,pe as u,k as v,F as w,M as x,A as y,C as z};
|
|
1
|
+
import{G as e,W as t}from"./color-Brg6IVS7.mjs";import{toJSONSchema as n,z as r}from"zod";import i from"node:process";const a=[{name:`amp`,displayName:`Amp`,homepage:`https://ampcode.com/`,packages:{npm:`@sourcegraph/amp`},binaryName:`amp`,selfUpdate:{command:[`amp`,`update`]},versionProbe:{command:[`amp`,`version`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`}],linux:[{type:`bun`},{type:`npm`}]}},{name:`antigravity`,lookupAliases:[`agy`,`antigravity-cli`],displayName:`Antigravity CLI`,homepage:`https://antigravity.google/product/antigravity-cli`,binaryName:`agy`,selfUpdate:{command:[`agy`,`update`]},versionProbe:{command:[`agy`,`--version`]},platforms:{windows:[{command:`irm https://antigravity.google/cli/install.ps1 | iex`,type:`script`}],macos:[{command:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,type:`script`}],linux:[{command:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,type:`script`}]}},{name:`auggie`,displayName:`Auggie CLI`,homepage:`https://docs.augmentcode.com/cli/overview`,packages:{npm:`@augmentcode/auggie`},binaryName:`auggie`,selfUpdate:{command:[`auggie`,`upgrade`]},versionProbe:{command:[`auggie`,`--version`]},platforms:{macos:[{type:`bun`},{type:`npm`}],linux:[{type:`bun`},{type:`npm`}]}},{name:`autohand`,lookupAliases:[`autohand-cli`],displayName:`Autohand Code CLI`,homepage:`https://autohand.ai/cli/`,packages:{npm:`autohand-cli`},binaryName:`autohand`,versionProbe:{command:[`autohand`,`--version`]},platforms:{windows:[{command:`iwr -useb https://autohand.ai/install.ps1 | iex`,type:`script`}],macos:[{command:`curl -fsSL https://autohand.ai/install.sh | bash`,type:`script`}],linux:[{command:`curl -fsSL https://autohand.ai/install.sh | bash`,type:`script`}]}},{name:`claude`,displayName:`Claude Code`,homepage:`https://code.claude.com/docs`,packages:{npm:`@anthropic-ai/claude-code`},binaryName:`claude`,selfUpdate:{command:[`claude`,`update`],fallbackCommands:[[`claude`,`upgrade`]]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`irm https://claude.ai/install.ps1 | iex`,type:`script`},{packageName:`Anthropic.ClaudeCode`,packageTargetKind:`id`,type:`winget`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://claude.ai/install.sh | bash`,type:`script`},{packageName:`claude-code`,packageTargetKind:`cask`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://claude.ai/install.sh | bash`,type:`script`},{packageName:`claude-code`,packageTargetKind:`cask`,type:`brew`}]}},{name:`codebuddy`,lookupAliases:[`codebuddy-code`],displayName:`CodeBuddy Code`,homepage:`https://www.codebuddy.cn/docs/cli/installation`,packages:{npm:`@tencent-ai/codebuddy-code`},binaryName:`codebuddy`,selfUpdate:{command:[`codebuddy`,`update`]},versionProbe:{command:[`codebuddy`,`--version`]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`irm https://www.codebuddy.cn/cli/install.ps1 | iex`,type:`script`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://www.codebuddy.cn/cli/install.sh | bash`,type:`script`},{packageName:`Tencent-CodeBuddy/tap/codebuddy-code`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://www.codebuddy.cn/cli/install.sh | bash`,type:`script`},{packageName:`Tencent-CodeBuddy/tap/codebuddy-code`,type:`brew`}]}},{name:`codewhale`,displayName:`CodeWhale`,homepage:`https://github.com/Hmbown/CodeWhale`,packages:{cargo:`codewhale-cli`,npm:`codewhale`},binaryName:`codewhale`,selfUpdate:{command:[`codewhale`,`update`]},versionProbe:{command:[`codewhale`,`--version`]},platforms:{windows:[{type:`npm`},{packageInstallArgs:[`--locked`],type:`cargo`}],macos:[{type:`npm`},{packageInstallArgs:[`--locked`],type:`cargo`}],linux:[{type:`npm`},{packageInstallArgs:[`--locked`],type:`cargo`}]}},{name:`codex`,displayName:`Codex CLI`,homepage:`https://developers.openai.com/codex/cli`,packages:{mise:`npm:@openai/codex`,npm:`@openai/codex`},binaryName:`codex`,selfUpdate:{command:[`codex`,`--upgrade`]},platforms:{windows:[{type:`bun`},{type:`npm`},{type:`mise`}],macos:[{type:`bun`},{type:`npm`},{type:`mise`},{packageName:`codex`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{type:`mise`},{packageName:`codex`,type:`brew`}]}},{name:`copilot`,displayName:`GitHub Copilot CLI`,homepage:`https://github.com/features/copilot/cli`,packages:{npm:`@github/copilot`},binaryName:`copilot`,platforms:{windows:[{packageName:`GitHub.Copilot`,packageTargetKind:`id`,type:`winget`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://gh.io/copilot-install | bash`,type:`script`},{packageName:`copilot-cli`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://gh.io/copilot-install | bash`,type:`script`},{packageName:`copilot-cli`,type:`brew`}]}},{name:`crush`,displayName:`Crush`,homepage:`https://github.com/charmbracelet/crush`,packages:{npm:`@charmland/crush`},binaryName:`crush`,selfUpdate:{command:[`crush`,`update`]},versionProbe:{command:[`crush`,`--version`]},platforms:{windows:[{type:`bun`},{type:`npm`},{packageName:`charmbracelet.crush`,packageTargetKind:`id`,type:`winget`}],macos:[{type:`bun`},{type:`npm`},{packageName:`charmbracelet/tap/crush`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{packageName:`charmbracelet/tap/crush`,type:`brew`}]}},{name:`cursor`,lookupAliases:[`agent`],displayName:`Cursor CLI`,homepage:`https://cursor.com/docs/cli`,binaryName:`agent`,selfUpdate:{command:[`agent`,`update`]},versionProbe:{command:[`agent`,`--version`]},platforms:{windows:[{command:`irm 'https://cursor.com/install?win32=true' | iex`,type:`script`}],macos:[{command:`curl https://cursor.com/install -fsS | bash`,type:`script`}],linux:[{command:`curl https://cursor.com/install -fsS | bash`,type:`script`}]}},{name:`deepcode`,displayName:`Deep Code CLI`,homepage:`https://github.com/lessweb/deepcode-cli`,packages:{npm:`@vegamo/deepcode-cli`},binaryName:`deepcode`,versionProbe:{command:[`deepcode`,`--version`]},platforms:{windows:[{type:`npm`}],macos:[{type:`npm`}],linux:[{type:`npm`}]}},{name:`devin`,displayName:`Devin for Terminal`,homepage:`https://cli.devin.ai/`,binaryName:`devin`,selfUpdate:{command:[`devin`,`update`]},versionProbe:{command:[`devin`,`version`]},platforms:{windows:[{command:`irm https://static.devin.ai/cli/setup.ps1 | iex`,type:`script`}],macos:[{command:`curl -fsSL https://cli.devin.ai/install.sh | bash`,type:`script`}],linux:[{command:`curl -fsSL https://cli.devin.ai/install.sh | bash`,type:`script`}]}},{name:`droid`,displayName:`Droid`,homepage:`https://docs.factory.ai/cli/getting-started/overview`,packages:{npm:`droid`},binaryName:`droid`,selfUpdate:{command:[`droid`,`update`]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`irm https://app.factory.ai/cli/windows | iex`,type:`script`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://app.factory.ai/cli | sh`,type:`script`},{packageName:`droid`,packageTargetKind:`cask`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://app.factory.ai/cli | sh`,type:`script`},{packageName:`droid`,packageTargetKind:`cask`,type:`brew`}]}},{name:`forgecode`,lookupAliases:[`forge`],displayName:`ForgeCode`,homepage:`https://forgecode.dev`,packages:{npm:`forgecode`},binaryName:`forge`,selfUpdate:{command:[`forge`,`update`]},versionProbe:{command:[`forge`,`--version`]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`irm https://forgecode.dev/cli | iex`,type:`script`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://forgecode.dev/cli | sh`,type:`script`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://forgecode.dev/cli | sh`,type:`script`}]}},{name:`gemini`,displayName:`Gemini CLI`,homepage:`https://google-gemini.github.io/gemini-cli/docs/`,packages:{npm:`@google/gemini-cli`},binaryName:`gemini`,platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`},{packageName:`gemini-cli`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{packageName:`gemini-cli`,type:`brew`}]}},{name:`genie`,displayName:`Genie`,homepage:`https://jsr.io/@nicorio/genie`,packages:{deno:`jsr:@nicorio/genie`},binaryName:`genie`,platforms:{windows:[{packageInstallArgs:[`-A`],type:`deno`}],macos:[{packageInstallArgs:[`-A`],type:`deno`}],linux:[{packageInstallArgs:[`-A`],type:`deno`}]}},{name:`goose`,displayName:`Goose`,homepage:`https://github.com/aaif-goose/goose`,binaryName:`goose`,selfUpdate:{command:[`goose`,`update`]},versionProbe:{command:[`goose`,`--version`]},platforms:{windows:[{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,type:`script`},{command:`Invoke-WebRequest -Uri "https://raw.githubusercontent.com/aaif-goose/goose/main/download_cli.ps1" -OutFile "download_cli.ps1"; ./download_cli.ps1`,type:`script`}],macos:[{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,type:`script`},{packageName:`block-goose-cli`,type:`brew`}],linux:[{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,type:`script`},{packageName:`block-goose-cli`,type:`brew`}]}},{name:`jcode`,displayName:`JCode`,homepage:`https://github.com/1jehuang/jcode`,binaryName:`jcode`,versionProbe:{command:[`jcode`,`--version`]},platforms:{windows:[{command:`irm https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.ps1 | iex`,type:`script`}],macos:[{packageName:`1jehuang/jcode/jcode`,type:`brew`},{command:`curl -fsSL https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh | bash`,type:`script`}],linux:[{command:`curl -fsSL https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh | bash`,type:`script`}]}},{name:`junie`,displayName:`Junie CLI`,homepage:`https://junie.jetbrains.com/docs/junie-cli.html`,packages:{npm:`@jetbrains/junie`},binaryName:`junie`,versionProbe:{command:[`junie`,`--version`]},platforms:{windows:[{type:`bun`},{type:`npm`},{command:`iex (irm 'https://junie.jetbrains.com/install.ps1')`,type:`script`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://junie.jetbrains.com/install.sh | bash`,type:`script`},{packageName:`jetbrains-junie/junie/junie`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://junie.jetbrains.com/install.sh | bash`,type:`script`},{packageName:`jetbrains-junie/junie/junie`,type:`brew`}]}},{name:`kilo`,displayName:`Kilo CLI`,homepage:`https://kilo.ai/docs/cli`,packages:{npm:`@kilocode/cli`},binaryName:`kilo`,selfUpdate:{command:[`kilo`,`upgrade`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`}],linux:[{type:`bun`},{type:`npm`}]}},{name:`kimi`,lookupAliases:[`kimi-code`,`kimi-cli`],displayName:`Kimi Code`,homepage:`https://moonshotai.github.io/kimi-code/`,binaryName:`kimi`,packages:{npm:`@moonshot-ai/kimi-code`},selfUpdate:{command:[`kimi`,`upgrade`]},versionProbe:{command:[`kimi`,`--version`]},platforms:{windows:[{command:`irm https://code.kimi.com/kimi-code/install.ps1 | iex`,type:`script`},{type:`npm`}],macos:[{command:`curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash`,type:`script`},{type:`npm`}],linux:[{command:`curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash`,type:`script`},{type:`npm`}]}},{name:`kiro`,lookupAliases:[`kiro-cli`],displayName:`Kiro CLI`,homepage:`https://kiro.dev/cli/`,binaryName:`kiro-cli`,versionProbe:{command:[`kiro-cli`,`--version`]},platforms:{windows:[{command:`irm 'https://cli.kiro.dev/install.ps1' | iex`,type:`script`}],macos:[{command:`curl -fsSL https://cli.kiro.dev/install | bash`,type:`script`}],linux:[{command:`curl -fsSL https://cli.kiro.dev/install | bash`,type:`script`}]}},{name:`mimo`,lookupAliases:[`mimocode`,`mimo-code`],displayName:`MiMoCode`,homepage:`https://github.com/XiaomiMiMo/MiMo-Code`,packages:{npm:`@mimo-ai/cli`},binaryName:`mimo`,versionProbe:{command:[`mimo`,`--version`]},platforms:{windows:[{type:`npm`}],macos:[{command:`curl -fsSL https://mimo.xiaomi.com/install | bash`,type:`script`},{type:`npm`}],linux:[{command:`curl -fsSL https://mimo.xiaomi.com/install | bash`,type:`script`},{type:`npm`}]}},{name:`omp`,displayName:`oh-my-pi (OMP)`,homepage:`https://github.com/can1357/oh-my-pi`,packages:{npm:`@oh-my-pi/pi-coding-agent`},binaryName:`omp`,versionProbe:{command:[`omp`,`--version`]},platforms:{windows:[{type:`bun`},{command:`irm https://omp.sh/install.ps1 | iex`,type:`script`}],macos:[{type:`bun`},{command:`curl -fsSL https://omp.sh/install | sh`,type:`script`}],linux:[{type:`bun`},{command:`curl -fsSL https://omp.sh/install | sh`,type:`script`}]}},{name:`opencode`,displayName:`OpenCode`,homepage:`https://opencode.ai`,packages:{npm:`opencode-ai`},binaryName:`opencode`,selfUpdate:{command:[`opencode`,`upgrade`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://opencode.ai/install | bash`,type:`script`},{packageName:`anomalyco/tap/opencode`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://opencode.ai/install | bash`,type:`script`},{packageName:`anomalyco/tap/opencode`,type:`brew`}]}},{name:`openhands`,displayName:`OpenHands CLI`,homepage:`https://docs.openhands.dev/openhands/usage/cli/installation`,binaryName:`openhands`,packages:{uv:`openhands`},selfUpdate:{command:[`uv`,`tool`,`upgrade`,`openhands`,`--python`,`3.12`]},versionProbe:{command:[`openhands`,`--version`]},platforms:{macos:[{packageInstallArgs:[`--python`,`3.12`],type:`uv`},{command:`curl -fsSL https://install.openhands.dev/install.sh | sh`,type:`script`}],linux:[{packageInstallArgs:[`--python`,`3.12`],type:`uv`},{command:`curl -fsSL https://install.openhands.dev/install.sh | sh`,type:`script`}]}},{name:`pi`,displayName:`Pi`,homepage:`https://pi.dev`,packages:{npm:`@mariozechner/pi-coding-agent`},binaryName:`pi`,selfUpdate:{command:[`pi`,`update`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`}],linux:[{type:`bun`},{type:`npm`}]}},{name:`qoder`,lookupAliases:[`qodercli`],displayName:`Qoder CLI`,homepage:`https://docs.qoder.com/cli/quick-start`,packages:{npm:`@qoder-ai/qodercli`},binaryName:`qodercli`,selfUpdate:{command:[`qodercli`,`update`]},platforms:{windows:[{type:`bun`},{type:`npm`}],macos:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://qoder.com/install | bash`,type:`script`},{packageName:`qoderai/qoder/qodercli`,packageTargetKind:`cask`,type:`brew`}],linux:[{type:`bun`},{type:`npm`},{command:`curl -fsSL https://qoder.com/install | bash`,type:`script`},{packageName:`qoderai/qoder/qodercli`,packageTargetKind:`cask`,type:`brew`}]}},{name:`qwen`,displayName:`Qwen Code`,homepage:`https://qwenlm.github.io/qwen-code-docs/`,packages:{npm:`@qwen-code/qwen-code`},binaryName:`qwen`,platforms:{windows:[{command:`curl -fsSL -o %TEMP%\\install-qwen.bat https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.bat && %TEMP%\\install-qwen.bat`,type:`script`},{type:`bun`},{type:`npm`}],macos:[{command:`curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh | bash`,type:`script`},{type:`bun`},{type:`npm`},{packageName:`qwen-code`,type:`brew`}],linux:[{command:`curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh | bash`,type:`script`},{type:`bun`},{type:`npm`},{packageName:`qwen-code`,type:`brew`}]}},{name:`reasonix`,lookupAliases:[`deepseek-reasonix`],displayName:`Reasonix`,homepage:`https://github.com/esengine/DeepSeek-Reasonix`,packages:{npm:`reasonix`},binaryName:`reasonix`,selfUpdate:{command:[`reasonix`,`update`]},versionProbe:{command:[`reasonix`,`--version`]},platforms:{windows:[{type:`npm`}],macos:[{type:`npm`}],linux:[{type:`npm`}]}},{name:`vibe`,lookupAliases:[`mistral-vibe`],displayName:`Mistral Vibe`,homepage:`https://docs.mistral.ai/mistral-vibe/terminal/install`,binaryName:`vibe`,packages:{pip:`mistral-vibe`,uv:`mistral-vibe`},versionProbe:{command:[`vibe`,`--version`]},platforms:{windows:[{packageName:`mistral-vibe`,type:`uv`},{packageName:`mistral-vibe`,type:`pip`}],macos:[{command:`curl -LsSf https://mistral.ai/vibe/install.sh | bash`,type:`script`},{packageName:`mistral-vibe`,type:`uv`},{packageName:`mistral-vibe`,type:`pip`}],linux:[{command:`curl -LsSf https://mistral.ai/vibe/install.sh | bash`,type:`script`},{packageName:`mistral-vibe`,type:`uv`},{packageName:`mistral-vibe`,type:`pip`}]}},{name:`vtcode`,displayName:`VTCode`,homepage:`https://github.com/vinhnx/vtcode`,packages:{cargo:`vtcode`},binaryName:`vtcode`,selfUpdate:{command:[`vtcode`,`update`]},versionProbe:{command:[`vtcode`,`--version`]},platforms:{windows:[{type:`cargo`},{command:`irm https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.ps1 | iex`,type:`script`}],macos:[{command:`curl -fsSL https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh | bash`,type:`script`},{type:`cargo`},{packageName:`vtcode`,type:`brew`}],linux:[{command:`curl -fsSL https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh | bash`,type:`script`},{type:`cargo`},{packageName:`vtcode`,type:`brew`}]}}],o=r.string().min(1),s=r.array(o).min(1);r.enum([`windows`,`macos`,`linux`]);const c=r.enum([`bun`,`npm`,`brew`,`cargo`,`deno`,`mise`,`pip`,`uv`,`winget`]),l=r.enum([`package`,`cask`,`id`]),u={binaryName:o.optional(),packageInstallArgs:r.array(o).min(1).optional(),packageName:o.optional(),packageTargetKind:l.optional()},d=r.object({...u,type:c}).strict(),f=r.object({...u,command:o,type:r.literal(`script`)}).strict(),p=r.object({...u,command:o,type:r.literal(`binary`)}).strict(),m=r.discriminatedUnion(`type`,[d,f,p]),ee=r.object({cargo:o.optional(),deno:o.optional(),mise:o.optional(),npm:o.optional(),pip:o.optional(),uv:o.optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`packages must include at least one package identifier`}),te=r.object({command:s,fallbackCommands:r.array(s).min(1).optional(),versionAfter:r.enum([`same-process`,`respawn`]).optional()}).strict(),ne=r.object({command:s.optional()}).strict().refine(e=>e.command!==void 0,{message:`versionProbe must include a serializable command`}),h=r.object({linux:r.array(m).min(1).optional(),macos:r.array(m).min(1).optional(),windows:r.array(m).min(1).optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`platforms must include at least one supported platform`}),g=r.object({binaryName:o,displayName:o,homepage:r.url().startsWith(`https://`),lookupAliases:r.array(o).min(1).optional(),name:o.regex(/^[a-z0-9][a-z0-9-]*$/),packages:ee.optional(),platforms:h,selfUpdate:te.optional(),versionProbe:ne.optional()}).strict(),_=r.array(g).min(1),v={...n(_),$id:`https://github.com/Drswith/quantex-cli/schemas/agent-catalog.schema.json`,title:`Quantex Supported Agent Catalog`},y={},b=_.parse(a).map(w),x=new Map(b.map(e=>[e.name,e]));function S(){return b}function C(e){let t=x.get(e);if(!t)throw Error(`Unknown catalog agent: ${e}`);return t}function w(e){let t=y[e.name],n=T(e.versionProbe,t);return{...e,versionProbe:n}}function T(e,t){if(!(!e&&!t?.versionProbeParser))return{...e,...t?.versionProbeParser?{parser:t.versionProbeParser}:{}}}C(`amp`),C(`antigravity`),C(`auggie`);const E=C(`autohand`),D=C(`claude`),O=C(`codebuddy`),k=C(`codewhale`),A=C(`codex`),j=C(`copilot`);C(`crush`);const M=C(`cursor`),N=C(`deepcode`),P=C(`devin`),F=C(`droid`);C(`forgecode`);const I=C(`gemini`),L=C(`genie`);C(`goose`);const R=C(`jcode`),re=C(`junie`),z=C(`kilo`);C(`kimi`),C(`kiro`);const B=C(`mimo`),V=C(`omp`),H=C(`opencode`),U=C(`openhands`),W=C(`pi`),G=C(`qoder`);C(`qwen`);const K=C(`reasonix`),q=C(`vibe`),J=C(`vtcode`),Y=S();function X(){return Y}function Z(e){return Y.find(t=>t.name===e||(t.lookupAliases?.includes(e)??!1))}function ie(e){return Z(e)}function ae(){switch(i.platform){case`win32`:return`windows`;case`darwin`:return`macos`;default:return`linux`}}async function Q(n){try{let{exitCode:r}=await t(e([n,`--version`]));return r===0}catch{return!1}}async function oe(){return Q(`bun`)}async function $(){return Q(`npm`)}async function se(){return Q(`brew`)}async function ce(){return Q(`deno`)}async function le(){return Q(`cargo`)}async function ue(){return Q(`mise`)}async function de(){return Q(`winget`)}async function fe(){return await Q(`pip`)||await Q(`pip3`)?!0:me()}async function pe(){return Q(`uv`)}async function me(){try{let{exitCode:n}=await t(e([`python`,`-m`,`pip`,`--version`]));if(n===0)return!0}catch{}try{let{exitCode:n}=await t(e([`python3`,`-m`,`pip`,`--version`]));return n===0}catch{return!1}}async function he(n){try{let{exitCode:r}=await t(e([i.platform===`win32`?`where`:`which`,n]));return r===0}catch{return!1}}export{B as A,S as B,P as C,R as D,L as E,G as F,v as H,K as I,q as L,H as M,U as N,re as O,W as P,J as R,N as S,I as T,_ as U,g as V,O as _,le as a,j as b,$ as c,de as d,Z as f,D as g,E as h,oe as i,V as j,z as k,fe as l,X as m,he as n,ce as o,ie as p,se as r,ue as s,ae as t,pe as u,k as v,F as w,M as x,A as y,C as z};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{n as e,t}from"./messages-qcLhD-Gc.mjs";import{J as n,U as r,a as i,r as a,s as o,t as s,u as c}from"./color-
|
|
1
|
+
import{n as e,t}from"./messages-qcLhD-Gc.mjs";import{J as n,U as r,a as i,r as a,s as o,t as s,u as c}from"./color-Brg6IVS7.mjs";import{a as l,c as u,d,i as f,l as p,o as m,r as h,s as g,u as _}from"./detect-CP166fHX.mjs";import{t as v}from"./agents-5FZfizCZ.mjs";async function y(){let n=await f(),s=await u(),y=await h(),S=await l(),C=await m(),w=await g(),T=await p(),E=await _(),D=await d(),O=await o(),k=O.latestVersion?r(O.latestVersion,O.currentVersion):!1,A=await v(),j=A.filter(e=>e.inPath).map(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})),M=[],N=`docs/runbooks/quantex-troubleshooting.md`,P=`docs/runbooks/release-and-self-upgrade-debugging.md`;if(!n&&!s&&!y&&!S&&!C&&!w&&!T&&!E&&!D&&M.push({blocking:!0,category:`installers`,code:`NO_MANAGED_INSTALLER`,docsRef:N,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:[]}),(O.installSource===`bun`&&!n||O.installSource===`npm`&&!s)&&M.push({blocking:!0,category:`self`,code:`SELF_INSTALLER_MISSING`,docsRef:P,message:`Quantex CLI is tracked as a ${O.installSource} install, but ${O.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:x(O.installSource,O.updateChannel)}),O.canAutoUpdate||M.push({blocking:!1,category:`self`,code:`SELF_AUTO_UPDATE_UNAVAILABLE`,docsRef:P,message:`Quantex CLI cannot auto-update from install source "${O.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:[]}),k&&O.recommendedUpgradeCommand){let e=c(O);M.push({blocking:!1,category:`self`,code:`SELF_UPDATE_AVAILABLE`,docsRef:P,message:e?`Quantex CLI ${O.currentVersion} is behind ${O.latestVersion}. Run ${O.recommendedUpgradeCommand} or follow: ${e}`:`Quantex CLI ${O.currentVersion} is behind ${O.latestVersion}. Run ${O.recommendedUpgradeCommand}.`,severity:`warning`,subject:{kind:`self`,name:`quantex`},suggestedAction:`run-self-upgrade`,suggestedCommands:[O.recommendedUpgradeCommand]})}for(let n of A.filter(e=>e.inPath)){if(n.installedState||M.push({blocking:!1,category:`agent`,code:`AGENT_UNTRACKED_IN_PATH`,docsRef:N,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 r=t(n.agent,n.agent.selfUpdate?`self-update`:`manual-hint`)??e(n.agent);M.push({blocking:!1,category:`agent`,code:`AGENT_MANUAL_UPDATE_REQUIRED`,docsRef:N,message:`${n.agent.displayName} ${n.installedVersion} is behind ${n.latestVersion}, but the current source is ${n.sourceLabel}. ${r}`,severity:`warning`,subject:{kind:`agent`,name:n.agent.name},suggestedAction:n.agent.selfUpdate?`run-agent-self-update`:`follow-manual-agent-update`,suggestedCommands:n.agent.selfUpdate?[n.agent.selfUpdate.command.join(` `)]:[]})}return i(a({action:`doctor`,data:{agents:j,issues:M,installers:{brew:y,bun:n,cargo:S,deno:C,mise:w,npm:s,pip:T,uv:E,winget:D},self:{canAutoUpdate:O.canAutoUpdate,currentVersion:O.currentVersion,installSource:O.installSource,latestVersion:O.latestVersion,outdated:!!k,recoveryHint:k?c(O):void 0}},target:{kind:`system`,name:`doctor`}}),b)}function b(e){if(e.data){if(console.log(s.bold(`
|
|
2
2
|
Quantex CLI Environment Check
|
|
3
3
|
`)),console.log(s.bold(`Managed Installers:`)),console.log(` Bun: ${e.data.installers.bun?s.green(`available`):s.red(`not found`)}`),console.log(` npm: ${e.data.installers.npm?s.green(`available`):s.red(`not found`)}`),console.log(` brew: ${e.data.installers.brew?s.green(`available`):s.red(`not found`)}`),console.log(` cargo: ${e.data.installers.cargo?s.green(`available`):s.red(`not found`)}`),console.log(` deno: ${e.data.installers.deno?s.green(`available`):s.red(`not found`)}`),console.log(` mise: ${e.data.installers.mise?s.green(`available`):s.red(`not found`)}`),console.log(` pip: ${e.data.installers.pip?s.green(`available`):s.red(`not found`)}`),console.log(` uv: ${e.data.installers.uv?s.green(`available`):s.red(`not found`)}`),console.log(` winget:${e.data.installers.winget?s.green(`available`):s.red(`not found`)}`),console.log(`\n${s.bold(`Quantex CLI:`)}`),console.log(` Version: ${e.data.self.currentVersion}`),console.log(` Source: ${e.data.self.installSource}`),console.log(` Auto-update: ${e.data.self.canAutoUpdate?s.green(`supported`):s.yellow(`unsupported`)}`),e.data.self.latestVersion&&console.log(` Latest: ${e.data.self.latestVersion}${e.data.self.outdated?s.yellow(` (update available)`):``}`),e.data.self.recoveryHint&&console.log(` Recovery: ${e.data.self.recoveryHint}`),console.log(`\n${s.bold(`Installed Agents:`)}`),e.data.agents.length===0)console.log(s.dim(` No agents installed`));else for(let t of e.data.agents)console.log(` ${t.displayName}: ${t.installedVersion??`unknown`} [${t.lifecycle}; ${t.sourceLabel}]${t.outdated?s.yellow(` (update available: ${t.latestVersion})`):``}`);if(console.log(`\n${s.bold(`Issues:`)}`),e.data.issues.length===0)console.log(s.green(` No issues found.`));else for(let t of e.data.issues)console.log(s.yellow(` - ${t.message}`)),t.suggestedCommands.length>0&&console.log(s.dim(` Next: ${t.suggestedCommands.join(` | `)}`));console.log()}}function x(e,t){let r=t===`beta`?`beta`:`latest`;return e===`bun`?[`bun add -g ${n}@${r}`]:e===`npm`?[`npm install -g ${n}@${r}`]:[]}export{y as doctorCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./ensure-wQEX_cAs.mjs";export{e as ensureCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Y as e,a as t,bt as n,i as r,n as i,r as a,t as o}from"./color-Brg6IVS7.mjs";import{c as s,r as c,s as l}from"./agents-5FZfizCZ.mjs";import{t as u}from"./lifecycle-errors-BtqYfS-v.mjs";import{a as d,i as f,n as p,r as m}from"./user-output-BaPTpUe_.mjs";async function h(o){let d=await c(o);if(!d)return t(i({action:`ensure`,error:{code:`AGENT_NOT_FOUND`,details:{input:o},message:`Unknown agent: ${o}`},target:{kind:`agent`,name:o}}),g);let{agent:f,inspection:m}=d;if(m.inPath){if(m.installedState)return t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${f.displayName} is already installed.`}]}),g);let o=n(m.methods,m.resolvedBinaryPath??m.binaryPath);if(o){if(p())return t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`DRY_RUN`,message:`Dry run: would record the existing ${f.displayName} install in Quantex state.`}]}),g);r({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name}},target:{kind:`agent`,name:f.name},type:`started`});try{let e=await s(f,o);return t(e?a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!0,installState:{installType:e.installType,packageName:e.packageName},installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`TRACKED_EXISTING_INSTALL`,message:`${f.displayName} is already installed. Quantex is now tracking the existing install.`}]}):i({action:`ensure`,error:{code:`CANCELLED`,message:`Ensure was cancelled before tracking could complete.`},target:{kind:`agent`,name:f.name}}),g)}catch(n){if(e(n))return t(i({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},...u(n,{kind:`agent`,name:f.name})}),g);throw n}}return t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`UNTRACKED_EXISTING_INSTALL`,message:`${f.displayName} is already installed but not tracked by Quantex. Quantex could not safely determine the supported install source, so the existing install remains unmanaged.`}]}),g)}if(p())return t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!1},target:{kind:`agent`,name:f.name},warnings:[{code:`DRY_RUN`,message:`Dry run: would install ${f.displayName}.`}]}),g);r({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name}},target:{kind:`agent`,name:f.name},type:`started`});let h;try{h=await l(f)}catch(n){if(e(n))return t(i({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!1},...u(n,{kind:`agent`,name:f.name})}),g);throw n}return h.success?t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!0,installState:h.installedState?{installType:h.installedState.installType,packageName:h.installedState.packageName}:void 0,installed:!0},target:{kind:`agent`,name:f.name}}),g):t(i({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!1},error:{code:`INSTALL_FAILED`,message:`Failed to install ${f.displayName}.`},target:{kind:`agent`,name:f.name}}),g)}function g(e){if(e.error){m(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`){f(o.green(t.message));continue}if(t.code===`DRY_RUN`){d(o.cyan(t.message));continue}d(o.yellow(t.message))}return}if(e.data.changed){f(o.cyan(`Installing ${e.data.agent.displayName}...`)),f(o.green(`${e.data.agent.displayName} is now installed.`));return}f(o.green(`${e.data.agent.displayName} is already installed.`))}}export{h as t};
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e,t}from"./messages-qcLhD-Gc.mjs";import{A as n,B as r,C as i,Ct as a,D as ee,Dt as te,E as ne,Et as re,F as ie,I as o,K as s,L as c,M as l,N as u,Ot as d,P as f,Q as p,T as m,Tt as h,V as g,Z as _,a as v,c as y,ct as b,dt as x,ft as S,j as C,k as w,l as T,lt as E,mt as D,n as O,nt as k,o as A,pt as j,q as M,r as N,s as P,st as F,tt as I,u as L,ut as R,w as z,wt as B,z as V}from"./color-
|
|
1
|
+
import{n as e,t}from"./messages-qcLhD-Gc.mjs";import{A as n,B as r,C as i,Ct as a,D as ee,Dt as te,E as ne,Et as re,F as ie,I as o,K as s,L as c,M as l,N as u,Ot as d,P as f,Q as p,T as m,Tt as h,V as g,Z as _,a as v,c as y,ct as b,dt as x,ft as S,j as C,k as w,l as T,lt as E,mt as D,n as O,nt as k,o as A,pt as j,q as M,r as N,s as P,st as F,tt as I,u as L,ut as R,w as z,wt as B,z as V}from"./color-Brg6IVS7.mjs";import{A as H,B as U,C as W,D as G,E as K,F as q,H as J,I as Y,L as ae,M as oe,N as se,O as ce,P as le,R as ue,S as de,T as fe,U as pe,V as me,_ as he,b as ge,c as _e,f as ve,g as ye,h as be,i as xe,j as Se,k as Ce,m as we,n as Te,o as Ee,p as De,t as Oe,v as ke,w as Ae,x as je,y as Me,z as Ne}from"./detect-CP166fHX.mjs";import{t as Pe}from"./capabilities-DZykz2Wo.mjs";import{t as Fe}from"./commands-wopeYsFl.mjs";import{a as Ie,d as Le,f as Re,i as ze,l as Be,n as Ve,o as He,r as Ue,s as We,t as Ge,u as Ke}from"./agents-5FZfizCZ.mjs";import{t as qe}from"./ensure-wQEX_cAs.mjs";import{t as Je}from"./inspect-BU3I5crt.mjs";import{t as Ye}from"./resolve-pbqtA_jk.mjs";import{n as Xe,t as Ze}from"./schema-B-c3-fEZ.mjs";import{n as X,t as Qe}from"./errors-BzXIrX6h.mjs";import{a as $e,i as et,n as tt,t as nt}from"./update-BgtIfzfC.mjs";const rt=[`quantex-darwin-arm64`,`quantex-darwin-x64`,`quantex-linux-arm64`,`quantex-linux-x64`,`quantex-windows-x64.exe`];function it(e){return`${e.sort((e,t)=>e.name.localeCompare(t.name)).map(e=>`${e.checksum} ${e.name}`).join(`
|
|
2
2
|
`)}\n`}function at(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 Z(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 Q(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 $(e){return e.includes(`beta`)?`beta`:`stable`}function ot(e){let t=Q(e.repositoryUrl),n=$(e.version),r=e.files.map(n=>{let r=Z(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 st(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 rt)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(!Z(n.name))throw Error(`manifest.json contains an invalid binary asset name: ${n.name}.`)}}async function ct(e,t){try{let n=await M(s([e,...t]));return{success:n===0,exitCode:n}}catch{return{success:!1,exitCode:1}}}export{me as agentCatalogEntrySchema,J as agentCatalogJsonSchema,pe as agentCatalogSchema,x as agentUpdateProviders,be as autohand,i as canAutoUpdateSelf,a as canLookupLatestVersionForInstallType,S as canResolveAgentUpdate,B as canUninstallInstallType,h as canUpdateInstallType,Pe as capabilitiesCommand,ye as claude,he as codebuddy,ke as codewhale,Me as codex,Fe as commandsCommand,ge as copilot,O as createErrorResult,ot as createReleaseManifest,N as createSuccessResult,et as createUpdatePlan,je as cursor,de as deepcode,z as detectSelfInstallSource,W as devin,Ae as droid,v as emitCommandResult,qe as ensureCommand,ct as execCommand,it as formatChecksums,fe as gemini,K as genie,ve as getAgentByLookupName,De as getAgentByNameOrAlias,t as getAgentUpdateFailureHint,j as getAgentUpdateStrategy,we as getAllAgents,V as getBinaryPath,ne as getBinaryReleaseAssetName,ee as getBinaryReleaseDownloadUrl,Ne as getCatalogAgent,U as getCatalogAgents,F as getCliContext,_ as getConfigDir,p as getConfigFilePath,Qe as getExitCodeForError,X as getExitCodeForResult,re as getInstallLifecycle,w as getInstalledAgentState,r as getInstalledVersion,te as getInstallerCapabilities,g as getLatestVersion,Re as getManagedInstaller,e as getManualAgentUpdateMessage,A as getManualSelfUpgradeCommand,He as getOrderedInstallMethods,Oe as getPlatform,Ze as getSchemaCatalog,n as getSelfState,T as getSelfUpgradeRecoveryHint,L as getSelfUpgradeRecoveryHintForInspection,m as getSelfVersion,nt as getSingleAgentUpdateStatus,C as getStateFilePath,ze as inspectAgent,Ie as inspectAllAgents,Je as inspectCommand,Ge as inspectRegisteredAgents,P as inspectSelf,We as installAgent,Te as isBinaryInPath,xe as isBunAvailable,Ee as isDenoAvailable,$e as isInspectionUpdateAvailable,d as isManagedInstallType,_e as isNpmAvailable,G as jcode,ce as junie,Ce as kilo,I as loadConfig,l as loadState,H as mimo,Q as normalizeRepositoryUrl,Se as omp,oe as opencode,se as openhands,Z as parseBinaryTarget,at as parseChecksums,le as pi,tt as planAgentUpdates,q as qoder,Y as reasonix,u as removeInstalledAgentState,b as resetCliContext,Ve as resolveAgent,Ue as resolveAgentInspection,D as resolveAgentUpdateProvider,E as resolveCliContext,Ye as resolveCommand,$ as resolveReleaseChannel,k as saveConfig,f as saveState,Xe as schemaCommand,R as setCliContext,ie as setInstalledAgentState,o as setSelfInstallSource,c as setSelfUpdateNoticeState,Be as uninstallAgent,Ke as updateAgent,Le as updateAgentsByType,y as upgradeSelf,st as validateReleaseManifest,ae as vibe,ue as vtcode};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_t as e,a as t,gt as n,n as r,r as i,t as a}from"./color-
|
|
1
|
+
import{_t as e,a as t,gt as n,n as r,r as i,t as a}from"./color-Brg6IVS7.mjs";import{r as o}from"./agents-5FZfizCZ.mjs";async function s(a){let s=await o(a);if(!s)return t(r({action:`info`,error:{code:`AGENT_NOT_FOUND`,details:{input:a},message:`Unknown agent: ${a}`},target:{kind:`agent`,name:a}}),c);let{agent:l,inspection:u}=s,d=l.selfUpdate?[l.selfUpdate.command,...l.selfUpdate.fallbackCommands??[]].map(e=>e.join(` `)):[];return t(i({action:`info`,data:{agent:{aliases:l.lookupAliases??[],binaryName:l.binaryName,displayName:l.displayName,installMethods:u.methods.map(t=>({command:n(l,t),label:e(t),type:t.type})),name:l.name,packageName:l.packages?.npm,selfUpdateCommands:d},inspection:{binaryPath:u.binaryPath,installed:u.inPath,installedVersion:u.installedVersion,latestVersion:u.latestVersion,lifecycle:u.lifecycle,sourceLabel:u.inPath?u.sourceLabel:void 0}},target:{kind:`agent`,name:l.name}}),c)}function c(e){if(e.error){console.log(a.red(e.error.message));return}if(e.data){console.log(a.bold(`\n${e.data.agent.displayName}\n`)),console.log(` Name: ${e.data.agent.name}`),console.log(` Aliases: ${e.data.agent.aliases.join(`, `)||`-`}`),console.log(` Package: ${e.data.agent.packageName??`-`}`),console.log(` Binary: ${e.data.agent.binaryName}`),console.log(` Update: ${e.data.agent.selfUpdateCommands.join(` || `)||`-`}`),console.log(` Installed: ${e.data.inspection.installed?a.green(`Yes`):a.red(`No`)}`),e.data.inspection.sourceLabel&&console.log(` Source: ${e.data.inspection.sourceLabel}`),e.data.inspection.installed&&console.log(` Lifecycle: ${e.data.inspection.lifecycle}`),e.data.inspection.installedVersion&&console.log(` Version: ${e.data.inspection.installedVersion}`),e.data.inspection.latestVersion&&console.log(` Latest: ${e.data.inspection.latestVersion}`),e.data.inspection.binaryPath&&console.log(` Path: ${e.data.inspection.binaryPath}`),console.log(a.bold(`
|
|
2
2
|
Install Methods:`));for(let t of e.data.agent.installMethods)console.log(` ${a.green(`+`)} [${t.label}] ${t.command}`);console.log()}}export{s as infoCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{_t as e,a as t,gt as n,n as r,r as i,t as a}from"./color-
|
|
1
|
+
import{_t as e,a as t,gt as n,n as r,r as i,t as a}from"./color-Brg6IVS7.mjs";import{r as o}from"./agents-5FZfizCZ.mjs";async function s(a){let s=await o(a);if(!s)return t(r({action:`inspect`,error:{code:`AGENT_NOT_FOUND`,details:{input:a},message:`Unknown agent: ${a}`},target:{kind:`agent`,name:a}}),c);let{agent:l,inspection:u}=s,d=l.selfUpdate?[l.selfUpdate.command,...l.selfUpdate.fallbackCommands??[]].map(e=>e.join(` `)):[];return t(i({action:`inspect`,data:{agent:{aliases:l.lookupAliases??[],binaryName:l.binaryName,displayName:l.displayName,installMethods:u.methods.map(t=>({command:n(l,t),label:e(t),type:t.type})),name:l.name,packageName:l.packages?.npm,selfUpdateCommands:d},capabilities:{canAutoInstall:u.methods.length>0,canAutoUninstall:u.inPath&&u.lifecycle===`managed`,canRun:u.inPath,canSelfUpdate:d.length>0},inspection:{binaryPath:u.binaryPath,installed:u.inPath,installedVersion:u.installedVersion,latestVersion:u.latestVersion,lifecycle:u.lifecycle,sourceLabel:u.inPath?u.sourceLabel:void 0,updateLabel:u.updateLabel}},target:{kind:`agent`,name:l.name}}),c)}function c(e){if(e.error){console.log(a.red(e.error.message));return}if(e.data){console.log(a.bold(`\n${e.data.agent.displayName}\n`)),console.log(` Name: ${e.data.agent.name}`),console.log(` Aliases: ${e.data.agent.aliases.join(`, `)||`-`}`),console.log(` Package: ${e.data.agent.packageName??`-`}`),console.log(` Binary: ${e.data.agent.binaryName}`),console.log(` Installed: ${e.data.inspection.installed?a.green(`Yes`):a.red(`No`)}`),console.log(` Update Mode: ${e.data.inspection.updateLabel}`),console.log(` Self Update: ${e.data.agent.selfUpdateCommands.join(` || `)||`-`}`),e.data.inspection.sourceLabel&&console.log(` Source: ${e.data.inspection.sourceLabel}`),e.data.inspection.installedVersion&&console.log(` Version: ${e.data.inspection.installedVersion}`),e.data.inspection.latestVersion&&console.log(` Latest: ${e.data.inspection.latestVersion}`),e.data.inspection.binaryPath&&console.log(` Path: ${e.data.inspection.binaryPath}`),console.log(a.bold(`
|
|
2
2
|
Capabilities:`)),console.log(` auto-install: ${e.data.capabilities.canAutoInstall?`yes`:`no`}`),console.log(` self-update: ${e.data.capabilities.canSelfUpdate?`yes`:`no`}`),console.log(` auto-uninstall: ${e.data.capabilities.canAutoUninstall?`yes`:`no`}`),console.log(` runnable: ${e.data.capabilities.canRun?`yes`:`no`}`),console.log(a.bold(`
|
|
3
3
|
Install Methods:`));for(let t of e.data.agent.installMethods)console.log(` ${a.green(`+`)} [${t.label}] ${t.command}`);console.log()}}export{s as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./inspect-BU3I5crt.mjs";export{e as inspectCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Y as e,a as t,bt as n,i as r,n as i,r as a,st as o,t as s}from"./color-Brg6IVS7.mjs";import{c,r as l,s as u}from"./agents-5FZfizCZ.mjs";import{t as d}from"./lifecycle-errors-BtqYfS-v.mjs";import{a as f,i as p,n as m,r as h}from"./user-output-BaPTpUe_.mjs";async function g(e){let n=Array.isArray(e)?e:[e];if(n.length<=1)return t(await _(n[0],{emitStartedEvent:!0}),C);r({action:`install`,data:{scope:`batch`},target:{kind:`agent`},type:`started`});let s=[];for(let e of n){if(o().cancelled)break;let t=y(e,await _(e));if(s.push(t),r({action:`install`,data:t,target:{kind:`agent`,name:t.agent.name},type:`progress`}),o().cancelled)break}let c={results:s,scope:`batch`,summary:x(s)};return t(s.some(e=>!e.ok)?i({action:`install`,data:c,error:S(s),target:{kind:`agent`}}):a({action:`install`,data:c,target:{kind:`agent`}}),w)}async function _(t,r={}){if(o().cancelled)return i({action:`install`,error:{code:`CANCELLED`,message:`Install was cancelled before it could start.`},target:{kind:`agent`,name:t}});let s=await l(t);if(!s)return i({action:`install`,error:{code:`AGENT_NOT_FOUND`,details:{input:t},message:`Unknown agent: ${t}`},target:{kind:`agent`,name:t}});let{agent:f,inspection:p}=s;if(p.inPath){if(p.installedState)return a({action:`install`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${f.displayName} is already installed.`}]});let t=n(p.methods,p.resolvedBinaryPath??p.binaryPath);if(t){if(m())return a({action:`install`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`DRY_RUN`,message:`Dry run: would record the existing ${f.displayName} install in Quantex state.`}]});v(f,r.emitStartedEvent);try{let e=await c(f,t);return e?a({action:`install`,data:{agent:{displayName:f.displayName,name:f.name},changed:!0,installState:{installType:e.installType,packageName:e.packageName},installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`TRACKED_EXISTING_INSTALL`,message:`${f.displayName} is already installed. Quantex is now tracking the existing install.`}]}):i({action:`install`,error:{code:`CANCELLED`,message:`Install was cancelled before tracking could complete.`},target:{kind:`agent`,name:f.name}})}catch(t){if(e(t))return i({action:`install`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},...d(t,{kind:`agent`,name:f.name})});throw t}}return a({action:`install`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`UNTRACKED_EXISTING_INSTALL`,message:`${f.displayName} is already installed but not tracked by Quantex. Quantex could not safely determine the supported install source, so the existing install remains unmanaged.`}]})}if(m())return a({action:`install`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!1},target:{kind:`agent`,name:f.name},warnings:[{code:`DRY_RUN`,message:`Dry run: would install ${f.displayName}.`}]});v(f,r.emitStartedEvent);let h;try{h=await u(f)}catch(t){if(e(t))return i({action:`install`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!1},...d(t,{kind:`agent`,name:f.name})});throw t}return h.success?a({action:`install`,data:{agent:{displayName:f.displayName,name:f.name},changed:!0,installState:h.installedState?{installType:h.installedState.installType,packageName:h.installedState.packageName}:void 0,installed:!0},target:{kind:`agent`,name:f.name}}):i({action:`install`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!1},error:{code:`INSTALL_FAILED`,message:`Failed to install ${f.displayName}.`},target:{kind:`agent`,name:f.name}})}function v(e,t=!1){t&&r({action:`install`,data:{agent:{displayName:e.displayName,name:e.name}},target:{kind:`agent`,name:e.name},type:`started`})}function y(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:b(t),warnings:r}}function b(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 x(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 S(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 C(e){if(e.error){h(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`){p(s.green(t.message));continue}if(t.code===`DRY_RUN`){f(s.cyan(t.message));continue}f(s.yellow(t.message))}return}p(s.cyan(`Installing ${e.data.agent.displayName}...`)),p(s.green(`${e.data.agent.displayName} installed successfully!`))}}function w(e){if(!e.data){e.error&&h(s.red(e.error.message));return}for(let t of e.data.results)switch(t.status){case`installed`:p(s.cyan(`Installing ${t.agent.displayName}...`)),p(s.green(`${t.agent.displayName} installed successfully!`));break;case`tracked-existing-install`:p(s.green(T(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`already-installed`:case`untracked-existing-install`:f(s.yellow(T(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`planned`:f(s.cyan(T(t.warnings,`Dry run: would install ${t.agent.displayName}.`)));break;case`locked`:f(s.yellow(t.error?.message??`Another quantex process is already installing ${t.agent.displayName}.`));break;case`failed`:h(s.red(t.error?.message??`Failed to install ${t.agent.displayName}.`));break}E(e.data.summary)}function T(e,t){return e[0]?.message??t}function E(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&&p(s.bold(`Summary: ${t.join(`, `)}`))}export{g as installCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as e,r as t,t as n}from"./color-
|
|
1
|
+
import{a as e,r as t,t as n}from"./color-Brg6IVS7.mjs";import{t as r}from"./agents-5FZfizCZ.mjs";async function i(){return e(t({action:`list`,data:{agents:(await r()).map(e=>({binaryName:e.agent.binaryName,displayName:e.agent.displayName,installed:e.inPath,installedVersion:e.installedVersion,latestVersion:e.latestVersion,lifecycle:e.lifecycle,name:e.agent.name,sourceLabel:e.sourceLabel,updateLabel:e.updateLabel}))},target:{kind:`system`,name:`agents`}}),a)}function a(e){console.log(n.bold(`
|
|
2
2
|
AI Agents:
|
|
3
3
|
`));for(let t of e.data?.agents??[]){let e=t.displayName.padEnd(18),r=t.installed?n.green(`installed`):n.gray(`not installed`),i=t.installed?n.dim(t.installedVersion??`unknown version`):``,a=t.installed?n.cyan(t.updateLabel):``,o=t.installed?n.dim(t.sourceLabel):``;console.log(` ${e} ${r} ${i}${a?` ${a}`:``}${o?` ${o}`:``}`)}console.log()}export{i as listCommand};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./resolve-pbqtA_jk.mjs";export{e as resolveCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_t as e,a as t,gt as n,n as r,r as i,t as a}from"./color-
|
|
1
|
+
import{_t as e,a as t,gt as n,n as r,r as i,t as a}from"./color-Brg6IVS7.mjs";import{r as o}from"./agents-5FZfizCZ.mjs";async function s(a){let s=await o(a);if(!s)return t(r({action:`resolve`,error:{code:`AGENT_NOT_FOUND`,details:{input:a},message:`Unknown agent: ${a}`},target:{kind:`agent`,name:a}}),c);let{agent:l,inspection:u}=s;if(!u.inPath||!u.binaryPath){let i=u.methods.map(t=>({command:n(l,t),label:e(t),type:t.type})).filter(e=>e.command);return t(r({action:`resolve`,data:{agent:{binaryName:l.binaryName,displayName:l.displayName,name:l.name},resolution:{binaryPath:``,installGuidance:{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:i,suggestedAction:`ensure-agent-installed`,suggestedEnsureCommand:`quantex ensure ${l.name}`},installed:!1,installSource:`not-installed`,lifecycle:`unmanaged`,sourceLabel:`not installed`,suggestedLaunchCommand:[]}},error:{code:`AGENT_NOT_INSTALLED`,details:{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:i,suggestedAction:`ensure-agent-installed`,suggestedEnsureCommand:`quantex ensure ${l.name}`},message:`${l.displayName} is not installed.`},target:{kind:`agent`,name:l.name}}),c)}return t(i({action:`resolve`,data:{agent:{binaryName:l.binaryName,displayName:l.displayName,name:l.name},resolution:{binaryPath:u.binaryPath,installed:!0,installSource:u.installedState?.installType??`detected-in-path`,installedVersion:u.installedVersion,lifecycle:u.lifecycle,sourceLabel:u.sourceLabel,suggestedLaunchCommand:[u.binaryPath]}},target:{kind:`agent`,name:l.name}}),c)}function c(e){if(e.error){console.log(a.red(e.error.message));let t=e.data?.resolution.installGuidance;if(t){console.log(a.dim(`Try: ${t.suggestedEnsureCommand}`));for(let e of t.installMethods)console.log(a.dim(`Install: [${e.label}] ${e.command}`))}return}e.data&&(console.log(a.bold(`\n${e.data.agent.displayName}\n`)),console.log(` Name: ${e.data.agent.name}`),console.log(` Binary: ${e.data.agent.binaryName}`),console.log(` Path: ${e.data.resolution.binaryPath}`),console.log(` Source: ${e.data.resolution.sourceLabel}`),console.log(` Lifecycle: ${e.data.resolution.lifecycle}`),console.log(` Install Type: ${e.data.resolution.installSource}`),e.data.resolution.installedVersion&&console.log(` Version: ${e.data.resolution.installedVersion}`),console.log(` Launch: ${e.data.resolution.suggestedLaunchCommand.join(` `)}`),console.log())}export{s as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as e,n as t,r as n,t as r}from"./color-
|
|
1
|
+
import{a as e,n as t,r as n,t as r}from"./color-Brg6IVS7.mjs";const i={additionalProperties:!1,properties:{action:{type:`string`},data:{type:`object`},error:{additionalProperties:!1,properties:{code:{type:`string`},message:{type:`string`}},required:[`code`,`message`],type:`object`},exitCode:{type:`integer`},meta:{additionalProperties:!1,properties:{mode:{type:`string`},runId:{type:`string`},schemaVersion:{type:`string`},source:{type:`string`},fetchedAt:{type:`string`},staleAfter:{type:`string`},timestamp:{type:`string`},version:{type:`string`}},required:[`mode`,`runId`,`schemaVersion`,`timestamp`,`version`],type:`object`},ok:{type:`boolean`},target:{additionalProperties:!1,properties:{kind:{type:`string`},name:{type:`string`}},required:[`kind`],type:`object`},warnings:{items:{additionalProperties:!1,properties:{code:{type:`string`},message:{type:`string`}},required:[`code`,`message`],type:`object`},type:`array`}},required:[`action`,`error`,`meta`,`ok`,`warnings`],type:`object`},a={additionalProperties:!1,properties:{action:{type:`string`},data:{type:`object`},meta:{additionalProperties:!1,properties:{mode:{type:`string`},runId:{type:`string`},schemaVersion:{type:`string`},source:{type:`string`},fetchedAt:{type:`string`},staleAfter:{type:`string`},timestamp:{type:`string`},version:{type:`string`}},required:[`mode`,`runId`,`schemaVersion`,`timestamp`,`version`],type:`object`},target:{additionalProperties:!1,properties:{kind:{type:`string`},name:{type:`string`}},required:[`kind`],type:`object`},type:{type:`string`}},required:[`action`,`meta`,`type`],type:`object`},o={additionalProperties:!1,properties:{available:{type:`boolean`},reason:{type:`string`}},required:[`available`],type:`object`},s={brew:o,bun:o,cargo:o,deno:o,mise:o,npm:o,pip:o,uv:o,winget:o},c=[`brew`,`bun`,`cargo`,`deno`,`mise`,`npm`,`pip`,`uv`,`winget`],l=[{dataSchema:{additionalProperties:!1,properties:{agents:{items:{type:`string`},type:`array`},features:{additionalProperties:!1,properties:{assumeYes:{type:`boolean`},cacheBypass:{type:`boolean`},cacheRefresh:{type:`boolean`},channels:{items:{type:`string`},type:`array`},colorModes:{items:{type:`string`},type:`array`},dryRun:{type:`boolean`},execInstallPolicies:{items:{type:`string`},type:`array`},freshnessMetadata:{type:`boolean`},idempotencyKey:{type:`boolean`},logLevels:{items:{type:`string`},type:`array`},quietLogs:{type:`boolean`},selfUpgrade:{type:`boolean`},timeout:{type:`boolean`}},required:[`assumeYes`,`cacheBypass`,`cacheRefresh`,`channels`,`colorModes`,`dryRun`,`execInstallPolicies`,`freshnessMetadata`,`idempotencyKey`,`logLevels`,`quietLogs`,`selfUpgrade`,`timeout`],type:`object`},installers:{additionalProperties:!1,properties:s,required:c,type:`object`},outputModes:{items:{type:`string`},type:`array`},platform:{additionalProperties:!1,properties:{arch:{type:`string`},os:{type:`string`}},required:[`arch`,`os`],type:`object`}},required:[`agents`,`features`,`installers`,`outputModes`,`platform`],type:`object`},description:`Environment and surface capabilities`,envelopeSchema:i,name:`capabilities`,ndjsonEventSchema:a},{dataSchema:{additionalProperties:!1,properties:{commands:{items:{additionalProperties:!1,properties:{flags:{items:{type:`string`},type:`array`},name:{type:`string`},outputSchemaRef:{type:`string`},stability:{type:`string`},summary:{type:`string`}},required:[`flags`,`name`,`outputSchemaRef`,`stability`,`summary`],type:`object`},type:`array`}},required:[`commands`],type:`object`},description:`Stable command catalog`,envelopeSchema:i,name:`commands`,ndjsonEventSchema:a},{dataSchema:{additionalProperties:!1,properties:{agents:{items:{additionalProperties:!1,properties:{displayName:{type:`string`},installedVersion:{type:`string`},latestVersion:{type:`string`},lifecycle:{type:`string`},outdated:{type:`boolean`},sourceLabel:{type:`string`}},required:[`displayName`,`lifecycle`,`outdated`,`sourceLabel`],type:`object`},type:`array`},installers:{additionalProperties:!1,properties:{brew:{type:`boolean`},bun:{type:`boolean`},cargo:{type:`boolean`},deno:{type:`boolean`},mise:{type:`boolean`},npm:{type:`boolean`},pip:{type:`boolean`},uv:{type:`boolean`},winget:{type:`boolean`}},required:c,type:`object`},issues:{items:{additionalProperties:!1,properties:{blocking:{type:`boolean`},category:{type:`string`},code:{type:`string`},docsRef:{type:`string`},message:{type:`string`},severity:{type:`string`},subject:{additionalProperties:!1,properties:{kind:{type:`string`},name:{type:`string`}},required:[`kind`],type:`object`},suggestedAction:{type:`string`},suggestedCommands:{items:{type:`string`},type:`array`}},required:[`blocking`,`category`,`code`,`message`,`severity`,`subject`,`suggestedAction`,`suggestedCommands`],type:`object`},type:`array`},self:{additionalProperties:!1,properties:{canAutoUpdate:{type:`boolean`},currentVersion:{type:`string`},installSource:{type:`string`},latestVersion:{type:`string`},outdated:{type:`boolean`},recoveryHint:{type:`string`}},required:[`canAutoUpdate`,`currentVersion`,`installSource`,`outdated`],type:`object`}},required:[`agents`,`installers`,`issues`,`self`],type:`object`},description:`Diagnostic state and remediation guidance for the current environment`,envelopeSchema:i,name:`doctor`,ndjsonEventSchema:a},{dataSchema:{additionalProperties:!1,properties:{agent:{additionalProperties:!1,properties:{binaryName:{type:`string`},displayName:{type:`string`},name:{type:`string`}},required:[`name`],type:`object`},execution:{additionalProperties:!1,properties:{args:{items:{type:`string`},type:`array`},installGuidance:{additionalProperties:!1,properties:{docsRef:{type:`string`},installMethods:{items:{additionalProperties:!1,properties:{command:{type:`string`},label:{type:`string`},type:{type:`string`}},required:[`command`,`label`,`type`],type:`object`},type:`array`},suggestedAction:{type:`string`},suggestedEnsureCommand:{type:`string`},suggestedExecCommand:{type:`string`}},required:[`docsRef`,`installMethods`,`suggestedAction`,`suggestedEnsureCommand`,`suggestedExecCommand`],type:`object`},installPolicy:{type:`string`},installed:{type:`boolean`},interactive:{type:`boolean`},launched:{type:`boolean`}},required:[`args`,`installPolicy`,`installed`,`interactive`,`launched`],type:`object`}},required:[`agent`,`execution`],type:`object`},description:`Preflight contract for managed agent execution`,envelopeSchema:i,name:`exec`,ndjsonEventSchema:a},{dataSchema:{additionalProperties:!1,properties:{agent:{type:`object`},changed:{type:`boolean`},installState:{type:`object`},installed:{type:`boolean`},results:{items:{additionalProperties:!1,properties:{agent:{type:`object`},changed:{type:`boolean`},error:{type:`object`},input:{type:`string`},installState:{type:`object`},installed:{type:`boolean`},ok:{type:`boolean`},status:{type:`string`},warnings:{items:{type:`object`},type:`array`}},required:[`agent`,`changed`,`input`,`installed`,`ok`,`status`,`warnings`],type:`object`},type:`array`},scope:{type:`string`},summary:{type:`object`}},type:`object`},description:`Install result for one or more agents`,envelopeSchema:i,name:`install`,ndjsonEventSchema:a},{dataSchema:{additionalProperties:!1,properties:{agent:{type:`object`},changed:{type:`boolean`},installState:{type:`object`},installed:{type:`boolean`}},required:[`agent`,`changed`,`installed`],type:`object`},description:`Ensure result for an agent`,envelopeSchema:i,name:`ensure`,ndjsonEventSchema:a},{dataSchema:{additionalProperties:!1,properties:{agent:{type:`object`},capabilities:{type:`object`},inspection:{type:`object`}},required:[`agent`,`capabilities`,`inspection`],type:`object`},description:`Structured inspection result for an agent`,envelopeSchema:i,name:`inspect`,ndjsonEventSchema:a},{dataSchema:{additionalProperties:!1,properties:{agent:{type:`object`},resolution:{additionalProperties:!1,properties:{binaryPath:{type:`string`},installGuidance:{additionalProperties:!1,properties:{docsRef:{type:`string`},installMethods:{items:{additionalProperties:!1,properties:{command:{type:`string`},label:{type:`string`},type:{type:`string`}},required:[`command`,`label`,`type`],type:`object`},type:`array`},suggestedAction:{type:`string`},suggestedEnsureCommand:{type:`string`}},required:[`docsRef`,`installMethods`,`suggestedAction`,`suggestedEnsureCommand`],type:`object`},installed:{type:`boolean`},installSource:{type:`string`},installedVersion:{type:`string`},lifecycle:{type:`string`},sourceLabel:{type:`string`},suggestedLaunchCommand:{items:{type:`string`},type:`array`}},required:[`binaryPath`,`installed`,`installSource`,`lifecycle`,`sourceLabel`,`suggestedLaunchCommand`],type:`object`}},required:[`agent`,`resolution`],type:`object`},description:`Resolved executable entrypoint for an agent`,envelopeSchema:i,name:`resolve`,ndjsonEventSchema:a},{dataSchema:{additionalProperties:!1,properties:{commands:{items:{additionalProperties:!1,properties:{dataSchema:{type:`object`},description:{type:`string`},envelopeSchema:{type:`object`},name:{type:`string`},ndjsonEventSchema:{type:`object`}},required:[`dataSchema`,`description`,`envelopeSchema`,`name`],type:`object`},type:`array`}},required:[`commands`],type:`object`},description:`Structured schema catalog`,envelopeSchema:i,name:`schema`,ndjsonEventSchema:a}];async function u(r){let i=r?l.filter(e=>e.name===r):l;return r&&i.length===0?e(t({action:`schema`,error:{code:`INVALID_ARGUMENT`,details:{command:r},message:`Unknown schema target: ${r}`},target:{kind:`system`,name:`schema`}}),d):e(n({action:`schema`,data:{commands:i},target:{kind:`system`,name:`schema`}}),d)}function d(e){if(e.error){console.log(r.red(e.error.message));return}if(e.data){console.log(r.bold(`
|
|
2
2
|
Quantex Schemas
|
|
3
3
|
`));for(let t of e.data.commands)console.log(` ${r.cyan(t.name)}`),console.log(` ${t.description}`);console.log()}}function f(){return l}export{u as n,f as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./schema-B-c3-fEZ.mjs";export{e as schemaCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as e,a as t,k as n,n as r,r as i,t as a}from"./color-
|
|
1
|
+
import{Y as e,a as t,k as n,n as r,r as i,t as a}from"./color-Brg6IVS7.mjs";import{l as o,n as s}from"./agents-5FZfizCZ.mjs";import{t as c}from"./lifecycle-errors-BtqYfS-v.mjs";import{a as l,i as u,n as d,r as f}from"./user-output-BaPTpUe_.mjs";async function p(a){let l=s(a);if(!l)return t(r({action:`uninstall`,error:{code:`AGENT_NOT_FOUND`,details:{input:a},message:`Unknown agent: ${a}`},target:{kind:`agent`,name:a}}),m);if(d())return await n(l.name)?t(i({action:`uninstall`,data:{agent:{displayName:l.displayName,name:l.name},changed:!1},target:{kind:`agent`,name:l.name},warnings:[{code:`DRY_RUN`,message:`Dry run: would uninstall ${l.displayName}.`}]}),m):t(r({action:`uninstall`,data:{agent:{displayName:l.displayName,name:l.name},changed:!1},error:{code:`UNINSTALL_FAILED`,message:`Failed to uninstall ${l.displayName}.`},target:{kind:`agent`,name:l.name}}),m);let u;try{u=await o(l)}catch(n){if(e(n))return t(r({action:`uninstall`,data:{agent:{displayName:l.displayName,name:l.name},changed:!1},...c(n,{kind:`agent`,name:l.name})}),m);throw n}return t(u?i({action:`uninstall`,data:{agent:{displayName:l.displayName,name:l.name},changed:!0},target:{kind:`agent`,name:l.name}}):r({action:`uninstall`,data:{agent:{displayName:l.displayName,name:l.name},changed:!1},error:{code:`UNINSTALL_FAILED`,message:`Failed to uninstall ${l.displayName}.`},target:{kind:`agent`,name:l.name}}),m)}function m(e){if(e.error){f(a.red(e.error.message));return}if(e.data){if(e.warnings&&e.warnings.length>0){for(let t of e.warnings)l(a.yellow(t.message));return}u(a.cyan(`Uninstalling ${e.data.agent.displayName}...`)),u(a.green(`${e.data.agent.displayName} uninstalled successfully!`))}}export{p as uninstallCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{St as e,ht as t,mt as n}from"./color-
|
|
1
|
+
import{St as e,ht as t,mt as n}from"./color-Brg6IVS7.mjs";import{i as r,t as i}from"./agents-5FZfizCZ.mjs";function a(e,t={}){let r={bun:[],npm:[],brew:[],cargo:[],deno:[],mise:[],pip:[],uv:[],winget:[]},i=[],a=[],c=[],l=[];for(let u of e){if(!u.inPath)continue;if(t.skipUntrackedInPath&&!u.installedState){c.push(u);continue}if(s(u)){a.push(u);continue}if(!o(u)){l.push(u);continue}let e=n({agent:u.agent,installedState:u.installedState,methods:u.methods}),d=e.strategy===`managed`?e.getManagedInstallerType?.({agent:u.agent,installedState:u.installedState,methods:u.methods}):void 0;if(d){let e={inspection:u,installerType:d,strategy:`grouped`};r[d].push(e);continue}i.push({inspection:u,strategy:e.strategy===`self-update`?`self-update`:`manual`})}return{entries:[...r.bun,...r.npm,...r.brew,...r.cargo,...r.deno,...r.mise,...r.pip,...r.uv,...r.winget,...i],grouped:r,manual:i,skippedManualCheck:a,untrackedInPath:c,upToDate:l}}function o(e){return e.installedVersion&&e.latestVersion?e.installedVersion!==e.latestVersion:!0}function s(e){return!e.latestVersion&&!t(e.agent,e.installedState)}const c=[`bun`,`npm`,`brew`,`cargo`,`deno`,`mise`,`pip`,`uv`,`winget`];async function l(e){let t=await r(e);return{agent:e,inspection:t,updateAvailable:o(t)}}async function u(){return f(await i(),{skipUntrackedInPath:!0})}async function d(e){let t=await r(e);return{inspection:t,plan:f([t])}}function f(e,t={}){let n=a(e,t),r=[],i=c.map(e=>p(e,n.grouped[e],r)).filter(e=>e!==void 0);return{entries:n.entries.map(e=>h(e.inspection)),grouped:i,manual:[...r,...n.manual.map(e=>h(e.inspection))],skippedManualCheck:n.skippedManualCheck,untrackedInPath:n.untrackedInPath,upToDate:n.upToDate}}function p(e,t,n){if(t.length===0)return;let r=t.map(e=>h(e.inspection)),i=r.filter(m);if(n.push(...r.filter(e=>!m(e))),i.length!==0)return{type:e,packages:i.map(e=>e.package),updates:i}}function m(e){return!!e.package?.packageName}function h(e){let t=n({agent:e.agent,installedState:e.installedState,methods:e.methods}),r=t.getManagedInstallerType?.({agent:e.agent,installedState:e.installedState,methods:e.methods});return{agent:e.agent,inspection:e,installerType:r,package:r?g(e.agent,e.installedState,e.methods,r):void 0,state:e.installedState,strategy:t.strategy}}function g(t,n,r,i){if(n?.packageName&&n.installType===i)return{packageName:n.packageName,binaryName:i===`deno`?n.binaryName:void 0,packageInstallArgs:n.packageInstallArgs,packageTargetKind:n.packageTargetKind};let a=r.find(e=>e.type===i);if(!a)return;let o=e(t,a);if(o)return{packageName:o,binaryName:a.binaryName??(i===`deno`?t.binaryName:void 0),packageInstallArgs:a.packageInstallArgs,packageTargetKind:a.packageTargetKind}}export{o as a,a as i,u as n,d as r,l as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,r as t,t as n}from"./messages-qcLhD-Gc.mjs";import{B as r,Y as i,a,ht as o,i as s,n as c,pt as l,r as u,st as d,t as f}from"./color-Brg6IVS7.mjs";import{d as p,n as m,u as h}from"./agents-5FZfizCZ.mjs";import{a as g,i as _,n as v,r as y}from"./user-output-BaPTpUe_.mjs";import{n as b,r as x}from"./update-BgtIfzfC.mjs";async function S(e,t){if(t)return C();if(!e)return a(c({action:`update`,error:{code:`INVALID_ARGUMENT`,message:`Please specify an agent name or use --all flag`},target:{kind:`agent`}}),A);let n=m(e);return n?w(n):a(c({action:`update`,error:{code:`AGENT_NOT_FOUND`,details:{input:e},message:`Unknown agent: ${e}`},target:{kind:`agent`,name:e}}),A)}async function C(){s({action:`update`,data:{scope:`all`},target:{kind:`agent`},type:`started`});let e=await T(await b());return e.hasFailures?a(c({action:`update`,data:{results:e.results,scope:`all`},error:{code:`UPDATE_FAILED`,message:`One or more agents failed to update.`},target:{kind:`agent`}}),A):a(u({action:`update`,data:{results:e.results,scope:`all`},target:{kind:`agent`}}),A)}async function w(e){s({action:`update`,data:{agent:e.name,scope:`single`},target:{kind:`agent`,name:e.name},type:`started`});let{inspection:t,plan:n}=await x(e);if(!t.inPath)return a(c({action:`update`,error:{code:`AGENT_NOT_INSTALLED`,message:`${e.displayName} is not installed.`},target:{kind:`agent`,name:e.name}}),A);let r=await T(n),i=k(r.results);return i?a(c({action:`update`,data:{results:r.results,scope:`single`},error:{code:`RESOURCE_LOCKED`,details:i.resource?{resource:i.resource}:void 0,message:i.message??`Another quantex process is already updating ${e.displayName}.`},target:{kind:`agent`,name:e.name}}),A):r.hasFailures?a(c({action:`update`,data:{results:r.results,scope:`single`},error:{code:`UPDATE_FAILED`,message:`Failed to update ${e.displayName}.`},target:{kind:`agent`,name:e.name}}),A):a(u({action:`update`,data:{results:r.results,scope:`single`},target:{kind:`agent`,name:e.name}}),A)}async function T(n){let r=[];for(let e of n.upToDate)E(r,{displayName:e.agent.displayName,installedVersion:e.installedVersion,latestVersion:e.latestVersion,name:e.agent.name,status:`up-to-date`});for(let t of n.skippedManualCheck)E(r,{displayName:t.agent.displayName,message:e(t.agent),name:t.agent.name,status:`manual-required`});for(let e of n.untrackedInPath)E(r,{displayName:e.agent.displayName,message:t(e.agent),name:e.agent.name,status:`manual-required`});for(let e of n.grouped){if(d().cancelled)break;let t=await D(e.type,e.packages,e.updates);for(let e of t)E(r,e);if(d().cancelled)break}for(let e of n.manual){if(d().cancelled)break;E(r,await O(e.agent,e.state,e.inspection.methods,e.inspection))}return{hasFailures:r.some(e=>e.status===`failed`||e.status===`locked`),results:r}}function E(e,t){e.push(t),s({action:`update`,data:t,target:{kind:`agent`,name:t.name},type:`progress`})}async function D(e,t,n){if(n.length===0)return[];if(v())return n.map(({agent:t,inspection:n,strategy:r})=>({displayName:t.displayName,installedVersion:n.installedVersion,latestVersion:n.latestVersion,message:`Dry run: would update ${t.displayName}.`,name:t.name,status:`planned`,strategy:r===`managed`?`managed/${e}`:r}));try{if(await p(e,t))return n.map(({agent:t,inspection:n,strategy:r})=>({displayName:t.displayName,installedVersion:n.installedVersion,latestVersion:n.latestVersion,name:t.name,status:`updated`,strategy:r===`managed`?`managed/${e}`:r}));let r=[];for(let{agent:e,inspection:t,state:i}of n){if(d().cancelled)break;r.push(await O(e,i,t.methods,t))}return r}catch(t){if(!i(t))throw t;return n.map(({agent:n,inspection:r,strategy:i})=>({displayName:n.displayName,installedVersion:r.installedVersion,latestVersion:r.latestVersion,message:t.message,name:n.name,resource:t.resource,status:`locked`,strategy:i===`managed`?`managed/${e}`:i}))}}async function O(t,a,s,c){if(d().cancelled)return{displayName:t.displayName,installedVersion:c?.installedVersion,latestVersion:c?.latestVersion,message:`Update was cancelled before it could start.`,name:t.name,status:`failed`};let u=l({agent:t,installedState:a,methods:s??c?.methods??[]}),f=c?.installedVersion,p=c?.latestVersion;if(u===`manual-hint`&&!o(t,a))return{displayName:t.displayName,installedVersion:f,latestVersion:p,message:e(t),name:t.name,status:`manual-required`,strategy:u};if(v())return{displayName:t.displayName,installedVersion:f,latestVersion:p,message:`Dry run: would update ${t.displayName}.`,name:t.name,status:`planned`,strategy:u};let m;try{m=await h(t,a)}catch(e){if(i(e))return{displayName:t.displayName,installedVersion:f,latestVersion:p,message:e.message,name:t.name,resource:e.resource,status:`locked`,strategy:u};throw e}if(m.success){if(u===`self-update`){let e=await r(t.binaryName,t.versionProbe);if(f&&e)return e===f?{displayName:t.displayName,installedVersion:e,latestVersion:e,name:t.name,status:`up-to-date`,strategy:u}:{displayName:t.displayName,installedVersion:f,latestVersion:e,name:t.name,status:`updated`,strategy:u}}return{displayName:t.displayName,installedVersion:f,latestVersion:p,name:t.name,status:`updated`,strategy:u}}return{displayName:t.displayName,hint:n(t,u),installedVersion:f,latestVersion:p,name:t.name,status:`failed`,strategy:u}}function k(e){if(e.length===1)return e[0]?.status===`locked`?e[0]:void 0}function A(e){if(!e.data){e.error&&y(f.red(e.error.message));return}for(let t of e.data.results)switch(t.status){case`up-to-date`:_(f.green(`${t.displayName} is up to date (${t.installedVersion??`unknown`})`));break;case`manual-required`:g(f.yellow(`${t.displayName}: manual action required.`)),t.message&&g(f.cyan(`Next step: ${t.message}`));break;case`planned`:g(f.cyan(`Would update ${t.displayName}${t.strategy?` via ${t.strategy}`:``}${j(t.installedVersion,t.latestVersion)}`));break;case`updated`:_(f.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${j(t.installedVersion,t.latestVersion)}`)),_(f.green(`${t.displayName} updated successfully!`));break;case`failed`:_(f.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${j(t.installedVersion,t.latestVersion)}`)),y(f.red(`Failed to update ${t.displayName}.`)),t.hint&&g(f.cyan(`Next step: ${t.hint}`));break;case`locked`:g(f.yellow(t.message??`Another quantex process is already updating ${t.displayName}.`));break}e.data.results.length>1&&M(e.data.results),!e.data.results.length&&e.error&&y(f.red(e.error.message))}function j(e,t){return e?` (${e} -> ${t??`latest`})`:``}function M(e){let t={failed:0,locked:0,manualRequired:0,planned:0,upToDate:0,updated:0};for(let n of e)switch(n.status){case`up-to-date`:t.upToDate+=1;break;case`manual-required`:t.manualRequired+=1;break;case`planned`:t.planned+=1;break;case`updated`:t.updated+=1;break;case`failed`:t.failed+=1;break;case`locked`:t.locked+=1;break}let n=[t.updated?`updated ${t.updated}`:void 0,t.upToDate?`up to date ${t.upToDate}`:void 0,t.manualRequired?`manual ${t.manualRequired}`:void 0,t.failed?`failed ${t.failed}`:void 0,t.locked?`locked ${t.locked}`:void 0,t.planned?`planned ${t.planned}`:void 0].filter(Boolean);n.length>0&&_(f.bold(`Summary: ${n.join(`, `)}`))}export{S as updateCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{R as e,S as t,a as n,c as r,n as i,r as a,t as o,u as s,x as c}from"./color-
|
|
1
|
+
import{R as e,S as t,a as n,c as r,n as i,r as a,t as o,u as s,x as c}from"./color-Brg6IVS7.mjs";import{a as l,i as u,n as d,r as f}from"./user-output-BaPTpUe_.mjs";async function p(e={}){let o=await t({updateChannel:e.channel}),l=c(o),u=d(),f=h(l),p=_(l);if(o.status===`up-to-date`)return n(a({action:`upgrade`,data:{canAutoUpdate:l.canAutoUpdate,channel:l.updateChannel,currentVersion:l.currentVersion,installSource:l.installSource,latestVersion:l.latestVersion,status:`up-to-date`},target:{kind:`self`,name:`quantex`},warnings:[...f,...p?[p]:[]]}),m);if(e.check||u)return o.status===`update-available`?n(a({action:`upgrade`,data:{canAutoUpdate:l.canAutoUpdate,channel:l.updateChannel,currentVersion:l.currentVersion,installSource:l.installSource,latestVersion:l.latestVersion,status:`update-available`},exitCode:e.check?1:void 0,target:{kind:`self`,name:`quantex`},warnings:[...f,...p?[p]:[],...u?[{code:`DRY_RUN`,message:`Dry run: would upgrade Quantex CLI.`}]:[]]}),m):n(i({action:`upgrade`,data:{canAutoUpdate:l.canAutoUpdate,channel:l.updateChannel,currentVersion:l.currentVersion,installSource:l.installSource,status:`check-unavailable`},error:{code:`NETWORK_ERROR`,message:`Unable to determine the latest Quantex CLI version.`},target:{kind:`self`,name:`quantex`},warnings:[...f,...p?[p]:[]]}),m);if(o.status===`manual-required`){let e=s(l);return n(i({action:`upgrade`,data:{canAutoUpdate:l.canAutoUpdate,channel:l.updateChannel,currentVersion:l.currentVersion,installSource:l.installSource,latestVersion:l.latestVersion,recoveryHint:e,status:`manual-required`},error:{code:`MANUAL_ACTION_REQUIRED`,message:`Quantex CLI cannot auto-update from the current install source: ${l.installSource}.`},target:{kind:`self`,name:`quantex`},warnings:[...f,...p?[p]:[]]}),m)}let g=await r(o);if(g.success)return n(a({action:`upgrade`,data:{canAutoUpdate:l.canAutoUpdate,channel:l.updateChannel,currentVersion:l.currentVersion,installSource:l.installSource,latestVersion:l.latestVersion,status:`updated`},target:{kind:`self`,name:`quantex`},warnings:[...f,...p?[p]:[]]}),m);let v=s(l,g);return n(i({action:`upgrade`,data:{canAutoUpdate:l.canAutoUpdate,channel:l.updateChannel,currentVersion:l.currentVersion,installSource:l.installSource,latestVersion:l.latestVersion,recoveryHint:v,status:`manual-required`},error:{code:`UPGRADE_FAILED`,details:g.error?.kind?{kind:g.error.kind}:void 0,message:g.error?.message??`Failed to upgrade Quantex CLI.`},target:{kind:`self`,name:`quantex`},warnings:[...f,...v?[{code:`MANUAL_RECOVERY`,message:`Manual recovery: ${v}`}]:[]]}),m)}function m(e){if(!e.data){e.error&&f(o.red(e.error.message));return}if(e.data.status===`up-to-date`){u(o.green(`Quantex CLI is already up to date (${e.data.currentVersion}).`)),g(e.warnings);return}if(e.data.status===`update-available`){let t=e.warnings.some(e=>e.message.includes(`Dry run`))?`Dry run: `:``;l(o.yellow(`${t}Update available for Quantex CLI: ${e.data.currentVersion} -> ${e.data.latestVersion} (${e.data.channel}).`)),g(e.warnings);return}if(e.data.status===`check-unavailable`){e.error&&l(o.yellow(e.error.message)),g(e.warnings);return}if(e.data.status===`manual-required`&&e.error?.code===`MANUAL_ACTION_REQUIRED`){l(o.yellow(e.error.message)),e.data.recoveryHint&&l(o.cyan(`Next step: ${e.data.recoveryHint}`));return}let t=e.data.latestVersion?` (${e.data.currentVersion} -> ${e.data.latestVersion})`:` (${e.data.currentVersion})`;if(u(o.cyan(`Upgrading Quantex CLI...${t}`)),!e.error){u(o.green(`Quantex CLI upgraded successfully.`)),g(e.warnings);return}f(o.red(`Failed to upgrade Quantex CLI.`)),l(o.yellow(`Reason: ${e.error.message}`));for(let t of e.warnings)l(o.cyan(t.message.replace(/^Manual recovery:/,`Next step:`)))}function h(e){return!e.latestVersion||!e.upstreamLatestVersion||e.latestVersion===e.upstreamLatestVersion||e.installSource!==`bun`&&e.installSource!==`npm`?[]:[{code:`MIRROR_LAG`,details:{installableLatestVersion:e.latestVersion,upstreamLatestVersion:e.upstreamLatestVersion},message:`The selected registry currently installs ${e.latestVersion}, while upstream npm has ${e.upstreamLatestVersion}. Retry later or set selfUpdateRegistry / QTX_SELF_UPDATE_REGISTRY to another registry if you need the upstream release now.`}]}function g(e){for(let t of e)t.code===`DRY_RUN`||t.code===`MANUAL_RECOVERY`||l(o.yellow(t.message))}function _(t){if(!t.latestVersion)return;let n=e(t.latestVersion,t.currentVersion);if(!(n===void 0||n>=0))return{code:`STALE_LATEST_VERSION`,details:{currentVersion:t.currentVersion,latestVersion:t.latestVersion},message:`The resolved latest version ${t.latestVersion} is older than the installed Quantex CLI ${t.currentVersion}. Quantex will not downgrade; retry with --refresh or --no-cache if you need a fresh check.`}}export{p as upgradeCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{st as e}from"./color-
|
|
1
|
+
import{st as e}from"./color-Brg6IVS7.mjs";import t from"node:process";const n={debug:4,error:1,info:3,silent:0,warn:2};function r(e){o(`info`)&&t.stdout.write(`${e}\n`)}function i(e){o(`warn`)&&t.stdout.write(`${e}\n`)}function a(e){o(`error`)&&t.stdout.write(`${e}\n`)}function o(t){let r=e();return r.outputMode===`human`?r.quiet&&t===`info`?!1:n[r.logLevel??`info`]>=n[t]:!0}function s(){return!!e().assumeYes}function c(){return!!e().dryRun}function l(e){t.stdout.write(`${e}\n`)}export{i as a,r as i,c as n,l as o,a as r,s as t};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "quantex-cli",
|
|
3
|
-
"version": "0.25.
|
|
3
|
+
"version": "0.25.2",
|
|
4
4
|
"description": "Agent-friendly lifecycle CLI for AI coding assistant CLIs: install, inspect, update, uninstall, run, and automate Codex, Claude Code, Gemini, Cursor, OpenCode, and more",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent-cli",
|
package/dist/agents-DznN3xrB.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{B as e,Et as t,F as n,G as r,H as i,K as a,N as o,Ot as s,St as c,Tt as l,V as ee,W as u,X as d,_ as te,b as ne,d as re,f as ie,g as f,h as p,k as m,m as h,p as ae,q as g,tt as _,v as oe,vt as se,wt as ce,xt as le,y as ue,yt as de,z as fe}from"./color-P2gkDtbT.mjs";import{a as pe,c as me,d as he,i as ge,l as _e,m as ve,n as ye,o as be,p as xe,r as Se,s as Ce,t as v,u as we}from"./detect-ha4CNko6.mjs";import Te from"node:process";async function y(e){let t=v(),n=typeof e==`function`?e(t):e;try{return Te.platform===`win32`?await g(a([`powershell.exe`,`-Command`,n]))===0:await g(a([`sh`,`-c`,n]))===0}catch{return!1}}function Ee(e){return e===`cask`?[`--cask`]:[]}async function b(e,t,n){try{return await g(a([`brew`,e,...Ee(n),t]))===0}catch{return!1}}async function x(e,t){return b(`install`,e,t)}async function S(e,t){return b(`upgrade`,e,t)}async function C(e){for(let t of e)if(!await S(t.packageName,t.packageTargetKind))return!1;return!0}async function w(e,t){return b(`uninstall`,e,t)}async function T(e,t,n=[]){try{return await g(a([`cargo`,e,t,...n]))===0}catch{return!1}}async function E(e,t){return T(`install`,e,t)}async function D(e,t){return E(e,[`--force`,...t??[]])}async function De(e){for(let t of e)if(!await D(t.packageName,t.packageInstallArgs))return!1;return!0}async function Oe(e){return T(`uninstall`,e)}async function O(e,t=[],n={}){let r=[`deno`,`install`,`--global`];n.force&&r.push(`--force`),r.push(...t,e);try{return await g(a(r))===0}catch{return!1}}async function ke(e,t){return O(e,t)}async function k(e,t){return O(e,t,{force:!0})}async function Ae(e){for(let t of e)if(!await k(t.packageName,t.packageInstallArgs))return!1;return!0}async function je(e){try{return await g(a([`deno`,`uninstall`,`--global`,e]))===0}catch{return!1}}async function A(e,t=!1){try{return await g(a([`mise`,`use`,`--global`,...t?[`--force`]:[],e]))===0}catch{return!1}}async function Me(e){return A(e)}async function j(e){return A(e,!0)}async function Ne(e){for(let t of e)if(!await j(t.packageName))return!1;return!0}async function Pe(e){try{return await g(a([`mise`,`unuse`,`--global`,e]))===0}catch{return!1}}async function Fe(e){try{let{exitCode:t,stdout:n}=await u(r([`mise`,`ls`,`--installed`,`--json`,e],{stdio:[`ignore`,`pipe`,`ignore`]}));return t===0?Ie(n,e):void 0}catch{return}}function Ie(e,t){try{let n=JSON.parse(e);if(!M(n))return;let r=Le(n,t),i=r?n[r]:void 0;if(!Array.isArray(i))return;for(let e of i)if(M(e)&&typeof e.version==`string`&&e.version.length>0)return e.version;return}catch{return}}function Le(e,t){if(Array.isArray(e[t]))return t;let n=t.split(`:`).pop()?.split(`/`).pop();if(n)return Object.keys(e).find(t=>t===n&&Array.isArray(e[t]))}function M(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}let N=null;async function Re(){if(N)return N;for(let e of[[`pip`],[`pip3`],[`python`,`-m`,`pip`],[`python3`,`-m`,`pip`]])try{let{exitCode:t}=await u(r([...e,`--version`]));if(t===0)return N=e,e}catch{}return N=[`pip`],N}async function P(e){try{return await g(a([...await Re(),...e]))===0}catch{return!1}}async function ze(e){return P([`install`,e])}async function F(e){return P([`install`,`--upgrade`,e])}async function Be(e){if(e.length===0)return!0;for(let t of e)if(!await F(t.packageName))return!1;return!0}async function Ve(e){return P([`uninstall`,`-y`,e])}async function I(e,t,n=[]){try{return await g(a([`uv`,`tool`,e,t,...n]))===0}catch{return!1}}async function He(e,t){return I(`install`,e,t)}async function L(e,t){return I(`upgrade`,e,t)}async function Ue(e){for(let t of e)if(!await L(t.packageName,t.packageInstallArgs))return!1;return!0}async function We(e){try{return await g(a([`uv`,`tool`,`uninstall`,e]))===0}catch{return!1}}async function Ge(e){try{let{exitCode:t,stdout:n}=await u(r([`uv`,`tool`,`list`],{stdio:[`ignore`,`pipe`,`ignore`]}));return t===0?Ke(n,e):void 0}catch{return}}function Ke(e,t){let n=R(t);for(let t of e.split(/\r?\n/)){let e=t.trim(),r=/^(\S+)\s+v([^\s]+)/.exec(e);if(!r)continue;let[,i,a]=r;if(R(i)===n)return a}}function R(e){return e.toLowerCase().replaceAll(/[-_.]+/g,`-`)}async function z(e,t){try{return await g(a([`winget`,e,`--id`,t,`-e`]))===0}catch{return!1}}async function qe(e){return z(`install`,e)}async function B(e){return z(`upgrade`,e)}async function Je(e){for(let t of e)if(!await B(t.packageName))return!1;return!0}async function Ye(e){return z(`uninstall`,e)}const Xe={brew:{type:`brew`,isAvailable:async()=>Se(),install:async(e,t)=>x(e,t),uninstall:async(e,t)=>w(e,t),update:async(e,t)=>S(e,t),updateMany:async e=>C(e)},bun:{type:`bun`,getInstalledVersion:async e=>f(e),isAvailable:async()=>ge(),install:async e=>te(e),uninstall:async e=>oe(e),update:async(e,t,n)=>ue(e,n?.npmBunUpdateStrategy),updateMany:async(e,t)=>ne(e.map(e=>e.packageName),t?.npmBunUpdateStrategy)},cargo:{type:`cargo`,isAvailable:async()=>pe(),install:async(e,t,n)=>E(e,n),uninstall:async e=>Oe(e),update:async(e,t,n)=>D(e,n?.packageInstallArgs),updateMany:async e=>De(e.map(e=>({packageInstallArgs:e.packageInstallArgs,packageName:e.packageName})))},deno:{type:`deno`,isAvailable:async()=>be(),install:async(e,t,n)=>ke(e,n),uninstall:async(e,t,n)=>je(n?.binaryName??e),update:async(e,t,n)=>k(e,n?.packageInstallArgs),updateMany:async e=>Ae(e.map(e=>({binaryName:e.binaryName,packageInstallArgs:e.packageInstallArgs,packageName:e.packageName})))},mise:{type:`mise`,getInstalledVersion:async e=>Fe(e),isAvailable:async()=>Ce(),install:async e=>Me(e),uninstall:async e=>Pe(e),update:async e=>j(e),updateMany:async e=>Ne(e.map(e=>({packageName:e.packageName})))},npm:{type:`npm`,getInstalledVersion:async e=>re(e),isAvailable:async()=>me(),install:async e=>ie(e),uninstall:async e=>ae(e),update:async(e,t,n)=>h(e,n?.npmBunUpdateStrategy),updateMany:async(e,t)=>p(e.map(e=>e.packageName),t?.npmBunUpdateStrategy)},pip:{type:`pip`,isAvailable:async()=>_e(),install:async e=>ze(e),uninstall:async e=>Ve(e),update:async e=>F(e),updateMany:async e=>Be(e.map(e=>({packageName:e.packageName})))},uv:{type:`uv`,getInstalledVersion:async e=>Ge(e),isAvailable:async()=>we(),install:async(e,t,n)=>He(e,n),uninstall:async e=>We(e),update:async(e,t,n)=>L(e,n?.packageInstallArgs),updateMany:async e=>Ue(e.map(e=>({packageInstallArgs:e.packageInstallArgs,packageName:e.packageName})))},winget:{type:`winget`,isAvailable:async()=>he(),install:async e=>qe(e),uninstall:async e=>Ye(e),update:async e=>B(e),updateMany:async e=>Je(e.map(e=>({packageName:e.packageName})))}};function V(e){return Xe[e]}const H={resource:`agent lifecycle`,scope:[`agent-lifecycle`]};async function Ze(){return(await _()).defaultPackageManager}async function U(){return{npmBunUpdateStrategy:(await _()).npmBunUpdateStrategy}}async function W(e){let t=v(),n=e.platforms[t];if(!n)return[];let r=await Ze();return r?[...n.filter(e=>e.type===r),...n.filter(e=>e.type!==r)]:[...n]}async function G(e,t,n,r,i,a,o){let s=V(e);return await s.isAvailable()?a===`install`?s.install(t,i,r):a===`update`?s.update(t,i,{binaryName:n,npmBunUpdateStrategy:o,packageInstallArgs:r}):s.uninstall(t,i,{binaryName:n}):!1}async function K(e,t,n,r){if(s(t.type)){let i=c(e,t);return i?G(t.type,i,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,n,r):!1}return n===`update`&&!l(t.type)||!t.command?!1:y(t.command)}function q(e,t){if(e.packageName)return e.packageName;if(!(!t||!s(e.installType)))return c(t,{type:e.installType})}async function J(e,t,n){if(s(e.installType)){let r=q(e,n?.agent);return r?G(e.installType,r,e.binaryName,e.packageInstallArgs,e.packageTargetKind,t,n?.updateStrategy):!1}return t!==`install`||!e.command?!1:y(e.command)}async function Qe(e,t){if(!s(t.type))return;let n=c(e,t);n&&await G(t.type,n,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`)}async function $e(e){if(!e.selfUpdate)return!1;let t=[e.selfUpdate.command,...e.selfUpdate.fallbackCommands??[]];for(let e of t)if(await y(e.join(` `)))return!0;return!1}async function Y(e,t){let r={agentName:e.name,installType:t.type,packageName:c(e,t),packageTargetKind:t.packageTargetKind,command:`command`in t?t.command:void 0},i=t.binaryName??(t.type===`deno`?e.binaryName:void 0);return i&&(r.binaryName=i),t.packageInstallArgs?.length&&(r.packageInstallArgs=t.packageInstallArgs),await n(r),r}async function et(e,t){return d(H,async()=>Y(e,t))}async function X(e){return d(H,async()=>{let t=await W(e);for(let n of t)if(await K(e,n,`install`))try{return{success:!0,installedState:await Y(e,n)}}catch(t){throw await Qe(e,n),t}return{success:!1}})}async function tt(e,t){return d(H,async()=>{let{npmBunUpdateStrategy:r}=await U(),i=await W(e),a=t&&s(t.installType)?q(t,e):void 0;if(t&&await J(t,`update`,{agent:e,updateStrategy:r}))return await n(t),{success:!0,installedState:t};if(!t){for(let t of i)if(await K(e,t,`update`,r))return{success:!0,installedState:await Y(e,t)}}return(!t||!s(t.installType)||a)&&await $e(e)?{success:!0}:{success:!1}})}async function nt(e,t){return d(H,async()=>{let n=[...new Map(t.filter(e=>e.packageName).map(e=>[`${e.packageTargetKind??`package`}:${e.packageName}:${e.packageInstallArgs?.join(` `)??``}`,e])).values()];if(n.length===0)return!1;let r=V(e);return await r.isAvailable()?r.updateMany(n,await U()):!1})}async function rt(e,t,n){let r=V(e);if(r.getInstalledVersion&&await r.isAvailable())return r.getInstalledVersion(t,n)}async function it(e){return d(H,async()=>{let t=await m(e.name);if(!t)return!1;if(!ce(t.installType))return await o(e.name),!0;let n=await J(t,`uninstall`,{agent:e});return n&&await o(e.name),n})}async function Z(e){let[n,r,a]=await Promise.all([W(e),m(e.name),ye(e.binaryName)]),[o,s,c]=await Promise.all([a?at(e,r):Promise.resolve(void 0),a?fe(e.binaryName):Promise.resolve(void 0),ot(e,r,n)]);return{agent:e,methods:n,installedState:r,inPath:a,installedVersion:o,latestVersion:c,binaryPath:s,resolvedBinaryPath:await i(s),sourceLabel:se(r),updateLabel:de(e,r),lifecycle:r?t(r.installType):`unmanaged`}}async function Q(e){return Promise.all(e.map(Z))}async function at(t,n){if(n&&s(n.installType)&&n.packageName){let e=await rt(n.installType,n.packageName,n.packageTargetKind);if(e)return e}return e(t.binaryName,t.versionProbe)}async function ot(e,t,n){let r=le(e,t,n);if(r)return ee(r)}function $(e){return xe(e)}async function st(e){let t=$(e);if(t)return{agent:t,inspection:await Z(t)}}async function ct(){return Q(ve())}export{Q as a,et as c,nt as d,V as f,Z as i,it as l,$ as n,W as o,st as r,X as s,ct as t,tt as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./capabilities-D5V68Dv8.mjs";export{e as capabilitiesCommand};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./commands-x1OJyrod.mjs";export{e as commandsCommand};
|
package/dist/ensure-BnS4r4Tt.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Y as e,a as t,bt as n,i as r,n as i,r as a,t as o}from"./color-P2gkDtbT.mjs";import{c as s,r as c,s as l}from"./agents-DznN3xrB.mjs";import{t as u}from"./lifecycle-errors-BtqYfS-v.mjs";import{a as d,i as f,n as p,r as m}from"./user-output-BQ6dCRsI.mjs";async function h(o){let d=await c(o);if(!d)return t(i({action:`ensure`,error:{code:`AGENT_NOT_FOUND`,details:{input:o},message:`Unknown agent: ${o}`},target:{kind:`agent`,name:o}}),g);let{agent:f,inspection:m}=d;if(m.inPath){if(m.installedState)return t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${f.displayName} is already installed.`}]}),g);let o=n(m.methods,m.resolvedBinaryPath??m.binaryPath);if(o){if(p())return t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`DRY_RUN`,message:`Dry run: would record the existing ${f.displayName} install in Quantex state.`}]}),g);r({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name}},target:{kind:`agent`,name:f.name},type:`started`});try{let e=await s(f,o);return t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!0,installState:{installType:e.installType,packageName:e.packageName},installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`TRACKED_EXISTING_INSTALL`,message:`${f.displayName} is already installed. Quantex is now tracking the existing install.`}]}),g)}catch(n){if(e(n))return t(i({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},...u(n,{kind:`agent`,name:f.name})}),g);throw n}}return t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!0},target:{kind:`agent`,name:f.name},warnings:[{code:`UNTRACKED_EXISTING_INSTALL`,message:`${f.displayName} is already installed but not tracked by Quantex. Quantex could not safely determine the supported install source, so the existing install remains unmanaged.`}]}),g)}if(p())return t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!1},target:{kind:`agent`,name:f.name},warnings:[{code:`DRY_RUN`,message:`Dry run: would install ${f.displayName}.`}]}),g);r({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name}},target:{kind:`agent`,name:f.name},type:`started`});let h;try{h=await l(f)}catch(n){if(e(n))return t(i({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!1},...u(n,{kind:`agent`,name:f.name})}),g);throw n}return h.success?t(a({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!0,installState:h.installedState?{installType:h.installedState.installType,packageName:h.installedState.packageName}:void 0,installed:!0},target:{kind:`agent`,name:f.name}}),g):t(i({action:`ensure`,data:{agent:{displayName:f.displayName,name:f.name},changed:!1,installed:!1},error:{code:`INSTALL_FAILED`,message:`Failed to install ${f.displayName}.`},target:{kind:`agent`,name:f.name}}),g)}function g(e){if(e.error){m(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`){f(o.green(t.message));continue}if(t.code===`DRY_RUN`){d(o.cyan(t.message));continue}d(o.yellow(t.message))}return}if(e.data.changed){f(o.cyan(`Installing ${e.data.agent.displayName}...`)),f(o.green(`${e.data.agent.displayName} is now installed.`));return}f(o.green(`${e.data.agent.displayName} is already installed.`))}}export{h as t};
|
package/dist/ensure-CrCJrMYq.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./ensure-BnS4r4Tt.mjs";export{e as ensureCommand};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./inspect-cL6WV563.mjs";export{e as inspectCommand};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Y as e,a as t,bt as n,i as r,n as i,r as a,t as o}from"./color-P2gkDtbT.mjs";import{c as s,r as c,s as l}from"./agents-DznN3xrB.mjs";import{t as u}from"./lifecycle-errors-BtqYfS-v.mjs";import{a as d,i as f,n as p,r as m}from"./user-output-BQ6dCRsI.mjs";async function h(e){let n=Array.isArray(e)?e:[e];if(n.length<=1)return t(await g(n[0],{emitStartedEvent:!0}),S);r({action:`install`,data:{scope:`batch`},target:{kind:`agent`},type:`started`});let o=[];for(let e of n){let t=v(e,await g(e));o.push(t),r({action:`install`,data:t,target:{kind:`agent`,name:t.agent.name},type:`progress`})}let s={results:o,scope:`batch`,summary:b(o)};return t(o.some(e=>!e.ok)?i({action:`install`,data:s,error:x(o),target:{kind:`agent`}}):a({action:`install`,data:s,target:{kind:`agent`}}),C)}async function g(t,r={}){let o=await c(t);if(!o)return i({action:`install`,error:{code:`AGENT_NOT_FOUND`,details:{input:t},message:`Unknown agent: ${t}`},target:{kind:`agent`,name:t}});let{agent:d,inspection:f}=o;if(f.inPath){if(f.installedState)return a({action:`install`,data:{agent:{displayName:d.displayName,name:d.name},changed:!1,installed:!0},target:{kind:`agent`,name:d.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${d.displayName} is already installed.`}]});let t=n(f.methods,f.resolvedBinaryPath??f.binaryPath);if(t){if(p())return a({action:`install`,data:{agent:{displayName:d.displayName,name:d.name},changed:!1,installed:!0},target:{kind:`agent`,name:d.name},warnings:[{code:`DRY_RUN`,message:`Dry run: would record the existing ${d.displayName} install in Quantex state.`}]});_(d,r.emitStartedEvent);try{let e=await s(d,t);return a({action:`install`,data:{agent:{displayName:d.displayName,name:d.name},changed:!0,installState:{installType:e.installType,packageName:e.packageName},installed:!0},target:{kind:`agent`,name:d.name},warnings:[{code:`TRACKED_EXISTING_INSTALL`,message:`${d.displayName} is already installed. Quantex is now tracking the existing install.`}]})}catch(t){if(e(t))return i({action:`install`,data:{agent:{displayName:d.displayName,name:d.name},changed:!1,installed:!0},...u(t,{kind:`agent`,name:d.name})});throw t}}return a({action:`install`,data:{agent:{displayName:d.displayName,name:d.name},changed:!1,installed:!0},target:{kind:`agent`,name:d.name},warnings:[{code:`UNTRACKED_EXISTING_INSTALL`,message:`${d.displayName} is already installed but not tracked by Quantex. Quantex could not safely determine the supported install source, so the existing install remains unmanaged.`}]})}if(p())return a({action:`install`,data:{agent:{displayName:d.displayName,name:d.name},changed:!1,installed:!1},target:{kind:`agent`,name:d.name},warnings:[{code:`DRY_RUN`,message:`Dry run: would install ${d.displayName}.`}]});_(d,r.emitStartedEvent);let m;try{m=await l(d)}catch(t){if(e(t))return i({action:`install`,data:{agent:{displayName:d.displayName,name:d.name},changed:!1,installed:!1},...u(t,{kind:`agent`,name:d.name})});throw t}return m.success?a({action:`install`,data:{agent:{displayName:d.displayName,name:d.name},changed:!0,installState:m.installedState?{installType:m.installedState.installType,packageName:m.installedState.packageName}:void 0,installed:!0},target:{kind:`agent`,name:d.name}}):i({action:`install`,data:{agent:{displayName:d.displayName,name:d.name},changed:!1,installed:!1},error:{code:`INSTALL_FAILED`,message:`Failed to install ${d.displayName}.`},target:{kind:`agent`,name:d.name}})}function _(e,t=!1){t&&r({action:`install`,data:{agent:{displayName:e.displayName,name:e.name}},target:{kind:`agent`,name:e.name},type:`started`})}function v(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:y(t),warnings:r}}function y(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 b(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 x(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 S(e){if(e.error){m(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`){f(o.green(t.message));continue}if(t.code===`DRY_RUN`){d(o.cyan(t.message));continue}d(o.yellow(t.message))}return}f(o.cyan(`Installing ${e.data.agent.displayName}...`)),f(o.green(`${e.data.agent.displayName} installed successfully!`))}}function C(e){if(!e.data){e.error&&m(o.red(e.error.message));return}for(let t of e.data.results)switch(t.status){case`installed`:f(o.cyan(`Installing ${t.agent.displayName}...`)),f(o.green(`${t.agent.displayName} installed successfully!`));break;case`tracked-existing-install`:f(o.green(w(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`already-installed`:case`untracked-existing-install`:d(o.yellow(w(t.warnings,`${t.agent.displayName} is already installed.`)));break;case`planned`:d(o.cyan(w(t.warnings,`Dry run: would install ${t.agent.displayName}.`)));break;case`locked`:d(o.yellow(t.error?.message??`Another quantex process is already installing ${t.agent.displayName}.`));break;case`failed`:m(o.red(t.error?.message??`Failed to install ${t.agent.displayName}.`));break}T(e.data.summary)}function w(e,t){return e[0]?.message??t}function T(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&&f(o.bold(`Summary: ${t.join(`, `)}`))}export{h as installCommand};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./resolve-D_hJuTw_.mjs";export{e as resolveCommand};
|
package/dist/schema-DOHQE2bD.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./schema-BrRg-KvQ.mjs";export{e as schemaCommand};
|
package/dist/update-Cckz9hVd.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"./messages-qcLhD-Gc.mjs";import{B as r,Y as i,a,ht as o,i as s,n as c,pt as l,r as u,t as d}from"./color-P2gkDtbT.mjs";import{d as f,n as p,u as m}from"./agents-DznN3xrB.mjs";import{a as h,i as g,n as _,r as v}from"./user-output-BQ6dCRsI.mjs";import{n as y,r as b}from"./update-3H-vFkBZ.mjs";async function x(e,t){if(t)return S();if(!e)return a(c({action:`update`,error:{code:`INVALID_ARGUMENT`,message:`Please specify an agent name or use --all flag`},target:{kind:`agent`}}),k);let n=p(e);return n?C(n):a(c({action:`update`,error:{code:`AGENT_NOT_FOUND`,details:{input:e},message:`Unknown agent: ${e}`},target:{kind:`agent`,name:e}}),k)}async function S(){s({action:`update`,data:{scope:`all`},target:{kind:`agent`},type:`started`});let e=await w(await y());return e.hasFailures?a(c({action:`update`,data:{results:e.results,scope:`all`},error:{code:`UPDATE_FAILED`,message:`One or more agents failed to update.`},target:{kind:`agent`}}),k):a(u({action:`update`,data:{results:e.results,scope:`all`},target:{kind:`agent`}}),k)}async function C(e){s({action:`update`,data:{agent:e.name,scope:`single`},target:{kind:`agent`,name:e.name},type:`started`});let{inspection:t,plan:n}=await b(e);if(!t.inPath)return a(c({action:`update`,error:{code:`AGENT_NOT_INSTALLED`,message:`${e.displayName} is not installed.`},target:{kind:`agent`,name:e.name}}),k);let r=await w(n),i=O(r.results);return i?a(c({action:`update`,data:{results:r.results,scope:`single`},error:{code:`RESOURCE_LOCKED`,details:i.resource?{resource:i.resource}:void 0,message:i.message??`Another quantex process is already updating ${e.displayName}.`},target:{kind:`agent`,name:e.name}}),k):r.hasFailures?a(c({action:`update`,data:{results:r.results,scope:`single`},error:{code:`UPDATE_FAILED`,message:`Failed to update ${e.displayName}.`},target:{kind:`agent`,name:e.name}}),k):a(u({action:`update`,data:{results:r.results,scope:`single`},target:{kind:`agent`,name:e.name}}),k)}async function w(n){let r=[];for(let e of n.upToDate)T(r,{displayName:e.agent.displayName,installedVersion:e.installedVersion,latestVersion:e.latestVersion,name:e.agent.name,status:`up-to-date`});for(let t of n.skippedManualCheck)T(r,{displayName:t.agent.displayName,message:e(t.agent),name:t.agent.name,status:`manual-required`});for(let e of n.untrackedInPath)T(r,{displayName:e.agent.displayName,message:t(e.agent),name:e.agent.name,status:`manual-required`});for(let e of n.grouped){let t=await E(e.type,e.packages,e.updates);for(let e of t)T(r,e)}for(let e of n.manual)T(r,await D(e.agent,e.state,e.inspection.methods,e.inspection));return{hasFailures:r.some(e=>e.status===`failed`||e.status===`locked`),results:r}}function T(e,t){e.push(t),s({action:`update`,data:t,target:{kind:`agent`,name:t.name},type:`progress`})}async function E(e,t,n){if(n.length===0)return[];if(_())return n.map(({agent:t,inspection:n,strategy:r})=>({displayName:t.displayName,installedVersion:n.installedVersion,latestVersion:n.latestVersion,message:`Dry run: would update ${t.displayName}.`,name:t.name,status:`planned`,strategy:r===`managed`?`managed/${e}`:r}));try{if(await f(e,t))return n.map(({agent:t,inspection:n,strategy:r})=>({displayName:t.displayName,installedVersion:n.installedVersion,latestVersion:n.latestVersion,name:t.name,status:`updated`,strategy:r===`managed`?`managed/${e}`:r}));let r=[];for(let{agent:e,inspection:t,state:i}of n)r.push(await D(e,i,t.methods,t));return r}catch(t){if(!i(t))throw t;return n.map(({agent:n,inspection:r,strategy:i})=>({displayName:n.displayName,installedVersion:r.installedVersion,latestVersion:r.latestVersion,message:t.message,name:n.name,resource:t.resource,status:`locked`,strategy:i===`managed`?`managed/${e}`:i}))}}async function D(t,a,s,c){let u=l({agent:t,installedState:a,methods:s??c?.methods??[]}),d=c?.installedVersion,f=c?.latestVersion;if(u===`manual-hint`&&!o(t,a))return{displayName:t.displayName,installedVersion:d,latestVersion:f,message:e(t),name:t.name,status:`manual-required`,strategy:u};if(_())return{displayName:t.displayName,installedVersion:d,latestVersion:f,message:`Dry run: would update ${t.displayName}.`,name:t.name,status:`planned`,strategy:u};let p;try{p=await m(t,a)}catch(e){if(i(e))return{displayName:t.displayName,installedVersion:d,latestVersion:f,message:e.message,name:t.name,resource:e.resource,status:`locked`,strategy:u};throw e}if(p.success){if(u===`self-update`){let e=await r(t.binaryName,t.versionProbe);if(d&&e)return e===d?{displayName:t.displayName,installedVersion:e,latestVersion:e,name:t.name,status:`up-to-date`,strategy:u}:{displayName:t.displayName,installedVersion:d,latestVersion:e,name:t.name,status:`updated`,strategy:u}}return{displayName:t.displayName,installedVersion:d,latestVersion:f,name:t.name,status:`updated`,strategy:u}}return{displayName:t.displayName,hint:n(t,u),installedVersion:d,latestVersion:f,name:t.name,status:`failed`,strategy:u}}function O(e){if(e.length===1)return e[0]?.status===`locked`?e[0]:void 0}function k(e){if(!e.data){e.error&&v(d.red(e.error.message));return}for(let t of e.data.results)switch(t.status){case`up-to-date`:g(d.green(`${t.displayName} is up to date (${t.installedVersion??`unknown`})`));break;case`manual-required`:h(d.yellow(`${t.displayName}: manual action required.`)),t.message&&h(d.cyan(`Next step: ${t.message}`));break;case`planned`:h(d.cyan(`Would update ${t.displayName}${t.strategy?` via ${t.strategy}`:``}${A(t.installedVersion,t.latestVersion)}`));break;case`updated`:g(d.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${A(t.installedVersion,t.latestVersion)}`)),g(d.green(`${t.displayName} updated successfully!`));break;case`failed`:g(d.cyan(`Updating ${t.displayName}${t.strategy?` via ${t.strategy}`:``}...${A(t.installedVersion,t.latestVersion)}`)),v(d.red(`Failed to update ${t.displayName}.`)),t.hint&&h(d.cyan(`Next step: ${t.hint}`));break;case`locked`:h(d.yellow(t.message??`Another quantex process is already updating ${t.displayName}.`));break}e.data.results.length>1&&j(e.data.results),!e.data.results.length&&e.error&&v(d.red(e.error.message))}function A(e,t){return e?` (${e} -> ${t??`latest`})`:``}function j(e){let t={failed:0,locked:0,manualRequired:0,planned:0,upToDate:0,updated:0};for(let n of e)switch(n.status){case`up-to-date`:t.upToDate+=1;break;case`manual-required`:t.manualRequired+=1;break;case`planned`:t.planned+=1;break;case`updated`:t.updated+=1;break;case`failed`:t.failed+=1;break;case`locked`:t.locked+=1;break}let n=[t.updated?`updated ${t.updated}`:void 0,t.upToDate?`up to date ${t.upToDate}`:void 0,t.manualRequired?`manual ${t.manualRequired}`:void 0,t.failed?`failed ${t.failed}`:void 0,t.locked?`locked ${t.locked}`:void 0,t.planned?`planned ${t.planned}`:void 0].filter(Boolean);n.length>0&&g(d.bold(`Summary: ${n.join(`, `)}`))}export{x as updateCommand};
|