@emaxe/agento 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/AGENTS.md +28 -0
  2. package/CHANGELOG.md +33 -1
  3. package/README.md +28 -18
  4. package/README.ru.md +28 -18
  5. package/dist/bin/agento.js +34 -5
  6. package/dist/bin/agento.js.map +1 -1
  7. package/dist/src/adapters/copilot.d.ts +15 -0
  8. package/dist/src/adapters/copilot.d.ts.map +1 -0
  9. package/dist/src/adapters/copilot.js +71 -0
  10. package/dist/src/adapters/copilot.js.map +1 -0
  11. package/dist/src/adapters/opencode.d.ts +1 -0
  12. package/dist/src/adapters/opencode.d.ts.map +1 -1
  13. package/dist/src/adapters/opencode.js +10 -0
  14. package/dist/src/adapters/opencode.js.map +1 -1
  15. package/dist/src/cli/commands/agent.d.ts +7 -0
  16. package/dist/src/cli/commands/agent.d.ts.map +1 -1
  17. package/dist/src/cli/commands/agent.js +10 -1
  18. package/dist/src/cli/commands/agent.js.map +1 -1
  19. package/dist/src/cli/commands/launch.d.ts +7 -0
  20. package/dist/src/cli/commands/launch.d.ts.map +1 -1
  21. package/dist/src/cli/commands/launch.js +16 -5
  22. package/dist/src/cli/commands/launch.js.map +1 -1
  23. package/dist/src/cli/commands/profile.d.ts +6 -0
  24. package/dist/src/cli/commands/profile.d.ts.map +1 -1
  25. package/dist/src/cli/commands/profile.js +6 -0
  26. package/dist/src/cli/commands/profile.js.map +1 -1
  27. package/dist/src/cli/commands/provider.d.ts +6 -0
  28. package/dist/src/cli/commands/provider.d.ts.map +1 -1
  29. package/dist/src/cli/commands/provider.js +6 -0
  30. package/dist/src/cli/commands/provider.js.map +1 -1
  31. package/dist/src/cli/commands/restore.d.ts +8 -0
  32. package/dist/src/cli/commands/restore.d.ts.map +1 -1
  33. package/dist/src/cli/commands/restore.js +8 -0
  34. package/dist/src/cli/commands/restore.js.map +1 -1
  35. package/dist/src/config/schema.d.ts +1 -1
  36. package/dist/src/config/schema.d.ts.map +1 -1
  37. package/dist/src/config/schema.js +1 -1
  38. package/dist/src/config/schema.js.map +1 -1
  39. package/dist/src/config/store.d.ts +4 -0
  40. package/dist/src/config/store.d.ts.map +1 -1
  41. package/dist/src/config/store.js +18 -0
  42. package/dist/src/config/store.js.map +1 -1
  43. package/dist/src/installers/base.d.ts +25 -0
  44. package/dist/src/installers/base.d.ts.map +1 -0
  45. package/dist/src/installers/base.js +2 -0
  46. package/dist/src/installers/base.js.map +1 -0
  47. package/dist/src/installers/claude-code.d.ts +19 -0
  48. package/dist/src/installers/claude-code.d.ts.map +1 -0
  49. package/dist/src/installers/claude-code.js +55 -0
  50. package/dist/src/installers/claude-code.js.map +1 -0
  51. package/dist/src/installers/codex.d.ts +19 -0
  52. package/dist/src/installers/codex.d.ts.map +1 -0
  53. package/dist/src/installers/codex.js +55 -0
  54. package/dist/src/installers/codex.js.map +1 -0
  55. package/dist/src/installers/copilot.d.ts +19 -0
  56. package/dist/src/installers/copilot.d.ts.map +1 -0
  57. package/dist/src/installers/copilot.js +55 -0
  58. package/dist/src/installers/copilot.js.map +1 -0
  59. package/dist/src/installers/opencode.d.ts +19 -0
  60. package/dist/src/installers/opencode.d.ts.map +1 -0
  61. package/dist/src/installers/opencode.js +55 -0
  62. package/dist/src/installers/opencode.js.map +1 -0
  63. package/dist/src/installers/qwen.d.ts +19 -0
  64. package/dist/src/installers/qwen.d.ts.map +1 -0
  65. package/dist/src/installers/qwen.js +55 -0
  66. package/dist/src/installers/qwen.js.map +1 -0
  67. package/dist/src/installers/registry.d.ts +11 -0
  68. package/dist/src/installers/registry.d.ts.map +1 -0
  69. package/dist/src/installers/registry.js +18 -0
  70. package/dist/src/installers/registry.js.map +1 -0
  71. package/dist/src/launcher/child.js +1 -1
  72. package/dist/src/launcher/child.js.map +1 -1
  73. package/dist/src/launcher/independent.d.ts +16 -3
  74. package/dist/src/launcher/independent.d.ts.map +1 -1
  75. package/dist/src/launcher/independent.js +12 -3
  76. package/dist/src/launcher/independent.js.map +1 -1
  77. package/dist/src/profiles/profile-manager.d.ts +26 -7
  78. package/dist/src/profiles/profile-manager.d.ts.map +1 -1
  79. package/dist/src/profiles/profile-manager.js +26 -7
  80. package/dist/src/profiles/profile-manager.js.map +1 -1
  81. package/dist/src/providers/provider-manager.d.ts +18 -5
  82. package/dist/src/providers/provider-manager.d.ts.map +1 -1
  83. package/dist/src/providers/provider-manager.js +25 -5
  84. package/dist/src/providers/provider-manager.js.map +1 -1
  85. package/dist/src/tui/App.d.ts +12 -1
  86. package/dist/src/tui/App.d.ts.map +1 -1
  87. package/dist/src/tui/App.js +6 -2
  88. package/dist/src/tui/App.js.map +1 -1
  89. package/dist/src/tui/screens/AgentInstall.d.ts +10 -0
  90. package/dist/src/tui/screens/AgentInstall.d.ts.map +1 -0
  91. package/dist/src/tui/screens/AgentInstall.js +157 -0
  92. package/dist/src/tui/screens/AgentInstall.js.map +1 -0
  93. package/dist/src/tui/screens/Agents.d.ts +1 -0
  94. package/dist/src/tui/screens/Agents.d.ts.map +1 -1
  95. package/dist/src/tui/screens/Agents.js +4 -1
  96. package/dist/src/tui/screens/Agents.js.map +1 -1
  97. package/dist/src/tui/screens/LaunchAgent.d.ts +14 -1
  98. package/dist/src/tui/screens/LaunchAgent.d.ts.map +1 -1
  99. package/dist/src/tui/screens/LaunchAgent.js +138 -5
  100. package/dist/src/tui/screens/LaunchAgent.js.map +1 -1
  101. package/dist/src/tui/screens/MainMenu.d.ts +7 -0
  102. package/dist/src/tui/screens/MainMenu.d.ts.map +1 -1
  103. package/dist/src/tui/screens/MainMenu.js +7 -0
  104. package/dist/src/tui/screens/MainMenu.js.map +1 -1
  105. package/dist/src/tui/screens/Profiles.d.ts +1 -0
  106. package/dist/src/tui/screens/Profiles.d.ts.map +1 -1
  107. package/dist/src/tui/screens/Profiles.js +1 -0
  108. package/dist/src/tui/screens/Profiles.js.map +1 -1
  109. package/dist/src/tui/screens/Providers.d.ts +1 -0
  110. package/dist/src/tui/screens/Providers.d.ts.map +1 -1
  111. package/dist/src/tui/screens/Providers.js +1 -0
  112. package/dist/src/tui/screens/Providers.js.map +1 -1
  113. package/dist/src/tui/screens/Settings.d.ts +1 -0
  114. package/dist/src/tui/screens/Settings.d.ts.map +1 -1
  115. package/dist/src/tui/screens/Settings.js +20 -3
  116. package/dist/src/tui/screens/Settings.js.map +1 -1
  117. package/dist/src/tui/start.d.ts +9 -0
  118. package/dist/src/tui/start.d.ts.map +1 -1
  119. package/dist/src/tui/start.js +15 -0
  120. package/dist/src/tui/start.js.map +1 -1
  121. package/package.json +1 -1
