quantex-cli 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -7
- package/README.zh-CN.md +3 -7
- package/dist/{agent-installation-BIf8WGed.mjs → agent-installation-B7R0Yzjs.mjs} +1 -1
- package/dist/{agents-Dqss403b.mjs → agents-BeMXYu8x.mjs} +1 -1
- package/dist/agents-DVl7Dw3L.mjs +1 -0
- package/dist/{capabilities-CKeFXlZQ.mjs → capabilities-Cbc4xb9t.mjs} +1 -1
- package/dist/capabilities-Yz6JB15d.mjs +1 -0
- package/dist/cli.mjs +1 -1
- package/dist/commands-CDIRbDiS.mjs +1 -0
- package/dist/{commands-B5Z2z29h.mjs → commands-zNRTIWKy.mjs} +1 -1
- package/dist/{config-IDvuzbXN.mjs → config-CzjW_JSi.mjs} +1 -1
- package/dist/{core-installation-cli-D0T3R90X.mjs → core-installation-cli-K4TazEmO.mjs} +1 -1
- package/dist/{core-read-observations-CwugnFtn.mjs → core-read-observations-D9zZtofb.mjs} +1 -1
- package/dist/{doctor-C2XDBGvH.mjs → doctor--KmAAJQh.mjs} +1 -1
- package/dist/ensure-C8m6l9E3.mjs +1 -0
- package/dist/{ensure-DUp9iPBJ.mjs → ensure-Co9t1U0m.mjs} +1 -1
- package/dist/index.d.mts +6 -4
- package/dist/index.mjs +1 -1
- package/dist/{info-BwGWPWwX.mjs → info-Bkx_EzhX.mjs} +1 -1
- package/dist/inspect-KHSjKpRC.mjs +1 -0
- package/dist/{inspect-BfQSMM2F.mjs → inspect-z9wKxjPb.mjs} +1 -1
- package/dist/{install-vhY8vk_J.mjs → install-CHtnwr_Y.mjs} +1 -1
- package/dist/{installation-compatibility-DoDbUtFm.mjs → installation-compatibility-BVjqZReM.mjs} +1 -1
- package/dist/{installation-production-DMs7Bidg.mjs → installation-production-wcNYHMOC.mjs} +1 -1
- package/dist/{lifecycle-observations-v4Yw4tS3.mjs → lifecycle-observations-CmhuPn5m.mjs} +1 -1
- package/dist/{lifecycle-policy-BZ0wnnRm.mjs → lifecycle-policy-a_fzmf1f.mjs} +1 -1
- package/dist/{list-8tXa5T55.mjs → list-BjpSygCh.mjs} +1 -1
- package/dist/mutation-recipe-catalog-DUwBWguD.mjs +1 -0
- package/dist/{output-pOJ9U7C5.mjs → output-B1HrihiQ.mjs} +2 -2
- package/dist/production-observation-BIl2_rY3.mjs +1 -0
- package/dist/{provider-evidence-DXNe-aXl.mjs → provider-evidence-vkNyhlUx.mjs} +1 -1
- package/dist/{provider-observations-Cig-U-yt.mjs → provider-observations-CidUOQCM.mjs} +1 -1
- package/dist/{providers-Cm4gsCbZ.mjs → providers-maAwybCG.mjs} +1 -1
- package/dist/{resolve-CTaJLIdJ.mjs → resolve-gx71Mowp.mjs} +1 -1
- package/dist/resolve-zv03nHpM.mjs +1 -0
- package/dist/schema-BzAeBdY8.mjs +1 -0
- package/dist/{schema-Diew1l38.mjs → schema-C4dLTm0W.mjs} +1 -1
- package/dist/{uninstall-CYaqYpUe.mjs → uninstall-ZzgZy9Ml.mjs} +1 -1
- package/dist/{unmanaged-install-compatibility-MC_rGtQA.mjs → unmanaged-install-compatibility-DvYrwPXj.mjs} +1 -1
- package/dist/{update-DuePJ0Bz.mjs → update-CqF2UOqJ.mjs} +1 -1
- package/dist/{upgrade-rMVaNHuO.mjs → upgrade-Dy8cCyh9.mjs} +1 -1
- package/package.json +4 -11
- package/dist/agents-vJvtQ83q.mjs +0 -1
- package/dist/capabilities-dq2H2h0T.mjs +0 -1
- package/dist/commands-V3_i42ap.mjs +0 -1
- package/dist/ensure-D5UxE-xc.mjs +0 -1
- package/dist/inspect-Jra1x8Xy.mjs +0 -1
- package/dist/mutation-recipe-catalog-DP_XMSYe.mjs +0 -1
- package/dist/production-observation-BxoPjRie.mjs +0 -1
- package/dist/resolve-BDaf2ALP.mjs +0 -1
- package/dist/schema-CrkSsXHT.mjs +0 -1
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ Quantex is a `human-friendly + agent-friendly` lifecycle CLI for AI coding assis
|
|
|
29
29
|
- Manage multiple AI coding assistant CLIs from one lifecycle command: install, ensure, inspect, update, uninstall, and run.
|
|
30
30
|
- Designed for scripts and coding agents: stable `--json`, `--output ndjson`, `--non-interactive`, and `--dry-run` contracts for machine-readable automation.
|
|
31
31
|
- Tracks real install sources: `update --all` groups updates by recorded source instead of guessing from PATH alone.
|
|
32
|
-
- Supports managed agent installs through available Bun, npm, Homebrew, Cargo, Deno, mise, pip, uv,
|
|
32
|
+
- Supports managed agent installs through available Bun, npm, Homebrew, and winget providers, plus official install scripts. Cargo, Deno, mise, pip, and uv stay supported for installations already recorded in state, but are no longer offered for new catalog installs.
|
|
33
33
|
- Supports Quantex self-upgrade across Bun, npm, and standalone binary installs.
|
|
34
34
|
|
|
35
35
|
## Lifecycle and compatibility guarantees
|
|
@@ -222,18 +222,15 @@ Note: `qtx upgrade` follows the registry actually used by the current Bun/npm se
|
|
|
222
222
|
| Command Code | `qtx commandcode` | Command Code's AI coding assistant CLI |
|
|
223
223
|
| Crush | `qtx crush` | Charmbracelet's terminal AI coding agent CLI |
|
|
224
224
|
| Cursor CLI | `qtx cursor` | Cursor AI coding assistant CLI |
|
|
225
|
-
| Deep Code CLI | `qtx deepcode` | Deep Code's terminal coding agent CLI |
|
|
226
225
|
| CodeWhale | `qtx codewhale` | DeepSeek-first agentic terminal for coding models |
|
|
226
|
+
| DeepSeek Harness | `qtx dsh` | DeepSeek's official plugin-architecture agent harness CLI |
|
|
227
227
|
| Devin for Terminal | `qtx devin` | Cognition's local coding agent CLI |
|
|
228
228
|
| Droid | `qtx droid` | Factory AI software engineering agent CLI |
|
|
229
|
-
| ForgeCode | `qtx forgecode` | Antinomy's AI coding assistant CLI |
|
|
230
229
|
| Gemini CLI | `qtx gemini` | Google's open-source AI coding assistant CLI |
|
|
231
|
-
| Genie | `qtx genie` | Deno-distributed terminal LLM agent |
|
|
232
230
|
| GitHub Copilot CLI | `qtx copilot` | GitHub Copilot command-line tool |
|
|
233
231
|
| Goose | `qtx goose` | Block's open-source extensible AI agent CLI |
|
|
234
232
|
| Grok Build | `qtx grok` | xAI's terminal coding agent CLI |
|
|
235
233
|
| Hermes Agent | `qtx hermes` | Nous Research's self-improving AI agent CLI |
|
|
236
|
-
| JCode | `qtx jcode` | High-performance coding agent harness for multi-session workflows |
|
|
237
234
|
| Junie CLI | `qtx junie` | JetBrains' AI coding agent CLI |
|
|
238
235
|
| Kilo CLI | `qtx kilo` | Kilo's official AI coding assistant CLI |
|
|
239
236
|
| Kimi Code | `qtx kimi` | Moonshot AI's coding assistant CLI |
|
|
@@ -248,7 +245,6 @@ Note: `qtx upgrade` follows the registry actually used by the current Bun/npm se
|
|
|
248
245
|
| Qoder CLI | `qtx qoder` | Qoder's official AI coding assistant CLI |
|
|
249
246
|
| Qwen Code | `qtx qwen` | Qwen's AI coding assistant CLI |
|
|
250
247
|
| Reasonix | `qtx reasonix` | DeepSeek-native terminal coding agent |
|
|
251
|
-
| VTCode | `qtx vtcode` | Open-source terminal coding agent with robust shell safety |
|
|
252
248
|
|
|
253
249
|
If you prefer the explicit long form, replace `qtx` with `quantex` in the examples above.
|
|
254
250
|
|
|
@@ -293,7 +289,7 @@ User configuration lives at `~/.quantex/config.json`:
|
|
|
293
289
|
}
|
|
294
290
|
```
|
|
295
291
|
|
|
296
|
-
`defaultPackageManager` can be `bun`, `npm`, `mise`, or `uv`. It only changes agent install-method ordering when the selected agent exposes that managed installer; the corresponding package-manager executable must already be available because Quantex does not install it for you.
|
|
292
|
+
`defaultPackageManager` can be `bun`, `npm`, `mise`, or `uv`. It only changes agent install-method ordering when the selected agent exposes that managed installer; the corresponding package-manager executable must already be available because Quantex does not install it for you. No catalog agent declares a mise or uv install method today, so those two preferences currently change no ordering.
|
|
297
293
|
|
|
298
294
|
`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.
|
|
299
295
|
|
package/README.zh-CN.md
CHANGED
|
@@ -29,7 +29,7 @@ Quantex 是一个 `human-friendly + agent-friendly` 的 AI 编程助手 CLI life
|
|
|
29
29
|
- 一个生命周期命令管理多个 AI 编程助手 CLI:安装、确保可用、查询状态、更新、卸载、启动。
|
|
30
30
|
- 适合脚本和 agent 调用:支持 `--json`、`--output ndjson`、`--non-interactive`、`--dry-run` 等适合机器读取的稳定契约。
|
|
31
31
|
- 记住真实安装来源:`update --all` 会优先按已记录来源分组更新,避免混合安装环境下误用更新方式。
|
|
32
|
-
- 支持通过可用的 Bun、npm、Homebrew、Cargo、Deno、mise、pip、uv
|
|
32
|
+
- 支持通过可用的 Bun、npm、Homebrew、winget provider 以及官方安装脚本管理 agent 安装。Cargo、Deno、mise、pip、uv 仍支持已记录的历史安装,但不再用于目录中的新安装。
|
|
33
33
|
- 支持 Quantex 自升级:Bun、npm、独立二进制安装来源都有对应升级路径。
|
|
34
34
|
|
|
35
35
|
## 生命周期与兼容性保证
|
|
@@ -222,18 +222,15 @@ qtx upgrade --check
|
|
|
222
222
|
| Command Code | `qtx commandcode` | Command Code AI 编程助手 CLI |
|
|
223
223
|
| Crush | `qtx crush` | Charmbracelet 终端 AI 编程 Agent CLI |
|
|
224
224
|
| Cursor CLI | `qtx cursor` | Cursor AI 编程助手命令行工具 |
|
|
225
|
-
| Deep Code CLI | `qtx deepcode` | Deep Code 终端编程 Agent CLI |
|
|
226
225
|
| CodeWhale | `qtx codewhale` | DeepSeek 优先的终端编程 Agent |
|
|
226
|
+
| DeepSeek Harness | `qtx dsh` | DeepSeek 官方插件化 Agent Harness CLI |
|
|
227
227
|
| Devin for Terminal | `qtx devin` | Cognition 本地编程 Agent CLI |
|
|
228
228
|
| Droid | `qtx droid` | Factory AI 软件工程 Agent CLI |
|
|
229
|
-
| ForgeCode | `qtx forgecode` | Antinomy AI 编程助手 CLI |
|
|
230
229
|
| Gemini CLI | `qtx gemini` | Google 开源 AI 编程助手 CLI |
|
|
231
|
-
| Genie | `qtx genie` | 通过 Deno 分发的终端 LLM agent |
|
|
232
230
|
| GitHub Copilot CLI | `qtx copilot` | GitHub Copilot 命令行工具 |
|
|
233
231
|
| Goose | `qtx goose` | Block 开源可扩展 AI Agent CLI |
|
|
234
232
|
| Grok Build | `qtx grok` | xAI 终端编程 Agent CLI |
|
|
235
233
|
| Hermes Agent | `qtx hermes` | Nous Research 自我进化的 AI Agent CLI |
|
|
236
|
-
| JCode | `qtx jcode` | 面向多 session 工作流的高性能编程 Agent harness |
|
|
237
234
|
| Junie CLI | `qtx junie` | JetBrains 官方 AI 编程 Agent CLI |
|
|
238
235
|
| Kilo CLI | `qtx kilo` | Kilo 官方 AI 编程助手 CLI |
|
|
239
236
|
| Kimi Code | `qtx kimi` | Moonshot AI 编程助手 CLI |
|
|
@@ -248,7 +245,6 @@ qtx upgrade --check
|
|
|
248
245
|
| Qoder CLI | `qtx qoder` | Qoder 官方 AI 编程助手 CLI |
|
|
249
246
|
| Qwen Code | `qtx qwen` | Qwen AI 编程助手 CLI |
|
|
250
247
|
| Reasonix | `qtx reasonix` | DeepSeek 原生终端编程 Agent |
|
|
251
|
-
| VTCode | `qtx vtcode` | 开源终端编程 Agent,提供稳健 shell 安全能力 |
|
|
252
248
|
|
|
253
249
|
如果你更偏好显式长命令,上表里的 `qtx` 都可以直接替换成 `quantex`。
|
|
254
250
|
|
|
@@ -293,7 +289,7 @@ quantex schema --json
|
|
|
293
289
|
}
|
|
294
290
|
```
|
|
295
291
|
|
|
296
|
-
`defaultPackageManager` 可以是 `bun`、`npm`、`mise` 或 `uv`。它只会在目标 agent 暴露对应 managed installer 时调整 agent 安装方式排序;对应的 package manager 可执行文件必须已经存在,Quantex
|
|
292
|
+
`defaultPackageManager` 可以是 `bun`、`npm`、`mise` 或 `uv`。它只会在目标 agent 暴露对应 managed installer 时调整 agent 安装方式排序;对应的 package manager 可执行文件必须已经存在,Quantex 不会自动替你安装。当前目录中已没有 agent 声明 mise 或 uv 安装方式,因此这两个偏好暂时不会改变任何排序。
|
|
297
293
|
|
|
298
294
|
`selfUpdateRegistry` 默认不设置。未设置时,Quantex 自升级会跟随当前 Bun/npm 实际使用的 registry。设置 `selfUpdateRegistry` 后,它只影响 Quantex 自身通过 Bun/npm 执行 `qtx upgrade` 的 registry 选择,不会修改你其他项目的默认安装源。一次性覆盖可使用环境变量 `QTX_SELF_UPDATE_REGISTRY`。
|
|
299
295
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./detect-BUVMt8jZ.mjs";import{n as t}from"./cli-context-DI43ouBg.mjs";import{A as n}from"./output-
|
|
1
|
+
import{n as e}from"./detect-BUVMt8jZ.mjs";import{n as t}from"./cli-context-DI43ouBg.mjs";import{A as n}from"./output-B1HrihiQ.mjs";import{t as r}from"./cli-operation-context-BS5a069W.mjs";import{d as i,g as a,l as o,o as s,u as c}from"./agents-BeMXYu8x.mjs";import{o as l}from"./provider-binding-BmBPz4YE.mjs";import{t as u}from"./provider-evidence-vkNyhlUx.mjs";function d(e){let t=f(e);return{decision:t,plan:{id:`${e.intent.kind}-${e.intent.targetId}`,intent:e.intent,kind:`lifecycle-plan`,observation:e.observation,steps:h(t,e)}}}function f(e){let{intent:t,observation:n}=e;return n.kind===`indeterminate`||n.drift.kind===`indeterminate`||n.drift.kind===`conflicting-source`||p(e)?`blocked`:t.kind===`uninstall`?n.kind===`absent`?n.drift.kind===`recorded-absent`?`clear-ghost`:`preserve-unmanaged`:!n.providerId||!y(e)?`preserve-unmanaged`:m(e,`uninstall`)?`uninstall`:`unsupported`:n.kind===`present`?n.drift.kind===`untracked`?n.providerId?`adopt`:`preserve-unmanaged`:`satisfied`:!v(e)||!y(e)?`blocked`:m(e,`install`)?`install`:`unsupported`}function p(e){let{observation:t,provider:n}=e;return t.kind!==`present`||n===void 0?!1:t.providerId!==void 0&&t.providerId!==n.providerId||t.providerTargetId!==void 0&&t.providerTargetId!==n.targetId||t.providerTargetKind!==void 0&&t.providerTargetKind!==n.targetKind}function m(e,t){return e.provider===void 0||e.provider.capabilities.includes(t)}function h(e,t){switch(e){case`install`:return[g(`install`,t,_(`package-present`,t))];case`uninstall`:return[g(`uninstall`,t,_(`package-absent`,t))];case`adopt`:return[b(`adopt-${t.intent.targetId}`,[{executable:t.observation.kind===`present`?t.observation.executablePath??t.intent.targetId:t.intent.targetId,kind:`executable-present`}])];case`clear-ghost`:return[b(`clear-ghost-${t.intent.targetId}`,[])];case`blocked`:case`preserve-unmanaged`:case`satisfied`:case`unsupported`:return[]}}function g(e,t,n){let r=v(t),i=y(t);return{dependsOn:[],effects:[{capability:`${r}-${e}`,kind:`provider-mutation`,providerId:r,targetId:i}],id:`${e}-${t.intent.targetId}`,kind:`operation`,postconditions:[n],preconditions:[]}}function _(e,t){return{kind:e,providerId:v(t),targetId:y(t)}}function v(e){return e.observation.kind===`present`?e.observation.providerId??e.provider?.providerId??e.providerId:e.provider?.providerId??e.providerId}function y(e){return e.observation.kind===`present`?e.observation.providerTargetId??e.provider?.targetId??e.providerTargetId:e.provider?.targetId??e.providerTargetId}function b(e,t){return{dependsOn:[],effects:[],id:e,kind:`operation`,postconditions:t,preconditions:[]}}async function x(e){let t=await e.execute();if(t.kind!==`success`)return t;let n;try{n=await e.verify(t.value,e.plan)}catch{return await S(e,t.value),{kind:`failed`,reason:`verification-failed`,retryable:!0}}if(n.kind!==`satisfied`)return await S(e,t.value),n.kind===`indeterminate`?{kind:`indeterminate`,reason:n.reason}:{kind:`failed`,reason:n.reason,retryable:!1};let r=e.createReceipt(n,t.value);try{await e.recordReceipt(r,t.value)}catch{return await S(e,t.value),{kind:`failed`,reason:`receipt-write-failed`,retryable:!0}}return{kind:`success`,value:{...t.value,receipt:r,verification:n}}}async function S(e,t){if(!(!t.changed||!e.compensate))try{await e.compensate(t)}catch{}}function C(e){let{adoptableMethod:t,agent:r,observation:o,operation:s,route:c}=e,f=o.installedState?void 0:o.methods[0],p=o.installedState??t??f,m=D(o.lifecycle,r,t),h=d({intent:{kind:s,targetId:r.name},observation:m,providerId:O(p),providerTargetId:k(r,p)});return h.decision===c?a(async()=>{if(c===`install`&&o.installedState&&!o.inPath){let e=l(r,o.installedState);if(!e)return{kind:`indeterminate`,reason:`tracked-provider-binding-unresolved`};let t=await E(t=>u(e,t));if(t.kind!==`success`||t.value.kind!==`absent`)return{kind:`indeterminate`,reason:`tracked-provider-not-conclusively-absent`}}return x({createReceipt:(e,t)=>{let n=l(r,t.value.installedState);if(!n)throw Error(`Cannot resolve provider binding for ${r.name}.`);let i=e.observation.kind===`present`?e.observation:void 0;return{...n.target.binaryName?{executableName:n.target.binaryName}:{},kind:`lifecycle-receipt`,providerId:n.providerId,providerTargetId:n.target.id,providerTargetKind:n.target.kind,schemaVersion:1,targetId:r.name,verifiedAt:new Date().toISOString(),...i?.executablePath?{executablePath:i.executablePath}:{},...i?.version?{version:i.version}:{}}},compensate:e=>c===`install`?i(r,e.value.installedState):Promise.resolve(),execute:async()=>w(r,c,o.installedState,t,f),plan:h.plan,recordReceipt:(e,t)=>n(t.value.installedState,e),verify:async e=>T(r,e.value.installedState,s,h.plan.steps[0]?.postconditions[0])})}):Promise.resolve({kind:`indeterminate`,reason:`planned-${h.decision}-cannot-execute-${c}`})}async function w(e,n,r,i,a){if(n===`satisfied`&&r)return{kind:`success`,value:{changed:!1,value:{installedState:r}}};if(n===`adopt`&&i)return t().cancelled?{kind:`cancelled`,reason:`tracking-cancelled`}:{kind:`success`,value:{changed:!0,value:{installedState:s(e,i)}}};if(n===`install`&&r){let t=await c(e,r);return t.kind===`success`&&t.value.installedState?{kind:`success`,value:{changed:!0,value:{installedState:t.value.installedState}}}:t.kind===`success`?{kind:`failed`,reason:`installed-state-missing`,retryable:!1}:t}if(!a)return{kind:`indeterminate`,reason:`install-method-unresolved`};let l=await o(e,[a]);return l.kind===`success`?l.value.installedState?{kind:`success`,value:{changed:!0,value:{installedState:l.value.installedState}}}:{kind:`failed`,reason:`installed-state-missing`,retryable:!1}:l}async function T(t,n,r,i){let a=i??{executable:t.binaryName,kind:`executable-present`},o=l(t,n);if(!o)return{kind:`indeterminate`,postcondition:a,reason:`provider-binding-unresolved-after-${r}`};let[s,c]=await E(n=>Promise.all([e(t.binaryName,n),u(o,n)])),d=c.kind===`success`&&c.value.kind===`present`,f=c.kind===`success`?c.value:void 0,p=s&&d?{drift:{kind:`none`},executablePath:f?.kind===`present`?f.executablePath:void 0,kind:`present`,providerId:o.providerId,providerTargetId:o.target.id,targetId:t.name,version:f?.kind===`present`?f.version:void 0}:{drift:{kind:`recorded-absent`},kind:`absent`,targetId:t.name};return s&&d?{kind:`satisfied`,observation:p,postcondition:a}:{kind:`unsatisfied`,observation:p,postcondition:a,reason:s?`provider-target-not-present-after-${r}`:`binary-not-found-after-${r}`}}async function E(e){let t=r();try{return await e(t.context)}finally{t.dispose()}}function D(e,t,n){return e.kind!==`present`||!n?e:{...e,providerId:O(n),providerTargetId:k(t,n)}}function O(e){if(e)return`installType`in e?e.installType:e.type}function k(e,t){if(t){if(t.packageName)return t.packageName;if(t.command)return t.command;if(t.binaryName)return t.binaryName;let n=O(t);if(n===`bun`||n===`npm`)return e.packages?.npm??e.binaryName;if(n===`cargo`)return e.packages?.cargo??e.binaryName;if(n===`deno`)return e.packages?.deno??e.binaryName;if(n===`mise`)return e.packages?.mise??e.binaryName;if(n===`pip`)return e.packages?.pip??e.binaryName;if(n===`uv`)return e.packages?.uv??e.binaryName}return e.binaryName}export{C as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{c as e,s as t}from"./child-process-DzIdysOm.mjs";import{c as n,f as r,i,t as a}from"./npm-DUDR-Khz.mjs";import{B as o,E as s,M as c,O as ee,P as te,R as ne,T as re,h as ie,l as ae,p as oe,r as se,s as l,t as u,x as ce,y as le}from"./winget-C8yBIi3u.mjs";import{d,h as ue,o as de}from"./file-store-XNyirRRY.mjs";import{t as f}from"./detect-BUVMt8jZ.mjs";import{B as fe,G as pe,H as me,K as he,L as ge,R as _e,U as ve,V as ye,W as be,n as xe,q as Se,r as Ce,z as we}from"./agents-vJvtQ83q.mjs";import{i as Te,n as p}from"./cli-context-DI43ouBg.mjs";import{$ as Ee,D as m,Q as De,j as h,tt as Oe,x as g}from"./output-pOJ9U7C5.mjs";import{c as ke,d as _,h as Ae,m as je,p as v,s as Me,u as y,v as b}from"./providers-Cm4gsCbZ.mjs";import{n as x,t as S}from"./cli-operation-context-BS5a069W.mjs";import Ne from"node:process";import{AsyncLocalStorage as Pe}from"node:async_hooks";function C(n,r={}){let i=t(n,x(p().outputMode),r),a=Te(()=>e(i.proc));return{...i,cleanup:()=>{a(),i.cleanup()}}}async function w(e){let t=p();try{let n=await e.proc.exited;return await e.outputDrained,t.cancelled?1:n}finally{e.cleanup()}}async function T(e){let t=f(),n=typeof e==`function`?e(t):e;try{return Ne.platform===`win32`?await w(C([`powershell.exe`,`-Command`,n]))===0:await w(C([`sh`,`-c`,n]))===0}catch{return!1}}function E(e,t,n){return{type:e,getInstalledVersion:e=>n.getInstalledVersion(e),probePackagePresence:e=>n.probePackagePresence(e),isAvailable:e=>D(e,async e=>(await t.availability(e)).kind===`success`),install:async(e,n,r,i)=>t.install?D(i,i=>t.install({context:i,target:O(e,n,void 0,r)})):N(`install`),uninstall:async(e,n,r,i)=>t.uninstall?D(i,i=>t.uninstall({context:i,target:O(e,n,r?.binaryName)})):N(`uninstall`),update:async(e,n,r,i)=>{if(!t.update)return N(`update`);let a=k(r);return D(i,i=>t.update({context:i,...a?{options:a}:{},target:O(e,n,r?.binaryName,r?.packageInstallArgs)}))},updateMany:async(e,n,r)=>{if(!t.updateMany)return N(`update-many`);let i=k(n);return D(r,n=>t.updateMany({context:n,...i?{options:i}:{},targets:e.map(e=>O(e.packageName,e.packageTargetKind,e.binaryName,e.packageInstallArgs))}))}}}async function D(e,t){if(e)return t(e);let n=S();try{return await t(n.context)}finally{n.dispose()}}function O(e,t,n,r){return{...r?.length?{arguments:r}:{},...n?{binaryName:n}:{},id:e,kind:t??`package`}}function k(e){return e?.npmBunUpdateStrategy?{updateStrategy:e.npmBunUpdateStrategy}:void 0}function A(e,t,n,r={}){let i=(e,t,r,i)=>({...r?.length?{arguments:r}:{},...i?{binaryName:i}:{},id:e,kind:n(t)});return{...r,type:e,isAvailable:e=>D(e,async e=>(await t.availability(e)).kind===`success`),install:async(e,n,r,a)=>t.install?D(a,a=>t.install({context:a,target:i(e,n,r)})):N(`install`),uninstall:async(e,n,r,a)=>t.uninstall?D(a,a=>t.uninstall({context:a,target:i(e,n,void 0,r?.binaryName)})):N(`uninstall`),update:async(e,n,r,a)=>t.update?D(a,a=>t.update({context:a,target:i(e,n,r?.packageInstallArgs,r?.binaryName)})):N(`update`),updateMany:async(e,n,r)=>t.updateMany?D(r,n=>t.updateMany({context:n,targets:e.map(e=>i(e.packageName,e.packageTargetKind,e.packageInstallArgs,e.binaryName))})):N(`update-many`)}}const j={brew:A(`brew`,Se,e=>e===`cask`?`cask`:`formula`,{getInstalledVersion:(e,t)=>ne(e,t),probePackagePresence:(e,t)=>o(e,t)}),bun:E(`bun`,he,{getInstalledVersion:e=>n(e),probePackagePresence:e=>r(e)}),cargo:A(`cargo`,pe,()=>`package`,{getInstalledVersion:e=>c(e),probePackagePresence:e=>te(e)}),deno:A(`deno`,be,()=>`tool`,{getInstalledVersion:e=>re(s(e)),probePackagePresence:e=>ee(s(e))}),mise:A(`mise`,ye,()=>`tool`,{getInstalledVersion:e=>le(e),probePackagePresence:e=>ce(e)}),npm:E(`npm`,fe,{getInstalledVersion:e=>a(e),probePackagePresence:e=>i(e)}),pip:A(`pip`,we,()=>`package`,{getInstalledVersion:e=>oe(e),probePackagePresence:e=>ie(e)}),uv:A(`uv`,_e,()=>`tool`,{getInstalledVersion:e=>l(e),probePackagePresence:e=>ae(e)}),winget:A(`winget`,ge,()=>`id`,{getInstalledVersion:e=>u(e),probePackagePresence:e=>se(e)})},Fe=Object.fromEntries(Object.entries(j).map(([e,t])=>[e,Le(t)]));function Ie(e){return Fe[e]}function M(e){return j[e]}function Le(e){return{getInstalledVersion:e.getInstalledVersion,install:async(...t)=>(await e.install(...t)).kind===`success`,isAvailable:e.isAvailable,probePackagePresence:e.probePackagePresence,type:e.type,uninstall:async(...t)=>(await e.uninstall(...t)).kind===`success`,update:async(...t)=>(await e.update(...t)).kind===`success`,updateMany:async(...t)=>(await e.updateMany(...t)).kind===`success`}}function N(e){return{kind:`unsupported`,operation:e}}const Re={resource:`agent lifecycle`,scope:[`agent-lifecycle`]},P=new Pe;function F(e){return P.getStore()?e():de(Re,()=>P.run(!0,e))}async function ze(){return(await d()).defaultPackageManager}async function I(){return{npmBunUpdateStrategy:(await d()).npmBunUpdateStrategy}}async function L(e){let t=f(),n=e.platforms[t];if(!n)return[];let r=await ze();return r?[...n.filter(e=>e.type===r),...n.filter(e=>e.type!==r)]:[...n]}async function R(e,t,n,r,i,a,o,s){if(!s){let s=S();try{return await R(e,t,n,r,i,a,o,s.context)}finally{s.dispose()}}let c=M(e);return await c.isAvailable(s)?a===`install`?c.install(t,i,r,s):a===`update`?c.update(t,i,{binaryName:n,npmBunUpdateStrategy:o,packageInstallArgs:r},s):c.uninstall(t,i,{binaryName:n},s):{kind:`unavailable`,reason:`${e} executable is unavailable`,retryable:!1}}async function z(e,t,n,r){if(b(t.type)){let i=_(e,t);return i?R(t.type,i,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,n,r):{kind:`failed`,reason:`package target is missing for ${e.name}`,retryable:!1}}if(n===`update`&&!je(t.type))return{kind:`unsupported`,operation:`update`};if(!t.command)return{kind:`failed`,reason:`install effect is missing for ${e.name}`,retryable:!1};let i=t.type===`script`?ve:me,a=S();try{return await i.install?.({context:a.context,target:{binaryName:t.binaryName??e.binaryName,effect:{command:t.command,kind:`shell-script`},id:e.name,kind:t.type}})??{kind:`unsupported`,operation:n}}finally{a.dispose()}}function B(e,t){if(e.packageName)return e.packageName;if(!(!t||!b(e.installType)))return _(t,{type:e.installType})}async function V(e,t,n){if(b(e.installType)){let r=B(e,n?.agent);return r?R(e.installType,r,e.binaryName??n?.agent?.binaryName,e.packageInstallArgs,e.packageTargetKind,t,n?.updateStrategy):{kind:`failed`,reason:`package target is missing for ${e.agentName}`,retryable:!1}}return t!==`install`||!e.command?{kind:`unsupported`,operation:t}:await T(e.command)?{kind:`success`,value:void 0}:{kind:`failed`,reason:`${t} command failed for ${e.agentName}`,retryable:!1}}async function H(e,t){if(!b(t.type))return;let n=_(e,t);n&&await R(t.type,n,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`,void 0,J())}async function Be(e){if(!e.selfUpdate)return!1;let t=[e.selfUpdate.command,...e.selfUpdate.fallbackCommands??[]];for(let e of t)if(await T(e.join(` `)))return!0;return!1}function U(e,t){let n={agentName:e.name,installType:t.type,packageName:_(e,t),packageTargetKind:t.packageTargetKind,command:`command`in t?t.command:void 0},r=t.binaryName??(t.type===`deno`?e.binaryName:void 0);return r&&(n.binaryName=r),t.packageInstallArgs?.length&&(n.packageInstallArgs=t.packageInstallArgs),n}async function Ve(e,t){if(p().cancelled)return null;let n=U(e,t);return p().cancelled?null:(await h(n),p().cancelled?(await m(e.name),null):n)}async function W(e,t){return F(async()=>{let n=t?[...t]:await L(e),r;for(let t of n){if(p().cancelled)return{kind:`cancelled`,reason:`install-cancelled`};let n=await z(e,t,`install`);if(n.kind===`success`)return p().cancelled?(await H(e,t),{kind:`cancelled`,reason:`install-cancelled`}):{kind:`success`,value:{installedState:U(e,t)}};let i=X(n);if(i.kind===`cancelled`||i.kind===`timed-out`)return i;if(r=i,p().cancelled)return await H(e,t),{kind:`cancelled`,reason:`install-cancelled`}}return r??{kind:`failed`,reason:`install-failed`,retryable:!1}})}async function He(e){return F(async()=>{let t=await W(e);if(t.kind!==`success`||!t.value.installedState)return Y(t);try{return p().cancelled?(await q(e,t.value.installedState),{success:!1}):(await h(t.value.installedState),p().cancelled?(await m(e.name),await q(e,t.value.installedState),{success:!1}):Y(t))}catch(n){throw await q(e,t.value.installedState),n}})}async function Ue(e,t){return F(async()=>{let{npmBunUpdateStrategy:n}=await I(),r=await L(e),i=t&&b(t.installType)?B(t,e):void 0,a=t?await V(t,`update`,{agent:e,updateStrategy:n}):void 0;if(t&&a?.kind===`success`)return p().cancelled||(await h(t),p().cancelled)?{kind:`cancelled`,reason:`update-cancelled`}:{kind:`success`,value:{installedState:t}};if(a?.kind===`cancelled`||a?.kind===`timed-out`)return X(a);if(!t)for(let t of r){let r=await z(e,t,`update`,n);if(r.kind===`success`){let n=await Ve(e,t);return n?{kind:`success`,value:{installedState:n}}:{kind:`cancelled`,reason:`update-cancelled`}}if(r.kind===`cancelled`||r.kind===`timed-out`)return X(r)}return(!t||!b(t.installType)||i)&&await Be(e)?{kind:`success`,value:{}}:{kind:`failed`,reason:`update-failed`,retryable:!1}})}async function We(e,t){return Y(await Ue(e,t))}async function Ge(e,t){return F(async()=>{let n=[...new Map(t.filter(e=>e.packageName).map(e=>[`${e.packageTargetKind??`package`}:${e.packageName}:${e.packageInstallArgs?.join(` `)??``}`,e])).values()];if(n.length===0)return!1;let r=M(e);return await r.isAvailable()?(await r.updateMany(n,await I())).kind===`success`:!1})}async function Ke(e,t,n){let r=M(e);if(r.getInstalledVersion&&await r.isAvailable())return r.getInstalledVersion(t,n)}async function qe(e,t){if(!b(e.installType))return!1;let n=M(e.installType);if(!n.getInstalledVersion||!await n.isAvailable())return!1;let r=B(e,t);return r?n.probePackagePresence?await n.probePackagePresence(r,e.packageTargetKind)===`absent`:await n.getInstalledVersion(r,e.packageTargetKind)===void 0:!1}async function Je(e){return(await F(async()=>{let t=await g(e.name);return t?G(e,t):{kind:`failed`,reason:`installed-state-missing`,retryable:!1}})).kind===`success`}async function G(e,t){if(!v(t.installType))return await m(e.name),{kind:`success`,value:{installedState:t}};let n=await V(t,`uninstall`,{agent:e});return n.kind===`success`||await qe(t,e)?(await m(e.name),{kind:`success`,value:{installedState:t}}):X(n)}async function K(e,t){let n=await V(t,`install`,{agent:e});return n.kind===`success`?{kind:`success`,value:{installedState:t}}:X(n)}async function q(e,t){if(!v(t.installType)||!b(t.installType))return;let n=B(t,e);n&&await R(t.installType,n,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`,void 0,J())}function J(){let e=p(),t=e.timeoutMs;return{outputPolicy:x(e.outputMode),signal:new AbortController().signal,timeoutMs:t===void 0?5e3:Math.max(10,Math.min(t,5e3))}}function Y(e){return e.kind===`success`?e.value.installedState?{installedState:e.value.installedState,success:!0}:{success:!0}:{success:!1}}function X(e){switch(e.kind){case`success`:return{kind:`success`,value:{}};case`cancelled`:return e;case`timed-out`:return e;case`failed`:return{kind:`failed`,reason:e.reason,retryable:e.retryable};case`unsupported`:return{capability:`provider-${e.operation}`,kind:`unsupported`,reason:e.reason};case`unavailable`:case`indeterminate`:return{kind:`indeterminate`,reason:e.reason}}}async function Z(e){let[t,n,r]=await Promise.all([L(e),g(e.name),ue(e.binaryName)]),i=r!==void 0,[a,o]=await Promise.all([i?Ye(e,n,r):Promise.resolve(void 0),Xe(e,n,t)]);return{agent:e,methods:t,installedState:n,inPath:i,installedVersion:a,latestVersion:o,binaryPath:r,resolvedBinaryPath:await Ee(r),sourceLabel:Me(n),updateLabel:ke(e,n),lifecycle:n?Ae(n.installType):`unmanaged`}}async function Q(e){return Promise.all(e.map(Z))}async function Ye(e,t,n){if(t&&b(t.installType)&&t.packageName){let e=await Ke(t.installType,t.packageName,t.packageTargetKind);if(e)return e}return Oe(e.binaryName,e.versionProbe,void 0,n)}async function Xe(e,t,n){let r=y(e,t,n);if(r)return De(r)}function $(e){return xe(e)}async function Ze(e){let t=$(e);if(t)return{agent:t,inspection:await Z(t)}}async function Qe(){return Q(Ce())}export{Ie as _,Q as a,He as c,q as d,Je as f,F as g,Ge as h,Z as i,W as l,We as m,$ as n,U as o,G as p,Ze as r,L as s,Qe as t,K as u,C as v,w as y};
|
|
1
|
+
import{c as e,s as t}from"./child-process-DzIdysOm.mjs";import{c as n,f as r,i,t as a}from"./npm-DUDR-Khz.mjs";import{B as o,E as s,M as c,O as ee,P as te,R as ne,T as re,h as ie,l as ae,p as oe,r as se,s as l,t as u,x as ce,y as le}from"./winget-C8yBIi3u.mjs";import{d,h as ue,o as de}from"./file-store-XNyirRRY.mjs";import{t as f}from"./detect-BUVMt8jZ.mjs";import{B as fe,G as pe,H as me,K as he,L as ge,R as _e,U as ve,V as ye,W as be,n as xe,q as Se,r as Ce,z as we}from"./agents-DVl7Dw3L.mjs";import{i as Te,n as p}from"./cli-context-DI43ouBg.mjs";import{$ as Ee,D as m,Q as De,j as h,tt as Oe,x as g}from"./output-B1HrihiQ.mjs";import{c as ke,d as _,h as Ae,m as je,p as v,s as Me,u as y,v as b}from"./providers-maAwybCG.mjs";import{n as x,t as S}from"./cli-operation-context-BS5a069W.mjs";import Ne from"node:process";import{AsyncLocalStorage as Pe}from"node:async_hooks";function C(n,r={}){let i=t(n,x(p().outputMode),r),a=Te(()=>e(i.proc));return{...i,cleanup:()=>{a(),i.cleanup()}}}async function w(e){let t=p();try{let n=await e.proc.exited;return await e.outputDrained,t.cancelled?1:n}finally{e.cleanup()}}async function T(e){let t=f(),n=typeof e==`function`?e(t):e;try{return Ne.platform===`win32`?await w(C([`powershell.exe`,`-Command`,n]))===0:await w(C([`sh`,`-c`,n]))===0}catch{return!1}}function E(e,t,n){return{type:e,getInstalledVersion:e=>n.getInstalledVersion(e),probePackagePresence:e=>n.probePackagePresence(e),isAvailable:e=>D(e,async e=>(await t.availability(e)).kind===`success`),install:async(e,n,r,i)=>t.install?D(i,i=>t.install({context:i,target:O(e,n,void 0,r)})):N(`install`),uninstall:async(e,n,r,i)=>t.uninstall?D(i,i=>t.uninstall({context:i,target:O(e,n,r?.binaryName)})):N(`uninstall`),update:async(e,n,r,i)=>{if(!t.update)return N(`update`);let a=k(r);return D(i,i=>t.update({context:i,...a?{options:a}:{},target:O(e,n,r?.binaryName,r?.packageInstallArgs)}))},updateMany:async(e,n,r)=>{if(!t.updateMany)return N(`update-many`);let i=k(n);return D(r,n=>t.updateMany({context:n,...i?{options:i}:{},targets:e.map(e=>O(e.packageName,e.packageTargetKind,e.binaryName,e.packageInstallArgs))}))}}}async function D(e,t){if(e)return t(e);let n=S();try{return await t(n.context)}finally{n.dispose()}}function O(e,t,n,r){return{...r?.length?{arguments:r}:{},...n?{binaryName:n}:{},id:e,kind:t??`package`}}function k(e){return e?.npmBunUpdateStrategy?{updateStrategy:e.npmBunUpdateStrategy}:void 0}function A(e,t,n,r={}){let i=(e,t,r,i)=>({...r?.length?{arguments:r}:{},...i?{binaryName:i}:{},id:e,kind:n(t)});return{...r,type:e,isAvailable:e=>D(e,async e=>(await t.availability(e)).kind===`success`),install:async(e,n,r,a)=>t.install?D(a,a=>t.install({context:a,target:i(e,n,r)})):N(`install`),uninstall:async(e,n,r,a)=>t.uninstall?D(a,a=>t.uninstall({context:a,target:i(e,n,void 0,r?.binaryName)})):N(`uninstall`),update:async(e,n,r,a)=>t.update?D(a,a=>t.update({context:a,target:i(e,n,r?.packageInstallArgs,r?.binaryName)})):N(`update`),updateMany:async(e,n,r)=>t.updateMany?D(r,n=>t.updateMany({context:n,targets:e.map(e=>i(e.packageName,e.packageTargetKind,e.packageInstallArgs,e.binaryName))})):N(`update-many`)}}const j={brew:A(`brew`,Se,e=>e===`cask`?`cask`:`formula`,{getInstalledVersion:(e,t)=>ne(e,t),probePackagePresence:(e,t)=>o(e,t)}),bun:E(`bun`,he,{getInstalledVersion:e=>n(e),probePackagePresence:e=>r(e)}),cargo:A(`cargo`,pe,()=>`package`,{getInstalledVersion:e=>c(e),probePackagePresence:e=>te(e)}),deno:A(`deno`,be,()=>`tool`,{getInstalledVersion:e=>re(s(e)),probePackagePresence:e=>ee(s(e))}),mise:A(`mise`,ye,()=>`tool`,{getInstalledVersion:e=>le(e),probePackagePresence:e=>ce(e)}),npm:E(`npm`,fe,{getInstalledVersion:e=>a(e),probePackagePresence:e=>i(e)}),pip:A(`pip`,we,()=>`package`,{getInstalledVersion:e=>oe(e),probePackagePresence:e=>ie(e)}),uv:A(`uv`,_e,()=>`tool`,{getInstalledVersion:e=>l(e),probePackagePresence:e=>ae(e)}),winget:A(`winget`,ge,()=>`id`,{getInstalledVersion:e=>u(e),probePackagePresence:e=>se(e)})},Fe=Object.fromEntries(Object.entries(j).map(([e,t])=>[e,Le(t)]));function Ie(e){return Fe[e]}function M(e){return j[e]}function Le(e){return{getInstalledVersion:e.getInstalledVersion,install:async(...t)=>(await e.install(...t)).kind===`success`,isAvailable:e.isAvailable,probePackagePresence:e.probePackagePresence,type:e.type,uninstall:async(...t)=>(await e.uninstall(...t)).kind===`success`,update:async(...t)=>(await e.update(...t)).kind===`success`,updateMany:async(...t)=>(await e.updateMany(...t)).kind===`success`}}function N(e){return{kind:`unsupported`,operation:e}}const Re={resource:`agent lifecycle`,scope:[`agent-lifecycle`]},P=new Pe;function F(e){return P.getStore()?e():de(Re,()=>P.run(!0,e))}async function ze(){return(await d()).defaultPackageManager}async function I(){return{npmBunUpdateStrategy:(await d()).npmBunUpdateStrategy}}async function L(e){let t=f(),n=e.platforms[t];if(!n)return[];let r=await ze();return r?[...n.filter(e=>e.type===r),...n.filter(e=>e.type!==r)]:[...n]}async function R(e,t,n,r,i,a,o,s){if(!s){let s=S();try{return await R(e,t,n,r,i,a,o,s.context)}finally{s.dispose()}}let c=M(e);return await c.isAvailable(s)?a===`install`?c.install(t,i,r,s):a===`update`?c.update(t,i,{binaryName:n,npmBunUpdateStrategy:o,packageInstallArgs:r},s):c.uninstall(t,i,{binaryName:n},s):{kind:`unavailable`,reason:`${e} executable is unavailable`,retryable:!1}}async function z(e,t,n,r){if(b(t.type)){let i=_(e,t);return i?R(t.type,i,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,n,r):{kind:`failed`,reason:`package target is missing for ${e.name}`,retryable:!1}}if(n===`update`&&!je(t.type))return{kind:`unsupported`,operation:`update`};if(!t.command)return{kind:`failed`,reason:`install effect is missing for ${e.name}`,retryable:!1};let i=t.type===`script`?ve:me,a=S();try{return await i.install?.({context:a.context,target:{binaryName:t.binaryName??e.binaryName,effect:{command:t.command,kind:`shell-script`},id:e.name,kind:t.type}})??{kind:`unsupported`,operation:n}}finally{a.dispose()}}function B(e,t){if(e.packageName)return e.packageName;if(!(!t||!b(e.installType)))return _(t,{type:e.installType})}async function V(e,t,n){if(b(e.installType)){let r=B(e,n?.agent);return r?R(e.installType,r,e.binaryName??n?.agent?.binaryName,e.packageInstallArgs,e.packageTargetKind,t,n?.updateStrategy):{kind:`failed`,reason:`package target is missing for ${e.agentName}`,retryable:!1}}return t!==`install`||!e.command?{kind:`unsupported`,operation:t}:await T(e.command)?{kind:`success`,value:void 0}:{kind:`failed`,reason:`${t} command failed for ${e.agentName}`,retryable:!1}}async function H(e,t){if(!b(t.type))return;let n=_(e,t);n&&await R(t.type,n,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`,void 0,J())}async function Be(e){if(!e.selfUpdate)return!1;let t=[e.selfUpdate.command,...e.selfUpdate.fallbackCommands??[]];for(let e of t)if(await T(e.join(` `)))return!0;return!1}function U(e,t){let n={agentName:e.name,installType:t.type,packageName:_(e,t),packageTargetKind:t.packageTargetKind,command:`command`in t?t.command:void 0},r=t.binaryName??(t.type===`deno`?e.binaryName:void 0);return r&&(n.binaryName=r),t.packageInstallArgs?.length&&(n.packageInstallArgs=t.packageInstallArgs),n}async function Ve(e,t){if(p().cancelled)return null;let n=U(e,t);return p().cancelled?null:(await h(n),p().cancelled?(await m(e.name),null):n)}async function W(e,t){return F(async()=>{let n=t?[...t]:await L(e),r;for(let t of n){if(p().cancelled)return{kind:`cancelled`,reason:`install-cancelled`};let n=await z(e,t,`install`);if(n.kind===`success`)return p().cancelled?(await H(e,t),{kind:`cancelled`,reason:`install-cancelled`}):{kind:`success`,value:{installedState:U(e,t)}};let i=X(n);if(i.kind===`cancelled`||i.kind===`timed-out`)return i;if(r=i,p().cancelled)return await H(e,t),{kind:`cancelled`,reason:`install-cancelled`}}return r??{kind:`failed`,reason:`install-failed`,retryable:!1}})}async function He(e){return F(async()=>{let t=await W(e);if(t.kind!==`success`||!t.value.installedState)return Y(t);try{return p().cancelled?(await q(e,t.value.installedState),{success:!1}):(await h(t.value.installedState),p().cancelled?(await m(e.name),await q(e,t.value.installedState),{success:!1}):Y(t))}catch(n){throw await q(e,t.value.installedState),n}})}async function Ue(e,t){return F(async()=>{let{npmBunUpdateStrategy:n}=await I(),r=await L(e),i=t&&b(t.installType)?B(t,e):void 0,a=t?await V(t,`update`,{agent:e,updateStrategy:n}):void 0;if(t&&a?.kind===`success`)return p().cancelled||(await h(t),p().cancelled)?{kind:`cancelled`,reason:`update-cancelled`}:{kind:`success`,value:{installedState:t}};if(a?.kind===`cancelled`||a?.kind===`timed-out`)return X(a);if(!t)for(let t of r){let r=await z(e,t,`update`,n);if(r.kind===`success`){let n=await Ve(e,t);return n?{kind:`success`,value:{installedState:n}}:{kind:`cancelled`,reason:`update-cancelled`}}if(r.kind===`cancelled`||r.kind===`timed-out`)return X(r)}return(!t||!b(t.installType)||i)&&await Be(e)?{kind:`success`,value:{}}:{kind:`failed`,reason:`update-failed`,retryable:!1}})}async function We(e,t){return Y(await Ue(e,t))}async function Ge(e,t){return F(async()=>{let n=[...new Map(t.filter(e=>e.packageName).map(e=>[`${e.packageTargetKind??`package`}:${e.packageName}:${e.packageInstallArgs?.join(` `)??``}`,e])).values()];if(n.length===0)return!1;let r=M(e);return await r.isAvailable()?(await r.updateMany(n,await I())).kind===`success`:!1})}async function Ke(e,t,n){let r=M(e);if(r.getInstalledVersion&&await r.isAvailable())return r.getInstalledVersion(t,n)}async function qe(e,t){if(!b(e.installType))return!1;let n=M(e.installType);if(!n.getInstalledVersion||!await n.isAvailable())return!1;let r=B(e,t);return r?n.probePackagePresence?await n.probePackagePresence(r,e.packageTargetKind)===`absent`:await n.getInstalledVersion(r,e.packageTargetKind)===void 0:!1}async function Je(e){return(await F(async()=>{let t=await g(e.name);return t?G(e,t):{kind:`failed`,reason:`installed-state-missing`,retryable:!1}})).kind===`success`}async function G(e,t){if(!v(t.installType))return await m(e.name),{kind:`success`,value:{installedState:t}};let n=await V(t,`uninstall`,{agent:e});return n.kind===`success`||await qe(t,e)?(await m(e.name),{kind:`success`,value:{installedState:t}}):X(n)}async function K(e,t){let n=await V(t,`install`,{agent:e});return n.kind===`success`?{kind:`success`,value:{installedState:t}}:X(n)}async function q(e,t){if(!v(t.installType)||!b(t.installType))return;let n=B(t,e);n&&await R(t.installType,n,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`,void 0,J())}function J(){let e=p(),t=e.timeoutMs;return{outputPolicy:x(e.outputMode),signal:new AbortController().signal,timeoutMs:t===void 0?5e3:Math.max(10,Math.min(t,5e3))}}function Y(e){return e.kind===`success`?e.value.installedState?{installedState:e.value.installedState,success:!0}:{success:!0}:{success:!1}}function X(e){switch(e.kind){case`success`:return{kind:`success`,value:{}};case`cancelled`:return e;case`timed-out`:return e;case`failed`:return{kind:`failed`,reason:e.reason,retryable:e.retryable};case`unsupported`:return{capability:`provider-${e.operation}`,kind:`unsupported`,reason:e.reason};case`unavailable`:case`indeterminate`:return{kind:`indeterminate`,reason:e.reason}}}async function Z(e){let[t,n,r]=await Promise.all([L(e),g(e.name),ue(e.binaryName)]),i=r!==void 0,[a,o]=await Promise.all([i?Ye(e,n,r):Promise.resolve(void 0),Xe(e,n,t)]);return{agent:e,methods:t,installedState:n,inPath:i,installedVersion:a,latestVersion:o,binaryPath:r,resolvedBinaryPath:await Ee(r),sourceLabel:Me(n),updateLabel:ke(e,n),lifecycle:n?Ae(n.installType):`unmanaged`}}async function Q(e){return Promise.all(e.map(Z))}async function Ye(e,t,n){if(t&&b(t.installType)&&t.packageName){let e=await Ke(t.installType,t.packageName,t.packageTargetKind);if(e)return e}return Oe(e.binaryName,e.versionProbe,void 0,n)}async function Xe(e,t,n){let r=y(e,t,n);if(r)return De(r)}function $(e){return xe(e)}async function Ze(e){let t=$(e);if(t)return{agent:t,inspection:await Z(t)}}async function Qe(){return Q(Ce())}export{Ie as _,Q as a,He as c,q as d,Je as f,F as g,Ge as h,Z as i,W as l,We as m,$ as n,U as o,G as p,Ze as r,L as s,Qe as t,K as u,C as v,w as y};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./child-process-DzIdysOm.mjs";import{a as t,c as n,f as r,g as i,h as a,i as o,m as s,o as ee,p as te,r as ne,s as re,t as ie,u as ae}from"./npm-DUDR-Khz.mjs";import{A as oe,B as se,C as ce,D as le,E as c,F as ue,H as de,I as fe,L as pe,M as me,N as he,O as ge,P as _e,R as ve,S as ye,T as be,U as xe,V as Se,_ as Ce,a as we,b as Te,c as Ee,d as De,f as Oe,g as ke,h as Ae,i as je,j as Me,k as Ne,l as Pe,m as Fe,n as Ie,o as Le,p as Re,r as ze,s as Be,t as Ve,u as He,v as Ue,w as We,x as Ge,y as Ke,z as qe}from"./winget-C8yBIi3u.mjs";import{a as Je,c as Ye,d as Xe,i as Ze,l as Qe,n as $e,o as et,r as tt,s as nt,t as l,u as rt}from"./detect-BUVMt8jZ.mjs";import{r as it}from"./registry-vhJzh8dW.mjs";import{Q as u}from"./output-B1HrihiQ.mjs";import{t as at}from"./types-D0YMPN5w.mjs";import{toJSONSchema as ot,z as d}from"zod";function f(e){return e.kind===`cancelled`||e.kind===`timed-out`}function p(e){return e.kind===`cancelled`?{kind:`cancelled`,...e.reason?{reason:e.reason}:{}}:e}async function m(e,t){if(e.signal.aborted)return{kind:`cancelled`,reason:g(e.signal)};let n,r,i=new Promise(t=>{r=()=>t({kind:`cancelled`,reason:g(e.signal)}),e.signal.addEventListener(`abort`,r,{once:!0})}),a=[Promise.resolve().then(t).then(e=>({kind:`resolved`,value:e})).catch(e=>({kind:`rejected`,reason:st(e)})),i];e.timeoutMs!==void 0&&a.push(new Promise(t=>{n=setTimeout(()=>t({kind:`timed-out`,timeoutMs:e.timeoutMs}),e.timeoutMs)}));let o=await Promise.race(a);return n&&clearTimeout(n),e.signal.removeEventListener(`abort`,r),o}async function h(t,n){if(t.signal.aborted)return{kind:`cancelled`,reason:g(t.signal)};try{return{kind:`resolved`,value:await n()}}catch(t){return e(t)?t.kind===`timed-out`?{kind:`timed-out`,timeoutMs:t.timeoutMs}:{kind:`cancelled`,...t.reason?{reason:t.reason}:{}}:{kind:`rejected`,reason:st(t)}}}function g(e){return typeof e.reason==`string`?e.reason:e.reason instanceof Error?e.reason.message:e.reason===void 0?void 0:String(e.reason)}function st(e){return e instanceof Error?e.message:String(e)}function _(e,t){let n=async n=>{let r=await v(n.context,t.contextualObservation,()=>t.probePackagePresence(n.target,n.context));if(f(r))return p(r);if(r.kind===`rejected`||r.value===`unknown`)return{evidence:[ft(e.id,`${n.target.id}:presence-unknown`)],kind:`indeterminate`,reason:`${e.id} could not determine whether ${n.target.id} is installed`};if(r.value===`absent`)return x({evidence:[pt(e.id,n.target.id,`absent`)],kind:`absent`,target:n.target});let i=t.getInstalledVersion?await v(n.context,t.contextualObservation,()=>t.getInstalledVersion(n.target,n.context)):void 0;return i&&f(i)?p(i):x({evidence:[pt(e.id,n.target.id,`present`)],kind:`present`,target:n.target,...i?.kind===`resolved`&&i.value?{version:i.value}:{}})};return{availability:async n=>{let r=await v(n,t.contextualObservation,()=>t.isAvailable(n));return f(r)?p(r):r.kind===`rejected`||!r.value?{kind:`unavailable`,reason:`${e.id} executable is unavailable`}:x({executable:e.executable})},id:e.id,install:n=>y(e,n,`install`,e.commands.install(n.target),t.contextualMutation,t.install),observe:n,uninstall:n=>y(e,n,`uninstall`,e.commands.uninstall(n.target),t.contextualMutation,t.uninstall),update:n=>y(e,n,`update`,e.commands.update(n.target),t.contextualMutation,t.update),updateMany:n=>lt(e,t,n),verify:async t=>{let r=await n(t);return r.kind===`success`?r.value.kind===`absent`?x({evidence:r.value.evidence??[],kind:`unsatisfied`,reason:`${t.target.id} is not installed through ${e.id}`}):x({evidence:r.value.evidence??[],kind:`satisfied`}):r}}}function v(e,t,n){return t?h(e,n):m(e,n)}function ct(e,t,n){return t?h(e,n):m(e,n)}async function y(e,t,n,r,i,a){let o=await ct(t.context,i,()=>a(t.target,t.context));if(f(o))return p(o);let s=dt(e.id,r);return o.kind===`rejected`?b(e,t.target.id,n,r,s,o.reason):o.value.kind===`success`?x({evidence:s,target:t.target}):ut(o.value,e,t.target.id,n,r,s)}async function lt(e,t,n){let r=e.commands.updateMany(n.targets),i=await ct(n.context,t.contextualMutation,()=>t.updateMany(n.targets,n.context));if(f(i))return p(i);let a=dt(e.id,r);return i.kind===`rejected`?b(e,void 0,`update`,r,a,i.reason):i.value.kind===`success`?x(n.targets.map(e=>({evidence:a,target:e}))):ut(i.value,e,void 0,`update`,r,a)}function ut(e,t,n,r,i,a){if(e.kind!==`failed`)return e;let o=b(t,n,r,i,a);return{...o,...e,command:e.command??i,evidence:e.evidence??a,reason:e.reason.trim()?e.reason:o.reason,remediation:e.remediation??o.remediation}}function b(e,t,n,r,i,a){return{command:r,evidence:i,kind:`failed`,reason:`${e.id} ${n} failed${t?` for ${t}`:``}${a?`: ${a}`:``}`,remediation:`Review ${e.displayName} output and retry the operation.`,retryable:!1}}function dt(e,t){return[{kind:`provider`,value:e},{kind:`command`,value:t.join(` `)}]}function ft(e,t){return{kind:`provider`,value:`${e}:${t}`}}function pt(e,t,n){return{kind:`package`,value:`${e}:${t}:${n}`}}function x(e){return{kind:`success`,value:e}}function S(e){return e.kind===`cask`?`cask`:`package`}const mt={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>ve(e.id,S(e),t),install:(e,t)=>qe(e.id,S(e),t),isAvailable:e=>tt(e),probePackagePresence:(e,t)=>se(e.id,S(e),t),uninstall:(e,t)=>Se(e.id,S(e),t),update:(e,t)=>xe(e.id,S(e),t),updateMany:(e,t)=>de(e.map(e=>({packageName:e.id,packageTargetKind:S(e)})),t)};function C(e,t){return[`brew`,e,...t.kind===`cask`?[`--cask`]:[],t.id]}function ht(e=mt){return _({commands:{install:e=>C(`install`,e),uninstall:e=>C(`uninstall`,e),update:e=>C(`upgrade`,e),updateMany:e=>[`brew`,`upgrade`,...e.flatMap(e=>C(`upgrade`,e).slice(2))]},displayName:`Homebrew`,executable:`brew`,id:`brew`},e)}const gt=ht();function _t(e,t){let n=k(`provider`,e.id),r=async n=>{let r=await w(n.context,t.contextualPackageObservation,()=>t.probePackagePresence(n.target.id,n.context));if(f(r))return p(r);if(r.kind===`rejected`||r.value===`unknown`)return{evidence:[k(`provider`,`${e.id}:${n.target.id}:presence-unknown`)],kind:`indeterminate`,reason:`${e.id} could not determine whether ${n.target.id} is installed`};if(r.value===`absent`)return A({evidence:[k(`package`,`${e.id}:${n.target.id}:absent`)],kind:`absent`,target:n.target});let i=await w(n.context,t.contextualPackageObservation,()=>t.getInstalledVersion(n.target.id,n.context));if(f(i))return p(i);let a=i.kind===`resolved`?i.value:void 0;return A({evidence:[k(`package`,a?`${e.id}:${n.target.id}@${a}`:`${e.id}:${n.target.id}:present`)],kind:`present`,target:n.target,...a?{version:a}:{}})};return{availability:async n=>{let r=await w(n,t.contextualPackageObservation,()=>t.isAvailable(n));return f(r)?p(r):r.kind===`rejected`||!r.value?{kind:`unavailable`,reason:`${e.id} executable is unavailable`}:A({executable:e.executable})},id:e.id,install:n=>{let r=O(n.options),i=e.commands.install(n.target,r);return E(e,n.context,n.target,i,t.contextualMutation,()=>t.install(n.target.id,n.options?.distTag,r.registry,n.context))},observe:r,resolveLatestVersion:async r=>{let i=O(r.options),a=await m(r.context,()=>t.resolveLatestVersion(r.target.id,i.distTag,i.registry));return f(a)?p(a):a.kind===`rejected`||!a.value?{evidence:[n],kind:`indeterminate`,reason:`${e.id} could not resolve the ${i.distTag} version for ${r.target.id}`}:A({evidence:[n,k(`package`,`${e.id}:${r.target.id}@${i.distTag}=${a.value}`)],version:a.value})},uninstall:n=>{let r=e.commands.uninstall(n.target);return E(e,n.context,n.target,r,t.contextualMutation,()=>t.uninstall(n.target.id,n.context,n.target))},update:n=>{let r=O(n.options),i=e.commands.update(n.target,r);return E(e,n.context,n.target,i,t.contextualMutation,()=>t.update(n.target.id,r.updateStrategy,r.distTag,r.registry,n.context))},updateMany:n=>vt(e,t,n),verify:async t=>{let n=await r(t);return n.kind===`success`?n.value.kind===`absent`?A({evidence:n.value.evidence??[],kind:`unsatisfied`,reason:`${t.target.id} is not installed through ${e.id}`}):A({evidence:n.value.evidence??[],kind:`satisfied`}):n}}}function w(e,t,n){return t?h(e,n):m(e,n)}function T(e,t,n){return t?h(e,n):m(e,n)}async function vt(e,t,n){let r=O(n.options),i=e.commands.updateMany(n.targets,r),a=[k(`provider`,e.id),k(`command`,i.join(` `))],o=await T(n.context,t.contextualMutation,()=>t.updateMany(n.targets.map(e=>e.id),r.updateStrategy,n.context));return f(o)?p(o):o.kind===`rejected`?D(e,i,a,`update-many`,void 0,o.reason):o.value.kind===`success`?A(n.targets.map(e=>({evidence:a,target:e}))):yt(o.value,e,i,a,`update-many`)}async function E(e,t,n,r,i,a){let o=await T(t,i,a);if(f(o))return p(o);let s=[k(`provider`,e.id),k(`command`,r.join(` `))];return o.kind===`rejected`?D(e,r,s,r[1]??`operation`,n.id,o.reason):o.value.kind===`success`?A({evidence:s,target:n}):yt(o.value,e,r,s,r[1]??`operation`,n.id)}function yt(e,t,n,r,i,a){if(e.kind!==`failed`)return e;let o=D(t,n,r,i,a);return{...o,...e,command:e.command??n,evidence:e.evidence??r,reason:e.reason.trim()?e.reason:o.reason,remediation:e.remediation??o.remediation}}function D(e,t,n,r,i,a){let o=r===`add`?`install`:r===`remove`?`uninstall`:r;return{command:t,evidence:n,kind:`failed`,reason:`${e.id} ${o} failed${i?` for ${i}`:``}${a?`: ${a}`:``}`,remediation:`Review ${e.displayName} output and retry the operation.`,retryable:!1}}function O(e){return{distTag:e?.distTag??`latest`,distTagExplicit:e?.distTag!==void 0,registry:it(e?.registry),updateStrategy:e?.updateStrategy??`latest-major`}}function k(e,t){return{kind:e,value:t}}function A(e){return{kind:`success`,value:e}}const bt={install:(e,t)=>[`bun`,`add`,`-g`,...t.registry?[`--registry`,t.registry]:[],t.distTagExplicit?`${e.id}@${t.distTag}`:e.id],uninstall:e=>[`bun`,`remove`,`-g`,e.id],update:(e,t)=>[`bun`,`update`,`-g`,...t.updateStrategy===`latest-major`?[`--latest`]:[],...t.registry?[`--registry`,t.registry]:[],t.distTag===`latest`?e.id:`${e.id}@${t.distTag}`],updateMany:(e,t)=>[`bun`,`update`,`-g`,...t.updateStrategy===`latest-major`?[`--latest`]:[],...e.map(e=>e.id)]},xt={contextualMutation:!0,contextualPackageObservation:!0,getInstalledVersion:(e,t)=>n(e,t),install:(e,t,n,r)=>ae(e,t,n,r),isAvailable:e=>Ze(e),probePackagePresence:(e,t)=>r(e,void 0,t),resolveLatestVersion:(e,t,n)=>u(e,t,{registry:n}),uninstall:(e,t,n)=>te(e,t,n?.binaryName),update:(e,t,n,r,i)=>a(e,t,n,r,i),updateMany:(e,t,n)=>s(e,t,n)};function St(e=xt){return _t({commands:bt,displayName:`Bun`,executable:`bun`,id:`bun`},e)}const Ct=St(),wt={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>me(e.id,t),install:(e,t)=>he(e.id,e.arguments?[...e.arguments]:void 0,t),isAvailable:e=>Je(e),probePackagePresence:(e,t)=>_e(e.id,t),uninstall:(e,t)=>ue(e.id,t),update:(e,t)=>pe(e.id,e.arguments?[...e.arguments]:void 0,t),updateMany:(e,t)=>fe(e.map(e=>({...e.arguments?{packageInstallArgs:[...e.arguments]}:{},packageName:e.id})),t)};function Tt(e,t=!1){return[`cargo`,`install`,e.id,...t?[`--force`]:[],...e.arguments??[]]}function Et(e=wt){return _({commands:{install:e=>Tt(e),uninstall:e=>[`cargo`,`uninstall`,e.id],update:e=>Tt(e,!0),updateMany:e=>[`cargo`,`install`,...e.flatMap(e=>[e.id,`--force`,...e.arguments??[]])]},displayName:`Cargo`,executable:`cargo`,id:`cargo`},e)}const Dt=Et(),Ot={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>be(c(e.id,e.binaryName),t),install:(e,t)=>le(e.id,e.arguments?[...e.arguments]:void 0,t),isAvailable:e=>et(e),probePackagePresence:(e,t)=>ge(c(e.id,e.binaryName),t),uninstall:(e,t)=>Ne(c(e.id,e.binaryName),t),update:(e,t)=>Me(e.id,e.arguments?[...e.arguments]:void 0,t),updateMany:(e,t)=>oe(e.map(e=>({...e.arguments?{packageInstallArgs:[...e.arguments]}:{},...e.binaryName?{binaryName:e.binaryName}:{},packageName:e.id})),t)};function kt(e,t=!1){return[`deno`,`install`,`--global`,...t?[`--force`]:[],...e.arguments??[],e.id]}function At(e=Ot){return _({commands:{install:e=>kt(e),uninstall:e=>[`deno`,`uninstall`,`--global`,c(e.id,e.binaryName)],update:e=>kt(e,!0),updateMany:e=>[`deno`,`install`,`--global`,`--force`,...e.flatMap(e=>[...e.arguments??[],e.id])]},displayName:`Deno`,executable:`deno`,id:`deno`},e)}const j=At(),jt={contextualExecution:!0,execute:(e,t)=>i(N(e,l()),t,`install effect failed`),isExecutablePresent:$e};function M(e,t={}){let n={...jt,...t,contextualExecution:t.execute?t.contextualExecution??!1:!0},r=async t=>{let r=t.target.binaryName;if(!r)return{evidence:[{kind:`provider`,value:`${e}:${t.target.id}:presence-unknown`}],kind:`indeterminate`,reason:`${e} candidate does not declare an executable presence probe`};let i=await m(t.context,()=>n.isExecutablePresent(r));return f(i)?p(i):i.kind===`rejected`?{kind:`failed`,reason:`${e} executable probe failed for ${t.target.id}: ${i.reason}`,retryable:!0}:{kind:`success`,value:{evidence:[{kind:`executable`,value:r}],kind:i.value?`present`:`absent`,target:t.target}}};return{availability:async e=>Nt(e),id:e,install:async t=>{let r=t.target.effect;if(!r)return{kind:`failed`,reason:`${e} install target ${t.target.id} has no execution effect`,remediation:`Select a candidate with an explicit shell-script or executable effect.`,retryable:!1};let i=await Mt(t.context,n.contextualExecution,()=>n.execute(r,t.context));if(f(i))return p(i);let a=N(r,l()),o=Pt(e,a);if(i.kind===`rejected`)return{command:a,evidence:o,kind:`failed`,reason:`${e} install failed for ${t.target.id}: ${i.reason}`,remediation:`Review the installer output and upstream installation instructions.`,retryable:!1};let s=i.value;return s.kind===`success`?{kind:`success`,value:{evidence:o,target:t.target}}:s.kind===`failed`?{...s,command:s.command??a,evidence:s.evidence??o,remediation:s.remediation??`Review the installer output and upstream installation instructions.`}:s},observe:r,verify:async t=>{let n=await r(t);return n.kind===`success`?n.value.kind===`absent`?{kind:`success`,value:{evidence:n.value.evidence??[],kind:`unsatisfied`,reason:`${t.target.id} is not installed through ${e}`}}:{kind:`success`,value:{evidence:n.value.evidence??[],kind:`satisfied`}}:n}}}function Mt(e,t,n){return t?h(e,n):m(e,n)}function N(e,t){return e.kind===`executable`?e.command:t===`windows`?[`powershell.exe`,`-Command`,e.command]:[`sh`,`-c`,e.command]}async function Nt(e){return e.signal.aborted?{kind:`cancelled`,reason:String(e.signal.reason)}:{kind:`success`,value:{executable:l()===`windows`?`powershell.exe`:`sh`}}}function Pt(e,t){return[{kind:`provider`,value:e},{kind:`command`,value:t.join(` `)}]}const P=M(`script`),F=M(`binary`),Ft={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>Ke(e.id,t),install:(e,t)=>Te(e.id,t),isAvailable:e=>nt(e),probePackagePresence:(e,t)=>Ge(e.id,t),uninstall:(e,t)=>ye(e.id,t),update:(e,t)=>We(e.id,t),updateMany:(e,t)=>ce(e.map(e=>({packageName:e.id})),t)};function I(e,t=!1){return[`mise`,`use`,`--global`,...t?[`--force`]:[],e.id]}function It(e=Ft){return _({commands:{install:e=>I(e),uninstall:e=>[`mise`,`unuse`,`--global`,e.id],update:e=>I(e,!0),updateMany:e=>[`mise`,`use`,`--global`,`--force`,...e.map(e=>e.id)]},displayName:`mise`,executable:`mise`,id:`mise`},e)}const L=It(),Lt={install:(e,t)=>[`npm`,`install`,`-g`,t.distTagExplicit?`${e.id}@${t.distTag}`:e.id,...t.registry?[`--registry`,t.registry]:[]],uninstall:e=>[`npm`,`uninstall`,`-g`,e.id],update:(e,t)=>t.updateStrategy===`latest-major`?[`npm`,`install`,`-g`,`${e.id}@${t.distTag}`,...t.registry?[`--registry`,t.registry]:[]]:[`npm`,`update`,`-g`,e.id,...t.registry?[`--registry`,t.registry]:[]],updateMany:(e,t)=>t.updateStrategy===`latest-major`?[`npm`,`install`,`-g`,...e.map(e=>`${e.id}@latest`)]:[`npm`,`update`,`-g`,...e.map(e=>e.id)]},Rt={contextualMutation:!0,contextualPackageObservation:!0,getInstalledVersion:(e,t)=>ie(e,t),install:(e,t,n,r)=>ne(e,t,n,r),isAvailable:e=>Ye(e),probePackagePresence:(e,t)=>o(e,t),resolveLatestVersion:(e,t,n)=>u(e,t,{registry:n}),uninstall:(e,n)=>t(e,n),update:(e,t,n,r,i)=>re(e,t,n,r,i),updateMany:(e,t,n)=>ee(e,t,n)};function zt(e=Rt){return _t({commands:Lt,displayName:`npm`,executable:`npm`,id:`npm`},e)}const R=zt(),Bt={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>Re(e.id,t),install:(e,t)=>Fe(e.id,t),isAvailable:e=>Qe(e),probePackagePresence:(e,t)=>Ae(e.id,t),uninstall:(e,t)=>ke(e.id,t),update:(e,t)=>Ue(e.id,t),updateMany:(e,t)=>Ce(e.map(e=>({packageName:e.id})),t)};function Vt(e=Bt){return _({commands:{install:e=>[`pip`,`install`,e.id],uninstall:e=>[`pip`,`uninstall`,`-y`,e.id],update:e=>[`pip`,`install`,`--upgrade`,e.id],updateMany:e=>[`pip`,`install`,`--upgrade`,...e.map(e=>e.id)]},displayName:`pip`,executable:`pip`,id:`pip`},e)}const z=Vt(),Ht={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>Be(e.id,t),install:(e,t)=>Ee(e.id,e.arguments?[...e.arguments]:void 0,t),isAvailable:e=>rt(e),probePackagePresence:(e,t)=>Pe(e.id,t),uninstall:(e,t)=>He(e.id,t),update:(e,t)=>Oe(e.id,e.arguments?[...e.arguments]:void 0,t),updateMany:(e,t)=>De(e.map(e=>({...e.arguments?{packageInstallArgs:[...e.arguments]}:{},packageName:e.id})),t)};function B(e,t){return[`uv`,`tool`,e,t.id,...t.arguments??[]]}function Ut(e=Ht){return _({commands:{install:e=>B(`install`,e),uninstall:e=>[`uv`,`tool`,`uninstall`,e.id],update:e=>B(`upgrade`,e),updateMany:e=>[`uv`,`tool`,`upgrade`,...e.flatMap(e=>[e.id,...e.arguments??[]])]},displayName:`uv`,executable:`uv`,id:`uv`},e)}const V=Ut(),Wt={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>Ve(e.id,t),install:(e,t)=>Ie(e.id,t),isAvailable:e=>Xe(e),probePackagePresence:(e,t)=>ze(e.id,t),uninstall:(e,t)=>je(e.id,t),update:(e,t)=>Le(e.id,t),updateMany:(e,t)=>we(e.map(e=>({packageName:e.id})),t)};function H(e,t){return[`winget`,e,`--id`,t.id,`-e`]}function Gt(e=Wt){return _({commands:{install:e=>H(`install`,e),uninstall:e=>H(`uninstall`,e),update:e=>H(`upgrade`,e),updateMany:e=>[`winget`,`upgrade`,...e.flatMap(e=>[`--id`,e.id,`-e`])]},displayName:`winget`,executable:`winget`,id:`winget`},e)}const Kt=Gt(),qt=Object.freeze([`availability`,`observe`,`resolve-latest-version`,`install`,`update`,`update-many`,`uninstall`,`verify`]),Jt={availability:`availability`,install:`install`,observe:`observe`,"resolve-latest-version":`resolveLatestVersion`,uninstall:`uninstall`,update:`update`,"update-many":`updateMany`,verify:`verify`};function Yt(e){let t=new Map;for(let n of e){if(t.has(n.id))throw Error(`Duplicate provider adapter id: ${n.id}`);t.set(n.id,n)}let n=Object.freeze([...e]),r=new Map(n.map(e=>[e.id,Zt(e)]));return Object.freeze({get(e){return t.get(e)},getCapabilities(e){return r.get(e)??Object.freeze([])},list(){return n}})}function Xt(e){return Yt(at.map(t=>{let n=e[t];if(n.id!==t)throw Error(`Provider registry key ${t} does not match adapter id ${n.id}`);return n}))}function Zt(e){return Object.freeze(qt.filter(t=>typeof e[Jt[t]]==`function`))}const Qt=Xt({binary:F,brew:gt,bun:Ct,cargo:Dt,deno:j,mise:L,npm:R,pip:z,script:P,uv:V,winget:Kt}),$t=[{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/`,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`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`autohand-cli`,kind:`package`}}],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`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`autohand-cli`,kind:`package`}}],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`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`autohand-cli`,kind:`package`}}]}},{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`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`codewhale`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`codewhale`,kind:`package`}}]}},{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`}}],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`],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`],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:`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`,`installed-version`],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`,`installed-version`],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`,`installed-version`],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:`dsh`,lookupAliases:[`deepseek-harness`],displayName:`DeepSeek Harness`,homepage:`https://github.com/deepseek-ai/deepseek-harness`,binaryName:`dsh`,versionProbe:{command:[`dsh`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@deepseek-ai/dsh`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@deepseek-ai/dsh`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@deepseek-ai/dsh`,kind:`package`}}]}},{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:`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`,`installed-version`],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`,`installed-version`],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`,`installed-version`],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`,`installed-version`],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:`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`],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`],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`],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`,versionProbe:{command:[`openhands`,`--version`]},platforms:{macos:[{probes:[`executable-presence`,`installed-version`],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:[{probes:[`executable-presence`,`installed-version`],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:{macos:[{probes:[`executable-presence`,`installed-version`],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`}}}],linux:[{probes:[`executable-presence`,`installed-version`],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`}}}]}}],U=d.string().min(1),W=d.array(U).min(1);d.enum([`windows`,`macos`,`linux`]);const en=d.enum([`bun`,`npm`,`brew`,`cargo`,`deno`,`mise`,`pip`,`uv`,`winget`]),tn=d.enum([`package`,`cask`,`id`]),G={binaryName:U.optional(),packageInstallArgs:d.array(U).min(1).optional(),packageName:U.optional(),packageTargetKind:tn.optional()},nn=d.object({...G,type:en}).strict(),rn=d.object({...G,command:U,type:d.literal(`script`)}).strict(),an=d.object({...G,command:U,type:d.literal(`binary`)}).strict(),K=d.discriminatedUnion(`type`,[nn,rn,an]),on=d.enum([`executable-presence`,`installed-version`,`package-presence`,`target-version`]),sn=d.array(on).min(1).refine(e=>new Set(e).size===e.length,{message:`candidate probes must be unique`}).optional(),cn=d.object({command:W,kind:d.literal(`executable`)}).strict(),ln=d.object({command:U,kind:d.literal(`shell-script`)}).strict(),un=d.discriminatedUnion(`kind`,[cn,ln]);function q(e,t={}){return d.object({arguments:d.array(U).min(1).optional(),binaryName:U.optional(),...t.effect?{effect:un}:{},id:U,kind:d.literal(e)}).strict()}function J(e,t){return d.object({legacy:d.object({packageNameInMethod:d.literal(!0).optional()}).strict().optional(),probes:sn,provider:d.literal(e),target:t}).strict()}const dn=d.discriminatedUnion(`provider`,[J(`bun`,q(`package`)),J(`npm`,q(`package`)),J(`brew`,d.union([q(`formula`),q(`cask`)])),J(`cargo`,q(`package`)),J(`deno`,q(`tool`)),J(`mise`,q(`tool`)),J(`pip`,q(`package`)),J(`uv`,q(`tool`)),J(`winget`,q(`id`)),J(`script`,q(`script`,{effect:!0})),J(`binary`,q(`binary`,{effect:!0}))]),Y=d.union([K,dn]),fn=d.object({linux:d.array(Y).min(1).optional(),macos:d.array(Y).min(1).optional(),windows:d.array(Y).min(1).optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`platforms must include at least one supported platform`}),pn=d.object({cargo:U.optional(),deno:U.optional(),mise:U.optional(),npm:U.optional(),pip:U.optional(),uv:U.optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`packages must include at least one package identifier`}),mn=d.object({command:W,fallbackCommands:d.array(W).min(1).optional(),versionAfter:d.enum([`same-process`,`respawn`]).optional()}).strict(),hn=d.object({command:W.optional()}).strict().refine(e=>e.command!==void 0,{message:`versionProbe must include a serializable command`}),gn=d.object({linux:d.array(K).min(1).optional(),macos:d.array(K).min(1).optional(),windows:d.array(K).min(1).optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`platforms must include at least one supported platform`}),X=d.object({binaryName:U,displayName:U,homepage:d.url().startsWith(`https://`),lookupAliases:d.array(U).min(1).optional(),name:U.regex(/^[a-z0-9][a-z0-9-]*$/),packages:pn.optional(),platforms:gn,selfUpdate:mn.optional(),versionProbe:hn.optional()}).strict(),_n=X.extend({platforms:fn}).strict(),vn=d.array(_n).min(1),yn=d.array(X).min(1),bn={...ot(yn),$id:`https://github.com/Drswith/quantex-cli/schemas/agent-catalog.schema.json`,title:`Quantex Supported Agent Catalog`},xn={},Sn=vn.parse($t).map(Q),Cn=new Map(Sn.map(e=>[e.name,e]));function wn(){return Sn}function Z(e){let t=Cn.get(e);if(!t)throw Error(`Unknown catalog agent: ${e}`);return t}function Q(e){let t=xn[e.name],n=An(e.versionProbe,t),r=En(e),i=Object.fromEntries(Object.entries(e.platforms).map(([e,t])=>[e,t?.map(Tn)]));return{...e,...r?{packages:r}:{},platforms:i,versionProbe:n}}function Tn(e){if(`type`in e)return e;let{provider:t,target:n}=e;if(t===`script`||t===`binary`){let e=n.effect;if(!On(e))throw Error(`${t} catalog candidate requires an execution effect`);let r=e.kind===`shell-script`?e.command:kn(e.command);return{...n.binaryName?{binaryName:n.binaryName}:{},command:r,type:t}}let r=Dn(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 En(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=Dn(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 Dn(e){if(e===`bun`||e===`npm`)return`npm`;if(e===`cargo`||e===`deno`||e===`mise`||e===`pip`||e===`uv`)return e}function On(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 kn(e){return e.map(e=>e.includes(` `)?JSON.stringify(e):e).join(` `)}function An(e,t){if(!(!e&&!t?.versionProbeParser))return{...e,...t?.versionProbeParser?{parser:t.versionProbeParser}:{}}}Z(`amp`),Z(`antigravity`),Z(`auggie`);const jn=Z(`autohand`),Mn=Z(`claude`),Nn=Z(`codebuddy`),Pn=Z(`codewhale`),Fn=Z(`codex`);Z(`commandcode`);const In=Z(`copilot`);Z(`crush`);const Ln=Z(`cursor`),Rn=Z(`devin`),zn=Z(`droid`);Z(`dsh`);const Bn=Z(`gemini`);Z(`goose`);const Vn=Z(`grok`),Hn=Z(`hermes`),Un=Z(`junie`),Wn=Z(`kilo`);Z(`kimi`),Z(`kiro`);const Gn=Z(`mimo`),Kn=Z(`omp`),qn=Z(`openclaw`),Jn=Z(`opencode`),Yn=Z(`openhands`),Xn=Z(`pi`),Zn=Z(`qoder`);Z(`qwen`);const Qn=Z(`reasonix`),$n=Z(`vibe`),[er,tr,nr,rr]=vn.parse([{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:`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:`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:`vtcode`,displayName:`VTCode`,homepage:`https://github.com/vinhnx/vtcode`,binaryName:`vtcode`,selfUpdate:{command:[`vtcode`,`update`]},versionProbe:{command:[`vtcode`,`--version`]},platforms:{windows:[{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`}}},{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`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`vtcode`,kind:`formula`}}]}}]),ir=Q(er),ar=Q(tr),or=Q(nr),sr=Q(rr);Object.freeze([`deepcode`,`genie`,`jcode`,`vtcode`]);const $=wn();function cr(){return $}function lr(e){let t=$.find(t=>t.name===e||(t.lookupAliases?.includes(e)??!1));if(t)return t;let n=dr(e);return $.find(e=>dr(e.displayName)===n)}function ur(e){return lr(e)}function dr(e){return e.trim().toLowerCase()}export{$n as A,R as B,Kn as C,Xn as D,Yn as E,yn as F,Dt as G,F as H,Qt as I,Ct as K,Kt as L,wn as M,X as N,Zn as O,bn as P,V as R,Gn as S,Jn as T,P as U,L as V,j as W,Bn as _,ar as a,Un as b,jn as c,Pn as d,Fn as f,zn as g,Rn as h,ir as i,Z as j,Qn as k,Mn as l,Ln as m,ur as n,or as o,In as p,gt as q,cr as r,sr as s,lr as t,Nn as u,Vn as v,qn as w,Wn as x,Hn as y,z};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./detect-BUVMt8jZ.mjs";import{r as t}from"./agents-
|
|
1
|
+
import{t as e}from"./detect-BUVMt8jZ.mjs";import{r as t}from"./agents-DVl7Dw3L.mjs";import{G as n,i as r,n as i,s as a}from"./output-B1HrihiQ.mjs";import{i as o,n as s,r as c,t as l}from"./human-BL2-F6cA.mjs";import{t as u}from"./cli-operation-context-BS5a069W.mjs";import{n as d,t as f}from"./provider-observations-CidUOQCM.mjs";import{t as p}from"./color-iQl4CJwm.mjs";import m from"node:process";function h(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 g(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 _(){let n=u(),o,s;try{[o,s]=await n.run(()=>Promise.all([f({context:n.context}),a({context:n.context})]))}finally{n.dispose()}let c=d(o,e=>{let t=e.availability.kind===`success`;return{available:t,reason:t?void 0:v(e.id)}}),l=g(h(),{canAutoUpdateSelf:s.canAutoUpdate});return r(i({action:`capabilities`,data:{agents:t().map(e=>e.name),features:l,installers:c,outputModes:[`human`,`json`,`ndjson`],platform:{arch:m.arch,os:e()}},target:{kind:`system`,name:`capabilities`}}),y)}function v(e){return e===`winget`&&m.platform!==`win32`||e===`brew`&&m.platform===`win32`?`not-on-platform`:`not-found`}function y(e){if(!e.data)return;let t=l();console.log(p.bold(`
|
|
2
2
|
Quantex Capabilities
|
|
3
3
|
`));for(let n of s([{label:`Platform`,value:`${e.data.platform.os}/${e.data.platform.arch}`},{label:`Output`,value:e.data.outputModes.join(`, `)},{label:`Agents`,value:`${e.data.agents.length} registered (qtx list)`}],{labelStyle:p.bold,width:t}))console.log(n);let n=Object.entries(e.data.installers).map(([e,t])=>({availability:t,name:e}));console.log(p.bold(`
|
|
4
4
|
Installers
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./capabilities-Cbc4xb9t.mjs";export{e as capabilitiesCommand};
|
package/dist/cli.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{n as e}from"./child-process-DzIdysOm.mjs";import{s as t}from"./file-store-XNyirRRY.mjs";import{n}from"./agents-vJvtQ83q.mjs";import{a as r,n as i,o as a,s as o,t as s}from"./cli-context-DI43ouBg.mjs";import{C as c,G as l,K as u,Y as d,_ as f,b as p,et as m,i as h,n as ee,p as te,q as ne,r as g,t as _,v as re,w as v}from"./output-pOJ9U7C5.mjs";import{a as ie,o as ae}from"./providers-Cm4gsCbZ.mjs";import{t as oe}from"./cli-operation-context-BS5a069W.mjs";import{t as y}from"./color-iQl4CJwm.mjs";import{t as se}from"./agent-installation-BIf8WGed.mjs";import{t as ce}from"./lifecycle-observations-v4Yw4tS3.mjs";import{n as le}from"./lifecycle-errors-BtlAp_sz.mjs";import{a as ue,i as b,n as de,o as x,r as S,t as fe}from"./user-output-DLbKXqDm.mjs";import{n as C,t as pe}from"./errors-fT9JApTf.mjs";import{n as me,t as he}from"./version-cache-jjIoeyWQ.mjs";import{d as w,f as T,i as E,n as ge,o as _e,t as ve}from"./lifecycle-policy-BZ0wnnRm.mjs";import{join as D}from"node:path";import O from"node:process";import{mkdir as ye,readFile as be,rename as xe,rm as k,writeFile as A}from"node:fs/promises";import{createHash as j,randomUUID as M}from"node:crypto";import{Command as Se}from"commander";import Ce from"prompts";function we(e){return e.executable.present?{decision:e.dryRun?`dry-run`:`launch`}:e.installPolicy===`never`?{decision:`reject`,errorCode:`AGENT_NOT_INSTALLED`}:e.installPolicy===`prompt`&&!e.interactive?{decision:`reject`,errorCode:`INTERACTION_REQUIRED`}:e.dryRun?{decision:`dry-run`}:{decision:e.installPolicy===`prompt`?`prompt-install`:`install-and-launch`}}async function Te(e,t){let n=await t.observe(e.agentName);if(n.kind===`failure`)return{error:n.error,kind:`observation-failed`};if(!n.value)return{kind:`not-found`};let r=n.value,i=we({dryRun:t.dryRun,executable:r.executable,installPolicy:e.installPolicy,interactive:t.interactive,observation:r.observation});if(i.decision===`reject`)return i.errorCode===`AGENT_NOT_INSTALLED`?{kind:`not-installed`,observed:r}:{kind:`interaction-required`,observed:r};let a=()=>[r.executable.path??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:s,createObservationService:ce,createOperationContext:oe,createProcessPort:me,reconcileAgentInstallation:se};function ke(e,t=Oe){let n=t.createOperationContext(),r=t.createObservationService(n.context,{resolveLatestVersion:!1}),i=t.createProcessPort();return{dispose:n.dispose,execute:a=>Te(a,{confirmInstall:e.confirmInstall,dryRun:e.dryRun,install:n=>je(n,e.timeoutMs,t),interactive:e.interactive,observe:e=>Ae(e,r),onInstallStart:e.onInstallStart,outputMode:e.outputMode,process:i,signal:n.context.signal,timeoutMs:e.timeoutMs})}}async function Ae(e,t){try{let n=await t.resolveAgentObservation(e);return{kind:`success`,value:n?{agent:n.agent,executable:n.pathExecutable,installedState:n.installedState,methods:n.methods,observation:n.observation}:void 0}}catch(e){return{error:Ne(e),kind:`failure`}}}async function je(t,n,r){try{if(t.executable.present)return{kind:`success`,value:void 0};let e=await Me(r.reconcileAgentInstallation({agent:t.agent,observation:{inPath:t.executable.present,installedState:t.installedState,lifecycle:t.observation,methods:t.methods},operation:`install`,route:`install`}),n,r.cancelOperations);return e?e.kind===`success`?{kind:`success`,value:void 0}:e:{kind:`timed-out`,timeoutMs:n}}catch(t){return e(t)?t.kind===`timed-out`?{kind:`timed-out`,timeoutMs:n??0}:{kind:`cancelled`,reason:t.message}:{kind:`failed`,reason:N(t,`Failed to install agent.`),retryable:!1}}}async function Me(e,t,n){if(t===void 0)return e;let r;try{let i=await Promise.race([e.then(e=>({kind:`completed`,value:e})),new Promise(e=>{r=setTimeout(()=>e({kind:`timed-out`}),t)})]);if(i.kind===`completed`)return i.value;let a=await Pe(e,Math.max(1,Math.min(t,250)));if(a!==void 0)return a;await n();return}finally{r&&clearTimeout(r)}}function Ne(t){return t instanceof p?{code:`STATE_READ_ERROR`,details:{stateFilePath:v()},kind:`invalid-data`,message:t.message}:e(t)?{kind:t.kind,message:t.message}:{kind:`failed`,message:N(t,`Failed to observe agent execution state.`)}}function N(e,t){return e instanceof Error&&e.message.trim()?e.message:t}async function Pe(e,t){let n;try{return await Promise.race([e,new Promise(e=>{n=setTimeout(()=>e(void 0),t)})])}finally{n&&clearTimeout(n)}}function P(){return D(t(),`idempotency`)}function F(e){return D(P(),`${Ie(e)}.json`)}async function I(e,t={}){let n=F(e),r;try{r=await be(n,`utf8`)}catch(e){if(Re(e)&&e.code===`ENOENT`)return{kind:`missing`};throw e}let i;try{i=JSON.parse(r)}catch{return{kind:`invalid`,reason:`invalid-json`}}let a=w(i);return a.kind===`invalid`?a:Date.parse(a.record.expiresAt)<=L(t).getTime()?(await k(n),{kind:`expired`,record:a.record}):a}async function Fe(e,t,n={}){let r=L(n),i=n.ttlMs??864e5,a=w({...t,createdAt:r.toISOString(),expiresAt:new Date(r.getTime()+i).toISOString(),schemaVersion:1});if(a.kind===`invalid`)throw TypeError(`Invalid versioned idempotency record: ${a.reason}`);let o=P(),s=F(e),c=`${s}.${process.pid}.${M()}.tmp`,l=n.fileSystem?.writeFile??A;await ye(o,{recursive:!0});try{await l(c,Le(a.record),`utf8`),await xe(c,s)}catch(e){throw await k(c,{force:!0}),e}}function Ie(e){return j(`sha256`).update(e,`utf8`).digest(`hex`)}function L(e){let t=e.now?.()??new Date;if(!Number.isFinite(t.getTime()))throw TypeError(`Idempotency clock must return a valid date.`);return t}function Le(e){return`${JSON.stringify(e,(e,t)=>typeof t!=`object`||!t||Array.isArray(t)?t:Object.fromEntries(Object.keys(t).sort().map(e=>[e,t[e]])),2)}\n`}function Re(e){return e instanceof Error&&`code`in e}async function ze(e){let t=T(e.request),n=T(e.resolvedPlan);switch(e.loaded.kind){case`missing`:return{fingerprints:z(t,n),kind:`reconcile`,reason:`missing`};case`expired`:return{fingerprints:R(e.loaded.record,t,n),kind:`reconcile`,reason:`expired`};case`invalid`:return{fingerprints:z(t,n),invalidReason:e.loaded.reason,kind:`reject`,reason:`invalid-evidence`};case`valid`:return Be(e,e.loaded.record,t,n)}}async function Be(e,t,n,r){let i=R(t,n,r);if(t.request.fingerprint!==n)return{fingerprints:i,kind:`reject`,reason:`request-mismatch`};if(t.resolvedPlan.fingerprint!==r)return{fingerprints:i,kind:`reconcile`,reason:`resolved-plan-changed`};switch((await e.validateLive({postcondition:t.postcondition.payload,receipt:t.receipt.payload})).kind){case`satisfied`:return{fingerprints:i,kind:`replay`,result:structuredClone(t.result)};case`drifted`:return{fingerprints:i,kind:`reconcile`,reason:`live-drifted`};case`inconclusive`:return{fingerprints:i,kind:`reconcile`,reason:`live-inconclusive`}}}function R(e,t,n){return{existingPlan:e.resolvedPlan.fingerprint,existingRequest:e.request.fingerprint,requestedPlan:n,requestedRequest:t}}function z(e,t){return{existingPlan:void 0,existingRequest:void 0,requestedPlan:t,requestedRequest:e}}const Ve=new Set([`doctor`,`upgrade`]);async function He(e,t={cache:he(),getSelfState:c,now:Date.now,resolveFacts:re}){if(!e.ok||Ve.has(e.action))return;let n=i();if(n.outputMode!==`human`||n.quiet)return;let r=await t.resolveFacts(),a=t.now(),o=await te({cache:t.cache,facts:r,nowMs:a,signal:new AbortController().signal});if(!o||!m(o.targetVersion,r.currentVersion))return;let s=await t.getSelfState();Ue(s.updateNoticeVersion,s.updateNoticeAt,o.targetVersion,a)||b(y.yellow(`Quantex CLI ${o.targetVersion} is available (current ${r.currentVersion}). Run \`quantex upgrade\`.`))}function Ue(e,t,n,r){if(!e||!t||e!==n)return!1;let i=Date.parse(t);return Number.isNaN(i)?!1:r-i<864e5}function We(e){return e.warnings.some(e=>e.code===`DRY_RUN`)}async function Ge(e){try{return await B(e)}catch(t){if(t instanceof p)return Xe(e,t);throw t}}async function B(e){return rt(e,()=>Ke(e))}async function Ke(e){let t=i().timeoutMs,n={expired:!1},r=!1,a,o=async()=>{let o=await Je(e,()=>n.expired);return n.expired&&t!==void 0?G(e,t):o.replayedResult?(r=!0,o.replayedResult):(a={action:e.action,...o.policy?{idempotencyPolicy:o.policy}:{},run:e.run,...e.target?{target:e.target}:{}},i().cancelled?Ye(e):e.run())},s=t===void 0?await o():await qe(e,o,t,n);return r||!a?s:Qe(a,s)}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=i();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:h(H(e,n.idempotencyKey,r.reason),V,{force:!0})};let a=typeof e.idempotencyPolicy==`function`?await e.idempotencyPolicy():e.idempotencyPolicy;if(n.cancelled||t())return{};let o=await ze({loaded:r,request:a.request,resolvedPlan:a.resolvedPlan,validateLive:a.validateLive});if(n.cancelled||t())return{};if(o.kind===`reconcile`)return{policy:a};if(o.kind===`reject`)return{replayedResult:tt(e,n.idempotencyKey,o,r)};let s=nt(o.result);return h(s,V,{force:!0}),{replayedResult:s}}function Ye(e){return _({action:e.action,error:{code:`CANCELLED`,message:`Command was cancelled before execution could start.`},target:e.target})}async function Xe(e,t){return h(_({action:e.action,...le(t,v(),e.target)}),Ze)}function Ze(e){e.error&&console.error(y.red(e.error.message))}async function Qe(e,t){if(i().cancelled)return t;let n=await $e(e,t);try{await He({action:e.action,ok:n.ok})}catch{}return n}function V(e){e.error&&console.error(y.red(e.error.message))}async function $e(e,t){let n=i();if(!n.idempotencyKey||!W(e.action)||!t.ok||n.dryRun||We(t)||!e.idempotencyPolicy)return t;let r=await e.idempotencyPolicy.captureEvidence(t);if(!r)return t;let a=await I(n.idempotencyKey);return et(e,n.idempotencyKey,a)||(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=T(e.idempotencyPolicy.request);if(n.kind===`invalid`)return h(H(e,t,n.reason),V,{force:!0});if(!(n.kind!==`valid`||n.record.request.fingerprint===r))return 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`?h(H(e,t,n.invalidReason),V,{force:!0}):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 _({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=i();return{...e,meta:{...e.meta,mode:t.outputMode,runId:t.runId,timestamp:new Date().toISOString()}}}function U(e){return{fingerprint:T(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`);O.once(`SIGINT`,a),O.once(`SIGTERM`,o),r=()=>{O.off(`SIGINT`,a),O.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(t,n){try{return await t()}catch(t){if(e(t)&&t.kind===`timed-out`||i().cancelled)return n();throw t}}async function ot(e,t){try{let n=await e(),r=t();return i().cancelled&&r?r:n}catch(e){let n=t();if(i().cancelled&&n)return n;throw e}}function G(e,t){return _({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 s(),g({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),h(G(e,t),V,{force:!0})}async function ct(e,t){return await s(),g({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),h(_({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),V,{force:!0})}const lt={cancelOperations:s,createExecutionService:ke};async function K(e,t,n={},r=lt){let a=i(),o=n.nonInteractive?!1:a.interactive,s=n.assumeYes??fe(),c=n.dryRun??de(),l=n.install??`prompt`,u,d=r.createExecutionService({confirmInstall:async e=>s?!0:!!(await Ce({initial:!0,message:`${e.agent.displayName} is not installed. Would you like to install it?`,name:`install`,type:`confirm`})).install,dryRun:c,interactive:o,onInstallStart:e=>{b(y.cyan(`Installing ${e.agent.displayName}...`))},outputMode:a.outputMode,timeoutMs:a.timeoutMs}),f=e=>{u??=e,r.cancelOperations()},p=()=>f(`SIGINT`),m=()=>f(`SIGTERM`);O.once(`SIGINT`,p),O.once(`SIGTERM`,m);try{return ut(await d.execute({agentName:e,args:t,installPolicy:l}),{agentName:e,args:t,cancellationSignal:u,installPolicy:l,interactive:o})}finally{O.off(`SIGINT`,p),O.off(`SIGTERM`,m),d.dispose()}}function 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)}),C(`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)}}),C(i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`)}switch(e.kind){case`install-declined`:return ue(y.yellow(`Installation cancelled.`)),1;case`install-failed`:return S(y.red(`Failed to install ${r.displayName}.`)),C(`INSTALL_FAILED`);case`dry-run`:return e.wouldInstall&&x(y.cyan(`Dry run: would install ${r.displayName}.`)),mt({agent:r,execution:q(t,!0),message:`Dry run: would run ${e.argv.join(` `)}`}),0;case`launch-failed`:return S(y.red(`Failed to launch ${r.displayName}: ${e.reason}`)),1;case`cancelled`:return S(y.red(t.cancellationSignal?`${r.displayName} was cancelled by ${t.cancellationSignal}.`:`${r.displayName} was cancelled.`)),C(`CANCELLED`);case`timed-out`:return S(y.red(e.phase===`install`?`Installing ${r.displayName} timed out after ${e.timeoutMs}ms.`:`${r.displayName} timed out after ${e.timeoutMs}ms.`)),C(`TIMEOUT`);case`exited`:return e.exitCode}}function 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 i().outputMode===`human`?S(y.red(t.message)):h(_({action:`exec`,error:{code:n,details:t.details,message:t.message},target:{kind:`agent`,name:e}}),()=>{}),C(n)}function ft(e){return e!==void 0&&pe.includes(e)}function pt(e,t,n){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:ie(e,t),label:ae(t),type:t.type})).filter(e=>e.command),suggestedAction:`rerun-with-install-policy`,suggestedEnsureCommand:`quantex ensure ${e.name}`,suggestedExecCommand:[`quantex`,`exec`,e.name,`--install`,`if-missing`,`--`,...n].join(` `)}}function J(e){if(i().outputMode===`human`){S(y.red(e.errorMessage));let t=e.execution.installGuidance;t&&(x(y.dim(`Try: ${t.suggestedEnsureCommand}`)),x(y.dim(`Or: ${t.suggestedExecCommand}`)));return}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(i().outputMode===`human`){x(y.cyan(e.message));return}h(ee({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-dq2H2h0T.mjs`);await Y({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})},commands:async()=>{let{commandsCommand:e}=await import(`./commands-V3_i42ap.mjs`);await Y({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})},config:async(...e)=>{let{configCommand:t}=await import(`./config-IDvuzbXN.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-C2XDBGvH.mjs`);await Y({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})},ensure:async(...e)=>{let t=e[0],[{ensureCommandWithRoute:n},{selectInstallationEngineRoute:r}]=await Promise.all([import(`./ensure-D5UxE-xc.mjs`),import(`./installation-routing-B1snz7YR.mjs`)]),i=r(`ensure`);await Y({action:`ensure`,idempotencyPolicy:()=>E(`ensure`,t),run:()=>n(t,i),target:{kind:`agent`,name:t}})},exec:async(...e)=>{let[t,n,r,i]=e,a=r.install??`never`;if(a!==`never`&&a!==`if-missing`&&a!==`always`){O.stdout.write(`${y.red(`Unknown install policy: ${a}`)}\n`),O.exitCode=2;return}let o=_t(i);O.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-BwGWPWwX.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-Jra1x8Xy.mjs`);await Y({action:`inspect`,run:()=>n(t),target:{kind:`agent`,name:t}})},install:async(...e)=>{let[{installCommandWithRoute:t},{selectInstallationEngineRoute:n}]=await Promise.all([import(`./install-vhY8vk_J.mjs`),import(`./installation-routing-B1snz7YR.mjs`)]),r=n(`install`),i=_e(e[0]),a=i.length===1;await Y({action:`install`,...a?{idempotencyPolicy:()=>E(`install`,i[0])}:{idempotencyPolicy:()=>ge(i)},run:()=>t(i,r),target:a?{kind:`agent`,name:i[0]}:{kind:`agent`,name:i.join(`,`)}})},list:async()=>{let{listCommand:e}=await import(`./list-8tXa5T55.mjs`);await Y({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})},resolve:async(...e)=>{let t=e[0],{resolveCommand:n}=await import(`./resolve-BDaf2ALP.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-CrkSsXHT.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-CYaqYpUe.mjs`);await Y({action:`uninstall`,idempotencyPolicy:()=>ve(t),run:()=>n(t),target:{kind:`agent`,name:t}})},update:async(...e)=>{let[t,n]=e,{createUpdateCommandInvocation:r}=await import(`./update-DuePJ0Bz.mjs`),i=r(t,n.all??!1,n.managed??!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-rMVaNHuO.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-BsSS_i9A.mjs`);O.exitCode=t(await Ge(e))}function vt(){let e=l();d(e,e.map(e=>e.schema.name));let t=new Se;t.name(`quantex`).description(`统一的 AI Agent CLI 管理工具`);for(let e of u())t.option(e.flags,e.description,e.defaultValue);t.version(f()),t.hook(`preAction`,(e,t)=>{try{o(a(ne(t.optsWithGlobals())))}catch(e){O.stdout.write(`${y.red(e instanceof Error?e.message:String(e))}\n`),O.exit(2)}}),t.hook(`postAction`,()=>{r()});for(let n of e){let e=t.command(n.name).description(n.description);for(let t of n.aliases)e.alias(t);for(let t of n.arguments)e.argument(t.syntax,t.description);n.allowUnknownOptions&&e.allowUnknownOption();for(let t of n.options)e.option(t.flags,t.description,t.defaultValue);e.action(gt(n.handlerId))}return t}const yt=new Map(u().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(O.argv.slice(2),Ct,{agentFriendly:O.stdin.isTTY===!1||O.stdout.isTTY===!1});if($?.error&&(console.log(y.red($.error)),O.exit(2)),$&&n($.agentName)){try{o(a({color:$.color,dryRun:$.dryRun,idempotencyKey:$.idempotencyKey,logLevel:$.logLevel,noCache:$.noCache,nonInteractive:$.nonInteractive,quiet:$.quiet,refresh:$.refresh,runId:$.runId,timeout:$.timeout,yes:$.yes}))}catch(e){console.log(y.red(e instanceof Error?e.message:String(e))),O.exit(2)}try{let e=await K($.agentName,$.agentArgs,{assumeYes:$.yes,dryRun:$.dryRun,nonInteractive:$.nonInteractive});O.exit(e)}finally{r()}}await Q.parseAsync();export{};
|
|
2
|
+
import{n as e}from"./child-process-DzIdysOm.mjs";import{s as t}from"./file-store-XNyirRRY.mjs";import{n}from"./agents-DVl7Dw3L.mjs";import{a as r,n as i,o as a,s as o,t as s}from"./cli-context-DI43ouBg.mjs";import{C as c,G as l,K as u,Y as d,_ as f,b as p,et as m,i as h,n as ee,p as te,q as ne,r as g,t as _,v as re,w as v}from"./output-B1HrihiQ.mjs";import{a as ie,o as ae}from"./providers-maAwybCG.mjs";import{t as oe}from"./cli-operation-context-BS5a069W.mjs";import{t as y}from"./color-iQl4CJwm.mjs";import{t as se}from"./agent-installation-B7R0Yzjs.mjs";import{t as ce}from"./lifecycle-observations-CmhuPn5m.mjs";import{n as le}from"./lifecycle-errors-BtlAp_sz.mjs";import{a as ue,i as b,n as de,o as x,r as S,t as fe}from"./user-output-DLbKXqDm.mjs";import{n as C,t as pe}from"./errors-fT9JApTf.mjs";import{n as me,t as he}from"./version-cache-jjIoeyWQ.mjs";import{d as w,f as T,i as E,n as ge,o as _e,t as ve}from"./lifecycle-policy-a_fzmf1f.mjs";import{join as D}from"node:path";import O from"node:process";import{mkdir as ye,readFile as be,rename as xe,rm as k,writeFile as A}from"node:fs/promises";import{createHash as j,randomUUID as M}from"node:crypto";import{Command as Se}from"commander";import Ce from"prompts";function we(e){return e.executable.present?{decision:e.dryRun?`dry-run`:`launch`}:e.installPolicy===`never`?{decision:`reject`,errorCode:`AGENT_NOT_INSTALLED`}:e.installPolicy===`prompt`&&!e.interactive?{decision:`reject`,errorCode:`INTERACTION_REQUIRED`}:e.dryRun?{decision:`dry-run`}:{decision:e.installPolicy===`prompt`?`prompt-install`:`install-and-launch`}}async function Te(e,t){let n=await t.observe(e.agentName);if(n.kind===`failure`)return{error:n.error,kind:`observation-failed`};if(!n.value)return{kind:`not-found`};let r=n.value,i=we({dryRun:t.dryRun,executable:r.executable,installPolicy:e.installPolicy,interactive:t.interactive,observation:r.observation});if(i.decision===`reject`)return i.errorCode===`AGENT_NOT_INSTALLED`?{kind:`not-installed`,observed:r}:{kind:`interaction-required`,observed:r};let a=()=>[r.executable.path??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:s,createObservationService:ce,createOperationContext:oe,createProcessPort:me,reconcileAgentInstallation:se};function ke(e,t=Oe){let n=t.createOperationContext(),r=t.createObservationService(n.context,{resolveLatestVersion:!1}),i=t.createProcessPort();return{dispose:n.dispose,execute:a=>Te(a,{confirmInstall:e.confirmInstall,dryRun:e.dryRun,install:n=>je(n,e.timeoutMs,t),interactive:e.interactive,observe:e=>Ae(e,r),onInstallStart:e.onInstallStart,outputMode:e.outputMode,process:i,signal:n.context.signal,timeoutMs:e.timeoutMs})}}async function Ae(e,t){try{let n=await t.resolveAgentObservation(e);return{kind:`success`,value:n?{agent:n.agent,executable:n.pathExecutable,installedState:n.installedState,methods:n.methods,observation:n.observation}:void 0}}catch(e){return{error:Ne(e),kind:`failure`}}}async function je(t,n,r){try{if(t.executable.present)return{kind:`success`,value:void 0};let e=await Me(r.reconcileAgentInstallation({agent:t.agent,observation:{inPath:t.executable.present,installedState:t.installedState,lifecycle:t.observation,methods:t.methods},operation:`install`,route:`install`}),n,r.cancelOperations);return e?e.kind===`success`?{kind:`success`,value:void 0}:e:{kind:`timed-out`,timeoutMs:n}}catch(t){return e(t)?t.kind===`timed-out`?{kind:`timed-out`,timeoutMs:n??0}:{kind:`cancelled`,reason:t.message}:{kind:`failed`,reason:N(t,`Failed to install agent.`),retryable:!1}}}async function Me(e,t,n){if(t===void 0)return e;let r;try{let i=await Promise.race([e.then(e=>({kind:`completed`,value:e})),new Promise(e=>{r=setTimeout(()=>e({kind:`timed-out`}),t)})]);if(i.kind===`completed`)return i.value;let a=await Pe(e,Math.max(1,Math.min(t,250)));if(a!==void 0)return a;await n();return}finally{r&&clearTimeout(r)}}function Ne(t){return t instanceof p?{code:`STATE_READ_ERROR`,details:{stateFilePath:v()},kind:`invalid-data`,message:t.message}:e(t)?{kind:t.kind,message:t.message}:{kind:`failed`,message:N(t,`Failed to observe agent execution state.`)}}function N(e,t){return e instanceof Error&&e.message.trim()?e.message:t}async function Pe(e,t){let n;try{return await Promise.race([e,new Promise(e=>{n=setTimeout(()=>e(void 0),t)})])}finally{n&&clearTimeout(n)}}function P(){return D(t(),`idempotency`)}function F(e){return D(P(),`${Ie(e)}.json`)}async function I(e,t={}){let n=F(e),r;try{r=await be(n,`utf8`)}catch(e){if(Re(e)&&e.code===`ENOENT`)return{kind:`missing`};throw e}let i;try{i=JSON.parse(r)}catch{return{kind:`invalid`,reason:`invalid-json`}}let a=w(i);return a.kind===`invalid`?a:Date.parse(a.record.expiresAt)<=L(t).getTime()?(await k(n),{kind:`expired`,record:a.record}):a}async function Fe(e,t,n={}){let r=L(n),i=n.ttlMs??864e5,a=w({...t,createdAt:r.toISOString(),expiresAt:new Date(r.getTime()+i).toISOString(),schemaVersion:1});if(a.kind===`invalid`)throw TypeError(`Invalid versioned idempotency record: ${a.reason}`);let o=P(),s=F(e),c=`${s}.${process.pid}.${M()}.tmp`,l=n.fileSystem?.writeFile??A;await ye(o,{recursive:!0});try{await l(c,Le(a.record),`utf8`),await xe(c,s)}catch(e){throw await k(c,{force:!0}),e}}function Ie(e){return j(`sha256`).update(e,`utf8`).digest(`hex`)}function L(e){let t=e.now?.()??new Date;if(!Number.isFinite(t.getTime()))throw TypeError(`Idempotency clock must return a valid date.`);return t}function Le(e){return`${JSON.stringify(e,(e,t)=>typeof t!=`object`||!t||Array.isArray(t)?t:Object.fromEntries(Object.keys(t).sort().map(e=>[e,t[e]])),2)}\n`}function Re(e){return e instanceof Error&&`code`in e}async function ze(e){let t=T(e.request),n=T(e.resolvedPlan);switch(e.loaded.kind){case`missing`:return{fingerprints:z(t,n),kind:`reconcile`,reason:`missing`};case`expired`:return{fingerprints:R(e.loaded.record,t,n),kind:`reconcile`,reason:`expired`};case`invalid`:return{fingerprints:z(t,n),invalidReason:e.loaded.reason,kind:`reject`,reason:`invalid-evidence`};case`valid`:return Be(e,e.loaded.record,t,n)}}async function Be(e,t,n,r){let i=R(t,n,r);if(t.request.fingerprint!==n)return{fingerprints:i,kind:`reject`,reason:`request-mismatch`};if(t.resolvedPlan.fingerprint!==r)return{fingerprints:i,kind:`reconcile`,reason:`resolved-plan-changed`};switch((await e.validateLive({postcondition:t.postcondition.payload,receipt:t.receipt.payload})).kind){case`satisfied`:return{fingerprints:i,kind:`replay`,result:structuredClone(t.result)};case`drifted`:return{fingerprints:i,kind:`reconcile`,reason:`live-drifted`};case`inconclusive`:return{fingerprints:i,kind:`reconcile`,reason:`live-inconclusive`}}}function R(e,t,n){return{existingPlan:e.resolvedPlan.fingerprint,existingRequest:e.request.fingerprint,requestedPlan:n,requestedRequest:t}}function z(e,t){return{existingPlan:void 0,existingRequest:void 0,requestedPlan:t,requestedRequest:e}}const Ve=new Set([`doctor`,`upgrade`]);async function He(e,t={cache:he(),getSelfState:c,now:Date.now,resolveFacts:re}){if(!e.ok||Ve.has(e.action))return;let n=i();if(n.outputMode!==`human`||n.quiet)return;let r=await t.resolveFacts(),a=t.now(),o=await te({cache:t.cache,facts:r,nowMs:a,signal:new AbortController().signal});if(!o||!m(o.targetVersion,r.currentVersion))return;let s=await t.getSelfState();Ue(s.updateNoticeVersion,s.updateNoticeAt,o.targetVersion,a)||b(y.yellow(`Quantex CLI ${o.targetVersion} is available (current ${r.currentVersion}). Run \`quantex upgrade\`.`))}function Ue(e,t,n,r){if(!e||!t||e!==n)return!1;let i=Date.parse(t);return Number.isNaN(i)?!1:r-i<864e5}function We(e){return e.warnings.some(e=>e.code===`DRY_RUN`)}async function Ge(e){try{return await B(e)}catch(t){if(t instanceof p)return Xe(e,t);throw t}}async function B(e){return rt(e,()=>Ke(e))}async function Ke(e){let t=i().timeoutMs,n={expired:!1},r=!1,a,o=async()=>{let o=await Je(e,()=>n.expired);return n.expired&&t!==void 0?G(e,t):o.replayedResult?(r=!0,o.replayedResult):(a={action:e.action,...o.policy?{idempotencyPolicy:o.policy}:{},run:e.run,...e.target?{target:e.target}:{}},i().cancelled?Ye(e):e.run())},s=t===void 0?await o():await qe(e,o,t,n);return r||!a?s:Qe(a,s)}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=i();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:h(H(e,n.idempotencyKey,r.reason),V,{force:!0})};let a=typeof e.idempotencyPolicy==`function`?await e.idempotencyPolicy():e.idempotencyPolicy;if(n.cancelled||t())return{};let o=await ze({loaded:r,request:a.request,resolvedPlan:a.resolvedPlan,validateLive:a.validateLive});if(n.cancelled||t())return{};if(o.kind===`reconcile`)return{policy:a};if(o.kind===`reject`)return{replayedResult:tt(e,n.idempotencyKey,o,r)};let s=nt(o.result);return h(s,V,{force:!0}),{replayedResult:s}}function Ye(e){return _({action:e.action,error:{code:`CANCELLED`,message:`Command was cancelled before execution could start.`},target:e.target})}async function Xe(e,t){return h(_({action:e.action,...le(t,v(),e.target)}),Ze)}function Ze(e){e.error&&console.error(y.red(e.error.message))}async function Qe(e,t){if(i().cancelled)return t;let n=await $e(e,t);try{await He({action:e.action,ok:n.ok})}catch{}return n}function V(e){e.error&&console.error(y.red(e.error.message))}async function $e(e,t){let n=i();if(!n.idempotencyKey||!W(e.action)||!t.ok||n.dryRun||We(t)||!e.idempotencyPolicy)return t;let r=await e.idempotencyPolicy.captureEvidence(t);if(!r)return t;let a=await I(n.idempotencyKey);return et(e,n.idempotencyKey,a)||(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=T(e.idempotencyPolicy.request);if(n.kind===`invalid`)return h(H(e,t,n.reason),V,{force:!0});if(!(n.kind!==`valid`||n.record.request.fingerprint===r))return 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`?h(H(e,t,n.invalidReason),V,{force:!0}):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 _({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=i();return{...e,meta:{...e.meta,mode:t.outputMode,runId:t.runId,timestamp:new Date().toISOString()}}}function U(e){return{fingerprint:T(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`);O.once(`SIGINT`,a),O.once(`SIGTERM`,o),r=()=>{O.off(`SIGINT`,a),O.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(t,n){try{return await t()}catch(t){if(e(t)&&t.kind===`timed-out`||i().cancelled)return n();throw t}}async function ot(e,t){try{let n=await e(),r=t();return i().cancelled&&r?r:n}catch(e){let n=t();if(i().cancelled&&n)return n;throw e}}function G(e,t){return _({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 s(),g({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),h(G(e,t),V,{force:!0})}async function ct(e,t){return await s(),g({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),h(_({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),V,{force:!0})}const lt={cancelOperations:s,createExecutionService:ke};async function K(e,t,n={},r=lt){let a=i(),o=n.nonInteractive?!1:a.interactive,s=n.assumeYes??fe(),c=n.dryRun??de(),l=n.install??`prompt`,u,d=r.createExecutionService({confirmInstall:async e=>s?!0:!!(await Ce({initial:!0,message:`${e.agent.displayName} is not installed. Would you like to install it?`,name:`install`,type:`confirm`})).install,dryRun:c,interactive:o,onInstallStart:e=>{b(y.cyan(`Installing ${e.agent.displayName}...`))},outputMode:a.outputMode,timeoutMs:a.timeoutMs}),f=e=>{u??=e,r.cancelOperations()},p=()=>f(`SIGINT`),m=()=>f(`SIGTERM`);O.once(`SIGINT`,p),O.once(`SIGTERM`,m);try{return ut(await d.execute({agentName:e,args:t,installPolicy:l}),{agentName:e,args:t,cancellationSignal:u,installPolicy:l,interactive:o})}finally{O.off(`SIGINT`,p),O.off(`SIGTERM`,m),d.dispose()}}function 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)}),C(`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)}}),C(i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`)}switch(e.kind){case`install-declined`:return ue(y.yellow(`Installation cancelled.`)),1;case`install-failed`:return S(y.red(`Failed to install ${r.displayName}.`)),C(`INSTALL_FAILED`);case`dry-run`:return e.wouldInstall&&x(y.cyan(`Dry run: would install ${r.displayName}.`)),mt({agent:r,execution:q(t,!0),message:`Dry run: would run ${e.argv.join(` `)}`}),0;case`launch-failed`:return S(y.red(`Failed to launch ${r.displayName}: ${e.reason}`)),1;case`cancelled`:return S(y.red(t.cancellationSignal?`${r.displayName} was cancelled by ${t.cancellationSignal}.`:`${r.displayName} was cancelled.`)),C(`CANCELLED`);case`timed-out`:return S(y.red(e.phase===`install`?`Installing ${r.displayName} timed out after ${e.timeoutMs}ms.`:`${r.displayName} timed out after ${e.timeoutMs}ms.`)),C(`TIMEOUT`);case`exited`:return e.exitCode}}function 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 i().outputMode===`human`?S(y.red(t.message)):h(_({action:`exec`,error:{code:n,details:t.details,message:t.message},target:{kind:`agent`,name:e}}),()=>{}),C(n)}function ft(e){return e!==void 0&&pe.includes(e)}function pt(e,t,n){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:ie(e,t),label:ae(t),type:t.type})).filter(e=>e.command),suggestedAction:`rerun-with-install-policy`,suggestedEnsureCommand:`quantex ensure ${e.name}`,suggestedExecCommand:[`quantex`,`exec`,e.name,`--install`,`if-missing`,`--`,...n].join(` `)}}function J(e){if(i().outputMode===`human`){S(y.red(e.errorMessage));let t=e.execution.installGuidance;t&&(x(y.dim(`Try: ${t.suggestedEnsureCommand}`)),x(y.dim(`Or: ${t.suggestedExecCommand}`)));return}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(i().outputMode===`human`){x(y.cyan(e.message));return}h(ee({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-Yz6JB15d.mjs`);await Y({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})},commands:async()=>{let{commandsCommand:e}=await import(`./commands-CDIRbDiS.mjs`);await Y({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})},config:async(...e)=>{let{configCommand:t}=await import(`./config-CzjW_JSi.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--KmAAJQh.mjs`);await Y({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})},ensure:async(...e)=>{let t=e[0],[{ensureCommandWithRoute:n},{selectInstallationEngineRoute:r}]=await Promise.all([import(`./ensure-C8m6l9E3.mjs`),import(`./installation-routing-B1snz7YR.mjs`)]),i=r(`ensure`);await Y({action:`ensure`,idempotencyPolicy:()=>E(`ensure`,t),run:()=>n(t,i),target:{kind:`agent`,name:t}})},exec:async(...e)=>{let[t,n,r,i]=e,a=r.install??`never`;if(a!==`never`&&a!==`if-missing`&&a!==`always`){O.stdout.write(`${y.red(`Unknown install policy: ${a}`)}\n`),O.exitCode=2;return}let o=_t(i);O.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-Bkx_EzhX.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-KHSjKpRC.mjs`);await Y({action:`inspect`,run:()=>n(t),target:{kind:`agent`,name:t}})},install:async(...e)=>{let[{installCommandWithRoute:t},{selectInstallationEngineRoute:n}]=await Promise.all([import(`./install-CHtnwr_Y.mjs`),import(`./installation-routing-B1snz7YR.mjs`)]),r=n(`install`),i=_e(e[0]),a=i.length===1;await Y({action:`install`,...a?{idempotencyPolicy:()=>E(`install`,i[0])}:{idempotencyPolicy:()=>ge(i)},run:()=>t(i,r),target:a?{kind:`agent`,name:i[0]}:{kind:`agent`,name:i.join(`,`)}})},list:async()=>{let{listCommand:e}=await import(`./list-BjpSygCh.mjs`);await Y({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})},resolve:async(...e)=>{let t=e[0],{resolveCommand:n}=await import(`./resolve-zv03nHpM.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-BzAeBdY8.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-ZzgZy9Ml.mjs`);await Y({action:`uninstall`,idempotencyPolicy:()=>ve(t),run:()=>n(t),target:{kind:`agent`,name:t}})},update:async(...e)=>{let[t,n]=e,{createUpdateCommandInvocation:r}=await import(`./update-CqF2UOqJ.mjs`),i=r(t,n.all??!1,n.managed??!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-Dy8cCyh9.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-BsSS_i9A.mjs`);O.exitCode=t(await Ge(e))}function vt(){let e=l();d(e,e.map(e=>e.schema.name));let t=new Se;t.name(`quantex`).description(`统一的 AI Agent CLI 管理工具`);for(let e of u())t.option(e.flags,e.description,e.defaultValue);t.version(f()),t.hook(`preAction`,(e,t)=>{try{o(a(ne(t.optsWithGlobals())))}catch(e){O.stdout.write(`${y.red(e instanceof Error?e.message:String(e))}\n`),O.exit(2)}}),t.hook(`postAction`,()=>{r()});for(let n of e){let e=t.command(n.name).description(n.description);for(let t of n.aliases)e.alias(t);for(let t of n.arguments)e.argument(t.syntax,t.description);n.allowUnknownOptions&&e.allowUnknownOption();for(let t of n.options)e.option(t.flags,t.description,t.defaultValue);e.action(gt(n.handlerId))}return t}const yt=new Map(u().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(O.argv.slice(2),Ct,{agentFriendly:O.stdin.isTTY===!1||O.stdout.isTTY===!1});if($?.error&&(console.log(y.red($.error)),O.exit(2)),$&&n($.agentName)){try{o(a({color:$.color,dryRun:$.dryRun,idempotencyKey:$.idempotencyKey,logLevel:$.logLevel,noCache:$.noCache,nonInteractive:$.nonInteractive,quiet:$.quiet,refresh:$.refresh,runId:$.runId,timeout:$.timeout,yes:$.yes}))}catch(e){console.log(y.red(e instanceof Error?e.message:String(e))),O.exit(2)}try{let e=await K($.agentName,$.agentArgs,{assumeYes:$.yes,dryRun:$.dryRun,nonInteractive:$.nonInteractive});O.exit(e)}finally{r()}}await Q.parseAsync();export{};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./commands-zNRTIWKy.mjs";export{e as commandsCommand};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{G as e,J as t,i as n,n as r}from"./output-
|
|
1
|
+
import{G as e,J as t,i as n,n as r}from"./output-B1HrihiQ.mjs";import{i,r as a,t as o}from"./human-BL2-F6cA.mjs";import{t as s}from"./color-iQl4CJwm.mjs";async function c(){return n(r({action:`commands`,data:{commands:e().map(t)},target:{kind:`system`,name:`commands`}}),l)}function l(e){if(!e.data)return;let t=o();console.log(s.bold(`
|
|
2
2
|
Quantex Commands
|
|
3
3
|
`));for(let n of a(e.data.commands,[{header:`Command`,maxWidth:24,minWidth:8,value:e=>s.cyan(e.name)},{header:`Summary`,minWidth:16,value:e=>e.summary,wrap:!0}],{headerStyle:s.bold,width:t}))console.log(n);console.log();for(let e of i(s.dim(`Contracts: qtx commands --json · Schemas: qtx schema <command>`),{indent:` `,width:t}))console.log(e);console.log()}export{c as t};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{d as e,f as t,l as n,p as r,u as i}from"./file-store-XNyirRRY.mjs";import{r as a}from"./registry-vhJzh8dW.mjs";import{i as o,n as s,t as c}from"./output-
|
|
1
|
+
import{d as e,f as t,l as n,p as r,u as i}from"./file-store-XNyirRRY.mjs";import{r as a}from"./registry-vhJzh8dW.mjs";import{i as o,n as s,t as c}from"./output-B1HrihiQ.mjs";import{t as l}from"./color-iQl4CJwm.mjs";async function u(l,u,f){if(!l)return o(s({action:`config`,data:{action:`list`,config:await e()},target:{kind:`config`}}),d);switch(l){case`get`:{if(!u)return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`Please specify a key`},target:{kind:`config`}}),d);let t=(await e())[u];return o(s({action:`config`,data:{action:`get`,key:u,value:typeof t==`number`||typeof t==`string`?t:void 0},target:{kind:`config`,name:u}}),d)}case`set`:{if(!u||f===void 0)return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`Please specify both key and value`},target:{kind:`config`}}),d);if(u===`defaultPackageManager`&&!n(f))return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`defaultPackageManager must be bun, npm, mise, or uv`},target:{kind:`config`,name:u}}),d);if(u===`npmBunUpdateStrategy`&&!i(f))return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`npmBunUpdateStrategy must be latest-major or respect-semver`},target:{kind:`config`,name:u}}),d);if(u===`selfUpdateChannel`&&f!==`stable`&&f!==`beta`)return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`selfUpdateChannel must be stable or beta`},target:{kind:`config`,name:u}}),d);if(u===`selfUpdateRegistry`&&!a(f))return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`selfUpdateRegistry must be a valid absolute URL`},target:{kind:`config`,name:u}}),d);if([`networkRetries`,`networkTimeoutMs`,`versionCacheTtlHours`].includes(u)){let e=Number.parseInt(f,10);if(!Number.isInteger(e)||e<=0)return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,message:`${u} must be a positive integer`},target:{kind:`config`,name:u}}),d);f=`${e}`}let r={};try{r=await e()}catch{}return r[u]=[`networkRetries`,`networkTimeoutMs`,`versionCacheTtlHours`].includes(u)?Number.parseInt(f,10):u===`selfUpdateRegistry`?a(f):f,await t(r),o(s({action:`config`,data:{action:`set`,key:u,value:r[u]},target:{kind:`config`,name:u}}),d)}case`reset`:return await t(r),o(s({action:`config`,data:{action:`reset`,config:r},target:{kind:`config`}}),d);default:return o(c({action:`config`,error:{code:`INVALID_ARGUMENT`,details:{action:l},message:`Unknown action: ${l}`},target:{kind:`config`},warnings:[{code:`AVAILABLE_ACTIONS`,message:`Available actions: get, set, reset`}]}),d)}}function d(e){if(e.error){console.log(l.red(e.error.message));for(let t of e.warnings)console.log(t.message);return}if(e.data)switch(e.data.action){case`list`:console.log(l.bold(`
|
|
2
2
|
Current Configuration:
|
|
3
3
|
`)),console.log(JSON.stringify(e.data.config,null,2)),console.log();break;case`get`:console.log(e.data.value===void 0?l.gray(`(not set)`):String(e.data.value));break;case`set`:console.log(l.green(`Set ${e.data.key} = ${e.data.value}`));break;case`reset`:console.log(l.green(`Configuration reset to defaults.`));break}}export{u as configCommand};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as e}from"./file-store-XNyirRRY.mjs";import{t}from"./schema-BBnWVY6R.mjs";import{i as n,n as r}from"./cli-context-DI43ouBg.mjs";import{b as i,n as a,r as o,t as s,w as c}from"./output-
|
|
1
|
+
import{a as e}from"./file-store-XNyirRRY.mjs";import{t}from"./schema-BBnWVY6R.mjs";import{i as n,n as r}from"./cli-context-DI43ouBg.mjs";import{b as i,n as a,r as o,t as s,w as c}from"./output-B1HrihiQ.mjs";import{l}from"./providers-maAwybCG.mjs";import{n as u}from"./cli-operation-context-BS5a069W.mjs";import{n as d,o as f}from"./agents-BeMXYu8x.mjs";import{r as p}from"./provider-binding-BmBPz4YE.mjs";import{n as m,t as h}from"./lifecycle-errors-BtlAp_sz.mjs";import{i as g,n as _,r as v,t as y}from"./installation-failure-diagnostics-BJnxrzTa.mjs";import b from"node:process";function x(e,t={}){let i=r(),a=new AbortController,o=new Set,s=t.loadExecutor??B,c=!1,l,u=()=>(l??=s(),l);i.cancelled&&a.abort(`cancelled`);let d=n(async()=>{a.abort(`cancelled`),await Promise.allSettled(o)});return{dispose(){c||(c=!0,d())},async execute(t,n={}){if(c)return M(e,t);if(a.signal.aborted)return j(e,t);let r=S(u,e,t,a.signal,n.emitStartedEvent??!1);o.add(r);try{return await r}finally{o.delete(r)}}}}async function S(e,t,n,i,a){try{let o=await e(),s=r(),c={mode:s.dryRun?`preview`:`apply`,name:n,onMutationStart:a?e=>z(t,e.before.agent):void 0,operation:t,outputPolicy:u(s.outputMode),providerTimeoutMs:s.timeoutMs,resolveAdoption:w,signal:i};return C(t,n,await o.execute(c))}catch(e){return V(t,e),P(t,n,e)}}function C(e,t,n){if(n.kind===`failure`)return n.error.code===`cancelled`?j(e,t):n.error.code===`timed-out`?N(e,t):M(e,t);let r=n.value;return r.kind===`agent-not-found`?s({action:e,error:{code:`AGENT_NOT_FOUND`,details:{input:t},message:`Unknown agent: ${t}`},target:{kind:`agent`,name:t}}):r.kind===`failed`?E(e,t,r.error):T(e,r.value)}async function w(e){let t=l([...e.methods],e.resolvedBinaryPath??e.pathExecutable.path);if(!t)return;let n=p(e.agent,t);if(n)return{binding:n,installedState:f(e.agent,t)}}function T(e,t){let n=t.before.agent;if(t.decision===`already-satisfied`)return D(e,n);if(t.decision===`external-preserved`)return t.compatibility?t.kind===`preview`?k(e,n,`adopt`):A(e,n,t):O(e,n);if(t.kind===`preview`)return k(e,n,t.decision===`reinstall`?`reinstall`:`install`);let r=t.after.installedState;return r?a({action:e,data:F(n,!0,!0,r),target:{kind:`agent`,name:n.name}}):s({action:e,data:F(n,!1,!1),error:R(e,n),target:{kind:`agent`,name:n.name}})}function E(e,t,n){let r=K(n.cause,W);if(r)return s({action:e,...h(r,{kind:`agent`,name:t})});let i=n.sideEffect===`none`?K(n.cause,U):void 0;if(i)return s({action:e,...m(i,c(),{kind:`agent`,name:t})});let a=d(t),o=n.code===`compensation-failed`?n.originCode??n.code:n.code,l=a?.displayName??t,u={reason:n.reason,...n.remediation?{remediation:n.remediation}:{}},f=o===`recording-failed`?{code:`INSTALL_FAILED`,details:v(u,`state-write-failed`),message:`Failed to record verified state for ${l}.`}:o===`verification-failed`?R(e,a??L(t),u):o===`decision-conflict`||o===`decision-indeterminate`?{code:`INSTALL_FAILED`,details:v(u,`decision-indeterminate`),message:_(`Quantex could not determine the installed state of ${l}.`,n.reason)}:{code:`INSTALL_FAILED`,details:v(u,g(n.reason)?y:void 0),message:_(`Failed to install ${l}.`,n.reason)};return s({action:e,data:a?F(a,!1,!1):I(t),error:f,target:{kind:`agent`,name:a?.name??t}})}function D(e,t){return a({action:e,data:F(t,!1,!0),target:{kind:`agent`,name:t.name},warnings:[{code:`ALREADY_INSTALLED`,message:`${t.displayName} is already installed.`}]})}function O(e,t){return a({action:e,data:F(t,!1,!0),target:{kind:`agent`,name:t.name},warnings:[{code:`UNTRACKED_EXISTING_INSTALL`,message:`${t.displayName} is already installed but not tracked by Quantex. Quantex could not safely determine the supported install source, so the existing install remains unmanaged.`}]})}function k(e,t,n){return a({action:e,data:F(t,!1,n===`adopt`),target:{kind:`agent`,name:t.name},warnings:[{code:`DRY_RUN`,message:n===`adopt`?`Dry run: would record the existing ${t.displayName} install in Quantex state.`:n===`reinstall`?`Dry run: would reinstall ${t.displayName} only if its recorded provider target is confirmed absent.`:`Dry run: would install ${t.displayName}.`}]})}function A(e,t,n){let r=n.after.installedState;return r?a({action:e,data:F(t,n.changed,!0,r),target:{kind:`agent`,name:t.name},warnings:[{code:`TRACKED_EXISTING_INSTALL`,message:`${t.displayName} is already installed. Quantex is now tracking the existing install.`}]}):s({action:e,data:F(t,!1,!0),error:R(e,t),target:{kind:`agent`,name:t.name}})}function j(e,t){return s({action:e,data:I(t),error:{code:`CANCELLED`,message:`${e===`ensure`?`Ensure`:`Install`} was cancelled before tracking could complete.`},target:{kind:`agent`,name:t}})}function M(e,t){return s({action:e,data:I(t),error:{code:`INSTALL_FAILED`,message:`Failed to initialize the ${e} lifecycle engine.`},target:{kind:`agent`,name:t}})}function N(e,t){let n=d(t);return s({action:e,data:n?F(n,!1,!1):I(t),error:{code:`INSTALL_FAILED`,message:`Failed to install ${n?.displayName??t}.`},target:{kind:`agent`,name:n?.name??t}})}function P(e,t,n){let r=K(n,W);if(r)return s({action:e,...h(r,{kind:`agent`,name:t})});let i=K(n,U);return i?s({action:e,...m(i,c(),{kind:`agent`,name:t})}):M(e,t)}function F(e,t,n,r){return{agent:{displayName:e.displayName,name:e.name},changed:t,...r?{installState:{installType:r.installType,...r.packageName===void 0?{}:{packageName:r.packageName}}}:{},installed:n}}function I(e){return F(d(e)??L(e),!1,!1)}function L(e){return{displayName:e,name:e}}function R(e,t,n={}){return{code:`INSTALL_FAILED`,details:v(n,`verification-failed`),message:e===`ensure`?`${t.displayName} could not be verified after ensure completed.`:`${t.displayName} could not be verified after installation.`}}function z(e,t){o({action:e,data:{agent:{displayName:t.displayName,name:t.name}},target:{kind:`agent`,name:t.name},type:`started`})}async function B(){return(await import(`./installation-compatibility-BVjqZReM.mjs`)).createCoreInstallationCompatibilityExecutor()}function V(e,t){r().logLevel===`debug`&&b.stderr.write(`[quantex:debug] ${e} core engine failure: ${H(t)}\n`)}function H(e){return e instanceof Error&&e.message.trim()?e.message:`unknown failure`}function U(e){if(e instanceof i)return e;if(e instanceof t)return new i(`Failed to read Quantex state file: ${e.message}`,{cause:e});if(G(e))return new i(`Failed to read Quantex state file.`,{cause:e})}function W(t){return e(t)?t:void 0}function G(e){return!!(e&&typeof e==`object`&&`path`in e&&String(e.path)===c())}function K(e,t){let n=new Set,r=[e];for(;r.length>0;){let e=r.shift();if(e==null||n.has(e))continue;n.add(e);let i=t(e);if(i)return i;e instanceof AggregateError&&r.push(...e.errors),typeof e==`object`&&`cause`in e&&r.push(e.cause)}}export{x as createCoreInstallationCliSession};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./child-process-DzIdysOm.mjs";import{I as t,n}from"./agents-
|
|
1
|
+
import{t as e}from"./child-process-DzIdysOm.mjs";import{I as t,n}from"./agents-DVl7Dw3L.mjs";import{t as r}from"./schema-BBnWVY6R.mjs";import{Q as i,b as a}from"./output-B1HrihiQ.mjs";import{c as o,h as s,s as c,u as l}from"./providers-maAwybCG.mjs";import{t as u}from"./cli-operation-context-BS5a069W.mjs";import{t as d}from"./invocation-DXH0mQUH.mjs";import{n as f,t as p}from"./production-observation-BIl2_rY3.mjs";import{join as m}from"node:path";function h(e){let t=e.pathExecutable;return{agent:e.agent,methods:e.methods,installedState:e.installedState,inPath:t.present,installedVersion:t.present?t.version:void 0,latestVersion:e.latestVersion,binaryPath:t.present?t.path:void 0,resolvedBinaryPath:t.present?e.resolvedBinaryPath:void 0,sourceLabel:c(e.installedState),updateLabel:o(e.agent,e.installedState),lifecycle:e.installedState?s(e.installedState.installType):`unmanaged`}}function g(e,r=b()){let i=t=>y(e,r.configDir,t),a=async(e,i)=>{let a=n(e.agent.name)??e.agent,o=e.binding&&e.capabilities.length>0?t.getCapabilities(e.binding.providerId):e.capabilities;return{...e,agent:a,capabilities:o,latestVersion:await r.resolveLatestVersion(e.agent,e.installedState,e.methods,x(i)),methods:[...e.methods]}};return{observeRegisteredAgents(){return i(async e=>{let t=await r.core.listAgents({...e,configDir:r.configDir});return Promise.all(t.map(async t=>{let n=await r.core.inspectAgent(t.name,{...e,configDir:r.configDir});if(!n)throw Error(`Core did not resolve registered agent: ${t.name}`);return a(n,e)}))})},resolveAgentObservation(e){return i(async t=>{let n=await r.core.inspectAgent(e,{...t,configDir:r.configDir});return n?a(n,t):void 0})}}}function _(e,t){return g(t).resolveAgentObservation(e)}function v(e){return g(e).observeRegisteredAgents()}async function y(e,t,n){let r=e?void 0:u(),i=e??r?.context;if(!i)throw Error(`CLI read operation context is unavailable.`);try{let e=await d({signal:i.signal},e=>n({...e,timeoutMs:i.timeoutMs}));return e.kind===`failure`&&S(e.error,i.timeoutMs),e.value}catch(e){throw C(e,t)}finally{r?.dispose()}}function b(){return{configDir:f(),core:p({providerRegistry:t}),async resolveLatestVersion(e,t,n,r){let a=l(e,t,[...n]);return a?i(a,`latest`,{context:r}):void 0}}}function x(e){return{registerCleanup:e.registerCleanup,signal:e.signal,timeoutMs:e.timeoutMs}}function S(t,n){throw t.code===`cancelled`?new e({kind:`cancelled`,reason:typeof t.details?.reason==`string`?t.details.reason:void 0}):t.code===`timed-out`?new e({kind:`timed-out`,timeoutMs:typeof t.details?.timeoutMs==`number`?t.details.timeoutMs:n??0}):Error(t.message)}function C(t,n){return t instanceof a||t instanceof e?t:t instanceof r?new a(`Failed to read Quantex state file: ${t.message}`,{cause:t}):w(t,m(n,`state.json`))?new a(`Failed to read Quantex state file.`,{cause:t}):t}function w(e,t){return!e||typeof e!=`object`||!(`path`in e)?!1:String(e.path)===t}export{_ as n,h as r,v as t};
|