@iola_adm/iola-cli 0.1.33 → 0.1.34
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
|
@@ -26,16 +26,17 @@ npm --version
|
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
28
|
npm install -g @iola_adm/iola-cli
|
|
29
|
-
iola
|
|
30
|
-
iola --help
|
|
29
|
+
iola
|
|
31
30
|
```
|
|
32
31
|
|
|
33
32
|
Без глобальной установки:
|
|
34
33
|
|
|
35
34
|
```bash
|
|
36
|
-
npx -y @iola_adm/iola-cli
|
|
35
|
+
npx -y @iola_adm/iola-cli
|
|
37
36
|
```
|
|
38
37
|
|
|
38
|
+
При первом запуске `iola` открывает мастер настройки, затем запускает интерактивный агент. Короткая справка: `iola help`, полный список команд: `iola commands`.
|
|
39
|
+
|
|
39
40
|
Основные команды:
|
|
40
41
|
|
|
41
42
|
```bash
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -280,6 +280,7 @@ const BANNER = `\x1b[38;5;45m┌────────────────
|
|
|
280
280
|
|
|
281
281
|
const COMMANDS = new Map([
|
|
282
282
|
["help", showHelp],
|
|
283
|
+
["commands", showCommands],
|
|
283
284
|
["version", showVersion],
|
|
284
285
|
["update", checkUpdate],
|
|
285
286
|
["doctor", doctor],
|
|
@@ -355,7 +356,12 @@ const COMMANDS = new Map([
|
|
|
355
356
|
]);
|
|
356
357
|
|
|
357
358
|
export async function main(argv) {
|
|
358
|
-
if (argv.length === 0
|
|
359
|
+
if (argv.length === 0) {
|
|
360
|
+
await runDefaultCli();
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
if (argv[0] === "--help" || argv[0] === "-h") {
|
|
359
365
|
await showHelp();
|
|
360
366
|
return;
|
|
361
367
|
}
|
|
@@ -398,6 +404,35 @@ export async function main(argv) {
|
|
|
398
404
|
}
|
|
399
405
|
|
|
400
406
|
async function showHelp() {
|
|
407
|
+
showBanner();
|
|
408
|
+
console.log(`iola - локальный CLI и AI-агент для данных городского округа "Город Йошкар-Ола"
|
|
409
|
+
|
|
410
|
+
Запуск:
|
|
411
|
+
iola открыть интерактивный агент
|
|
412
|
+
iola onboard мастер настройки
|
|
413
|
+
iola ask "найди школу 29" задать вопрос
|
|
414
|
+
iola search "Петрова" поиск по открытым данным
|
|
415
|
+
|
|
416
|
+
Основные разделы:
|
|
417
|
+
iola agent интерактивный режим
|
|
418
|
+
iola ai setup настройка AI-профиля
|
|
419
|
+
iola browser status браузерный runtime
|
|
420
|
+
iola gosuslugi status личное подключение Госуслуг
|
|
421
|
+
iola mcp status MCP-подключение
|
|
422
|
+
iola doctor диагностика
|
|
423
|
+
iola wiki документация
|
|
424
|
+
|
|
425
|
+
Справка:
|
|
426
|
+
iola help короткая справка
|
|
427
|
+
iola commands полный список команд
|
|
428
|
+
iola version версия
|
|
429
|
+
|
|
430
|
+
Requirements:
|
|
431
|
+
Node.js >= ${MIN_NODE_VERSION}
|
|
432
|
+
`);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
async function showCommands() {
|
|
401
436
|
showBanner();
|
|
402
437
|
console.log(`iola - CLI для открытых данных городского округа "Город Йошкар-Ола"
|
|
403
438
|
|
|
@@ -509,6 +544,26 @@ Requirements:
|
|
|
509
544
|
`);
|
|
510
545
|
}
|
|
511
546
|
|
|
547
|
+
async function runDefaultCli() {
|
|
548
|
+
const nodeStatus = getNodeRequirementStatus();
|
|
549
|
+
if (!nodeStatus.ok) {
|
|
550
|
+
throw new Error(`Нужен Node.js ${MIN_NODE_VERSION} или новее. Сейчас: ${nodeStatus.current}. Запустите: iola init --upgrade-node`);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
initDatabase();
|
|
554
|
+
if (!isFirstRunCompleted()) {
|
|
555
|
+
showBanner();
|
|
556
|
+
console.log("Первый запуск iola-cli. Сейчас откроется мастер настройки.");
|
|
557
|
+
console.log("После мастера запустится интерактивный агент.");
|
|
558
|
+
console.log("");
|
|
559
|
+
await onboard([]);
|
|
560
|
+
markFirstRunCompleted();
|
|
561
|
+
console.log("");
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
await startAgent([]);
|
|
565
|
+
}
|
|
566
|
+
|
|
512
567
|
async function startAgent() {
|
|
513
568
|
showBanner();
|
|
514
569
|
console.log("Интерактивный режим. Введите /help для списка команд, /exit для выхода.");
|
|
@@ -4421,6 +4476,34 @@ function getDbStatus() {
|
|
|
4421
4476
|
}
|
|
4422
4477
|
}
|
|
4423
4478
|
|
|
4479
|
+
function getMetaValue(key) {
|
|
4480
|
+
initDatabase();
|
|
4481
|
+
const db = openDatabase();
|
|
4482
|
+
try {
|
|
4483
|
+
return db.prepare("SELECT value FROM meta WHERE key = ?").get(key)?.value || null;
|
|
4484
|
+
} finally {
|
|
4485
|
+
db.close();
|
|
4486
|
+
}
|
|
4487
|
+
}
|
|
4488
|
+
|
|
4489
|
+
function setMetaValue(key, value) {
|
|
4490
|
+
initDatabase();
|
|
4491
|
+
const db = openDatabase();
|
|
4492
|
+
try {
|
|
4493
|
+
db.prepare("INSERT INTO meta(key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(key, String(value));
|
|
4494
|
+
} finally {
|
|
4495
|
+
db.close();
|
|
4496
|
+
}
|
|
4497
|
+
}
|
|
4498
|
+
|
|
4499
|
+
function isFirstRunCompleted() {
|
|
4500
|
+
return getMetaValue("first_run_completed") === "1";
|
|
4501
|
+
}
|
|
4502
|
+
|
|
4503
|
+
function markFirstRunCompleted() {
|
|
4504
|
+
setMetaValue("first_run_completed", "1");
|
|
4505
|
+
}
|
|
4506
|
+
|
|
4424
4507
|
function recordAskHistory({ question, answer, providerConfig, dataContext, error, sessionId }) {
|
|
4425
4508
|
try {
|
|
4426
4509
|
initDatabase();
|
|
@@ -6248,7 +6331,14 @@ async function onboard(args = []) {
|
|
|
6248
6331
|
initDatabase();
|
|
6249
6332
|
await handleConfig(["validate"]);
|
|
6250
6333
|
await doctor(["--summary"]);
|
|
6251
|
-
|
|
6334
|
+
if (options.full || options.install) {
|
|
6335
|
+
await ensureArchiveTool({ install: true });
|
|
6336
|
+
} else {
|
|
6337
|
+
const archiveTool = await findCommand(["7z", "7zz", "7za"], ["--help"]);
|
|
6338
|
+
if (!archiveTool) {
|
|
6339
|
+
console.log("7-Zip не найден. Для архивов можно позже запустить: iola archive doctor");
|
|
6340
|
+
}
|
|
6341
|
+
}
|
|
6252
6342
|
|
|
6253
6343
|
const components = options.yes ? ["workspace", "policy", "ollama", "openai", "openrouter", "codex", "codex-mcp", "index"] : await chooseOnboardComponents();
|
|
6254
6344
|
if (components.includes("workspace")) await handleWorkspace(["init"]);
|
|
@@ -6274,6 +6364,7 @@ async function onboard(args = []) {
|
|
|
6274
6364
|
await setFilesMode("read-only", await loadConfig());
|
|
6275
6365
|
console.log("Индекс документов можно запустить командой: iola index folder ./docs");
|
|
6276
6366
|
}
|
|
6367
|
+
markFirstRunCompleted();
|
|
6277
6368
|
console.log("Onboard завершен.");
|
|
6278
6369
|
}
|
|
6279
6370
|
|
|
@@ -3,16 +3,33 @@
|
|
|
3
3
|
Первый запуск:
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
iola
|
|
6
|
+
iola
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
При первом запуске команда откроет мастер настройки, а затем запустит интерактивный агент.
|
|
10
|
+
|
|
11
|
+
Мастер проверит:
|
|
10
12
|
|
|
11
13
|
- Node.js и npm;
|
|
12
14
|
- локальную SQLite-БД;
|
|
13
15
|
- доступность публичного API/MCP;
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
+
- обновления npm-пакета;
|
|
17
|
+
- выбранные компоненты: workspace, policy, локальную модель, API-ключи, Codex, MCP, индекс документов.
|
|
18
|
+
|
|
19
|
+
Обычный последующий запуск:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
iola
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Команда сразу откроет интерактивный CLI-агент.
|
|
26
|
+
|
|
27
|
+
Справка:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
iola help
|
|
31
|
+
iola commands
|
|
32
|
+
```
|
|
16
33
|
|
|
17
34
|
Диагностика:
|
|
18
35
|
|