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.
Files changed (63) hide show
  1. package/README.md +28 -2
  2. package/README.zh-CN.md +28 -2
  3. package/dist/agent-installation-Dsz_I5Li.mjs +1 -0
  4. package/dist/agent-observation-DRzJavrO.mjs +1 -0
  5. package/dist/agents-CBoMqbP1.mjs +2 -0
  6. package/dist/agents-DvfpsVAI.mjs +1 -0
  7. package/dist/capabilities-CQZ0SLgD.mjs +1 -0
  8. package/dist/{capabilities-hjF4kpxs.mjs → capabilities-C_gPEld2.mjs} +4 -4
  9. package/dist/cli.mjs +1 -1
  10. package/dist/color-1gXmuBdm.mjs +8 -0
  11. package/dist/commands-84XyphJp.mjs +1 -0
  12. package/dist/{commands-DjMechiz.mjs → commands-DiZ3IIz4.mjs} +1 -1
  13. package/dist/config-C335pFul.mjs +3 -0
  14. package/dist/core-read-observations-Cm0FpEpL.mjs +3 -0
  15. package/dist/doctor-YObQVc1Y.mjs +3 -0
  16. package/dist/ensure-BqcmFFyN.mjs +1 -0
  17. package/dist/ensure-CSntyBTb.mjs +1 -0
  18. package/dist/errors-BrmJuMg3.mjs +1 -0
  19. package/dist/index.mjs +2 -2
  20. package/dist/{info-C4-95Kjx.mjs → info-B4Gr79vU.mjs} +2 -2
  21. package/dist/inspect-DSnK5oMu.mjs +1 -0
  22. package/dist/{inspect-Bzu6BDS6.mjs → inspect-DyCXX7Tp.mjs} +3 -3
  23. package/dist/install-BKh0kreC.mjs +1 -0
  24. package/dist/lifecycle-observations-31JWXSir.mjs +1 -0
  25. package/dist/lifecycle-policy-ZKxZhM5R.mjs +1 -0
  26. package/dist/list-BrePsdOM.mjs +3 -0
  27. package/dist/provider-binding-BvvHuohl.mjs +1 -0
  28. package/dist/{provider-observations-BG3wn0dF.mjs → provider-observations-CRG1GCgp.mjs} +1 -1
  29. package/dist/resolve-B594qXY6.mjs +1 -0
  30. package/dist/{resolve-D-NvixQn.mjs → resolve-CCeMk9aY.mjs} +1 -1
  31. package/dist/{schema-DuUjt16u.mjs → schema-C2S3d_Cu.mjs} +1 -1
  32. package/dist/schema-CgTSwXpy.mjs +1 -0
  33. package/dist/uninstall-5ZK3juO1.mjs +1 -0
  34. package/dist/update-DQR-B9S-.mjs +1 -0
  35. package/dist/{update-planner-9xPfJpjp.mjs → update-planner-IgFzteV-.mjs} +1 -1
  36. package/dist/{upgrade-DP2QHsnb.mjs → upgrade-kK57LorF.mjs} +1 -1
  37. package/dist/{user-output-C1JWMNEt.mjs → user-output-uK6ichvR.mjs} +1 -1
  38. package/dist/{version-cache-D0_L2X5L.mjs → version-cache-CJ0R5HZJ.mjs} +1 -1
  39. package/package.json +17 -6
  40. package/dist/agent-inspection-PCTn6Nc6.mjs +0 -1
  41. package/dist/agent-installation-Dp03CAn2.mjs +0 -1
  42. package/dist/agents-BrJ8oEkB.mjs +0 -1
  43. package/dist/agents-Dc-rbRUf.mjs +0 -1
  44. package/dist/capabilities-DywtqYKA.mjs +0 -1
  45. package/dist/color-BGZ_5A6s.mjs +0 -9
  46. package/dist/commands-J8gAQ8RH.mjs +0 -1
  47. package/dist/config-Cs1_DPwP.mjs +0 -3
  48. package/dist/doctor-D8y0PQ7s.mjs +0 -3
  49. package/dist/ensure-CGipmEmc.mjs +0 -1
  50. package/dist/ensure-NxyYe2vm.mjs +0 -1
  51. package/dist/errors-BzuGM14H.mjs +0 -1
  52. package/dist/inspect-FAr4x7oh.mjs +0 -1
  53. package/dist/install-CGHSS_yl.mjs +0 -1
  54. package/dist/lifecycle-observations-C1OLPUAV.mjs +0 -1
  55. package/dist/lifecycle-policy-emF59xDd.mjs +0 -1
  56. package/dist/list-BwTYgNzc.mjs +0 -3
  57. package/dist/provider-evidence-D7aplCd6.mjs +0 -1
  58. package/dist/resolve-DLrskjPy.mjs +0 -1
  59. package/dist/schema-xUwSt_FZ.mjs +0 -1
  60. package/dist/uninstall-DLAzYf0i.mjs +0 -1
  61. package/dist/update-l5KnwT41.mjs +0 -1
  62. /package/dist/{errors-DXzIacfk.mjs → errors-BD4Gc9Rp.mjs} +0 -0
  63. /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
