@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.
- package/AGENTS.md +341 -0
- package/CHANGELOG.md +117 -0
- package/README.md +168 -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 +20 -2
- package/dist/src/adapters/claude-code.js.map +1 -1
- package/dist/src/adapters/codex.d.ts +1 -1
- package/dist/src/adapters/codex.d.ts.map +1 -1
- package/dist/src/adapters/codex.js +6 -2
- 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 +50 -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 +12 -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 +177 -29
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +18 -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 +39 -20
- package/dist/src/tui/screens/Providers.js.map +1 -1
- package/package.json +4 -2
package/README.ru.md
ADDED
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
# AgentO — Менеджер конфигураций AI-агентов
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@emaxe/agento)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
> Управляйте конфигурациями AI-агентов с помощью профилей и провайдеров. Переключайтесь между моделями, провайдерами и агентами без лишних усилий.
|
|
7
|
+
|
|
8
|
+
AgentO — это CLI-инструмент для централизованного управления конфигурациями популярных AI-агентов для программирования. Задайте API-провайдеры один раз, создайте профили с разными комбинациями моделей и переключайтесь между ними одной командой.
|
|
9
|
+
|
|
10
|
+
**English version:** [README.md](README.md)
|
|
11
|
+
|
|
12
|
+
## Поддерживаемые агенты
|
|
13
|
+
|
|
14
|
+
| Агент | Команда | Формат конфига | Поддерживаемые провайдеры | Особенности |
|
|
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`). |
|
|
20
|
+
|
|
21
|
+
## Поддерживаемые типы провайдеров
|
|
22
|
+
|
|
23
|
+
| Тип провайдера | Совместимые агенты | Примеры |
|
|
24
|
+
|---|---|---|
|
|
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) |
|
|
28
|
+
|
|
29
|
+
**Примечание:** `claude-code` работает только с типами `anthropic` и `fireworks` (требование Anthropic SDK). Для других OpenAI-совместимых провайдеров используйте `opencode` или `qwen`.
|
|
30
|
+
|
|
31
|
+
## Флаги возможностей моделей
|
|
32
|
+
|
|
33
|
+
Каждая модель внутри провайдера хранит три флага возможностей:
|
|
34
|
+
|
|
35
|
+
- **`image`** — модель принимает изображения на вход
|
|
36
|
+
- **`video`** — модель принимает видео на вход
|
|
37
|
+
- **`audio`** — модель принимает аудио на вход
|
|
38
|
+
|
|
39
|
+
Значения по умолчанию при добавлении: `image=true`, `video=false`, `audio=false`.
|
|
40
|
+
|
|
41
|
+
**Формат маркера:** в TUI и `agento provider list` возможности отображаются как `[iva]` (всё включено), `[i--]` (только image), `[---]` (только текст) и т. п. Маркер информационный — он **никогда** не записывается в конфиг агента.
|
|
42
|
+
|
|
43
|
+
**Зачем это нужно:**
|
|
44
|
+
- **Qwen** получает `generationConfig.modalities` из этих флагов (раньше всё было захардкожено в `false` — изображения не работали).
|
|
45
|
+
- **OpenCode** генерирует на каждую модель `modalities: { input: ["text", "image", ...], output: ["text"] }`, чтобы агент знал, что модель принимает.
|
|
46
|
+
- **Claude Code** и **Codex** пока эти флаги игнорируют (Anthropic SDK и Codex `responses` API не имеют поля для модальностей).
|
|
47
|
+
|
|
48
|
+
**Переключение возможностей:** TUI → Провайдеры → Edit, наведите курсор на модель и нажимайте `i` / `v` / `a`, чтобы переключать флаги. Новые модели добавляются строкой `[+ add model]` (Enter). CLI `provider add -M ...` создаёт модели с дефолтными значениями.
|
|
49
|
+
|
|
50
|
+
> Конфиги, созданные старыми версиями (с `string[]` моделями), мигрируются автоматически при чтении с дефолтными значениями возможностей.
|
|
51
|
+
|
|
52
|
+
## Установка
|
|
53
|
+
|
|
54
|
+
### Глобальная установка (рекомендуется)
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
npm install -g @emaxe/agento
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Локальная установка
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npm install --save-dev @emaxe/agento
|
|
64
|
+
npx @emaxe/agento
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Требования
|
|
68
|
+
|
|
69
|
+
- Node.js ≥ 18
|
|
70
|
+
- Один или несколько установленных CLI-инструментов поддерживаемых агентов
|
|
71
|
+
|
|
72
|
+
## Быстрый старт
|
|
73
|
+
|
|
74
|
+
### 1. Добавьте API-провайдер
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
# OpenAI-совместимый провайдер (например, Fireworks AI)
|
|
78
|
+
agento provider add \
|
|
79
|
+
-n "Fireworks AI" \
|
|
80
|
+
-t openai-compatible \
|
|
81
|
+
-k "sk-your-api-key" \
|
|
82
|
+
-u "https://api.fireworks.ai/inference/v1" \
|
|
83
|
+
-M "accounts/fireworks/models/llama-v3p1-70b-instruct,accounts/fireworks/models/kimi-k2p6"
|
|
84
|
+
|
|
85
|
+
# Провайдер Anthropic
|
|
86
|
+
agento provider add \
|
|
87
|
+
-n "Anthropic" \
|
|
88
|
+
-t anthropic \
|
|
89
|
+
-k "sk-ant-your-key" \
|
|
90
|
+
-M "claude-sonnet-4-20250514,claude-3-5-haiku-20241022"
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 2. Создайте профиль
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Профиль с одной моделью
|
|
97
|
+
agento profile add -n "default" -m "provider-id:claude-sonnet-4-20250514"
|
|
98
|
+
|
|
99
|
+
# Многоуровневый профиль (требуются уровни: small/base/smart)
|
|
100
|
+
agento profile add -n "multi" -m "provider-id:claude-3-5-haiku-20241022:small,provider-id:claude-sonnet-4-20250514:base,provider-id:claude-opus-4-20250514:smart"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 3. Запустите агента
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# Интерактивный TUI-режим (по умолчанию)
|
|
107
|
+
agento
|
|
108
|
+
|
|
109
|
+
# Прямой запуск
|
|
110
|
+
agento launch -p default -a claude-code
|
|
111
|
+
|
|
112
|
+
# Запуск с указанием режима и области видимости
|
|
113
|
+
agento launch -p default -a qwen -m child -s project
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Интерактивный TUI
|
|
117
|
+
|
|
118
|
+
Запуск `agento` без аргументов открывает интерактивный терминальный интерфейс (TUI), построенный на [Ink](https://github.com/vadimdemedes/ink) и React.
|
|
119
|
+
|
|
120
|
+
### Главное меню
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
┌────────── AgentO v0.2.0 ──────────┐
|
|
124
|
+
│ │
|
|
125
|
+
│ ▶ Запустить агента │
|
|
126
|
+
│ Провайдеры │
|
|
127
|
+
│ Профили │
|
|
128
|
+
│ Агенты │
|
|
129
|
+
│ Настройки │
|
|
130
|
+
│ │
|
|
131
|
+
└───────────────────────────────────┘
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
**Навигация:** **↑↓** перемещение, **Enter** выбор, **Esc / q** выход.
|
|
135
|
+
|
|
136
|
+
### Обзор экранов
|
|
137
|
+
|
|
138
|
+
| Экран | Возможности | Горячие клавиши |
|
|
139
|
+
|-------|-------------|-----------------|
|
|
140
|
+
| **Запуск агента** | Выбор профиля → агента → режима/области → запуск | **Enter** выбор, **Esc** назад |
|
|
141
|
+
| **Провайдеры** | Просмотр, добавление, редактирование, удаление провайдеров; переключение возможностей моделей | **Enter** детали / добавить модель, **a** добавить провайдер, **e** редактировать, **d** удалить, **i/v/a** переключить флаг, **Esc** назад |
|
|
142
|
+
| **Профили** | Просмотр, добавление, удаление профилей. В деталях: добавление/удаление/редактирование моделей | **Enter** детали, **a** добавить, **d** удалить, **Esc** назад |
|
|
143
|
+
| **Агенты** | Проверка статуса конфигов (global/project), наличие бэкапов | **Enter** детали, **Esc** назад |
|
|
144
|
+
| **Настройки** | Изменение режима запуска, области конфига, режима independent | **↑↓** изменение, **Enter** переключение, **Esc** сохранить и назад |
|
|
145
|
+
|
|
146
|
+
### Сценарий запуска агента
|
|
147
|
+
|
|
148
|
+
1. **Выбор профиля** — выберите один из сохранённых профилей
|
|
149
|
+
2. **Выбор агента** — выберите агента для запуска (claude-code, opencode, qwen или codex с `--dev`)
|
|
150
|
+
3. **Опционально:** настройте **Режим** (child/independent) и **Область** (global/project)
|
|
151
|
+
4. **Запуск** — AgentO заменяет конфиг агента и запускает его
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
Profile: default
|
|
155
|
+
├─ Agent: claude-code
|
|
156
|
+
├─ Mode: child
|
|
157
|
+
├─ Scope: global
|
|
158
|
+
└─ [ Запуск ]
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
В **режиме child** после выхода агента вы вернётесь в AgentO, а оригинальный конфиг будет автоматически восстановлен.
|
|
162
|
+
|
|
163
|
+
В **режиме independent** AgentO завершается сразу, а изменённый конфиг остаётся на месте.
|
|
164
|
+
|
|
165
|
+
### Экран провайдеров
|
|
166
|
+
|
|
167
|
+
Управляйте API-провайдерами без необходимости запоминать CLI-флаги:
|
|
168
|
+
|
|
169
|
+
- **Просмотр** всех провайдеров с типом, моделями, маркерами возможностей и base URL
|
|
170
|
+
- **Добавление** нового провайдера с подсказками (имя, тип, API-ключ, модели, base URL)
|
|
171
|
+
- **Редактирование** существующих провайдеров — включая флаги возможностей моделей (`i`/`v`/`a`)
|
|
172
|
+
- **Удаление** ненужных провайдеров
|
|
173
|
+
|
|
174
|
+
В режиме редактирования модели отображаются как `▶ [i--] model-name`. Когда выделена модель, нажимайте `i` / `v` / `a`, чтобы переключать image / video / audio. Используйте строку `[+ add model]` (Enter) для добавления моделей, `d` — удалить, `e` — переименовать.
|
|
175
|
+
|
|
176
|
+
### Экран профилей
|
|
177
|
+
|
|
178
|
+
Организуйте конфигурации моделей:
|
|
179
|
+
|
|
180
|
+
- **Просмотр** всех профилей с моделями и уровнями
|
|
181
|
+
- **Добавление** профилей с одной или несколькими моделями
|
|
182
|
+
- **В деталях профиля:** добавление/удаление/редактирование отдельных моделей
|
|
183
|
+
|
|
184
|
+
### Экран агентов
|
|
185
|
+
|
|
186
|
+
Следите за статусом конфигураций агентов:
|
|
187
|
+
|
|
188
|
+
- Увидеть, есть ли у каждого агента **глобальный** или **проектный** конфиг
|
|
189
|
+
- Проверить, есть ли **бэкапы** (признак того, что AgentO ранее изменял конфиг)
|
|
190
|
+
- Посмотреть пути к конфигам для каждого агента
|
|
191
|
+
|
|
192
|
+
### Экран настроек
|
|
193
|
+
|
|
194
|
+
Настройте поведение AgentO по умолчанию:
|
|
195
|
+
|
|
196
|
+
| Настройка | Варианты | Описание |
|
|
197
|
+
|-----------|----------|----------|
|
|
198
|
+
| **Режим запуска по умолчанию** | `child` / `independent` | Как запускать агентов по умолчанию |
|
|
199
|
+
| **Область конфига по умолчанию** | `global` / `project` | Куда записывать конфиги агентов |
|
|
200
|
+
| **Режим independent** | `spawn-detached` / `pty` | Как запускать агентов в режиме independent |
|
|
201
|
+
|
|
202
|
+
**Управление:** **↑↓** навигация, **Enter** или **Space** переключение значений, **Esc** сохранить и вернуться.
|
|
203
|
+
|
|
204
|
+
### TUI vs CLI
|
|
205
|
+
|
|
206
|
+
| Задача | TUI | CLI |
|
|
207
|
+
|--------|-----|-----|
|
|
208
|
+
| Визуальный просмотр провайдеров | ✅ | — |
|
|
209
|
+
| Быстрый разовый запуск | — | `agento launch -p <p> -a <a>` |
|
|
210
|
+
| Автоматизация скриптами | — | ✅ |
|
|
211
|
+
| Проверка статуса конфига | ✅ | `agento agent status` |
|
|
212
|
+
| Пошаговое создание провайдера/профиля | ✅ | Ручная сборка флагов |
|
|
213
|
+
|
|
214
|
+
Используйте **TUI** для изучения и интерактивных сценариев. Используйте **CLI** для скриптов, алиасов и быстрых запусков.
|
|
215
|
+
|
|
216
|
+
## Справочник по CLI
|
|
217
|
+
|
|
218
|
+
### `agento` — Главная команда
|
|
219
|
+
|
|
220
|
+
По умолчанию запускает интерактивный TUI.
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
agento # Запуск интерактивного TUI
|
|
224
|
+
agento --dev # Показать development-агентов (например, codex) в TUI
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### `agento launch` — Запуск агента
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
agento launch -p <profile> -a <agent> [options]
|
|
231
|
+
|
|
232
|
+
Опции:
|
|
233
|
+
-p, --profile <name> Имя профиля (обязательно)
|
|
234
|
+
-a, --agent <id> Агент: claude-code, opencode, qwen, codex (обязательно)
|
|
235
|
+
-m, --mode <mode> Режим запуска: child или independent (по умолчанию из настроек)
|
|
236
|
+
-s, --scope <scope> Область конфига: global или project (по умолчанию из настроек)
|
|
237
|
+
-d, --dev Показать development-агентов (например, codex)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
**Режимы запуска:**
|
|
241
|
+
|
|
242
|
+
- **Child** (по умолчанию): Временно заменяет конфиг агента, запускает его, восстанавливает оригинальный конфиг при выходе
|
|
243
|
+
- **Independent**: Постоянно заменяет конфиг; восстановление вручную
|
|
244
|
+
|
|
245
|
+
**Области конфига:**
|
|
246
|
+
|
|
247
|
+
- **Global**: `~/.<agent>/settings.*`
|
|
248
|
+
- **Project**: `./.<agent>/settings.*` или `./<agent>.*`
|
|
249
|
+
|
|
250
|
+
### `agento provider` — Управление провайдерами
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
agento provider list # Список всех провайдеров (с маркерами возможностей)
|
|
254
|
+
agento provider add [options] # Добавить провайдер
|
|
255
|
+
-n, --name <name> Отображаемое имя (обязательно)
|
|
256
|
+
-t, --type <type> Тип: anthropic, openai-compatible или fireworks (обязательно)
|
|
257
|
+
-k, --api-key <key> API-ключ (обязательно)
|
|
258
|
+
-u, --base-url <url> Base URL (обязателен для openai-compatible, опциональный для других)
|
|
259
|
+
-M, --models <models> Список моделей через запятую (обязательно). Возможности по умолчанию:
|
|
260
|
+
image=true, video=false, audio=false. Меняйте в TUI клавишами i/v/a.
|
|
261
|
+
agento provider remove <name> # Удалить провайдер
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Дефолты Base URL:**
|
|
265
|
+
- `anthropic`: использует стандартный endpoint Anthropic
|
|
266
|
+
- `fireworks`: автоматически `https://api.fireworks.ai/inference`, если не указан
|
|
267
|
+
- `openai-compatible`: должен быть указан явно через `-u`
|
|
268
|
+
|
|
269
|
+
### `agento profile` — Управление профилями
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
agento profile list # Список всех профилей
|
|
273
|
+
agento profile add [options] # Добавить профиль
|
|
274
|
+
-n, --name <name> Имя профиля (обязательно)
|
|
275
|
+
-m, --models <models> Список providerId:modelName[:tier] через запятую (обязательно)
|
|
276
|
+
Tier опционален для одномодельных профилей.
|
|
277
|
+
Для многоуровневых: tier должен быть small|base|smart, минимум один base.
|
|
278
|
+
agento profile remove <name> # Удалить профиль
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### `agento agent` — Статус агентов
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
agento agent status # Статус конфигов всех агентов
|
|
285
|
+
agento agent status --dev # Включая development-агентов (например, codex)
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### `agento restore` — Восстановление конфига
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
agento restore -a <agent> -s <scope> # Восстановить конфиг агента из бэкапа
|
|
292
|
+
|
|
293
|
+
Опции:
|
|
294
|
+
-a, --agent <id> ID агента (обязательно)
|
|
295
|
+
-s, --scope <scope> Область конфига: global или project (обязательно)
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Конфигурация
|
|
299
|
+
|
|
300
|
+
AgentO хранит свою конфигурацию в `~/.agento/config.json`:
|
|
301
|
+
|
|
302
|
+
```json
|
|
303
|
+
{
|
|
304
|
+
"providers": [
|
|
305
|
+
{
|
|
306
|
+
"id": "uuid",
|
|
307
|
+
"name": "Fireworks AI",
|
|
308
|
+
"type": "fireworks",
|
|
309
|
+
"apiKey": "fw-...",
|
|
310
|
+
"models": [
|
|
311
|
+
{ "name": "accounts/fireworks/models/llama-v3p1-70b-instruct", "capabilities": { "image": false, "video": false, "audio": false } },
|
|
312
|
+
{ "name": "accounts/fireworks/models/kimi-k2", "capabilities": { "image": true, "video": false, "audio": false } }
|
|
313
|
+
]
|
|
314
|
+
}
|
|
315
|
+
],
|
|
316
|
+
"profiles": [
|
|
317
|
+
{
|
|
318
|
+
"id": "uuid",
|
|
319
|
+
"name": "default",
|
|
320
|
+
"models": [
|
|
321
|
+
{
|
|
322
|
+
"providerId": "uuid",
|
|
323
|
+
"model": "accounts/fireworks/models/llama-v3p1-70b-instruct",
|
|
324
|
+
"tier": "base"
|
|
325
|
+
}
|
|
326
|
+
]
|
|
327
|
+
}
|
|
328
|
+
],
|
|
329
|
+
"settings": {
|
|
330
|
+
"defaultLaunchMode": "child",
|
|
331
|
+
"defaultConfigScope": "global",
|
|
332
|
+
"independentMode": "pty"
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
> Конфиги, созданные AgentO < 0.2.0, имеют `models` как массив строк. Они мигрируются автоматически при чтении; возможности по умолчанию `{ image: true, video: false, audio: false }`, меняются в TUI.
|
|
338
|
+
|
|
339
|
+
## Как это работает
|
|
340
|
+
|
|
341
|
+
### Адаптеры агентов
|
|
342
|
+
|
|
343
|
+
Каждый поддерживаемый агент имеет адаптер, который переводит универсальный формат AgentO в специфичный конфиг агента:
|
|
344
|
+
|
|
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 не имеет поля для модальностей).
|
|
349
|
+
|
|
350
|
+
### Бэкап и восстановление
|
|
351
|
+
|
|
352
|
+
Перед изменением любого конфига агента AgentO создаёт бэкап в `~/.agento/backups/<agent>/<scope>.bak.*`.
|
|
353
|
+
|
|
354
|
+
В **режиме Child** оригинальный конфиг автоматически восстанавливается при выходе агента или получении SIGTERM/SIGINT.
|
|
355
|
+
|
|
356
|
+
В **режиме Independent** конфиг остаётся изменённым. Восстановите вручную через `agento restore`.
|
|
357
|
+
|
|
358
|
+
## Разработка
|
|
359
|
+
|
|
360
|
+
### Настройка
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
git clone https://github.com/emaxe/agentO.git
|
|
364
|
+
cd agentO
|
|
365
|
+
npm install
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Скрипты
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
npm run build # Компиляция TypeScript в dist/
|
|
372
|
+
npm run dev # Режим наблюдения
|
|
373
|
+
npm test # Запуск всех тестов
|
|
374
|
+
npm run test:watch # Режим наблюдения для тестов
|
|
375
|
+
npm run typecheck # Проверка типов TypeScript
|
|
376
|
+
npm run lint # ESLint
|
|
377
|
+
npm run format # Prettier
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### Архитектура
|
|
381
|
+
|
|
382
|
+
```
|
|
383
|
+
src/
|
|
384
|
+
├── adapters/ # Адаптеры конфигов для конкретных агентов
|
|
385
|
+
├── cli/commands/ # Реализация CLI-команд
|
|
386
|
+
├── config/ # Схема и хранилище конфига
|
|
387
|
+
├── launcher/ # Логика запуска агентов
|
|
388
|
+
├── profiles/ # Управление профилями
|
|
389
|
+
├── providers/ # Управление провайдерами
|
|
390
|
+
└── tui/ # Терминальный UI (Ink + React)
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
## Устранение неполадок
|
|
394
|
+
|
|
395
|
+
### Изменения в `src/` не применяются
|
|
396
|
+
|
|
397
|
+
Глобальная команда AgentO использует скомпилированный код из `dist/`, а не `src/`. После любых изменений исходников:
|
|
398
|
+
|
|
399
|
+
```bash
|
|
400
|
+
npm run build
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### Тесты проходят, но глобальная команда ведёт себя иначе
|
|
404
|
+
|
|
405
|
+
Папка `dist/` устарела. Пересоберите:
|
|
406
|
+
|
|
407
|
+
```bash
|
|
408
|
+
npm run build
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
### В конфиге Qwen CLI отображается "omni" вместо "openai"
|
|
412
|
+
|
|
413
|
+
Это был баг в версиях < 0.1.1. Обновитесь до последней версии или пересоберите.
|
|
414
|
+
|
|
415
|
+
## Участие в проекте
|
|
416
|
+
|
|
417
|
+
Вклад приветствуется! Пожалуйста:
|
|
418
|
+
|
|
419
|
+
1. Форкните репозиторий
|
|
420
|
+
2. Создайте ветку с фичей
|
|
421
|
+
3. Напишите тесты для новой функциональности
|
|
422
|
+
4. Убедитесь, что все тесты проходят (`npm test`)
|
|
423
|
+
5. Отправьте pull request
|
|
424
|
+
|
|
425
|
+
## Лицензия
|
|
426
|
+
|
|
427
|
+
[MIT](LICENSE) © AgentO Contributors
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Profile, Provider } from '../config/schema.js';
|
|
1
|
+
import type { Profile, Provider, ProviderType } from '../config/schema.js';
|
|
2
2
|
import type { LaunchScope } from '../config/schema.js';
|
|
3
3
|
/** Режим области действия конфига агента */
|
|
4
4
|
export type { LaunchScope };
|
|
@@ -17,6 +17,8 @@ export interface AgentAdapter {
|
|
|
17
17
|
readonly displayName: string;
|
|
18
18
|
/** Флаг разработки: скрыт из UI/CLI по умолчанию */
|
|
19
19
|
readonly dev?: boolean;
|
|
20
|
+
/** Поддерживаемые типы провайдеров */
|
|
21
|
+
readonly supportedProviderTypes: readonly ProviderType[];
|
|
20
22
|
/** Возвращает пути к конфигам агента (global и project) */
|
|
21
23
|
configPaths(cwd?: string): AgentConfigPaths;
|
|
22
24
|
/** Читает текущий конфиг агента для указанного scope */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/adapters/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/adapters/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,4CAA4C;AAC5C,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,4DAA4D;AAC5D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAElD,8CAA8C;AAC9C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,8BAA8B;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,oDAAoD;IACpD,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAEvB,sCAAsC;IACtC,QAAQ,CAAC,sBAAsB,EAAE,SAAS,YAAY,EAAE,CAAC;IAEzD,2DAA2D;IAC3D,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAE5C,wDAAwD;IACxD,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE1E;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;IAElE,oDAAoD;IACpD,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElF;;;OAGG;IACH,QAAQ,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5E;AAED,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC"}
|
|
@@ -4,6 +4,7 @@ import type { Profile, Provider } from '../config/schema.js';
|
|
|
4
4
|
export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
5
5
|
readonly id = "claude-code";
|
|
6
6
|
readonly displayName = "Claude Code";
|
|
7
|
+
readonly supportedProviderTypes: readonly ["anthropic", "fireworks", "openrouter"];
|
|
7
8
|
configPaths(cwd?: string): AgentConfigPaths;
|
|
8
9
|
readConfig(scope: LaunchScope, cwd?: string): Promise<AgentConfig | null>;
|
|
9
10
|
buildConfig(profile: Profile, providers: Provider[]): AgentConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code.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,EAAa,OAAO,EAAgB,QAAQ,
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/claude-code.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,EAAa,OAAO,EAAgB,QAAQ,EAAgB,MAAM,qBAAqB,CAAC;AAmBpG,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,EAAE,iBAAiB;IAC5B,QAAQ,CAAC,WAAW,iBAAiB;IACrC,QAAQ,CAAC,sBAAsB,oDAAqD;IAEpF,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;IA0D3D,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMxF;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -2,6 +2,10 @@ import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
+
const DEFAULT_ANTHROPIC_BASE_URLS = {
|
|
6
|
+
fireworks: 'https://api.fireworks.ai/inference',
|
|
7
|
+
openrouter: 'https://openrouter.ai/api',
|
|
8
|
+
};
|
|
5
9
|
function escapeForSingleQuoted(value) {
|
|
6
10
|
return value.replace(/'/g, "'\\''");
|
|
7
11
|
}
|
|
@@ -11,6 +15,7 @@ function pickByTier(models, tier, fallback) {
|
|
|
11
15
|
export class ClaudeCodeAdapter {
|
|
12
16
|
id = 'claude-code';
|
|
13
17
|
displayName = 'Claude Code';
|
|
18
|
+
supportedProviderTypes = ['anthropic', 'fireworks', 'openrouter'];
|
|
14
19
|
configPaths(cwd) {
|
|
15
20
|
return {
|
|
16
21
|
global: join(homedir(), '.claude', 'settings.json'),
|
|
@@ -48,8 +53,21 @@ export class ClaudeCodeAdapter {
|
|
|
48
53
|
ANTHROPIC_DEFAULT_SONNET_MODEL: base.model,
|
|
49
54
|
ANTHROPIC_DEFAULT_OPUS_MODEL: smart.model,
|
|
50
55
|
};
|
|
51
|
-
|
|
52
|
-
|
|
56
|
+
const anthropicBase = baseProvider.baseUrl ?? DEFAULT_ANTHROPIC_BASE_URLS[baseProvider.type];
|
|
57
|
+
if (anthropicBase) {
|
|
58
|
+
env['ANTHROPIC_BASE_URL'] = anthropicBase;
|
|
59
|
+
}
|
|
60
|
+
// OpenRouter Anthropic Skin принимает Bearer-токен (ANTHROPIC_AUTH_TOKEN),
|
|
61
|
+
// а не x-api-key (apiKeyHelper). ANTHROPIC_API_KEY должен быть пустым,
|
|
62
|
+
// иначе Claude Code fallback'нется на нативный Anthropic endpoint.
|
|
63
|
+
if (baseProvider.type === 'openrouter') {
|
|
64
|
+
env['ANTHROPIC_AUTH_TOKEN'] = baseProvider.apiKey;
|
|
65
|
+
env['ANTHROPIC_API_KEY'] = '';
|
|
66
|
+
return {
|
|
67
|
+
$schema: 'https://json.schemastore.org/claude-code-settings.json',
|
|
68
|
+
env,
|
|
69
|
+
model: base.model,
|
|
70
|
+
};
|
|
53
71
|
}
|
|
54
72
|
const config = {
|
|
55
73
|
$schema: 'https://json.schemastore.org/claude-code-settings.json',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/claude-code.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,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,UAAU,CACjB,MAAsB,EACtB,IAAe,EACf,QAAsB;IAEtB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC;AACzD,CAAC;AAED,MAAM,OAAO,iBAAiB;IACnB,EAAE,GAAG,aAAa,CAAC;IACnB,WAAW,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { Profile, Provider } from '../config/schema.js';
|
|
|
4
4
|
export declare class CodexAdapter implements AgentAdapter {
|
|
5
5
|
readonly id = "codex";
|
|
6
6
|
readonly displayName = "Codex CLI";
|
|
7
|
-
readonly
|
|
7
|
+
readonly supportedProviderTypes: readonly ["fireworks", "openrouter"];
|
|
8
8
|
configPaths(cwd?: string): AgentConfigPaths;
|
|
9
9
|
readConfig(scope: LaunchScope, cwd?: string): Promise<AgentConfig | null>;
|
|
10
10
|
buildConfig(profile: Profile, providers: Provider[]): AgentConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex.ts"],"names":[],"mappings":"AAKA,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,
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex.ts"],"names":[],"mappings":"AAKA,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;AAoB3E,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,WAAW,eAAe;IACnC,QAAQ,CAAC,sBAAsB,uCAAwC;IAEvE,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;IA8BjE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAanE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAyFxF;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -3,6 +3,10 @@ import { existsSync } from 'node:fs';
|
|
|
3
3
|
import { homedir } from 'node:os';
|
|
4
4
|
import { join, dirname } from 'node:path';
|
|
5
5
|
import { parse as parseToml, stringify as stringifyToml } from 'smol-toml';
|
|
6
|
+
const DEFAULT_BASE_URLS = {
|
|
7
|
+
fireworks: 'https://api.fireworks.ai/inference/v1',
|
|
8
|
+
openrouter: 'https://openrouter.ai/api/v1',
|
|
9
|
+
};
|
|
6
10
|
/** Нормализует имя провайдера в ключ: "Fireworks AI" → "fireworks-ai" */
|
|
7
11
|
function deriveProviderKey(name) {
|
|
8
12
|
return name.toLowerCase().replace(/\s+/g, '-');
|
|
@@ -16,7 +20,7 @@ let codexGlobalBackup = null;
|
|
|
16
20
|
export class CodexAdapter {
|
|
17
21
|
id = 'codex';
|
|
18
22
|
displayName = 'Codex CLI';
|
|
19
|
-
|
|
23
|
+
supportedProviderTypes = ['fireworks', 'openrouter'];
|
|
20
24
|
configPaths(cwd) {
|
|
21
25
|
return {
|
|
22
26
|
global: join(homedir(), '.codex', 'config.toml'),
|
|
@@ -44,7 +48,7 @@ export class CodexAdapter {
|
|
|
44
48
|
model_providers: {
|
|
45
49
|
[providerKey]: {
|
|
46
50
|
name: provider.name,
|
|
47
|
-
base_url: provider.baseUrl ?? '',
|
|
51
|
+
base_url: provider.baseUrl ?? DEFAULT_BASE_URLS[provider.type] ?? '',
|
|
48
52
|
env_key: envKey,
|
|
49
53
|
wire_api: 'responses',
|
|
50
54
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/adapters/codex.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,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AAK3E,yEAAyE;AACzE,SAAS,iBAAiB,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED,iGAAiG;AACjG,SAAS,YAAY,CAAC,WAAmB;IACvC,OAAO,SAAS,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC;AACzE,CAAC;AAED,kEAAkE;AAClE,IAAI,iBAAiB,GAAuD,IAAI,CAAC;AAEjF,MAAM,OAAO,YAAY;IACd,EAAE,GAAG,OAAO,CAAC;IACb,WAAW,GAAG,WAAW,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import type { Profile, Provider } from '../config/schema.js';
|
|
|
4
4
|
export declare class OpenCodeAdapter implements AgentAdapter {
|
|
5
5
|
readonly id = "opencode";
|
|
6
6
|
readonly displayName = "OpenCode";
|
|
7
|
+
readonly supportedProviderTypes: readonly ["anthropic", "openai-compatible", "fireworks", "openrouter"];
|
|
7
8
|
configPaths(cwd?: string): AgentConfigPaths;
|
|
8
9
|
readConfig(scope: LaunchScope, cwd?: string): Promise<AgentConfig | null>;
|
|
9
10
|
buildConfig(profile: Profile, providers: Provider[]): AgentConfig;
|
|
@@ -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,
|
|
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"}
|