@emaxe/agento 0.1.2 → 0.3.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 (46) hide show
  1. package/AGENTS.md +341 -0
  2. package/CHANGELOG.md +117 -0
  3. package/README.md +168 -31
  4. package/README.ru.md +427 -0
  5. package/dist/src/adapters/base.d.ts +3 -1
  6. package/dist/src/adapters/base.d.ts.map +1 -1
  7. package/dist/src/adapters/claude-code.d.ts +1 -0
  8. package/dist/src/adapters/claude-code.d.ts.map +1 -1
  9. package/dist/src/adapters/claude-code.js +20 -2
  10. package/dist/src/adapters/claude-code.js.map +1 -1
  11. package/dist/src/adapters/codex.d.ts +1 -1
  12. package/dist/src/adapters/codex.d.ts.map +1 -1
  13. package/dist/src/adapters/codex.js +6 -2
  14. package/dist/src/adapters/codex.js.map +1 -1
  15. package/dist/src/adapters/opencode.d.ts +1 -0
  16. package/dist/src/adapters/opencode.d.ts.map +1 -1
  17. package/dist/src/adapters/opencode.js +50 -1
  18. package/dist/src/adapters/opencode.js.map +1 -1
  19. package/dist/src/adapters/qwen.d.ts +1 -0
  20. package/dist/src/adapters/qwen.d.ts.map +1 -1
  21. package/dist/src/adapters/qwen.js +12 -4
  22. package/dist/src/adapters/qwen.js.map +1 -1
  23. package/dist/src/cli/commands/launch.d.ts.map +1 -1
  24. package/dist/src/cli/commands/launch.js +13 -0
  25. package/dist/src/cli/commands/launch.js.map +1 -1
  26. package/dist/src/cli/commands/provider.d.ts.map +1 -1
  27. package/dist/src/cli/commands/provider.js +7 -3
  28. package/dist/src/cli/commands/provider.js.map +1 -1
  29. package/dist/src/config/schema.d.ts +177 -29
  30. package/dist/src/config/schema.d.ts.map +1 -1
  31. package/dist/src/config/schema.js +18 -2
  32. package/dist/src/config/schema.js.map +1 -1
  33. package/dist/src/config/store.d.ts.map +1 -1
  34. package/dist/src/config/store.js +25 -1
  35. package/dist/src/config/store.js.map +1 -1
  36. package/dist/src/tui/screens/LaunchAgent.d.ts.map +1 -1
  37. package/dist/src/tui/screens/LaunchAgent.js +21 -4
  38. package/dist/src/tui/screens/LaunchAgent.js.map +1 -1
  39. package/dist/src/tui/screens/MainMenu.js +1 -1
  40. package/dist/src/tui/screens/Profiles.d.ts.map +1 -1
  41. package/dist/src/tui/screens/Profiles.js +5 -4
  42. package/dist/src/tui/screens/Profiles.js.map +1 -1
  43. package/dist/src/tui/screens/Providers.d.ts.map +1 -1
  44. package/dist/src/tui/screens/Providers.js +39 -20
  45. package/dist/src/tui/screens/Providers.js.map +1 -1
  46. package/package.json +4 -2
