@emaxe/agento 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +340 -0
- package/CHANGELOG.md +102 -0
- package/README.md +231 -31
- package/README.ru.md +427 -0
- package/dist/src/adapters/base.d.ts +3 -1
- package/dist/src/adapters/base.d.ts.map +1 -1
- package/dist/src/adapters/claude-code.d.ts +1 -0
- package/dist/src/adapters/claude-code.d.ts.map +1 -1
- package/dist/src/adapters/claude-code.js +5 -2
- package/dist/src/adapters/claude-code.js.map +1 -1
- package/dist/src/adapters/codex.d.ts +1 -0
- package/dist/src/adapters/codex.d.ts.map +1 -1
- package/dist/src/adapters/codex.js +3 -1
- package/dist/src/adapters/codex.js.map +1 -1
- package/dist/src/adapters/opencode.d.ts +1 -0
- package/dist/src/adapters/opencode.d.ts.map +1 -1
- package/dist/src/adapters/opencode.js +30 -1
- package/dist/src/adapters/opencode.js.map +1 -1
- package/dist/src/adapters/qwen.d.ts +1 -0
- package/dist/src/adapters/qwen.d.ts.map +1 -1
- package/dist/src/adapters/qwen.js +9 -4
- package/dist/src/adapters/qwen.js.map +1 -1
- package/dist/src/cli/commands/launch.d.ts.map +1 -1
- package/dist/src/cli/commands/launch.js +13 -0
- package/dist/src/cli/commands/launch.js.map +1 -1
- package/dist/src/cli/commands/provider.d.ts.map +1 -1
- package/dist/src/cli/commands/provider.js +7 -3
- package/dist/src/cli/commands/provider.js.map +1 -1
- package/dist/src/config/schema.d.ts +176 -29
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +17 -2
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/store.d.ts.map +1 -1
- package/dist/src/config/store.js +25 -1
- package/dist/src/config/store.js.map +1 -1
- package/dist/src/tui/screens/LaunchAgent.d.ts.map +1 -1
- package/dist/src/tui/screens/LaunchAgent.js +21 -4
- package/dist/src/tui/screens/LaunchAgent.js.map +1 -1
- package/dist/src/tui/screens/MainMenu.js +1 -1
- package/dist/src/tui/screens/Profiles.d.ts.map +1 -1
- package/dist/src/tui/screens/Profiles.js +5 -4
- package/dist/src/tui/screens/Profiles.js.map +1 -1
- package/dist/src/tui/screens/Providers.d.ts.map +1 -1
- package/dist/src/tui/screens/Providers.js +40 -20
- package/dist/src/tui/screens/Providers.js.map +1 -1
- package/package.json +4 -2
package/AGENTS.md
ADDED
|
@@ -0,0 +1,340 @@
|
|
|
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';
|
|
86
|
+
apiKey: string;
|
|
87
|
+
baseUrl?: string; // URL для openai-compatible (обязателен), опционален для остальных
|
|
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` | JSON (`~/.claude/settings.json`) | Игнорирует | Поддерживает tiers (small/base/smart). Только один провайдер на профиль. |
|
|
138
|
+
| OpenCode | `opencode` | `opencode` | `anthropic`, `openai-compatible`, `fireworks` | JSON (`~/.config/opencode/config.json` или `./opencode.json`) | Пробрасывает в `models[<name>].modalities` | Префикс модели: `providerKey/model`. |
|
|
139
|
+
| Qwen CLI | `qwen` | `qwen` | `openai-compatible`, `fireworks` | JSON (`~/.qwen/settings.json`) | Пробрасывает в `generationConfig.modalities` | **modelProviders ключ всегда `"openai"`** для openai-compatible провайдеров. Группирует модели по baseUrl. |
|
|
140
|
+
| Codex CLI | `codex` | `codex` | `fireworks` | 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 и OpenCode (проверяется в адаптерах)
|
|
340
|
+
- BaseUrl обязателен для openai-compatible провайдеров (кроме Claude Code, который использует официальный API по умолчанию)
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
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.2.0] - 2026-05-10
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
|
|
23
|
+
- **Model capability flags** (`image`, `video`, `audio`) — every model in a provider now carries modality metadata:
|
|
24
|
+
- New schema types `ModelCapabilities` and `ModelConfig`. Provider model entries are objects `{ name, capabilities }` instead of bare strings.
|
|
25
|
+
- Defaults: `image=true`, `video=false`, `audio=false`.
|
|
26
|
+
- Capability marker `[iva]` / `[i--]` rendered before model names in TUI and CLI listings (informational only — never written into agent configs).
|
|
27
|
+
- **TUI hotkeys for capabilities** in Providers → Edit:
|
|
28
|
+
- `i` / `v` / `a` toggle image / video / audio for the highlighted model
|
|
29
|
+
- `[+ add model]` row activated by `Enter` replaces the previous `a`-to-add hotkey (avoids collision with audio toggle)
|
|
30
|
+
- **Qwen adapter**: now passes real `generationConfig.modalities` based on per-model capabilities (previously hardcoded to `false`).
|
|
31
|
+
- **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`).
|
|
32
|
+
- **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.
|
|
33
|
+
- **Earlier additions carried over from Unreleased:**
|
|
34
|
+
- `--dev` flag across CLI and TUI for showing development agents (Codex CLI)
|
|
35
|
+
- Codex CLI adapter improvements: `wire_api: 'responses'`, `default_profile` / `profiles.default` blocks, project-scope split, `buildEnv` support
|
|
36
|
+
- TUI Profiles screen redesign: `a` add, `d` delete, `↑↓` navigate
|
|
37
|
+
- TUI Providers screen: `Enter` on trailing row opens add form
|
|
38
|
+
- Base adapter interface: optional `dev?: boolean` flag
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- `ProviderSchema.models` is now `z.array(ModelConfigSchema).min(1)` instead of `z.array(z.string()).min(1)`.
|
|
43
|
+
- CLI `provider list` and TUI Providers list display capability markers next to each model.
|
|
44
|
+
- `agento provider add -M ...` parses comma-separated model names into `ModelConfig[]` with default capabilities (toggle in TUI to change).
|
|
45
|
+
- Codex CLI is now marked as `dev: true` — hidden from TUI and CLI unless `--dev` is passed.
|
|
46
|
+
- Launch command now passes `args` (e.g. `['-p', 'default']` for Codex) to child/independent launchers.
|
|
47
|
+
|
|
48
|
+
## [0.1.2] - 2025-05-09
|
|
49
|
+
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- **Documentation**: Expanded README.md "Interactive TUI" section with detailed screen-by-screen guide, navigation reference, workflow examples, and TUI vs CLI comparison table
|
|
53
|
+
|
|
54
|
+
## [0.1.1] - 2025-05-09
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- Package name changed to `@emaxe/agento` for scoped npm publishing
|
|
59
|
+
- Fixed `bin` path format in `package.json` (removed `./` prefix for npm compliance)
|
|
60
|
+
|
|
61
|
+
## [0.1.0] - 2025-05-09
|
|
62
|
+
|
|
63
|
+
### Added
|
|
64
|
+
|
|
65
|
+
- Initial release of AgentO
|
|
66
|
+
- Support for 4 AI agent CLI tools:
|
|
67
|
+
- Claude Code
|
|
68
|
+
- OpenCode
|
|
69
|
+
- Qwen CLI
|
|
70
|
+
- Codex CLI
|
|
71
|
+
- **Profile Management**: Create profiles with single or multi-tier model configurations
|
|
72
|
+
- **Provider Management**: Configure API providers (OpenAI-compatible and Anthropic)
|
|
73
|
+
- **Interactive TUI**: Terminal User Interface built with Ink and React for easy navigation
|
|
74
|
+
- **CLI Commands**:
|
|
75
|
+
- `agento` — Launch interactive TUI
|
|
76
|
+
- `agento launch` — Launch agent with profile
|
|
77
|
+
- `agento provider` — CRUD operations for providers
|
|
78
|
+
- `agento profile` — CRUD operations for profiles
|
|
79
|
+
- `agento agent status` — Check agent config status
|
|
80
|
+
- `agento restore` — Restore agent config from backup
|
|
81
|
+
- **Config Scopes**: Global (`~/.agento/`) and project-level (`./.agento/`) configurations
|
|
82
|
+
- **Launch Modes**:
|
|
83
|
+
- Child mode (default): Temporarily patches config, restores on exit
|
|
84
|
+
- Independent mode: Persistent config changes
|
|
85
|
+
- **Backup System**: Automatic backups before any config modifications
|
|
86
|
+
- **Shell PATH Resolution**: Automatic PATH resolution through login shell
|
|
87
|
+
- **Multi-tier Profiles**: Support for `small`, `base`, and `smart` model tiers
|
|
88
|
+
- **Environment Variable Injection**: For agents requiring API keys via env vars (Codex)
|
|
89
|
+
|
|
90
|
+
### Technical
|
|
91
|
+
|
|
92
|
+
- TypeScript 5.5 + Node.js ≥18
|
|
93
|
+
- ES Modules
|
|
94
|
+
- Vitest for testing
|
|
95
|
+
- Zod for schema validation
|
|
96
|
+
- smol-toml for TOML config support
|
|
97
|
+
- Commander for CLI framework
|
|
98
|
+
- Ink + React for TUI
|
|
99
|
+
|
|
100
|
+
### Fixed
|
|
101
|
+
|
|
102
|
+
- Qwen CLI adapter now correctly uses `"openai"` as the modelProviders key for all OpenAI-compatible providers (previously used provider name)
|