quantex-cli 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +32 -10
  2. package/README.zh-CN.md +35 -11
  3. package/dist/agent-inspection-Cw-iSnoU.mjs +1 -0
  4. package/dist/agent-installation-BiaOimkM.mjs +1 -0
  5. package/dist/agents-Dc-rbRUf.mjs +1 -0
  6. package/dist/agents-DrmnXNfn.mjs +1 -0
  7. package/dist/capabilities-DJkfliFM.mjs +5 -0
  8. package/dist/capabilities-IF9tdHJa.mjs +1 -0
  9. package/dist/cli.mjs +1 -1
  10. package/dist/color-BrKNxICe.mjs +9 -0
  11. package/dist/commands-B-XYhmX6.mjs +3 -0
  12. package/dist/commands-D4irgBj4.mjs +1 -0
  13. package/dist/config-Dwsy-aHA.mjs +3 -0
  14. package/dist/doctor-98u2ifwx.mjs +3 -0
  15. package/dist/ensure-BH_HgqIO.mjs +1 -0
  16. package/dist/ensure-C8f1rJSV.mjs +1 -0
  17. package/dist/errors-BzuGM14H.mjs +1 -0
  18. package/dist/errors-DXzIacfk.mjs +1 -0
  19. package/dist/index.d.mts +128 -29
  20. package/dist/index.mjs +2 -2
  21. package/dist/info-cy1FacGf.mjs +2 -0
  22. package/dist/inspect-DbxzuABH.mjs +3 -0
  23. package/dist/inspect-DkknAqJ_.mjs +1 -0
  24. package/dist/install-BEZDMLmP.mjs +1 -0
  25. package/dist/lifecycle-errors-BXlHX_YF.mjs +1 -0
  26. package/dist/lifecycle-observations-DU3WbcUM.mjs +1 -0
  27. package/dist/lifecycle-policy-BeWI8sFz.mjs +1 -0
  28. package/dist/list-BpLto0Qx.mjs +3 -0
  29. package/dist/provider-evidence-CDQ6s2Da.mjs +1 -0
  30. package/dist/provider-observations-C8RmlqtY.mjs +1 -0
  31. package/dist/resolve-C51742gH.mjs +1 -0
  32. package/dist/resolve-CeeaqmwA.mjs +1 -0
  33. package/dist/schema-BO33Fvu0.mjs +3 -0
  34. package/dist/schema-Da826hmM.mjs +1 -0
  35. package/dist/uninstall-EBZrNkI3.mjs +1 -0
  36. package/dist/update-CJUu1Frs.mjs +1 -0
  37. package/dist/update-planner-Dq3XUbkO.mjs +1 -0
  38. package/dist/upgrade-D4zvZO8U.mjs +1 -0
  39. package/dist/{user-output-DV2J3Ydm.mjs → user-output-DBsy2Ysd.mjs} +1 -1
  40. package/dist/version-cache-Cpx0V074.mjs +1 -0
  41. package/package.json +6 -3
  42. package/dist/agents-P3f9iWEs.mjs +0 -1
  43. package/dist/capabilities-BEDb8xQf.mjs +0 -5
  44. package/dist/capabilities-C8OrgAMi.mjs +0 -1
  45. package/dist/color-CtIn3BLf.mjs +0 -6
  46. package/dist/commands-BZLGRJch.mjs +0 -1
  47. package/dist/commands-C8Cjtqjn.mjs +0 -3
  48. package/dist/config-DAEqqWBI.mjs +0 -3
  49. package/dist/detect-D84qpua_.mjs +0 -1
  50. package/dist/doctor-C7gfJcNX.mjs +0 -3
  51. package/dist/ensure-B71EjlnR.mjs +0 -1
  52. package/dist/ensure-BgZwJ17g.mjs +0 -1
  53. package/dist/errors-DCtNasuC.mjs +0 -1
  54. package/dist/info-ZQDUs0bK.mjs +0 -2
  55. package/dist/inspect-DDe70zbR.mjs +0 -1
  56. package/dist/inspect-lI3PWPs3.mjs +0 -3
  57. package/dist/install-DOxjCx5v.mjs +0 -1
  58. package/dist/lifecycle-errors-D7JpbOsK.mjs +0 -1
  59. package/dist/list-DjgfI7DP.mjs +0 -3
  60. package/dist/resolve-BWUq-s_R.mjs +0 -1
  61. package/dist/resolve-CX8YaOEv.mjs +0 -1
  62. package/dist/schema-4dHGgkBt.mjs +0 -1
  63. package/dist/schema-DA5oEdRr.mjs +0 -3
  64. package/dist/uninstall-CyGhnH4k.mjs +0 -1
  65. package/dist/update-C34xtbDQ.mjs +0 -1
  66. package/dist/update-UeQ_F4kP.mjs +0 -1
  67. package/dist/upgrade-5uiTpWn2.mjs +0 -1
package/README.md CHANGED
@@ -4,11 +4,17 @@
4
4
 
5
5
  [![npm version][npm-version-src]][npm-version-href]
6
6
  [![npm downloads][npm-downloads-src]][npm-downloads-href]
7
- [![GitHub stars][stars-src]][stars-href]
8
- [![CI][ci-src]][ci-href]
9
7
  [![Release][release-src]][release-href]
10
- [![bundle][bundle-src]][bundle-href]
8
+ [![Release downloads][release-downloads-src]][release-downloads-href]
9
+ [![CI][ci-src]][ci-href]
10
+
11
+ <br />
12
+
13
+ [![Node.js >=20][node-src]][node-href]
14
+ [![Bun][bun-src]][bun-href]
15
+ [![Platforms][platforms-src]][release-href]
11
16
  [![License][license-src]][license-href]
17
+ [![GitHub stars][stars-src]][stars-href]
12
18
 
13
19
  Install, inspect, update, uninstall, and run AI coding assistant CLIs from one agent-friendly command line.
14
20
 
@@ -16,16 +22,22 @@ Install, inspect, update, uninstall, and run AI coding assistant CLIs from one a
16
22
 
17
23
  </div>
18
24
 
19
- 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 Code, 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.
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, Command Code, 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.
20
26
 
21
27
  ## Why Quantex
22
28
 
23
29
  - Manage multiple AI coding assistant CLIs from one lifecycle command: install, ensure, inspect, update, uninstall, and run.
24
30
  - Designed for scripts and coding agents: stable `--json`, `--output ndjson`, `--non-interactive`, and `--dry-run` contracts for machine-readable automation.
25
31
  - Tracks real install sources: `update --all` groups updates by recorded source instead of guessing from PATH alone.
26
- - 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.
27
33
  - Supports Quantex self-upgrade across Bun, npm, and standalone binary installs.
28
34
 
35
+ ## Lifecycle and compatibility guarantees
36
+
37
+ Default agent lifecycle commands reconcile live executable, provider, saved-state, and receipt evidence before they mutate anything. Install, ensure, update, uninstall, and execution preflight use typed provider outcomes and verify their postconditions before recording new lifecycle evidence.
38
+
39
+ The internal engine can evolve without changing the maintained v1 command syntax, JSON/NDJSON envelopes, exit meanings, state/config projection, `qtx`/`quantex` binaries, or root-package exports. Any future removal of a maintained root export requires a separate deprecation proposal; it is not part of the lifecycle-engine redesign.
40
+
29
41
  ## Agent Quick Start
30
42
 
31
43
  If you are using a coding agent with Quantex, start by installing the repo-provided user-facing Quantex CLI skill:
@@ -171,16 +183,18 @@ Note: `qtx upgrade` follows the registry actually used by the current Bun/npm se
171
183
 
172
184
  | Agent | Run Command | Description |
173
185
  |-------|-------------|-------------|
186
+ | Antigravity CLI | `qtx antigravity` | Google's Antigravity terminal coding agent CLI |
174
187
  | Auggie CLI | `qtx auggie` | Augment's official terminal coding agent |
175
188
  | Autohand Code CLI | `qtx autohand` | Autohand's autonomous terminal coding agent CLI |
176
189
  | Amp | `qtx amp` | Sourcegraph's frontier AI coding agent CLI |
177
190
  | Claude Code | `qtx claude` | Anthropic's official AI coding assistant CLI |
178
191
  | CodeBuddy Code | `qtx codebuddy` | Tencent's official AI coding assistant CLI |
179
192
  | Codex CLI | `qtx codex` | OpenAI's official AI coding assistant CLI |
193
+ | Command Code | `qtx commandcode` | Command Code's AI coding assistant CLI |
180
194
  | Crush | `qtx crush` | Charmbracelet's terminal AI coding agent CLI |
181
195
  | Cursor CLI | `qtx cursor` | Cursor AI coding assistant CLI |
182
196
  | Deep Code CLI | `qtx deepcode` | Deep Code's terminal coding agent CLI |
183
- | CodeWhale | `qtx codewhale` | CodeWhale terminal coding agent for DeepSeek models |
197
+ | CodeWhale | `qtx codewhale` | DeepSeek-first agentic terminal for coding models |
184
198
  | Devin for Terminal | `qtx devin` | Cognition's local coding agent CLI |
185
199
  | Droid | `qtx droid` | Factory AI software engineering agent CLI |
186
200
  | ForgeCode | `qtx forgecode` | Antinomy's AI coding assistant CLI |
@@ -188,12 +202,16 @@ Note: `qtx upgrade` follows the registry actually used by the current Bun/npm se
188
202
  | Genie | `qtx genie` | Deno-distributed terminal LLM agent |
189
203
  | GitHub Copilot CLI | `qtx copilot` | GitHub Copilot command-line tool |
190
204
  | Goose | `qtx goose` | Block's open-source extensible AI agent CLI |
205
+ | Grok Build | `qtx grok` | xAI's terminal coding agent CLI |
206
+ | Hermes Agent | `qtx hermes` | Nous Research's self-improving AI agent CLI |
191
207
  | JCode | `qtx jcode` | High-performance coding agent harness for multi-session workflows |
192
208
  | Junie CLI | `qtx junie` | JetBrains' AI coding agent CLI |
193
209
  | Kilo CLI | `qtx kilo` | Kilo's official AI coding assistant CLI |
194
210
  | Kimi Code | `qtx kimi` | Moonshot AI's coding assistant CLI |
195
211
  | Kiro CLI | `qtx kiro` | Amazon's AI coding agent CLI |
212
+ | MiMoCode | `qtx mimo` | Xiaomi's terminal-native AI coding assistant CLI |
196
213
  | Mistral Vibe | `qtx vibe` | Mistral's open-source CLI coding assistant |
214
+ | OpenClaw | `qtx openclaw` | OpenClaw's open-source AI agent runtime CLI |
197
215
  | OpenHands CLI | `qtx openhands` | OpenHands' open-source software development agent CLI |
198
216
  | OpenCode | `qtx opencode` | Open-source AI coding CLI |
199
217
  | oh-my-pi (OMP) | `qtx omp` | oh-my-pi coding agent CLI |
@@ -240,7 +258,6 @@ User configuration lives at `~/.quantex/config.json`:
240
258
  "defaultPackageManager": "bun",
241
259
  "npmBunUpdateStrategy": "latest-major",
242
260
  "selfUpdateChannel": "stable",
243
- "selfUpdateRegistry": "https://registry.npmjs.org",
244
261
  "networkRetries": 2,
245
262
  "networkTimeoutMs": 10000,
246
263
  "versionCacheTtlHours": 6
@@ -249,7 +266,7 @@ User configuration lives at `~/.quantex/config.json`:
249
266
 
250
267
  `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.
251
268
 
252
- `selfUpdateRegistry` only affects the registry used when Quantex upgrades itself through Bun/npm. It does not change the default install source for your other projects. For a one-off override, use the `QTX_SELF_UPDATE_REGISTRY` environment variable.
269
+ `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.
253
270
 
254
271
  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.
255
272
 
@@ -302,7 +319,12 @@ Apache-2.0
302
319
  [ci-href]: https://github.com/Drswith/quantex-cli/actions/workflows/ci.yml
303
320
  [release-src]: https://img.shields.io/github/v/release/Drswith/quantex-cli?display_name=tag&sort=semver&style=flat-square
304
321
  [release-href]: https://github.com/Drswith/quantex-cli/releases
305
- [bundle-src]: https://img.shields.io/bundlephobia/minzip/quantex-cli?style=flat-square
306
- [bundle-href]: https://bundlephobia.com/package/quantex-cli
322
+ [release-downloads-src]: https://img.shields.io/github/downloads/Drswith/quantex-cli/total?style=flat-square&label=release%20downloads
323
+ [release-downloads-href]: https://github.com/Drswith/quantex-cli/releases
324
+ [node-src]: https://img.shields.io/badge/node-%3E%3D20-339933?style=flat-square&logo=node.js&logoColor=white
325
+ [node-href]: https://nodejs.org/
326
+ [bun-src]: https://img.shields.io/badge/bun-1.3.11-fbf0df?style=flat-square&logo=bun&logoColor=000
327
+ [bun-href]: https://bun.sh/
328
+ [platforms-src]: https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-555?style=flat-square
307
329
  [license-src]: https://img.shields.io/npm/l/quantex-cli?style=flat-square
308
330
  [license-href]: ./LICENSE
package/README.zh-CN.md CHANGED
@@ -4,11 +4,17 @@
4
4
 
5
5
  [![npm version][npm-version-src]][npm-version-href]
6
6
  [![npm downloads][npm-downloads-src]][npm-downloads-href]
