@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.
Files changed (3) hide show
  1. package/README.md +25 -519
  2. package/package.json +1 -1
  3. 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
- Проект использует публичные endpoints:
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 и npm:
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` или новее. Это нужно для встроенной SQLite-БД
24
- `node:sqlite`, которую CLI будет использовать для локальной истории, кеша и
25
- сессий без дополнительных нативных зависимостей.
23
+ Нужен Node.js `22.5.0` или новее.
26
24
 
27
- Если Node.js не установлен или версия ниже `22.5.0`:
25
+ Установка и первый запуск:
28
26
 
29
27
  ```bash
30
- # Windows
31
- winget install OpenJS.NodeJS.LTS
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
- npx -y @iola_adm/iola-cli help
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
- Memory хранит пользовательские предпочтения в локальной SQLite-БД и добавляет их
513
- в AI-контекст, кроме режима `--bare`:
57
+ Обновление:
514
58
 
515
59
  ```bash
516
- iola memory add "Если найден конкретный объект, показывай ИНН"
517
- iola memory show
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
- ## Wiki
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
- ```bash
571
- iola config set api.baseUrl https://apiiola.yasg.ru/api/v1
572
- iola config set api.mcpBaseUrl https://apiiola.yasg.ru
573
- iola config get
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iola_adm/iola-cli",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
4
4
  "description": "CLI и AI-агент для работы с открытыми данными городского округа Йошкар-Ола.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/adm-iola/iola-cli#readme",
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();