cliskill 1.1.1 → 1.1.3

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 или собственные серверы.
40
-
41
- ### Ключевые принципы
42
-
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
17
+ ## Что это
102
18
 
103
- # Сборка проекта
104
- npm run build
19
+ cliskill CLI-инструмент для работы с LLM прямо из терминала. Подключает любого провайдера через стандартный `/chat/completions` API, даёт 15 встроенных инструментов, мульти-агентную координацию и MCP-интеграцию. Без подписок, без vendor lock-in.
105
20
 
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
-
158
- # 🔄 Восстановление сессий
159
- cliskill --resume # последняя сессия
160
- cliskill --resume abc12345 # конкретная сессия
161
62
 
162
- # 🎬 Запись сессии
163
- cliskill --record
164
- cliskill --record --record-output ./my-session.cast
63
+ # Восстановление сессии
64
+ cliskill --resume
65
+ cliskill --resume abc12345
165
66
 
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
-
181
- # 📊 Вербоузный режим
182
- cliskill --verbose
183
- ```
184
69
 
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
+ ## Провайдеры
108
+
109
+ Работает с любым API, совместимым с OpenAI `/chat/completions`, а также с Anthropic Messages API.
110
+
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` в конфигурации провайдера.
233
136
 
234
- ### Файл конфигурации
137
+ ---
138
+
139
+ ## Конфигурация
235
140
 
236
- Создайте `.cliskillrc.json` в домашней директории или в корне проекта:
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,91 +169,61 @@ 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 серверы
221
+ ## MCP (Model Context Protocol)
350
222
 
351
- **MCP (Model Context Protocol)** открытый протокол для подключения внешних инструментов к AI-ассистентам. cliskill автоматически запускает MCP-серверы при старте и регистрирует их инструменты как доступные для модели.
352
-
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`):
364
-
365
227
  ```json
366
228
  {
367
229
  "mcpServers": [
@@ -375,277 +237,155 @@ cliskill включает 15 встроенных инструментов дл
375
237
  "name": "github",
376
238
  "command": "npx",
377
239
  "args": ["-y", "@modelcontextprotocol/server-github"],
378
- "env": {
379
- "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token"
380
- },
240
+ "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_token" },
381
241
  "transport": "stdio"
382
242
  }
383
243
  ]
384
244
  }
385
245
  ```
386
246
 
387
- ### Поля конфигурации MCP-сервера
247
+ ### Поля
388
248
 
389
249
  | Поле | Тип | Обязательное | Описание |
390
250
  |------|-----|:---:|----------|
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` | Управление браузером |
251
+ | `name` | string | да | Уникальное имя |
252
+ | `command` | string | да | Команда запуска |
253
+ | `args` | string[] | нет | Аргументы |
254
+ | `env` | object | нет | Переменные окружения |
255
+ | `transport` | string | нет | Транспорт (stdio по умолчанию) |
407
256
 
408
- ### Безопасность
409
-
410
- - MCP-инструменты наследуют `riskLevel = 'safe'` — требуют разрешения в режиме `ask`
411
- - Серверы запускаются с переменными окружения из конфига (не из системы)
412
- - При ошибке подключения сервер пропускается, остальные продолжают работу
257
+ ### Популярные серверы
413
258
 
414
- ## 🤖 Агентская система
259
+ `@modelcontextprotocol/server-filesystem` файловая система, `server-github` — GitHub API, `server-postgres` — PostgreSQL, `server-brave-search` — веб-поиск, `server-memory` — память между сессиями, `server-puppeteer` — управление браузером.
415
260
 
416
- ### Auto Mode
261
+ ---
417
262
 
418
- 3 уровня автономности для автоматического выполнения задач:
263
+ ## Агентская система
419
264
 
420
- | Уровень | Описание | Подтверждение |
421
- |---------|----------|---------------|
422
- | `full-auto` | Полная автономия | Все действия без подтверждения |
423
- | `safe-auto` | Безопасная автономия | Только потенциально опасные операции |
424
- | `ask` | Ручное управление | Каждое действие (по умолчанию) |
265
+ ### Agent Loop
425
266
 
426
- ### Multi-Agent система
267
+ Ядро агентский цикл с streaming, параллельным tool calling, error recovery и автоматическим сжатием контекста.
427
268
 
