@iola_adm/iola-cli 0.1.20 → 0.1.22
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 +25 -519
- package/package.json +1 -1
- package/src/cli.js +50 -0
package/README.md
CHANGED
|
@@ -2,553 +2,66 @@
|
|
|
2
2
|
|
|
3
3
|
# iola-cli
|
|
4
4
|
|
|
5
|
-
CLI для работы с открытыми данными городского округа "Город Йошкар-Ола".
|
|
5
|
+
CLI и AI-агент для работы с открытыми данными городского округа "Город Йошкар-Ола".
|
|
6
6
|
|
|
7
7
|
Подробная документация: [GitHub Wiki](https://github.com/adm-iola/iola-cli/wiki).
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Публичные endpoints:
|
|
10
10
|
|
|
11
11
|
- `https://apiiola.yasg.ru/api/v1`
|
|
12
12
|
- `https://apiiola.yasg.ru/mcp`
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Быстрый старт
|
|
15
15
|
|
|
16
|
-
Проверьте Node.js
|
|
16
|
+
Проверьте Node.js:
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
node --version
|
|
20
20
|
npm --version
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
Нужен Node.js `22.5.0` или новее.
|
|
24
|
-
`node:sqlite`, которую CLI будет использовать для локальной истории, кеша и
|
|
25
|
-
сессий без дополнительных нативных зависимостей.
|
|
23
|
+
Нужен Node.js `22.5.0` или новее.
|
|
26
24
|
|
|
27
|
-
|
|
25
|
+
Установка и первый запуск:
|
|
28
26
|
|
|
29
27
|
```bash
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# macOS
|
|
34
|
-
brew install node
|
|
35
|
-
|
|
36
|
-
# Linux, вариант через NodeSource
|
|
37
|
-
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
|
|
38
|
-
sudo apt-get install -y nodejs
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Для локального AI-режима нужен Ollama. Проверка:
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
ollama --version
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Установка Ollama:
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
# Windows
|
|
51
|
-
winget install Ollama.Ollama
|
|
52
|
-
|
|
53
|
-
# macOS
|
|
54
|
-
brew install --cask ollama
|
|
55
|
-
|
|
56
|
-
# Linux
|
|
57
|
-
curl -fsSL https://ollama.com/install.sh | sh
|
|
28
|
+
npm install -g @iola_adm/iola-cli
|
|
29
|
+
iola init
|
|
30
|
+
iola --help
|
|
58
31
|
```
|
|
59
32
|
|
|
60
|
-
|
|
33
|
+
Без глобальной установки:
|
|
61
34
|
|
|
62
35
|
```bash
|
|
63
36
|
npx -y @iola_adm/iola-cli init
|
|
64
|
-
npx -y @iola_adm/iola-cli init --upgrade-node
|
|
65
|
-
npx -y @iola_adm/iola-cli ai doctor
|
|
66
|
-
npx -y @iola_adm/iola-cli ai setup ollama
|
|
67
37
|
```
|
|
68
38
|
|
|
69
|
-
|
|
39
|
+
Основные команды:
|
|
70
40
|
|
|
71
41
|
```bash
|
|
72
|
-
|
|
73
|
-
npx -y @iola_adm/iola-cli init --yes
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
Глобальная установка:
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
npm install -g @iola_adm/iola-cli
|
|
80
|
-
iola help
|
|
81
|
-
iola init
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Команды
|
|
85
|
-
|
|
86
|
-
Полный справочник команд: [Команды](https://github.com/adm-iola/iola-cli/wiki/Команды).
|
|
87
|
-
|
|
88
|
-
```bash
|
|
89
|
-
iola banner
|
|
90
|
-
iola agent
|
|
91
|
-
iola chat
|
|
92
|
-
iola init
|
|
93
|
-
iola doctor
|
|
94
|
-
iola db status
|
|
95
|
-
iola db init
|
|
96
|
-
iola history --limit 20
|
|
97
|
-
iola history clear
|
|
98
|
-
iola sessions --limit 20
|
|
99
|
-
iola resume 1 "продолжи"
|
|
100
|
-
iola fork 1 "новый вопрос"
|
|
101
|
-
iola features list
|
|
102
|
-
iola features enable api-cache
|
|
103
|
-
iola permissions list
|
|
104
|
-
iola permissions deny export_data
|
|
105
|
-
iola permissions allow export_data
|
|
106
|
-
iola memory add "Отвечай кратко и указывай источник данных"
|
|
107
|
-
iola memory show
|
|
108
|
-
iola hooks events
|
|
109
|
-
iola hooks add AfterSync "iola quality"
|
|
110
|
-
iola agents list
|
|
111
|
-
iola agents run quality-checker "проверь школы"
|
|
112
|
-
iola mcp status
|
|
113
|
-
iola mcp list
|
|
114
|
-
iola mcp install codex
|
|
115
|
-
iola cache status
|
|
116
|
-
iola cache warm
|
|
117
|
-
iola cache clear
|
|
118
|
-
iola sync
|
|
119
|
-
iola sync status
|
|
120
|
-
iola diff schools
|
|
121
|
-
iola search "Петрова" --local
|
|
122
|
-
iola search "Петрова" --local --fts
|
|
42
|
+
iola search "Петрова"
|
|
123
43
|
iola card "школа 29"
|
|
44
|
+
iola ask "найди школу 29"
|
|
45
|
+
iola sync
|
|
124
46
|
iola quality
|
|
125
|
-
iola quality missing-phones
|
|
126
|
-
iola data schools --where address=Петрова --save schools-petrova
|
|
127
|
-
iola views
|
|
128
|
-
iola view schools-petrova --format csv --output schools-petrova.csv
|
|
129
|
-
iola views delete schools-petrova
|
|
130
|
-
iola report missing-phones
|
|
131
|
-
iola privacy
|
|
132
|
-
iola backup create
|
|
133
|
-
iola alias add petrova "data schools --where address=Петрова --columns name,address,phone"
|
|
134
|
-
iola run "выгрузи школы на Петрова в csv"
|
|
135
|
-
iola config get
|
|
136
|
-
iola config set api.baseUrl https://apiiola.yasg.ru/api/v1
|
|
137
|
-
iola config reset
|
|
138
|
-
iola update
|
|
139
|
-
iola version --check
|
|
140
|
-
iola ask "Найди школу 29"
|
|
141
|
-
iola ask "Найди школу 29" --profile codex --events --output answer.txt
|
|
142
|
-
iola ask "Найди школу 29" --schema json --no-history
|
|
143
|
-
iola ask "Найди школу 29" --bare --quiet
|
|
144
|
-
iola ask "выгрузи школы на Петрова в csv" --profile local --tools --reasoning verify
|
|
145
|
-
iola data schools --format csv --output schools.csv
|
|
146
|
-
iola data schools --limit 10
|
|
147
|
-
iola data kindergartens --search "29"
|
|
148
|
-
iola data schools --where address=Петрова --columns name,address,phone
|
|
149
|
-
iola data schools --format csv
|
|
150
|
-
iola ai doctor
|
|
151
|
-
iola ai setup ollama
|
|
152
|
-
iola ai setup codex --model gpt-5.5
|
|
153
|
-
iola ai profiles
|
|
154
|
-
iola ai profile add router-qwen --provider openrouter --model qwen/qwen3-32b
|
|
155
|
-
iola ai profile use router-qwen
|
|
156
|
-
iola ai models openrouter --search qwen
|
|
157
|
-
iola ai models codex
|
|
158
|
-
iola ai ask "Какие школы есть на улице Петрова?"
|
|
159
|
-
iola ai context "школа 29"
|
|
160
|
-
iola ai key set openai
|
|
161
|
-
iola ai key status
|
|
162
|
-
iola ai setup openai --model gpt-4.1-mini
|
|
163
|
-
iola ai setup openrouter --model openai/gpt-4.1-mini
|
|
164
|
-
iola health
|
|
165
|
-
iola layers
|
|
166
|
-
iola schools --limit 10
|
|
167
|
-
iola schools --format csv
|
|
168
|
-
iola schools get --inn 1215067180
|
|
169
|
-
iola kindergartens --search "29"
|
|
170
|
-
iola kindergartens get --inn 1215077421 --json
|
|
171
|
-
iola search "лицей"
|
|
172
|
-
iola mcp-info
|
|
173
|
-
iola setup codex
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
По умолчанию команды выводят компактную таблицу. Для полного ответа API
|
|
177
|
-
используйте `--json` или `--format json`. Для выгрузки используйте
|
|
178
|
-
`--format csv`.
|
|
179
|
-
|
|
180
|
-
## Интерактивный режим
|
|
181
|
-
|
|
182
|
-
Подробнее: [Команды](https://github.com/adm-iola/iola-cli/wiki/Команды).
|
|
183
|
-
|
|
184
|
-
```bash
|
|
185
47
|
iola agent
|
|
186
48
|
```
|
|
187
49
|
|
|
188
|
-
Внутри agent доступны slash-команды:
|
|
189
|
-
|
|
190
|
-
```text
|
|
191
|
-
/help
|
|
192
|
-
/health
|
|
193
|
-
/doctor
|
|
194
|
-
/db status
|
|
195
|
-
/sessions
|
|
196
|
-
/resume 1
|
|
197
|
-
/features list
|
|
198
|
-
/permissions
|
|
199
|
-
/tools
|
|
200
|
-
/memory show
|
|
201
|
-
/hooks list
|
|
202
|
-
/agents list
|
|
203
|
-
/mcp status
|
|
204
|
-
/config get
|
|
205
|
-
/layers
|
|
206
|
-
/data schools --limit 10
|
|
207
|
-
/schools --limit 10
|
|
208
|
-
/schools get --inn 1215067180
|
|
209
|
-
/kindergartens --search 29
|
|
210
|
-
/search лицей --limit 3
|
|
211
|
-
/mcp-info
|
|
212
|
-
/ai doctor
|
|
213
|
-
/context школа 29
|
|
214
|
-
/profiles
|
|
215
|
-
/profile use local
|
|
216
|
-
/models openrouter --search qwen
|
|
217
|
-
/use ollama
|
|
218
|
-
/use openai
|
|
219
|
-
/key status
|
|
220
|
-
/key set openai
|
|
221
|
-
/model
|
|
222
|
-
/provider
|
|
223
|
-
/config
|
|
224
|
-
/history
|
|
225
|
-
/history --limit 20
|
|
226
|
-
/clear
|
|
227
|
-
/update
|
|
228
|
-
/init
|
|
229
|
-
/exit
|
|
230
|
-
```
|
|
231
|
-
|
|
232
|
-
Обычный текст без `/` в `iola agent` отправляется в настроенный AI-провайдер.
|
|
233
|
-
`iola chat` запускает тот же интерактивный режим.
|
|
234
|
-
|
|
235
|
-
## AI-запросы
|
|
236
|
-
|
|
237
|
-
Подробнее: [AI-профили](https://github.com/adm-iola/iola-cli/wiki/AI-профили).
|
|
238
|
-
|
|
239
50
|
Локальная модель через Ollama:
|
|
240
51
|
|
|
241
52
|
```bash
|
|
242
53
|
iola ai setup ollama
|
|
243
|
-
iola ai ask "Какие школы есть на улице Петрова?"
|
|
244
|
-
iola ask "Какие школы есть на улице Петрова?"
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
OpenAI:
|
|
248
|
-
|
|
249
|
-
```bash
|
|
250
|
-
iola ai key set openai
|
|
251
|
-
iola ai setup openai --model gpt-4.1-mini
|
|
252
|
-
iola ai ask "Найди школу 29"
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
OpenRouter:
|
|
256
|
-
|
|
257
|
-
```bash
|
|
258
|
-
iola ai key set openrouter
|
|
259
|
-
iola ai setup openrouter --model openai/gpt-4.1-mini
|
|
260
|
-
iola ai ask "Покажи контакты лицея"
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
Codex CLI:
|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
codex login
|
|
267
|
-
iola ai setup codex --model gpt-5.5
|
|
268
|
-
iola setup codex
|
|
269
|
-
iola ask "Назови ИНН школы 29"
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
AI-профили позволяют держать локальную модель, OpenAI, OpenRouter и Codex
|
|
273
|
-
одновременно:
|
|
274
|
-
|
|
275
|
-
```bash
|
|
276
|
-
iola ai profiles
|
|
277
|
-
iola ai profile add local-small --provider ollama --model llama3.2:1b
|
|
278
|
-
iola ai profile add gpt --provider openai --model gpt-4.1-mini
|
|
279
|
-
iola ai profile add router-qwen --provider openrouter --model qwen/qwen3-32b
|
|
280
|
-
iola ai profile add codex-read --provider codex --model gpt-5.5 --sandbox read-only
|
|
281
|
-
iola ai profile use router-qwen
|
|
282
|
-
```
|
|
283
|
-
|
|
284
|
-
Списки моделей:
|
|
285
|
-
|
|
286
|
-
```bash
|
|
287
|
-
iola ai models ollama
|
|
288
|
-
iola ai models openai
|
|
289
|
-
iola ai models openrouter --search qwen
|
|
290
|
-
iola ai models codex
|
|
291
|
-
```
|
|
292
|
-
|
|
293
|
-
Для OpenAI список моделей требует сохраненный ключ. OpenRouter берется из
|
|
294
|
-
публичного API OpenRouter. Ollama читает локальные модели через `api/tags`, а
|
|
295
|
-
если Ollama не запущен, показывает рекомендуемые локальные модели.
|
|
296
|
-
|
|
297
|
-
Проверить, какие данные попадут в AI-контекст:
|
|
298
|
-
|
|
299
|
-
```bash
|
|
300
|
-
iola ai context "школа 29"
|
|
301
|
-
iola ai context "1215067180" --json
|
|
302
|
-
iola ai context "улица Петрова"
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
Поиск контекста учитывает номера учреждений, ИНН и улицы.
|
|
306
|
-
|
|
307
|
-
AI-ответ строится по контексту из публичного API. Ассистент получает краткий
|
|
308
|
-
список источников контекста и должен указывать слой, название и ИНН, если
|
|
309
|
-
отвечает по конкретным организациям.
|
|
310
|
-
|
|
311
|
-
Ключи OpenAI/OpenRouter сохраняются локально на компьютере пользователя:
|
|
312
|
-
|
|
313
|
-
```text
|
|
314
|
-
%USERPROFILE%\.iola\secrets.json
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
Управление ключами:
|
|
318
|
-
|
|
319
|
-
```bash
|
|
320
|
-
iola ai key set openai
|
|
321
|
-
iola ai key set openrouter
|
|
322
|
-
iola ai key status
|
|
323
|
-
iola ai key delete openai
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
Если одновременно задана переменная окружения (`OPENAI_API_KEY` или
|
|
327
|
-
`OPENROUTER_API_KEY`) и сохранен локальный ключ, CLI использует переменную
|
|
328
|
-
окружения как более приоритетную.
|
|
329
|
-
|
|
330
|
-
Если данных в контексте недостаточно, ассистент должен сообщить об этом, а не
|
|
331
|
-
выдумывать сведения.
|
|
332
|
-
|
|
333
|
-
## Назначение
|
|
334
|
-
|
|
335
|
-
CLI дает прямой терминальный доступ к открытым данным городского округа,
|
|
336
|
-
командам подключения MCP/skill, AI-запросам через Ollama/OpenAI/OpenRouter,
|
|
337
|
-
интерактивному агентному режиму, экспорту данных и проверке обновлений.
|
|
338
|
-
|
|
339
|
-
## Локальная SQLite-БД
|
|
340
|
-
|
|
341
|
-
Подробнее: [Первый запуск](https://github.com/adm-iola/iola-cli/wiki/Первый-запуск) и
|
|
342
|
-
[Команды](https://github.com/adm-iola/iola-cli/wiki/Команды).
|
|
343
|
-
|
|
344
|
-
CLI использует встроенный `node:sqlite` и хранит локальную БД в профиле
|
|
345
|
-
пользователя:
|
|
346
|
-
|
|
347
|
-
```text
|
|
348
|
-
%USERPROFILE%\.iola\iola.db
|
|
349
|
-
```
|
|
350
|
-
|
|
351
|
-
БД создается автоматически при установке npm-пакета и при `iola init`.
|
|
352
|
-
В ней хранятся история AI-запросов, контекст ответа, ошибки выполнения,
|
|
353
|
-
служебная таблица версии схемы, а также подготовлены таблицы для кеша API и
|
|
354
|
-
сохраненных выборок.
|
|
355
|
-
|
|
356
|
-
Команды:
|
|
357
|
-
|
|
358
|
-
```bash
|
|
359
|
-
iola db status
|
|
360
|
-
iola db init
|
|
361
|
-
iola db reset
|
|
362
|
-
iola history --limit 20
|
|
363
|
-
iola history --json
|
|
364
|
-
iola history clear
|
|
365
|
-
iola sessions --limit 20
|
|
366
|
-
iola sessions clear
|
|
367
|
-
iola resume 1 "продолжи"
|
|
368
|
-
iola fork 1 "новая ветка разговора"
|
|
369
|
-
```
|
|
370
|
-
|
|
371
|
-
Ключи OpenAI/OpenRouter в SQLite не сохраняются. Они остаются в локальном
|
|
372
|
-
`secrets.json` или в переменных окружения.
|
|
373
|
-
|
|
374
|
-
## Feature flags, MCP и машинный вывод
|
|
375
|
-
|
|
376
|
-
Экспериментальные и системные возможности можно включать отдельно:
|
|
377
|
-
|
|
378
|
-
```bash
|
|
379
|
-
iola features list
|
|
380
|
-
iola features enable api-cache
|
|
381
|
-
iola features disable sqlite-history
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
MCP-интеграции:
|
|
385
|
-
|
|
386
|
-
```bash
|
|
387
|
-
iola mcp status
|
|
388
|
-
iola mcp list
|
|
389
|
-
iola mcp install codex
|
|
390
|
-
iola mcp remove codex
|
|
391
|
-
```
|
|
392
|
-
|
|
393
|
-
Для автоматизации доступны события, JSON-ответ и запись результата в файл:
|
|
394
|
-
|
|
395
|
-
```bash
|
|
396
|
-
iola ask "Найди школу 29" --events
|
|
397
|
-
iola ask "Найди школу 29" --schema json
|
|
398
|
-
iola ask "Найди школу 29" --output answer.txt
|
|
399
|
-
```
|
|
400
|
-
|
|
401
|
-
## Кеш, локальный поиск и выборки
|
|
402
|
-
|
|
403
|
-
API-ответы можно кешировать локально:
|
|
404
|
-
|
|
405
|
-
```bash
|
|
406
|
-
iola cache status
|
|
407
|
-
iola cache warm
|
|
408
|
-
iola cache clear
|
|
409
|
-
iola data schools --cache
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
Локальная синхронизация сохраняет открытые слои в SQLite и позволяет искать без
|
|
413
|
-
повторного обращения к API:
|
|
414
|
-
|
|
415
|
-
```bash
|
|
416
|
-
iola sync
|
|
417
|
-
iola sync status
|
|
418
|
-
iola diff
|
|
419
|
-
iola search "Петрова" --local
|
|
420
|
-
iola search "школа Петрова" --local --fts
|
|
421
|
-
iola data schools --local --search "лицей"
|
|
422
|
-
```
|
|
423
|
-
|
|
424
|
-
Сохраненные выборки:
|
|
425
|
-
|
|
426
|
-
```bash
|
|
427
|
-
iola data schools --where address=Петрова --columns name,address,phone --save schools-petrova
|
|
428
|
-
iola views
|
|
429
|
-
iola view schools-petrova
|
|
430
|
-
iola view schools-petrova --format csv --output schools-petrova.csv
|
|
431
|
-
iola views delete schools-petrova
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
Отчеты, backup и алиасы:
|
|
435
|
-
|
|
436
|
-
```bash
|
|
437
|
-
iola report schools-summary
|
|
438
|
-
iola report education-contacts
|
|
439
|
-
iola report missing-phones
|
|
440
|
-
iola report licenses
|
|
441
|
-
iola privacy
|
|
442
|
-
iola backup create
|
|
443
|
-
iola alias add petrova "data schools --where address=Петрова --columns name,address,phone"
|
|
444
|
-
iola petrova
|
|
445
|
-
iola run "выгрузи школы на Петрова в csv"
|
|
446
|
-
```
|
|
447
|
-
|
|
448
|
-
## Локальный tool-agent для слабых моделей
|
|
449
|
-
|
|
450
|
-
Подробнее: [Локальный инструментальный агент](https://github.com/adm-iola/iola-cli/wiki/Локальный-инструментальный-агент).
|
|
451
|
-
|
|
452
|
-
Для локального профиля Ollama доступен режим `--tools`. Он сделан специально
|
|
453
|
-
для маленьких моделей, которые хуже отвечают свободным текстом, но могут быть
|
|
454
|
-
полезны как планировщик действий.
|
|
455
|
-
|
|
456
|
-
В этом режиме CLI не доверяет модели напрямую. Модель предлагает JSON-план,
|
|
457
|
-
CLI валидирует список разрешенных tools и сам выполняет действия через
|
|
458
|
-
проверенные локальные функции:
|
|
459
|
-
|
|
460
|
-
- `search_local`
|
|
461
|
-
- `get_card`
|
|
462
|
-
- `export_data`
|
|
463
|
-
- `run_report`
|
|
464
|
-
- `save_view`
|
|
465
|
-
|
|
466
|
-
Пример:
|
|
467
|
-
|
|
468
|
-
```bash
|
|
469
54
|
iola ask "выгрузи школы на Петрова в csv" --profile local --tools
|
|
470
|
-
iola ask "найди детсады без телефона" --profile local --tools --reasoning verify
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
Режимы:
|
|
474
|
-
|
|
475
|
-
```bash
|
|
476
|
-
--reasoning fast # один план
|
|
477
|
-
--reasoning verify # план с валидацией результата
|
|
478
|
-
--reasoning vote # несколько вариантов, выбирается валидный
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
OpenAI, OpenRouter и Codex работают как раньше. `--tools` применяется только
|
|
482
|
-
к локальному Ollama-профилю, чтобы не менять поведение внешних провайдеров.
|
|
483
|
-
|
|
484
|
-
Карточки, качество данных и изменения:
|
|
485
|
-
|
|
486
|
-
```bash
|
|
487
|
-
iola card schools 1215067180
|
|
488
|
-
iola card "школа 29"
|
|
489
|
-
iola quality
|
|
490
|
-
iola quality schools
|
|
491
|
-
iola quality missing-phones
|
|
492
|
-
iola quality invalid-emails
|
|
493
|
-
iola quality duplicate-inn
|
|
494
|
-
iola sync status
|
|
495
|
-
iola diff
|
|
496
|
-
iola diff schools
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
## Permissions, memory, hooks и agents
|
|
500
|
-
|
|
501
|
-
Подробнее: [Локальный инструментальный агент](https://github.com/adm-iola/iola-cli/wiki/Локальный-инструментальный-агент)
|
|
502
|
-
и [Команды](https://github.com/adm-iola/iola-cli/wiki/Команды).
|
|
503
|
-
|
|
504
|
-
Permissions ограничивают, что может делать локальный tool-agent:
|
|
505
|
-
|
|
506
|
-
```bash
|
|
507
|
-
iola permissions list
|
|
508
|
-
iola permissions deny export_data
|
|
509
|
-
iola permissions allow export_data
|
|
510
55
|
```
|
|
511
56
|
|
|
512
|
-
|
|
513
|
-
в AI-контекст, кроме режима `--bare`:
|
|
57
|
+
Обновление:
|
|
514
58
|
|
|
515
59
|
```bash
|
|
516
|
-
|
|
517
|
-
iola
|
|
518
|
-
iola memory export
|
|
519
|
-
```
|
|
520
|
-
|
|
521
|
-
Hooks запускают локальные команды на события CLI:
|
|
522
|
-
|
|
523
|
-
```bash
|
|
524
|
-
iola hooks events
|
|
525
|
-
iola hooks add AfterSync "iola quality"
|
|
526
|
-
iola hooks list
|
|
527
|
-
```
|
|
528
|
-
|
|
529
|
-
Поддерживаемые события: `SessionStart`, `BeforeTool`, `AfterTool`,
|
|
530
|
-
`AfterSync`, `BeforeExport`, `SessionEnd`.
|
|
531
|
-
|
|
532
|
-
Agents - готовые режимы работы поверх AI-профилей и локальных инструментов:
|
|
533
|
-
|
|
534
|
-
```bash
|
|
535
|
-
iola agents list
|
|
536
|
-
iola agents run quality-checker "проверь школы"
|
|
537
|
-
iola agents run exporter "выгрузи школы на Петрова в csv"
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
Для скриптов доступны минимальные режимы:
|
|
541
|
-
|
|
542
|
-
```bash
|
|
543
|
-
iola ask "Найди школу 29" --bare
|
|
544
|
-
iola ask "Найди школу 29" --quiet
|
|
545
|
-
iola ask "Найди школу 29" --schema json --fail-on-empty
|
|
546
|
-
iola --debug --debug-file iola-debug.log doctor
|
|
60
|
+
npm install -g @iola_adm/iola-cli@latest
|
|
61
|
+
iola version --check
|
|
547
62
|
```
|
|
548
63
|
|
|
549
|
-
##
|
|
550
|
-
|
|
551
|
-
Подробные пользовательские инструкции вынесены в GitHub Wiki:
|
|
64
|
+
## Документация
|
|
552
65
|
|
|
553
66
|
- [Установка](https://github.com/adm-iola/iola-cli/wiki/Установка)
|
|
554
67
|
- [Первый запуск](https://github.com/adm-iola/iola-cli/wiki/Первый-запуск)
|
|
@@ -557,18 +70,11 @@ iola --debug --debug-file iola-debug.log doctor
|
|
|
557
70
|
- [Команды](https://github.com/adm-iola/iola-cli/wiki/Команды)
|
|
558
71
|
- [Решение проблем](https://github.com/adm-iola/iola-cli/wiki/Решение-проблем)
|
|
559
72
|
|
|
560
|
-
##
|
|
561
|
-
|
|
562
|
-
```bash
|
|
563
|
-
IOLA_API_BASE_URL=https://apiiola.yasg.ru/api/v1
|
|
564
|
-
IOLA_MCP_BASE_URL=https://apiiola.yasg.ru
|
|
565
|
-
```
|
|
566
|
-
|
|
567
|
-
Переменные окружения имеют приоритет над локальной конфигурацией. Локальные
|
|
568
|
-
endpoints можно настроить так:
|
|
73
|
+
## Возможности
|
|
569
74
|
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
75
|
+
- поиск и выгрузка открытых данных;
|
|
76
|
+
- локальная SQLite-БД, история, сессии и FTS-поиск;
|
|
77
|
+
- AI-профили для Ollama, OpenAI, OpenRouter и Codex CLI;
|
|
78
|
+
- локальный tool-agent для слабых моделей;
|
|
79
|
+
- permissions, memory, hooks и готовые agents;
|
|
80
|
+
- интеграция с публичным MCP-сервером Йошкар-Олы.
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -153,6 +153,7 @@ const COMMANDS = new Map([
|
|
|
153
153
|
["resume", resumeSession],
|
|
154
154
|
["fork", forkSession],
|
|
155
155
|
["features", handleFeatures],
|
|
156
|
+
["wiki", handleWiki],
|
|
156
157
|
["permissions", handlePermissions],
|
|
157
158
|
["memory", handleMemory],
|
|
158
159
|
["hooks", handleHooks],
|
|
@@ -248,6 +249,7 @@ Usage:
|
|
|
248
249
|
iola resume SESSION_ID [TEXT]
|
|
249
250
|
iola fork SESSION_ID [TEXT]
|
|
250
251
|
iola features list|enable|disable
|
|
252
|
+
iola wiki [open|links]
|
|
251
253
|
iola permissions list|allow|deny
|
|
252
254
|
iola memory show|add|set|clear|export
|
|
253
255
|
iola hooks list|add|delete|run
|
|
@@ -408,6 +410,11 @@ async function handleAgentLine(line, state) {
|
|
|
408
410
|
return false;
|
|
409
411
|
}
|
|
410
412
|
|
|
413
|
+
if (command === "wiki") {
|
|
414
|
+
await handleWiki(args);
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
|
|
411
418
|
if (command === "permissions") {
|
|
412
419
|
await handlePermissions(args);
|
|
413
420
|
return false;
|
|
@@ -537,6 +544,7 @@ async function handleAgentLine(line, state) {
|
|
|
537
544
|
resume: ["resume", args],
|
|
538
545
|
fork: ["fork", args],
|
|
539
546
|
features: ["features", args],
|
|
547
|
+
wiki: ["wiki", args],
|
|
540
548
|
permissions: ["permissions", args],
|
|
541
549
|
memory: ["memory", args],
|
|
542
550
|
hooks: ["hooks", args],
|
|
@@ -576,6 +584,7 @@ function printAgentHelp() {
|
|
|
576
584
|
/sessions
|
|
577
585
|
/resume SESSION_ID
|
|
578
586
|
/features list
|
|
587
|
+
/wiki
|
|
579
588
|
/permissions
|
|
580
589
|
/tools
|
|
581
590
|
/memory show
|
|
@@ -1189,6 +1198,47 @@ async function handleFeatures(args) {
|
|
|
1189
1198
|
throw new Error("Команды features: list, enable NAME, disable NAME.");
|
|
1190
1199
|
}
|
|
1191
1200
|
|
|
1201
|
+
async function handleWiki(args) {
|
|
1202
|
+
const [action = "links"] = args;
|
|
1203
|
+
const base = "https://github.com/adm-iola/iola-cli/wiki";
|
|
1204
|
+
const links = [
|
|
1205
|
+
["Главная", base],
|
|
1206
|
+
["Установка", `${base}/Установка`],
|
|
1207
|
+
["Первый запуск", `${base}/Первый-запуск`],
|
|
1208
|
+
["AI-профили", `${base}/AI-профили`],
|
|
1209
|
+
["Локальный инструментальный агент", `${base}/Локальный-инструментальный-агент`],
|
|
1210
|
+
["Команды", `${base}/Команды`],
|
|
1211
|
+
["Решение проблем", `${base}/Решение-проблем`],
|
|
1212
|
+
].map(([title, url]) => ({ title, url }));
|
|
1213
|
+
|
|
1214
|
+
if (action === "open") {
|
|
1215
|
+
await openUrl(base);
|
|
1216
|
+
return;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
if (action === "links" || action === "list" || action === "ls") {
|
|
1220
|
+
printTable(links, [
|
|
1221
|
+
["title", "Раздел"],
|
|
1222
|
+
["url", "Ссылка"],
|
|
1223
|
+
]);
|
|
1224
|
+
return;
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
throw new Error("Команды wiki: links, open.");
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
async function openUrl(url) {
|
|
1231
|
+
if (process.platform === "win32") {
|
|
1232
|
+
await runCommand("rundll32", ["url.dll,FileProtocolHandler", url], { inherit: false });
|
|
1233
|
+
return;
|
|
1234
|
+
}
|
|
1235
|
+
if (process.platform === "darwin") {
|
|
1236
|
+
await runCommand("open", [url], { inherit: false });
|
|
1237
|
+
return;
|
|
1238
|
+
}
|
|
1239
|
+
await runCommand("xdg-open", [url], { inherit: false });
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1192
1242
|
async function handlePermissions(args) {
|
|
1193
1243
|
const [action = "list", name] = args;
|
|
1194
1244
|
const config = await loadConfig();
|