@iola_adm/iola-cli 0.1.34 → 0.1.36

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
@@ -2,7 +2,7 @@
2
2
 
3
3
  # iola-cli
4
4
 
5
- CLI и AI-агент для работы с открытыми данными городского округа "Город Йошкар-Ола".
5
+ CLI и AI-агент городского округа "Город Йошкар-Ола".
6
6
 
7
7
  Подробная документация: [GitHub Wiki](https://github.com/adm-iola/iola-cli/wiki).
8
8
 
@@ -37,6 +37,15 @@ npx -y @iola_adm/iola-cli
37
37
 
38
38
  При первом запуске `iola` открывает мастер настройки, затем запускает интерактивный агент. Короткая справка: `iola help`, полный список команд: `iola commands`.
39
39
 
40
+ Повторный запуск мастера:
41
+
42
+ ```bash
43
+ iola wizard
44
+ iola setup wizard
45
+ ```
46
+
47
+ Мастер обновляет только выбранные разделы и не сбрасывает остальные настройки.
48
+
40
49
  Основные команды:
41
50
 
42
51
  ```bash
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@iola_adm/iola-cli",
3
- "version": "0.1.34",
4
- "description": "CLI и AI-агент для работы с открытыми данными городского округа Йошкар-Ола.",
3
+ "version": "0.1.36",
4
+ "description": "CLI и AI-агент городского округа Йошкар-Ола.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/adm-iola/iola-cli#readme",
7
7
  "repository": {
package/src/cli.js CHANGED
@@ -265,17 +265,18 @@ const DATASETS = {
265
265
  },
266
266
  };
267
267
  const BANNER = `\x1b[38;5;45m┌────────────────────────────────────────────────────────────────────────────┐
268
- │\x1b[38;5;51m ____ _ ___ ____ ____ ___ _____ _ _______ \x1b[38;5;45m│
269
- │\x1b[38;5;51m / ___| | |_ _| | _ \\| _ \\ / _ \\| ____| |/ /_ _| \x1b[38;5;45m│
270
- │\x1b[38;5;51m | | | | | |_____| |_) | |_) | | | | _| | ' / | | \x1b[38;5;45m│
271
- │\x1b[38;5;51m | |___| |___ | |_____| __/| _ <| |_| | |___| . \\ | | \x1b[38;5;45m│
272
- │\x1b[38;5;51m \\____|_____|___| |_| |_| \\_\\\\___/|_____|_|\\_\\ |_| \x1b[38;5;45m│
273
268
  │ │
274
- │\x1b[38;5;213m Й О Ш К А Р - О Л Ы \x1b[38;5;45m│
269
+ │\x1b[38;5;51m ____ _ ___ __ ______ ____ _ _ _ __ _ ____ \x1b[38;5;45m│
270
+ │\x1b[38;5;51m / ___| | |_ _| \\ \\ / / ___|| _ \\| | | | |/ / / \\ | _ \\ \x1b[38;5;45m│
271
+ │\x1b[38;5;51m | | | | | | _____ \\ V /\\___ \\| | | | |_| | ' / / _ \\ | |_) | \x1b[38;5;45m│
272
+ │\x1b[38;5;51m | |___| |___ | | |_____| | | ___) | |_| | _ | . \\ / ___ \\| _ < \x1b[38;5;45m│
273
+ │\x1b[38;5;51m \\____|_____|___| |_| |____/|____/|_| |_|_|\\_\\/_/ \\_\\_| \\_\\ \x1b[38;5;45m│
274
+ │ │
275
+ │\x1b[38;5;213m CLI-ЙОШКАР-ОЛА \x1b[38;5;45m│
275
276
  │ │
276
277
  │\x1b[38;5;250m открытые данные • MCP • локальный AI \x1b[38;5;45m│
277
278
  │ │
278
- │\x1b[38;5;82m > iola help \x1b[38;5;45m│
279
+ │\x1b[38;5;82m VERSION_LINE \x1b[38;5;45m│
279
280
  └────────────────────────────────────────────────────────────────────────────┘\x1b[0m`;
280
281
 
281
282
  const COMMANDS = new Map([
@@ -353,6 +354,7 @@ const COMMANDS = new Map([
353
354
  ["mcp-info", showMcpInfo],
354
355
  ["setup", setupClient],
355
356
  ["onboard", onboard],
357
+ ["wizard", onboard],
356
358
  ]);
357
359
 
358
360
  export async function main(argv) {
@@ -404,12 +406,12 @@ export async function main(argv) {
404
406
  }
405
407
 
406
408
  async function showHelp() {
407
- showBanner();
408
- console.log(`iola - локальный CLI и AI-агент для данных городского округа "Город Йошкар-Ола"
409
+ await showBanner();
410
+ console.log(`iola - CLI и AI-агент городского округа "Город Йошкар-Ола"
409
411
 
410
412
  Запуск:
411
413
  iola открыть интерактивный агент
412
- iola onboard мастер настройки
414
+ iola wizard мастер настройки
413
415
  iola ask "найди школу 29" задать вопрос
414
416
  iola search "Петрова" поиск по открытым данным
415
417
 
@@ -433,7 +435,7 @@ Requirements:
433
435
  }
434
436
 
435
437
  async function showCommands() {
436
- showBanner();
438
+ await showBanner();
437
439
  console.log(`iola - CLI для открытых данных городского округа "Город Йошкар-Ола"
438
440
 
439
441
  Usage:
@@ -533,6 +535,7 @@ Usage:
533
535
  iola mcp-info [--json]
534
536
  iola setup codex
535
537
  iola onboard
538
+ iola wizard
536
539
  iola version
537
540
 
538
541
  Environment:
@@ -552,7 +555,7 @@ async function runDefaultCli() {
552
555
 
553
556
  initDatabase();
554
557
  if (!isFirstRunCompleted()) {
555
- showBanner();
558
+ await showBanner();
556
559
  console.log("Первый запуск iola-cli. Сейчас откроется мастер настройки.");
557
560
  console.log("После мастера запустится интерактивный агент.");
558
561
  console.log("");
@@ -565,7 +568,7 @@ async function runDefaultCli() {
565
568
  }
566
569
 
567
570
  async function startAgent() {
568
- showBanner();
571
+ await showBanner();
569
572
  console.log("Интерактивный режим. Введите /help для списка команд, /exit для выхода.");
570
573
  await runHooks("SessionStart", { mode: "agent" });
571
574
 
@@ -895,7 +898,7 @@ async function handleAgentLine(line, state) {
895
898
  }
896
899
 
897
900
  if (command === "banner") {
898
- showBanner();
901
+ await showBanner();
899
902
  return false;
900
903
  }
901
904
 
@@ -960,6 +963,8 @@ async function handleAgentLine(line, state) {
960
963
  search: ["search", args],
961
964
  "mcp-info": ["mcp-info", args],
962
965
  setup: ["setup", args],
966
+ wizard: ["wizard", args],
967
+ onboard: ["onboard", args],
963
968
  }[command];
964
969
 
965
970
  if (!mapped) {
@@ -978,6 +983,7 @@ function printAgentHelp() {
978
983
  /help
979
984
  /health
980
985
  /doctor
986
+ /wizard
981
987
  /db status
982
988
  /sessions
983
989
  /resume SESSION_ID
@@ -1096,14 +1102,32 @@ function safePrompt(rl, closed = false) {
1096
1102
  }
1097
1103
  }
1098
1104
 
1099
- function showBanner() {
1105
+ async function showBanner(options = {}) {
1106
+ const version = getPackageVersion();
1107
+ const latest = options.skipUpdate ? null : await getLatestNpmVersion("@iola_adm/iola-cli");
1108
+ const updateAvailable = latest && compareVersions(latest, version) > 0;
1109
+ const versionLine = updateAvailable ? `v${version} -> v${latest} • npm install -g @iola_adm/iola-cli@latest` : `v${version} • iola help`;
1100
1110
  if (process.stdout.isTTY && process.env.NO_COLOR !== "1") {
1101
- console.log(BANNER);
1111
+ console.log(BANNER.replace("VERSION_LINE", padBannerLine(versionLine)));
1112
+ if (updateAvailable) {
1113
+ console.log(`Доступно обновление: v${version} -> v${latest}`);
1114
+ console.log("Обновить: npm install -g @iola_adm/iola-cli@latest");
1115
+ }
1102
1116
  return;
1103
1117
  }
1104
1118
 
1105
- console.log("CLI-ПРОЕКТ ЙОШКАР-ОЛЫ");
1119
+ console.log(`CLI-ЙОШКАР-ОЛА ${updateAvailable ? `v${version} -> v${latest}` : `v${version}`}`);
1106
1120
  console.log("открытые данные • MCP • локальный AI");
1121
+ if (updateAvailable) console.log("Обновить: npm install -g @iola_adm/iola-cli@latest");
1122
+ }
1123
+
1124
+ function padBannerLine(value) {
1125
+ const text = String(value).slice(0, 62);
1126
+ return `${text}${" ".repeat(Math.max(0, 62 - bannerVisibleLength(text)))}`;
1127
+ }
1128
+
1129
+ function bannerVisibleLength(value) {
1130
+ return [...String(value)].length;
1107
1131
  }
1108
1132
 
1109
1133
  function getPackageVersion() {
@@ -1386,7 +1410,7 @@ async function initCli(args = []) {
1386
1410
  const options = parseOptions(args);
1387
1411
  const nodeStatus = getNodeRequirementStatus();
1388
1412
 
1389
- showBanner();
1413
+ await showBanner();
1390
1414
  console.log("Проверка окружения");
1391
1415
  initDatabase();
1392
1416
  const dbStatus = getDbStatus();
@@ -1433,7 +1457,7 @@ async function handleAi(args) {
1433
1457
  const [subcommand = "help", ...rest] = args;
1434
1458
 
1435
1459
  if (subcommand === "help") {
1436
- showBanner();
1460
+ await showBanner();
1437
1461
  console.log(`AI-команды:
1438
1462
  iola ai ask TEXT [--provider ollama|openai|openrouter] [--model MODEL]
1439
1463
  iola ai context TEXT [--json]
@@ -3705,7 +3729,7 @@ async function aiSetup(args) {
3705
3729
  const [provider] = args;
3706
3730
 
3707
3731
  if (!provider) {
3708
- showBanner();
3732
+ await showBanner();
3709
3733
  const selected = await chooseAiProvider();
3710
3734
  await aiSetup([selected]);
3711
3735
  return;
@@ -6314,10 +6338,15 @@ async function searchAll(args) {
6314
6338
  }
6315
6339
 
6316
6340
  async function setupClient(args) {
6317
- const [client] = args;
6341
+ const [client, ...rest] = args;
6342
+
6343
+ if (client === "wizard" || client === "onboard") {
6344
+ await onboard(rest);
6345
+ return;
6346
+ }
6318
6347
 
6319
6348
  if (client !== "codex") {
6320
- throw new Error('Only "iola setup codex" is available in this first release.');
6349
+ throw new Error('Доступно: iola setup codex, iola setup wizard.');
6321
6350
  }
6322
6351
 
6323
6352
  await runCommand("codex", ["mcp", "add", "yoshkarOlaPublicData", "--url", `${await getMcpBaseUrl()}/mcp`], { inherit: true });
@@ -6327,7 +6356,10 @@ async function setupClient(args) {
6327
6356
 
6328
6357
  async function onboard(args = []) {
6329
6358
  const options = parseOptions(args);
6330
- showBanner();
6359
+ await showBanner();
6360
+ console.log("Мастер настройки iola-cli.");
6361
+ console.log("Повторный запуск обновляет только выбранные разделы и не сбрасывает остальные настройки.");
6362
+ console.log("");
6331
6363
  initDatabase();
6332
6364
  await handleConfig(["validate"]);
6333
6365
  await doctor(["--summary"]);
@@ -6360,6 +6392,16 @@ async function onboard(args = []) {
6360
6392
  await aiSetup(["codex"]);
6361
6393
  }
6362
6394
  if (components.includes("codex-mcp")) await setupClient(["codex"]);
6395
+ if (components.includes("browser")) {
6396
+ const status = await getBrowserStatus();
6397
+ if (status.installed === "yes") console.log("Browser runtime уже установлен.");
6398
+ else await installBrowserRuntime();
6399
+ }
6400
+ if (components.includes("gosuslugi")) {
6401
+ await handleGosuslugi(["terms"]);
6402
+ if (process.stdin.isTTY) await handleGosuslugi(["consent"]);
6403
+ console.log("Параметры подключения можно указать командой: iola gosuslugi configure --auth-url URL --token-url URL --client-id ID --scope openid");
6404
+ }
6363
6405
  if (components.includes("index")) {
6364
6406
  await setFilesMode("read-only", await loadConfig());
6365
6407
  console.log("Индекс документов можно запустить командой: iola index folder ./docs");
@@ -6380,6 +6422,8 @@ async function chooseOnboardComponents() {
6380
6422
  console.log("6. Codex CLI");
6381
6423
  console.log("7. MCP для Codex");
6382
6424
  console.log("8. Индекс локальных документов");
6425
+ console.log("9. Browser runtime");
6426
+ console.log("10. Личное подключение Госуслуг");
6383
6427
  console.log("");
6384
6428
  const rl = readline.createInterface({ input, output });
6385
6429
  try {
@@ -6394,6 +6438,8 @@ async function chooseOnboardComponents() {
6394
6438
  6: "codex",
6395
6439
  7: "codex-mcp",
6396
6440
  8: "index",
6441
+ 9: "browser",
6442
+ 10: "gosuslugi",
6397
6443
  };
6398
6444
  return [...selected].map((item) => map[item] || item).filter(Boolean);
6399
6445
  } finally {
package/wiki/Home.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # iola-cli
2
2
 
3
- `iola-cli` - терминальный инструмент и AI-агент для работы с открытыми данными городского округа "Город Йошкар-Ола".
3
+ `iola-cli` - CLI и AI-агент городского округа "Город Йошкар-Ола".
4
4
 
5
5
  Основные сценарии:
6
6
 
@@ -31,6 +31,15 @@ iola help
31
31
  iola commands
32
32
  ```
33
33
 
34
+ Повторный запуск мастера:
35
+
36
+ ```bash
37
+ iola wizard
38
+ iola setup wizard
39
+ ```
40
+
41
+ Мастер обновляет только выбранные разделы и не сбрасывает остальные настройки.
42
+
34
43
  Диагностика:
35
44
 
36
45
  ```bash
@@ -1,6 +1,6 @@
1
1
  # Платформа агента
2
2
 
3
- `iola-cli` можно использовать не только как набор команд, но и как локальную платформу агента для работы с открытыми данными городского округа "Город Йошкар-Ола".
3
+ `iola-cli` можно использовать не только как набор команд, но и как локальную платформу AI-агента городского округа "Город Йошкар-Ола".
4
4
 
5
5
  ## MCP server
6
6
 
@@ -101,4 +101,3 @@ iola review data
101
101
  iola review docs ./docs
102
102
  iola review report report.docx
103
103
  ```
104
-