428
- - **Fast Mode** — оптимизации скорости ответов
429
- - **Multi-Agent Plan Mode V2** — 3 параллельных агента для планирования
430
- - **Swarm Coordinator** — мульти-агентная координация сложных задач
431
- - **Task System** — фоновые задачи с отслеживанием статуса
269
+ ### Multi-Agent
432
270
 
433
- ### Agent Loop
271
+ - **Agent Tool** — порождение суб-агентов с `AsyncLocalStorage`-трекингом контекста
272
+ - **Plan Mode** — 3 параллельных агента для планирования
273
+ - **Swarm Coordinator** — мульти-агентная координация
274
+ - **Task System** — фоновые задачи с EventEmitter, `createTask`/`startTask`, `executeAgentTask`/`executeShellTask`
434
275
 
435
- Ядро системы — агентский цикл с поддержкой:
276
+ ### Auto Mode
436
277
 
437
- - **Streaming** потоковая обработка ответов LLM
438
- - **Tool calling** — параллельный вызов инструментов
439
- - **Error recovery** 3-уровневая стратегия восстановления при `max_tokens`
440
- - **Context management** автоматическое сжатие при переполнении контекста
278
+ | Уровень | Поведение |
279
+ |---------|-----------|
280
+ | `full-auto` | Полная автономия |
281
+ | `safe-auto` | Подтверждение только опасных операций |
282
+ | `ask` | Подтверждение каждого действия |
441
283
 
442
284
  ---
443
285
 
444
- ## 🏛️ Архитектура
286
+ ## Архитектура
445
287
 
446
288
  ```
447
289
  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/ Общие утилиты
290
+ ├── bootstrap/ CLI entry point, парсинг аргументов
291
+ ├── config/ Загрузка и валидация конфигурации
292
+ ├── connect/ API адаптеры (OpenAI, Anthropic, GLM, Generic)
293
+ ├── core/ Agent Loop, QueryEngine
294
+ ├── tools/ Система инструментов (15 + MCP)
295
+ ├── services/ Streaming executor, context compaction, cost tracker
296
+ ├── safety/ Разрешения, Command Inspector
297
+ ├── memory/ Memory Store + TF-IDF + project scanner
298
+ ├── ui/ Theme, Keybindings, Ink TUI, Wizard
299
+ ├── hooks/ Pre/post hooks
300
+ ├── mcp/ MCP Client
301
+ ├── swarm/ Мульти-агентная координация
302
+ ├── tasks/ Фоновые задачи
303
+ ├── remote/ SSH сессии
304
+ ├── extensions/ Расширения и навыки
305
+ ├── infra/ AbortController hierarchy, agent context, errors
306
+ └── utils/ Общие утилиты
465
307
  ```
466
308
 
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: Отображение ответа
510
- ```
511
-
512
- ---
513
-
514
- ## 🌐 API провайдеры
515
-
516
- ### Поддерживаемые форматы
517
-
518
- cliskill работает с **любым** API, совместимым с OpenAI `/chat/completions`:
309
+ ### Ключевые подсистемы
519
310
 
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` |
541
-
542
- Алиасы настраиваются в `.cliskillrc.json` → `models.aliases`.
311
+ | Подсистема | Что делает |
312
+ |------------|------------|
313
+ | **AbortController Hierarchy** | `WeakRef`-based child controllers, `setMaxListeners(50)`, auto-cleanup |
314
+ | **Progress Events** | `pendingProgress` буфер, `onToolProgress()`, реалтайм прогресс в TUI |
315
+ | **Context Compaction** | Multi-level с circuit breaker (3 failures), 4 уровня предупреждений |
316
+ | **Error Recovery** | Synthetic error results для pending tool calls при abort |
317
+ | **Model Fallback** | `resolveFallbackChain()`, `streamWithFallback()`, `completeWithFallback()` |
318
+ | **Session Recovery** | JSONL логирование, `/resume` и `/sessions` команды |
319
+ | **Cost Tracking** | Cache token tracking, per-model pricing (20+ моделей), budget warnings |
320
+ | **Permission System** | Dynamic checking, auto-approve patterns (regex), permission caching |
321
+ | **Batch Partitioning** | `partitionToolCalls()` — concurrent/exclusive batch'и |
543
322
 
544
323
  ---
545
324
 
546
- ## 👨‍💻 Разработка
547
-
548
- ### Команды
325
+ ## Разработка
549
326
 
