@iola_adm/iola-cli 0.1.35 → 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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/cli.js +37 -19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iola_adm/iola-cli",
3
- "version": "0.1.35",
3
+ "version": "0.1.36",
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
@@ -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 C L I - Й О Ш К А Р - О Л А \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([
@@ -405,7 +406,7 @@ export async function main(argv) {
405
406
  }
406
407
 
407
408
  async function showHelp() {
408
- showBanner();
409
+ await showBanner();
409
410
  console.log(`iola - CLI и AI-агент городского округа "Город Йошкар-Ола"
410
411
 
411
412
  Запуск:
@@ -434,7 +435,7 @@ Requirements:
434
435
  }
435
436
 
436
437
  async function showCommands() {
437
- showBanner();
438
+ await showBanner();
438
439
  console.log(`iola - CLI для открытых данных городского округа "Город Йошкар-Ола"
439
440
 
440
441
  Usage:
@@ -554,7 +555,7 @@ async function runDefaultCli() {
554
555
 
555
556
  initDatabase();
556
557
  if (!isFirstRunCompleted()) {
557
- showBanner();
558
+ await showBanner();
558
559
  console.log("Первый запуск iola-cli. Сейчас откроется мастер настройки.");
559
560
  console.log("После мастера запустится интерактивный агент.");
560
561
  console.log("");
@@ -567,7 +568,7 @@ async function runDefaultCli() {
567
568
  }
568
569
 
569
570
  async function startAgent() {
570
- showBanner();
571
+ await showBanner();
571
572
  console.log("Интерактивный режим. Введите /help для списка команд, /exit для выхода.");
572
573
  await runHooks("SessionStart", { mode: "agent" });
573
574
 
@@ -897,7 +898,7 @@ async function handleAgentLine(line, state) {
897
898
  }
898
899
 
899
900
  if (command === "banner") {
900
- showBanner();
901
+ await showBanner();
901
902
  return false;
902
903
  }
903
904
 
@@ -1101,15 +1102,32 @@ function safePrompt(rl, closed = false) {
1101
1102
  }
1102
1103
  }
1103
1104
 
1104
- function showBanner() {
1105
+ async function showBanner(options = {}) {
1105
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`;
1106
1110
  if (process.stdout.isTTY && process.env.NO_COLOR !== "1") {
1107
- console.log(BANNER.replace("> iola help", `v${version} • iola help`));
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
+ }
1108
1116
  return;
1109
1117
  }
1110
1118
 
1111
- console.log(`CLI-ЙОШКАР-ОЛА v${version}`);
1119
+ console.log(`CLI-ЙОШКАР-ОЛА ${updateAvailable ? `v${version} -> v${latest}` : `v${version}`}`);
1112
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;
1113
1131
  }
1114
1132
 
1115
1133
  function getPackageVersion() {
@@ -1392,7 +1410,7 @@ async function initCli(args = []) {
1392
1410
  const options = parseOptions(args);
1393
1411
  const nodeStatus = getNodeRequirementStatus();
1394
1412
 
1395
- showBanner();
1413
+ await showBanner();
1396
1414
  console.log("Проверка окружения");
1397
1415
  initDatabase();
1398
1416
  const dbStatus = getDbStatus();
@@ -1439,7 +1457,7 @@ async function handleAi(args) {
1439
1457
  const [subcommand = "help", ...rest] = args;
1440
1458
 
1441
1459
  if (subcommand === "help") {
1442
- showBanner();
1460
+ await showBanner();
1443
1461
  console.log(`AI-команды:
1444
1462
  iola ai ask TEXT [--provider ollama|openai|openrouter] [--model MODEL]
1445
1463
  iola ai context TEXT [--json]
@@ -3711,7 +3729,7 @@ async function aiSetup(args) {
3711
3729
  const [provider] = args;
3712
3730
 
3713
3731
  if (!provider) {
3714
- showBanner();
3732
+ await showBanner();
3715
3733
  const selected = await chooseAiProvider();
3716
3734
  await aiSetup([selected]);
3717
3735
  return;
@@ -6338,7 +6356,7 @@ async function setupClient(args) {
6338
6356
 
6339
6357
  async function onboard(args = []) {
6340
6358
  const options = parseOptions(args);
6341
- showBanner();
6359
+ await showBanner();
6342
6360
  console.log("Мастер настройки iola-cli.");
6343
6361
  console.log("Повторный запуск обновляет только выбранные разделы и не сбрасывает остальные настройки.");
6344
6362
  console.log("");