package/AGENTS.md CHANGED
@@ -37,6 +37,13 @@ AgentO — CLI-инструмент для управления конфигур
37
37
  │ ├── config/ # Конфигурация AgentO
38
38
  │ │ ├── schema.ts # Zod-схемы и типы
39
39
  │ │ └── store.ts # Чтение/запись ~/.agento/config.json
40
+ │ ├── installers/ # Установщики агентов (TUI Install Wizard)
41
+ │ │ ├── base.ts # Интерфейс AgentInstaller
42
+ │ │ ├── registry.ts # Реестр установщиков
43
+ │ │ ├── claude-code.ts # Установщик Claude Code
44
+ │ │ ├── opencode.ts # Установщик OpenCode
45
+ │ │ ├── qwen.ts # Установщик Qwen CLI
46
+ │ │ └── codex.ts # Установщик Codex CLI
40
47
  │ ├── launcher/ # Запуск агентов
41
48
  │ │ ├── child.ts # Child mode (backup → patch → spawn → restore)
42
49
  │ │ ├── independent.ts # Independent mode (backup → patch → exec)
@@ -52,6 +59,7 @@ AgentO — CLI-инструмент для управления конфигур
52
59
  │ └── screens/ # Экраны TUI
53
60
  │ ├── MainMenu.tsx
54
61
  │ ├── LaunchAgent.tsx
62
+ │ ├── AgentInstall.tsx # Мастер установки агента
55
63
  │ ├── Providers.tsx
56
64
  │ ├── Profiles.tsx
57
65
  │ ├── Agents.tsx
@@ -148,6 +156,26 @@ AgentO — CLI-инструмент для управления конфигур
148
156
  const providerKey = 'openai'; // Было: provider.name.toLowerCase().replace(/\s+/g, '-')
149
157
  ```
150
158
 
159
+ ## Install Wizard / Installers
160
+
161
+ The TUI includes an install wizard (`AgentInstall.tsx`) that triggers when a user selects an agent that is not yet installed on the system.
162
+
163
+ Each supported agent has a dedicated installer under `src/installers/` that implements the `AgentInstaller` interface from `src/installers/base.ts`:
164
+
165
+ - **`checkInstalled()`** — runs the agent's `--version` command to detect presence and extract version.
166
+ - **`checkEnvironment()`** — verifies prerequisites (e.g. `npm` is available for auto-install).
167
+ - **`install()`** — performs a global `npm install -g <package>` and captures stderr for error reporting.
168
+ - **`manualInstructions`** — provides the exact install command and docs URL shown in manual-install mode.
169
+
170
+ **Registry:** `src/installers/registry.ts` maps `AgentId` → `AgentInstaller`. The TUI calls `getInstaller(agentId)` to retrieve the appropriate installer before showing the wizard.
171
+
172
+ | Agent | Package | Docs URL |
173
+ |-------|---------|----------|
174
+ | Claude Code | `npm install -g @anthropic-ai/claude-code` | https://docs.anthropic.com/en/docs/claude-code/setup |
175
+ | OpenCode | `npm install -g opencode` | https://opencode.ai/docs |
176
+ | Qwen CLI | `npm install -g @qwen-code/qwen-code@latest` | https://github.com/QwenLM/qwen-code |
177
+ | Codex CLI | `npm install -g @openai/codex` | https://github.com/openai/codex |
178
+
151
179
  ## CLI команды
152
180
 
153
181
  ### Запуск
package/CHANGELOG.md CHANGED
@@ -13,9 +13,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
13
13
  - Profile import/export
14
14
  - CLI flags for setting non-default capabilities at `provider add` time
15
15
  - Plugin system for custom adapters
16
- - Better error handling and logging
17
16
  - Configuration templates and presets
18
17
 
18
+ ## [0.4.1] - 2026-05-12
19
+
20
+ ### Added
21
+
22
+ - **Copilot CLI agent** (`copilot`) — full support for GitHub Copilot CLI across all 4 provider types:
23
+ - All config delivered via environment variables (`COPILOT_MODEL`, `COPILOT_PROVIDER_TYPE`, `COPILOT_PROVIDER_API_KEY`, `COPILOT_PROVIDER_BASE_URL`) — no settings file mutation
24
+ - Provider type mapping: `anthropic` → `anthropic`, `openai-compatible` / `fireworks` / `openrouter` → `openai`
25
+ - Default base URLs: Anthropic `https://api.anthropic.com`, Fireworks `https://api.fireworks.ai/inference/v1`, OpenRouter `https://openrouter.ai/api/v1`
26
+ - Auto-enables `COPILOT_PROVIDER_WIRE_API=responses` for gpt-5 family models
27
+ - Registered in TUI Launch Agent screen and CLI `agento launch` command
28
+ - Installer: Homebrew Cask (`gh` extension via `brew install --cask github-copilot-for-xcode` / `gh extension install github/gh-copilot`)
29
+ - **Install status disk cache** — agent install statuses persisted to `~/.agento/agent-status.json`; already-known-installed agents are skipped on next launch (no redundant `checkInstalled()` calls)
30
+ - **ENOENT recovery loop** — when `spawnSync` throws `ENOENT` (command not found), the TUI relaunches with a `launchError` context: profile is pre-selected, affected agent is marked not-installed, and the error message is shown on the agent selection step
31
+ - **Settings value descriptions** — the Settings screen now shows an inline description of the current value for the highlighted setting (e.g. explains what `child` vs `independent` mode means)
32
+ - `agentId` / `profileId` fields added to `ExecRequest` interface — allows the relaunch loop to identify which agent failed without re-parsing the command string
33
+
34
+ ### Fixed
35
+
36
+ - Copilot adapter `writeConfig` no longer creates a stale empty directory — it is a true no-op since Copilot CLI needs no settings file
37
+ - Copilot adapter now throws a descriptive error when no base URL can be resolved for a provider type (previously silently set an empty string)
38
+
39
+ ## [0.4.0] - 2026-05-11
40
+
41
+ ### Added
42
+
43
+ - **Agent Install Wizard** — selecting an uninstalled agent in the TUI now opens an install screen instead of failing silently:
44
+ - **Auto-install**: checks environment requirements (npm), then runs `npm install -g <package>` with a live spinner
45
+ - **Manual install**: shows exact commands to run and a documentation URL
46
+ - **Error recovery**: on env check failure shows missing deps with a manual install option; on install failure shows error with retry / manual options
47
+ - Installers implemented for all 4 agents: `claude-code` (`@anthropic-ai/claude-code`), `opencode` (`opencode`), `qwen` (`@qwen/qwen-code`), `codex` (`@openai/codex`)
48
+ - **Install status preloader** in Launch Agent — on entering the agent selection step a spinner runs `checkInstalled()` for all agents in parallel; uninstalled agents display a `(not installed)` dim hint next to their name
49
+ - After successful auto-install the agent is marked installed in-session and the list returns to normal selection
50
+
19
51
  ## [0.3.0] - 2026-05-11