550
327
  ```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
559
- ```
560
-
561
- ### Структура тестов
562
-
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
328
+ npm install # Зависимости
329
+ npm run build # Сборка (tsup)
330
+ npm run dev # Watch-режим
331
+ npm test # Тесты (Vitest)
332
+ npm run typecheck # Проверка типов
593
333
  ```
594
334
 
595
- ### Добавление нового инструмента
335
+ ### Добавить инструмент
596
336
 
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`
337
+ 1. Создать `src/tools/builtins/your-tool.ts`
338
+ 2. Реализовать интерфейс `Tool` из `src/tools/types.ts`
339
+ 3. Зарегистрировать в `src/tools/builtins/index.ts`
340
+ 4. Написать тесты
601
341
 
602
- ### Добавление нового провайдера
342
+ ### Добавить провайдера
603
343
 
604
- 1. Создайте адаптер в `src/connect/your-adapter.ts`
605
- 2. Реализуйте интерфейс `ProviderAdapter` из `src/connect/types.ts`
606
- 3. Зарегистрируйте в `src/connect/registry.ts`
344
+ 1. Создать адаптер в `src/connect/your-adapter.ts`
345
+ 2. Реализовать `ProviderAdapter`
346
+ 3. Зарегистрировать в `src/connect/registry.ts`
607
347
 
608
348
  ---
609
349
 
610
- ## 🧪 Технологии
611
-
612
- ### Основной стек
350
+ ## Технологии
613
351
 
614
- | Технология | Назначение |
615
- |------------|------------|
616
- | **Node.js** LTS | Среда выполнения |
617
- | **TypeScript** (strict) | Типобезопасность |
618
- | **ESM** | Модульная система |
352
+ **Стек:** Node.js LTS, TypeScript (strict), ESM
619
353
 
620
- ### Зависимости
354
+ **Зависимости:** Commander.js, Zod, Chalk, Ink/React, Ora, ssh2
621
355
 
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 подключения |
630
-
631
- ### Dev-зависимости
632
-
633
- | Библиотека | Назначение |
634
- |------------|------------|
635
- | [tsup](https://tsup.egoist.dev) | Сборка (esbuild-based) |
636
- | [Vitest](https://vitest.dev) | Тестирование |
637
- | [TypeScript](https://www.typescriptlang.org) | Компилятор и проверка типов |
356
+ **Сборка и тесты:** tsup (esbuild), Vitest, TypeScript
638
357
 
639
358
  ---
640
359
 
641
- ## 📄 Лицензия
642
-
643
- Этот проект распространяется под лицензией **MIT**. Подробнее см. [LICENSE](LICENSE).
360
+ ## Changelog
361
+
362
+ ### v1.1.2
363
+
364
+ - Anthropic Claude integration — Messages API с streaming, tool use, кастомный Base URL
365
+ - MCP deep audit — 20+ багов исправлено, connection state machine, graceful shutdown, JSON Schema → Zod конвертация
366
+ - DRY: общий SSE парсер и network error handling для всех адаптеров
367
+ - Agent UI freeze fix — 3 критических бага с tool.promise, heartbeat timeout, progress events
368
+ - Animated progress display — braille-спиннер, реалтайм прогресс от агентов и инструментов
369
+
370
+ ### v1.1.0
371
+
372
+ - AbortController hierarchy с WeakRef и auto-cleanup
373
+ - Progress events — per-tool progress в single/multi tool calls
374
+ - Dynamic concurrency safety — per-input проверка
375
+ - Batch partitioning — concurrent/exclusive batch'и
376
+ - Multi-level context compaction с circuit breaker
377
+ - Error recovery — synthetic results при abort
378
+ - Agent context — AsyncLocalStorage tracking
379
+ - Task system — фоновые задачи с EventEmitter
380
+ - Model fallback chain
381
+ - Session recovery — JSONL + `/resume` + `/sessions`
382
+ - Tool aliases & search
383
+ - Permission system — dynamic checking, auto-approve, caching
384
+ - Memory system — project-level `.cliskill.md` scanning
385
+ - Cost tracking — cache tokens, per-model pricing, budget warnings
644
386
 
645
387
  ---
646
388
 
647
- <div align="center">
648
-
649
- **cliskill** — свободный AI-ассистент для тех, кто ценит независимость.
389
+ ## Лицензия
650
390
 
651
- </div>
391
+ [MIT](LICENSE)