7
- [![GitHub stars][stars-src]][stars-href]
8
- [![CI][ci-src]][ci-href]
9
7
  [![Release][release-src]][release-href]
10
- [![bundle][bundle-src]][bundle-href]
8
+ [![Release downloads][release-downloads-src]][release-downloads-href]
9
+ [![CI][ci-src]][ci-href]
10
+
11
+ <br />
12
+
13
+ [![Node.js >=20][node-src]][node-href]
14
+ [![Bun][bun-src]][bun-href]
15
+ [![Platforms][platforms-src]][release-href]
11
16
  [![License][license-src]][license-href]
17
+ [![GitHub stars][stars-src]][stars-href]
12
18
 
13
19
  统一管理 AI 编程助手 CLI 的安装、检查、更新、卸载与启动。
14
20
 
@@ -16,16 +22,22 @@
16
22
 
17
23
  </div>
18
24
 
19
- Quantex 是一个 `human-friendly + agent-friendly` 的 AI 编程助手 CLI lifecycle manager。它帮你把 Codex CLI、Claude Code、Gemini CLI、Cursor CLI、OpenCode、Amp、Kilo Code 等终端 coding agent 的安装、检查、更新、卸载、启动和自动化调用统一到一组稳定命令里:人可以直接用,脚本和 coding agent 也可以通过结构化输出可靠调用。本文默认使用更短的 `qtx` 作为推荐入口,`quantex` 是完全等价的完整命令名。
25
+ Quantex 是一个 `human-friendly + agent-friendly` 的 AI 编程助手 CLI lifecycle manager。它帮你把 Codex CLI、Claude Code、Gemini CLI、Cursor CLI、OpenCode、Antigravity CLI、Command Code、MiMoCode、Amp、Kilo CLI 等终端 coding agent 的安装、检查、更新、卸载、启动和自动化调用统一到一组稳定命令里:人可以直接用,脚本和 coding agent 也可以通过结构化输出可靠调用。本文默认使用更短的 `qtx` 作为推荐入口,`quantex` 是完全等价的完整命令名。
20
26
 
21
27
  ## 为什么用 Quantex
22
28
 
23
29
  - 一个生命周期命令管理多个 AI 编程助手 CLI:安装、确保可用、查询状态、更新、卸载、启动。
24
30
  - 适合脚本和 agent 调用:支持 `--json`、`--output ndjson`、`--non-interactive`、`--dry-run` 等适合机器读取的稳定契约。
25
31
  - 记住真实安装来源:`update --all` 会优先按已记录来源分组更新,避免混合安装环境下误用更新方式。
26
- - 支持通过可用的 Bun、npm、Homebrew、Cargo、Deno、pip、uv、winget provider 管理 agent 安装。
32
+ - 支持通过可用的 Bun、npm、Homebrew、Cargo、Deno、mise、pip、uv、winget provider 管理 agent 安装。
27
33
  - 支持 Quantex 自升级:Bun、npm、独立二进制安装来源都有对应升级路径。
28
34
 
35
+ ## 生命周期与兼容性保证
36
+
37
+ 默认的 agent 生命周期命令会先核对实时可执行文件、provider、已保存状态与 receipt 证据,再执行变更。安装、确保可用、更新、卸载和执行预检都使用 typed provider outcome,并在写入新的生命周期证据前验证实际后置条件。
38
+
39
+ 内部引擎可以继续演进,但不会改变当前维护的 v1 命令语法、JSON/NDJSON envelope、退出语义、state/config 投影、`qtx`/`quantex` 二进制入口或 root package exports。未来如需删除任何受维护的 root export,必须另行提出并批准 deprecation proposal;这不属于本次 lifecycle engine 重构。
40
+
29
41
  ## Agent 快速接入
30
42
 
31
43
  如果你正在让 coding agent 使用 Quantex,可以先安装仓库里的面向用户的 Quantex CLI skill:
@@ -150,7 +162,7 @@ qtx upgrade --channel beta
150
162
 
151
163
  | 推荐命令 | 等价长命令 | 作用 |
152
164
  |------|------|------|
153
- | `qtx i <agent>` | `quantex install <agent>` | 安装 agent |
165
+ | `qtx i <agent> [more-agents...]` | `quantex install <agent> [more-agents...]` | 安装一个或多个 agent |
154
166
  | `qtx ensure <agent>` | `quantex ensure <agent>` | 幂等确保 agent 已安装 |
155
167
  | `qtx u <agent>` | `quantex update <agent>` | 更新 agent |
156
168
  | `qtx update --all` | `quantex update --all` | 更新所有已安装 agent |
@@ -171,16 +183,18 @@ qtx upgrade --channel beta
171
183
 
172
184
  | Agent | 启动命令 | 描述 |
173
185
  |-------|----------|------|
186
+ | Antigravity CLI | `qtx antigravity` | Google Antigravity 终端编程 Agent CLI |
174
187
  | Auggie CLI | `qtx auggie` | Augment 官方终端编程 Agent CLI |
175
188
  | Autohand Code CLI | `qtx autohand` | Autohand 官方自主终端编程 Agent CLI |
176
189
  | Amp | `qtx amp` | Sourcegraph 前沿 AI 编程 Agent CLI |
177
190
  | Claude Code | `qtx claude` | Anthropic 官方 AI 编程助手 CLI |
178
191
  | CodeBuddy Code | `qtx codebuddy` | 腾讯官方 AI 编程助手 CLI |
179
192
  | Codex CLI | `qtx codex` | OpenAI 官方 AI 编程助手 CLI |
193
+ | Command Code | `qtx commandcode` | Command Code AI 编程助手 CLI |
180
194
  | Crush | `qtx crush` | Charmbracelet 终端 AI 编程 Agent CLI |
181
195
  | Cursor CLI | `qtx cursor` | Cursor AI 编程助手命令行工具 |
182
196
  | Deep Code CLI | `qtx deepcode` | Deep Code 终端编程 Agent CLI |
183
- | CodeWhale | `qtx codewhale` | 面向 DeepSeek 模型的 CodeWhale 终端编程 Agent |
197
+ | CodeWhale | `qtx codewhale` | DeepSeek 优先的终端编程 Agent |
184
198
  | Devin for Terminal | `qtx devin` | Cognition 本地编程 Agent CLI |
185
199
  | Droid | `qtx droid` | Factory AI 软件工程 Agent CLI |
186
200
  | ForgeCode | `qtx forgecode` | Antinomy AI 编程助手 CLI |
@@ -188,12 +202,16 @@ qtx upgrade --channel beta
188
202
  | Genie | `qtx genie` | 通过 Deno 分发的终端 LLM agent |
189
203
  | GitHub Copilot CLI | `qtx copilot` | GitHub Copilot 命令行工具 |
190
204
  | Goose | `qtx goose` | Block 开源可扩展 AI Agent CLI |
205
+ | Grok Build | `qtx grok` | xAI 终端编程 Agent CLI |
206
+ | Hermes Agent | `qtx hermes` | Nous Research 自我进化的 AI Agent CLI |
191
207
  | JCode | `qtx jcode` | 面向多 session 工作流的高性能编程 Agent harness |
192
208
  | Junie CLI | `qtx junie` | JetBrains 官方 AI 编程 Agent CLI |
193
209
  | Kilo CLI | `qtx kilo` | Kilo 官方 AI 编程助手 CLI |
194
210
  | Kimi Code | `qtx kimi` | Moonshot AI 编程助手 CLI |
195
211
  | Kiro CLI | `qtx kiro` | Amazon AI 编程 Agent CLI |
212
+ | MiMoCode | `qtx mimo` | 小米终端原生 AI 编程助手 CLI |
196
213
  | Mistral Vibe | `qtx vibe` | Mistral 开源终端编程助手 |
214
+ | OpenClaw | `qtx openclaw` | OpenClaw 开源 AI Agent 运行时 CLI |
197
215
  | OpenHands CLI | `qtx openhands` | OpenHands 开源软件开发 Agent CLI |
198
216
  | OpenCode | `qtx opencode` | 开源 AI 编程 CLI |
199
217
  | oh-my-pi (OMP) | `qtx omp` | oh-my-pi coding agent CLI |
@@ -240,14 +258,15 @@ quantex schema --json
240
258
  "defaultPackageManager": "bun",
241
259
  "npmBunUpdateStrategy": "latest-major",
242
260
  "selfUpdateChannel": "stable",
243
- "selfUpdateRegistry": "https://registry.npmjs.org",
244
261
  "networkRetries": 2,
245
262
  "networkTimeoutMs": 10000,
246
263
  "versionCacheTtlHours": 6
247
264
  }