20
52
 
21
53
  ### Added
package/README.md CHANGED
@@ -17,6 +17,7 @@ AgentO is a CLI tool that centralizes configuration management for popular AI co
17
17
  | [OpenCode](https://github.com/opencode-ai/opencode) | `opencode` | JSON | `anthropic`, `openai-compatible`, `fireworks`, `openrouter` | Full function calling support via Vercel AI SDK |
18
18
  | [Qwen CLI](https://github.com/QwenLM/qwen) | `qwen` | JSON | `openai-compatible`, `fireworks`, `openrouter` | OpenAI-compatible API structure |
19
19
  | [Codex CLI](https://github.com/openai/codex) | `codex` | TOML | `fireworks`, `openrouter` | Environment variable injection. `wire_api: responses`. |
20
+ | [Copilot CLI](https://github.com/github/gh-copilot) | `gh copilot` | env vars only | `anthropic`, `openai-compatible`, `fireworks`, `openrouter` | Config delivered entirely via env vars — no settings file patched. |
20
21
 
21
22
  ## Installation
22
23
 
@@ -42,15 +43,16 @@ npx @emaxe/agento
42
43
 
43
44
  | Provider Type | Compatible Agents | Examples |
44
45
  |---|---|---|
45
- | `anthropic` | claude-code, opencode | Anthropic |
46
- | `openai-compatible` | opencode, qwen | OpenAI, Together.ai, Cerebras, Perplexity, DeepSeek, etc. |
47
- | `fireworks` | claude-code, opencode, qwen, codex | Fireworks AI (supports all 3 API types) |
48
- | `openrouter` | claude-code, opencode, qwen, codex | [OpenRouter](https://openrouter.ai) — universal LLM gateway (Anthropic Skin / OpenAI / Responses API) |
46
+ | `anthropic` | claude-code, opencode, copilot | Anthropic |
47
+ | `openai-compatible` | opencode, qwen, copilot | OpenAI, Together.ai, Cerebras, Perplexity, DeepSeek, etc. |
48
+ | `fireworks` | claude-code, opencode, qwen, codex, copilot | Fireworks AI (supports all 3 API types) |
49
+ | `openrouter` | claude-code, opencode, qwen, codex, copilot | [OpenRouter](https://openrouter.ai) — universal LLM gateway (Anthropic Skin / OpenAI / Responses API) |
49
50
 
50
51
  **Notes:**
51
52
  - `claude-code` works with `anthropic`, `fireworks`, and `openrouter` types. For `openrouter` it uses OpenRouter's **Anthropic Skin** with `ANTHROPIC_AUTH_TOKEN` (Bearer auth).
53
+ - `copilot` works with all 4 provider types; config is delivered entirely via environment variables (no settings file is patched).
52
54
  - Use `opencode` or `qwen` for general OpenAI-compatible providers.
53
- - `openrouter` is the most flexible — works with all 4 agents.
55
+ - `openrouter` is the most flexible — works with all 5 agents.
54
56
 
55
57
  ## Model Capability Flags
56
58
 
@@ -141,7 +143,7 @@ Running `agento` without arguments launches an interactive Terminal User Interfa
141
143
  ### Main Menu
142
144
 
143
145
  ```
144
- ┌────────── AgentO v0.2.0 ──────────┐
146
+ ┌────────── AgentO v0.4.1 ──────────┐
145
147
  │ │
146
148
  │ ▶ Launch Agent │
147
149
  │ Providers │
@@ -158,17 +160,22 @@ Running `agento` without arguments launches an interactive Terminal User Interfa
158
160
 
159
161
  | Screen | What You Can Do | Key Shortcuts |
160
162
  |--------|----------------|---------------|
161
- | **Launch Agent** | Select profile → select agent choose mode/scope → launch | **Enter** select, **Esc** back |
163
+ | **Launch Agent** | Select profile → select agent (with install hints) → launch; opens Install Wizard for uninstalled agents; install statuses cached on disk | **Enter** select, **Esc** back |
162
164
  | **Providers** | View, add, edit, delete API providers; toggle model capabilities | **Enter** details / add model, **a** add provider, **e** edit, **d** delete, **i/v/a** toggle capability, **Esc** back |
163
165
  | **Profiles** | View, add, delete profiles. In profile details: add/remove/edit models | **Enter** details, **a** add, **d** delete, **Esc** back |
164
166
  | **Agents** | Check config status (global/project), backup availability | **Enter** details, **Esc** back |
165
- | **Settings** | Change default launch mode, default config scope, independent mode | **↑↓** change, **Enter** toggle, **Esc** save & back |
167
+ | **Settings** | Change default launch mode, default config scope; selected setting shows inline description of the current value | **↑↓** navigate, **Enter/Space** toggle, **Esc** save & back |
166
168
 
167
169
  ### Launch Agent Workflow
168
170
 
169
171
  1. **Select Profile** — Choose from your saved profiles
170
- 2. **Select Agent** — Pick which agent to launch (claude-code, opencode, qwen, or codex)
171
- 3. **Optional:** Adjust **Mode** (child/independent) and **Scope** (global/project)
172
+ 2. **Select Agent** — AgentO checks install status of all agents (spinner while checking). Uninstalled agents show a `(not installed)` hint. Statuses are cached to `~/.agento/agent-status.json` so already-known-installed agents are skipped on the next launch.
173
+ - If the selected agent **is installed** proceeds to launch
174
+ - If the selected agent **is not installed** → opens the **Install Wizard**
175
+ - If the command is not found at launch time (ENOENT) → TUI relaunches with the error shown and the agent marked as not installed
176
+ 3. **Install Wizard** (if needed):
177
+ - **Auto-install** — checks environment (requires npm), then installs via `npm install -g <package>`
178
+ - **Manual install** — shows the exact command and a docs URL
172
179
  4. **Launch** — AgentO patches the agent config and starts the agent
173
180
 
174
181
  ```
@@ -236,18 +243,19 @@ Use **TUI** for exploration and interactive workflows. Use **CLI** for scripting
236
243
 
237
244
  ## Provider & Agent Compatibility Matrix
238
245
 
239
- | Provider Type | claude-code | opencode | qwen | codex |
240
- |---|---|---|---|---|
241
- | **anthropic** | ✅ Full support | ✅ (via SDK) | ❌ Not supported | ❌ Not supported |
242
- | **openai-compatible** | ❌ Not supported | ✅ Full support | ✅ Full support | ❌ Not supported |
243
- | **fireworks** | ✅ (Anthropic API) | ✅ (OpenAI API) | ✅ (OpenAI API) | ✅ (Responses API) |
244
- | **openrouter** | ✅ (Anthropic Skin) | ✅ (OpenAI API) | ✅ (OpenAI API) | ✅ (Responses API) |
246
+ | Provider Type | claude-code | opencode | qwen | codex | copilot |
247
+ |---|---|---|---|---|---|
248
+ | **anthropic** | ✅ Full support | ✅ (via SDK) | ❌ Not supported | ❌ Not supported | ✅ (env vars) |
249
+ | **openai-compatible** | ❌ Not supported | ✅ Full support | ✅ Full support | ❌ Not supported | ✅ (env vars) |
250
+ | **fireworks** | ✅ (Anthropic API) | ✅ (OpenAI API) | ✅ (OpenAI API) | ✅ (Responses API) | ✅ (env vars, OpenAI type) |
251
+ | **openrouter** | ✅ (Anthropic Skin) | ✅ (OpenAI API) | ✅ (OpenAI API) | ✅ (Responses API) | ✅ (env vars, OpenAI type) |
245
252
 
246
253
  **Key Constraints:**
247
254
  - `claude-code` uses Anthropic-compatible APIs and works with `anthropic`, `fireworks`, `openrouter` types
248
255
  - For `openrouter` Claude Code uses `ANTHROPIC_AUTH_TOKEN` (Bearer) — not `apiKeyHelper`
249
- - Other OpenAI-compatible providers must use `opencode` or `qwen` agents
250
- - `fireworks` and `openrouter` are the most flexiblework with all 4 agents
256
+ - Other OpenAI-compatible providers must use `opencode`, `qwen`, or `copilot` agents
257
+ - `copilot` delivers all config via env varsno settings file is ever patched or restored
258
+ - `fireworks` and `openrouter` are the most flexible — work with all 5 agents
251
259
 
252
260
  ## CLI Reference
253
261
 
@@ -408,6 +416,8 @@ Each supported agent has a dedicated adapter that translates AgentO's generic co
408
416
 
409
417
  - **Codex CLI** (`--dev` to show): Generates `~/.codex/config.toml` with `wire_api: responses`, profiles, and environment variable references. In project scope, splits config between global (`model_providers`) and project (`model`) configs. Supports all provider types. Capability flags are not propagated (Codex `responses` API has no modality config).
410
418
 
419
+ - **Copilot CLI** (supports all 4 provider types): No settings file is written. All config is delivered at launch via `COPILOT_MODEL`, `COPILOT_PROVIDER_TYPE`, `COPILOT_PROVIDER_API_KEY`, `COPILOT_PROVIDER_BASE_URL`. Provider types `fireworks` and `openrouter` map to `COPILOT_PROVIDER_TYPE=openai`. Auto-enables `COPILOT_PROVIDER_WIRE_API=responses` for gpt-5 family models.
420
+
411
421
  ### Backup & Restore
412
422
 
413
423
  Before modifying any agent configuration, AgentO creates a backup at `~/.agento/backups/<agent>/<scope>.bak.*`.
package/README.ru.md CHANGED
@@ -13,20 +13,26 @@ AgentO — это CLI-инструмент для централизованно
13
13
 
14
14
  | Агент | Команда | Формат конфига | Поддерживаемые провайдеры | Особенности |
15
15
  |-------|---------|----------------|---|-------------|
16
- | [Claude Code](https://github.com/anthropics/claude-code) | `claude` | JSON | `anthropic`, `fireworks` | Поддержка уровней (small/base/smart) |
17
- | [OpenCode](https://github.com/opencode-ai/opencode) | `opencode` | JSON | `anthropic`, `openai-compatible`, `fireworks` | Полная поддержка function calling через Vercel AI SDK; пробрасывает модальности |
18
- | [Qwen CLI](https://github.com/QwenLM/qwen) | `qwen` | JSON | `openai-compatible`, `fireworks` | Структура OpenAI-совместимого API; пробрасывает модальности |
19
- | [Codex CLI](https://github.com/openai/codex) | `codex` | TOML | Все типы | Инжект переменных окружения. Скрыт по умолчанию (флаг `--dev`). |
16
+ | [Claude Code](https://github.com/anthropics/claude-code) | `claude` | JSON | `anthropic`, `fireworks`, `openrouter` | Поддержка уровней (small/base/smart) |
17
+ | [OpenCode](https://github.com/opencode-ai/opencode) | `opencode` | JSON | `anthropic`, `openai-compatible`, `fireworks`, `openrouter` | Полная поддержка function calling через Vercel AI SDK; пробрасывает модальности |
18
+ | [Qwen CLI](https://github.com/QwenLM/qwen) | `qwen` | JSON | `openai-compatible`, `fireworks`, `openrouter` | Структура OpenAI-совместимого API; пробрасывает модальности |
19
+ | [Codex CLI](https://github.com/openai/codex) | `codex` | TOML | `fireworks`, `openrouter` | Инжект переменных окружения. Скрыт по умолчанию (флаг `--dev`). |
20
+ | [Copilot CLI](https://github.com/github/gh-copilot) | `gh copilot` | только env-переменные | `anthropic`, `openai-compatible`, `fireworks`, `openrouter` | Весь конфиг передаётся через переменные окружения — файл настроек не изменяется. |
20
21
 
21
22
  ## Поддерживаемые типы провайдеров
22
23
 
23
24
  | Тип провайдера | Совместимые агенты | Примеры |
24
25
  |---|---|---|
25
- | `anthropic` | claude-code | Anthropic |
26
- | `openai-compatible` | opencode, qwen | OpenAI, Together.ai, Cerebras, Perplexity, DeepSeek и т. д. |
27
- | `fireworks` | claude-code, opencode, qwen, codex | Fireworks AI (поддерживает все 3 типа API) |
26
+ | `anthropic` | claude-code, opencode, copilot | Anthropic |
27
+ | `openai-compatible` | opencode, qwen, copilot | OpenAI, Together.ai, Cerebras, Perplexity, DeepSeek и т. д. |
28
+ | `fireworks` | claude-code, opencode, qwen, codex, copilot | Fireworks AI (поддерживает все 3 типа API) |
29
+ | `openrouter` | claude-code, opencode, qwen, codex, copilot | [OpenRouter](https://openrouter.ai) — универсальный шлюз (Anthropic Skin / OpenAI / Responses API) |
28
30
 
29
- **Примечание:** `claude-code` работает только с типами `anthropic` и `fireworks` (требование Anthropic SDK). Для других OpenAI-совместимых провайдеров используйте `opencode` или `qwen`.
31
+ **Примечания:**
32
+ - `claude-code` работает с `anthropic`, `fireworks` и `openrouter` (требование Anthropic SDK). Для `openrouter` использует **Anthropic Skin** — `ANTHROPIC_AUTH_TOKEN` (Bearer).
33
+ - `copilot` работает со всеми 4 типами провайдеров; конфиг передаётся через переменные окружения, файл настроек не изменяется.
34
+ - Для других OpenAI-совместимых провайдеров используйте `opencode`, `qwen` или `copilot`.
35
+ - `openrouter` наиболее универсален — работает со всеми 5 агентами.
30
36
 
31
37
  ## Флаги возможностей моделей
32
38
 
@@ -137,18 +143,20 @@ agento launch -p default -a qwen -m child -s project
137
143
 
138
144
  | Экран | Возможности | Горячие клавиши |
139
145
  |-------|-------------|-----------------|
140
- | **Запуск агента** | Выбор профиля → агента → режима/области запуск | **Enter** выбор, **Esc** назад |
146
+ | **Запуск агента** | Выбор профиля → агента → запуск; статус установки кешируется на диск; при ENOENT — перезапуск TUI с ошибкой | **Enter** выбор, **Esc** назад |
141
147
  | **Провайдеры** | Просмотр, добавление, редактирование, удаление провайдеров; переключение возможностей моделей | **Enter** детали / добавить модель, **a** добавить провайдер, **e** редактировать, **d** удалить, **i/v/a** переключить флаг, **Esc** назад |
142
148
  | **Профили** | Просмотр, добавление, удаление профилей. В деталях: добавление/удаление/редактирование моделей | **Enter** детали, **a** добавить, **d** удалить, **Esc** назад |
143
149
  | **Агенты** | Проверка статуса конфигов (global/project), наличие бэкапов | **Enter** детали, **Esc** назад |
144
- | **Настройки** | Изменение режима запуска, области конфига, режима independent | **↑↓** изменение, **Enter** переключение, **Esc** сохранить и назад |
150
+ | **Настройки** | Изменение режима запуска и области конфига; выделенная настройка показывает описание текущего значения | **↑↓** навигация, **Enter/Space** переключение, **Esc** сохранить и назад |
145
151
 
146
152
  ### Сценарий запуска агента
147
153
 
148
154
  1. **Выбор профиля** — выберите один из сохранённых профилей
149
- 2. **Выбор агента** — выберите агента для запуска (claude-code, opencode, qwen или codex с `--dev`)
150
- 3. **Опционально:** настройте **Режим** (child/independent) и **Область** (global/project)
151
- 4. **Запуск** AgentO заменяет конфиг агента и запускает его
155
+ 2. **Выбор агента** — AgentO проверяет статус установки всех агентов (спиннер). Незаконченные агенты отмечены `(not installed)`. Статусы кешируются в `~/.agento/agent-status.json` при следующем открытии уже известные агенты не перепроверяются.
156
+ - Агент **установлен** переходим к запуску
157
+ - Агент **не установлен** открывается **Мастер установки**
158
+ - Команда не найдена при запуске (ENOENT) → TUI перезапускается с ошибкой, агент помечается как не установленный
159
+ 3. **Запуск** — AgentO применяет конфиг агента и запускает его
152
160
 
153
161
  ```
154
162
  Profile: default
@@ -197,7 +205,8 @@ Profile: default
197
205
  |-----------|----------|----------|
198
206
  | **Режим запуска по умолчанию** | `child` / `independent` | Как запускать агентов по умолчанию |
199
207
  | **Область конфига по умолчанию** | `global` / `project` | Куда записывать конфиги агентов |
200
- | **Режим independent** | `spawn-detached` / `pty` | Как запускать агентов в режиме independent |
208
+
209
+ При навигации выделенная настройка показывает пояснение к текущему значению прямо под строкой.
201
210
 
202
211
  **Управление:** **↑↓** навигация, **Enter** или **Space** переключение значений, **Esc** сохранить и вернуться.
203
212
 
@@ -342,10 +351,11 @@ AgentO хранит свою конфигурацию в `~/.agento/config.json`
342
351
 
343
352
  Каждый поддерживаемый агент имеет адаптер, который переводит универсальный формат AgentO в специфичный конфиг агента:
344
353
 
345
- - **Claude Code** (`anthropic`, `fireworks`): Генерирует `~/.claude/settings.json` с выбором модели по уровням и переменными окружения `ANTHROPIC_*`. Использует Anthropic SDK. Флаги возможностей не пробрасываются (Anthropic SDK не имеет поля для модальностей).
346
- - **OpenCode** (`anthropic`, `openai-compatible`, `fireworks`): Генерирует `~/.config/opencode/config.json` через Vercel AI SDK с префиксом провайдера. Полная поддержка function calling через `@ai-sdk/openai-compatible`. Для каждой модели генерируется `modalities: { input: [...], output: ["text"] }` из флагов возможностей.
347
- - **Qwen CLI** (`openai-compatible`, `fireworks`): Генерирует `~/.qwen/settings.json` со структурой OpenAI-совместимого провайдера. Требует `baseUrl`. Пробрасывает флаги возможностей через `generationConfig.modalities`.
348
- - **Codex CLI** (`--dev` для отображения): Генерирует `~/.codex/config.toml` с `wire_api: responses`, профилями и ссылками на переменные окружения. При project-области разделяет конфиг между глобальным (`model_providers`) и проектным (`model`) конфигами. Поддерживает все типы провайдеров. Флаги возможностей не пробрасываются (Codex `responses` API не имеет поля для модальностей).
354
+ - **Claude Code** (`anthropic`, `fireworks`, `openrouter`): Генерирует `~/.claude/settings.json` с выбором модели по уровням и переменными окружения `ANTHROPIC_*`. Использует Anthropic SDK. Для `openrouter` использует **Anthropic Skin** `ANTHROPIC_AUTH_TOKEN` (Bearer). Флаги возможностей не пробрасываются.
355
+ - **OpenCode** (`anthropic`, `openai-compatible`, `fireworks`, `openrouter`): Генерирует `~/.config/opencode/config.json` через Vercel AI SDK. Полная поддержка function calling через `@ai-sdk/openai-compatible`. Для каждой модели генерируется `modalities: { input: [...], output: ["text"] }` из флагов возможностей.
356
+ - **Qwen CLI** (`openai-compatible`, `fireworks`, `openrouter`): Генерирует `~/.qwen/settings.json` со структурой OpenAI-совместимого провайдера. Требует `baseUrl`. Пробрасывает флаги возможностей через `generationConfig.modalities`.
357
+ - **Codex CLI** (`--dev` для отображения): Генерирует `~/.codex/config.toml` с `wire_api: responses`, профилями и ссылками на переменные окружения. При project-области разделяет конфиг между глобальным (`model_providers`) и проектным (`model`) конфигами. Флаги возможностей не пробрасываются.
358
+ - **Copilot CLI** (все 4 типа провайдеров): Не записывает и не изменяет файл настроек. Весь конфиг передаётся через `COPILOT_MODEL`, `COPILOT_PROVIDER_TYPE`, `COPILOT_PROVIDER_API_KEY`, `COPILOT_PROVIDER_BASE_URL`. Типы `fireworks` и `openrouter` отображаются как `COPILOT_PROVIDER_TYPE=openai`. Для моделей семейства gpt-5 автоматически добавляется `COPILOT_PROVIDER_WIRE_API=responses`.
349
359
 
350
360
  ### Бэкап и восстановление
351
361
 
@@ -1,4 +1,11 @@
1
1
  #!/usr/bin/env node
2
+ /**
3
+ * Entry point for the `agento` CLI tool.
4
+ *
5
+ * Registers all subcommands (launch, provider, profile, restore, agent)
6
+ * and defaults to launching the interactive Terminal UI (TUI) when no
7
+ * subcommand is provided.
8
+ */
2
9
  import { program } from 'commander';
3
10
  import { createRequire } from 'module';
4
11
  import { spawnSync } from 'node:child_process';
@@ -14,12 +21,17 @@ program
14
21
  .description('Manage AI agent configurations with profiles and providers')
15
22
  .version(pkg.version)
16
23
  .option('-d, --dev', 'Show development agents (e.g. codex)');
24
+ // Register CLI subcommands
17
25
  program.addCommand(createLaunchCommand());
18
26
  program.addCommand(createProviderCommand());
19
27
  program.addCommand(createProfileCommand());
20
28
  program.addCommand(createRestoreCommand());
21
29
  program.addCommand(createAgentCommand());
22
- // Default action: launch TUI
30
+ /** Returns true if error looks like ENOENT from spawnSync. */
31
+ function isEnoent(err) {
32
+ return err instanceof Error && 'code' in err && err.code === 'ENOENT';
33
+ }
34
+ // Default action: launch interactive TUI
23
35
  program.action(() => {
24
36
  const opts = program.opts();
25
37
  import('../src/tui/start.js')
@@ -28,10 +40,27 @@ program.action(() => {
28
40
  while (execReq) {
29
41
  // Ink may leave stdin in "flowing" state — pause before handing fd to child
30
42
  process.stdin.pause();
31
- spawnSync(execReq.command, execReq.args, {
32
- stdio: 'inherit',
33
- env: execReq.env,
34
- });
43
+ try {
44
+ spawnSync(execReq.command, execReq.args, {
45
+ stdio: 'inherit',
46
+ env: execReq.env,
47
+ });
48
+ }
49
+ catch (err) {
50
+ if (isEnoent(err)) {
51
+ await execReq.cleanup?.();
52
+ execReq = await startTui({
53
+ dev: opts.dev,
54
+ launchError: {
55
+ agentId: execReq.agentId ?? execReq.command,
56
+ profileId: execReq.profileId,
57
+ error: `Command "${execReq.command}" not found`,
58
+ },
59
+ });
60
+ continue;
61
+ }
62
+ throw err;
63
+ }
35
64
  await execReq.cleanup?.();
36
65
  if (!execReq.relaunch)
37
66
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"agento.js","sourceRoot":"","sources":["../../bin/agento.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAElE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,oBAAoB,CAAwB,CAAC;AAEjE,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,4DAA4D,CAAC;KACzE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC,CAAC;AAE/D,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC;AAC5C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;AAEzC,6BAA6B;AAC7B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAuB,CAAC;IACjD,MAAM,CAAC,qBAAqB,CAAC;SAC1B,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3B,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAChD,OAAO,OAAO,EAAE,CAAC;YACf,4EAA4E;YAC5E,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtB,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE;gBACvC,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,OAAO,CAAC,GAAG;aACjB,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,QAAQ;gBAAE,MAAM;YAC7B,OAAO,GAAG,MAAM,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"agento.js","sourceRoot":"","sources":["../../bin/agento.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { AgentAdapter, AgentConfig, AgentConfigPaths } from './base.js';
2
+ import type { LaunchScope } from './base.js';
3
+ import type { Profile, Provider } from '../config/schema.js';
4
+ export declare class CopilotAdapter implements AgentAdapter {
5
+ readonly id = "copilot";
6
+ readonly displayName = "Copilot CLI";
7
+ readonly supportedProviderTypes: readonly ["openai-compatible", "anthropic", "fireworks", "openrouter"];
8
+ configPaths(cwd?: string): AgentConfigPaths;
9
+ readConfig(scope: LaunchScope, cwd?: string): Promise<AgentConfig | null>;
10
+ buildConfig(_profile: Profile, _providers: Provider[]): AgentConfig;
11
+ buildEnv(profile: Profile, providers: Provider[]): Record<string, string>;
12
+ writeConfig(_config: AgentConfig, _scope: LaunchScope, _cwd?: string): Promise<void>;
13
+ }
14
+ export declare const copilotAdapter: CopilotAdapter;
15
+ //# sourceMappingURL=copilot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot.d.ts","sourceRoot":"","sources":["../../../src/adapters/copilot.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAgB,MAAM,qBAAqB,CAAC;AAgB3E,qBAAa,cAAe,YAAW,YAAY;IACjD,QAAQ,CAAC,EAAE,aAAa;IACxB,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,sBAAsB,yEAA0E;IAEzG,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAOrC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAO/E,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,WAAW;IAMnE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IA8BnE,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI3F;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { join } from 'node:path';
5
+ const DEFAULT_BASE_URLS = {
6
+ anthropic: 'https://api.anthropic.com',
7
+ fireworks: 'https://api.fireworks.ai/inference/v1',
8
+ openrouter: 'https://openrouter.ai/api/v1',
9
+ };
10
+ /** Map AgentO provider types to Copilot CLI COPILOT_PROVIDER_TYPE values. */
11
+ const PROVIDER_TYPE_MAP = {
12
+ 'openai-compatible': 'openai',
13
+ 'anthropic': 'anthropic',
14
+ 'fireworks': 'openai',
15
+ 'openrouter': 'openai',
16
+ };
17
+ export class CopilotAdapter {
18
+ id = 'copilot';
19
+ displayName = 'Copilot CLI';
20
+ supportedProviderTypes = ['openai-compatible', 'anthropic', 'fireworks', 'openrouter'];
21
+ configPaths(cwd) {
22
+ return {
23
+ global: join(homedir(), '.copilot', 'settings.json'),
24
+ project: join(cwd ?? process.cwd(), '.copilot', 'settings.json'),
25
+ };
26
+ }
27
+ async readConfig(scope, cwd) {
28
+ const path = this.configPaths(cwd)[scope];
29
+ if (!existsSync(path))
30
+ return null;
31
+ const raw = await readFile(path, 'utf-8');
32
+ return JSON.parse(raw);
33
+ }
34
+ buildConfig(_profile, _providers) {
35
+ // Copilot CLI accepts model via COPILOT_MODEL env var (handled by buildEnv),
36
+ // so we do not need to mutate the settings file.
37
+ return {};
38
+ }
39
+ buildEnv(profile, providers) {
40
+ const base = profile.models.find((m) => m.tier === 'base') ?? profile.models[0];
41
+ if (!base)
42
+ return {};
43
+ const provider = providers.find((p) => p.id === base.providerId);
44
+ if (!provider)
45
+ return {};
46
+ const env = {
47
+ COPILOT_MODEL: base.model,
48
+ COPILOT_PROVIDER_TYPE: PROVIDER_TYPE_MAP[provider.type],
49
+ COPILOT_PROVIDER_API_KEY: provider.apiKey,
50
+ };
51
+ const defaultUrl = DEFAULT_BASE_URLS[provider.type];
52
+ if (!provider.baseUrl && provider.type === 'openai-compatible') {
53
+ throw new Error('baseUrl required for openai-compatible provider in Copilot CLI');
54
+ }
55
+ const resolvedUrl = provider.baseUrl ?? defaultUrl;
56
+ if (!resolvedUrl) {
57
+ throw new Error(`No base URL configured for provider type "${provider.type}" in Copilot CLI`);
58
+ }
59
+ env.COPILOT_PROVIDER_BASE_URL = resolvedUrl;
60
+ if (base.model.startsWith('gpt-5')) {
61
+ env.COPILOT_PROVIDER_WIRE_API = 'responses';
62
+ }
63
+ return env;
64
+ }
65
+ async writeConfig(_config, _scope, _cwd) {
66
+ // No-op: Copilot CLI receives all config via environment variables (see buildEnv).
67
+ // There is nothing to write to settings.json.
68
+ }
69
+ }
70
+ export const copilotAdapter = new CopilotAdapter();
71
+ //# sourceMappingURL=copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../../src/adapters/copilot.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { AgentAdapter, AgentConfig, AgentConfigPaths } from './base.js';
2
2
  import type { LaunchScope } from './base.js';
3
3
  import type { Profile, Provider } from '../config/schema.js';
4
+ /** Adapter for the OpenCode CLI agent. */
4
5
  export declare class OpenCodeAdapter implements AgentAdapter {
5
6
  readonly id = "opencode";
6
7
  readonly displayName = "OpenCode";
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/adapters/opencode.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAgB,MAAM,qBAAqB,CAAC;AAO3E,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,WAAW,cAAc;IAClC,QAAQ,CAAC,sBAAsB,yEAA0E;IAEzG,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAOrC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAO/E,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW;IA6E3D,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMxF;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/adapters/opencode.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAgB,MAAM,qBAAqB,CAAC;AAQ3E,0CAA0C;AAC1C,qBAAa,eAAgB,YAAW,YAAY;IAClD,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,WAAW,cAAc;IAClC,QAAQ,CAAC,sBAAsB,yEAA0E;IAEzG,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB;IAOrC,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAO/E,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW;IA6E3D,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMxF;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -1,11 +1,21 @@
1
+ /**
2
+ * Adapter for the OpenCode agent.
3
+ *
4
+ * Generates Vercel-AI-SDK-compatible configuration stored in JSON.
5
+ * Supports all provider types (anthropic, openai-compatible, fireworks, openrouter).
6
+ * Per-model modalities (image / video / audio) are emitted so the agent knows
7
+ * which inputs the model accepts.
8
+ */
1
9
  import { readFile, writeFile, mkdir } from 'node:fs/promises';
2
10
  import { existsSync } from 'node:fs';
3
11
  import { homedir } from 'node:os';
4
12
  import { join } from 'node:path';
13
+ /** Default API base URLs for provider types that need them. */
5
14
  const DEFAULT_BASE_URLS = {
6
15
  fireworks: 'https://api.fireworks.ai/inference/v1',
7
16
  openrouter: 'https://openrouter.ai/api/v1',
8
17
  };
18
+ /** Adapter for the OpenCode CLI agent. */
9
19
  export class OpenCodeAdapter {
10
20
  id = 'opencode';
11
21
  displayName = 'OpenCode';
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/adapters/opencode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,MAAM,iBAAiB,GAA0C;IAC/D,SAAS,EAAE,uCAAuC;IAClD,UAAU,EAAE,8BAA8B;CAC3C,CAAC;AAEF,MAAM,OAAO,eAAe;IACjB,EAAE,GAAG,UAAU,CAAC;IAChB,WAAW,GAAG,UAAU,CAAC;IACzB,sBAAsB,GAAG,CAAC,WAAW,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY,CAAU,CAAC;IAEzG,WAAW,CAAC,GAAY;QACtB,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC;YAC7D,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC;SACrD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAkB,EAAE,GAAY;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,OAAgB,EAAE,SAAqB;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,IAAI,iBAAiB,CAAC,CAAC;QAEtE,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QAEhF,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,WAAW,EAAE,YAAY,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACtF,MAAM,eAAe,GAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK;YAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK;YAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,KAAK;YAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;QAEhE,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,OAAO,GAA4B,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrE,IAAI,QAAQ,CAAC,OAAO;gBAAE,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;YAC5D,OAAO;gBACL,KAAK,EAAE,aAAa,IAAI,CAAC,KAAK,EAAE;gBAChC,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE;gBACpC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE;aACzC,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACrE,MAAM,OAAO,GAA4B,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrE,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,IAAI,iBAAiB,CAAC,SAAS,CAAC;YACrE,OAAO;gBACL,KAAK,EAAE,GAAG,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE;gBACrC,QAAQ,EAAE;oBACR,CAAC,WAAW,CAAC,EAAE;wBACb,GAAG,EAAE,2BAA2B;wBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,OAAO;wBACP,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;qBAC3D;iBACF;aACF,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACnC,MAAM,OAAO,GAA4B;gBACvC,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,iBAAiB,CAAC,UAAU;aAC1D,CAAC;YACF,OAAO;gBACL,KAAK,EAAE,cAAc,IAAI,CAAC,KAAK,EAAE;gBACjC,QAAQ,EAAE;oBACR,UAAU,EAAE;wBACV,GAAG,EAAE,2BAA2B;wBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,OAAO;wBACP,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;qBAC3D;iBACF;aACF,CAAC;QACJ,CAAC;QAED,4DAA4D;QAC5D,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,OAAO,GAA4B,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrE,IAAI,QAAQ,CAAC,OAAO;YAAE,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC5D,OAAO;YACL,KAAK,EAAE,GAAG,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE;YACrC,QAAQ,EAAE;gBACR,CAAC,WAAW,CAAC,EAAE;oBACb,GAAG,EAAE,2BAA2B;oBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,OAAO;oBACP,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;iBAC3D;aACF;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAmB,EAAE,KAAkB,EAAE,GAAY;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["../../../src/adapters/opencode.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * CLI command: `agento agent`
3
+ *
4
+ * Subcommand: status — shows whether each agent config is original or modified
5
+ * (i.e. a backup exists).
6
+ */
1
7
  import { Command } from 'commander';
8
+ /** Builds the `agent` CLI command. */
2
9
  export declare function createAgentCommand(): Command;
3
10
  //# sourceMappingURL=agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,wBAAgB,kBAAkB,IAAI,OAAO,CA6B5C"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC,sCAAsC;AACtC,wBAAgB,kBAAkB,IAAI,OAAO,CA6B5C"}
@@ -1,15 +1,24 @@
1
+ /**
2
+ * CLI command: `agento agent`
3
+ *
4
+ * Subcommand: status — shows whether each agent config is original or modified
5
+ * (i.e. a backup exists).
6
+ */
1
7
  import { Command } from 'commander';
2
8
  import { backupExists } from '../../config/store.js';
3
9
  import { claudeCodeAdapter } from '../../adapters/claude-code.js';
4
10
  import { openCodeAdapter } from '../../adapters/opencode.js';
5
11
  import { qwenAdapter } from '../../adapters/qwen.js';
6
12
  import { codexAdapter } from '../../adapters/codex.js';
7
- const ALL_ADAPTERS = [claudeCodeAdapter, openCodeAdapter, qwenAdapter, codexAdapter];
13
+ import { copilotAdapter } from '../../adapters/copilot.js';
14
+ const ALL_ADAPTERS = [claudeCodeAdapter, openCodeAdapter, qwenAdapter, codexAdapter, copilotAdapter];
15
+ /** Returns all adapters, filtering out `dev` ones unless `--dev` is passed. */
8
16
  function getAdapters(dev = false) {
9
17
  if (dev)
10
18
  return ALL_ADAPTERS;
11
19
  return ALL_ADAPTERS.filter((a) => !a.dev);
12
20
  }
21
+ /** Builds the `agent` CLI command. */
13
22
  export function createAgentCommand() {
14
23
  const cmd = new Command('agent').description('Agent config status');
15
24
  cmd
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../src/cli/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,MAAM,YAAY,GAAmB,CAAC,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAErG,SAAS,WAAW,CAAC,GAAG,GAAG,KAAK;IAC9B,IAAI,GAAG;QAAE,OAAO,YAAY,CAAC;IAC7B,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAEpE,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAAuB,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAgC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAClE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;oBACpC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;oBAChC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAClD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,UAAU,CAAC;oBACnE,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,WAAW,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,CAAC;oBAC9D,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../src/cli/commands/agent.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,MAAM,YAAY,GAAmB,CAAC,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AAErH,+EAA+E;AAC/E,SAAS,WAAW,CAAC,GAAG,GAAG,KAAK;IAC9B,IAAI,GAAG;QAAE,OAAO,YAAY,CAAC;IAC7B,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,kBAAkB;IAChC,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAEpE,GAAG;SACA,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,IAAuB,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,MAAM,GAAgC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAClE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;oBACpC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;oBAChC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBAClD,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,UAAU,CAAC;oBACnE,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,WAAW,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,CAAC;oBAC9D,OAAO,CAAC,GAAG,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,3 +1,10 @@
1
+ /**
2
+ * CLI command: `agento launch`
3
+ *
4
+ * Validates profile / agent / provider compatibility and delegates to either
5
+ * child-mode (backup → patch → spawn → restore) or independent-mode launch.
6
+ */
1
7
  import { Command } from 'commander';
8
+ /** Builds the `launch` CLI command with all required options and validation. */
2
9
  export declare function createLaunchCommand(): Command;
3
10
  //# sourceMappingURL=launch.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,wBAAgB,mBAAmB,IAAI,OAAO,CAgF7C"}
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/launch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,gFAAgF;AAChF,wBAAgB,mBAAmB,IAAI,OAAO,CAgF7C"}