quantex-cli 1.1.2 → 1.2.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 +28 -2
- package/README.zh-CN.md +28 -2
- package/dist/agent-installation-Dsz_I5Li.mjs +1 -0
- package/dist/agent-observation-DRzJavrO.mjs +1 -0
- package/dist/agents-CBoMqbP1.mjs +2 -0
- package/dist/agents-DvfpsVAI.mjs +1 -0
- package/dist/capabilities-CQZ0SLgD.mjs +1 -0
- package/dist/{capabilities-hjF4kpxs.mjs → capabilities-C_gPEld2.mjs} +4 -4
- package/dist/cli.mjs +1 -1
- package/dist/color-1gXmuBdm.mjs +8 -0
- package/dist/commands-84XyphJp.mjs +1 -0
- package/dist/{commands-DjMechiz.mjs → commands-DiZ3IIz4.mjs} +1 -1
- package/dist/config-C335pFul.mjs +3 -0
- package/dist/core-read-observations-Cm0FpEpL.mjs +3 -0
- package/dist/doctor-YObQVc1Y.mjs +3 -0
- package/dist/ensure-BqcmFFyN.mjs +1 -0
- package/dist/ensure-CSntyBTb.mjs +1 -0
- package/dist/errors-BrmJuMg3.mjs +1 -0
- package/dist/index.mjs +2 -2
- package/dist/{info-C4-95Kjx.mjs → info-B4Gr79vU.mjs} +2 -2
- package/dist/inspect-DSnK5oMu.mjs +1 -0
- package/dist/{inspect-Bzu6BDS6.mjs → inspect-DyCXX7Tp.mjs} +3 -3
- package/dist/install-BKh0kreC.mjs +1 -0
- package/dist/lifecycle-observations-31JWXSir.mjs +1 -0
- package/dist/lifecycle-policy-ZKxZhM5R.mjs +1 -0
- package/dist/list-BrePsdOM.mjs +3 -0
- package/dist/provider-binding-BvvHuohl.mjs +1 -0
- package/dist/{provider-observations-BG3wn0dF.mjs → provider-observations-CRG1GCgp.mjs} +1 -1
- package/dist/resolve-B594qXY6.mjs +1 -0
- package/dist/{resolve-D-NvixQn.mjs → resolve-CCeMk9aY.mjs} +1 -1
- package/dist/{schema-DuUjt16u.mjs → schema-C2S3d_Cu.mjs} +1 -1
- package/dist/schema-CgTSwXpy.mjs +1 -0
- package/dist/uninstall-5ZK3juO1.mjs +1 -0
- package/dist/update-DQR-B9S-.mjs +1 -0
- package/dist/{update-planner-9xPfJpjp.mjs → update-planner-IgFzteV-.mjs} +1 -1
- package/dist/{upgrade-DP2QHsnb.mjs → upgrade-kK57LorF.mjs} +1 -1
- package/dist/{user-output-C1JWMNEt.mjs → user-output-uK6ichvR.mjs} +1 -1
- package/dist/{version-cache-D0_L2X5L.mjs → version-cache-CJ0R5HZJ.mjs} +1 -1
- package/package.json +17 -6
- package/dist/agent-inspection-PCTn6Nc6.mjs +0 -1
- package/dist/agent-installation-Dp03CAn2.mjs +0 -1
- package/dist/agents-BrJ8oEkB.mjs +0 -1
- package/dist/agents-Dc-rbRUf.mjs +0 -1
- package/dist/capabilities-DywtqYKA.mjs +0 -1
- package/dist/color-BGZ_5A6s.mjs +0 -9
- package/dist/commands-J8gAQ8RH.mjs +0 -1
- package/dist/config-Cs1_DPwP.mjs +0 -3
- package/dist/doctor-D8y0PQ7s.mjs +0 -3
- package/dist/ensure-CGipmEmc.mjs +0 -1
- package/dist/ensure-NxyYe2vm.mjs +0 -1
- package/dist/errors-BzuGM14H.mjs +0 -1
- package/dist/inspect-FAr4x7oh.mjs +0 -1
- package/dist/install-CGHSS_yl.mjs +0 -1
- package/dist/lifecycle-observations-C1OLPUAV.mjs +0 -1
- package/dist/lifecycle-policy-emF59xDd.mjs +0 -1
- package/dist/list-BwTYgNzc.mjs +0 -3
- package/dist/provider-evidence-D7aplCd6.mjs +0 -1
- package/dist/resolve-DLrskjPy.mjs +0 -1
- package/dist/schema-xUwSt_FZ.mjs +0 -1
- package/dist/uninstall-DLAzYf0i.mjs +0 -1
- package/dist/update-l5KnwT41.mjs +0 -1
- /package/dist/{errors-DXzIacfk.mjs → errors-BD4Gc9Rp.mjs} +0 -0
- /package/dist/{lifecycle-errors-BXlHX_YF.mjs → lifecycle-errors-Cal_j4yT.mjs} +0 -0
package/README.md
CHANGED
|
@@ -38,6 +38,32 @@ Default agent lifecycle commands reconcile live executable, provider, saved-stat
|
|
|
38
38
|
|
|
39
39
|
The internal engine can evolve without changing the maintained v1 command syntax, JSON/NDJSON envelopes, exit meanings, state/config projection, `qtx`/`quantex` binaries, or root-package exports. Any future removal of a maintained root export requires a separate deprecation proposal; it is not part of the lifecycle-engine redesign.
|
|
40
40
|
|
|
41
|
+
## TypeScript Core SDK preview
|
|
42
|
+
|
|
43
|
+
Quantex is extracting a non-interactive TypeScript SDK under the provisional package name `@quantex/core`. It is currently an integration-branch preview: the package has not been published, and npm namespace ownership and trusted-publisher setup are not yet confirmed. The planned public install command below will apply only after the first Core release; it is not expected to work today.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Available after the first published 1.2 Core release
|
|
47
|
+
npm install @quantex/core
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The first 1.2 SDK surface is read-only and ESM-only. It supports Node.js 20 or newer and Bun, and exposes only `createQuantex`, `list`, and `inspect`:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import { createQuantex } from '@quantex/core'
|
|
54
|
+
|
|
55
|
+
const quantex = createQuantex()
|
|
56
|
+
const result = await quantex.inspect('codex')
|
|
57
|
+
|
|
58
|
+
if (result.ok) {
|
|
59
|
+
console.log(result.value.status)
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Core does not prompt, print, call `process.exit`, or choose CLI exit codes; it returns typed results to its caller. The `qtx` / `quantex` CLI remains responsible for prompts, human and JSON/NDJSON presentation, exit-code policy, command-line execution, and Quantex self-upgrade. The SDK does not yet publish `install`, `ensure`, `update`, `uninstall`, or `run`; CLI mutations continue to use the maintained legacy engine.
|
|
64
|
+
|
|
65
|
+
The compatibility transition is staged across 1.2-1.5: 1.2 introduces read-only Core, 1.3 may add gated mutation families, 1.4 is the earliest Core can become the CLI default, and 1.5 provides a second default soak. The persisted state schema remains version 2 throughout 1.x. Engine selection happens before an invocation, and a mutating call never falls back after side effects begin; when Core routing is promoted, rollback uses the preserved whole-invocation legacy route through 1.5. Removing maintained v1 surfaces requires a separate later-major proposal after the documented soak gates.
|
|
66
|
+
|
|
41
67
|
## Agent Quick Start
|
|
42
68
|
|
|
43
69
|
If you are using a coding agent with Quantex, start by installing the repo-provided user-facing Quantex CLI skill:
|
|
@@ -63,7 +89,7 @@ npm exec --yes --package quantex-cli -- qtx schema --json
|
|
|
63
89
|
If the agent is contributing inside this repository, use this as the bootstrap prompt:
|
|
64
90
|
|
|
65
91
|
```text
|
|
66
|
-
|
|
92
|
+
Read AGENTS.md, openspec/README.md, skills/quantex-agent-runtime/SKILL.md, and skills/quantex-cli/SKILL.md.
|
|
67
93
|
For non-trivial changes, use OpenSpec through the Quantex agent runtime.
|
|
68
94
|
Before finishing, run bun run lint, bun run format:check, and bun run typecheck.
|
|
69
95
|
If command behavior changed, also run bun run test.
|
|
@@ -284,7 +310,7 @@ If you are contributing to this repository or letting a coding agent work here,
|
|
|
284
310
|
|
|
285
311
|
- [AGENTS.md](./AGENTS.md): repository-level execution handbook with workflow guardrails, validation gates, and trigger-based pointers.
|
|
286
312
|
- [docs/README.md](./docs/README.md): project docs for ADRs, runbooks, sessions, and postmortems.
|
|
287
|
-
- [openspec/README.md](./openspec/README.md): OpenSpec
|
|
313
|
+
- [openspec/README.md](./openspec/README.md): OpenSpec change workflow.
|
|
288
314
|
- [docs/github-collaboration.md](./docs/github-collaboration.md): Issue, PR, and Discussion collaboration flow.
|
|
289
315
|
- [skills/quantex-cli/SKILL.md](./skills/quantex-cli/SKILL.md): repo-native skill for agents using Quantex.
|
|
290
316
|
- [skills/quantex-agent-runtime/SKILL.md](./skills/quantex-agent-runtime/SKILL.md): contributor-facing runtime for agents working inside this repository.
|
package/README.zh-CN.md
CHANGED
|
@@ -38,6 +38,32 @@ Quantex 是一个 `human-friendly + agent-friendly` 的 AI 编程助手 CLI life
|
|
|
38
38
|
|
|
39
39
|
内部引擎可以继续演进,但不会改变当前维护的 v1 命令语法、JSON/NDJSON envelope、退出语义、state/config 投影、`qtx`/`quantex` 二进制入口或 root package exports。未来如需删除任何受维护的 root export,必须另行提出并批准 deprecation proposal;这不属于本次 lifecycle engine 重构。
|
|
40
40
|
|
|
41
|
+
## TypeScript Core SDK 预览
|
|
42
|
+
|
|
43
|
+
Quantex 正在抽离一个非交互式 TypeScript SDK,暂定包名为 `@quantex/core`。它目前仍是集成分支预览:包尚未发布,npm namespace ownership 与 trusted publisher 也尚未确认。下面的计划公开安装命令只会在首个 Core 版本发布后生效,当前不应期望它能成功执行。
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# 首个 1.2 Core 版本发布后才可用
|
|
47
|
+
npm install @quantex/core
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
1.2 的首个 SDK surface 只读且仅支持 ESM,可在 Node.js 20 或更高版本与 Bun 中使用,只暴露 `createQuantex`、`list` 和 `inspect`:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import { createQuantex } from '@quantex/core'
|
|
54
|
+
|
|
55
|
+
const quantex = createQuantex()
|
|
56
|
+
const result = await quantex.inspect('codex')
|
|
57
|
+
|
|
58
|
+
if (result.ok) {
|
|
59
|
+
console.log(result.value.status)
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Core 不提示、不打印、不调用 `process.exit`,也不决定 CLI 退出码;它只向调用方返回类型化结果。`qtx` / `quantex` CLI 仍负责提示、human 与 JSON/NDJSON 展示、退出码策略、命令行执行和 Quantex 自升级。SDK 尚未发布 `install`、`ensure`、`update`、`uninstall` 或 `run`;CLI 的变更操作仍使用受维护的 legacy engine。
|
|
64
|
+
|
|
65
|
+
兼容过渡跨越 1.2-1.5:1.2 引入只读 Core,1.3 可以添加经过 gate 的变更方法组,1.4 是 Core 最早可成为 CLI 默认引擎的版本,1.5 提供第二个默认版本的观察期。持久化 state schema 在整个 1.x 中保持为 version 2。引擎必须在单次调用前选定,变更操作一旦开始产生副作用就绝不会切换引擎重试;当 Core routing 晋级后,回滚通过保留至 1.5 的 whole-invocation legacy route 完成。删除受维护的 v1 surface 必须等待已记录的观察 gate 通过,并在后续 major 版本另行提案。
|
|
66
|
+
|
|
41
67
|
## Agent 快速接入
|
|
42
68
|
|
|
43
69
|
如果你正在让 coding agent 使用 Quantex,可以先安装仓库里的面向用户的 Quantex CLI skill:
|
|
@@ -63,7 +89,7 @@ npm exec --yes --package quantex-cli -- qtx schema --json
|
|
|
63
89
|
如果 agent 正在这个仓库内参与开发,请把下面这段作为启动提示:
|
|
64
90
|
|
|
65
91
|
```text
|
|
66
|
-
|
|
92
|
+
Read AGENTS.md, openspec/README.md, skills/quantex-agent-runtime/SKILL.md, and skills/quantex-cli/SKILL.md.
|
|
67
93
|
For non-trivial changes, use OpenSpec through the Quantex agent runtime.
|
|
68
94
|
Before finishing, run bun run lint, bun run format:check, and bun run typecheck.
|
|
69
95
|
If command behavior changed, also run bun run test.
|
|
@@ -284,7 +310,7 @@ Quantex 使用 release-please 维护 Release PR,发布说明以 GitHub Release
|
|
|
284
310
|
|
|
285
311
|
- [AGENTS.md](./AGENTS.md):仓库级 agent 执行手册,包含流程守卫、验证门槛和 trigger-based pointers。
|
|
286
312
|
- [docs/README.md](./docs/README.md):ADR、runbook、session、postmortem 等项目文档入口。
|
|
287
|
-
- [openspec/README.md](./openspec/README.md):OpenSpec
|
|
313
|
+
- [openspec/README.md](./openspec/README.md):OpenSpec 变更流程。
|
|
288
314
|
- [docs/github-collaboration.md](./docs/github-collaboration.md):Issue、PR、Discussion 协作流程。
|
|
289
315
|
- [skills/quantex-cli/SKILL.md](./skills/quantex-cli/SKILL.md):面向 agent 使用 Quantex 的 repo-native skill。
|
|
290
316
|
- [skills/quantex-agent-runtime/SKILL.md](./skills/quantex-agent-runtime/SKILL.md):面向本仓库开发协作的 agent runtime。
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Ct as e,Nt as t,j as n}from"./color-1gXmuBdm.mjs";import{lt as r}from"./agents-CBoMqbP1.mjs";import{a as i}from"./provider-binding-BvvHuohl.mjs";import{_ as a,d as o,f as s,o as c,s as l,u}from"./agents-DvfpsVAI.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:l,route:u}=e,f=o.installedState?void 0:o.methods[0],p=o.installedState??t??f,m=D(o.lifecycle,r,t),h=d({intent:{kind:l,targetId:r.name},observation:m,providerId:O(p),providerTargetId:k(r,p)});return h.decision===u?a(async()=>{if(u===`install`&&o.installedState&&!o.inPath){let e=i(r,o.installedState);if(!e)return{kind:`indeterminate`,reason:`tracked-provider-binding-unresolved`};let t=await E(t=>c(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=i(r,t.value.installedState);if(!n)throw Error(`Cannot resolve provider binding for ${r.name}.`);let a=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(),...a?.executablePath?{executablePath:a.executablePath}:{},...a?.version?{version:a.version}:{}}},compensate:e=>u===`install`?s(r,e.value.installedState):Promise.resolve(),execute:async()=>w(r,u,o.installedState,t,f),plan:h.plan,recordReceipt:(e,t)=>n(t.value.installedState,e),verify:async e=>T(r,e.value.installedState,l,h.plan.steps[0]?.postconditions[0])})}):Promise.resolve({kind:`indeterminate`,reason:`planned-${h.decision}-cannot-execute-${u}`})}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:l(e,i)}}};if(n===`install`&&r){let t=await o(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 s=await u(e,[a]);return s.kind===`success`?s.value.installedState?{kind:`success`,value:{changed:!0,value:{installedState:s.value.installedState}}}:{kind:`failed`,reason:`installed-state-missing`,retryable:!1}:s}async function T(e,t,n,a){let o=a??{executable:e.binaryName,kind:`executable-present`},s=i(e,t);if(!s)return{kind:`indeterminate`,postcondition:o,reason:`provider-binding-unresolved-after-${n}`};let[l,u]=await E(t=>Promise.all([r(e.binaryName,t),c(s,t)])),d=u.kind===`success`&&u.value.kind===`present`,f=u.kind===`success`?u.value:void 0,p=l&&d?{drift:{kind:`none`},executablePath:f?.kind===`present`?f.executablePath:void 0,kind:`present`,providerId:s.providerId,providerTargetId:s.target.id,targetId:e.name,version:f?.kind===`present`?f.version:void 0}:{drift:{kind:`recorded-absent`},kind:`absent`,targetId:e.name};return l&&d?{kind:`satisfied`,observation:p,postcondition:o}:{kind:`unsatisfied`,observation:p,postcondition:o,reason:l?`provider-target-not-present-after-${n}`:`binary-not-found-after-${n}`}}async function E(t){let n=e();try{return await t(n.context)}finally{n.dispose()}}function D(e,t,n){return e.kind!==`present`||!n?e:{...e,providerId:O(n),providerTargetId:k(t,n)}}function O(e){if(e)return`installType`in e?e.installType:e.type}function k(e,t){if(t){if(t.packageName)return t.packageName;if(t.command)return t.command;if(t.binaryName)return t.binaryName;let n=O(t);if(n===`bun`||n===`npm`)return e.packages?.npm??e.binaryName;if(n===`cargo`)return e.packages?.cargo??e.binaryName;if(n===`deno`)return e.packages?.deno??e.binaryName;if(n===`mise`)return e.packages?.mise??e.binaryName;if(n===`pip`)return e.packages?.pip??e.binaryName;if(n===`uv`)return e.packages?.uv??e.binaryName}return e.binaryName}export{C as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{pt as e}from"./color-1gXmuBdm.mjs";import{a as t,i as n,n as r,t as i}from"./provider-binding-BvvHuohl.mjs";async function a(e,a){let[g,_,v]=await Promise.all([a.inspectExecutable(e),a.readInstalledState(e.name),a.readReceipt(e.name)]),y=a.clock(),b=r(e,a.platform),x=b.bindings,S=_?t(e,_):void 0,C=v?n(v):void 0,w=C??S,T={catalogMethods:x,executable:g,installedState:_,pathExecutable:g,persistedBinding:w,receipt:v};if(_&&!S||v&&!C)return{...T,capabilities:[],observation:c(e,y,`Persisted provider binding cannot be resolved.`)};if(S&&C&&!i(S,C,e.binaryName))return{...T,capabilities:[],observation:g.present?s(e,g,y,{kind:`conflicting-source`,observedProviderId:S.providerId,recordedProviderId:C.providerId}):{drift:{kind:`conflicting-source`,observedProviderId:S.providerId,recordedProviderId:C.providerId},kind:`absent`,observedAt:y,targetId:e.name}};let E=w;if(E){let t=await o(E,a),n=a.providerRegistry.getCapabilities(E.providerId);if(t.kind!==`success`)return{...T,binding:E,capabilities:n,observation:c(e,y,m(t)),providerOutcome:t};let r=t.value;if(!f(E,r))return{...T,binding:E,capabilities:n,observation:p(e,g,y),providerOutcome:t};if(r.kind===`absent`&&!g.present)return{...T,binding:E,capabilities:n,observation:{drift:{kind:`recorded-absent`},kind:`absent`,observedAt:y,targetId:e.name},providerOutcome:t};let i=r.kind!==(g.present?`present`:`absent`)||r.kind===`present`&&g.present&&r.executablePath!==void 0&&g.path!==void 0&&r.executablePath!==g.path||r.kind===`present`&&u(r.version,g.version)||v?.executablePath!==void 0&&g.path!==void 0&&v.executablePath!==g.path||d(e,_,v,E),h=l(g,r);return{...T,binding:E,capabilities:n,executable:h,observation:s(e,h,y,i?{kind:`conflicting-source`,observedProviderId:r.kind===`present`?E.providerId:void 0,recordedProviderId:E.providerId}:{kind:`none`},r.kind===`present`?E:void 0),providerOutcome:t}}let D=await Promise.all(x.map(async e=>({binding:e,outcome:await o(e,a)}))),O=D.find(e=>e.outcome.kind===`success`&&!f(e.binding,e.outcome.value));if(O)return{...T,capabilities:[],observation:p(e,g,y),providerOutcome:O.outcome};let k=D.filter(e=>e.outcome.kind===`success`&&e.outcome.value.kind===`present`),A=D.filter(e=>e.binding.providerId!==`binary`&&e.binding.providerId!==`script`),j=A.filter(e=>e.outcome.kind===`success`&&e.outcome.value.kind===`present`),M=A.some(e=>e.outcome.kind!==`success`),N=j.length>0?j:M?[]:k;if(N.length>1)return{...T,capabilities:[],observation:g.present?s(e,g,y,{kind:`conflicting-source`}):{drift:{kind:`conflicting-source`},kind:`indeterminate`,observedAt:y,reason:`Multiple catalog providers report the agent as present.`,targetId:e.name}};if(b.unresolvedCandidates.length>0)return{...T,capabilities:[],observation:c(e,y,`A catalog provider binding cannot be resolved.`)};let P=D.map(e=>e.outcome).find(h),F=D.map(e=>e.outcome).find(e=>e.kind===`cancelled`||e.kind===`timed-out`);if(F)return{...T,capabilities:[],observation:c(e,y,m(F)),providerOutcome:F};let I=N[0];if(I){let t=I.binding,n=I.outcome.value,r=l(g,n),i=!g.present||n.executablePath!==void 0&&g.path!==void 0&&n.executablePath!==g.path||u(n.version,g.version);return{...T,binding:t,capabilities:a.providerRegistry.getCapabilities(t.providerId),executable:r,observation:s(e,r,y,i?{kind:`conflicting-source`,observedProviderId:t.providerId}:{kind:`untracked`},t),providerOutcome:I.outcome}}let L=a.preferredCatalogBinding,R=L?D.find(t=>i(t.binding,L,e.binaryName)&&t.outcome.kind===`success`&&t.outcome.value.kind===`absent`):void 0;return!g.present&&k.length===0&&P&&R?{...T,capabilities:[],observation:{drift:{kind:`none`},kind:`absent`,observedAt:y,targetId:e.name},providerOutcome:R.outcome}:P?{...T,capabilities:[],observation:c(e,y,m(P)),providerOutcome:P}:{...T,capabilities:[],observation:g.present?s(e,g,y,{kind:`untracked`}):{drift:{kind:`none`},kind:`absent`,observedAt:y,targetId:e.name}}}async function o(e,t){try{if(t.observeProvider)return await t.observeProvider(e,{registry:t.providerRegistry,signal:t.signal,timeoutMs:t.timeoutMs});let n=t.providerRegistry.get(e.providerId);return n?await n.observe({context:{signal:t.signal,timeoutMs:t.timeoutMs},target:e.target}):{kind:`unavailable`,reason:`Provider ${e.providerId} is not registered.`,retryable:!1}}catch(e){return{kind:`failed`,reason:g(e),retryable:!1}}}function s(e,t,n,r,i){return{drift:r,...t.path?{executablePath:t.path}:{},kind:`present`,observedAt:n,...i?{providerId:i.providerId,providerTargetId:i.target.id,providerTargetKind:i.target.kind}:{},targetId:e.name,...t.version?{version:t.version}:{}}}function c(e,t,n){return{drift:{kind:`indeterminate`,reason:n},kind:`indeterminate`,observedAt:t,reason:n,targetId:e.name}}function l(e,t){return t.kind===`absent`?e:{path:e.path??t.executablePath,present:!0,version:e.version??t.version}}function u(t,n){if(t===void 0||n===void 0)return!1;let r=e(t,n);return r===void 0?t!==n:r!==0}function d(e,t,n,r){let i=[e.binaryName,t?.binaryName,n?.executableName,r.target.binaryName].filter(e=>e!==void 0);return new Set(i).size>1}function f(e,t){return e.target.id===t.target.id&&e.target.kind===t.target.kind}function p(e,t,n){return t.present?s(e,t,n,{kind:`conflicting-source`}):{drift:{kind:`conflicting-source`},kind:`indeterminate`,observedAt:n,reason:`Provider evidence does not match the requested target identity.`,targetId:e.name}}function m(e){switch(e.kind){case`unsupported`:return e.reason??`Provider does not support ${e.operation}.`;case`unavailable`:case`failed`:case`indeterminate`:return e.reason;case`cancelled`:return e.reason??`Provider observation was cancelled.`;case`timed-out`:return`Provider observation timed out after ${e.timeoutMs}ms.`}}function h(e){return e.kind!==`success`}function g(e){return e instanceof Error&&e.message.trim().length>0?`Provider observation rejected: ${e.message.trim().slice(0,500)}`:`Provider observation rejected unexpectedly.`}export{a as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{$ as e,Dt as t,Et as n,Ot as r,Q as i,St as a,Tt as o,X as s,Y as c,Z as l,_t as u,bt as ee,et as te,gt as ne,ht as re,mt as ie,rt as d,vt as ae,xt as f,yt as oe}from"./color-1gXmuBdm.mjs";import p from"node:process";import{join as m}from"node:path";import{access as se,constants as ce}from"node:fs/promises";import{homedir as le}from"node:os";import{toJSONSchema as ue,z as h}from"zod";function de(e){return e===`cask`?[`--cask`]:[]}function fe(e){return e===`cask`?[`--cask`]:[`--formula`]}function g(e,t,n,r){return f([`brew`,e,...de(n),t],r,`brew ${e} failed`)}function pe(e,t,n){return g(`install`,e,t,n)}function me(e,t,n){return g(`upgrade`,e,t,n)}function he(e,t){return a(e.map(e=>[`brew`,`upgrade`,...de(e.packageTargetKind),e.packageName]),t,`brew update failed`)}function ge(e,t,n){return g(`uninstall`,e,t,n)}async function _e(e,i,a){try{let o=r([`brew`,`list`,...fe(i),`--versions`,e],{detached:a!==void 0&&p.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),{exitCode:s,stderr:c,stdout:l}=a?await t(o,a):await n(o),u=be(l);return s===0?u?{presence:`present`,version:u}:{presence:`present`}:s===1&&xe(c)?{presence:`absent`}:{presence:`unknown`}}catch(e){if(o(e))throw e;return{presence:`unknown`}}}async function ve(e,t,n){return(await _e(e,t,n)).presence}async function ye(e,t,n){return(await _e(e,t,n)).version}function be(e){let t=e.trim().split(`
|
|
2
|
+
`).find(e=>e.trim());if(!t)return;let n=t.trim().split(/\s+/);if(n.length<2)return;let r=n.at(-1);return r&&/^\d/.test(r)?r:void 0}function xe(e){let t=e.toLowerCase();return t.includes(`no such keg`)||t.includes(`is not installed`)}function _(){switch(p.platform){case`win32`:return`windows`;case`darwin`:return`macos`;default:return`linux`}}async function v(e,i){try{let a=r([e,`--version`],{detached:i!==void 0&&p.platform!==`win32`}),{exitCode:o}=i?await t(a,i):await n(a);return o===0}catch(e){if(o(e))throw e;return!1}}async function Se(e){return v(`bun`,e)}async function Ce(e){return v(`npm`,e)}async function we(e){return v(`brew`,e)}async function Te(e){return v(`deno`,e)}async function Ee(e){return v(`cargo`,e)}async function De(e){return v(`mise`,e)}async function Oe(e){return v(`winget`,e)}async function ke(e){return await v(`pip`,e)||await v(`pip3`,e)?!0:je(e)}async function Ae(e){return v(`uv`,e)}async function je(e){try{let i=r([`python`,`-m`,`pip`,`--version`],{detached:e!==void 0&&p.platform!==`win32`}),{exitCode:a}=e?await t(i,e):await n(i);if(a===0)return!0}catch(e){if(o(e))throw e}try{let i=r([`python3`,`-m`,`pip`,`--version`],{detached:e!==void 0&&p.platform!==`win32`}),{exitCode:a}=e?await t(i,e):await n(i);return a===0}catch(e){if(o(e))throw e;return!1}}async function Me(e,i){try{let a=r([p.platform===`win32`?`where`:`which`,e],{detached:i!==void 0&&p.platform!==`win32`}),{exitCode:o}=i?await t(a,i):await n(a);return o===0}catch(e){if(o(e))throw e;return!1}}function y(e){return e.kind===`cancelled`||e.kind===`timed-out`}function b(e){return e.kind===`cancelled`?{kind:`cancelled`,...e.reason?{reason:e.reason}:{}}:e}async function x(e,t){if(e.signal.aborted)return{kind:`cancelled`,reason:C(e.signal)};let n,r,i=new Promise(t=>{r=()=>t({kind:`cancelled`,reason:C(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:Ne(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 S(e,t){if(e.signal.aborted)return{kind:`cancelled`,reason:C(e.signal)};try{return{kind:`resolved`,value:await t()}}catch(e){return o(e)?e.kind===`timed-out`?{kind:`timed-out`,timeoutMs:e.timeoutMs}:{kind:`cancelled`,...e.reason?{reason:e.reason}:{}}:{kind:`rejected`,reason:Ne(e)}}}function C(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 Ne(e){return e instanceof Error?e.message:String(e)}function w(e,t){let n=async n=>{let r=await T(n.context,t.contextualObservation,()=>t.probePackagePresence(n.target,n.context));if(y(r))return b(r);if(r.kind===`rejected`||r.value===`unknown`)return{evidence:[Re(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 O({evidence:[ze(e.id,n.target.id,`absent`)],kind:`absent`,target:n.target});let i=t.getInstalledVersion?await T(n.context,t.contextualObservation,()=>t.getInstalledVersion(n.target,n.context)):void 0;return i&&y(i)?b(i):O({evidence:[ze(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 T(n,t.contextualObservation,()=>t.isAvailable(n));return y(r)?b(r):r.kind===`rejected`||!r.value?{kind:`unavailable`,reason:`${e.id} executable is unavailable`}:O({executable:e.executable})},id:e.id,install:n=>E(e,n,`install`,e.commands.install(n.target),t.contextualMutation,t.install),observe:n,uninstall:n=>E(e,n,`uninstall`,e.commands.uninstall(n.target),t.contextualMutation,t.uninstall),update:n=>E(e,n,`update`,e.commands.update(n.target),t.contextualMutation,t.update),updateMany:n=>Fe(e,t,n),verify:async t=>{let r=await n(t);return r.kind===`success`?r.value.kind===`absent`?O({evidence:r.value.evidence??[],kind:`unsatisfied`,reason:`${t.target.id} is not installed through ${e.id}`}):O({evidence:r.value.evidence??[],kind:`satisfied`}):r}}}function T(e,t,n){return t?S(e,n):x(e,n)}function Pe(e,t,n){return t?S(e,n):x(e,n)}async function E(e,t,n,r,i,a){let o=await Pe(t.context,i,()=>a(t.target,t.context));if(y(o))return b(o);let s=Le(e.id,r);return o.kind===`rejected`?D(e,t.target.id,n,r,s,o.reason):o.value.kind===`success`?O({evidence:s,target:t.target}):Ie(o.value,e,t.target.id,n,r,s)}async function Fe(e,t,n){let r=e.commands.updateMany(n.targets),i=await Pe(n.context,t.contextualMutation,()=>t.updateMany(n.targets,n.context));if(y(i))return b(i);let a=Le(e.id,r);return i.kind===`rejected`?D(e,void 0,`update`,r,a,i.reason):i.value.kind===`success`?O(n.targets.map(e=>({evidence:a,target:e}))):Ie(i.value,e,void 0,`update`,r,a)}function Ie(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??i,evidence:e.evidence??a,reason:e.reason.trim()?e.reason:o.reason,remediation:e.remediation??o.remediation}}function D(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 Le(e,t){return[{kind:`provider`,value:e},{kind:`command`,value:t.join(` `)}]}function Re(e,t){return{kind:`provider`,value:`${e}:${t}`}}function ze(e,t,n){return{kind:`package`,value:`${e}:${t}:${n}`}}function O(e){return{kind:`success`,value:e}}function k(e){return e.kind===`cask`?`cask`:`package`}const Be={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>ye(e.id,k(e),t),install:(e,t)=>pe(e.id,k(e),t),isAvailable:e=>we(e),probePackagePresence:(e,t)=>ve(e.id,k(e),t),uninstall:(e,t)=>ge(e.id,k(e),t),update:(e,t)=>me(e.id,k(e),t),updateMany:(e,t)=>he(e.map(e=>({packageName:e.id,packageTargetKind:k(e)})),t)};function A(e,t){return[`brew`,e,...t.kind===`cask`?[`--cask`]:[],t.id]}function Ve(e=Be){return w({commands:{install:e=>A(`install`,e),uninstall:e=>A(`uninstall`,e),update:e=>A(`upgrade`,e),updateMany:e=>[`brew`,`upgrade`,...e.flatMap(e=>A(`upgrade`,e).slice(2))]},displayName:`Homebrew`,executable:`brew`,id:`brew`},e)}const He=Ve();function Ue(e,t){let n=F(`provider`,e.id),r=async n=>{let r=await j(n.context,t.contextualPackageObservation,()=>t.probePackagePresence(n.target.id,n.context));if(y(r))return b(r);if(r.kind===`rejected`||r.value===`unknown`)return{evidence:[F(`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 I({evidence:[F(`package`,`${e.id}:${n.target.id}:absent`)],kind:`absent`,target:n.target});let i=await j(n.context,t.contextualPackageObservation,()=>t.getInstalledVersion(n.target.id,n.context));if(y(i))return b(i);let a=i.kind===`resolved`?i.value:void 0;return I({evidence:[F(`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 j(n,t.contextualPackageObservation,()=>t.isAvailable(n));return y(r)?b(r):r.kind===`rejected`||!r.value?{kind:`unavailable`,reason:`${e.id} executable is unavailable`}:I({executable:e.executable})},id:e.id,install:n=>{let r=P(n.options),i=e.commands.install(n.target,r);return M(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=P(r.options),a=await x(r.context,()=>t.resolveLatestVersion(r.target.id,i.distTag,i.registry));return y(a)?b(a):a.kind===`rejected`||!a.value?{evidence:[n],kind:`indeterminate`,reason:`${e.id} could not resolve the ${i.distTag} version for ${r.target.id}`}:I({evidence:[n,F(`package`,`${e.id}:${r.target.id}@${i.distTag}=${a.value}`)],version:a.value})},uninstall:n=>{let r=e.commands.uninstall(n.target);return M(e,n.context,n.target,r,t.contextualMutation,()=>t.uninstall(n.target.id,n.context))},update:n=>{let r=P(n.options),i=e.commands.update(n.target,r);return M(e,n.context,n.target,i,t.contextualMutation,()=>t.update(n.target.id,r.updateStrategy,r.distTag,r.registry,n.context))},updateMany:n=>Ge(e,t,n),verify:async t=>{let n=await r(t);return n.kind===`success`?n.value.kind===`absent`?I({evidence:n.value.evidence??[],kind:`unsatisfied`,reason:`${t.target.id} is not installed through ${e.id}`}):I({evidence:n.value.evidence??[],kind:`satisfied`}):n}}}function j(e,t,n){return t?S(e,n):x(e,n)}function We(e,t,n){return t?S(e,n):x(e,n)}async function Ge(e,t,n){let r=P(n.options),i=e.commands.updateMany(n.targets,r),a=[F(`provider`,e.id),F(`command`,i.join(` `))],o=await We(n.context,t.contextualMutation,()=>t.updateMany(n.targets.map(e=>e.id),r.updateStrategy,n.context));return y(o)?b(o):o.kind===`rejected`?N(e,i,a,`update-many`,void 0,o.reason):o.value.kind===`success`?I(n.targets.map(e=>({evidence:a,target:e}))):Ke(o.value,e,i,a,`update-many`)}async function M(e,t,n,r,i,a){let o=await We(t,i,a);if(y(o))return b(o);let s=[F(`provider`,e.id),F(`command`,r.join(` `))];return o.kind===`rejected`?N(e,r,s,r[1]??`operation`,n.id,o.reason):o.value.kind===`success`?I({evidence:s,target:n}):Ke(o.value,e,r,s,r[1]??`operation`,n.id)}function Ke(e,t,n,r,i,a){if(e.kind!==`failed`)return e;let o=N(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 N(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 P(e){return{distTag:e?.distTag??`latest`,distTagExplicit:e?.distTag!==void 0,registry:ee(e?.registry),updateStrategy:e?.updateStrategy??`latest-major`}}function F(e,t){return{kind:e,value:t}}function I(e){return{kind:`success`,value:e}}const qe={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)]},Je={contextualMutation:!0,contextualPackageObservation:!0,getInstalledVersion:(e,t)=>ie(e,t),install:(e,t,n,r)=>re(e,t,n,r),isAvailable:e=>Se(e),probePackagePresence:(e,t)=>ne(e,void 0,t),resolveLatestVersion:(e,t,n)=>d(e,t,{registry:n}),uninstall:(e,t)=>u(e,t),update:(e,t,n,r,i)=>oe(e,t,n,r,i),updateMany:(e,t,n)=>ae(e,t,n)};function Ye(e=Je){return Ue({commands:qe,displayName:`Bun`,executable:`bun`,id:`bun`},e)}const Xe=Ye();function Ze(e,t,n,r){return f([`cargo`,e,t,...n],r,`cargo ${e} failed`)}function Qe(e,t,n){return Ze(`install`,e,t??[],n)}function $e(e,t,n){return Qe(e,[`--force`,...t??[]],n)}function et(e,t){return a(e.map(e=>[`cargo`,`install`,e.packageName,`--force`,...e.packageInstallArgs??[]]),t,`cargo update failed`)}function tt(e,t){return Ze(`uninstall`,e,[],t)}async function nt(e,i){try{let a=r([`cargo`,`install`,`--list`],{detached:i!==void 0&&p.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),{exitCode:o,stdout:s}=i?await t(a,i):await n(a);if(o!==0)return{presence:`unknown`};let c=at(s,e);return c?{presence:`present`,version:c}:ot(s,e)?{presence:`present`}:{presence:`absent`}}catch(e){if(o(e))throw e;return{presence:`unknown`}}}async function rt(e,t){return(await nt(e,t)).presence}async function it(e,t){return(await nt(e,t)).version}function at(e,t){let n=st(e,t);if(!n)return;let r=n[1];return r&&/^\d/.test(r)?r:void 0}function ot(e,t){return st(e,t)!==void 0}function st(e,t){let n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`),r=RegExp(`^${n}\\s+v([^:\\s]+):\\s*$`,`m`);return e.match(r)??void 0}const ct={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>it(e.id,t),install:(e,t)=>Qe(e.id,e.arguments?[...e.arguments]:void 0,t),isAvailable:e=>Ee(e),probePackagePresence:(e,t)=>rt(e.id,t),uninstall:(e,t)=>tt(e.id,t),update:(e,t)=>$e(e.id,e.arguments?[...e.arguments]:void 0,t),updateMany:(e,t)=>et(e.map(e=>({...e.arguments?{packageInstallArgs:[...e.arguments]}:{},packageName:e.id})),t)};function lt(e,t=!1){return[`cargo`,`install`,e.id,...t?[`--force`]:[],...e.arguments??[]]}function ut(e=ct){return w({commands:{install:e=>lt(e),uninstall:e=>[`cargo`,`uninstall`,e.id],update:e=>lt(e,!0),updateMany:e=>[`cargo`,`install`,...e.flatMap(e=>[e.id,`--force`,...e.arguments??[]])]},displayName:`Cargo`,executable:`cargo`,id:`cargo`},e)}const dt=ut();function ft(e,t,n,r){let i=[`deno`,`install`,`--global`];return n.force&&i.push(`--force`),i.push(...t,e),f(i,r,`deno ${n.force?`update`:`install`} failed`)}function pt(e,t,n){return ft(e,t??[],{},n)}function mt(e,t,n){return ft(e,t??[],{force:!0},n)}function ht(e,t){return a(e.map(e=>[`deno`,`install`,`--global`,`--force`,...e.packageInstallArgs??[],e.packageName]),t,`deno update failed`)}function gt(e,t){return f([`deno`,`uninstall`,`--global`,e],t,`deno uninstall failed`)}async function _t(e,t){if(!e.trim())return{presence:`unknown`};try{return await se(m(bt(),`bin`,e),ce.F_OK),{presence:`present`}}catch(e){if(o(e))throw e;return xt(e)&&(e.code===`ENOENT`||e.code===`ENOTDIR`)?{presence:`absent`}:{presence:`unknown`}}}async function vt(e,t){return(await _t(e,t)).presence}async function yt(e,t){return(await _t(e,t)).version}function L(e,t){if(t?.trim())return t.trim();let n=e.trim().split(`/`).pop()?.replace(/@.*$/,``);return n&&n.length>0?n:e.trim()}function bt(){let e=p.env.DENO_INSTALL_ROOT?.trim();return e&&e.length>0?e:m(le(),`.deno`)}function xt(e){return typeof e==`object`&&!!e&&`code`in e}const St={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>yt(L(e.id,e.binaryName),t),install:(e,t)=>pt(e.id,e.arguments?[...e.arguments]:void 0,t),isAvailable:e=>Te(e),probePackagePresence:(e,t)=>vt(L(e.id,e.binaryName),t),uninstall:(e,t)=>gt(L(e.id,e.binaryName),t),update:(e,t)=>mt(e.id,e.arguments?[...e.arguments]:void 0,t),updateMany:(e,t)=>ht(e.map(e=>({...e.arguments?{packageInstallArgs:[...e.arguments]}:{},...e.binaryName?{binaryName:e.binaryName}:{},packageName:e.id})),t)};function Ct(e,t=!1){return[`deno`,`install`,`--global`,...t?[`--force`]:[],...e.arguments??[],e.id]}function wt(e=St){return w({commands:{install:e=>Ct(e),uninstall:e=>[`deno`,`uninstall`,`--global`,L(e.id,e.binaryName)],update:e=>Ct(e,!0),updateMany:e=>[`deno`,`install`,`--global`,`--force`,...e.flatMap(e=>[...e.arguments??[],e.id])]},displayName:`Deno`,executable:`deno`,id:`deno`},e)}const Tt=wt(),Et={contextualExecution:!0,execute:(e,t)=>f(kt(e,_()),t,`install effect failed`),isExecutablePresent:Me};function Dt(e,t={}){let n={...Et,...t,contextualExecution:t.execute?t.contextualExecution??!1:!0};return{availability:async e=>At(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 Ot(t.context,n.contextualExecution,()=>n.execute(r,t.context));if(y(i))return b(i);let a=kt(r,_()),o=jt(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: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 x(t.context,()=>n.isExecutablePresent(r));return y(i)?b(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}}}}}function Ot(e,t,n){return t?S(e,n):x(e,n)}function kt(e,t){return e.kind===`executable`?e.command:t===`windows`?[`powershell.exe`,`-Command`,e.command]:[`sh`,`-c`,e.command]}async function At(e){return e.signal.aborted?{kind:`cancelled`,reason:String(e.signal.reason)}:{kind:`success`,value:{executable:_()===`windows`?`powershell.exe`:`sh`}}}function jt(e,t){return[{kind:`provider`,value:e},{kind:`command`,value:t.join(` `)}]}const Mt=Dt(`script`),Nt=Dt(`binary`);function Pt(e,t,n){return f([`mise`,`use`,`--global`,...t?[`--force`]:[],e],n,`mise ${t?`update`:`install`} failed`)}function Ft(e,t){return Pt(e,!1,t)}function It(e,t){return Pt(e,!0,t)}function Lt(e,t){return a(e.map(e=>[`mise`,`use`,`--global`,`--force`,e.packageName]),t,`mise update failed`)}function Rt(e,t){return f([`mise`,`unuse`,`--global`,e],t,`mise uninstall failed`)}async function zt(e,i){try{let a=r([`mise`,`ls`,`--installed`,`--json`,e],{detached:i!==void 0&&p.platform!==`win32`,stdio:[`ignore`,`pipe`,`ignore`]}),{stdout:o}=i?await t(a,i):await n(a);if(!o.trim())return{presence:`unknown`};try{let t=JSON.parse(o);if(!R(t))return{presence:`unknown`};let n=Ut(t,e),r=n?t[n]:void 0;if(!Array.isArray(r)||r.length===0)return{presence:`absent`};let i=Ht(o,e);return i?{presence:`present`,version:i}:{presence:`present`}}catch{return{presence:`unknown`}}}catch(e){if(o(e))throw e;return{presence:`unknown`}}}async function Bt(e,t){return(await zt(e,t)).presence}async function Vt(e,t){return(await zt(e,t)).version}function Ht(e,t){try{let n=JSON.parse(e);if(!R(n))return;let r=Ut(n,t),i=r?n[r]:void 0;if(!Array.isArray(i))return;for(let e of i)if(R(e)&&typeof e.version==`string`&&e.version.length>0)return e.version;return}catch{return}}function Ut(e,t){if(Array.isArray(e[t]))return t;let n=t.split(`:`).pop()?.split(`/`).pop();if(n)return Object.keys(e).find(t=>t===n&&Array.isArray(e[t]))}function R(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}const Wt={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>Vt(e.id,t),install:(e,t)=>Ft(e.id,t),isAvailable:e=>De(e),probePackagePresence:(e,t)=>Bt(e.id,t),uninstall:(e,t)=>Rt(e.id,t),update:(e,t)=>It(e.id,t),updateMany:(e,t)=>Lt(e.map(e=>({packageName:e.id})),t)};function Gt(e,t=!1){return[`mise`,`use`,`--global`,...t?[`--force`]:[],e.id]}function Kt(e=Wt){return w({commands:{install:e=>Gt(e),uninstall:e=>[`mise`,`unuse`,`--global`,e.id],update:e=>Gt(e,!0),updateMany:e=>[`mise`,`use`,`--global`,`--force`,...e.map(e=>e.id)]},displayName:`mise`,executable:`mise`,id:`mise`},e)}const qt=Kt(),Jt={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)]},Yt={contextualMutation:!0,contextualPackageObservation:!0,getInstalledVersion:(e,t)=>c(e,t),install:(e,t,n,r)=>s(e,t,n,r),isAvailable:e=>Ce(e),probePackagePresence:(e,t)=>l(e,t),resolveLatestVersion:(e,t,n)=>d(e,t,{registry:n}),uninstall:(e,t)=>i(e,t),update:(e,t,n,r,i)=>te(e,t,n,r,i),updateMany:(t,n,r)=>e(t,n,r)};function Xt(e=Yt){return Ue({commands:Jt,displayName:`npm`,executable:`npm`,id:`npm`},e)}const Zt=Xt();let z=null;async function B(e){if(z)return{kind:`success`,value:z};for(let n of[[`pip`],[`pip3`],[`python`,`-m`,`pip`],[`python3`,`-m`,`pip`]])try{let{exitCode:i}=await t(r([...n,`--version`],{detached:p.platform!==`win32`,stdio:[`ignore`,`pipe`,`ignore`]}),e);if(i===0)return z=n,{kind:`success`,value:n}}catch(t){if(o(t))return t.kind===`timed-out`?{kind:`timed-out`,timeoutMs:t.timeoutMs??e.timeoutMs??0}:{kind:`cancelled`,...t.reason?{reason:t.reason}:{}}}return z=[`pip`],{kind:`success`,value:z}}async function V(e,t){let n=await B(t);return n.kind===`success`?f([...n.value,...e],t,`pip command failed`):n}function Qt(e,t){return V([`install`,e],t)}function $t(e,t){return V([`install`,`--upgrade`,e],t)}async function en(e,t){if(e.length===0)return{kind:`success`,value:void 0};let n=await B(t);return n.kind===`success`?a(e.map(e=>[...n.value,`install`,`--upgrade`,e.packageName]),t,`pip update failed`):n}function tn(e,t){return V([`uninstall`,`-y`,e],t)}async function nn(e,i){let a=i??{signal:new AbortController().signal,timeoutMs:5e3};try{let o=await B(a);if(o.kind!==`success`)return{presence:`unknown`};let s=r([...o.value,`show`,e],{detached:i!==void 0&&p.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),{exitCode:c,stderr:l,stdout:u}=i?await t(s,i):await n(s);if(c===0){let e=on(u);return e?{presence:`present`,version:e}:{presence:`present`}}return c===1&&sn(l)?{presence:`absent`}:{presence:`unknown`}}catch(e){if(o(e))throw e;return{presence:`unknown`}}}async function rn(e,t){return(await nn(e,t)).presence}async function an(e,t){return(await nn(e,t)).version}function on(e){for(let t of e.split(/\r?\n/)){let e=/^Version:\s*(.+)\s*$/i.exec(t.trim());if(e?.[1])return e[1].trim()}}function sn(e){let t=e.toLowerCase();return t.includes(`package(s) not found`)||t.includes(`not found`)}const cn={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>an(e.id,t),install:(e,t)=>Qt(e.id,t),isAvailable:e=>ke(e),probePackagePresence:(e,t)=>rn(e.id,t),uninstall:(e,t)=>tn(e.id,t),update:(e,t)=>$t(e.id,t),updateMany:(e,t)=>en(e.map(e=>({packageName:e.id})),t)};function ln(e=cn){return w({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 un=ln();function dn(e,t,n,r){return f([`uv`,`tool`,e,t,...n],r,`uv ${e} failed`)}function fn(e,t,n){return dn(`install`,e,t??[],n)}function pn(e,t,n){return dn(`upgrade`,e,t??[],n)}function mn(e,t){return a(e.map(e=>[`uv`,`tool`,`upgrade`,e.packageName,...e.packageInstallArgs??[]]),t,`uv update failed`)}function hn(e,t){return f([`uv`,`tool`,`uninstall`,e],t,`uv uninstall failed`)}async function gn(e,i){try{let a=r([`uv`,`tool`,`list`],{detached:i!==void 0&&p.platform!==`win32`,stdio:[`ignore`,`pipe`,`ignore`]}),{stdout:o}=i?await t(a,i):await n(a);if(!o.trim())return{presence:`unknown`};let s=bn(o,e);return s?{presence:`present`,version:s}:yn(o)?{presence:`absent`}:{presence:`unknown`}}catch(e){if(o(e))throw e;return{presence:`unknown`}}}async function _n(e,t){return(await gn(e,t)).presence}async function vn(e,t){return(await gn(e,t)).version}function yn(e){return e.split(/\r?\n/).some(e=>/^\S+\s+v[^\s]+/.test(e.trim()))}function bn(e,t){let n=xn(t);for(let t of e.split(/\r?\n/)){let e=t.trim(),r=/^(\S+)\s+v([^\s]+)/.exec(e);if(!r)continue;let[,i,a]=r;if(xn(i)===n)return a}}function xn(e){return e.toLowerCase().replaceAll(/[-_.]+/g,`-`)}const Sn={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>vn(e.id,t),install:(e,t)=>fn(e.id,e.arguments?[...e.arguments]:void 0,t),isAvailable:e=>Ae(e),probePackagePresence:(e,t)=>_n(e.id,t),uninstall:(e,t)=>hn(e.id,t),update:(e,t)=>pn(e.id,e.arguments?[...e.arguments]:void 0,t),updateMany:(e,t)=>mn(e.map(e=>({...e.arguments?{packageInstallArgs:[...e.arguments]}:{},packageName:e.id})),t)};function Cn(e,t){return[`uv`,`tool`,e,t.id,...t.arguments??[]]}function wn(e=Sn){return w({commands:{install:e=>Cn(`install`,e),uninstall:e=>[`uv`,`tool`,`uninstall`,e.id],update:e=>Cn(`upgrade`,e),updateMany:e=>[`uv`,`tool`,`upgrade`,...e.flatMap(e=>[e.id,...e.arguments??[]])]},displayName:`uv`,executable:`uv`,id:`uv`},e)}const Tn=wn();function H(e,t,n){return f([`winget`,e,`--id`,t,`-e`],n,`winget ${e} failed`)}function En(e,t){return H(`install`,e,t)}function Dn(e,t){return H(`upgrade`,e,t)}function On(e,t){return a(e.map(e=>[`winget`,`upgrade`,`--id`,e.packageName,`-e`]),t,`winget update failed`)}function kn(e,t){return H(`uninstall`,e,t)}async function An(e,i){try{let a=r([`winget`,`list`,`--id`,e,`-e`],{detached:i!==void 0&&p.platform!==`win32`,stdio:[`ignore`,`pipe`,`pipe`]}),{exitCode:o,stderr:s,stdout:c}=i?await t(a,i):await n(a);if(o===0){let t=Nn(c,e);return t?{presence:`present`,version:t}:c.toLowerCase().includes(e.toLowerCase())?{presence:`present`}:{presence:`unknown`}}return Pn(s)||Pn(c)?{presence:`absent`}:{presence:`unknown`}}catch(e){if(o(e))throw e;return{presence:`unknown`}}}async function jn(e,t){return(await An(e,t)).presence}async function Mn(e,t){return(await An(e,t)).version}function Nn(e,t){let n=t.toLowerCase();for(let t of e.split(/\r?\n/)){let e=t.trim();if(!e||e.toLowerCase().startsWith(`name`)||e.startsWith(`-`))continue;let r=e.split(/\s{2,}|\t+/).map(e=>e.trim()).filter(Boolean);if(r.length<2)continue;let i=r.findIndex(e=>e.toLowerCase()===n);if(i<0)continue;let a=r[i+1];return a&&a.length>0?a:void 0}}function Pn(e){let t=e.toLowerCase();return t.includes(`no installed package found`)||t.includes(`no package found matching input criteria`)||t.includes(`no installed package matched`)}const Fn={contextualMutation:!0,contextualObservation:!0,getInstalledVersion:(e,t)=>Mn(e.id,t),install:(e,t)=>En(e.id,t),isAvailable:e=>Oe(e),probePackagePresence:(e,t)=>jn(e.id,t),uninstall:(e,t)=>kn(e.id,t),update:(e,t)=>Dn(e.id,t),updateMany:(e,t)=>On(e.map(e=>({packageName:e.id})),t)};function U(e,t){return[`winget`,e,`--id`,t.id,`-e`]}function In(e=Fn){return w({commands:{install:e=>U(`install`,e),uninstall:e=>U(`uninstall`,e),update:e=>U(`upgrade`,e),updateMany:e=>[`winget`,`upgrade`,...e.flatMap(e=>[`--id`,e.id,`-e`])]},displayName:`winget`,executable:`winget`,id:`winget`},e)}const Ln=In(),Rn=Object.freeze([`bun`,`npm`,`brew`,`cargo`,`deno`,`mise`,`pip`,`uv`,`winget`,`script`,`binary`]),zn=Object.freeze([`availability`,`observe`,`resolve-latest-version`,`install`,`update`,`update-many`,`uninstall`,`verify`]),Bn={availability:`availability`,install:`install`,observe:`observe`,"resolve-latest-version":`resolveLatestVersion`,uninstall:`uninstall`,update:`update`,"update-many":`updateMany`,verify:`verify`};function Vn(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,Un(e)]));return Object.freeze({get(e){return t.get(e)},getCapabilities(e){return r.get(e)??Object.freeze([])},list(){return n}})}function Hn(e){return Vn(Rn.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 Un(e){return Object.freeze(zn.filter(t=>typeof e[Bn[t]]==`function`))}const Wn=Hn({binary:Nt,brew:He,bun:Xe,cargo:dt,deno:Tt,mise:qt,npm:Zt,pip:un,script:Mt,uv:Tn,winget:Ln}),Gn=[{name:`amp`,displayName:`Amp`,homepage:`https://ampcode.com/`,binaryName:`amp`,selfUpdate:{command:[`amp`,`update`]},versionProbe:{command:[`amp`,`version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@sourcegraph/amp`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@sourcegraph/amp`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@sourcegraph/amp`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@sourcegraph/amp`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@sourcegraph/amp`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@sourcegraph/amp`,kind:`package`}}]}},{name:`antigravity`,lookupAliases:[`agy`,`antigravity-cli`],displayName:`Antigravity CLI`,homepage:`https://antigravity.google/product/antigravity-cli`,binaryName:`agy`,selfUpdate:{command:[`agy`,`update`]},versionProbe:{command:[`agy`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://antigravity.google/cli/install.ps1`,kind:`script`,effect:{command:`irm https://antigravity.google/cli/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://antigravity.google/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://antigravity.google/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://antigravity.google/cli/install.sh | bash`,kind:`shell-script`}}}]}},{name:`auggie`,displayName:`Auggie CLI`,homepage:`https://docs.augmentcode.com/cli/overview`,binaryName:`auggie`,selfUpdate:{command:[`auggie`,`upgrade`]},versionProbe:{command:[`auggie`,`--version`]},platforms:{macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@augmentcode/auggie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@augmentcode/auggie`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@augmentcode/auggie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@augmentcode/auggie`,kind:`package`}}]}},{name:`autohand`,lookupAliases:[`autohand-cli`],displayName:`Autohand Code CLI`,homepage:`https://autohand.ai/cli/`,packages:{npm:`autohand-cli`},binaryName:`autohand`,versionProbe:{command:[`autohand`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://autohand.ai/install.ps1`,kind:`script`,effect:{command:`iwr -useb https://autohand.ai/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://autohand.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://autohand.ai/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://autohand.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://autohand.ai/install.sh | bash`,kind:`shell-script`}}}]}},{name:`claude`,displayName:`Claude Code`,homepage:`https://code.claude.com/docs`,binaryName:`claude`,selfUpdate:{command:[`claude`,`update`],fallbackCommands:[[`claude`,`upgrade`]]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://claude.ai/install.ps1`,kind:`script`,effect:{command:`irm https://claude.ai/install.ps1 | iex`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`winget`,target:{id:`Anthropic.ClaudeCode`,kind:`id`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://claude.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://claude.ai/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`claude-code`,kind:`cask`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@anthropic-ai/claude-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://claude.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://claude.ai/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`claude-code`,kind:`cask`}}]}},{name:`codebuddy`,lookupAliases:[`codebuddy-code`],displayName:`CodeBuddy Code`,homepage:`https://www.codebuddy.cn/docs/cli/installation`,binaryName:`codebuddy`,selfUpdate:{command:[`codebuddy`,`update`]},versionProbe:{command:[`codebuddy`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://www.codebuddy.cn/cli/install.ps1`,kind:`script`,effect:{command:`irm https://www.codebuddy.cn/cli/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://www.codebuddy.cn/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://www.codebuddy.cn/cli/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`Tencent-CodeBuddy/tap/codebuddy-code`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@tencent-ai/codebuddy-code`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://www.codebuddy.cn/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://www.codebuddy.cn/cli/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`Tencent-CodeBuddy/tap/codebuddy-code`,kind:`formula`}}]}},{name:`codewhale`,displayName:`CodeWhale`,homepage:`https://github.com/Hmbown/CodeWhale`,binaryName:`codewhale`,selfUpdate:{command:[`codewhale`,`update`]},versionProbe:{command:[`codewhale`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`codewhale`,kind:`package`}},{provider:`cargo`,target:{id:`codewhale-cli`,kind:`package`,arguments:[`--locked`]},probes:[`executable-presence`]}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`codewhale`,kind:`package`}},{provider:`cargo`,target:{id:`codewhale-cli`,kind:`package`,arguments:[`--locked`]},probes:[`executable-presence`]}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`codewhale`,kind:`package`}},{provider:`cargo`,target:{id:`codewhale-cli`,kind:`package`,arguments:[`--locked`]},probes:[`executable-presence`]}]}},{name:`codex`,displayName:`Codex CLI`,homepage:`https://developers.openai.com/codex/cli`,binaryName:`codex`,selfUpdate:{command:[`codex`,`--upgrade`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`],provider:`mise`,target:{id:`npm:@openai/codex`,kind:`tool`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`],provider:`mise`,target:{id:`npm:@openai/codex`,kind:`tool`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`codex`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@openai/codex`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`],provider:`mise`,target:{id:`npm:@openai/codex`,kind:`tool`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`codex`,kind:`formula`}}]}},{name:`commandcode`,lookupAliases:[`command-code`,`cmd`,`cmdc`],displayName:`Command Code`,homepage:`https://commandcode.ai/docs/quickstart`,binaryName:`command-code`,selfUpdate:{command:[`command-code`,`update`]},versionProbe:{command:[`command-code`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`command-code`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`command-code`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`command-code`,kind:`package`}}]}},{name:`copilot`,displayName:`GitHub Copilot CLI`,homepage:`https://github.com/features/copilot/cli`,binaryName:`copilot`,platforms:{windows:[{probes:[`executable-presence`],provider:`winget`,target:{id:`GitHub.Copilot`,kind:`id`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@github/copilot`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@github/copilot`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://gh.io/copilot-install`,kind:`script`,effect:{command:`curl -fsSL https://gh.io/copilot-install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`copilot-cli`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@github/copilot`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@github/copilot`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://gh.io/copilot-install`,kind:`script`,effect:{command:`curl -fsSL https://gh.io/copilot-install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`copilot-cli`,kind:`formula`}}]}},{name:`crush`,displayName:`Crush`,homepage:`https://github.com/charmbracelet/crush`,binaryName:`crush`,selfUpdate:{command:[`crush`,`update`]},versionProbe:{command:[`crush`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`],provider:`winget`,target:{id:`charmbracelet.crush`,kind:`id`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`charmbracelet/tap/crush`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@charmland/crush`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`charmbracelet/tap/crush`,kind:`formula`}}]}},{name:`cursor`,lookupAliases:[`agent`],displayName:`Cursor CLI`,homepage:`https://cursor.com/docs/cli`,binaryName:`agent`,selfUpdate:{command:[`agent`,`update`]},versionProbe:{command:[`agent`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cursor.com/install?win32=true`,kind:`script`,effect:{command:`irm 'https://cursor.com/install?win32=true' | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cursor.com/install`,kind:`script`,effect:{command:`curl https://cursor.com/install -fsS | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cursor.com/install`,kind:`script`,effect:{command:`curl https://cursor.com/install -fsS | bash`,kind:`shell-script`}}}]}},{name:`deepcode`,displayName:`Deep Code CLI`,homepage:`https://github.com/lessweb/deepcode-cli`,binaryName:`deepcode`,versionProbe:{command:[`deepcode`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@vegamo/deepcode-cli`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@vegamo/deepcode-cli`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@vegamo/deepcode-cli`,kind:`package`}}]}},{name:`devin`,displayName:`Devin for Terminal`,homepage:`https://cli.devin.ai/`,binaryName:`devin`,selfUpdate:{command:[`devin`,`update`]},versionProbe:{command:[`devin`,`version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://static.devin.ai/cli/setup.ps1`,kind:`script`,effect:{command:`irm https://static.devin.ai/cli/setup.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.devin.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://cli.devin.ai/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.devin.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://cli.devin.ai/install.sh | bash`,kind:`shell-script`}}}]}},{name:`droid`,displayName:`Droid`,homepage:`https://docs.factory.ai/cli/getting-started/overview`,binaryName:`droid`,selfUpdate:{command:[`droid`,`update`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://app.factory.ai/cli/windows`,kind:`script`,effect:{command:`irm https://app.factory.ai/cli/windows | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://app.factory.ai/cli`,kind:`script`,effect:{command:`curl -fsSL https://app.factory.ai/cli | sh`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`droid`,kind:`cask`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`droid`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://app.factory.ai/cli`,kind:`script`,effect:{command:`curl -fsSL https://app.factory.ai/cli | sh`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`droid`,kind:`cask`}}]}},{name:`forgecode`,lookupAliases:[`forge`],displayName:`ForgeCode`,homepage:`https://forgecode.dev`,binaryName:`forge`,selfUpdate:{command:[`forge`,`update`]},versionProbe:{command:[`forge`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://forgecode.dev/cli`,kind:`script`,effect:{command:`irm https://forgecode.dev/cli | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://forgecode.dev/cli`,kind:`script`,effect:{command:`curl -fsSL https://forgecode.dev/cli | sh`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`forgecode`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://forgecode.dev/cli`,kind:`script`,effect:{command:`curl -fsSL https://forgecode.dev/cli | sh`,kind:`shell-script`}}}]}},{name:`gemini`,displayName:`Gemini CLI`,homepage:`https://google-gemini.github.io/gemini-cli/docs/`,binaryName:`gemini`,platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@google/gemini-cli`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`gemini-cli`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@google/gemini-cli`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`gemini-cli`,kind:`formula`}}]}},{name:`genie`,displayName:`Genie`,homepage:`https://jsr.io/@nicorio/genie`,binaryName:`genie`,platforms:{windows:[{provider:`deno`,target:{id:`jsr:@nicorio/genie`,kind:`tool`,arguments:[`-A`]},probes:[`executable-presence`]}],macos:[{provider:`deno`,target:{id:`jsr:@nicorio/genie`,kind:`tool`,arguments:[`-A`]},probes:[`executable-presence`]}],linux:[{provider:`deno`,target:{id:`jsr:@nicorio/genie`,kind:`tool`,arguments:[`-A`]},probes:[`executable-presence`]}]}},{name:`goose`,displayName:`Goose`,homepage:`https://github.com/aaif-goose/goose`,binaryName:`goose`,selfUpdate:{command:[`goose`,`update`]},versionProbe:{command:[`goose`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh`,kind:`script`,effect:{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/aaif-goose/goose/main/download_cli.ps1`,kind:`script`,effect:{command:`Invoke-WebRequest -Uri "https://raw.githubusercontent.com/aaif-goose/goose/main/download_cli.ps1" -OutFile "download_cli.ps1"; ./download_cli.ps1`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh`,kind:`script`,effect:{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`block-goose-cli`,kind:`formula`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh`,kind:`script`,effect:{command:`curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`block-goose-cli`,kind:`formula`}}]}},{name:`grok`,lookupAliases:[`grok-build`],displayName:`Grok Build`,homepage:`https://docs.x.ai/build/overview`,binaryName:`grok`,selfUpdate:{command:[`grok`,`update`]},versionProbe:{command:[`grok`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://x.ai/cli/install.ps1`,kind:`script`,effect:{command:`irm https://x.ai/cli/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://x.ai/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://x.ai/cli/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://x.ai/cli/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://x.ai/cli/install.sh | bash`,kind:`shell-script`}}}]}},{name:`hermes`,lookupAliases:[`hermes-agent`],displayName:`Hermes Agent`,homepage:`https://github.com/NousResearch/hermes-agent`,binaryName:`hermes`,selfUpdate:{command:[`hermes`,`update`]},versionProbe:{command:[`hermes`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://hermes-agent.nousresearch.com/install.ps1`,kind:`script`,effect:{command:`iex (irm https://hermes-agent.nousresearch.com/install.ps1)`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://hermes-agent.nousresearch.com/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://hermes-agent.nousresearch.com/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash`,kind:`shell-script`}}}]}},{name:`jcode`,displayName:`JCode`,homepage:`https://github.com/1jehuang/jcode`,binaryName:`jcode`,versionProbe:{command:[`jcode`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.ps1`,kind:`script`,effect:{command:`irm https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`brew`,target:{id:`1jehuang/jcode/jcode`,kind:`formula`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://raw.githubusercontent.com/1jehuang/jcode/master/scripts/install.sh | bash`,kind:`shell-script`}}}]}},{name:`junie`,displayName:`Junie CLI`,homepage:`https://junie.jetbrains.com/docs/junie-cli.html`,binaryName:`junie`,versionProbe:{command:[`junie`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://junie.jetbrains.com/install.ps1`,kind:`script`,effect:{command:`iex (irm 'https://junie.jetbrains.com/install.ps1')`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://junie.jetbrains.com/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://junie.jetbrains.com/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`jetbrains-junie/junie/junie`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@jetbrains/junie`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://junie.jetbrains.com/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://junie.jetbrains.com/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`jetbrains-junie/junie/junie`,kind:`formula`}}]}},{name:`kilo`,displayName:`Kilo CLI`,homepage:`https://kilo.ai/docs/cli`,binaryName:`kilo`,selfUpdate:{command:[`kilo`,`upgrade`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@kilocode/cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@kilocode/cli`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@kilocode/cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@kilocode/cli`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@kilocode/cli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@kilocode/cli`,kind:`package`}}]}},{name:`kimi`,lookupAliases:[`kimi-code`,`kimi-cli`],displayName:`Kimi Code`,homepage:`https://moonshotai.github.io/kimi-code/`,binaryName:`kimi`,selfUpdate:{command:[`kimi`,`upgrade`]},versionProbe:{command:[`kimi`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://code.kimi.com/kimi-code/install.ps1`,kind:`script`,effect:{command:`irm https://code.kimi.com/kimi-code/install.ps1 | iex`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@moonshot-ai/kimi-code`,kind:`package`}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://code.kimi.com/kimi-code/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@moonshot-ai/kimi-code`,kind:`package`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://code.kimi.com/kimi-code/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://code.kimi.com/kimi-code/install.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@moonshot-ai/kimi-code`,kind:`package`}}]}},{name:`kiro`,lookupAliases:[`kiro-cli`],displayName:`Kiro CLI`,homepage:`https://kiro.dev/cli/`,binaryName:`kiro-cli`,versionProbe:{command:[`kiro-cli`,`--version`]},platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.kiro.dev/install.ps1`,kind:`script`,effect:{command:`irm 'https://cli.kiro.dev/install.ps1' | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.kiro.dev/install`,kind:`script`,effect:{command:`curl -fsSL https://cli.kiro.dev/install | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://cli.kiro.dev/install`,kind:`script`,effect:{command:`curl -fsSL https://cli.kiro.dev/install | bash`,kind:`shell-script`}}}]}},{name:`mimo`,lookupAliases:[`mimocode`,`mimo-code`],displayName:`MiMoCode`,homepage:`https://github.com/XiaomiMiMo/MiMo-Code`,binaryName:`mimo`,versionProbe:{command:[`mimo`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mimo-ai/cli`,kind:`package`}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://mimo.xiaomi.com/install`,kind:`script`,effect:{command:`curl -fsSL https://mimo.xiaomi.com/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mimo-ai/cli`,kind:`package`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://mimo.xiaomi.com/install`,kind:`script`,effect:{command:`curl -fsSL https://mimo.xiaomi.com/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mimo-ai/cli`,kind:`package`}}]}},{name:`omp`,displayName:`oh-my-pi (OMP)`,homepage:`https://github.com/can1357/oh-my-pi`,binaryName:`omp`,versionProbe:{command:[`omp`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@oh-my-pi/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://omp.sh/install.ps1`,kind:`script`,effect:{command:`irm https://omp.sh/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@oh-my-pi/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://omp.sh/install`,kind:`script`,effect:{command:`curl -fsSL https://omp.sh/install | sh`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@oh-my-pi/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://omp.sh/install`,kind:`script`,effect:{command:`curl -fsSL https://omp.sh/install | sh`,kind:`shell-script`}}}]}},{name:`openclaw`,displayName:`OpenClaw`,homepage:`https://github.com/openclaw/openclaw`,binaryName:`openclaw`,selfUpdate:{command:[`openclaw`,`update`]},versionProbe:{command:[`openclaw`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://openclaw.ai/install.ps1`,kind:`script`,effect:{command:`iwr -useb https://openclaw.ai/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://openclaw.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://openclaw.ai/install.sh | bash`,kind:`shell-script`}}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`openclaw`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://openclaw.ai/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://openclaw.ai/install.sh | bash`,kind:`shell-script`}}}]}},{name:`opencode`,displayName:`OpenCode`,homepage:`https://opencode.ai`,binaryName:`opencode`,selfUpdate:{command:[`opencode`,`upgrade`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`opencode-ai`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://opencode.ai/install`,kind:`script`,effect:{command:`curl -fsSL https://opencode.ai/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`anomalyco/tap/opencode`,kind:`formula`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`opencode-ai`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://opencode.ai/install`,kind:`script`,effect:{command:`curl -fsSL https://opencode.ai/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`anomalyco/tap/opencode`,kind:`formula`}}]}},{name:`openhands`,displayName:`OpenHands CLI`,homepage:`https://docs.openhands.dev/openhands/usage/cli/installation`,binaryName:`openhands`,selfUpdate:{command:[`uv`,`tool`,`upgrade`,`openhands`,`--python`,`3.12`]},versionProbe:{command:[`openhands`,`--version`]},platforms:{macos:[{provider:`uv`,target:{id:`openhands`,kind:`tool`,arguments:[`--python`,`3.12`]},probes:[`executable-presence`,`installed-version`,`package-presence`]},{probes:[`executable-presence`],provider:`script`,target:{id:`https://install.openhands.dev/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://install.openhands.dev/install.sh | sh`,kind:`shell-script`}}}],linux:[{provider:`uv`,target:{id:`openhands`,kind:`tool`,arguments:[`--python`,`3.12`]},probes:[`executable-presence`,`installed-version`,`package-presence`]},{probes:[`executable-presence`],provider:`script`,target:{id:`https://install.openhands.dev/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://install.openhands.dev/install.sh | sh`,kind:`shell-script`}}}]}},{name:`pi`,displayName:`Pi`,homepage:`https://pi.dev`,binaryName:`pi`,selfUpdate:{command:[`pi`,`update`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@mariozechner/pi-coding-agent`,kind:`package`}}]}},{name:`qoder`,lookupAliases:[`qodercli`],displayName:`Qoder CLI`,homepage:`https://docs.qoder.com/cli/quick-start`,binaryName:`qodercli`,selfUpdate:{command:[`qodercli`,`update`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qoder-ai/qodercli`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://qoder.com/install`,kind:`script`,effect:{command:`curl -fsSL https://qoder.com/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`qoderai/qoder/qodercli`,kind:`cask`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qoder-ai/qodercli`,kind:`package`}},{probes:[`executable-presence`],provider:`script`,target:{id:`https://qoder.com/install`,kind:`script`,effect:{command:`curl -fsSL https://qoder.com/install | bash`,kind:`shell-script`}}},{probes:[`executable-presence`],provider:`brew`,target:{id:`qoderai/qoder/qodercli`,kind:`cask`}}]}},{name:`qwen`,displayName:`Qwen Code`,homepage:`https://qwenlm.github.io/qwen-code-docs/`,binaryName:`qwen`,platforms:{windows:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.bat`,kind:`script`,effect:{command:`curl -fsSL -o %TEMP%\\install-qwen.bat https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.bat && %TEMP%\\install-qwen.bat`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qwen-code/qwen-code`,kind:`package`}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh`,kind:`script`,effect:{command:`curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`qwen-code`,kind:`formula`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh`,kind:`script`,effect:{command:`curl -fsSL https://qwen-code-assets.oss-cn-hangzhou.aliyuncs.com/installation/install-qwen.sh | bash`,kind:`shell-script`}}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`bun`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`@qwen-code/qwen-code`,kind:`package`}},{probes:[`executable-presence`],provider:`brew`,target:{id:`qwen-code`,kind:`formula`}}]}},{name:`reasonix`,lookupAliases:[`deepseek-reasonix`],displayName:`Reasonix`,homepage:`https://github.com/esengine/DeepSeek-Reasonix`,binaryName:`reasonix`,selfUpdate:{command:[`reasonix`,`update`]},versionProbe:{command:[`reasonix`,`--version`]},platforms:{windows:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`reasonix`,kind:`package`}}],macos:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`reasonix`,kind:`package`}}],linux:[{probes:[`executable-presence`,`installed-version`,`package-presence`,`target-version`],provider:`npm`,target:{id:`reasonix`,kind:`package`}}]}},{name:`vibe`,lookupAliases:[`mistral-vibe`],displayName:`Mistral Vibe`,homepage:`https://docs.mistral.ai/mistral-vibe/terminal/install`,binaryName:`vibe`,versionProbe:{command:[`vibe`,`--version`]},platforms:{windows:[{provider:`uv`,target:{id:`mistral-vibe`,kind:`tool`},probes:[`executable-presence`,`installed-version`,`package-presence`],legacy:{packageNameInMethod:!0}},{provider:`pip`,target:{id:`mistral-vibe`,kind:`package`},probes:[`executable-presence`],legacy:{packageNameInMethod:!0}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://mistral.ai/vibe/install.sh`,kind:`script`,effect:{command:`curl -LsSf https://mistral.ai/vibe/install.sh | bash`,kind:`shell-script`}}},{provider:`uv`,target:{id:`mistral-vibe`,kind:`tool`},probes:[`executable-presence`,`installed-version`,`package-presence`],legacy:{packageNameInMethod:!0}},{provider:`pip`,target:{id:`mistral-vibe`,kind:`package`},probes:[`executable-presence`],legacy:{packageNameInMethod:!0}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://mistral.ai/vibe/install.sh`,kind:`script`,effect:{command:`curl -LsSf https://mistral.ai/vibe/install.sh | bash`,kind:`shell-script`}}},{provider:`uv`,target:{id:`mistral-vibe`,kind:`tool`},probes:[`executable-presence`,`installed-version`,`package-presence`],legacy:{packageNameInMethod:!0}},{provider:`pip`,target:{id:`mistral-vibe`,kind:`package`},probes:[`executable-presence`],legacy:{packageNameInMethod:!0}}]}},{name:`vtcode`,displayName:`VTCode`,homepage:`https://github.com/vinhnx/vtcode`,binaryName:`vtcode`,selfUpdate:{command:[`vtcode`,`update`]},versionProbe:{command:[`vtcode`,`--version`]},platforms:{windows:[{provider:`cargo`,target:{id:`vtcode`,kind:`package`},probes:[`executable-presence`]},{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.ps1`,kind:`script`,effect:{command:`irm https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.ps1 | iex`,kind:`shell-script`}}}],macos:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh | bash`,kind:`shell-script`}}},{provider:`cargo`,target:{id:`vtcode`,kind:`package`},probes:[`executable-presence`]},{probes:[`executable-presence`],provider:`brew`,target:{id:`vtcode`,kind:`formula`}}],linux:[{probes:[`executable-presence`],provider:`script`,target:{id:`https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh`,kind:`script`,effect:{command:`curl -fsSL https://raw.githubusercontent.com/vinhnx/vtcode/main/scripts/install.sh | bash`,kind:`shell-script`}}},{provider:`cargo`,target:{id:`vtcode`,kind:`package`},probes:[`executable-presence`]},{probes:[`executable-presence`],provider:`brew`,target:{id:`vtcode`,kind:`formula`}}]}}],W=h.string().min(1),G=h.array(W).min(1);h.enum([`windows`,`macos`,`linux`]);const Kn=h.enum([`bun`,`npm`,`brew`,`cargo`,`deno`,`mise`,`pip`,`uv`,`winget`]),qn=h.enum([`package`,`cask`,`id`]),K={binaryName:W.optional(),packageInstallArgs:h.array(W).min(1).optional(),packageName:W.optional(),packageTargetKind:qn.optional()},Jn=h.object({...K,type:Kn}).strict(),Yn=h.object({...K,command:W,type:h.literal(`script`)}).strict(),Xn=h.object({...K,command:W,type:h.literal(`binary`)}).strict(),q=h.discriminatedUnion(`type`,[Jn,Yn,Xn]),Zn=h.enum([`executable-presence`,`installed-version`,`package-presence`,`target-version`]),Qn=h.array(Zn).min(1).refine(e=>new Set(e).size===e.length,{message:`candidate probes must be unique`}).optional(),$n=h.object({command:G,kind:h.literal(`executable`)}).strict(),er=h.object({command:W,kind:h.literal(`shell-script`)}).strict(),tr=h.discriminatedUnion(`kind`,[$n,er]);function J(e,t={}){return h.object({arguments:h.array(W).min(1).optional(),binaryName:W.optional(),...t.effect?{effect:tr}:{},id:W,kind:h.literal(e)}).strict()}function Y(e,t){return h.object({legacy:h.object({packageNameInMethod:h.literal(!0).optional()}).strict().optional(),probes:Qn,provider:h.literal(e),target:t}).strict()}const nr=h.discriminatedUnion(`provider`,[Y(`bun`,J(`package`)),Y(`npm`,J(`package`)),Y(`brew`,h.union([J(`formula`),J(`cask`)])),Y(`cargo`,J(`package`)),Y(`deno`,J(`tool`)),Y(`mise`,J(`tool`)),Y(`pip`,J(`package`)),Y(`uv`,J(`tool`)),Y(`winget`,J(`id`)),Y(`script`,J(`script`,{effect:!0})),Y(`binary`,J(`binary`,{effect:!0}))]),X=h.union([q,nr]),rr=h.object({linux:h.array(X).min(1).optional(),macos:h.array(X).min(1).optional(),windows:h.array(X).min(1).optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`platforms must include at least one supported platform`}),ir=h.object({cargo:W.optional(),deno:W.optional(),mise:W.optional(),npm:W.optional(),pip:W.optional(),uv:W.optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`packages must include at least one package identifier`}),ar=h.object({command:G,fallbackCommands:h.array(G).min(1).optional(),versionAfter:h.enum([`same-process`,`respawn`]).optional()}).strict(),or=h.object({command:G.optional()}).strict().refine(e=>e.command!==void 0,{message:`versionProbe must include a serializable command`}),sr=h.object({linux:h.array(q).min(1).optional(),macos:h.array(q).min(1).optional(),windows:h.array(q).min(1).optional()}).strict().refine(e=>Object.values(e).some(Boolean),{message:`platforms must include at least one supported platform`}),Z=h.object({binaryName:W,displayName:W,homepage:h.url().startsWith(`https://`),lookupAliases:h.array(W).min(1).optional(),name:W.regex(/^[a-z0-9][a-z0-9-]*$/),packages:ir.optional(),platforms:sr,selfUpdate:ar.optional(),versionProbe:or.optional()}).strict(),cr=Z.extend({platforms:rr}).strict(),lr=h.array(cr).min(1),ur=h.array(Z).min(1),dr={...ue(ur),$id:`https://github.com/Drswith/quantex-cli/schemas/agent-catalog.schema.json`,title:`Quantex Supported Agent Catalog`},fr={},pr=lr.parse(Gn).map(gr),mr=new Map(pr.map(e=>[e.name,e]));function hr(){return pr}function Q(e){let t=mr.get(e);if(!t)throw Error(`Unknown catalog agent: ${e}`);return t}function gr(e){let t=fr[e.name],n=Sr(e.versionProbe,t),r=vr(e),i=Object.fromEntries(Object.entries(e.platforms).map(([e,t])=>[e,t?.map(_r)]));return{...e,...r?{packages:r}:{},platforms:i,versionProbe:n}}function _r(e){if(`type`in e)return e;let{provider:t,target:n}=e;if(t===`script`||t===`binary`){let e=n.effect;if(!br(e))throw Error(`${t} catalog candidate requires an execution effect`);let r=e.kind===`shell-script`?e.command:xr(e.command);return{...n.binaryName?{binaryName:n.binaryName}:{},command:r,type:t}}let r=yr(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 vr(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=yr(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 yr(e){if(e===`bun`||e===`npm`)return`npm`;if(e===`cargo`||e===`deno`||e===`mise`||e===`pip`||e===`uv`)return e}function br(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 xr(e){return e.map(e=>e.includes(` `)?JSON.stringify(e):e).join(` `)}function Sr(e,t){if(!(!e&&!t?.versionProbeParser))return{...e,...t?.versionProbeParser?{parser:t.versionProbeParser}:{}}}Q(`amp`),Q(`antigravity`),Q(`auggie`);const Cr=Q(`autohand`),wr=Q(`claude`),Tr=Q(`codebuddy`),Er=Q(`codewhale`),Dr=Q(`codex`);Q(`commandcode`);const Or=Q(`copilot`);Q(`crush`);const kr=Q(`cursor`),Ar=Q(`deepcode`),jr=Q(`devin`),Mr=Q(`droid`);Q(`forgecode`);const Nr=Q(`gemini`),Pr=Q(`genie`);Q(`goose`);const Fr=Q(`grok`),Ir=Q(`hermes`),Lr=Q(`jcode`),Rr=Q(`junie`),zr=Q(`kilo`);Q(`kimi`),Q(`kiro`);const Br=Q(`mimo`),Vr=Q(`omp`),Hr=Q(`openclaw`),Ur=Q(`opencode`),Wr=Q(`openhands`),Gr=Q(`pi`),Kr=Q(`qoder`);Q(`qwen`);const qr=Q(`reasonix`),Jr=Q(`vibe`),Yr=Q(`vtcode`),$=hr();function Xr(){return $}function Zr(e){let t=$.find(t=>t.name===e||(t.lookupAliases?.includes(e)??!1));if(t)return t;let n=$r(e);return $.find(e=>$r(e.displayName)===n)}function Qr(e){return Zr(e)}function $r(e){return e.trim().toLowerCase()}export{Tt as $,Yr as A,jn as B,Hr as C,Kr as D,Gr as E,ur as F,an as G,vn as H,Wn as I,qt as J,rn as K,Rn as L,hr as M,Z as N,qr as O,dr as P,Mt as Q,Ln as R,Vr as S,Wr as T,_n as U,Tn as V,un as W,Bt as X,Vt as Y,Nt as Z,Ir as _,wr as a,rt as at,zr as b,Dr as c,_ as ct,Ar as d,Te as dt,yt as et,jr as f,Ce as ft,Fr as g,Pr as h,Cr as i,it,Q as j,Jr as k,Or as l,Me as lt,Nr as m,ve as mt,Qr as n,vt as nt,Tr as o,Xe as ot,Mr as p,ye as pt,Zt as q,Xr as r,dt as rt,Er as s,He as st,Zr as t,L as tt,kr as u,Se as ut,Lr as v,Ur as w,Br as x,Rr as y,Mn as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{B as e,Ct as t,M as n,Nt as r,O as i,S as a,Y as o,Z as s,gt as c,it as l,jt as u,kt as d,mt as f,nt as ee,rt as te,tt as p,ut as m}from"./color-1gXmuBdm.mjs";import{$ as h,B as ne,G as re,H as ie,I as ae,J as oe,K as se,Q as ce,R as le,U as ue,V as de,W as fe,X as pe,Y as me,Z as he,at as ge,ct as g,et as _e,it as ve,lt as ye,mt as be,n as xe,nt as Se,ot as Ce,pt as we,q as Te,r as Ee,rt as De,st as Oe,tt as _,z as ke}from"./agents-CBoMqbP1.mjs";import{C as v,b as y,f as b,g as x,h as S,p as C,v as w,y as Ae}from"./provider-binding-BvvHuohl.mjs";import je from"node:process";import{AsyncLocalStorage as Me}from"node:async_hooks";async function T(e){let t=g(),n=typeof e==`function`?e(t):e;try{return je.platform===`win32`?await u(d([`powershell.exe`,`-Command`,n]))===0:await u(d([`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,n){if(e)return n(e);let r=t();try{return await n(r.context)}finally{r.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`,Oe,e=>e===`cask`?`cask`:`formula`,{getInstalledVersion:(e,t)=>we(e,t),probePackagePresence:(e,t)=>be(e,t)}),bun:E(`bun`,Ce,{getInstalledVersion:e=>f(e),probePackagePresence:e=>c(e)}),cargo:A(`cargo`,De,()=>`package`,{getInstalledVersion:e=>ve(e),probePackagePresence:e=>ge(e)}),deno:A(`deno`,h,()=>`tool`,{getInstalledVersion:e=>_e(_(e)),probePackagePresence:e=>Se(_(e))}),mise:A(`mise`,oe,()=>`tool`,{getInstalledVersion:e=>me(e),probePackagePresence:e=>pe(e)}),npm:E(`npm`,Te,{getInstalledVersion:e=>o(e),probePackagePresence:e=>s(e)}),pip:A(`pip`,fe,()=>`package`,{getInstalledVersion:e=>re(e),probePackagePresence:e=>se(e)}),uv:A(`uv`,de,()=>`tool`,{getInstalledVersion:e=>ie(e),probePackagePresence:e=>ue(e)}),winget:A(`winget`,le,()=>`id`,{getInstalledVersion:e=>ke(e),probePackagePresence:e=>ne(e)})},Ne=Object.fromEntries(Object.entries(j).map(([e,t])=>[e,Fe(t)]));function Pe(e){return Ne[e]}function M(e){return j[e]}function Fe(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 Ie={resource:`agent lifecycle`,scope:[`agent-lifecycle`]},P=new Me;function F(t){return P.getStore()?t():e(Ie,()=>P.run(!0,t))}async function Le(){return(await m()).defaultPackageManager}async function I(){return{npmBunUpdateStrategy:(await m()).npmBunUpdateStrategy}}async function L(e){let t=g(),n=e.platforms[t];if(!n)return[];let r=await Le();return r?[...n.filter(e=>e.type===r),...n.filter(e=>e.type!==r)]:[...n]}async function R(e,n,r,i,a,o,s,c){if(!c){let c=t();try{return await R(e,n,r,i,a,o,s,c.context)}finally{c.dispose()}}let l=M(e);return await l.isAvailable(c)?o===`install`?l.install(n,a,i,c):o===`update`?l.update(n,a,{binaryName:r,npmBunUpdateStrategy:s,packageInstallArgs:i},c):l.uninstall(n,a,{binaryName:r},c):{kind:`unavailable`,reason:`${e} executable is unavailable`,retryable:!1}}async function z(e,n,r,i){if(v(n.type)){let t=x(e,n);return t?R(n.type,t,n.binaryName??e.binaryName,n.packageInstallArgs,n.packageTargetKind,r,i):{kind:`failed`,reason:`package target is missing for ${e.name}`,retryable:!1}}if(r===`update`&&!Ae(n.type))return{kind:`unsupported`,operation:`update`};if(!n.command)return{kind:`failed`,reason:`install effect is missing for ${e.name}`,retryable:!1};let a=n.type===`script`?ce:he,o=t();try{return await a.install?.({context:o.context,target:{binaryName:n.binaryName??e.binaryName,effect:{command:n.command,kind:`shell-script`},id:e.name,kind:n.type}})??{kind:`unsupported`,operation:r}}finally{o.dispose()}}function B(e,t){if(e.packageName)return e.packageName;if(!(!t||!v(e.installType)))return x(t,{type:e.installType})}async function V(e,t,n){if(v(e.installType)){let r=B(e,n?.agent);return r?R(e.installType,r,e.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(!v(t.type))return;let n=x(e,t);n&&await R(t.type,n,t.binaryName??e.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`,void 0,q())}async function Re(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:x(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 ze(e,t){if(r().cancelled)return null;let a=U(e,t);return r().cancelled?null:(await n(a),r().cancelled?(await i(e.name),null):a)}async function W(e,t){return F(async()=>{let n=t?[...t]:await L(e),i;for(let t of n){if(r().cancelled)return{kind:`cancelled`,reason:`install-cancelled`};let n=await z(e,t,`install`);if(n.kind===`success`)return r().cancelled?(await H(e,t),{kind:`cancelled`,reason:`install-cancelled`}):{kind:`success`,value:{installedState:U(e,t)}};let a=Y(n);if(a.kind===`cancelled`||a.kind===`timed-out`)return a;if(i=a,r().cancelled)return await H(e,t),{kind:`cancelled`,reason:`install-cancelled`}}return i??{kind:`failed`,reason:`install-failed`,retryable:!1}})}async function Be(e){return F(async()=>{let t=await W(e);if(t.kind!==`success`||!t.value.installedState)return J(t);try{return r().cancelled?(await K(e,t.value.installedState),{success:!1}):(await n(t.value.installedState),r().cancelled?(await i(e.name),await K(e,t.value.installedState),{success:!1}):J(t))}catch(n){throw await K(e,t.value.installedState),n}})}async function Ve(e,t){return F(async()=>{let{npmBunUpdateStrategy:i}=await I(),a=await L(e),o=t&&v(t.installType)?B(t,e):void 0,s=t?await V(t,`update`,{agent:e,updateStrategy:i}):void 0;if(t&&s?.kind===`success`)return r().cancelled||(await n(t),r().cancelled)?{kind:`cancelled`,reason:`update-cancelled`}:{kind:`success`,value:{installedState:t}};if(s?.kind===`cancelled`||s?.kind===`timed-out`)return Y(s);if(!t)for(let t of a){let n=await z(e,t,`update`,i);if(n.kind===`success`){let n=await ze(e,t);return n?{kind:`success`,value:{installedState:n}}:{kind:`cancelled`,reason:`update-cancelled`}}if(n.kind===`cancelled`||n.kind===`timed-out`)return Y(n)}return(!t||!v(t.installType)||o)&&await Re(e)?{kind:`success`,value:{}}:{kind:`failed`,reason:`update-failed`,retryable:!1}})}async function He(e,t){return J(await Ve(e,t))}async function Ue(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 We(e,t,n){let r=M(e);if(r.getInstalledVersion&&await r.isAvailable())return r.getInstalledVersion(t,n)}async function Ge(e,t){if(!v(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 Ke(e){return(await F(async()=>{let t=await a(e.name);return t?G(e,t):{kind:`failed`,reason:`installed-state-missing`,retryable:!1}})).kind===`success`}async function G(e,t){if(!w(t.installType))return await i(e.name),{kind:`success`,value:{installedState:t}};let n=await V(t,`uninstall`,{agent:e});return n.kind===`success`||await Ge(t,e)?(await i(e.name),{kind:`success`,value:{installedState:t}}):Y(n)}async function qe(e,t){let n=await V(t,`install`,{agent:e});return n.kind===`success`?{kind:`success`,value:{installedState:t}}:Y(n)}async function K(e,t){if(!w(t.installType)||!v(t.installType))return;let n=B(t,e);n&&await R(t.installType,n,t.binaryName,t.packageInstallArgs,t.packageTargetKind,`uninstall`,void 0,q())}function q(){let e=r().timeoutMs;return{signal:new AbortController().signal,timeoutMs:e===void 0?5e3:Math.max(10,Math.min(e,5e3))}}function J(e){return e.kind===`success`?e.value.installedState?{installedState:e.value.installedState,success:!0}:{success:!0}:{success:!1}}function Y(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 X(e,t){let n=(t.registry??ae).get(e.providerId);return n?n.observe({context:{signal:t.signal,timeoutMs:t.timeoutMs},target:e.target}):{kind:`unavailable`,reason:`Provider ${e.providerId} is not registered.`,retryable:!1}}async function Z(e){let[t,n,r]=await Promise.all([L(e),a(e.name),ye(e.binaryName)]),[i,o,s]=await Promise.all([r?Je(e,n):Promise.resolve(void 0),r?p(e.binaryName):Promise.resolve(void 0),Ye(e,n,t)]);return{agent:e,methods:t,installedState:n,inPath:r,installedVersion:i,latestVersion:s,binaryPath:o,resolvedBinaryPath:await l(o),sourceLabel:b(n),updateLabel:C(e,n),lifecycle:n?y(n.installType):`unmanaged`}}async function Q(e){return Promise.all(e.map(Z))}async function Je(e,t){if(t&&v(t.installType)&&t.packageName){let e=await We(t.installType,t.packageName,t.packageTargetKind);if(e)return e}return ee(e.binaryName,e.versionProbe)}async function Ye(e,t,n){let r=S(e,t,n);if(r)return te(r)}function $(e){return xe(e)}async function Xe(e){let t=$(e);if(t)return{agent:t,inspection:await Z(t)}}async function Ze(){return Q(Ee())}export{F as _,Q as a,L as c,qe as d,K as f,Ue as g,He as h,Z as i,Be as l,G as m,$ as n,X as o,Ke as p,Xe as r,U as s,Ze as t,W as u,Pe as v};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./capabilities-C_gPEld2.mjs";export{e as capabilitiesCommand};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ct as e,W as t,a as n,c as r,r as i,t as a}from"./color-1gXmuBdm.mjs";import{ct as o,r as s}from"./agents-CBoMqbP1.mjs";import{n as c,t as l}from"./provider-observations-CRG1GCgp.mjs";import u from"node:process";function d(e=t()){let n=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:n,flags:new Set(e.flatMap(e=>e.flags)),flagsByCommand:r}}function f(e,t){let n=e.effectsByCommand.get(`upgrade`),r=e.flagsByCommand.get(`upgrade`),i=e.flagsByCommand.get(`exec`);return{assumeYes:e.flags.has(`--yes`),cacheBypass:e.flags.has(`--no-cache`),cacheRefresh:e.flags.has(`--refresh`),channels:r?.has(`--channel`)?[`stable`,`beta`]:[],colorModes:e.flags.has(`--color`)?[`auto`,`always`,`never`]:[],dryRun:e.flags.has(`--dry-run`),execInstallPolicies:i?.has(`--install`)?[`never`,`if-missing`,`always`]:[],freshnessMetadata:e.effects.has(`network`)&&e.flags.has(`--refresh`)&&e.flags.has(`--no-cache`),idempotencyKey:e.flags.has(`--idempotency-key`),logLevels:e.flags.has(`--log-level`)?[`silent`,`error`,`warn`,`info`,`debug`]:[],quietLogs:e.flags.has(`--quiet`),selfUpgrade:t.canAutoUpdateSelf&&!!(n?.has(`mutation`)&&n.has(`network`)),timeout:e.flags.has(`--timeout`)}}async function p(){let t=e(),a,p;try{[a,p]=await t.run(()=>Promise.all([l({context:t.context}),r({context:t.context})]))}finally{t.dispose()}let g=c(a,e=>{let t=e.availability.kind===`success`;return{available:t,reason:t?void 0:m(e.id)}}),_=f(d(),{canAutoUpdateSelf:p.canAutoUpdate});return n(i({action:`capabilities`,data:{agents:s().map(e=>e.name),features:_,installers:g,outputModes:[`human`,`json`,`ndjson`],platform:{arch:u.arch,os:o()}},target:{kind:`system`,name:`capabilities`}}),h)}function m(e){return e===`winget`&&u.platform!==`win32`||e===`brew`&&u.platform===`win32`?`not-on-platform`:`not-found`}function h(e){e.data&&(console.log(a.bold(`
|
|
2
2
|
Quantex Capabilities
|
|
3
|
-
`)),console.log(` Platform: ${e.data.platform.os}/${e.data.platform.arch}`),console.log(` Output Modes: ${e.data.outputModes.join(`, `)}`),console.log(` Agents: ${e.data.agents.join(`, `)}`),console.log(
|
|
4
|
-
Installers:`)),console.log(` bun: ${g(e.data.installers.bun)}`),console.log(` npm: ${g(e.data.installers.npm)}`),console.log(` brew: ${g(e.data.installers.brew)}`),console.log(` cargo: ${g(e.data.installers.cargo)}`),console.log(` deno: ${g(e.data.installers.deno)}`),console.log(` mise: ${g(e.data.installers.mise)}`),console.log(` pip: ${g(e.data.installers.pip)}`),console.log(` uv: ${g(e.data.installers.uv)}`),console.log(` winget: ${g(e.data.installers.winget)}`),console.log(
|
|
5
|
-
Features:`)),console.log(` --yes: ${e.data.features.assumeYes?`yes`:`no`}`),console.log(` cache-refresh: ${e.data.features.cacheRefresh?`yes`:`no`}`),console.log(` color-modes: ${e.data.features.colorModes.join(`, `)}`),console.log(` no-cache: ${e.data.features.cacheBypass?`yes`:`no`}`),console.log(` dry-run: ${e.data.features.dryRun?`yes`:`no`}`),console.log(` freshness-metadata: ${e.data.features.freshnessMetadata?`yes`:`no`}`),console.log(` self-upgrade: ${e.data.features.selfUpgrade?`yes`:`no`}`),console.log(` idempotency-key: ${e.data.features.idempotencyKey?`yes`:`no`}`),console.log(` log-levels: ${e.data.features.logLevels.join(`, `)}`),console.log(` quiet-logs: ${e.data.features.quietLogs?`yes`:`no`}`),console.log(` timeout: ${e.data.features.timeout?`yes`:`no`}`),console.log(` channels: ${e.data.features.channels.join(`, `)}`),console.log(` exec-install-policy: ${e.data.features.execInstallPolicies.join(`, `)}`),console.log())}function g(e){return e.available?
|
|
3
|
+
`)),console.log(` Platform: ${e.data.platform.os}/${e.data.platform.arch}`),console.log(` Output Modes: ${e.data.outputModes.join(`, `)}`),console.log(` Agents: ${e.data.agents.join(`, `)}`),console.log(a.bold(`
|
|
4
|
+
Installers:`)),console.log(` bun: ${g(e.data.installers.bun)}`),console.log(` npm: ${g(e.data.installers.npm)}`),console.log(` brew: ${g(e.data.installers.brew)}`),console.log(` cargo: ${g(e.data.installers.cargo)}`),console.log(` deno: ${g(e.data.installers.deno)}`),console.log(` mise: ${g(e.data.installers.mise)}`),console.log(` pip: ${g(e.data.installers.pip)}`),console.log(` uv: ${g(e.data.installers.uv)}`),console.log(` winget: ${g(e.data.installers.winget)}`),console.log(a.bold(`
|
|
5
|
+
Features:`)),console.log(` --yes: ${e.data.features.assumeYes?`yes`:`no`}`),console.log(` cache-refresh: ${e.data.features.cacheRefresh?`yes`:`no`}`),console.log(` color-modes: ${e.data.features.colorModes.join(`, `)}`),console.log(` no-cache: ${e.data.features.cacheBypass?`yes`:`no`}`),console.log(` dry-run: ${e.data.features.dryRun?`yes`:`no`}`),console.log(` freshness-metadata: ${e.data.features.freshnessMetadata?`yes`:`no`}`),console.log(` self-upgrade: ${e.data.features.selfUpgrade?`yes`:`no`}`),console.log(` idempotency-key: ${e.data.features.idempotencyKey?`yes`:`no`}`),console.log(` log-levels: ${e.data.features.logLevels.join(`, `)}`),console.log(` quiet-logs: ${e.data.features.quietLogs?`yes`:`no`}`),console.log(` timeout: ${e.data.features.timeout?`yes`:`no`}`),console.log(` channels: ${e.data.features.channels.join(`, `)}`),console.log(` exec-install-policy: ${e.data.features.execInstallPolicies.join(`, `)}`),console.log())}function g(e){return e.available?a.green(`available`):a.red(e.reason??`not-found`)}export{p as t};
|
package/dist/cli.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{$t as e,G as t,H as n,Nt as r,Pt as i,T as a,U as o,V as s,X as c,Z as l,a as u,cn as d,dn as f,fn as p,i as m,m as ee,n as h,r as te,sn as g,t as _,tn as v,un as y,v as ne,w as re,x as b,y as ie}from"./color-BGZ_5A6s.mjs";import{n as ae}from"./agents-Dc-rbRUf.mjs";import{t as oe}from"./agent-installation-Dp03CAn2.mjs";import{t as se}from"./lifecycle-observations-C1OLPUAV.mjs";import{n as ce}from"./lifecycle-errors-BXlHX_YF.mjs";import{a as le,i as x,n as ue,o as S,r as C,t as de}from"./user-output-C1JWMNEt.mjs";import{n as w,t as T}from"./errors-DXzIacfk.mjs";import{n as fe,t as pe}from"./version-cache-D0_L2X5L.mjs";import{d as E,f as D,i as O,n as me,o as he,t as ge}from"./lifecycle-policy-emF59xDd.mjs";import{createHash as _e,randomUUID as ve}from"node:crypto";import k from"node:process";import{join as A}from"node:path";import{mkdir as ye,readFile as be,rename as xe,rm as j,writeFile as M}from"node:fs/promises";import{Command as Se}from"commander";import Ce from"prompts";function we(e){return e.executable.present?{decision:e.dryRun?`dry-run`:`launch`}:e.installPolicy===`never`?{decision:`reject`,errorCode:`AGENT_NOT_INSTALLED`}:e.installPolicy===`prompt`&&!e.interactive?{decision:`reject`,errorCode:`INTERACTION_REQUIRED`}:e.dryRun?{decision:`dry-run`}:{decision:e.installPolicy===`prompt`?`prompt-install`:`install-and-launch`}}async function Te(e,t){let n=await t.observe(e.agentName);if(n.kind===`failure`)return{error:n.error,kind:`observation-failed`};if(!n.value)return{kind:`not-found`};let r=n.value,i=we({dryRun:t.dryRun,executable:r.executable,installPolicy:e.installPolicy,interactive:t.interactive,observation:r.observation});if(i.decision===`reject`)return i.errorCode===`AGENT_NOT_INSTALLED`?{kind:`not-installed`,observed:r}:{kind:`interaction-required`,observed:r};let a=[r.agent.binaryName,...e.args];if(i.decision===`dry-run`)return{argv:a,kind:`dry-run`,observed:r,wouldInstall:!r.executable.present};if(i.decision===`prompt-install`&&!await t.confirmInstall(r))return{kind:`install-declined`,observed:r};if(i.decision===`install-and-launch`||i.decision===`prompt-install`){await t.onInstallStart?.(r);let n=Ee(await t.install(r),r);if(n)return n;let i=await t.observe(e.agentName);if(i.kind===`failure`)return{error:i.error,kind:`observation-failed`};if(!i.value)return{kind:`install-failed`,observed:r,reason:`agent-missing-after-install`};if(r=i.value,!r.executable.present)return{kind:`install-failed`,observed:r,reason:`executable-absent-after-install`}}return De(await t.process.run({argv:a,signal:t.signal,stdio:t.outputMode===`human`?[`inherit`,`inherit`,`inherit`]:[`ignore`,`pipe`,`pipe`],timeoutMs:t.timeoutMs}),r,t.timeoutMs)}function Ee(e,t){switch(e.kind){case`success`:return;case`cancelled`:return{kind:`cancelled`,observed:t,phase:`install`,reason:e.reason};case`timed-out`:return{kind:`timed-out`,observed:t,phase:`install`,timeoutMs:e.timeoutMs};case`failed`:case`indeterminate`:return{kind:`install-failed`,observed:t,reason:e.reason};case`unsupported`:return{kind:`install-failed`,observed:t,reason:e.reason??`Missing installation capability: ${e.capability}`}}}function De(e,t,n){return e.kind===`failure`?e.error.kind===`cancelled`?{kind:`cancelled`,observed:t,phase:`launch`,reason:e.error.message}:e.error.kind===`timed-out`?{kind:`timed-out`,observed:t,phase:`launch`,reason:e.error.message,timeoutMs:n??0}:{kind:`launch-failed`,observed:t,reason:e.error.message}:e.value.exitCode===null?{kind:`launch-failed`,observed:t,reason:e.value.terminationSignal?`Agent terminated by ${e.value.terminationSignal}.`:`Agent process exited without an exit code.`}:{exitCode:e.value.exitCode,kind:`exited`,observed:t,stderr:e.value.stderr,stdout:e.value.stdout}}const Oe={cancelOperations:g,createObservationService:se,createOperationContext:e,createProcessPort:fe,reconcileAgentInstallation:oe};function ke(e,t=Oe){let n=t.createOperationContext(),r=t.createObservationService(n.context,{resolveLatestVersion:!1}),i=t.createProcessPort();return{dispose:n.dispose,execute:a=>Te(a,{confirmInstall:e.confirmInstall,dryRun:e.dryRun,install:n=>je(n,e.timeoutMs,t),interactive:e.interactive,observe:e=>Ae(e,r),onInstallStart:e.onInstallStart,outputMode:e.outputMode,process:i,signal:n.context.signal,timeoutMs:e.timeoutMs})}}async function Ae(e,t){try{let n=await t.resolveAgentObservation(e);return{kind:`success`,value:n?{agent:n.agent,executable:n.pathExecutable,installedState:n.installedState,methods:n.methods,observation:n.observation}:void 0}}catch(e){return{error:Ne(e),kind:`failure`}}}async function je(e,t,n){try{if(e.executable.present)return{kind:`success`,value:void 0};let r=await Me(n.reconcileAgentInstallation({agent:e.agent,observation:{inPath:e.executable.present,installedState:e.installedState,lifecycle:e.observation,methods:e.methods},operation:`install`,route:`install`}),t,n.cancelOperations);return r?r.kind===`success`?{kind:`success`,value:void 0}:r:{kind:`timed-out`,timeoutMs:t}}catch(e){return v(e)?e.kind===`timed-out`?{kind:`timed-out`,timeoutMs:t??0}:{kind:`cancelled`,reason:e.message}:{kind:`failed`,reason:N(e,`Failed to install agent.`),retryable:!1}}}async function Me(e,t,n){if(t===void 0)return e;let r;try{let i=await Promise.race([e.then(e=>({kind:`completed`,value:e})),new Promise(e=>{r=setTimeout(()=>e({kind:`timed-out`}),t)})]);if(i.kind===`completed`)return i.value;let a=await Pe(e,Math.max(1,Math.min(t,250)));if(a!==void 0)return a;await n();return}finally{r&&clearTimeout(r)}}function Ne(e){return e instanceof b?{code:`STATE_READ_ERROR`,details:{stateFilePath:a()},kind:`invalid-data`,message:e.message}:v(e)?{kind:e.kind,message:e.message}:{kind:`failed`,message:N(e,`Failed to observe agent execution state.`)}}function N(e,t){return e instanceof Error&&e.message.trim()?e.message:t}async function Pe(e,t){let n;try{return await Promise.race([e,new Promise(e=>{n=setTimeout(()=>e(void 0),t)})])}finally{n&&clearTimeout(n)}}function P(){return A(i(),`idempotency`)}function F(e){return A(P(),`${Ie(e)}.json`)}async function I(e,t={}){let n=F(e),r;try{r=await be(n,`utf8`)}catch(e){if(Re(e)&&e.code===`ENOENT`)return{kind:`missing`};throw e}let i;try{i=JSON.parse(r)}catch{return{kind:`invalid`,reason:`invalid-json`}}let a=E(i);return a.kind===`invalid`?a:Date.parse(a.record.expiresAt)<=L(t).getTime()?(await j(n),{kind:`expired`,record:a.record}):a}async function Fe(e,t,n={}){let r=L(n),i=n.ttlMs??864e5,a=E({...t,createdAt:r.toISOString(),expiresAt:new Date(r.getTime()+i).toISOString(),schemaVersion:1});if(a.kind===`invalid`)throw TypeError(`Invalid versioned idempotency record: ${a.reason}`);let o=P(),s=F(e),c=`${s}.${process.pid}.${ve()}.tmp`,l=n.fileSystem?.writeFile??M;await ye(o,{recursive:!0});try{await l(c,Le(a.record),`utf8`),await xe(c,s)}catch(e){throw await j(c,{force:!0}),e}}function Ie(e){return _e(`sha256`).update(e,`utf8`).digest(`hex`)}function L(e){let t=e.now?.()??new Date;if(!Number.isFinite(t.getTime()))throw TypeError(`Idempotency clock must return a valid date.`);return t}function Le(e){return`${JSON.stringify(e,(e,t)=>typeof t!=`object`||!t||Array.isArray(t)?t:Object.fromEntries(Object.keys(t).sort().map(e=>[e,t[e]])),2)}\n`}function Re(e){return e instanceof Error&&`code`in e}async function ze(e){let t=D(e.request),n=D(e.resolvedPlan);switch(e.loaded.kind){case`missing`:return{fingerprints:z(t,n),kind:`reconcile`,reason:`missing`};case`expired`:return{fingerprints:R(e.loaded.record,t,n),kind:`reconcile`,reason:`expired`};case`invalid`:return{fingerprints:z(t,n),invalidReason:e.loaded.reason,kind:`reject`,reason:`invalid-evidence`};case`valid`:return Be(e,e.loaded.record,t,n)}}async function Be(e,t,n,r){let i=R(t,n,r);if(t.request.fingerprint!==n)return{fingerprints:i,kind:`reject`,reason:`request-mismatch`};if(t.resolvedPlan.fingerprint!==r)return{fingerprints:i,kind:`reconcile`,reason:`resolved-plan-changed`};switch((await e.validateLive({postcondition:t.postcondition.payload,receipt:t.receipt.payload})).kind){case`satisfied`:return{fingerprints:i,kind:`replay`,result:structuredClone(t.result)};case`drifted`:return{fingerprints:i,kind:`reconcile`,reason:`live-drifted`};case`inconclusive`:return{fingerprints:i,kind:`reconcile`,reason:`live-inconclusive`}}}function R(e,t,n){return{existingPlan:e.resolvedPlan.fingerprint,existingRequest:e.request.fingerprint,requestedPlan:n,requestedRequest:t}}function z(e,t){return{existingPlan:void 0,existingRequest:void 0,requestedPlan:t,requestedRequest:e}}const Ve=new Set([`doctor`,`upgrade`]);async function B(e,t={cache:pe(),getSelfState:re,now:Date.now,resolveFacts:ie}){if(!e.ok||Ve.has(e.action))return;let n=d();if(n.outputMode!==`human`||n.quiet)return;let i=await t.resolveFacts(),a=t.now(),o=await ee({cache:t.cache,facts:i,nowMs:a,signal:new AbortController().signal});if(!o||!r(o.targetVersion,i.currentVersion))return;let s=await t.getSelfState();He(s.updateNoticeVersion,s.updateNoticeAt,o.targetVersion,a)||x(_.yellow(`Quantex CLI ${o.targetVersion} is available (current ${i.currentVersion}). Run \`quantex upgrade\`.`))}function He(e,t,n,r){if(!e||!t||e!==n)return!1;let i=Date.parse(t);return Number.isNaN(i)?!1:r-i<864e5}function Ue(e){return e.warnings.some(e=>e.code===`DRY_RUN`)}async function We(e){try{return await Ge(e)}catch(t){if(t instanceof b)return Xe(e,t);throw t}}async function Ge(e){return rt(e,()=>Ke(e))}async function Ke(e){let t=d().timeoutMs,n={expired:!1},r=!1,i,a=async()=>{let a=await Je(e,()=>n.expired);return n.expired&&t!==void 0?G(e,t):a.replayedResult?(r=!0,a.replayedResult):(i={action:e.action,...a.policy?{idempotencyPolicy:a.policy}:{},run:e.run,...e.target?{target:e.target}:{}},d().cancelled?Ye(e):e.run())},o=t===void 0?await a():await qe(e,a,t,n);return r||!i?o:Qe(i,o)}async function qe(e,t,n,r){let i;try{let a=new Promise(t=>{i=setTimeout(()=>{r.expired=!0,t(G(e,n))},n)}),o=at(t,()=>a),s=await Promise.race([o,a]);if(!s.ok&&s.error?.code===`TIMEOUT`){let t=await it(o,n);s=t&&t.error?.code!==`TIMEOUT`?t:await st(e,n)}return i!==void 0&&(clearTimeout(i),i=void 0),s}finally{i&&clearTimeout(i)}}async function Je(e,t=()=>!1){let n=d();if(!n.idempotencyKey||n.dryRun||!W(e.action)||!e.idempotencyPolicy)return{};let r=await I(n.idempotencyKey);if(n.cancelled||t())return{};if(r.kind===`invalid`)return{replayedResult:u(H(e,n.idempotencyKey,r.reason),V,{force:!0})};let i=typeof e.idempotencyPolicy==`function`?await e.idempotencyPolicy():e.idempotencyPolicy;if(n.cancelled||t())return{};let a=await ze({loaded:r,request:i.request,resolvedPlan:i.resolvedPlan,validateLive:i.validateLive});if(n.cancelled||t())return{};if(a.kind===`reconcile`)return{policy:i};if(a.kind===`reject`)return{replayedResult:tt(e,n.idempotencyKey,a,r)};let o=nt(a.result);return u(o,V,{force:!0}),{replayedResult:o}}function Ye(e){return h({action:e.action,error:{code:`CANCELLED`,message:`Command was cancelled before execution could start.`},target:e.target})}async function Xe(e,t){return u(h({action:e.action,...ce(t,a(),e.target)}),Ze)}function Ze(e){e.error&&console.error(_.red(e.error.message))}async function Qe(e,t){if(d().cancelled)return t;let n=await $e(e,t);try{await B({action:e.action,ok:n.ok})}catch{}return n}function V(e){e.error&&console.error(_.red(e.error.message))}async function $e(e,t){let n=d();if(!n.idempotencyKey||!W(e.action)||!t.ok||n.dryRun||Ue(t)||!e.idempotencyPolicy)return t;let r=await e.idempotencyPolicy.captureEvidence(t);if(!r)return t;let i=await I(n.idempotencyKey);return et(e,n.idempotencyKey,i)||(await Fe(n.idempotencyKey,{postcondition:U(r.postcondition),receipt:U(r.receipt),request:U(e.idempotencyPolicy.request),resolvedPlan:U(e.idempotencyPolicy.resolvedPlan),result:t}),t)}function et(e,t,n){if(!e.idempotencyPolicy)return;let r=D(e.idempotencyPolicy.request);if(n.kind===`invalid`)return u(H(e,t,n.reason),V,{force:!0});if(!(n.kind!==`valid`||n.record.request.fingerprint===r))return u(h({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{conflict:`concurrent-request-mismatch`,existingAction:n.record.request.payload.action,idempotencyKey:t},message:`Idempotency key ${t} changed while the command was running; replay evidence was not overwritten.`},target:e.target}),V,{force:!0})}function tt(e,t,n,r){return n.reason===`invalid-evidence`?u(H(e,t,n.invalidReason),V,{force:!0}):u(h({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{existingAction:r.kind===`valid`?r.record.request.payload.action:void 0,idempotencyKey:t,reason:`request-mismatch`},message:`Idempotency key ${t} was already used for a different canonical request.`},target:e.target}),V,{force:!0})}function H(e,t,n){return h({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{idempotencyKey:t,invalidReason:n,reason:`invalid-evidence`},message:`Idempotency key ${t} contains invalid replay evidence (${n}).`},target:e.target})}function nt(e){let t=d();return{...e,meta:{...e.meta,mode:t.outputMode,runId:t.runId,timestamp:new Date().toISOString()}}}function U(e){return{fingerprint:D(e),payload:e}}function W(e){return e===`ensure`||e===`install`||e===`uninstall`||e===`update`}async function rt(e,t){let n,r;try{let i=new Promise(t=>{let i=r=>{n??=ct(e,r),n.then(t)},a=()=>i(`SIGINT`),o=()=>i(`SIGTERM`);k.once(`SIGINT`,a),k.once(`SIGTERM`,o),r=()=>{k.off(`SIGINT`,a),k.off(`SIGTERM`,o)}});return await Promise.race([ot(t,()=>n),i])}finally{r?.()}}async function it(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function at(e,t){try{return await e()}catch(e){if(v(e)&&e.kind===`timed-out`||d().cancelled)return t();throw e}}async function ot(e,t){try{let n=await e(),r=t();return d().cancelled&&r?r:n}catch(e){let n=t();if(d().cancelled&&n)return n;throw e}}function G(e,t){return h({action:e.action,error:{code:`TIMEOUT`,details:{timeoutMs:t},message:`Command timed out after ${t}ms.`},target:e.target})}async function st(e,t){return await g(),m({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),u(G(e,t),V,{force:!0})}async function ct(e,t){return await g(),m({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),u(h({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),V,{force:!0})}const lt={cancelOperations:g,createExecutionService:ke};async function K(e,t,n={},r=lt){let i=d(),a=n.nonInteractive?!1:i.interactive,o=n.assumeYes??de(),s=n.dryRun??ue(),c=n.install??`prompt`,l,u=r.createExecutionService({confirmInstall:async e=>o?!0:!!(await Ce({initial:!0,message:`${e.agent.displayName} is not installed. Would you like to install it?`,name:`install`,type:`confirm`})).install,dryRun:s,interactive:a,onInstallStart:e=>{x(_.cyan(`Installing ${e.agent.displayName}...`))},outputMode:i.outputMode,timeoutMs:i.timeoutMs}),f=e=>{l??=e,r.cancelOperations()},p=()=>f(`SIGINT`),m=()=>f(`SIGTERM`);k.once(`SIGINT`,p),k.once(`SIGTERM`,m);try{return ut(await u.execute({agentName:e,args:t,installPolicy:c}),{agentName:e,args:t,cancellationSignal:l,installPolicy:c,interactive:a})}finally{k.off(`SIGINT`,p),k.off(`SIGTERM`,m),u.dispose()}}function ut(e,t){if(e.kind===`not-found`)return J({agent:{name:t.agentName},errorCode:`AGENT_NOT_FOUND`,errorMessage:`Unknown agent: ${t.agentName}`,execution:q(t,!1)}),w(`AGENT_NOT_FOUND`);if(e.kind===`observation-failed`)return dt(t.agentName,e.error);let{observed:n}=e,r=n.agent;if(e.kind===`not-installed`||e.kind===`interaction-required`){let i=e.kind===`interaction-required`;return J({agent:r,errorCode:i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`,errorMessage:i?`${r.displayName} is not installed and interactive installation is disabled.`:`${r.displayName} is not installed.`,execution:{...q(t,!1),installGuidance:pt(r,n.methods,t.args)}}),w(i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`)}switch(e.kind){case`install-declined`:return le(_.yellow(`Installation cancelled.`)),1;case`install-failed`:return C(_.red(`Failed to install ${r.displayName}.`)),w(`INSTALL_FAILED`);case`dry-run`:return e.wouldInstall&&S(_.cyan(`Dry run: would install ${r.displayName}.`)),mt({agent:r,execution:q(t,!0),message:`Dry run: would run ${e.argv.join(` `)}`}),0;case`launch-failed`:return C(_.red(`Failed to launch ${r.displayName}: ${e.reason}`)),1;case`cancelled`:return C(_.red(t.cancellationSignal?`${r.displayName} was cancelled by ${t.cancellationSignal}.`:`${r.displayName} was cancelled.`)),w(`CANCELLED`);case`timed-out`:return C(_.red(e.phase===`install`?`Installing ${r.displayName} timed out after ${e.timeoutMs}ms.`:`${r.displayName} timed out after ${e.timeoutMs}ms.`)),w(`TIMEOUT`);case`exited`:return e.exitCode}}function q(e,t){return{args:e.args,installPolicy:e.installPolicy,installed:t,interactive:e.interactive,launched:!1}}function dt(e,t){let n=ft(t.code)?t.code:`INSTALL_FAILED`;return d().outputMode===`human`?C(_.red(t.message)):u(h({action:`exec`,error:{code:n,details:t.details,message:t.message},target:{kind:`agent`,name:e}}),()=>{}),w(n)}function ft(e){return e!==void 0&&T.includes(e)}function pt(e,t,n){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:c(e,t),label:l(t),type:t.type})).filter(e=>e.command),suggestedAction:`rerun-with-install-policy`,suggestedEnsureCommand:`quantex ensure ${e.name}`,suggestedExecCommand:[`quantex`,`exec`,e.name,`--install`,`if-missing`,`--`,...n].join(` `)}}function J(e){if(d().outputMode===`human`){C(_.red(e.errorMessage));let t=e.execution.installGuidance;t&&(S(_.dim(`Try: ${t.suggestedEnsureCommand}`)),S(_.dim(`Or: ${t.suggestedExecCommand}`)));return}u(h({action:`exec`,data:{agent:e.agent,execution:e.execution},error:{code:e.errorCode,details:e.execution.installGuidance,message:e.errorMessage},target:{kind:`agent`,name:e.agent.name}}),()=>{})}function mt(e){if(d().outputMode===`human`){S(_.cyan(e.message));return}u(te({action:`exec`,data:{agent:e.agent,execution:e.execution},target:{kind:`agent`,name:e.agent.name}}),()=>{})}const ht={capabilities:async()=>{let{capabilitiesCommand:e}=await import(`./capabilities-DywtqYKA.mjs`);await Y({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})},commands:async()=>{let{commandsCommand:e}=await import(`./commands-J8gAQ8RH.mjs`);await Y({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})},config:async(...e)=>{let{configCommand:t}=await import(`./config-Cs1_DPwP.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-D8y0PQ7s.mjs`);await Y({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})},ensure:async(...e)=>{let t=e[0],{ensureCommand:n}=await import(`./ensure-CGipmEmc.mjs`);await Y({action:`ensure`,idempotencyPolicy:()=>O(`ensure`,t),run:()=>n(t),target:{kind:`agent`,name:t}})},exec:async(...e)=>{let[t,n,r,i]=e,a=r.install??`never`;if(a!==`never`&&a!==`if-missing`&&a!==`always`){k.stdout.write(`${_.red(`Unknown install policy: ${a}`)}\n`),k.exitCode=2;return}let o=_t(i);k.exitCode=await K(t,o.length>0?o:n,{install:a,nonInteractive:i.optsWithGlobals().nonInteractive})},info:async(...e)=>{let t=e[0],{infoCommand:n}=await import(`./info-C4-95Kjx.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-FAr4x7oh.mjs`);await Y({action:`inspect`,run:()=>n(t),target:{kind:`agent`,name:t}})},install:async(...e)=>{let{installCommand:t}=await import(`./install-CGHSS_yl.mjs`),n=he(e[0]),r=n.length===1;await Y({action:`install`,...r?{idempotencyPolicy:()=>O(`install`,n[0])}:{idempotencyPolicy:()=>me(n)},run:()=>t(n),target:r?{kind:`agent`,name:n[0]}:{kind:`agent`,name:n.join(`,`)}})},list:async()=>{let{listCommand:e}=await import(`./list-BwTYgNzc.mjs`);await Y({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})},resolve:async(...e)=>{let t=e[0],{resolveCommand:n}=await import(`./resolve-DLrskjPy.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-xUwSt_FZ.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-DLAzYf0i.mjs`);await Y({action:`uninstall`,idempotencyPolicy:()=>ge(t),run:()=>n(t),target:{kind:`agent`,name:t}})},update:async(...e)=>{let[t,n]=e,{createUpdateCommandInvocation:r}=await import(`./update-l5KnwT41.mjs`),i=r(t,n.all??!1);try{await Y({action:`update`,...i.idempotencyPolicy?{idempotencyPolicy:i.idempotencyPolicy}:{},run:i.run,target:{kind:`agent`,name:t}})}finally{i.dispose()}},upgrade:async(...e)=>{let t=e[0],{resolveUpgradeChannelOption:n,upgradeCommand:r}=await import(`./upgrade-DP2QHsnb.mjs`);await Y({action:`upgrade`,run:()=>r({channel:n(t.channel),check:t.check??!1}),target:{kind:`self`,name:`quantex`}})}};function gt(e){return ht[e]}function _t(e){let t=e.processedArgs.at(-1);return Array.isArray(t)?t:e.args.slice(1)}async function Y(e){let{getExitCodeForResult:t}=await import(`./errors-BzuGM14H.mjs`);k.exitCode=t(await We(e))}function vt(){let e=s();t(e,e.map(e=>e.schema.name));let r=new Se;r.name(`quantex`).description(`统一的 AI Agent CLI 管理工具`);for(let e of n())r.option(e.flags,e.description,e.defaultValue);r.version(ne()),r.hook(`preAction`,(e,t)=>{try{p(f(o(t.optsWithGlobals())))}catch(e){k.stdout.write(`${_.red(e instanceof Error?e.message:String(e))}\n`),k.exit(2)}}),r.hook(`postAction`,()=>{y()});for(let t of e){let e=r.command(t.name).description(t.description);for(let n of t.aliases)e.alias(n);for(let n of t.arguments)e.argument(n.syntax,n.description);t.allowUnknownOptions&&e.allowUnknownOption();for(let n of t.options)e.option(n.flags,n.description,n.defaultValue);e.action(gt(t.handlerId))}return r}const yt=new Map(n().map(e=>[xt(e.flags),e]));function bt(e,t,n){let r={},i=0;for(;i<e.length;){let a=e[i],o=yt.get(a);if(o){if(o.value===`string`){let t=e[i+1];if(!t)return St(a);r[o.id]=t,i+=2}else r[o.id]=!0,i+=1;continue}if(a.startsWith(`-`)||t.has(a))return;let s=Z(r.output);return r.json===!0||s===`json`||s===`ndjson`||n.agentFriendly&&s!==`human`?{agentArgs:[],agentName:``,error:`Structured output is not supported for shortcut agent execution yet. Use a management command instead.`}:{agentArgs:e.slice(i+1),agentName:a,color:Z(r.color),dryRun:X(r.dryRun),idempotencyKey:Z(r.idempotencyKey),logLevel:Z(r.logLevel),noCache:X(r.noCache),nonInteractive:X(r.nonInteractive),quiet:X(r.quiet),refresh:X(r.refresh),runId:Z(r.runId),timeout:Z(r.timeout),yes:X(r.yes)}}}function xt(e){let t=e.match(/--[a-z][a-z-]*/);if(!t)throw Error(`Global option requires a long flag: ${e}`);return t[0]}function X(e){return e===!0}function Z(e){return typeof e==`string`?e:void 0}function St(e){return{agentArgs:[],agentName:``,error:`${e} requires a value`}}const Q=vt(),Ct=new Set([...Q.commands.map(e=>e.name()),...Q.commands.flatMap(e=>e.aliases()),`help`,`--help`,`--version`,`-v`]),$=bt(k.argv.slice(2),Ct,{agentFriendly:k.stdin.isTTY===!1||k.stdout.isTTY===!1});if($?.error&&(console.log(_.red($.error)),k.exit(2)),$&&ae($.agentName)){try{p(f({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(_.red(e instanceof Error?e.message:String(e))),k.exit(2)}try{let e=await K($.agentName,$.agentArgs,{assumeYes:$.yes,dryRun:$.dryRun,nonInteractive:$.nonInteractive});k.exit(e)}finally{y()}}await Q.parseAsync();export{};
|
|
2
|
+
import{Ct as e,Ft as t,G as n,It as r,J as i,K as a,Lt as o,Mt as s,Nt as c,T as l,Tt as u,W as d,a as f,at as p,i as m,m as ee,n as h,ot as te,r as ne,t as g,v as re,w as ie,x as _,y as ae}from"./color-1gXmuBdm.mjs";import{n as oe}from"./agents-CBoMqbP1.mjs";import{d as se,u as ce}from"./provider-binding-BvvHuohl.mjs";import{t as le}from"./agent-installation-Dsz_I5Li.mjs";import{t as ue}from"./lifecycle-observations-31JWXSir.mjs";import{n as de}from"./lifecycle-errors-Cal_j4yT.mjs";import{a as fe,i as v,n as pe,o as y,r as b,t as x}from"./user-output-uK6ichvR.mjs";import{n as S,t as me}from"./errors-BD4Gc9Rp.mjs";import{n as he,t as ge}from"./version-cache-CJ0R5HZJ.mjs";import{d as C,f as w,i as T,n as _e,o as ve,t as ye}from"./lifecycle-policy-ZKxZhM5R.mjs";import{createHash as be,randomUUID as xe}from"node:crypto";import E from"node:process";import{join as D}from"node:path";import{mkdir as O,readFile as k,rename as A,rm as j,writeFile as M}from"node:fs/promises";import{Command as Se}from"commander";import Ce from"prompts";function we(e){return e.executable.present?{decision:e.dryRun?`dry-run`:`launch`}:e.installPolicy===`never`?{decision:`reject`,errorCode:`AGENT_NOT_INSTALLED`}:e.installPolicy===`prompt`&&!e.interactive?{decision:`reject`,errorCode:`INTERACTION_REQUIRED`}:e.dryRun?{decision:`dry-run`}:{decision:e.installPolicy===`prompt`?`prompt-install`:`install-and-launch`}}async function Te(e,t){let n=await t.observe(e.agentName);if(n.kind===`failure`)return{error:n.error,kind:`observation-failed`};if(!n.value)return{kind:`not-found`};let r=n.value,i=we({dryRun:t.dryRun,executable:r.executable,installPolicy:e.installPolicy,interactive:t.interactive,observation:r.observation});if(i.decision===`reject`)return i.errorCode===`AGENT_NOT_INSTALLED`?{kind:`not-installed`,observed:r}:{kind:`interaction-required`,observed:r};let a=[r.agent.binaryName,...e.args];if(i.decision===`dry-run`)return{argv:a,kind:`dry-run`,observed:r,wouldInstall:!r.executable.present};if(i.decision===`prompt-install`&&!await t.confirmInstall(r))return{kind:`install-declined`,observed:r};if(i.decision===`install-and-launch`||i.decision===`prompt-install`){await t.onInstallStart?.(r);let n=Ee(await t.install(r),r);if(n)return n;let i=await t.observe(e.agentName);if(i.kind===`failure`)return{error:i.error,kind:`observation-failed`};if(!i.value)return{kind:`install-failed`,observed:r,reason:`agent-missing-after-install`};if(r=i.value,!r.executable.present)return{kind:`install-failed`,observed:r,reason:`executable-absent-after-install`}}return De(await t.process.run({argv:a,signal:t.signal,stdio:t.outputMode===`human`?[`inherit`,`inherit`,`inherit`]:[`ignore`,`pipe`,`pipe`],timeoutMs:t.timeoutMs}),r,t.timeoutMs)}function Ee(e,t){switch(e.kind){case`success`:return;case`cancelled`:return{kind:`cancelled`,observed:t,phase:`install`,reason:e.reason};case`timed-out`:return{kind:`timed-out`,observed:t,phase:`install`,timeoutMs:e.timeoutMs};case`failed`:case`indeterminate`:return{kind:`install-failed`,observed:t,reason:e.reason};case`unsupported`:return{kind:`install-failed`,observed:t,reason:e.reason??`Missing installation capability: ${e.capability}`}}}function De(e,t,n){return e.kind===`failure`?e.error.kind===`cancelled`?{kind:`cancelled`,observed:t,phase:`launch`,reason:e.error.message}:e.error.kind===`timed-out`?{kind:`timed-out`,observed:t,phase:`launch`,reason:e.error.message,timeoutMs:n??0}:{kind:`launch-failed`,observed:t,reason:e.error.message}:e.value.exitCode===null?{kind:`launch-failed`,observed:t,reason:e.value.terminationSignal?`Agent terminated by ${e.value.terminationSignal}.`:`Agent process exited without an exit code.`}:{exitCode:e.value.exitCode,kind:`exited`,observed:t,stderr:e.value.stderr,stdout:e.value.stdout}}const Oe={cancelOperations:s,createObservationService:ue,createOperationContext:e,createProcessPort:he,reconcileAgentInstallation:le};function ke(e,t=Oe){let n=t.createOperationContext(),r=t.createObservationService(n.context,{resolveLatestVersion:!1}),i=t.createProcessPort();return{dispose:n.dispose,execute:a=>Te(a,{confirmInstall:e.confirmInstall,dryRun:e.dryRun,install:n=>je(n,e.timeoutMs,t),interactive:e.interactive,observe:e=>Ae(e,r),onInstallStart:e.onInstallStart,outputMode:e.outputMode,process:i,signal:n.context.signal,timeoutMs:e.timeoutMs})}}async function Ae(e,t){try{let n=await t.resolveAgentObservation(e);return{kind:`success`,value:n?{agent:n.agent,executable:n.pathExecutable,installedState:n.installedState,methods:n.methods,observation:n.observation}:void 0}}catch(e){return{error:Ne(e),kind:`failure`}}}async function je(e,t,n){try{if(e.executable.present)return{kind:`success`,value:void 0};let r=await Me(n.reconcileAgentInstallation({agent:e.agent,observation:{inPath:e.executable.present,installedState:e.installedState,lifecycle:e.observation,methods:e.methods},operation:`install`,route:`install`}),t,n.cancelOperations);return r?r.kind===`success`?{kind:`success`,value:void 0}:r:{kind:`timed-out`,timeoutMs:t}}catch(e){return u(e)?e.kind===`timed-out`?{kind:`timed-out`,timeoutMs:t??0}:{kind:`cancelled`,reason:e.message}:{kind:`failed`,reason:N(e,`Failed to install agent.`),retryable:!1}}}async function Me(e,t,n){if(t===void 0)return e;let r;try{let i=await Promise.race([e.then(e=>({kind:`completed`,value:e})),new Promise(e=>{r=setTimeout(()=>e({kind:`timed-out`}),t)})]);if(i.kind===`completed`)return i.value;let a=await Pe(e,Math.max(1,Math.min(t,250)));if(a!==void 0)return a;await n();return}finally{r&&clearTimeout(r)}}function Ne(e){return e instanceof _?{code:`STATE_READ_ERROR`,details:{stateFilePath:l()},kind:`invalid-data`,message:e.message}:u(e)?{kind:e.kind,message:e.message}:{kind:`failed`,message:N(e,`Failed to observe agent execution state.`)}}function N(e,t){return e instanceof Error&&e.message.trim()?e.message:t}async function Pe(e,t){let n;try{return await Promise.race([e,new Promise(e=>{n=setTimeout(()=>e(void 0),t)})])}finally{n&&clearTimeout(n)}}function P(){return D(te(),`idempotency`)}function F(e){return D(P(),`${Ie(e)}.json`)}async function I(e,t={}){let n=F(e),r;try{r=await k(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=C(i);return a.kind===`invalid`?a:Date.parse(a.record.expiresAt)<=L(t).getTime()?(await j(n),{kind:`expired`,record:a.record}):a}async function Fe(e,t,n={}){let r=L(n),i=n.ttlMs??864e5,a=C({...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}.${xe()}.tmp`,l=n.fileSystem?.writeFile??M;await O(o,{recursive:!0});try{await l(c,Le(a.record),`utf8`),await A(c,s)}catch(e){throw await j(c,{force:!0}),e}}function Ie(e){return be(`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=w(e.request),n=w(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:ge(),getSelfState:ie,now:Date.now,resolveFacts:ae}){if(!e.ok||Ve.has(e.action))return;let n=c();if(n.outputMode!==`human`||n.quiet)return;let r=await t.resolveFacts(),i=t.now(),a=await ee({cache:t.cache,facts:r,nowMs:i,signal:new AbortController().signal});if(!a||!p(a.targetVersion,r.currentVersion))return;let o=await t.getSelfState();Ue(o.updateNoticeVersion,o.updateNoticeAt,a.targetVersion,i)||v(g.yellow(`Quantex CLI ${a.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 Ke(e)}catch(t){if(t instanceof _)return Ze(e,t);throw t}}async function Ke(e){return it(e,()=>qe(e))}async function qe(e){let t=c().timeoutMs,n={expired:!1},r=!1,i,a=async()=>{let a=await Ye(e,()=>n.expired);return n.expired&&t!==void 0?W(e,t):a.replayedResult?(r=!0,a.replayedResult):(i={action:e.action,...a.policy?{idempotencyPolicy:a.policy}:{},run:e.run,...e.target?{target:e.target}:{}},c().cancelled?Xe(e):e.run())},o=t===void 0?await a():await Je(e,a,t,n);return r||!i?o:$e(i,o)}async function Je(e,t,n,r){let i;try{let a=new Promise(t=>{i=setTimeout(()=>{r.expired=!0,t(W(e,n))},n)}),o=ot(t,()=>a),s=await Promise.race([o,a]);if(!s.ok&&s.error?.code===`TIMEOUT`){let t=await at(o,n);s=t&&t.error?.code!==`TIMEOUT`?t:await ct(e,n)}return i!==void 0&&(clearTimeout(i),i=void 0),s}finally{i&&clearTimeout(i)}}async function Ye(e,t=()=>!1){let n=c();if(!n.idempotencyKey||n.dryRun||!U(e.action)||!e.idempotencyPolicy)return{};let r=await I(n.idempotencyKey);if(n.cancelled||t())return{};if(r.kind===`invalid`)return{replayedResult:f(V(e,n.idempotencyKey,r.reason),B,{force:!0})};let i=typeof e.idempotencyPolicy==`function`?await e.idempotencyPolicy():e.idempotencyPolicy;if(n.cancelled||t())return{};let a=await ze({loaded:r,request:i.request,resolvedPlan:i.resolvedPlan,validateLive:i.validateLive});if(n.cancelled||t())return{};if(a.kind===`reconcile`)return{policy:i};if(a.kind===`reject`)return{replayedResult:nt(e,n.idempotencyKey,a,r)};let o=rt(a.result);return f(o,B,{force:!0}),{replayedResult:o}}function Xe(e){return h({action:e.action,error:{code:`CANCELLED`,message:`Command was cancelled before execution could start.`},target:e.target})}async function Ze(e,t){return f(h({action:e.action,...de(t,l(),e.target)}),Qe)}function Qe(e){e.error&&console.error(g.red(e.error.message))}async function $e(e,t){if(c().cancelled)return t;let n=await et(e,t);try{await He({action:e.action,ok:n.ok})}catch{}return n}function B(e){e.error&&console.error(g.red(e.error.message))}async function et(e,t){let n=c();if(!n.idempotencyKey||!U(e.action)||!t.ok||n.dryRun||We(t)||!e.idempotencyPolicy)return t;let r=await e.idempotencyPolicy.captureEvidence(t);if(!r)return t;let i=await I(n.idempotencyKey);return tt(e,n.idempotencyKey,i)||(await Fe(n.idempotencyKey,{postcondition:H(r.postcondition),receipt:H(r.receipt),request:H(e.idempotencyPolicy.request),resolvedPlan:H(e.idempotencyPolicy.resolvedPlan),result:t}),t)}function tt(e,t,n){if(!e.idempotencyPolicy)return;let r=w(e.idempotencyPolicy.request);if(n.kind===`invalid`)return f(V(e,t,n.reason),B,{force:!0});if(!(n.kind!==`valid`||n.record.request.fingerprint===r))return f(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}),B,{force:!0})}function nt(e,t,n,r){return n.reason===`invalid-evidence`?f(V(e,t,n.invalidReason),B,{force:!0}):f(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}),B,{force:!0})}function V(e,t,n){return h({action:e.action,error:{code:`INVALID_ARGUMENT`,details:{idempotencyKey:t,invalidReason:n,reason:`invalid-evidence`},message:`Idempotency key ${t} contains invalid replay evidence (${n}).`},target:e.target})}function rt(e){let t=c();return{...e,meta:{...e.meta,mode:t.outputMode,runId:t.runId,timestamp:new Date().toISOString()}}}function H(e){return{fingerprint:w(e),payload:e}}function U(e){return e===`ensure`||e===`install`||e===`uninstall`||e===`update`}async function it(e,t){let n,r;try{let i=new Promise(t=>{let i=r=>{n??=lt(e,r),n.then(t)},a=()=>i(`SIGINT`),o=()=>i(`SIGTERM`);E.once(`SIGINT`,a),E.once(`SIGTERM`,o),r=()=>{E.off(`SIGINT`,a),E.off(`SIGTERM`,o)}});return await Promise.race([st(t,()=>n),i])}finally{r?.()}}async function at(e,t){let n=Math.min(t,250);return await Promise.race([e,new Promise(e=>{setTimeout(()=>e(void 0),n)})])}async function ot(e,t){try{return await e()}catch(e){if(u(e)&&e.kind===`timed-out`||c().cancelled)return t();throw e}}async function st(e,t){try{let n=await e(),r=t();return c().cancelled&&r?r:n}catch(e){let n=t();if(c().cancelled&&n)return n;throw e}}function W(e,t){return h({action:e.action,error:{code:`TIMEOUT`,details:{timeoutMs:t},message:`Command timed out after ${t}ms.`},target:e.target})}async function ct(e,t){return await s(),m({action:e.action,data:{reason:`timeout`,timeoutMs:t},target:e.target,type:`cancelled`},{force:!0}),f(W(e,t),B,{force:!0})}async function lt(e,t){return await s(),m({action:e.action,data:{reason:`signal`,signal:t},target:e.target,type:`cancelled`},{force:!0}),f(h({action:e.action,error:{code:`CANCELLED`,details:{signal:t},message:`Command cancelled by ${t}.`},target:e.target}),B,{force:!0})}const ut={cancelOperations:s,createExecutionService:ke};async function G(e,t,n={},r=ut){let i=c(),a=n.nonInteractive?!1:i.interactive,o=n.assumeYes??x(),s=n.dryRun??pe(),l=n.install??`prompt`,u,d=r.createExecutionService({confirmInstall:async e=>o?!0:!!(await Ce({initial:!0,message:`${e.agent.displayName} is not installed. Would you like to install it?`,name:`install`,type:`confirm`})).install,dryRun:s,interactive:a,onInstallStart:e=>{v(g.cyan(`Installing ${e.agent.displayName}...`))},outputMode:i.outputMode,timeoutMs:i.timeoutMs}),f=e=>{u??=e,r.cancelOperations()},p=()=>f(`SIGINT`),m=()=>f(`SIGTERM`);E.once(`SIGINT`,p),E.once(`SIGTERM`,m);try{return dt(await d.execute({agentName:e,args:t,installPolicy:l}),{agentName:e,args:t,cancellationSignal:u,installPolicy:l,interactive:a})}finally{E.off(`SIGINT`,p),E.off(`SIGTERM`,m),d.dispose()}}function dt(e,t){if(e.kind===`not-found`)return q({agent:{name:t.agentName},errorCode:`AGENT_NOT_FOUND`,errorMessage:`Unknown agent: ${t.agentName}`,execution:K(t,!1)}),S(`AGENT_NOT_FOUND`);if(e.kind===`observation-failed`)return ft(t.agentName,e.error);let{observed:n}=e,r=n.agent;if(e.kind===`not-installed`||e.kind===`interaction-required`){let i=e.kind===`interaction-required`;return q({agent:r,errorCode:i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`,errorMessage:i?`${r.displayName} is not installed and interactive installation is disabled.`:`${r.displayName} is not installed.`,execution:{...K(t,!1),installGuidance:mt(r,n.methods,t.args)}}),S(i?`INTERACTION_REQUIRED`:`AGENT_NOT_INSTALLED`)}switch(e.kind){case`install-declined`:return fe(g.yellow(`Installation cancelled.`)),1;case`install-failed`:return b(g.red(`Failed to install ${r.displayName}.`)),S(`INSTALL_FAILED`);case`dry-run`:return e.wouldInstall&&y(g.cyan(`Dry run: would install ${r.displayName}.`)),ht({agent:r,execution:K(t,!0),message:`Dry run: would run ${e.argv.join(` `)}`}),0;case`launch-failed`:return b(g.red(`Failed to launch ${r.displayName}: ${e.reason}`)),1;case`cancelled`:return b(g.red(t.cancellationSignal?`${r.displayName} was cancelled by ${t.cancellationSignal}.`:`${r.displayName} was cancelled.`)),S(`CANCELLED`);case`timed-out`:return b(g.red(e.phase===`install`?`Installing ${r.displayName} timed out after ${e.timeoutMs}ms.`:`${r.displayName} timed out after ${e.timeoutMs}ms.`)),S(`TIMEOUT`);case`exited`:return e.exitCode}}function K(e,t){return{args:e.args,installPolicy:e.installPolicy,installed:t,interactive:e.interactive,launched:!1}}function ft(e,t){let n=pt(t.code)?t.code:`INSTALL_FAILED`;return c().outputMode===`human`?b(g.red(t.message)):f(h({action:`exec`,error:{code:n,details:t.details,message:t.message},target:{kind:`agent`,name:e}}),()=>{}),S(n)}function pt(e){return e!==void 0&&me.includes(e)}function mt(e,t,n){return{docsRef:`skills/quantex-cli/references/command-recipes.md`,installMethods:t.map(t=>({command:ce(e,t),label:se(t),type:t.type})).filter(e=>e.command),suggestedAction:`rerun-with-install-policy`,suggestedEnsureCommand:`quantex ensure ${e.name}`,suggestedExecCommand:[`quantex`,`exec`,e.name,`--install`,`if-missing`,`--`,...n].join(` `)}}function q(e){if(c().outputMode===`human`){b(g.red(e.errorMessage));let t=e.execution.installGuidance;t&&(y(g.dim(`Try: ${t.suggestedEnsureCommand}`)),y(g.dim(`Or: ${t.suggestedExecCommand}`)));return}f(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 ht(e){if(c().outputMode===`human`){y(g.cyan(e.message));return}f(ne({action:`exec`,data:{agent:e.agent,execution:e.execution},target:{kind:`agent`,name:e.agent.name}}),()=>{})}const gt={capabilities:async()=>{let{capabilitiesCommand:e}=await import(`./capabilities-CQZ0SLgD.mjs`);await J({action:`capabilities`,run:()=>e(),target:{kind:`system`,name:`capabilities`}})},commands:async()=>{let{commandsCommand:e}=await import(`./commands-84XyphJp.mjs`);await J({action:`commands`,run:()=>e(),target:{kind:`system`,name:`commands`}})},config:async(...e)=>{let{configCommand:t}=await import(`./config-C335pFul.mjs`),[n,r,i]=e;await J({action:`config`,run:()=>t(n,r,i),target:{kind:`config`,name:r}})},doctor:async()=>{let{doctorCommand:e}=await import(`./doctor-YObQVc1Y.mjs`);await J({action:`doctor`,run:()=>e(),target:{kind:`system`,name:`doctor`}})},ensure:async(...e)=>{let t=e[0],{ensureCommand:n}=await import(`./ensure-CSntyBTb.mjs`);await J({action:`ensure`,idempotencyPolicy:()=>T(`ensure`,t),run:()=>n(t),target:{kind:`agent`,name:t}})},exec:async(...e)=>{let[t,n,r,i]=e,a=r.install??`never`;if(a!==`never`&&a!==`if-missing`&&a!==`always`){E.stdout.write(`${g.red(`Unknown install policy: ${a}`)}\n`),E.exitCode=2;return}let o=vt(i);E.exitCode=await G(t,o.length>0?o:n,{install:a,nonInteractive:i.optsWithGlobals().nonInteractive})},info:async(...e)=>{let t=e[0],{infoCommand:n}=await import(`./info-B4Gr79vU.mjs`);await J({action:`info`,run:()=>n(t),target:{kind:`agent`,name:t}})},inspect:async(...e)=>{let t=e[0],{inspectCommand:n}=await import(`./inspect-DSnK5oMu.mjs`);await J({action:`inspect`,run:()=>n(t),target:{kind:`agent`,name:t}})},install:async(...e)=>{let{installCommand:t}=await import(`./install-BKh0kreC.mjs`),n=ve(e[0]),r=n.length===1;await J({action:`install`,...r?{idempotencyPolicy:()=>T(`install`,n[0])}:{idempotencyPolicy:()=>_e(n)},run:()=>t(n),target:r?{kind:`agent`,name:n[0]}:{kind:`agent`,name:n.join(`,`)}})},list:async()=>{let{listCommand:e}=await import(`./list-BrePsdOM.mjs`);await J({action:`list`,run:()=>e(),target:{kind:`system`,name:`agents`}})},resolve:async(...e)=>{let t=e[0],{resolveCommand:n}=await import(`./resolve-B594qXY6.mjs`);await J({action:`resolve`,run:()=>n(t),target:{kind:`agent`,name:t}})},schema:async(...e)=>{let t=e[0],{schemaCommand:n}=await import(`./schema-CgTSwXpy.mjs`);await J({action:`schema`,run:()=>n(t),target:{kind:`system`,name:`schema`}})},uninstall:async(...e)=>{let t=e[0],{uninstallCommand:n}=await import(`./uninstall-5ZK3juO1.mjs`);await J({action:`uninstall`,idempotencyPolicy:()=>ye(t),run:()=>n(t),target:{kind:`agent`,name:t}})},update:async(...e)=>{let[t,n]=e,{createUpdateCommandInvocation:r}=await import(`./update-DQR-B9S-.mjs`),i=r(t,n.all??!1);try{await J({action:`update`,...i.idempotencyPolicy?{idempotencyPolicy:i.idempotencyPolicy}:{},run:i.run,target:{kind:`agent`,name:t}})}finally{i.dispose()}},upgrade:async(...e)=>{let t=e[0],{resolveUpgradeChannelOption:n,upgradeCommand:r}=await import(`./upgrade-kK57LorF.mjs`);await J({action:`upgrade`,run:()=>r({channel:n(t.channel),check:t.check??!1}),target:{kind:`self`,name:`quantex`}})}};function _t(e){return gt[e]}function vt(e){let t=e.processedArgs.at(-1);return Array.isArray(t)?t:e.args.slice(1)}async function J(e){let{getExitCodeForResult:t}=await import(`./errors-BrmJuMg3.mjs`);E.exitCode=t(await Ge(e))}function Y(){let e=d();i(e,e.map(e=>e.schema.name));let s=new Se;s.name(`quantex`).description(`统一的 AI Agent CLI 管理工具`);for(let e of n())s.option(e.flags,e.description,e.defaultValue);s.version(re()),s.hook(`preAction`,(e,t)=>{try{o(r(a(t.optsWithGlobals())))}catch(e){E.stdout.write(`${g.red(e instanceof Error?e.message:String(e))}\n`),E.exit(2)}}),s.hook(`postAction`,()=>{t()});for(let t of e){let e=s.command(t.name).description(t.description);for(let n of t.aliases)e.alias(n);for(let n of t.arguments)e.argument(n.syntax,n.description);t.allowUnknownOptions&&e.allowUnknownOption();for(let n of t.options)e.option(n.flags,n.description,n.defaultValue);e.action(_t(t.handlerId))}return s}const yt=new Map(n().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=Y(),Ct=new Set([...Q.commands.map(e=>e.name()),...Q.commands.flatMap(e=>e.aliases()),`help`,`--help`,`--version`,`-v`]),$=bt(E.argv.slice(2),Ct,{agentFriendly:E.stdin.isTTY===!1||E.stdout.isTTY===!1});if($?.error&&(console.log(g.red($.error)),E.exit(2)),$&&oe($.agentName)){try{o(r({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(g.red(e instanceof Error?e.message:String(e))),E.exit(2)}try{let e=await G($.agentName,$.agentArgs,{assumeYes:$.yes,dryRun:$.dryRun,nonInteractive:$.nonInteractive});E.exit(e)}finally{t()}}await Q.parseAsync();export{};
|