cliskill 1.1.2 → 1.1.4

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/README.md CHANGED
@@ -1,239 +1,144 @@
1
1
  <div align="center">
2
2
 
3
- # 🚀 cliskill
3
+ # cliskill
4
4
 
5
- ### Universal Terminal AI CLI
5
+ **Universal Terminal AI CLI**
6
6
 
7
- **Независимый AI-ассистент для терминала с поддержкой любых LLM провайдеров**
7
+ Свободный AI-ассистент для терминала с поддержкой любых LLM провайдеров.
8
8
 
9
- [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
10
- [![Version](https://img.shields.io/badge/version-1.0.0-orange)]()
11
- [![Node](https://img.shields.io/badge/node-%3E%3D20.0.0-green)]()
12
-
13
- [Бесплатный](#) · [Без подписок](#) · [Без vendor lock-in](#) · [Универсальный](#)
9
+ [![npm](https://img.shields.io/npm/v/cliskill?color=blue&label=npm)](https://www.npmjs.com/package/cliskill)
10
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
11
+ [![Node](https://img.shields.io/badge/node-%E2%89%A520.0.0-green)]()
14
12
 
15
13
  </div>
16
14
 
17
15
  ---
18
16
 
19
- ## 📑 Содержание
20
-
21
- - [О проекте](#-о-проекте)
22
- - [Возможности](#-возможности)
23
- - [Быстрый старт](#-быстрый-старт)
24
- - [Использование](#-использование)
25
- - [Конфигурация](#-конфигурация)
26
- - [Инструменты](#-инструменты)
27
- - [MCP серверы](#-mcp-серверы)
28
- - [Агентская система](#-агентская-система)
29
- - [Архитектура](#-архитектура)
30
- - [API провайдеры](#-api-провайдеры)
31
- - [Разработка](#-разработка)
32
- - [Технологии](#-технологии)
33
- - [Лицензия](#-лицензия)
34
-
35
- ---
36
-
37
- ## 🧠 О проекте
38
-
39
- **cliskill** — это универсальный AI-ассистент для терминала, который работает с **любым** LLM провайдером через стандартный `/chat/completions` API. Никакой привязки к конкретному вендору: используйте локальные модели, облачные API или собственные серверы.
17
+ ## Что это
40
18
 
41
- ### Ключевые принципы
19
+ cliskill CLI-инструмент для работы с LLM прямо из терминала. Подключает любого провайдера через стандартный `/chat/completions` API, даёт 22 встроенных инструментов, мульти-агентную координацию и MCP-интеграцию. Без подписок, без vendor lock-in.
42
20
 
43
- | Принцип | Описание |
44
- |---------|----------|
45
- | 🆓 **Бесплатный** | Никаких подписок и ограничений по функциям |
46
- | 🔓 **Открытый** | Полный исходный код, MIT лицензия |
47
- | 🔌 **Универсальный** | Любой `/chat/completions` совместимый API |
48
- | 🚫 **Без vendor lock-in** | Легко переключайтесь между провайдерами |
49
- | 🤖 **Агентский** | 15 инструментов, мульти-агентная координация |
50
- | 🛡️ **Безопасный** | Настраиваемые уровни доверия и разрешения |
51
-
52
- ---
53
-
54
- ## ✨ Возможности
55
-
56
- ### 🔌 Провайдеры и модели
57
-
58
- - **Универсальная система провайдеров** — подключение любого `/chat/completions` API
59
- - **Алиасы моделей** — предустановленные алиасы: `smart`, `fast`, `balanced`, `reasoning`, `code`
60
- - **1M токенов контекста** — по умолчанию, настраиваемый лимит
61
- - **Автоматический fallback** — переключение на резервные модели при ошибках
62
- - **Rate Limit Handler** — корректная обработка лимитов без upsell
63
-
64
- ### 🏗️ Инфраструктура
65
-
66
- | Система | Описание |
67
- |---------|----------|
68
- | 🎨 **Theme System** | 6 тем оформления, включая daltonized для дальтоников |
69
- | ⏰ **Cron Scheduler** | Отложенные и повторяющиеся задачи по расписанию |
70
- | ⌨️ **Keybinding System** | 10 контекстов, 50+ хоткеев, полностью настраиваемые |
71
- | 🩺 **Doctor Diagnostic** | Автоматическая диагностика окружения |
72
- | 🪝 **Hooks System** | Pre/post hooks для кастомизации поведения |
73
- | 📡 **MCP Client** | Model Context Protocol для расширения возможностей |
74
- | 📚 **Skills System** | Markdown-навыки для расширения функциональности |
75
- | 🧠 **Memory** | Basic + Enhanced память с TF-IDF индексацией |
76
-
77
- ### 🛠️ Утилиты
78
-
79
- - 🎬 **Asciicast Recording** — запись сессий в формате asciicast v2
80
- - 🎨 **ANSI→SVG** — рендеринг терминального вывода в SVG
81
- - 🔄 **Conversation Recovery** — умное восстановление сессий с ремонтом
82
- - 🔗 **Deep Links** — протокол `cliskill://` для интеграции с ОС
83
- - 🧹 **Background Housekeeping** — автоматическая очистка и обслуживание
84
- - 🔀 **Tool Pool** — слияние и фильтрация наборов инструментов
85
- - 💰 **Cost Tracker** — отслеживание расходов на API
86
- - 📊 **Token Estimation** — оценка токенов перед отправкой
87
- - 📦 **Context Compaction** — автоматическое сжатие контекста
88
-
89
- ---
90
-
91
- ## 📦 Быстрый старт
92
-
93
- ### Установка из исходников
94
-
95
- ```bash
96
- # Клонирование репозитория
97
- git clone https://github.com/nic11/cliskill.git
98
- cd cliskill
99
-
100
- # Установка зависимостей
101
- npm install
102
-
103
- # Сборка проекта
104
- npm run build
105
-
106
- # Глобальная установка (опционально)
107
- npm link
108
- ```
109
-
110
- ### Установка из npm
21
+ ## Быстрый старт
111
22
 
112
23
  ```bash
113
24
  npm install -g cliskill
25
+ cliskill
114
26
  ```
115
27
 
116
- ### Требования
28
+ Первый запуск запустит интерактивный мастер настройки — выберете провайдера, API-ключ, модель.
117
29
 
118
- - **Node.js** >= 20.0.0
119
- - **npm** >= 9.0.0
30
+ Требования: Node.js >= 20.0.0
120
31
 
121
- ### Первый запуск
32
+ ### Из исходников
122
33
 
123
34
  ```bash
124
- # Интерактивный мастер настройки
125
- cliskill
126
-
127
- # Или с явным указанием провайдера
128
- cliskill --base-url https://api.example.com/v1 --api-key your-key
35
+ git clone https://github.com/nic11/cliskill.git
36
+ cd cliskill
37
+ npm install && npm run build
38
+ npm link
129
39
  ```
130
40
 
131
41
  ---
132
42
 
133
- ## 🚀 Использование
43
+ ## Использование
134
44
 
135
- ### Основные команды
45
+ ### CLI
136
46
 
137
47
  ```bash
138
- # 🎯 Интерактивный REPL
48
+ # Интерактивный REPL
139
49
  cliskill
140
50
 
141
- # 💬 Одноразовый запрос
51
+ # Одноразовый запрос
142
52
  cliskill --prompt "исправь тесты"
143
53
 
144
- # 🧠 Использовать алиас модели
54
+ # Алиасы моделей
145
55
  cliskill --model smart
146
56
  cliskill --model fast
147
- cliskill --model balanced
57
+ cliskill --model reasoning
148
58
 
149
- # 🤖 Auto mode
150
- cliskill --auto # safe-auto (по умолчанию)
59
+ # Auto mode
60
+ cliskill --auto # safe-auto
151
61
  cliskill --auto-mode full-auto # полная автономия
152
- cliskill --auto-mode safe-auto # безопасная автономия
153
- cliskill --auto-mode ask # с подтверждением
154
-
155
- # ⚡ Fast mode
156
- cliskill --fast
157
62
 
158
- # 🔄 Восстановление сессий
159
- cliskill --resume # последняя сессия
160
- cliskill --resume abc12345 # конкретная сессия
63
+ # Восстановление сессии
64
+ cliskill --resume
65
+ cliskill --resume abc12345
161
66
 
162
- # 🎬 Запись сессии
163
- cliskill --record
164
- cliskill --record --record-output ./my-session.cast
165
-
166
- # 🎨 Выбор темы
67
+ # Тема оформления
167
68
  cliskill --theme dark
168
- cliskill --theme light
169
- cliskill --theme dark-daltonized
170
- cliskill --theme light-daltonized
171
- cliskill --theme dark-ansi
172
- cliskill --theme light-ansi
173
- cliskill --theme auto
174
-
175
- # 🖥️ React TUI (Ink)
176
- cliskill --tui
177
-
178
- # 🔗 Удалённый сервер
179
- cliskill --remote user@host
180
69
 
181
- # 📊 Вербоузный режим
182
- cliskill --verbose
183
- ```
184
-
185
- ### Подкоманды
70
+ # React TUI
71
+ cliskill --tui
186
72
 
187
- ```bash
188
- # 🩺 Диагностика окружения
189
- cliskill doctor
190
-
191
- # 📋 Список сессий
192
- cliskill sessions
193
-
194
- # ⏰ Cron задачи
195
- cliskill cron list # список задач
196
- cliskill cron add "0 9 * * 1-5" "запустить тесты" # добавить задачу
197
- cliskill cron add "@daily" "отчёт" --one-shot # одноразовая задача
198
- cliskill cron remove <id> # удалить задачу
199
- cliskill cron run <id> # запустить вручную
200
-
201
- # 🔗 Deep Links
202
- cliskill register-protocol # зарегистрировать cliskill://
203
- cliskill unregister-protocol # отменить регистрацию
204
- cliskill open-uri "cliskill://prompt?text=hello" # обработать URI
73
+ # Запись сессии
74
+ cliskill --record
205
75
  ```
206
76
 
207
- ### Все опции CLI
77
+ ### Опции
208
78
 
209
79
  | Опция | Описание |
210
80
  |-------|----------|
211
- | `-m, --model <model>` | Модель или алиас (smart, fast, balanced) |
81
+ | `-m, --model <model>` | Модель или алиас |
212
82
  | `--base-url <url>` | URL API провайдера |
213
- | `--api-key <key>` | API ключ провайдера |
83
+ | `--api-key <key>` | API ключ |
214
84
  | `-p, --prompt <text>` | Одноразовый запрос |
215
- | `--config <path>` | Путь к файлу конфигурации |
216
- | `--tui` | React TUI (Ink) вместо базового REPL |
85
+ | `--tui` | React TUI вместо базового REPL |
217
86
  | `--verbose` | Подробное логирование |
218
87
  | `--auto` | Auto mode (safe-auto) |
219
- | `--auto-mode <level>` | Auto mode с уровнем (full-auto, safe-auto, ask) |
88
+ | `--auto-mode <level>` | full-auto / safe-auto / ask |
220
89
  | `--fast` | Быстрый режим |
221
- | `--max-context <tokens>` | Максимальное число токенов контекста |
222
- | `--remote <host>` | Подключение к удалённому серверу (SSH) |
90
+ | `--max-context <tokens>` | Лимит контекста |
223
91
  | `--theme <name>` | Цветовая тема |
224
- | `--record` | Запись сессии (asciicast v2) |
225
- | `--record-output <path>` | Путь к файлу записи |
226
92
  | `--resume [id]` | Восстановить сессию |
227
- | `-v, --version` | Версия |
228
- | `-h, --help` | Справка |
93
+ | `--record` | Запись в asciicast v2 |
94
+ | `--remote <host>` | SSH подключение |
95
+
96
+ ### Подкоманды
97
+
98
+ ```bash
99
+ cliskill doctor # Диагностика окружения
100
+ cliskill sessions # Список сессий
101
+ cliskill cron list # Cron задачи
102
+ cliskill cron add "0 9 * * 1-5" "запустить тесты"
103
+ ```
229
104
 
230
105
  ---
231
106
 
232
- ## ⚙️ Конфигурация
107
+ ## Провайдеры
233
108
 
234
- ### Файл конфигурации
109
+ Работает с любым API, совместимым с OpenAI `/chat/completions`, а также с Anthropic Messages API.
235
110
 
236
- Создайте `.cliskillrc.json` в домашней директории или в корне проекта:
111
+ | Провайдер | Base URL | Формат |
112
+ |-----------|----------|--------|
113
+ | OpenAI | `https://api.openai.com/v1` | `openai-compatible` |
114
+ | Anthropic Claude | `https://api.anthropic.com` | `anthropic-compatible` |
115
+ | GLM / Z.AI | `https://api.z.ai/api/coding/paas/v4` | `openai-compatible` |
116
+ | DeepSeek | `https://api.deepseek.com/v1` | `openai-compatible` |
117
+ | Ollama | `http://localhost:11434/v1` | `openai-compatible` |
118
+ | LM Studio | `http://localhost:1234/v1` | `openai-compatible` |
119
+ | Любой другой | `<your-endpoint>/v1` | `openai-compatible` |
120
+
121
+ ### Алиасы моделей
122
+
123
+ | Алиас | Описание |
124
+ |-------|----------|
125
+ | `smart` | Максимальное качество |
126
+ | `fast` | Быстрые ответы |
127
+ | `balanced` | Баланс качества и скорости |
128
+ | `reasoning` | Логические задачи |
129
+ | `code` | Код-специфичные задачи |
130
+
131
+ Настраиваются в `.cliskillrc.json` → `models.aliases`.
132
+
133
+ ### Fallback chain
134
+
135
+ При ошибках автоматически переключается на резервные модели. Настраивается через `fallbackModels` в конфигурации провайдера.
136
+
137
+ ---
138
+
139
+ ## Конфигурация
140
+
141
+ Файл `.cliskillrc.json` в домашней директории или в корне проекта:
237
142
 
238
143
  ```json
239
144
  {
@@ -249,27 +154,14 @@ cliskill open-uri "cliskill://prompt?text=hello" # обработать URI
249
154
  }
250
155
  ],
251
156
  "permissionMode": "ask",
252
- "verbose": false,
253
157
  "maxContextTokens": 1000000,
254
- "theme": {
255
- "name": "dark"
256
- },
257
- "autoMode": {
258
- "enabled": false,
259
- "trustLevel": "safe-auto"
260
- },
261
- "fastMode": {
262
- "enabled": false
263
- },
158
+ "theme": { "name": "dark" },
159
+ "autoMode": { "enabled": false, "trustLevel": "safe-auto" },
264
160
  "models": {
265
161
  "aliases": [
266
162
  { "alias": "smart", "model": "gpt-4o" },
267
- { "alias": "fast", "model": "gpt-4o-mini" },
268
- { "alias": "balanced", "model": "gpt-4o" },
269
- { "alias": "reasoning", "model": "o1" },
270
- { "alias": "code", "model": "gpt-4o" }
271
- ],
272
- "maxContextTokens": 1000000
163
+ { "alias": "fast", "model": "gpt-4o-mini" }
164
+ ]
273
165
  }
274
166
  }
275
167
  ```
@@ -277,90 +169,64 @@ cliskill open-uri "cliskill://prompt?text=hello" # обработать URI
277
169
  ### Переменные окружения
278
170
 
279
171
  ```bash
280
- export CLISKILL_API_KEY="your-api-key"
281
- export CLISKILL_BASE_URL="https://api.example.com/v1"
172
+ CLISKILL_API_KEY="your-api-key"
173
+ CLISKILL_BASE_URL="https://api.example.com/v1"
174
+ ANTHROPIC_API_KEY="your-anthropic-key"
175
+ ANTHROPIC_BASE_URL="https://api.anthropic.com"
282
176
  ```
283
177
 
284
- ### Форматы провайдеров
285
-
286
- | Формат | Описание |
287
- |--------|----------|
288
- | `openai-compatible` | Любой `/v1/chat/completions` endpoint |
289
- | `messages-compatible` | Messages API формат (compat adapter) |
290
- | `custom` | Кастомный адаптер (программная регистрация) |
291
-
292
178
  ### Режимы разрешений
293
179
 
294
- | Режим | Описание |
295
- |-------|----------|
296
- | `ask` | Подтверждение каждой операции (по умолчанию) |
297
- | `auto-accept` | Разрешить все операции без подтверждения |
180
+ | Режим | Поведение |
181
+ |-------|-----------|
182
+ | `ask` | Подтверждение каждой операции |
183
+ | `auto-accept` | Всё без подтверждения |
298
184
  | `plan` | Только операции чтения |
299
185
 
300
- ### Навыки (Skills)
301
-
302
- Создавайте файлы навыков в директории `.cliskill/skills/`:
303
-
304
- ```markdown
305
- ---
306
- name: my-skill
307
- description: Описание навыка
308
186
  ---
309
187
 
310
- # Инструкции для навыка
188
+ ## Инструменты
189
+
190
+ 15 встроенных инструментов:
191
+
192
+ | Инструмент | Описание |
193
+ |------------|----------|
194
+ | **Bash** | Выполнение shell команд с инспекцией безопасности |
195
+ | **File Read** | Чтение файлов с поддержкой изображений |
196
+ | **File Write** | Создание и перезапись файлов |
197
+ | **File Edit** | Точечное редактирование (search/replace) |
198
+ | **Glob** | Поиск файлов по паттернам |
199
+ | **Grep** | Поиск текста с regex |
200
+ | **Web Search** | Веб-поиск |
201
+ | **Web Fetch** | Загрузка и парсинг веб-страниц |
202
+ | **Agent** | Порождение суб-агентов |
203
+ | **LSP** | Language Server Protocol интеграция |
204
+ | **Todo Write** | Управление списками задач |
205
+ | **Computer Use** | Управление мышью и клавиатурой |
206
+ | **Remote** | SSH команды на удалённых серверах |
207
+ | **Worktree** | Git worktree для параллельной работы |
208
+ | **Plan Mode** | Планирование с параллельными агентами |
209
+
210
+ Дополнительно: **Tool Search** — поиск инструментов по имени и описанию, **Background Bash** — фоновые задачи, **Task List / Task Stop** — управление задачами.
311
211
 
312
- Текст инструкций в формате Markdown...
313
- ```
314
-
315
- ---
212
+ ### Безопасность
316
213
 
317
- ## 🔧 Инструменты
318
-
319
- cliskill включает 15 встроенных инструментов для полноценной работы:
320
-
321
- | # | Инструмент | Описание | Категория |
322
- |---|------------|----------|-----------|
323
- | 1 | 🖥️ **Bash** | Выполнение shell команд с инспекцией безопасности | Выполнение |
324
- | 2 | 📄 **File Read** | Чтение файлов с поддержкой изображений | Файлы |
325
- | 3 | ✏️ **File Write** | Создание и перезапись файлов | Файлы |
326
- | 4 | 📝 **File Edit** | Точечное редактирование файлов (search/replace) | Файлы |
327
- | 5 | 🔍 **Glob** | Поиск файлов по паттернам | Поиск |
328
- | 6 | 🔎 **Grep** | Поиск текста с поддержкой regex | Поиск |
329
- | 7 | 🌐 **Web Search** | Веб-поиск через поисковые системы | Веб |
330
- | 8 | 🌍 **Web Fetch** | Загрузка и парсинг веб-страниц | Веб |
331
- | 9 | 🤖 **Agent** | Порождение суб-агентов для подзадач | Агенты |
332
- | 10 | 📡 **LSP** | Интеграция с Language Server Protocol | IDE |
333
- | 11 | ✅ **Todo Write** | Управление списками задач | Планирование |
334
- | 12 | 🖱️ **Computer Use** | Управление мышью и клавиатурой | Автоматизация |
335
- | 13 | 🔗 **Remote** | Выполнение команд на удалённых серверах через SSH | Удалённый доступ |
336
- | 14 | 🌳 **Worktree** | Управление git worktree для параллельной работы | Git |
337
- | 15 | 📋 **Plan Mode** | Планирование с 3 параллельными агентами | Планирование |
338
-
339
- ### Безопасность инструментов
340
-
341
- Инструменты классифицируются по уровню безопасности:
342
-
343
- - **readOnly** (Glob, Grep, File Read, LSP) — могут выполняться параллельно
344
- - **write** (File Write, File Edit, Bash) — выполняются эксклюзивно
214
+ - **readOnly** (Glob, Grep, File Read, LSP) — параллельное выполнение
215
+ - **write** (File Write, File Edit, Bash) — эксклюзивное выполнение
345
216
  - **network** (Web Search, Web Fetch) — контролируемые сетевые операции
217
+ - Динамическая проверка `concurrencySafe` per-input
346
218
 
347
219
  ---
348
220
 
349
- ## 🔌 MCP серверы
350
-
351
- **MCP (Model Context Protocol)** — открытый протокол для подключения внешних инструментов к AI-ассистентам. cliskill автоматически запускает MCP-серверы при старте и регистрирует их инструменты как доступные для модели.
221
+ ## MCP (Model Context Protocol)
352
222
 
353
- ### Как это работает
354
-
355
- 1. cliskill читает `mcpServers` из конфига
356
- 2. Запускает каждый сервер как дочерний процесс (stdio transport)
357
- 3. Получает список инструментов через `tools/list`
358
- 4. Регистрирует их в ToolRegistry с префиксом `mcp_{serverName}_`
359
- 5. Модель может вызывать MCP-инструменты наравне со встроенными
223
+ Подключение внешних инструментов через открытый протокол MCP. Серверы запускаются как дочерние процессы (stdio transport), инструменты регистрируются с префиксом `mcp_{serverName}_`.
360
224
 
361
225
  ### Настройка
362
226
 
363
- Добавьте массив `mcpServers` в конфиг (`~/.cliskill/config.json` или `.cliskillrc.json`):
227
+ Поддерживаются два формата конфигурации **массив** (нативный) и **объект** (Claude/Cursor совместимый):
228
+
229
+ **Формат массива:**
364
230
 
365
231
  ```json
366
232
  {
@@ -370,282 +236,177 @@ cliskill включает 15 встроенных инструментов дл
370
236
  "command": "npx",
371
237
  "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"],
372
238
  "transport": "stdio"
239
+ }
240
+ ]
241
+ }
242
+ ```
243
+
244
+ **Формат объекта (Claude/Cursor совместимый):**
245
+
246
+ ```json
247
+ {
248
+ "mcpServers": {
249
+ "filesystem": {
250
+ "command": "npx",
251
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"]
373
252
  },
374
- {
375
- "name": "github",
253
+ "github": {
376
254
  "command": "npx",
377
255
  "args": ["-y", "@modelcontextprotocol/server-github"],
378
- "env": {
379
- "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token"
380
- },
381
- "transport": "stdio"
256
+ "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_token" }
382
257
  }
383
- ]
258
+ }
384
259
  }
385
260
  ```
386
261
 
387
- ### Поля конфигурации MCP-сервера
262
+ В объектном формате ключ становится `name`, а `transport` по умолчанию `stdio`.
263
+
264
+ ### Поля
388
265
 
389
266
  | Поле | Тип | Обязательное | Описание |
390
267
  |------|-----|:---:|----------|
391
- | `name` | string | | Уникальное имя сервера |
392
- | `command` | string | | Команда запуска процесса |
393
- | `args` | string[] | | Аргументы команды (по умолчанию `[]`) |
394
- | `env` | object | | Переменные окружения для процесса |
395
- | `transport` | string | | Транспорт: `"stdio"` (по умолчанию) |
396
-
397
- ### Популярные MCP-серверы
398
-
399
- | Сервер | Пакет | Назначение |
400
- |--------|-------|------------|
401
- | Filesystem | `@modelcontextprotocol/server-filesystem` | Доступ к файловой системе |
402
- | GitHub | `@modelcontextprotocol/server-github` | Работа с GitHub API |
403
- | PostgreSQL | `@modelcontextprotocol/server-postgres` | Запросы к PostgreSQL |
404
- | Brave Search | `@modelcontextprotocol/server-brave-search` | Веб-поиск через Brave |
405
- | Memory | `@modelcontextprotocol/server-memory` | Память между сессиями |
406
- | Puppeteer | `@modelcontextprotocol/server-puppeteer` | Управление браузером |
407
-
408
- ### Безопасность
268
+ | `name` | string | да* | Уникальное имя (авто из ключа объекта) |
269
+ | `command` | string | да | Команда запуска |
270
+ | `args` | string[] | нет | Аргументы |
271
+ | `env` | object | нет | Переменные окружения |
272
+ | `transport` | string | нет | Транспорт (stdio по умолчанию) |
409
273
 
410
- - MCP-инструменты наследуют `riskLevel = 'safe'` — требуют разрешения в режиме `ask`
411
- - Серверы запускаются с переменными окружения из конфига (не из системы)
412
- - При ошибке подключения сервер пропускается, остальные продолжают работу
274
+ ### Популярные серверы
413
275
 
414
- ## 🤖 Агентская система
276
+ `@modelcontextprotocol/server-filesystem` файловая система, `server-github` — GitHub API, `server-postgres` — PostgreSQL, `server-brave-search` — веб-поиск, `server-memory` — память между сессиями, `server-puppeteer` — управление браузером.
415
277
 
416
- ### Auto Mode
278
+ ---
417
279
 
418
- 3 уровня автономности для автоматического выполнения задач:
280
+ ## Агентская система
419
281
 
420
- | Уровень | Описание | Подтверждение |
421
- |---------|----------|---------------|
422
- | `full-auto` | Полная автономия | Все действия без подтверждения |
423
- | `safe-auto` | Безопасная автономия | Только потенциально опасные операции |
424
- | `ask` | Ручное управление | Каждое действие (по умолчанию) |
282
+ ### Agent Loop
425
283
 
426
- ### Multi-Agent система
284
+ Ядро агентский цикл с streaming, параллельным tool calling, error recovery и автоматическим сжатием контекста.
427
285
 
428
- - **Fast Mode** — оптимизации скорости ответов
429
- - **Multi-Agent Plan Mode V2** — 3 параллельных агента для планирования
430
- - **Swarm Coordinator** — мульти-агентная координация сложных задач
431
- - **Task System** — фоновые задачи с отслеживанием статуса
286
+ ### Multi-Agent
432
287
 
433
- ### Agent Loop
288
+ - **Agent Tool** — порождение суб-агентов с `AsyncLocalStorage`-трекингом контекста
289
+ - **Plan Mode** — 3 параллельных агента для планирования
290
+ - **Swarm Coordinator** — мульти-агентная координация
291
+ - **Task System** — фоновые задачи с EventEmitter, `createTask`/`startTask`, `executeAgentTask`/`executeShellTask`
434
292
 
435
- Ядро системы — агентский цикл с поддержкой:
293
+ ### Auto Mode
436
294
 
437
- - **Streaming** потоковая обработка ответов LLM
438
- - **Tool calling** — параллельный вызов инструментов
439
- - **Error recovery** 3-уровневая стратегия восстановления при `max_tokens`
440
- - **Context management** автоматическое сжатие при переполнении контекста
295
+ | Уровень | Поведение |
296
+ |---------|-----------|
297
+ | `full-auto` | Полная автономия |
298
+ | `safe-auto` | Подтверждение только опасных операций |
299
+ | `ask` | Подтверждение каждого действия |
441
300
 
442
301
  ---
443
302
 
444
- ## 🏛️ Архитектура
303
+ ## Архитектура
445
304
 
446
305
  ```
447
306
  src/
448
- ├── 📡 bootstrap/ CLI entry point, парсинг аргументов
449
- ├── ⚙️ config/ Загрузка и валидация конфигурации
450
- ├── 🔌 connect/ Абстракция провайдеров (API адаптеры)
451
- ├── 🧠 core/ Agent Loop, QueryEngine (ядро системы)
452
- ├── 🔧 tools/ Система инструментов (15 инструментов)
453
- ├── 🛠️ services/ Сервисы (auto-mode, cron, doctor, и т.д.)
454
- ├── 🛡️ safety/ Разрешения, Command Inspector
455
- ├── 🧠 memory/ Memory Store (basic + TF-IDF)
456
- ├── 🎨 ui/ Theme, Keybindings, Ink TUI
457
- ├── 🪝 hooks/ — Hooks system (pre/post)
458
- ├── 📡 mcp/ MCP Client (Model Context Protocol)
459
- ├── 🐝 swarm/ Мульти-агентная координация
460
- ├── 📋 tasks/ Фоновые задачи
461
- ├── 🔗 remote/ SSH сессии
462
- ├── 🧩 extensions/ Расширения и навыки
463
- ├── 🏗️ infra/ Инфраструктурные модули
464
- └── 🔀 utils/ Общие утилиты
465
- ```
466
-
467
- ### Диаграмма взаимодействия
468
-
469
- ```mermaid
470
- graph TB
471
- CLI[CLI Entry] --> Config[Config Loader]
472
- CLI --> REPL[REPL / TUI]
473
- REPL --> Core[Agent Loop]
474
- Core --> Provider[Provider Adapter]
475
- Core --> Tools[Tool System]
476
- Core --> Memory[Memory Store]
477
- Core --> Safety[Safety Layer]
478
- Tools --> Bash[Bash Tool]
479
- Tools --> Files[File Tools]
480
- Tools --> Web[Web Tools]
481
- Tools --> Agent[Agent Tool]
482
- Tools --> LSP[LSP Tool]
483
- Tools --> Remote[Remote Tool]
484
- Core --> Hooks[Hooks System]
485
- Core --> MCP[MCP Client]
486
- Core --> Swarm[Swarm Coordinator]
487
- Swarm --> Tasks[Task System]
488
- ```
489
-
490
- ### Поток данных
491
-
492
- ```mermaid
493
- sequenceDiagram
494
- participant U as User
495
- participant R as REPL/TUI
496
- participant L as Agent Loop
497
- participant P as Provider Adapter
498
- participant T as Tool System
499
-
500
- U->>R: Ввод запроса
501
- R->>L: Передача сообщения
502
- L->>P: API запрос (streaming)
503
- P-->>L: Потоковый ответ
504
- L->>T: Вызов инструментов
505
- T-->>L: Результат выполнения
506
- L->>P: Продолжение диалога
507
- P-->>L: Финальный ответ
508
- L-->>R: Событие результата
509
- R-->>U: Отображение ответа
307
+ ├── bootstrap/ CLI entry point, парсинг аргументов
308
+ ├── config/ Загрузка и валидация конфигурации
309
+ ├── connect/ API адаптеры (OpenAI, Anthropic, GLM, Generic)
310
+ ├── core/ Agent Loop, QueryEngine
311
+ ├── tools/ Система инструментов (15 + MCP)
312
+ ├── services/ Streaming executor, context compaction, cost tracker
313
+ ├── safety/ Разрешения, Command Inspector
314
+ ├── memory/ Memory Store + TF-IDF + project scanner
315
+ ├── ui/ Theme, Keybindings, Ink TUI, Wizard
316
+ ├── hooks/ Pre/post hooks
317
+ ├── mcp/ MCP Client
318
+ ├── swarm/ Мульти-агентная координация
319
+ ├── tasks/ Фоновые задачи
320
+ ├── remote/ SSH сессии
321
+ ├── extensions/ Расширения и навыки
322
+ ├── infra/ AbortController hierarchy, agent context, errors
323
+ └── utils/ Общие утилиты
510
324
  ```
511
325
 
512
- ---
513
-
514
- ## 🌐 API провайдеры
515
-
516
- ### Поддерживаемые форматы
517
-
518
- cliskill работает с **любым** API, совместимым с OpenAI `/chat/completions`:
519
-
520
- | Провайдер | Base URL | Формат |
521
- |-----------|----------|--------|
522
- | OpenAI | `https://api.openai.com/v1` | `openai-compatible` |
523
- | GLM / Z.AI | `https://api.z.ai/api/coding/paas/v4` | `openai-compatible` |
524
- | DeepSeek | `https://api.deepseek.com/v1` | `openai-compatible` |
525
- | LocalAI | `http://localhost:8080/v1` | `openai-compatible` |
526
- | Ollama | `http://localhost:11434/v1` | `openai-compatible` |
527
- | LM Studio | `http://localhost:1234/v1` | `openai-compatible` |
528
- | Любой другой | `<your-endpoint>/v1` | `openai-compatible` |
529
-
530
- ### Модель алиасов
531
-
532
- Предустановленные алиасы для быстрого переключения моделей:
533
-
534
- | Алиас | Описание | Модель по умолчанию |
535
- |-------|----------|---------------------|
536
- | `smart` | Максимальное качество | `gpt-4o` |
537
- | `fast` | Быстрые ответы | `gpt-4o-mini` |
538
- | `balanced` | Баланс качества/скорости | `gpt-4o` |
539
- | `reasoning` | Логические задачи | `o1` |
540
- | `code` | Код-специфичные задачи | `gpt-4o` |
326
+ ### Ключевые подсистемы
541
327
 
542
- Алиасы настраиваются в `.cliskillrc.json` `models.aliases`.
328
+ | Подсистема | Что делает |
329
+ |------------|------------|
330
+ | **AbortController Hierarchy** | `WeakRef`-based child controllers, `setMaxListeners(50)`, auto-cleanup |
331
+ | **Progress Events** | `pendingProgress` буфер, `onToolProgress()`, реалтайм прогресс в TUI |
332
+ | **Context Compaction** | Multi-level с circuit breaker (3 failures), 4 уровня предупреждений |
333
+ | **Error Recovery** | Synthetic error results для pending tool calls при abort |
334
+ | **Model Fallback** | `resolveFallbackChain()`, `streamWithFallback()`, `completeWithFallback()` |
335
+ | **Session Recovery** | JSONL логирование, `/resume` и `/sessions` команды |
336
+ | **Cost Tracking** | Cache token tracking, per-model pricing (20+ моделей), budget warnings |
337
+ | **Permission System** | Dynamic checking, auto-approve patterns (regex), permission caching |
338
+ | **Batch Partitioning** | `partitionToolCalls()` — concurrent/exclusive batch'и |
543
339
 
544
340
  ---
545
341
 
546
- ## 👨‍💻 Разработка
547
-
548
- ### Команды
342
+ ## Разработка
549
343
 
550
344
  ```bash
551
- npm install # Установить зависимости
552
- npm run build # Сборка проекта (tsup)
553
- npm run dev # Разработка с watch-режимом
554
- npm test # Запустить тесты (Vitest)
555
- npm run test:watch # Тесты в watch-режиме
556
- npm run typecheck # Проверка типов TypeScript
557
- npm run lint # Линтинг (= typecheck)
558
- npm run start # Запуск собранного CLI
345
+ npm install # Зависимости
346
+ npm run build # Сборка (tsup)
347
+ npm run dev # Watch-режим
348
+ npm test # Тесты (Vitest)
349
+ npm run typecheck # Проверка типов
559
350
  ```
560
351
 
561
- ### Структура тестов
352
+ ### Добавить инструмент
562
353
 
563
- Каждый модуль сопровождается тестами:
564
-
565
- ```
566
- src/
567
- ├── services/
568
- │ ├── cron/
569
- │ │ ├── parser.ts # Парсер cron-выражений
570
- │ │ ├── parser.test.ts # Тесты парсера
571
- │ │ ├── scheduler.ts # Планировщик
572
- │ │ ├── scheduler.test.ts # Тесты планировщика
573
- │ │ ├── task-store.ts # Хранилище задач
574
- │ │ └── task-store.test.ts # Тесты хранилища
575
- │ ├── doctor.ts / .test.ts
576
- │ ├── asciicast.ts / .test.ts
577
- │ ├── housekeeping.ts / .test.ts
578
- │ └── tool-pool.ts / .test.ts
579
- ├── ui/
580
- │ ├── theme.ts / .test.ts
581
- │ └── keybindings/
582
- │ ├── parser.ts / .test.ts
583
- │ ├── resolver.ts / .test.ts
584
- │ └── schema.ts / .test.ts
585
- ├── tools/builtins/
586
- │ ├── worktree-tool.ts / .test.ts
587
- │ ├── todo-write-tool.ts / .test.ts
588
- │ ├── web-fetch-tool.ts / .test.ts
589
- │ └── web-search-tool.ts / .test.ts
590
- └── utils/
591
- ├── ansi-render.ts / .test.ts
592
- └── bash-parser.ts / .test.ts
593
- ```
354
+ 1. Создать `src/tools/builtins/your-tool.ts`
355
+ 2. Реализовать интерфейс `Tool` из `src/tools/types.ts`
356
+ 3. Зарегистрировать в `src/tools/builtins/index.ts`
357
+ 4. Написать тесты
594
358
 
595
- ### Добавление нового инструмента
359
+ ### Добавить провайдера
596
360
 
597
- 1. Создайте файл в `src/tools/builtins/your-tool.ts`
598
- 2. Реализуйте интерфейс `Tool` из `src/tools/types.ts`
599
- 3. Зарегистрируйте в `src/tools/builtins/index.ts`
600
- 4. Добавьте тесты `your-tool.test.ts`
361
+ 1. Создать адаптер в `src/connect/your-adapter.ts`
362
+ 2. Реализовать `ProviderAdapter`
363
+ 3. Зарегистрировать в `src/connect/registry.ts`
601
364
 
602
- ### Добавление нового провайдера
365
+ ---
603
366
 
604
- 1. Создайте адаптер в `src/connect/your-adapter.ts`
605
- 2. Реализуйте интерфейс `ProviderAdapter` из `src/connect/types.ts`
606
- 3. Зарегистрируйте в `src/connect/registry.ts`
367
+ ## Технологии
607
368
 
608
- ---
369
+ **Стек:** Node.js LTS, TypeScript (strict), ESM
609
370
 
610
- ## 🧪 Технологии
371
+ **Зависимости:** Commander.js, Zod, Chalk, Ink/React, Ora, ssh2
611
372
 
612
- ### Основной стек
373
+ **Сборка и тесты:** tsup (esbuild), Vitest, TypeScript
613
374
 
614
- | Технология | Назначение |
615
- |------------|------------|
616
- | **Node.js** LTS | Среда выполнения |
617
- | **TypeScript** (strict) | Типобезопасность |
618
- | **ESM** | Модульная система |
375
+ ---
619
376
 
620
- ### Зависимости
377
+ ## Changelog
621
378
 
622
- | Библиотека | Назначение |
623
- |------------|------------|
624
- | [Commander.js](https://github.com/tj/commander.js) | Парсинг CLI аргументов |
625
- | [Zod](https://zod.dev) | Валидация схем данных |
626
- | [Chalk](https://github.com/chalk/chalk) | Цветной вывод в терминал |
627
- | [Ink](https://github.com/vadimdemedes/ink) / [React](https://react.dev) | Terminal UI |
628
- | [Ora](https://github.com/sindresorhus/ora) | Спиннеры загрузки |
629
- | [ssh2](https://github.com/mscdex/ssh2) | SSH подключения |
379
+ ### v1.1.4
630
380
 
631
- ### Dev-зависимости
381
+ - MCP config compatibility — поддержка объектного формата `mcpServers` (Claude/Cursor совместимый), автоматическая конвертация в массив через `z.preprocess`
632
382
 
633
- | Библиотека | Назначение |
634
- |------------|------------|
635
- | [tsup](https://tsup.egoist.dev) | Сборка (esbuild-based) |
636
- | [Vitest](https://vitest.dev) | Тестирование |
637
- | [TypeScript](https://www.typescriptlang.org) | Компилятор и проверка типов |
383
+ ### v1.1.2
638
384
 
639
- ---
385
+ - Anthropic Claude integration — Messages API с streaming, tool use, кастомный Base URL
386
+ - MCP deep audit — 20+ багов исправлено, connection state machine, graceful shutdown, JSON Schema → Zod конвертация
387
+ - DRY: общий SSE парсер и network error handling для всех адаптеров
388
+ - Agent UI freeze fix — 3 критических бага с tool.promise, heartbeat timeout, progress events
389
+ - Animated progress display — braille-спиннер, реалтайм прогресс от агентов и инструментов
640
390
 
641
- ## 📄 Лицензия
391
+ ### v1.1.0
642
392
 
643
- Этот проект распространяется под лицензией **MIT**. Подробнее см. [LICENSE](LICENSE).
393
+ - AbortController hierarchy с WeakRef и auto-cleanup
394
+ - Progress events — per-tool progress в single/multi tool calls
395
+ - Dynamic concurrency safety — per-input проверка
396
+ - Batch partitioning — concurrent/exclusive batch'и
397
+ - Multi-level context compaction с circuit breaker
398
+ - Error recovery — synthetic results при abort
399
+ - Agent context — AsyncLocalStorage tracking
400
+ - Task system — фоновые задачи с EventEmitter
401
+ - Model fallback chain
402
+ - Session recovery — JSONL + `/resume` + `/sessions`
403
+ - Tool aliases & search
404
+ - Permission system — dynamic checking, auto-approve, caching
405
+ - Memory system — project-level `.cliskill.md` scanning
406
+ - Cost tracking — cache tokens, per-model pricing, budget warnings
644
407
 
645
408
  ---
646
409
 
647
- <div align="center">
648
-
649
- **cliskill** — свободный AI-ассистент для тех, кто ценит независимость.
410
+ ## Лицензия
650
411
 
651
- </div>
412
+ [MIT](LICENSE)