package/AGENTS.md ADDED
@@ -0,0 +1,341 @@
1
+ # AgentO — Agent Instructions
2
+
3
+ ## Общее описание
4
+
5
+ AgentO — CLI-инструмент для управления конфигурациями AI-агентов. Позволяет создавать **профили** (наборы моделей) и **провайдеры** API, а затем запускать различных агентов (Claude Code, OpenCode, Qwen CLI, Codex CLI) с нужной конфигурацией через единый интерфейс.
6
+
7
+ ## Стек
8
+
9
+ - **TypeScript 5.5** + **Node.js ≥18**
10
+ - **ES Modules** (`"type": "module"` в package.json)
11
+ - **Vitest** для тестирования (тесты запускаются напрямую с `src/`)
12
+ - **`tsc`** для компиляции `src/` + `bin/` → `dist/`
13
+ - **Commander** для CLI
14
+ - **Ink + React** для TUI (Terminal User Interface)
15
+ - **Zod** для валидации схем
16
+ - **smol-toml** для работы с TOML (Codex adapter)
17
+ - **node-pty** (optional) для PTY-режима запуска
18
+
19
+ ## Структура проекта
20
+
21
+ ```
22
+ /Users/maksimklisin/Desktop/_JS/agento/
23
+ ├── bin/agento.ts # Entry point CLI
24
+ ├── src/
25
+ │ ├── adapters/ # Адаптеры конфигов агентов
26
+ │ │ ├── base.ts # Базовый интерфейс AgentAdapter
27
+ │ │ ├── claude-code.ts # Адаптер Claude Code
28
+ │ │ ├── opencode.ts # Адаптер OpenCode
29
+ │ │ ├── qwen.ts # Адаптер Qwen CLI
30
+ │ │ └── codex.ts # Адаптер Codex CLI
31
+ │ ├── cli/commands/ # CLI команды (Commander)
32
+ │ │ ├── launch.ts # agento launch
33
+ │ │ ├── provider.ts # agento provider
34
+ │ │ ├── profile.ts # agento profile
35
+ │ │ ├── restore.ts # agento restore
36
+ │ │ └── agent.ts # agento agent
37
+ │ ├── config/ # Конфигурация AgentO
38
+ │ │ ├── schema.ts # Zod-схемы и типы
39
+ │ │ └── store.ts # Чтение/запись ~/.agento/config.json
40
+ │ ├── launcher/ # Запуск агентов
41
+ │ │ ├── child.ts # Child mode (backup → patch → spawn → restore)
42
+ │ │ ├── independent.ts # Independent mode (backup → patch → exec)
43
+ │ │ └── shell-path-resolver.ts # Резолвинг PATH через login shell
44
+ │ ├── profiles/ # Управление профилями
45
+ │ │ └── profile-manager.ts
46
+ │ ├── providers/ # Управление провайдерами
47
+ │ │ └── provider-manager.ts
48
+ │ └── tui/ # Terminal UI (Ink/React)
49
+ │ ├── App.tsx # Корневой компонент, роутинг экранов
50
+ │ ├── start.ts # Точка входа в TUI
51
+ │ ├── use-key-input.ts # Хук для обработки клавиш
52
+ │ └── screens/ # Экраны TUI
53
+ │ ├── MainMenu.tsx
54
+ │ ├── LaunchAgent.tsx
55
+ │ ├── Providers.tsx
56
+ │ ├── Profiles.tsx
57
+ │ ├── Agents.tsx
58
+ │ └── Settings.tsx
59
+ ```
60
+
61
+ ## Система конфигурации
62
+
63
+ ### AgentO Config
64
+
65
+ Хранится в `~/.agento/config.json`:
66
+
67
+ ```typescript
68
+ {
69
+ providers: Provider[]; // API провайдеры
70
+ profiles: Profile[]; // Профили с моделями
71
+ settings: {
72
+ defaultLaunchMode: 'child' | 'independent';
73
+ defaultConfigScope: 'global' | 'project';
74
+ independentMode: 'spawn-detached' | 'pty';
75
+ }
76
+ }
77
+ ```
78
+
79
+ ### Provider
80
+
81
+ ```typescript
82
+ {
83
+ id: string (uuid);
84
+ name: string; // "Fireworks AI"
85
+ type: 'openai-compatible' | 'anthropic' | 'fireworks' | 'openrouter';
86
+ apiKey: string;
87
+ baseUrl?: string; // URL для openai-compatible (обязателен), опционален для остальных (fireworks/openrouter имеют дефолтные URL)
88
+ models: ModelConfig[]; // Доступные модели провайдера
89
+ }
90
+
91
+ // ModelConfig (с capability-флагами)
92
+ {
93
+ name: string; // "claude-3-opus", "accounts/fireworks/models/kimi-k2"
94
+ capabilities: {
95
+ image: boolean; // default: true
96
+ video: boolean; // default: false
97
+ audio: boolean; // default: false
98
+ };
99
+ }
100
+ ```
101
+
102
+ **Миграция:** конфиги старого формата (`models: string[]`) автоматически мигрируются при чтении в `ModelConfig[]` с дефолтными возможностями. Перезаписываются на следующем save.
103
+
104
+ **Capability-маркер:** `capabilityMarker(caps)` → `[iva]`, `[i--]`, `[---]` и т. п. Используется в TUI и `agento provider list` для отображения. Никогда не попадает в конфиги агентов.
105
+
106
+ ### Profile
107
+
108
+ ```typescript
109
+ {
110
+ id: string (uuid);
111
+ name: string;
112
+ models: Array<{
113
+ providerId: string (uuid);
114
+ model: string;
115
+ tier?: 'small' | 'base' | 'smart'; // Для multi-tier профилей
116
+ }>;
117
+ }
118
+ ```
119
+
120
+ ## Адаптеры агентов
121
+
122
+ Все адаптеры реализуют интерфейс `AgentAdapter` из `src/adapters/base.ts`:
123
+
124
+ - `id` — уникальный идентификатор
125
+ - `displayName` — человекочитаемое имя
126
+ - `dev?` — флаг разработки: скрывает агента из UI/CLI по умолчанию
127
+ - `configPaths(cwd?)` → `{ global, project }` — пути к конфигам агента
128
+ - `readConfig(scope, cwd?)` — читает текущий конфиг агента
129
+ - `buildConfig(profile, providers)` — генерирует конфиг агента из профиля
130
+ - `writeConfig(config, scope, cwd?)` — записывает конфиг
131
+ - `buildEnv?(profile, providers)` — опционально: env-переменные для запуска
132
+
133
+ ### Поддерживаемые агенты
134
+
135
+ | Агент | ID | Команда | Поддерживаемые типы | Формат конфига | Capability-флаги | Особенности |
136
+ |-------|-----|---------|---|---|---|---|
137
+ | Claude Code | `claude-code` | `claude` | `anthropic`, `fireworks`, `openrouter` | JSON (`~/.claude/settings.json`) | Игнорирует | Поддерживает tiers (small/base/smart). Только один провайдер на профиль. Для `openrouter` использует Anthropic Skin: `ANTHROPIC_AUTH_TOKEN` (Bearer) + пустой `ANTHROPIC_API_KEY`, БЕЗ `apiKeyHelper`. |
138
+ | OpenCode | `opencode` | `opencode` | `anthropic`, `openai-compatible`, `fireworks`, `openrouter` | JSON (`~/.config/opencode/config.json` или `./opencode.json`) | Пробрасывает в `models[<name>].modalities` | Префикс модели: `providerKey/model`. Для `openrouter` ключ провайдера всегда `openrouter`. |
139
+ | Qwen CLI | `qwen` | `qwen` | `openai-compatible`, `fireworks`, `openrouter` | JSON (`~/.qwen/settings.json`) | Пробрасывает в `generationConfig.modalities` | **modelProviders ключ всегда `"openai"`** для openai-compatible провайдеров. Группирует модели по baseUrl. |
140
+ | Codex CLI | `codex` | `codex` | `fireworks`, `openrouter` | TOML (`~/.codex/config.toml`) | Игнорирует | `dev: true` (скрыт по умолчанию). `wire_api: responses`. При `project` scope `model_providers` пишет в global config, а `model` — в project config. Использует `buildEnv` для инжекта API ключа. |
141
+
142
+ ### Важная деталь: Qwen Adapter
143
+
144
+ Для Qwen CLI ключ в `modelProviders` всегда должен быть `"openai"` (не зависит от имени провайдера). Это требование самого Qwen для OpenAI-совместимых провайдеров.
145
+
146
+ ```typescript
147
+ // src/adapters/qwen.ts
148
+ const providerKey = 'openai'; // Было: provider.name.toLowerCase().replace(/\s+/g, '-')
149
+ ```
150
+
151
+ ## CLI команды
152
+
153
+ ### Запуск
154
+
155
+ ```bash
156
+ # Интерактивный TUI (default)
157
+ agento
158
+ # Показать development agents (e.g. codex):
159
+ agento --dev
160
+
161
+ # Запуск агента напрямую
162
+ agento launch -p <profile> -a <agent> [-m child|independent] [-s global|project]
163
+
164
+ # Примеры:
165
+ agento launch -p default -a claude-code
166
+ agento launch -p default -a qwen -m child -s project
167
+ # Запуск development агента:
168
+ agento launch -p default -a codex --dev
169
+ ```
170
+
171
+ ### Управление провайдерами
172
+
173
+ ```bash
174
+ agento provider list
175
+ agento provider add -n "Fireworks AI" -t openai-compatible -k "sk-..." -u "http://..." -M "model1,model2"
176
+ agento provider remove <name>
177
+ ```
178
+
179
+ ### Управление профилями
180
+
181
+ ```bash
182
+ agento profile list
183
+ agento profile add -n "default" -m "providerId:modelName:base,providerId:model2:smart"
184
+ agento profile remove <name>
185
+ ```
186
+
187
+ ### Прочее
188
+
189
+ ```bash
190
+ agento agent status # Статус конфигов агентов
191
+ agento agent status --dev # Показать статус включая development agents
192
+ agento restore -a <agent> -s <scope> # Восстановить конфиг из бэкапа
193
+ ```
194
+
195
+ ## Режимы запуска
196
+
197
+ ### Child Mode (default)
198
+
199
+ 1. Backup текущего конфига агента → `~/.agento/backups/<agent>/<scope>.bak.json`
200
+ 2. Записать новый конфиг (сгенерированный из профиля)
201
+ 3. Запустить агента как child process
202
+ 4. После завершения: восстановить оригинальный конфиг
203
+ 5. SIGTERM/SIGINT: пробрасываются дочернему процессу, затем cleanup
204
+
205
+ ### Independent Mode
206
+
207
+ 1. Backup текущего конфига
208
+ 2. Записать новый конфиг
209
+ 3. Вернуть `ExecRequest` для запуска внешним процессом
210
+ 4. Восстановление конфига — ответственность пользователя (или через `agento restore`)
211
+
212
+ ## TUI (Terminal UI)
213
+
214
+ Запускается по умолчанию при вызове `agento` без аргументов.
215
+
216
+ - **MainMenu**: Выбор раздела (↑↓, Enter, Esc/q)
217
+ - **LaunchAgent**: Двухшаговый выбор (профиль → агент → запуск)
218
+ - **Providers**: ↑↓ navigate | Enter/a: add | e: edit | d: delete | Esc: back. В режиме edit: `[+ add model]` row → Enter добавляет модель, `i`/`v`/`a` переключают image/video/audio для выделенной модели, `e` редактирует имя, `d` удаляет
219
+ - **Profiles**: В списке ↑↓ navigate | Enter: детали | a: add | d: delete | Esc: back. В деталях профиля: ↑↓ navigate models | a: add model | d: delete model | e: edit | Esc: back. При выборе модели в add/edit wizard рядом с именем отображаются capability-маркеры
220
+ - **Agents**: Просмотр статуса конфигов (global/project, backup наличие)
221
+ - **Settings**: Настройки по умолчанию
222
+
223
+ Важно: перед передачей управления child process TUI вызывает `process.stdin.pause()` чтобы сбросить состояние stdin.
224
+
225
+ Агенты с `dev: true` (например, Codex CLI) скрыты из TUI и CLI по умолчанию. Чтобы показать их, используйте `agento --dev` или `agento launch --dev`.
226
+
227
+ ## Тесты
228
+
229
+ ```bash
230
+ npm test # Запуск всех тестов
231
+ npm run test:watch # Watch mode
232
+ ```
233
+
234
+ Тестовые файлы (Vitest, Node environment):
235
+
236
+ | Файл | Что тестирует |
237
+ |------|---------------|
238
+ | `src/adapters/*.test.ts` | Генерацию конфигов для каждого агента |
239
+ | `src/config/store.test.ts` | Чтение/запись `~/.agento/config.json` и бэкапов |
240
+ | `src/launcher/child.test.ts` | Child launch flow (backup/restore) |
241
+ | `src/launcher/shell-path-resolver.test.ts` | Резолвинг PATH |
242
+ | `src/profiles/profile-manager.test.ts` | CRUD профилей |
243
+ | `src/providers/provider-manager.test.ts` | CRUD провайдеров |
244
+
245
+ Тесты работают напрямую с `src/` (не требуют сборки).
246
+
247
+ ## Сборка и запуск (КРИТИЧЕСКИ ВАЖНО)
248
+
249
+ ### Пересборка
250
+
251
+ **После ЛЮБЫХ изменений в `src/` или `bin/` обязательно пересобрать:**
252
+
253
+ ```bash
254
+ npm run build
255
+ ```
256
+
257
+ Это скомпилирует TypeScript в `dist/`.
258
+
259
+ ### Почему это важно
260
+
261
+ - Глобальная команда `agento` (установленная через `npm link` или `npm install -g`) **запускает скомпилированный код из `dist/`**, а не исходники из `src/`.
262
+ - Если после правок в `src/` не пересобрать, глобальный `agento` будет использовать **устаревшую** версию из `dist/`.
263
+ - Тесты работают с `src/` напрямую, поэтому могут проходить, а глобальная команда при этом использовать старый код.
264
+
265
+ ### Проверка после сборки
266
+
267
+ ```bash
268
+ grep -n "providerKey" dist/src/adapters/qwen.js
269
+ # должно показать: const providerKey = 'openai';
270
+ ```
271
+
272
+ ### Разработка
273
+
274
+ ```bash
275
+ npm run dev # tsc --watch (автопересборка при изменениях)
276
+ npm run typecheck # tsc --noEmit (проверка типов без сборки)
277
+ npm run lint # ESLint
278
+ npm run format # Prettier
279
+ ```
280
+
281
+ ## Ключевые паттерны
282
+
283
+ ### Адаптеры
284
+
285
+ - Каждый адаптер изолирован и знает формат конфига своего агента
286
+ - `buildConfig` — чистая функция (не читает/не пишет файлы)
287
+ - `writeConfig` — единственное место записи конфига агента
288
+
289
+ ### Backup / Restore
290
+
291
+ - Перед любым изменением конфига агента делается бэкап в `~/.agento/backups/`
292
+ - Child mode гарантирует восстановление при любом исходе (exit, SIGTERM, SIGINT)
293
+ - Independent mode оставляет конфиг изменённым — восстановление через `agento restore`
294
+
295
+ ### Конфиг Scope
296
+
297
+ - `global` — конфиг в домашней директории (`~/.agent/...`)
298
+ - `project` — конфиг в текущей рабочей директории (`./.agent/...`)
299
+
300
+ ### Multi-tier профили
301
+
302
+ - Если в профиле несколько моделей, каждая должна иметь `tier` (`small`, `base`, `smart`)
303
+ - Обязательно наличие хотя бы одной модели с `tier: 'base'`
304
+ - Одна модель в профиле — tier игнорируется
305
+
306
+ ## Troubleshooting
307
+
308
+ ### Изменения в src/ не применяются
309
+
310
+ **Причина:** Забыли `npm run build`. Глобальный `agento` использует `dist/`, не `src/`.
311
+
312
+ **Решение:**
313
+ ```bash
314
+ npm run build
315
+ # Проверить
316
+ grep "const providerKey" dist/src/adapters/qwen.js
317
+ ```
318
+
319
+ ### Тесты проходят, но поведение глобальной команды другое
320
+
321
+ **Причина:** `dist/` устарел относительно `src/`.
322
+
323
+ **Решение:** `npm run build` и перезапуск.
324
+
325
+ ## Чеклист перед публикацией (git / npm)
326
+
327
+ При любом изменении функциональности перед коммитом и публикацией в npm **обязательно**:
328
+
329
+ 1. Обновить **`AGENTS.md`** — если изменился интерфейс адаптеров, структура конфига, CLI команды или TUI
330
+ 2. Обновить **`README.md`** — если новая фича видна пользователю (новые флаги, агенты, команды, поведение)
331
+ 3. Обновить **`CHANGELOG.md`** — добавить запись в секцию `[Unreleased]` с типом изменения (Added / Changed / Fixed / Removed)
332
+
333
+ > Порядок: сначала обновляешь код, потом документацию, потом коммитишь всё вместе.
334
+
335
+ ## Дополнительные инструкции
336
+
337
+ - Все адаптеры должны поддерживать `readConfig` → `buildConfig` → `writeConfig` pipeline
338
+ - При добавлении нового агента нужно: создать адаптер, добавить в `AGENT_COMMANDS` (launch.ts), добавить в TUI (`LaunchAgent.tsx`), добавить тесты
339
+ - Провайдеры типа `anthropic` не поддерживаются Qwen (проверяется в адаптерах)
340
+ - BaseUrl обязателен для openai-compatible провайдеров (кроме Claude Code, который использует официальный API по умолчанию). Для `fireworks` и `openrouter` есть дефолтные URL: `https://api.fireworks.ai/inference/v1` и `https://openrouter.ai/api/v1`
341
+ - Тип `openrouter` поддерживается всеми 4 агентами. OpenRouter предоставляет три API-формата (OpenAI Chat Completions, Anthropic Skin, Responses API), что позволяет использовать его с Claude Code (Anthropic Skin), OpenCode/Qwen (OpenAI-compatible) и Codex (Responses API)
package/CHANGELOG.md ADDED
@@ -0,0 +1,117 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Planned
11
+
12
+ - Additional agent support (continue.dev, aider, etc.)
13
+ - Profile import/export
14
+ - CLI flags for setting non-default capabilities at `provider add` time
15
+ - Plugin system for custom adapters
16
+ - Better error handling and logging
17
+ - Configuration templates and presets
18
+
19
+ ## [0.3.0] - 2026-05-11
20
+
21
+ ### Added
22
+
23
+ - **New provider type `openrouter`** — full support for [OpenRouter](https://openrouter.ai) across all 4 agents:
24
+ - **Claude Code**: uses OpenRouter's Anthropic Skin with `ANTHROPIC_AUTH_TOKEN` (Bearer) + empty `ANTHROPIC_API_KEY`, no `apiKeyHelper`. Base URL: `https://openrouter.ai/api`
25
+ - **OpenCode**: uses `@ai-sdk/openai-compatible` with provider key `openrouter`. Base URL: `https://openrouter.ai/api/v1`
26
+ - **Qwen CLI**: routed through OpenAI-compatible interface with default URL `https://openrouter.ai/api/v1`
27
+ - **Codex CLI**: `wire_api: 'responses'` (Responses API beta). Base URL: `https://openrouter.ai/api/v1`
28
+ - `PROVIDER_TYPES` constant exported from schema — removes literal type duplication in CLI and TUI
29
+
30
+ ### Changed
31
+
32
+ - Adapter default base URLs refactored into `DEFAULT_BASE_URLS: Partial<Record<ProviderType, string>>` map (was a chain of ternary operators) — scales to new provider types
33
+
34
+ ## [0.2.0] - 2026-05-10
35
+
36
+ ### Added
37
+
38
+ - **Model capability flags** (`image`, `video`, `audio`) — every model in a provider now carries modality metadata:
39
+ - New schema types `ModelCapabilities` and `ModelConfig`. Provider model entries are objects `{ name, capabilities }` instead of bare strings.
40
+ - Defaults: `image=true`, `video=false`, `audio=false`.
41
+ - Capability marker `[iva]` / `[i--]` rendered before model names in TUI and CLI listings (informational only — never written into agent configs).
42
+ - **TUI hotkeys for capabilities** in Providers → Edit:
43
+ - `i` / `v` / `a` toggle image / video / audio for the highlighted model
44
+ - `[+ add model]` row activated by `Enter` replaces the previous `a`-to-add hotkey (avoids collision with audio toggle)
45
+ - **Qwen adapter**: now passes real `generationConfig.modalities` based on per-model capabilities (previously hardcoded to `false`).
46
+ - **OpenCode adapter**: emits per-model `modalities: { input: [...], output: ['text'] }`, including `image` / `video` / `audio` only when the corresponding capability is enabled. Applies to all three provider types (`anthropic`, `openai-compatible`, `fireworks`).
47
+ - **Lazy config migration**: configs created by older versions (with `string[]` model lists) are migrated on read into the new `ModelConfig[]` shape with default capabilities. Idempotent; written back on next save.
48
+ - **Earlier additions carried over from Unreleased:**
49
+ - `--dev` flag across CLI and TUI for showing development agents (Codex CLI)
50
+ - Codex CLI adapter improvements: `wire_api: 'responses'`, `default_profile` / `profiles.default` blocks, project-scope split, `buildEnv` support
51
+ - TUI Profiles screen redesign: `a` add, `d` delete, `↑↓` navigate
52
+ - TUI Providers screen: `Enter` on trailing row opens add form
53
+ - Base adapter interface: optional `dev?: boolean` flag
54
+
55
+ ### Changed
56
+
57
+ - `ProviderSchema.models` is now `z.array(ModelConfigSchema).min(1)` instead of `z.array(z.string()).min(1)`.
58
+ - CLI `provider list` and TUI Providers list display capability markers next to each model.
59
+ - `agento provider add -M ...` parses comma-separated model names into `ModelConfig[]` with default capabilities (toggle in TUI to change).
60
+ - Codex CLI is now marked as `dev: true` — hidden from TUI and CLI unless `--dev` is passed.
61
+ - Launch command now passes `args` (e.g. `['-p', 'default']` for Codex) to child/independent launchers.
62
+
63
+ ## [0.1.2] - 2025-05-09
64
+
65
+ ### Changed
66
+
67
+ - **Documentation**: Expanded README.md "Interactive TUI" section with detailed screen-by-screen guide, navigation reference, workflow examples, and TUI vs CLI comparison table
68
+
69
+ ## [0.1.1] - 2025-05-09
70
+
71
+ ### Changed
72
+
73
+ - Package name changed to `@emaxe/agento` for scoped npm publishing
74
+ - Fixed `bin` path format in `package.json` (removed `./` prefix for npm compliance)
75
+
76
+ ## [0.1.0] - 2025-05-09
77
+
78
+ ### Added
79
+
80
+ - Initial release of AgentO
81
+ - Support for 4 AI agent CLI tools:
82
+ - Claude Code
83
+ - OpenCode
84
+ - Qwen CLI
85
+ - Codex CLI
86
+ - **Profile Management**: Create profiles with single or multi-tier model configurations
87
+ - **Provider Management**: Configure API providers (OpenAI-compatible and Anthropic)
88
+ - **Interactive TUI**: Terminal User Interface built with Ink and React for easy navigation
89
+ - **CLI Commands**:
90
+ - `agento` — Launch interactive TUI
91
+ - `agento launch` — Launch agent with profile
92
+ - `agento provider` — CRUD operations for providers
93
+ - `agento profile` — CRUD operations for profiles
94
+ - `agento agent status` — Check agent config status
95
+ - `agento restore` — Restore agent config from backup
96
+ - **Config Scopes**: Global (`~/.agento/`) and project-level (`./.agento/`) configurations
97
+ - **Launch Modes**:
98
+ - Child mode (default): Temporarily patches config, restores on exit
99
+ - Independent mode: Persistent config changes
100
+ - **Backup System**: Automatic backups before any config modifications
101
+ - **Shell PATH Resolution**: Automatic PATH resolution through login shell
102
+ - **Multi-tier Profiles**: Support for `small`, `base`, and `smart` model tiers
103
+ - **Environment Variable Injection**: For agents requiring API keys via env vars (Codex)
104
+
105
+ ### Technical
106
+
107
+ - TypeScript 5.5 + Node.js ≥18
108
+ - ES Modules
109
+ - Vitest for testing
110
+ - Zod for schema validation
111
+ - smol-toml for TOML config support
112
+ - Commander for CLI framework
113
+ - Ink + React for TUI
114
+
115
+ ### Fixed
116
+
117
+ - Qwen CLI adapter now correctly uses `"openai"` as the modelProviders key for all OpenAI-compatible providers (previously used provider name)