- Activate Superpowers if available, then read AGENTS.md, openspec/README.md, skills/quantex-agent-runtime/SKILL.md, and skills/quantex-cli/SKILL.md.
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 / OPSX change workflow.
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
- Activate Superpowers if available, then read AGENTS.md, openspec/README.md, skills/quantex-agent-runtime/SKILL.md, and skills/quantex-cli/SKILL.md.
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 / OPSX 变更流程。
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{$t as e,Gt as t,V as n,a as r,c as i,r as a,t as o}from"./color-BGZ_5A6s.mjs";import{r as s}from"./agents-Dc-rbRUf.mjs";import{n as c,t as l}from"./provider-observations-BG3wn0dF.mjs";import u from"node:process";function d(e=n()){let t=new Map(e.map(e=>[e.name,new Set(e.effects)])),r=new Map(e.map(e=>[e.name,new Set(e.flags)]));return{effects:new Set(e.flatMap(e=>e.effects)),effectsByCommand:t,flags:new Set(e.flatMap(e=>e.flags)),flagsByCommand:r}}function f(e,t){let n=e.effectsByCommand.get(`upgrade`),r=e.flagsByCommand.get(`upgrade`),i=e.flagsByCommand.get(`exec`);return{assumeYes:e.flags.has(`--yes`),cacheBypass:e.flags.has(`--no-cache`),cacheRefresh:e.flags.has(`--refresh`),channels:r?.has(`--channel`)?[`stable`,`beta`]:[],colorModes:e.flags.has(`--color`)?[`auto`,`always`,`never`]:[],dryRun:e.flags.has(`--dry-run`),execInstallPolicies:i?.has(`--install`)?[`never`,`if-missing`,`always`]:[],freshnessMetadata:e.effects.has(`network`)&&e.flags.has(`--refresh`)&&e.flags.has(`--no-cache`),idempotencyKey:e.flags.has(`--idempotency-key`),logLevels:e.flags.has(`--log-level`)?[`silent`,`error`,`warn`,`info`,`debug`]:[],quietLogs:e.flags.has(`--quiet`),selfUpgrade:t.canAutoUpdateSelf&&!!(n?.has(`mutation`)&&n.has(`network`)),timeout:e.flags.has(`--timeout`)}}async function p(){let n=e(),o,p;try{[o,p]=await n.run(()=>Promise.all([l({context:n.context}),i({context:n.context})]))}finally{n.dispose()}let g=c(o,e=>{let t=e.availability.kind===`success`;return{available:t,reason:t?void 0:m(e.id)}}),_=f(d(),{canAutoUpdateSelf:p.canAutoUpdate});return r(a({action:`capabilities`,data:{agents:s().map(e=>e.name),features:_,installers:g,outputModes:[`human`,`json`,`ndjson`],platform:{arch:u.arch,os:t()}},target:{kind:`system`,name:`capabilities`}}),h)}function m(e){return e===`winget`&&u.platform!==`win32`||e===`brew`&&u.platform===`win32`?`not-on-platform`:`not-found`}function h(e){e.data&&(console.log(o.bold(`
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(o.bold(`
4
- Installers:`)),console.log(` bun: ${g(e.data.installers.bun)}`),console.log(` npm: ${g(e.data.installers.npm)}`),console.log(` brew: ${g(e.data.installers.brew)}`),console.log(` cargo: ${g(e.data.installers.cargo)}`),console.log(` deno: ${g(e.data.installers.deno)}`),console.log(` mise: ${g(e.data.installers.mise)}`),console.log(` pip: ${g(e.data.installers.pip)}`),console.log(` uv: ${g(e.data.installers.uv)}`),console.log(` winget: ${g(e.data.installers.winget)}`),console.log(o.bold(`
5
- Features:`)),console.log(` --yes: ${e.data.features.assumeYes?`yes`:`no`}`),console.log(` cache-refresh: ${e.data.features.cacheRefresh?`yes`:`no`}`),console.log(` color-modes: ${e.data.features.colorModes.join(`, `)}`),console.log(` no-cache: ${e.data.features.cacheBypass?`yes`:`no`}`),console.log(` dry-run: ${e.data.features.dryRun?`yes`:`no`}`),console.log(` freshness-metadata: ${e.data.features.freshnessMetadata?`yes`:`no`}`),console.log(` self-upgrade: ${e.data.features.selfUpgrade?`yes`:`no`}`),console.log(` idempotency-key: ${e.data.features.idempotencyKey?`yes`:`no`}`),console.log(` log-levels: ${e.data.features.logLevels.join(`, `)}`),console.log(` quiet-logs: ${e.data.features.quietLogs?`yes`:`no`}`),console.log(` timeout: ${e.data.features.timeout?`yes`:`no`}`),console.log(` channels: ${e.data.features.channels.join(`, `)}`),console.log(` exec-install-policy: ${e.data.features.execInstallPolicies.join(`, `)}`),console.log())}function g(e){return e.available?o.green(`available`):o.red(e.reason??`not-found`)}export{p as t};
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{};