248
265
  ```
249
266
 
250
- `selfUpdateRegistry` 只影响 Quantex 自身通过 Bun/npm 执行 `qtx upgrade` registry 选择,不会修改你其他项目的默认安装源。一次性覆盖可使用环境变量 `QTX_SELF_UPDATE_REGISTRY`。
267
+ `defaultPackageManager` 可以是 `bun`、`npm` `mise`。它只会在目标 agent 暴露对应 managed installer 时调整 agent 安装方式排序,不会让 Quantex 自动替你安装缺失的 package manager。
268
+
269
+ `selfUpdateRegistry` 默认不设置。未设置时,Quantex 自升级会跟随当前 Bun/npm 实际使用的 registry。设置 `selfUpdateRegistry` 后,它只影响 Quantex 自身通过 Bun/npm 执行 `qtx upgrade` 的 registry 选择,不会修改你其他项目的默认安装源。一次性覆盖可使用环境变量 `QTX_SELF_UPDATE_REGISTRY`。
251
270
 
252
271
  运行时状态位于 `~/.quantex/state.json`。Quantex 会记录 agent 和自身的实际安装来源,用于 `update --all` 分组更新、`doctor` 恢复建议和 self upgrade 来源判断。
253
272
 
@@ -300,7 +319,12 @@ Apache-2.0
300
319
  [ci-href]: https://github.com/Drswith/quantex-cli/actions/workflows/ci.yml
301
320
  [release-src]: https://img.shields.io/github/v/release/Drswith/quantex-cli?display_name=tag&sort=semver&style=flat-square
302
321
  [release-href]: https://github.com/Drswith/quantex-cli/releases
303
- [bundle-src]: https://img.shields.io/bundlephobia/minzip/quantex-cli?style=flat-square
304
- [bundle-href]: https://bundlephobia.com/package/quantex-cli
322
+ [release-downloads-src]: https://img.shields.io/github/downloads/Drswith/quantex-cli/total?style=flat-square&label=release%20downloads
323
+ [release-downloads-href]: https://github.com/Drswith/quantex-cli/releases
324
+ [node-src]: https://img.shields.io/badge/node-%3E%3D20-339933?style=flat-square&logo=node.js&logoColor=white
325
+ [node-href]: https://nodejs.org/
326
+ [bun-src]: https://img.shields.io/badge/bun-1.3.11-fbf0df?style=flat-square&logo=bun&logoColor=000
327
+ [bun-href]: https://bun.sh/
328
+ [platforms-src]: https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-555?style=flat-square
305
329
  [license-src]: https://img.shields.io/npm/l/quantex-cli?style=flat-square
306
330
  [license-href]: ./LICENSE
@@ -0,0 +1 @@
1
+ import{$ as e,Q as t,ot as n}from"./color-BrKNxICe.mjs";function r(r){let i=r.pathExecutable;return{agent:r.agent,methods:r.methods,installedState:r.installedState,inPath:i.present,installedVersion:i.present?i.version:void 0,latestVersion:r.latestVersion,binaryPath:i.present?i.path:void 0,resolvedBinaryPath:i.present?r.resolvedBinaryPath:void 0,sourceLabel:t(r.installedState),updateLabel:e(r.agent,r.installedState),lifecycle:r.installedState?n(r.installedState.installType):`unmanaged`}}export{r as t};
@@ -0,0 +1 @@
1
+ import{Kt as e,Qt as t,j as n,sn as r}from"./color-BrKNxICe.mjs";import{d as i,f as a,o,p as s,s as c,t as l,v as u}from"./provider-evidence-CDQ6s2Da.mjs";function d(e){let t=f(e);return{decision:t,plan:{id:`${e.intent.kind}-${e.intent.targetId}`,intent:e.intent,kind:`lifecycle-plan`,observation:e.observation,steps:h(t,e)}}}function f(e){let{intent:t,observation:n}=e;return n.kind===`indeterminate`||n.drift.kind===`indeterminate`||n.drift.kind===`conflicting-source`||p(e)?`blocked`:t.kind===`uninstall`?n.kind===`absent`?n.drift.kind===`recorded-absent`?`clear-ghost`:`preserve-unmanaged`:!n.providerId||!y(e)?`preserve-unmanaged`:m(e,`uninstall`)?`uninstall`:`unsupported`:n.kind===`present`?n.drift.kind===`untracked`?n.providerId?`adopt`:`preserve-unmanaged`:`satisfied`:!v(e)||!y(e)?`blocked`:m(e,`install`)?`install`:`unsupported`}function p(e){let{observation:t,provider:n}=e;return t.kind!==`present`||n===void 0?!1:t.providerId!==void 0&&t.providerId!==n.providerId||t.providerTargetId!==void 0&&t.providerTargetId!==n.targetId||t.providerTargetKind!==void 0&&t.providerTargetKind!==n.targetKind}function m(e,t){return e.provider===void 0||e.provider.capabilities.includes(t)}function h(e,t){switch(e){case`install`:return[g(`install`,t,_(`package-present`,t))];case`uninstall`:return[g(`uninstall`,t,_(`package-absent`,t))];case`adopt`:return[b(`adopt-${t.intent.targetId}`,[{executable:t.observation.kind===`present`?t.observation.executablePath??t.intent.targetId:t.intent.targetId,kind:`executable-present`}])];case`clear-ghost`:return[b(`clear-ghost-${t.intent.targetId}`,[])];case`blocked`:case`preserve-unmanaged`:case`satisfied`:case`unsupported`:return[]}}function g(e,t,n){let r=v(t),i=y(t);return{dependsOn:[],effects:[{capability:`${r}-${e}`,kind:`provider-mutation`,providerId:r,targetId:i}],id:`${e}-${t.intent.targetId}`,kind:`operation`,postconditions:[n],preconditions:[]}}function _(e,t){return{kind:e,providerId:v(t),targetId:y(t)}}function v(e){return e.observation.kind===`present`?e.observation.providerId??e.provider?.providerId??e.providerId:e.provider?.providerId??e.providerId}function y(e){return e.observation.kind===`present`?e.observation.providerTargetId??e.provider?.targetId??e.providerTargetId:e.provider?.targetId??e.providerTargetId}function b(e,t){return{dependsOn:[],effects:[],id:e,kind:`operation`,postconditions:t,preconditions:[]}}async function x(e){let t=await e.execute();if(t.kind!==`success`)return t;let n;try{n=await e.verify(t.value,e.plan)}catch{return await S(e,t.value),{kind:`failed`,reason:`verification-failed`,retryable:!0}}if(n.kind!==`satisfied`)return await S(e,t.value),n.kind===`indeterminate`?{kind:`indeterminate`,reason:n.reason}:{kind:`failed`,reason:n.reason,retryable:!1};let r=e.createReceipt(n,t.value);try{await e.recordReceipt(r,t.value)}catch{return await S(e,t.value),{kind:`failed`,reason:`receipt-write-failed`,retryable:!0}}return{kind:`success`,value:{...t.value,receipt:r,verification:n}}}async function S(e,t){if(!(!t.changed||!e.compensate))try{await e.compensate(t)}catch{}}function C(e){let{adoptableMethod:t,agent:r,observation:i,operation:a,route:c}=e,f=i.installedState?void 0:i.methods[0],p=i.installedState??t??f,m=D(i.lifecycle,r,t),h=d({intent:{kind:a,targetId:r.name},observation:m,providerId:O(p),providerTargetId:k(r,p)});return h.decision===c?u(async()=>{if(c===`install`&&i.installedState&&!i.inPath){let e=o(r,i.installedState);if(!e)return{kind:`indeterminate`,reason:`tracked-provider-binding-unresolved`};let t=await E(t=>l(e,t));if(t.kind!==`success`||t.value.kind!==`absent`)return{kind:`indeterminate`,reason:`tracked-provider-not-conclusively-absent`}}return x({createReceipt:(e,t)=>{let n=o(r,t.value.installedState);if(!n)throw Error(`Cannot resolve provider binding for ${r.name}.`);let i=e.observation.kind===`present`?e.observation:void 0;return{...n.target.binaryName?{executableName:n.target.binaryName}:{},kind:`lifecycle-receipt`,providerId:n.providerId,providerTargetId:n.target.id,providerTargetKind:n.target.kind,schemaVersion:1,targetId:r.name,verifiedAt:new Date().toISOString(),...i?.executablePath?{executablePath:i.executablePath}:{},...i?.version?{version:i.version}:{}}},compensate:e=>c===`install`?s(r,e.value.installedState):Promise.resolve(),execute:async()=>w(r,c,i.installedState,t,f),plan:h.plan,recordReceipt:(e,t)=>n(t.value.installedState,e),verify:async e=>T(r,e.value.installedState,a,h.plan.steps[0]?.postconditions[0])})}):Promise.resolve({kind:`indeterminate`,reason:`planned-${h.decision}-cannot-execute-${c}`})}async function w(e,t,n,o,s){if(t===`satisfied`&&n)return{kind:`success`,value:{changed:!1,value:{installedState:n}}};if(t===`adopt`&&o)return r().cancelled?{kind:`cancelled`,reason:`tracking-cancelled`}:{kind:`success`,value:{changed:!0,value:{installedState:c(e,o)}}};if(t===`install`&&n){let t=await a(e,n);return t.kind===`success`&&t.value.installedState?{kind:`success`,value:{changed:!0,value:{installedState:t.value.installedState}}}:t.kind===`success`?{kind:`failed`,reason:`installed-state-missing`,retryable:!1}:t}if(!s)return{kind:`indeterminate`,reason:`install-method-unresolved`};let l=await i(e,[s]);return l.kind===`success`?l.value.installedState?{kind:`success`,value:{changed:!0,value:{installedState:l.value.installedState}}}:{kind:`failed`,reason:`installed-state-missing`,retryable:!1}:l}async function T(t,n,r,i){let a=i??{executable:t.binaryName,kind:`executable-present`},s=o(t,n);if(!s)return{kind:`indeterminate`,postcondition:a,reason:`provider-binding-unresolved-after-${r}`};let[c,u]=await E(n=>Promise.all([e(t.binaryName,n),l(s,n)])),d=u.kind===`success`&&u.value.kind===`present`,f=u.kind===`success`?u.value:void 0,p=c&&d?{drift:{kind:`none`},executablePath:f?.kind===`present`?f.executablePath:void 0,kind:`present`,providerId:s.providerId,providerTargetId:s.target.id,targetId:t.name,version:f?.kind===`present`?f.version:void 0}:{drift:{kind:`recorded-absent`},kind:`absent`,targetId:t.name};return c&&d?{kind:`satisfied`,observation:p,postcondition:a}:{kind:`unsatisfied`,observation:p,postcondition:a,reason:c?`provider-target-not-present-after-${r}`:`binary-not-found-after-${r}`}}async function E(e){let n=t();try{return await e(n.context)}finally{n.dispose()}}function D(e,t,n){return e.kind!==`present`||!n?e:{...e,providerId:O(n),providerTargetId:k(t,n)}}function O(e){if(e)return`installType`in e?e.installType:e.type}function k(e,t){if(t){if(t.packageName)return t.packageName;if(t.command)return t.command;if(t.binaryName)return t.binaryName;let n=O(t);if(n===`bun`||n===`npm`)return e.packages?.npm??e.binaryName;if(n===`cargo`)return e.packages?.cargo??e.binaryName;if(n===`deno`)return e.packages?.deno??e.binaryName;if(n===`mise`)return e.packages?.mise??e.binaryName;if(n===`pip`)return e.packages?.pip??e.binaryName;if(n===`uv`)return e.packages?.uv??e.binaryName}return e.binaryName}export{C as t};
@@ -0,0 +1 @@
1
+ import{toJSONSchema as e,z as t}from"zod";const n=[{name:`amp`,displayName:`Amp`,homepage:`https://ampcode.com/`,binaryName:`amp`,selfUpdate:{command:[`amp`,`update`]},versionProbe:{command:[`amp`,`version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@sourcegraph/amp`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@sourcegraph/amp`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@sourcegraph/amp`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@sourcegraph/amp`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@sourcegraph/amp`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@sourcegraph/amp`,kind:`package`}}]}},{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:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://antigravity.google/cli/install.ps1`,kind:`script`,effect:{command:`irm https://antigravity.google/cli/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://antigravity.google/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://antigravity.google/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,kind:`shell-script`}}}]}},{name:`auggie`,displayName:`Auggie CLI`,homepage:`https://docs.augmentcode.com/cli/overview`,binaryName:`auggie`,selfUpdate:{command:[`auggie`,`upgrade`]},versionProbe:{command:[`auggie`,`--version`]},platforms:{macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@augmentcode/auggie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@augmentcode/auggie`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@augmentcode/auggie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@augmentcode/auggie`,kind:`package`}}]}},{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:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://autohand.ai/install.ps1`,kind:`script`,effect:{command:`iwr -useb https://autohand.ai/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://autohand.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://autohand.ai/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://autohand.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://autohand.ai/install.sh | bash`,kind:`shell-script`}}}]}},{name:`claude`,displayName:`Claude Code`,homepage:`https://code.claude.com/docs`,binaryName:`claude`,selfUpdate:{command:[`claude`,`update`],fallbackCommands:[[`claude`,`upgrade`]]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://claude.ai/install.ps1`,kind:`script`,effect:{command:`irm https://claude.ai/install.ps1 | iex`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`winget`,target:{id:`Anthropic.ClaudeCode`,kind:`id`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://claude.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://claude.ai/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`claude-code`,kind:`cask`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://claude.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://claude.ai/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`claude-code`,kind:`cask`}}]}},{name:`codebuddy`,lookupAliases:[`codebuddy-code`],displayName:`CodeBuddy Code`,homepage:`https://www.codebuddy.cn/docs/cli/installation`,binaryName:`codebuddy`,selfUpdate:{command:[`codebuddy`,`update`]},versionProbe:{command:[`codebuddy`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://www.codebuddy.cn/cli/install.ps1`,kind:`script`,effect:{command:`irm https://www.codebuddy.cn/cli/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://www.codebuddy.cn/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://www.codebuddy.cn/cli/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`Tencent-CodeBuddy/tap/codebuddy-code`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://www.codebuddy.cn/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://www.codebuddy.cn/cli/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`Tencent-CodeBuddy/tap/codebuddy-code`,kind:`formula`}}]}},{name:`codewhale`,displayName:`CodeWhale`,homepage:`https://github.com/Hmbown/CodeWhale`,binaryName:`codewhale`,selfUpdate:{command:[`codewhale`,`update`]},versionProbe:{command:[`codewhale`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`codewhale`,kind:`package`}},{provider:`cargo`,target:{id:`codewhale-cli`,kind:`package`,arguments:[`--locked`]},probes:[`executable-presence`]}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`codewhale`,kind:`package`}},{provider:`cargo`,target:{id:`codewhale-cli`,kind:`package`,arguments:[`--locked`]},probes:[`executable-presence`]}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`codewhale`,kind:`package`}},{provider:`cargo`,target:{id:`codewhale-cli`,kind:`package`,arguments:[`--locked`]},probes:[`executable-presence`]}]}},{name:`codex`,displayName:`Codex CLI`,homepage:`https://developers.openai.com/codex/cli`,binaryName:`codex`,selfUpdate:{command:[`codex`,`--upgrade`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`],provider:`mise`,target:{id:`npm:@openai/codex`,kind:`tool`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`],provider:`mise`,target:{id:`npm:@openai/codex`,kind:`tool`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`codex`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`],provider:`mise`,target:{id:`npm:@openai/codex`,kind:`tool`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`codex`,kind:`formula`}}]}},{name:`commandcode`,lookupAliases:[`command-code`,`cmd`,`cmdc`],displayName:`Command Code`,homepage:`https://commandcode.ai/docs/quickstart`,binaryName:`command-code`,selfUpdate:{command:[`command-code`,`update`]},versionProbe:{command:[`command-code`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`command-code`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`command-code`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`command-code`,kind:`package`}}]}},{name:`copilot`,displayName:`GitHub Copilot CLI`,homepage:`https://github.com/features/copilot/cli`,binaryName:`copilot`,platforms:{windows:[{probes:[`executable-presence`],provider:`winget`,target:{id:`GitHub.Copilot`,kind:`id`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@github/copilot`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@github/copilot`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://gh.io/copilot-install`,kind:`script`,effect:{command:`curl -fsSL https://gh.io/copilot-install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`copilot-cli`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@github/copilot`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@github/copilot`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://gh.io/copilot-install`,kind:`script`,effect:{command:`curl -fsSL https://gh.io/copilot-install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`copilot-cli`,kind:`formula`}}]}},{name:`crush`,displayName:`Crush`,homepage:`https://github.com/charmbracelet/crush`,binaryName:`crush`,selfUpdate:{command:[`crush`,`update`]},versionProbe:{command:[`crush`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`],provider:`winget`,target:{id:`charmbracelet.crush`,kind:`id`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`charmbracelet/tap/crush`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`charmbracelet/tap/crush`,kind:`formula`}}]}},{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:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cursor.com/install?win32=true`,kind:`script`,effect:{command:`irm 'https://cursor.com/install?win32=true' | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cursor.com/install`,kind:`script`,effect:{command:`curl https://cursor.com/install -fsS | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cursor.com/install`,kind:`script`,effect:{command:`curl https://cursor.com/install -fsS | bash`,kind:`shell-script`}}}]}},{name:`deepcode`,displayName:`Deep Code CLI`,homepage:`https://github.com/lessweb/deepcode-cli`,binaryName:`deepcode`,versionProbe:{command:[`deepcode`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@vegamo/deepcode-cli`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@vegamo/deepcode-cli`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@vegamo/deepcode-cli`,kind:`package`}}]}},{name:`devin`,displayName:`Devin for Terminal`,homepage:`https://cli.devin.ai/`,binaryName:`devin`,selfUpdate:{command:[`devin`,`update`]},versionProbe:{command:[`devin`,`version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://static.devin.ai/cli/setup.ps1`,kind:`script`,effect:{command:`irm https://static.devin.ai/cli/setup.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.devin.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://cli.devin.ai/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.devin.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://cli.devin.ai/install.sh | bash`,kind:`shell-script`}}}]}},{name:`droid`,displayName:`Droid`,homepage:`https://docs.factory.ai/cli/getting-started/overview`,binaryName:`droid`,selfUpdate:{command:[`droid`,`update`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://app.factory.ai/cli/windows`,kind:`script`,effect:{command:`irm https://app.factory.ai/cli/windows | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://app.factory.ai/cli`,kind:`script`,effect:{command:`curl -fsSL https://app.factory.ai/cli | sh`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`droid`,kind:`cask`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://app.factory.ai/cli`,kind:`script`,effect:{command:`curl -fsSL https://app.factory.ai/cli | sh`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`droid`,kind:`cask`}}]}},{name:`forgecode`,lookupAliases:[`forge`],displayName:`ForgeCode`,homepage:`https://forgecode.dev`,binaryName:`forge`,selfUpdate:{command:[`forge`,`update`]},versionProbe:{command:[`forge`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://forgecode.dev/cli`,kind:`script`,effect:{command:`irm https://forgecode.dev/cli | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://forgecode.dev/cli`,kind:`script`,effect:{command:`curl -fsSL https://forgecode.dev/cli | sh`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://forgecode.dev/cli`,kind:`script`,effect:{command:`curl -fsSL https://forgecode.dev/cli | sh`,kind:`shell-script`}}}]}},{name:`gemini`,displayName:`Gemini CLI`,homepage:`https://google-gemini.github.io/gemini-cli/docs/`,binaryName:`gemini`,platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@google/gemini-cli`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`gemini-cli`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`gemini-cli`,kind:`formula`}}]}},{name:`genie`,displayName:`Genie`,homepage:`https://jsr.io/@nicorio/genie`,binaryName:`genie`,platforms:{windows:[{provider:`deno`,target:{id:`jsr:@nicorio/genie`,kind:`tool`,arguments:[`-A`]},probes:[`executable-presence`]}],macos:[{provider:`deno`,target:{id:`jsr:@nicorio/genie`,kind:`tool`,arguments:[`-A`]},probes:[`executable-presence`]}],linux:[{provider:`deno`,target:{id:`jsr:@nicorio/genie`,kind:`tool`,arguments:[`-A`]},probes:[`executable-presence`]}]}},{name:`goose`,displayName:`Goose`,homepage:`https://github.com/aaif-goose/goose`,binaryName:`goose`,selfUpdate:{command:[`goose`,`update`]},versionProbe:{command:[`goose`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh`,kind:`script`,effect:{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/aaif-goose/goose/main/download_cli.ps1`,kind:`script`,effect:{command:`Invoke-WebRequest -Uri "https://raw.githubusercontent.com/aaif-goose/goose/main/download_cli.ps1" -OutFile "download_cli.ps1"; ./download_cli.ps1`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh`,kind:`script`,effect:{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`block-goose-cli`,kind:`formula`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh`,kind:`script`,effect:{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`block-goose-cli`,kind:`formula`}}]}},{name:`grok`,lookupAliases:[`grok-build`],displayName:`Grok Build`,homepage:`https://docs.x.ai/build/overview`,binaryName:`grok`,selfUpdate:{command:[`grok`,`update`]},versionProbe:{command:[`grok`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://x.ai/cli/install.ps1`,kind:`script`,effect:{command:`irm https://x.ai/cli/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://x.ai/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://x.ai/cli/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://x.ai/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://x.ai/cli/install.sh | bash`,kind:`shell-script`}}}]}},{name:`hermes`,lookupAliases:[`hermes-agent`],displayName:`Hermes Agent`,homepage:`https://github.com/NousResearch/hermes-agent`,binaryName:`hermes`,selfUpdate:{command:[`hermes`,`update`]},versionProbe:{command:[`hermes`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://hermes-agent.nousresearch.com/install.ps1`,kind:`script`,effect:{command:`iex (irm https://hermes-agent.nousresearch.com/install.ps1)`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://hermes-agent.nousresearch.com/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://hermes-agent.nousresearch.com/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash`,kind:`shell-script`}}}]}},{name:`jcode`,displayName:`JCode`,homepage:`https://github.com/1jehuang/jcode`,binaryName:`jcode`,versionProbe:{command:[`jcode`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.ps1`,kind:`script`,effect:{command:`irm https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`brew`,target:{id:`1jehuang/jcode/jcode`,kind:`formula`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh | bash`,kind:`shell-script`}}}]}},{name:`junie`,displayName:`Junie CLI`,homepage:`https://junie.jetbrains.com/docs/junie-cli.html`,binaryName:`junie`,versionProbe:{command:[`junie`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://junie.jetbrains.com/install.ps1`,kind:`script`,effect:{command:`iex (irm 'https://junie.jetbrains.com/install.ps1')`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://junie.jetbrains.com/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://junie.jetbrains.com/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`jetbrains-junie/junie/junie`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://junie.jetbrains.com/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://junie.jetbrains.com/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`jetbrains-junie/junie/junie`,kind:`formula`}}]}},{name:`kilo`,displayName:`Kilo CLI`,homepage:`https://kilo.ai/docs/cli`,binaryName:`kilo`,selfUpdate:{command:[`kilo`,`upgrade`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@kilocode/cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@kilocode/cli`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@kilocode/cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@kilocode/cli`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@kilocode/cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@kilocode/cli`,kind:`package`}}]}},{name:`kimi`,lookupAliases:[`kimi-code`,`kimi-cli`],displayName:`Kimi Code`,homepage:`https://moonshotai.github.io/kimi-code/`,binaryName:`kimi`,selfUpdate:{command:[`kimi`,`upgrade`]},versionProbe:{command:[`kimi`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://code.kimi.com/kimi-code/install.ps1`,kind:`script`,effect:{command:`irm https://code.kimi.com/kimi-code/install.ps1 | iex`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@moonshot-ai/kimi-code`,kind:`package`}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://code.kimi.com/kimi-code/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@moonshot-ai/kimi-code`,kind:`package`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://code.kimi.com/kimi-code/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@moonshot-ai/kimi-code`,kind:`package`}}]}},{name:`kiro`,lookupAliases:[`kiro-cli`],displayName:`Kiro CLI`,homepage:`https://kiro.dev/cli/`,binaryName:`kiro-cli`,versionProbe:{command:[`kiro-cli`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.kiro.dev/install.ps1`,kind:`script`,effect:{command:`irm 'https://cli.kiro.dev/install.ps1' | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.kiro.dev/install`,kind:`script`,effect:{command:`curl -fsSL https://cli.kiro.dev/install | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.kiro.dev/install`,kind:`script`,effect:{command:`curl -fsSL https://cli.kiro.dev/install | bash`,kind:`shell-script`}}}]}},{name:`mimo`,lookupAliases:[`mimocode`,`mimo-code`],displayName:`MiMoCode`,homepage:`https://github.com/XiaomiMiMo/MiMo-Code`,binaryName:`mimo`,versionProbe:{command:[`mimo`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mimo-ai/cli`,kind:`package`}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://mimo.xiaomi.com/install`,kind:`script`,effect:{command:`curl -fsSL https://mimo.xiaomi.com/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mimo-ai/cli`,kind:`package`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://mimo.xiaomi.com/install`,kind:`script`,effect:{command:`curl -fsSL https://mimo.xiaomi.com/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mimo-ai/cli`,kind:`package`}}]}},{name:`omp`,displayName:`oh-my-pi (OMP)`,homepage:`https://github.com/can1357/oh-my-pi`,binaryName:`omp`,versionProbe:{command:[`omp`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@oh-my-pi/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://omp.sh/install.ps1`,kind:`script`,effect:{command:`irm https://omp.sh/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@oh-my-pi/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://omp.sh/install`,kind:`script`,effect:{command:`curl -fsSL https://omp.sh/install | sh`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@oh-my-pi/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://omp.sh/install`,kind:`script`,effect:{command:`curl -fsSL https://omp.sh/install | sh`,kind:`shell-script`}}}]}},{name:`openclaw`,displayName:`OpenClaw`,homepage:`https://github.com/openclaw/openclaw`,binaryName:`openclaw`,selfUpdate:{command:[`openclaw`,`update`]},versionProbe:{command:[`openclaw`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://openclaw.ai/install.ps1`,kind:`script`,effect:{command:`iwr -useb https://openclaw.ai/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://openclaw.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://openclaw.ai/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://openclaw.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://openclaw.ai/install.sh | bash`,kind:`shell-script`}}}]}},{name:`opencode`,displayName:`OpenCode`,homepage:`https://opencode.ai`,binaryName:`opencode`,selfUpdate:{command:[`opencode`,`upgrade`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`opencode-ai`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://opencode.ai/install`,kind:`script`,effect:{command:`curl -fsSL https://opencode.ai/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`anomalyco/tap/opencode`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://opencode.ai/install`,kind:`script`,effect:{command:`curl -fsSL https://opencode.ai/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`anomalyco/tap/opencode`,kind:`formula`}}]}},{name:`openhands`,displayName:`OpenHands CLI`,homepage:`https://docs.openhands.dev/openhands/usage/cli/installation`,binaryName:`openhands`,selfUpdate:{command:[`uv`,`tool`,`upgrade`,`openhands`,`--python`,`3.12`]},versionProbe:{command:[`openhands`,`--version`]},platforms:{macos:[{provider:`uv`,target:{id:`openhands`,kind:`tool`,arguments:[`--python`,`3.12`]},probes:[`executable-presence`,`installed-version`,`package-presence`]},{probes:[`executable-presence`],provider:`script`,target:{id:`https://install.openhands.dev/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://install.openhands.dev/install.sh | sh`,kind:`shell-script`}}}],linux:[{provider:`uv`,target:{id:`openhands`,kind:`tool`,arguments:[`--python`,`3.12`]},probes:[`executable-presence`,`installed-version`,`package-presence`]},{probes:[`executable-presence`],provider:`script`,target:{id:`https://install.openhands.dev/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://install.openhands.dev/install.sh | sh`,kind:`shell-script`}}}]}},{name:`pi`,displayName:`Pi`,homepage:`https://pi.dev`,binaryName:`pi`,selfUpdate:{command:[`pi`,`update`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}}]}},{name:`qoder`,lookupAliases:[`qodercli`],displayName:`Qoder CLI`,homepage:`https://docs.qoder.com/cli/quick-start`,binaryName:`qodercli`,selfUpdate:{command:[`qodercli`,`update`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qoder-ai/qodercli`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://qoder.com/install`,kind:`script`,effect:{command:`curl -fsSL https://qoder.com/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`qoderai/qoder/qodercli`,kind:`cask`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://qoder.com/install`,kind:`script`,effect:{command:`curl -fsSL https://qoder.com/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`qoderai/qoder/qodercli`,kind:`cask`}}]}},{name:`qwen`,displayName:`Qwen Code`,homepage:`https://qwenlm.github.io/qwen-code-docs/`,binaryName:`qwen`,platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.bat`,kind:`script`,effect:{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`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qwen-code/qwen-code`,kind:`package`}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh`,kind:`script`,effect:{command:`curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`qwen-code`,kind:`formula`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh`,kind:`script`,effect:{command:`curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`qwen-code`,kind:`formula`}}]}},{name:`reasonix`,lookupAliases:[`deepseek-reasonix`],displayName:`Reasonix`,homepage:`https://github.com/esengine/DeepSeek-Reasonix`,binaryName:`reasonix`,selfUpdate:{command:[`reasonix`,`update`]},versionProbe:{command:[`reasonix`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`reasonix`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`reasonix`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`reasonix`,kind:`package`}}]}},{name:`vibe`,lookupAliases:[`mistral-vibe`],displayName:`Mistral Vibe`,homepage:`https://docs.mistral.ai/mistral-vibe/terminal/install`,binaryName:`vibe`,versionProbe:{command:[`vibe`,`--version`]},platforms:{windows:[{provider:`uv`,target:{id:`mistral-vibe`,kind:`tool`},probes:[`executable-presence`,`installed-version`,`package-presence`],legacy:{packageNameInMethod:!0}},{provider:`pip`,target:{id:`mistral-vibe`,kind:`package`},probes:[`executable-presence`],legacy:{packageNameInMethod:!0}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://mistral.ai/vibe/install.sh`,kind:`script`,effect:{command:`curl -LsSf https://mistral.ai/vibe/install.sh | bash`,kind:`shell-script`}}},{provider:`uv`,target:{id:`mistral-vibe`,kind:`tool`},probes:[`executable-presence`,`installed-version`,`package-presence`],legacy:{packageNameInMethod:!0}},{provider:`pip`,target:{id:`mistral-vibe`,kind:`package`},probes:[`executable-presence`],legacy:{packageNameInMethod:!0}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://mistral.ai/vibe/install.sh`,kind:`script`,effect:{command:`curl -LsSf https://mistral.ai/vibe/install.sh | bash`,kind:`shell-script`}}},{provider:`uv`,target:{id:`mistral-vibe`,kind:`tool`},probes:[`executable-presence`,`installed-version`,`package-presence`],legacy:{packageNameInMethod:!0}},{provider:`pip`,target:{id:`mistral-vibe`,kind:`package`},probes:[`executable-presence`],legacy:{packageNameInMethod:!0}}]}},{name:`vtcode`,displayName:`VTCode`,homepage:`https://github.com/vinhnx/vtcode`,binaryName:`vtcode`,selfUpdate:{command:[`vtcode`,`update`]},versionProbe:{command:[`vtcode`,`--version`]},platforms:{windows:[{provider:`cargo`,target:{id:`vtcode`,kind:`package`},probes:[`executable-presence`]},{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.ps1`,kind:`script`,effect:{command:`irm https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh | bash`,kind:`shell-script`}}},{provider:`cargo`,target:{id:`vtcode`,kind:`package`},probes:[`executable-presence`]},{probes:[`executable-presence`],provider:`brew`,target:{id:`vtcode`,kind:`formula`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh | bash`,kind:`shell-script`}}},{provider:`cargo`,target:{id:`vtcode`,kind:`package`},probes:[`executable-presence`]},{probes:[`executable-presence`],provider:`brew`,target:{id:`vtcode`,kind:`formula`}}]}}],r=t.string().min(1),i=t.array(r).min(1);t.enum([`windows`,`macos`,`linux`]);const ee=t.enum([`bun`,`npm`,`brew`,`cargo`,`deno`,`mise`,`pip`,`uv`,`winget`]),a=t.enum([`package`,`cask`,`id`]),o={binaryName:r.optional(),packageInstallArgs:t.array(r).min(1).optional(),packageName:r.optional(),packageTargetKind:a.optional()},te=t.object({...o,type:ee}).strict(),s=t.object({...o,command:r,type:t.literal(`script`)}).strict(),c=t.object({...o,command:r,type:t.literal(`binary`)}).strict(),l=t.discriminatedUnion(`type`,[te,s,c]),u=t.enum([`executable-presence`,`installed-version`,`package-presence`,`target-version`]),d=t.array(u).min(1).refine(e=>new Set(e).size===e.length,{message:`candidate probes must be unique`}).optional(),f=t.object({command:i,kind:t.literal(`executable`)}).strict(),p=t.object({command:r,kind:t.literal(`shell-script`)}).strict(),ne=t.discriminatedUnion(`kind`,[f,p]);function m(e,n={}){return t.object({arguments:t.array(r).min(1).optional(),binaryName:r.optional(),...n.effect?{effect:ne}:{},id:r,kind:t.literal(e)}).strict()}function h(e,n){return t.object({legacy:t.object({packageNameInMethod:t.literal(!0).optional()}).strict().optional(),probes:d,provider:t.literal(e),target:n}).strict()}const re=t.discriminatedUnion(`provider`,[h(`bun`,m(`package`)),h(`npm`,m(`package`)),h(`brew`,t.union([m(`formula`),m(`cask`)])),h(`cargo`,m(`package`)),h(`deno`,m(`tool`)),h(`mise`,m(`tool`)),h(`pip`,m(`package`)),h(`uv`,m(`tool`)),h(`winget`,m(`id`)),h(`script`,m(`script`,{effect:!0})),h(`binary`,m(`binary`,{effect:!0}))]),g=t.union([l,re]),_=t.object({linux:t.array(g).min(1).optional(),macos:t.array(g).min(1).optional(),windows:t.array(g).min(1).optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`platforms must include at least one supported platform`}),v=t.object({cargo:r.optional(),deno:r.optional(),mise:r.optional(),npm:r.optional(),pip:r.optional(),uv:r.optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`packages must include at least one package identifier`}),y=t.object({command:i,fallbackCommands:t.array(i).min(1).optional(),versionAfter:t.enum([`same-process`,`respawn`]).optional()}).strict(),b=t.object({command:i.optional()}).strict().refine(e=>e.command!==void 0,{message:`versionProbe must include a serializable command`}),x=t.object({linux:t.array(l).min(1).optional(),macos:t.array(l).min(1).optional(),windows:t.array(l).min(1).optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`platforms must include at least one supported platform`}),S=t.object({binaryName:r,displayName:r,homepage:t.url().startsWith(`https://`),lookupAliases:t.array(r).min(1).optional(),name:r.regex(/^[a-z0-9][a-z0-9-]*$/),packages:v.optional(),platforms:x,selfUpdate:y.optional(),versionProbe:b.optional()}).strict(),C=S.extend({platforms:_}).strict(),w=t.array(C).min(1),T=t.array(S).min(1),E={...e(T),$id:`https://github.com/Drswith/quantex-cli/schemas/agent-catalog.schema.json`,title:`Quantex Supported Agent Catalog`},D={},O=w.parse(n).map(M),k=new Map(O.map(e=>[e.name,e]));function A(){return O}function j(e){let t=k.get(e);if(!t)throw Error(`Unknown catalog agent: ${e}`);return t}function M(e){let t=D[e.name],n=R(e.versionProbe,t),r=P(e),i=Object.fromEntries(Object.entries(e.platforms).map(([e,t])=>[e,t?.map(N)]));return{...e,...r?{packages:r}:{},platforms:i,versionProbe:n}}function N(e){if(`type`in e)return e;let{provider:t,target:n}=e;if(t===`script`||t===`binary`){let e=n.effect;if(!I(e))throw Error(`${t} catalog candidate requires an execution effect`);let r=e.kind===`shell-script`?e.command:L(e.command);return{...n.binaryName?{binaryName:n.binaryName}:{},command:r,type:t}}let r=F(t);return{...n.arguments?{packageInstallArgs:[...n.arguments]}:{},...n.binaryName?{binaryName:n.binaryName}:{},...!r||e.legacy?.packageNameInMethod?{packageName:n.id}:{},...n.kind===`cask`||n.kind===`id`?{packageTargetKind:n.kind}:{},type:t}}function P(e){let t={...e.packages};for(let n of Object.values(e.platforms))for(let r of n??[]){if(`type`in r)continue;let n=F(r.provider);if(!n)continue;let i=t[n];if(i&&i!==r.target.id)throw Error(`${e.name} binds conflicting ${n} package targets: ${i} and ${r.target.id}`);t[n]=r.target.id}return Object.keys(t).length>0?t:void 0}function F(e){if(e===`bun`||e===`npm`)return`npm`;if(e===`cargo`||e===`deno`||e===`mise`||e===`pip`||e===`uv`)return e}function I(e){return!e||typeof e!=`object`||!(`kind`in e)||!(`command`in e)?!1:e.kind===`shell-script`?typeof e.command==`string`:e.kind===`executable`&&Array.isArray(e.command)&&e.command.every(e=>typeof e==`string`)}function L(e){return e.map(e=>e.includes(` `)?JSON.stringify(e):e).join(` `)}function R(e,t){if(!(!e&&!t?.versionProbeParser))return{...e,...t?.versionProbeParser?{parser:t.versionProbeParser}:{}}}j(`amp`),j(`antigravity`),j(`auggie`);const z=j(`autohand`),ie=j(`claude`),B=j(`codebuddy`),V=j(`codewhale`),H=j(`codex`);j(`commandcode`);const U=j(`copilot`);j(`crush`);const W=j(`cursor`),G=j(`deepcode`),K=j(`devin`),q=j(`droid`);j(`forgecode`);const J=j(`gemini`),Y=j(`genie`);j(`goose`);const ae=j(`grok`),oe=j(`hermes`),se=j(`jcode`),ce=j(`junie`),le=j(`kilo`);j(`kimi`),j(`kiro`);const ue=j(`mimo`),de=j(`omp`),fe=j(`openclaw`),pe=j(`opencode`),me=j(`openhands`),he=j(`pi`),ge=j(`qoder`);j(`qwen`);const X=j(`reasonix`),_e=j(`vibe`),ve=j(`vtcode`),Z=A();function ye(){return Z}function Q(e){let t=Z.find(t=>t.name===e||(t.lookupAliases?.includes(e)??!1));if(t)return t;let n=$(e);return Z.find(e=>$(e.displayName)===n)}function be(e){return Q(e)}function $(e){return e.trim().toLowerCase()}export{ve as A,fe as C,ge as D,he as E,T as F,A as M,S as N,X as O,E as P,de as S,me as T,oe as _,ie as a,le as b,H as c,G as d,K as f,ae as g,Y as h,z as i,j,_e as k,U as l,J as m,be as n,B as o,q as p,ye as r,V as s,Q as t,W as u,se as v,pe as w,ue as x,ce as y};
@@ -0,0 +1 @@
1
+ import{$ as e,At as t,Kt as n,Mt as r,Q as i,S as a,jt as o,kt as s,lt as c,ot as l,tt as u}from"./color-BrKNxICe.mjs";import{n as d,r as f}from"./agents-Dc-rbRUf.mjs";import{c as p,l as m}from"./provider-evidence-CDQ6s2Da.mjs";async function h(t){let[o,c,u]=await Promise.all([m(t),a(t.name),n(t.binaryName)]),[d,f,p]=await Promise.all([u?_(t,c):Promise.resolve(void 0),u?s(t.binaryName):Promise.resolve(void 0),v(t,c,o)]);return{agent:t,methods:o,installedState:c,inPath:u,installedVersion:d,latestVersion:p,binaryPath:f,resolvedBinaryPath:await r(f),sourceLabel:i(c),updateLabel:e(t,c),lifecycle:c?l(c.installType):`unmanaged`}}async function g(e){return Promise.all(e.map(h))}async function _(e,n){if(n&&c(n.installType)&&n.packageName){let e=await p(n.installType,n.packageName,n.packageTargetKind);if(e)return e}return t(e.binaryName,e.versionProbe)}async function v(e,t,n){let r=u(e,t,n);if(r)return o(r)}function y(e){return d(e)}async function b(e){let t=y(e);if(t)return{agent:t,inspection:await h(t)}}async function x(){return g(f())}export{g as a,h as i,y as n,b as r,x as t};
@@ -0,0 +1,5 @@
1
+ import{Gt as e,Qt as t,V as n,a as r,c as i,r as a,t as o}from"./color-BrKNxICe.mjs";import{r as s}from"./agents-Dc-rbRUf.mjs";import{n as c,t as l}from"./provider-observations-C8RmlqtY.mjs";import u from"node:process";function d(e=n()){let t=new Map(e.map(e=>[e.name,new Set(e.effects)])),r=new Map(e.map(e=>[e.name,new Set(e.flags)]));return{effects:new Set(e.flatMap(e=>e.effects)),effectsByCommand:t,flags:new Set(e.flatMap(e=>e.flags)),flagsByCommand:r}}function f(e,t){let n=e.effectsByCommand.get(`upgrade`),r=e.flagsByCommand.get(`upgrade`),i=e.flagsByCommand.get(`exec`);return{assumeYes:e.flags.has(`--yes`),cacheBypass:e.flags.has(`--no-cache`),cacheRefresh:e.flags.has(`--refresh`),channels:r?.has(`--channel`)?[`stable`,`beta`]:[],colorModes:e.flags.has(`--color`)?[`auto`,`always`,`never`]:[],dryRun:e.flags.has(`--dry-run`),execInstallPolicies:i?.has(`--install`)?[`never`,`if-missing`,`always`]:[],freshnessMetadata:e.effects.has(`network`)&&e.flags.has(`--refresh`)&&e.flags.has(`--no-cache`),idempotencyKey:e.flags.has(`--idempotency-key`),logLevels:e.flags.has(`--log-level`)?[`silent`,`error`,`warn`,`info`,`debug`]:[],quietLogs:e.flags.has(`--quiet`),selfUpgrade:t.canAutoUpdateSelf&&!!(n?.has(`mutation`)&&n.has(`network`)),timeout:e.flags.has(`--timeout`)}}async function p(){let n=t(),o,p;try{[o,p]=await n.run(()=>Promise.all([l({context:n.context}),i({context:n.context})]))}finally{n.dispose()}let g=c(o,e=>{let t=e.availability.kind===`success`;return{available:t,reason:t?void 0:m(e.id)}}),_=f(d(),{canAutoUpdateSelf:p.canAutoUpdate});return r(a({action:`capabilities`,data:{agents:s().map(e=>e.name),features:_,installers:g,outputModes:[`human`,`json`,`ndjson`],platform:{arch:u.arch,os:e()}},target:{kind:`system`,name:`capabilities`}}),h)}function m(e){return e===`winget`&&u.platform!==`win32`||e===`brew`&&u.platform===`win32`?`not-on-platform`:`not-found`}function h(e){e.data&&(console.log(o.bold(`
2
+ Quantex Capabilities
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(o.bold(`
4
+ Installers:`)),console.log(` bun: ${g(e.data.installers.bun)}`),console.log(` npm: ${g(e.data.installers.npm)}`),console.log(` brew: ${g(e.data.installers.brew)}`),console.log(` cargo: ${g(e.data.installers.cargo)}`),console.log(` deno: ${g(e.data.installers.deno)}`),console.log(` mise: ${g(e.data.installers.mise)}`),console.log(` pip: ${g(e.data.installers.pip)}`),console.log(` uv: ${g(e.data.installers.uv)}`),console.log(` winget: ${g(e.data.installers.winget)}`),console.log(o.bold(`
5
+ Features:`)),console.log(` --yes: ${e.data.features.assumeYes?`yes`:`no`}`),console.log(` cache-refresh: ${e.data.features.cacheRefresh?`yes`:`no`}`),console.log(` color-modes: ${e.data.features.colorModes.join(`, `)}`),console.log(` no-cache: ${e.data.features.cacheBypass?`yes`:`no`}`),console.log(` dry-run: ${e.data.features.dryRun?`yes`:`no`}`),console.log(` freshness-metadata: ${e.data.features.freshnessMetadata?`yes`:`no`}`),console.log(` self-upgrade: ${e.data.features.selfUpgrade?`yes`:`no`}`),console.log(` idempotency-key: ${e.data.features.idempotencyKey?`yes`:`no`}`),console.log(` log-levels: ${e.data.features.logLevels.join(`, `)}`),console.log(` quiet-logs: ${e.data.features.quietLogs?`yes`:`no`}`),console.log(` timeout: ${e.data.features.timeout?`yes`:`no`}`),console.log(` channels: ${e.data.features.channels.join(`, `)}`),console.log(` exec-install-policy: ${e.data.features.execInstallPolicies.join(`, `)}`),console.log())}function g(e){return e.available?o.green(`available`):o.red(e.reason??`not-found`)}export{p as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./capabilities-DJkfliFM.mjs";export{e as capabilitiesCommand};
package/dist/cli.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{r as e,s as t,v as n,y as r}from"./agents-P3f9iWEs.mjs";import{p as i}from"./detect-D84qpua_.mjs";import{G as a,H as o,I as s,J as c,K as l,T as u,X as d,a as f,at as p,ct as m,i as h,it as g,k as _,n as v,ot as y,r as ee,s as te,st as b,t as x}from"./color-CtIn3BLf.mjs";import{a as S,i as C,n as w,o as T,r as E,t as ne}from"./user-output-DV2J3Ydm.mjs";import{n as re,t as D}from"./errors-DCtNasuC.mjs";import O from"node:process";import{mkdir as k,readFile as A,rm as ie,writeFile as ae}from"node:fs/promises";import{join as j}from"node:path";import{program as M}from"commander";import oe from"prompts";function N(){return j(d(),`idempotency`)}function P(e){return j(N(),`${L(e)}.json`)}async function F(e){try{let t=JSON.parse(await A(P(e),`utf8`));if(Date.parse(t.expiresAt)<=Date.now()){await ie(P(e),{force:!0});return}return t}catch{return}}async function I(e,t){await k(N(),{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 ae(P(e),`${JSON.stringify(i,null,2)}\n`,`utf8`)}function L(e){return e.replace(/[^\w.-]/g,`_`)}const R=new Set([`doctor`,`upgrade`]);async function z(e){if(!e.ok||R.has(e.action))return;let t=p();if(t.outputMode!==`human`||t.quiet)return;let n=await te();if(!n.latestVersion||!o(n.latestVersion,n.currentVersion))return;let r=await _(),i=Date.now();if(B(r.updateNoticeVersion,r.updateNoticeAt,n.latestVersion,i))return;let a=n.canAutoUpdate?"Run `quantex upgrade`.":"Run `quantex doctor` for source-specific update steps.";C(x.yellow(`Quantex CLI ${n.latestVersion} is available (current ${n.currentVersion}). ${a}`)),await s(n.latestVersion,new Date(i).toISOString())}function B(e,t,n,r){if(!e||!t||e!==n)return!1;let i=Date.parse(t);return Number.isNaN(i)?!1:r-i<864e5}async function V(e){let t=await W(e.action,e.target);if(t)return t;let n=p().timeoutMs;if(n===void 0)return K(e,()=>e.run().then(t=>H(e.action,e.target,t)));let r;try{let t=new Promise(t=>{r=setTimeout(()=>{le(e,n).then(t)},n)});return await K(e,async()=>{let n=await Promise.race([se(e.run,()=>t),t]);return r!==void 0&&(clearTimeout(r),r=void 0),H(e.action,e.target,n)})}finally{r&&clearTimeout(r)}}async function H(e,t,n){let r=await G(e,t,n);try{await z({action:e,ok:r.ok})}catch{}return r}function U(e){e.error&&console.error(x.red(e.error.message))}async function W(e,t){let n=p();if(!n.idempotencyKey)return;let r=await F(n.idempotencyKey);if(!r)return;if(r.action!==e)return f(v({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}),U,{force:!0});let i={...r.result,meta:{...r.result.meta,mode:n.outputMode,runId:n.runId,timestamp:new Date().toISOString()}};return f(i,U,{force:!0}),i}async function G(e,t,n){let r=p();return r.idempotencyKey&&await I(r.idempotencyKey,{action:e,result:n,target:t}),n}async function K(e,t){let n,r;try{let i=new Promise(t=>{let i=r=>{n??=ue(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([ce(t,()=>n),i])}finally{r?.()}}async function se(e,t){try{let n=await e();return p().cancelled?t():n}catch(e){if(p().cancelled)return t();throw e}}async function ce(e,t){try{let n=await e(),r=t();return p().cancelled&&r?r:n}catch(e){let n=t();if(p().cancelled&&n)return n;throw e}}async function le(e,t){return await g(),h({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),f(v({action:e.action,error:{code:`TIMEOUT`,details:{timeoutMs:t},message:`Command timed out after ${t}ms.`},target:e.target}),U,{force:!0})}async function ue(e,t){return await g(),h({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),f(v({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),U,{force:!0})}async function q(t,n,r={}){let i=await e(t);if(!i)return Y({agent:{name:t},errorCode:`AGENT_NOT_FOUND`,errorMessage:`Unknown agent: ${t}`,execution:{args:n,installPolicy:r.install??`prompt`,installed:!1,interactive:!1,launched:!1}}),D(`AGENT_NOT_FOUND`);let{agent:o,inspection:s}=i,c=r.nonInteractive?!1:p().interactive,l=r.assumeYes??ne(),u=r.dryRun??w(),d=r.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`){if(u?T(x.cyan(`Dry run: would install ${o.displayName}.`)):C(x.cyan(`Installing ${o.displayName}...`)),!(await X(o,u)).success)return E(x.red(`Failed to install ${o.displayName}.`)),1}else if(c){if(!(l||u?{install:!0}:await oe({type:`confirm`,name:`install`,message:`${o.displayName} is not installed. Would you like to install it?`,initial:!0})).install)return S(x.yellow(`Installation cancelled.`)),1;if(u?T(x.cyan(`Dry run: would install ${o.displayName}.`)):C(x.cyan(`Installing ${o.displayName}...`)),!(await X(o,u)).success)return E(x.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 de({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 Z(a([o.binaryName,...n]),o.displayName)}catch(e){return E(x.red(`Failed to launch ${o.displayName}: ${e instanceof Error?e.message:String(e)}`)),1}}function J(e,t,i){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:n(e,t),label:r(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`,`--`,...i].join(` `)}}function Y(e){if(p().outputMode===`human`){E(x.red(e.errorMessage));let t=e.execution.installGuidance;t&&(T(x.dim(`Try: ${t.suggestedEnsureCommand}`)),T(x.dim(`Or: ${t.suggestedExecCommand}`)));return}f(v({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 de(e){if(p().outputMode===`human`){T(x.cyan(e.message));return}f(ee({action:`exec`,data:{agent:e.agent,execution:e.execution},target:{kind:`agent`,name:e.agent.name}}),()=>{})}async function X(e,n=w()){if(n)return{success:!0};try{return await t(e)}catch(t){return c(t)?(E(x.red(t.message)),{success:!1}):(E(x.red(`Failed to install ${e.displayName}: ${t instanceof Error?t.message:String(t)}`)),{success:!1})}}async function Z(e,t){let{timeoutMs:n}=p(),r,i,a;try{let o=new Promise(e=>{let n=n=>{r??=(async()=>(await g(),E(x.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=n===void 0?void 0:new Promise(e=>{a=setTimeout(()=>{r??=(async()=>(await g(),E(x.red(`${t} timed out after ${n}ms.`)),D(`TIMEOUT`)))(),r.then(e)},n)});return await Promise.race([fe(e,()=>r),o,...s?[s]:[]])}finally{a&&clearTimeout(a),i?.()}}async function fe(e,t){try{let n=await l(e),r=t();return p().cancelled&&r?r:n}catch(e){let n=t();if(p().cancelled&&n)return n;throw e}}M.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(u()),M.hook(`preAction`,(e,t)=>{try{m(b(t.optsWithGlobals()))}catch(e){console.log(x.red(e instanceof Error?e.message:String(e))),O.exit(2)}}),M.hook(`postAction`,()=>{y()}),M.command(`schema`).argument(`[command]`,`Optional command name`).description(`查看结构化输出 schema`).action(async e=>{let{schemaCommand:t}=await import(`./schema-4dHGgkBt.mjs`);O.exitCode=await $({action:`schema`,run:()=>t(e),target:{kind:`system`,name:`schema`}})}),M.command(`commands`).description(`查看命令目录与稳定能力`).action(async()=>{let{commandsCommand:e}=await import(`./commands-BZLGRJch.mjs`);O.exitCode=await $({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})}),M.command(`capabilities`).description(`查看当前环境与 surface 能力`).action(async()=>{let{capabilitiesCommand:e}=await import(`./capabilities-C8OrgAMi.mjs`);O.exitCode=await $({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})}),M.command(`inspect <agent>`).description(`查看 agent 结构化状态`).action(async e=>{let{inspectCommand:t}=await import(`./inspect-DDe70zbR.mjs`);O.exitCode=await $({action:`inspect`,run:()=>t(e),target:{kind:`agent`,name:e}})}),M.command(`resolve <agent>`).description(`解析 agent 可执行入口`).action(async e=>{let{resolveCommand:t}=await import(`./resolve-CX8YaOEv.mjs`);O.exitCode=await $({action:`resolve`,run:()=>t(e),target:{kind:`agent`,name:e}})}),M.command(`install <agents...>`).alias(`i`).description(`安装指定 agent`).action(async e=>{let{installCommand:t}=await import(`./install-DOxjCx5v.mjs`);O.exitCode=await $({action:`install`,run:()=>t(e),target:e.length===1?{kind:`agent`,name:e[0]}:{kind:`agent`}})}),M.command(`ensure <agent>`).description(`确保指定 agent 已安装`).action(async e=>{let{ensureCommand:t}=await import(`./ensure-B71EjlnR.mjs`);O.exitCode=await $({action:`ensure`,run:()=>t(e),target:{kind:`agent`,name:e}})}),M.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(x.red(`Unknown install policy: ${i}`)),O.exitCode=2;return}let a=me(r);O.exitCode=await q(e,a.length>0?a:t,{install:i,nonInteractive:r.optsWithGlobals().nonInteractive})}),M.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-C34xtbDQ.mjs`);O.exitCode=await $({action:`update`,run:()=>n(e,t.all??!1),target:{kind:`agent`,name:e}})}),M.command(`uninstall <agent>`).alias(`rm`).description(`卸载指定 agent`).action(async e=>{let{uninstallCommand:t}=await import(`./uninstall-CyGhnH4k.mjs`);O.exitCode=await $({action:`uninstall`,run:()=>t(e),target:{kind:`agent`,name:e}})}),M.command(`list`).alias(`ls`).description(`列出所有支持的 agent`).action(async()=>{let{listCommand:e}=await import(`./list-DjgfI7DP.mjs`);O.exitCode=await $({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})}),M.command(`info <agent>`).description(`查看 agent 详细信息`).action(async e=>{let{infoCommand:t}=await import(`./info-ZQDUs0bK.mjs`);O.exitCode=await $({action:`info`,run:()=>t(e),target:{kind:`agent`,name:e}})}),M.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-DAEqqWBI.mjs`);O.exitCode=await $({action:`config`,run:()=>r(e,t,n),target:{kind:`config`,name:t}})}),M.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-5uiTpWn2.mjs`);O.exitCode=await $({action:`upgrade`,run:()=>t({channel:e.channel===`beta`?`beta`:void 0,check:e.check??!1}),target:{kind:`self`,name:`quantex`}})}),M.command(`doctor`).description(`检查环境`).action(async()=>{let{doctorCommand:e}=await import(`./doctor-C7gfJcNX.mjs`);O.exitCode=await $({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})});const pe=new Set([...M.commands.map(e=>e.name()),...M.commands.flatMap(e=>e.aliases()),`help`,`--help`,`--version`,`-v`]),Q=he(O.argv.slice(2),pe);if(Q?.error&&(console.log(x.red(Q.error)),O.exit(2)),Q&&i(Q.agentName)){try{m(b({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(x.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{y()}}M.parse();function me(e){let t=e.processedArgs.at(-1);return Array.isArray(t)?t:e.args.slice(1)}function he(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 re(await V(e))}export{};
2
+ import{G as e,H as t,Nt as n,Pt as r,Qt as i,T as a,U as o,V as s,X as c,Z as l,a as u,dn as d,en as f,i as p,ln as m,m as ee,n as h,on as g,r as te,sn as _,t as v,un as y,v as ne,w as re,x as b,y as ie}from"./color-BrKNxICe.mjs";import{n as ae}from"./agents-Dc-rbRUf.mjs";import{t as oe}from"./agent-installation-BiaOimkM.mjs";import{t as se}from"./lifecycle-observations-DU3WbcUM.mjs";import{n as ce}from"./lifecycle-errors-BXlHX_YF.mjs";import{a as le,i as x,n as ue,o as S,r as C,t as de}from"./user-output-DBsy2Ysd.mjs";import{n as w,t as T}from"./errors-DXzIacfk.mjs";import{n as fe,t as pe}from"./version-cache-Cpx0V074.mjs";import{d as E,f as D,i as O,n as me,o as he,t as ge}from"./lifecycle-policy-BeWI8sFz.mjs";import k from"node:process";import{join as A}from"node:path";import{createHash as _e,randomUUID as ve}from"node:crypto";import{mkdir as ye,readFile as be,rename as xe,rm as j,writeFile as M}from"node:fs/promises";import{Command as Se}from"commander";import Ce from"prompts";function we(e){return e.executable.present?{decision:e.dryRun?`dry-run`:`launch`}:e.installPolicy===`never`?{decision:`reject`,errorCode:`AGENT_NOT_INSTALLED`}:e.installPolicy===`prompt`&&!e.interactive?{decision:`reject`,errorCode:`INTERACTION_REQUIRED`}:e.dryRun?{decision:`dry-run`}:{decision:e.installPolicy===`prompt`?`prompt-install`:`install-and-launch`}}async function Te(e,t){let n=await t.observe(e.agentName);if(n.kind===`failure`)return{error:n.error,kind:`observation-failed`};if(!n.value)return{kind:`not-found`};let r=n.value,i=we({dryRun:t.dryRun,executable:r.executable,installPolicy:e.installPolicy,interactive:t.interactive,observation:r.observation});if(i.decision===`reject`)return i.errorCode===`AGENT_NOT_INSTALLED`?{kind:`not-installed`,observed:r}:{kind:`interaction-required`,observed:r};let a=[r.agent.binaryName,...e.args];if(i.decision===`dry-run`)return{argv:a,kind:`dry-run`,observed:r,wouldInstall:!r.executable.present};if(i.decision===`prompt-install`&&!await t.confirmInstall(r))return{kind:`install-declined`,observed:r};if(i.decision===`install-and-launch`||i.decision===`prompt-install`){await t.onInstallStart?.(r);let n=Ee(await t.install(r),r);if(n)return n;let i=await t.observe(e.agentName);if(i.kind===`failure`)return{error:i.error,kind:`observation-failed`};if(!i.value)return{kind:`install-failed`,observed:r,reason:`agent-missing-after-install`};if(r=i.value,!r.executable.present)return{kind:`install-failed`,observed:r,reason:`executable-absent-after-install`}}return De(await t.process.run({argv:a,signal:t.signal,stdio:t.outputMode===`human`?[`inherit`,`inherit`,`inherit`]:[`ignore`,`pipe`,`pipe`],timeoutMs:t.timeoutMs}),r,t.timeoutMs)}function Ee(e,t){switch(e.kind){case`success`:return;case`cancelled`:return{kind:`cancelled`,observed:t,phase:`install`,reason:e.reason};case`timed-out`:return{kind:`timed-out`,observed:t,phase:`install`,timeoutMs:e.timeoutMs};case`failed`:case`indeterminate`:return{kind:`install-failed`,observed:t,reason:e.reason};case`unsupported`:return{kind:`install-failed`,observed:t,reason:e.reason??`Missing installation capability: ${e.capability}`}}}function De(e,t,n){return e.kind===`failure`?e.error.kind===`cancelled`?{kind:`cancelled`,observed:t,phase:`launch`,reason:e.error.message}:e.error.kind===`timed-out`?{kind:`timed-out`,observed:t,phase:`launch`,reason:e.error.message,timeoutMs:n??0}:{kind:`launch-failed`,observed:t,reason:e.error.message}:e.value.exitCode===null?{kind:`launch-failed`,observed:t,reason:e.value.terminationSignal?`Agent terminated by ${e.value.terminationSignal}.`:`Agent process exited without an exit code.`}:{exitCode:e.value.exitCode,kind:`exited`,observed:t,stderr:e.value.stderr,stdout:e.value.stdout}}const Oe={cancelOperations:g,createObservationService:se,createOperationContext:i,createProcessPort:fe,reconcileAgentInstallation:oe};function ke(e,t=Oe){let n=t.createOperationContext(),r=t.createObservationService(n.context,{resolveLatestVersion:!1}),i=t.createProcessPort();return{dispose:n.dispose,execute:a=>Te(a,{confirmInstall:e.confirmInstall,dryRun:e.dryRun,install:n=>je(n,e.timeoutMs,t),interactive:e.interactive,observe:e=>Ae(e,r),onInstallStart:e.onInstallStart,outputMode:e.outputMode,process:i,signal:n.context.signal,timeoutMs:e.timeoutMs})}}async function Ae(e,t){try{let n=await t.resolveAgentObservation(e);return{kind:`success`,value:n?{agent:n.agent,executable:n.pathExecutable,installedState:n.installedState,methods:n.methods,observation:n.observation}:void 0}}catch(e){return{error:Ne(e),kind:`failure`}}}async function je(e,t,n){try{if(e.executable.present)return{kind:`success`,value:void 0};let r=await Me(n.reconcileAgentInstallation({agent:e.agent,observation:{inPath:e.executable.present,installedState:e.installedState,lifecycle:e.observation,methods:e.methods},operation:`install`,route:`install`}),t,n.cancelOperations);return r?r.kind===`success`?{kind:`success`,value:void 0}:r:{kind:`timed-out`,timeoutMs:t}}catch(e){return f(e)?e.kind===`timed-out`?{kind:`timed-out`,timeoutMs:t??0}:{kind:`cancelled`,reason:e.message}:{kind:`failed`,reason:N(e,`Failed to install agent.`),retryable:!1}}}async function Me(e,t,n){if(t===void 0)return e;let r;try{let i=await Promise.race([e.then(e=>({kind:`completed`,value:e})),new Promise(e=>{r=setTimeout(()=>e({kind:`timed-out`}),t)})]);if(i.kind===`completed`)return i.value;let a=await Pe(e,Math.max(1,Math.min(t,250)));if(a!==void 0)return a;await n();return}finally{r&&clearTimeout(r)}}function Ne(e){return e instanceof b?{code:`STATE_READ_ERROR`,details:{stateFilePath:a()},kind:`invalid-data`,message:e.message}:f(e)?{kind:e.kind,message:e.message}:{kind:`failed`,message:N(e,`Failed to observe agent execution state.`)}}function N(e,t){return e instanceof Error&&e.message.trim()?e.message:t}async function Pe(e,t){let n;try{return await Promise.race([e,new Promise(e=>{n=setTimeout(()=>e(void 0),t)})])}finally{n&&clearTimeout(n)}}function P(){return A(r(),`idempotency`)}function F(e){return A(P(),`${Ie(e)}.json`)}async function I(e,t={}){let n=F(e),r;try{r=await be(n,`utf8`)}catch(e){if(Re(e)&&e.code===`ENOENT`)return{kind:`missing`};throw e}let i;try{i=JSON.parse(r)}catch{return{kind:`invalid`,reason:`invalid-json`}}let a=E(i);return a.kind===`invalid`?a:Date.parse(a.record.expiresAt)<=L(t).getTime()?(await j(n),{kind:`expired`,record:a.record}):a}async function Fe(e,t,n={}){let r=L(n),i=n.ttlMs??864e5,a=E({...t,createdAt:r.toISOString(),expiresAt:new Date(r.getTime()+i).toISOString(),schemaVersion:1});if(a.kind===`invalid`)throw TypeError(`Invalid versioned idempotency record: ${a.reason}`);let o=P(),s=F(e),c=`${s}.${process.pid}.${ve()}.tmp`,l=n.fileSystem?.writeFile??M;await ye(o,{recursive:!0});try{await l(c,Le(a.record),`utf8`),await xe(c,s)}catch(e){throw await j(c,{force:!0}),e}}function Ie(e){return _e(`sha256`).update(e,`utf8`).digest(`hex`)}function L(e){let t=e.now?.()??new Date;if(!Number.isFinite(t.getTime()))throw TypeError(`Idempotency clock must return a valid date.`);return t}function Le(e){return`${JSON.stringify(e,(e,t)=>typeof t!=`object`||!t||Array.isArray(t)?t:Object.fromEntries(Object.keys(t).sort().map(e=>[e,t[e]])),2)}\n`}function Re(e){return e instanceof Error&&`code`in e}async function ze(e){let t=D(e.request),n=D(e.resolvedPlan);switch(e.loaded.kind){case`missing`:return{fingerprints:z(t,n),kind:`reconcile`,reason:`missing`};case`expired`:return{fingerprints:R(e.loaded.record,t,n),kind:`reconcile`,reason:`expired`};case`invalid`:return{fingerprints:z(t,n),invalidReason:e.loaded.reason,kind:`reject`,reason:`invalid-evidence`};case`valid`:return Be(e,e.loaded.record,t,n)}}async function Be(e,t,n,r){let i=R(t,n,r);if(t.request.fingerprint!==n)return{fingerprints:i,kind:`reject`,reason:`request-mismatch`};if(t.resolvedPlan.fingerprint!==r)return{fingerprints:i,kind:`reconcile`,reason:`resolved-plan-changed`};switch((await e.validateLive({postcondition:t.postcondition.payload,receipt:t.receipt.payload})).kind){case`satisfied`:return{fingerprints:i,kind:`replay`,result:structuredClone(t.result)};case`drifted`:return{fingerprints:i,kind:`reconcile`,reason:`live-drifted`};case`inconclusive`:return{fingerprints:i,kind:`reconcile`,reason:`live-inconclusive`}}}function R(e,t,n){return{existingPlan:e.resolvedPlan.fingerprint,existingRequest:e.request.fingerprint,requestedPlan:n,requestedRequest:t}}function z(e,t){return{existingPlan:void 0,existingRequest:void 0,requestedPlan:t,requestedRequest:e}}const Ve=new Set([`doctor`,`upgrade`]);async function B(e,t={cache:pe(),getSelfState:re,now:Date.now,resolveFacts:ie}){if(!e.ok||Ve.has(e.action))return;let r=_();if(r.outputMode!==`human`||r.quiet)return;let i=await t.resolveFacts(),a=t.now(),o=await ee({cache:t.cache,facts:i,nowMs:a,signal:new AbortController().signal});if(!o||!n(o.targetVersion,i.currentVersion))return;let s=await t.getSelfState();He(s.updateNoticeVersion,s.updateNoticeAt,o.targetVersion,a)||x(v.yellow(`Quantex CLI ${o.targetVersion} is available (current ${i.currentVersion}). Run \`quantex upgrade\`.`))}function He(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 Ue(e){return e.warnings.some(e=>e.code===`DRY_RUN`)}async function We(e){try{return await Ge(e)}catch(t){if(t instanceof b)return Xe(e,t);throw t}}async function Ge(e){return rt(e,()=>Ke(e))}async function Ke(e){let t=_().timeoutMs,n={expired:!1},r=!1,i,a=async()=>{let a=await Je(e,()=>n.expired);return n.expired&&t!==void 0?G(e,t):a.replayedResult?(r=!0,a.replayedResult):(i={action:e.action,...a.policy?{idempotencyPolicy:a.policy}:{},run:e.run,...e.target?{target:e.target}:{}},_().cancelled?Ye(e):e.run())},o=t===void 0?await a():await qe(e,a,t,n);return r||!i?o:Qe(i,o)}async function qe(e,t,n,r){let i;try{let a=new Promise(t=>{i=setTimeout(()=>{r.expired=!0,t(G(e,n))},n)}),o=at(t,()=>a),s=await Promise.race([o,a]);if(!s.ok&&s.error?.code===`TIMEOUT`){let t=await it(o,n);s=t&&t.error?.code!==`TIMEOUT`?t:await st(e,n)}return i!==void 0&&(clearTimeout(i),i=void 0),s}finally{i&&clearTimeout(i)}}async function Je(e,t=()=>!1){let n=_();if(!n.idempotencyKey||n.dryRun||!W(e.action)||!e.idempotencyPolicy)return{};let r=await I(n.idempotencyKey);if(n.cancelled||t())return{};if(r.kind===`invalid`)return{replayedResult:u(H(e,n.idempotencyKey,r.reason),V,{force:!0})};let i=typeof e.idempotencyPolicy==`function`?await e.idempotencyPolicy():e.idempotencyPolicy;if(n.cancelled||t())return{};let a=await ze({loaded:r,request:i.request,resolvedPlan:i.resolvedPlan,validateLive:i.validateLive});if(n.cancelled||t())return{};if(a.kind===`reconcile`)return{policy:i};if(a.kind===`reject`)return{replayedResult:tt(e,n.idempotencyKey,a,r)};let o=nt(a.result);return u(o,V,{force:!0}),{replayedResult:o}}function Ye(e){return h({action:e.action,error:{code:`CANCELLED`,message:`Command was cancelled before execution could start.`},target:e.target})}async function Xe(e,t){return u(h({action:e.action,...ce(t,a(),e.target)}),Ze)}function Ze(e){e.error&&console.error(v.red(e.error.message))}async function Qe(e,t){if(_().cancelled)return t;let n=await $e(e,t);try{await B({action:e.action,ok:n.ok})}catch{}return n}function V(e){e.error&&console.error(v.red(e.error.message))}async function $e(e,t){let n=_();if(!n.idempotencyKey||!W(e.action)||!t.ok||n.dryRun||Ue(t)||!e.idempotencyPolicy)return t;let r=await e.idempotencyPolicy.captureEvidence(t);if(!r)return t;let i=await I(n.idempotencyKey);return et(e,n.idempotencyKey,i)||(await Fe(n.idempotencyKey,{postcondition:U(r.postcondition),receipt:U(r.receipt),request:U(e.idempotencyPolicy.request),resolvedPlan:U(e.idempotencyPolicy.resolvedPlan),result:t}),t)}function et(e,t,n){if(!e.idempotencyPolicy)return;let r=D(e.idempotencyPolicy.request);if(n.kind===`invalid`)return u(H(e,t,n.reason),V,{force:!0});if(!(n.kind!==`valid`||n.record.request.fingerprint===r))return u(h({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{conflict:`concurrent-request-mismatch`,existingAction:n.record.request.payload.action,idempotencyKey:t},message:`Idempotency key ${t} changed while the command was running; replay evidence was not overwritten.`},target:e.target}),V,{force:!0})}function tt(e,t,n,r){return n.reason===`invalid-evidence`?u(H(e,t,n.invalidReason),V,{force:!0}):u(h({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{existingAction:r.kind===`valid`?r.record.request.payload.action:void 0,idempotencyKey:t,reason:`request-mismatch`},message:`Idempotency key ${t} was already used for a different canonical request.`},target:e.target}),V,{force:!0})}function H(e,t,n){return h({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{idempotencyKey:t,invalidReason:n,reason:`invalid-evidence`},message:`Idempotency key ${t} contains invalid replay evidence (${n}).`},target:e.target})}function nt(e){let t=_();return{...e,meta:{...e.meta,mode:t.outputMode,runId:t.runId,timestamp:new Date().toISOString()}}}function U(e){return{fingerprint:D(e),payload:e}}function W(e){return e===`ensure`||e===`install`||e===`uninstall`||e===`update`}async function rt(e,t){let n,r;try{let i=new Promise(t=>{let i=r=>{n??=ct(e,r),n.then(t)},a=()=>i(`SIGINT`),o=()=>i(`SIGTERM`);k.once(`SIGINT`,a),k.once(`SIGTERM`,o),r=()=>{k.off(`SIGINT`,a),k.off(`SIGTERM`,o)}});return await Promise.race([ot(t,()=>n),i])}finally{r?.()}}async function it(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function at(e,t){try{return await e()}catch(e){if(f(e)&&e.kind===`timed-out`||_().cancelled)return t();throw e}}async function ot(e,t){try{let n=await e(),r=t();return _().cancelled&&r?r:n}catch(e){let n=t();if(_().cancelled&&n)return n;throw e}}function G(e,t){return h({action:e.action,error:{code:`TIMEOUT`,details:{timeoutMs:t},message:`Command timed out after ${t}ms.`},target:e.target})}async function st(e,t){return await g(),p({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),u(G(e,t),V,{force:!0})}async function ct(e,t){return await g(),p({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),u(h({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),V,{force:!0})}const lt={cancelOperations:g,createExecutionService:ke};async function K(e,t,n={},r=lt){let i=_(),a=n.nonInteractive?!1:i.interactive,o=n.assumeYes??de(),s=n.dryRun??ue(),c=n.install??`prompt`,l,u=r.createExecutionService({confirmInstall:async e=>o?!0:!!(await Ce({initial:!0,message:`${e.agent.displayName} is not installed. Would you like to install it?`,name:`install`,type:`confirm`})).install,dryRun:s,interactive:a,onInstallStart:e=>{x(v.cyan(`Installing ${e.agent.displayName}...`))},outputMode:i.outputMode,timeoutMs:i.timeoutMs}),d=e=>{l??=e,r.cancelOperations()},f=()=>d(`SIGINT`),p=()=>d(`SIGTERM`);k.once(`SIGINT`,f),k.once(`SIGTERM`,p);try{return ut(await u.execute({agentName:e,args:t,installPolicy:c}),{agentName:e,args:t,cancellationSignal:l,installPolicy:c,interactive:a})}finally{k.off(`SIGINT`,f),k.off(`SIGTERM`,p),u.dispose()}}function ut(e,t){if(e.kind===`not-found`)return J({agent:{name:t.agentName},errorCode:`AGENT_NOT_FOUND`,errorMessage:`Unknown agent: ${t.agentName}`,execution:q(t,!1)}),w(`AGENT_NOT_FOUND`);if(e.kind===`observation-failed`)return dt(t.agentName,e.error);let{observed:n}=e,r=n.agent;if(e.kind===`not-installed`||e.kind===`interaction-required`){let i=e.kind===`interaction-required`;return J({agent:r,errorCode:i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`,errorMessage:i?`${r.displayName} is not installed and interactive installation is disabled.`:`${r.displayName} is not installed.`,execution:{...q(t,!1),installGuidance:pt(r,n.methods,t.args)}}),w(i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`)}switch(e.kind){case`install-declined`:return le(v.yellow(`Installation cancelled.`)),1;case`install-failed`:return C(v.red(`Failed to install ${r.displayName}.`)),w(`INSTALL_FAILED`);case`dry-run`:return e.wouldInstall&&S(v.cyan(`Dry run: would install ${r.displayName}.`)),mt({agent:r,execution:q(t,!0),message:`Dry run: would run ${e.argv.join(` `)}`}),0;case`launch-failed`:return C(v.red(`Failed to launch ${r.displayName}: ${e.reason}`)),1;case`cancelled`:return C(v.red(t.cancellationSignal?`${r.displayName} was cancelled by ${t.cancellationSignal}.`:`${r.displayName} was cancelled.`)),w(`CANCELLED`);case`timed-out`:return C(v.red(e.phase===`install`?`Installing ${r.displayName} timed out after ${e.timeoutMs}ms.`:`${r.displayName} timed out after ${e.timeoutMs}ms.`)),w(`TIMEOUT`);case`exited`:return e.exitCode}}function q(e,t){return{args:e.args,installPolicy:e.installPolicy,installed:t,interactive:e.interactive,launched:!1}}function dt(e,t){let n=ft(t.code)?t.code:`INSTALL_FAILED`;return _().outputMode===`human`?C(v.red(t.message)):u(h({action:`exec`,error:{code:n,details:t.details,message:t.message},target:{kind:`agent`,name:e}}),()=>{}),w(n)}function ft(e){return e!==void 0&&T.includes(e)}function pt(e,t,n){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:c(e,t),label:l(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 J(e){if(_().outputMode===`human`){C(v.red(e.errorMessage));let t=e.execution.installGuidance;t&&(S(v.dim(`Try: ${t.suggestedEnsureCommand}`)),S(v.dim(`Or: ${t.suggestedExecCommand}`)));return}u(h({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 mt(e){if(_().outputMode===`human`){S(v.cyan(e.message));return}u(te({action:`exec`,data:{agent:e.agent,execution:e.execution},target:{kind:`agent`,name:e.agent.name}}),()=>{})}const ht={capabilities:async()=>{let{capabilitiesCommand:e}=await import(`./capabilities-IF9tdHJa.mjs`);await Y({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})},commands:async()=>{let{commandsCommand:e}=await import(`./commands-D4irgBj4.mjs`);await Y({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})},config:async(...e)=>{let{configCommand:t}=await import(`./config-Dwsy-aHA.mjs`),[n,r,i]=e;await Y({action:`config`,run:()=>t(n,r,i),target:{kind:`config`,name:r}})},doctor:async()=>{let{doctorCommand:e}=await import(`./doctor-98u2ifwx.mjs`);await Y({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})},ensure:async(...e)=>{let t=e[0],{ensureCommand:n}=await import(`./ensure-BH_HgqIO.mjs`);await Y({action:`ensure`,idempotencyPolicy:()=>O(`ensure`,t),run:()=>n(t),target:{kind:`agent`,name:t}})},exec:async(...e)=>{let[t,n,r,i]=e,a=r.install??`never`;if(a!==`never`&&a!==`if-missing`&&a!==`always`){k.stdout.write(`${v.red(`Unknown install policy: ${a}`)}\n`),k.exitCode=2;return}let o=_t(i);k.exitCode=await K(t,o.length>0?o:n,{install:a,nonInteractive:i.optsWithGlobals().nonInteractive})},info:async(...e)=>{let t=e[0],{infoCommand:n}=await import(`./info-cy1FacGf.mjs`);await Y({action:`info`,run:()=>n(t),target:{kind:`agent`,name:t}})},inspect:async(...e)=>{let t=e[0],{inspectCommand:n}=await import(`./inspect-DkknAqJ_.mjs`);await Y({action:`inspect`,run:()=>n(t),target:{kind:`agent`,name:t}})},install:async(...e)=>{let{installCommand:t}=await import(`./install-BEZDMLmP.mjs`),n=he(e[0]),r=n.length===1;await Y({action:`install`,...r?{idempotencyPolicy:()=>O(`install`,n[0])}:{idempotencyPolicy:()=>me(n)},run:()=>t(n),target:r?{kind:`agent`,name:n[0]}:{kind:`agent`,name:n.join(`,`)}})},list:async()=>{let{listCommand:e}=await import(`./list-BpLto0Qx.mjs`);await Y({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})},resolve:async(...e)=>{let t=e[0],{resolveCommand:n}=await import(`./resolve-CeeaqmwA.mjs`);await Y({action:`resolve`,run:()=>n(t),target:{kind:`agent`,name:t}})},schema:async(...e)=>{let t=e[0],{schemaCommand:n}=await import(`./schema-Da826hmM.mjs`);await Y({action:`schema`,run:()=>n(t),target:{kind:`system`,name:`schema`}})},uninstall:async(...e)=>{let t=e[0],{uninstallCommand:n}=await import(`./uninstall-EBZrNkI3.mjs`);await Y({action:`uninstall`,idempotencyPolicy:()=>ge(t),run:()=>n(t),target:{kind:`agent`,name:t}})},update:async(...e)=>{let[t,n]=e,{createUpdateCommandInvocation:r}=await import(`./update-CJUu1Frs.mjs`),i=r(t,n.all??!1);try{await Y({action:`update`,...i.idempotencyPolicy?{idempotencyPolicy:i.idempotencyPolicy}:{},run:i.run,target:{kind:`agent`,name:t}})}finally{i.dispose()}},upgrade:async(...e)=>{let t=e[0],{resolveUpgradeChannelOption:n,upgradeCommand:r}=await import(`./upgrade-D4zvZO8U.mjs`);await Y({action:`upgrade`,run:()=>r({channel:n(t.channel),check:t.check??!1}),target:{kind:`self`,name:`quantex`}})}};function gt(e){return ht[e]}function _t(e){let t=e.processedArgs.at(-1);return Array.isArray(t)?t:e.args.slice(1)}async function Y(e){let{getExitCodeForResult:t}=await import(`./errors-BzuGM14H.mjs`);k.exitCode=t(await We(e))}function vt(){let n=s();e(n,n.map(e=>e.schema.name));let r=new Se;r.name(`quantex`).description(`统一的 AI Agent CLI 管理工具`);for(let e of t())r.option(e.flags,e.description,e.defaultValue);r.version(ne()),r.hook(`preAction`,(e,t)=>{try{d(y(o(t.optsWithGlobals())))}catch(e){k.stdout.write(`${v.red(e instanceof Error?e.message:String(e))}\n`),k.exit(2)}}),r.hook(`postAction`,()=>{m()});for(let e of n){let t=r.command(e.name).description(e.description);for(let n of e.aliases)t.alias(n);for(let n of e.arguments)t.argument(n.syntax,n.description);e.allowUnknownOptions&&t.allowUnknownOption();for(let n of e.options)t.option(n.flags,n.description,n.defaultValue);t.action(gt(e.handlerId))}return r}const yt=new Map(t().map(e=>[xt(e.flags),e]));function bt(e,t,n){let r={},i=0;for(;i<e.length;){let a=e[i],o=yt.get(a);if(o){if(o.value===`string`){let t=e[i+1];if(!t)return St(a);r[o.id]=t,i+=2}else r[o.id]=!0,i+=1;continue}if(a.startsWith(`-`)||t.has(a))return;let s=Z(r.output);return r.json===!0||s===`json`||s===`ndjson`||n.agentFriendly&&s!==`human`?{agentArgs:[],agentName:``,error:`Structured output is not supported for shortcut agent execution yet. Use a management command instead.`}:{agentArgs:e.slice(i+1),agentName:a,color:Z(r.color),dryRun:X(r.dryRun),idempotencyKey:Z(r.idempotencyKey),logLevel:Z(r.logLevel),noCache:X(r.noCache),nonInteractive:X(r.nonInteractive),quiet:X(r.quiet),refresh:X(r.refresh),runId:Z(r.runId),timeout:Z(r.timeout),yes:X(r.yes)}}}function xt(e){let t=e.match(/--[a-z][a-z-]*/);if(!t)throw Error(`Global option requires a long flag: ${e}`);return t[0]}function X(e){return e===!0}function Z(e){return typeof e==`string`?e:void 0}function St(e){return{agentArgs:[],agentName:``,error:`${e} requires a value`}}const Q=vt(),Ct=new Set([...Q.commands.map(e=>e.name()),...Q.commands.flatMap(e=>e.aliases()),`help`,`--help`,`--version`,`-v`]),$=bt(k.argv.slice(2),Ct,{agentFriendly:k.stdin.isTTY===!1||k.stdout.isTTY===!1});if($?.error&&(console.log(v.red($.error)),k.exit(2)),$&&ae($.agentName)){try{d(y({color:$.color,dryRun:$.dryRun,idempotencyKey:$.idempotencyKey,logLevel:$.logLevel,noCache:$.noCache,nonInteractive:$.nonInteractive,quiet:$.quiet,refresh:$.refresh,runId:$.runId,timeout:$.timeout,yes:$.yes}))}catch(e){console.log(v.red(e instanceof Error?e.message:String(e))),k.exit(2)}try{let e=await K($.agentName,$.agentArgs,{assumeYes:$.yes,dryRun:$.dryRun,nonInteractive:$.nonInteractive});k.exit(e)}finally{m()}}await Q.parseAsync();export{};