@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 init
30
- iola --help
29
+ iola
31
30
  ```
32
31
 
33
32
  Без глобальной установки:
34
33
 
35
34
  ```bash
36
- npx -y @iola_adm/iola-cli init
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iola_adm/iola-cli",
3
- "version": "0.1.33",
3
+ "version": "0.1.34",
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
@@ -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 || argv[0] === "--help" || argv[0] === "-h") {
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
- await ensureArchiveTool({ install: true });
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
 
@@ -4,6 +4,8 @@
4
4
 
5
5
  ```bash
6
6
  iola --help
7
+ iola help
8
+ iola commands
7
9
  iola init
8
10
  iola doctor
9
11
  iola doctor --fix
@@ -3,16 +3,33 @@
3
3
  Первый запуск:
4
4
 
5
5
  ```bash
6
- iola init
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
- - Ollama и подходящую локальную модель;
15
- - обновления npm-пакета.
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