cliskill 1.1.2 → 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 +225 -485
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,239 +1,144 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
|
|
3
|
-
#
|
|
3
|
+
# cliskill
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**Universal Terminal AI CLI**
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Свободный AI-ассистент для терминала с поддержкой любых LLM провайдеров.
|
|
8
8
|
|
|
9
|
-
[ · [Без подписок](#) · [Без vendor lock-in](#) · [Универсальный](#)
|
|
9
|
+
[](https://www.npmjs.com/package/cliskill)
|
|
10
|
+
[](LICENSE)
|
|
11
|
+
[]()
|
|
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
|
-
|
|
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
|
-
#
|
|
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
|
|
57
|
+
cliskill --model reasoning
|
|
148
58
|
|
|
149
|
-
#
|
|
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 --
|
|
164
|
-
cliskill --
|
|
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
|
-
|
|
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
|
-
###
|
|
77
|
+
### Опции
|
|
208
78
|
|
|
209
79
|
| Опция | Описание |
|
|
210
80
|
|-------|----------|
|
|
211
|
-
| `-m, --model <model>` | Модель или алиас
|
|
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
|
-
| `--
|
|
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>` |
|
|
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
|
-
|
|
|
228
|
-
|
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
281
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
221
|
+
## MCP (Model Context Protocol)
|
|
350
222
|
|
|
351
|
-
|
|
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
|
-
### Поля
|
|
247
|
+
### Поля
|
|
388
248
|
|
|
389
249
|
| Поле | Тип | Обязательное | Описание |
|
|
390
250
|
|------|-----|:---:|----------|
|
|
391
|
-
| `name` | string |
|
|
392
|
-
| `command` | string |
|
|
393
|
-
| `args` | string[] |
|
|
394
|
-
| `env` | object |
|
|
395
|
-
| `transport` | string |
|
|
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
|
-
|
|
261
|
+
---
|
|
417
262
|
|
|
418
|
-
|
|
263
|
+
## Агентская система
|
|
419
264
|
|
|
420
|
-
|
|
421
|
-
|---------|----------|---------------|
|
|
422
|
-
| `full-auto` | Полная автономия | Все действия без подтверждения |
|
|
423
|
-
| `safe-auto` | Безопасная автономия | Только потенциально опасные операции |
|
|
424
|
-
| `ask` | Ручное управление | Каждое действие (по умолчанию) |
|
|
265
|
+
### Agent Loop
|
|
425
266
|
|
|
426
|
-
|
|
267
|
+
Ядро — агентский цикл с streaming, параллельным tool calling, error recovery и автоматическим сжатием контекста.
|
|
427
268
|
|
|
428
|
-
-
|
|
429
|
-
- **Multi-Agent Plan Mode V2** — 3 параллельных агента для планирования
|
|
430
|
-
- **Swarm Coordinator** — мульти-агентная координация сложных задач
|
|
431
|
-
- **Task System** — фоновые задачи с отслеживанием статуса
|
|
269
|
+
### Multi-Agent
|
|
432
270
|
|
|
433
|
-
|
|
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
|
-
|
|
438
|
-
|
|
439
|
-
-
|
|
440
|
-
-
|
|
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
|
-
├──
|
|
449
|
-
├──
|
|
450
|
-
├──
|
|
451
|
-
├──
|
|
452
|
-
├──
|
|
453
|
-
├──
|
|
454
|
-
├──
|
|
455
|
-
├──
|
|
456
|
-
├──
|
|
457
|
-
├──
|
|
458
|
-
├──
|
|
459
|
-
├──
|
|
460
|
-
├──
|
|
461
|
-
├──
|
|
462
|
-
├──
|
|
463
|
-
├──
|
|
464
|
-
└──
|
|
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
|
-
|
|
|
521
|
-
|
|
522
|
-
|
|
|
523
|
-
|
|
|
524
|
-
|
|
|
525
|
-
|
|
|
526
|
-
|
|
|
527
|
-
|
|
|
528
|
-
|
|
|
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 # Сборка
|
|
553
|
-
npm run dev #
|
|
554
|
-
npm test #
|
|
555
|
-
npm run
|
|
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.
|
|
598
|
-
2.
|
|
599
|
-
3.
|
|
600
|
-
4.
|
|
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.
|
|
605
|
-
2.
|
|
606
|
-
3.
|
|
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
|
-
|
|
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
|
-
|
|
648
|
-
|
|
649
|
-
**cliskill** — свободный AI-ассистент для тех, кто ценит независимость.
|
|
389
|
+
## Лицензия
|
|
650
390
|
|
|
651
|
-
|
|
391
|
+
[MIT](LICENSE)
|
package/package.json
CHANGED