@iola_adm/iola-cli 0.2.37 → 0.2.38

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iola_adm/iola-cli",
3
- "version": "0.2.37",
3
+ "version": "0.2.38",
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
@@ -10062,6 +10062,15 @@ async function askText(question) {
10062
10062
  }
10063
10063
  }
10064
10064
 
10065
+ async function askYesNo(question, defaultValue = false) {
10066
+ if (!process.stdin.isTTY) return Boolean(defaultValue);
10067
+ const answer = (await askText(question)).trim().toLocaleLowerCase("ru-RU");
10068
+ if (!answer) return Boolean(defaultValue);
10069
+ if (answer === "y" || answer === "yes" || answer === "д" || answer === "да") return true;
10070
+ if (answer === "n" || answer === "no" || answer === "н" || answer === "нет") return false;
10071
+ return Boolean(defaultValue);
10072
+ }
10073
+
10065
10074
  async function aiContext(args) {
10066
10075
  const options = parseOptions(args);
10067
10076
  const query = options._.join(" ").trim();
@@ -16465,9 +16474,6 @@ async function onboard(args = []) {
16465
16474
  await chooseAndSaveApiModel("openrouter");
16466
16475
  }
16467
16476
  }
16468
- if (components.includes("yandex-cloud")) {
16469
- await setupYandexCloudConnector({});
16470
- }
16471
16477
  if (components.includes("gigachat")) {
16472
16478
  await aiSetup(["gigachat"]);
16473
16479
  if (process.stdin.isTTY) {
@@ -16486,6 +16492,9 @@ async function onboard(args = []) {
16486
16492
  if (components.includes("yandex")) {
16487
16493
  await setupYandexConnector([]);
16488
16494
  }
16495
+ if (components.includes("yandex-cloud")) {
16496
+ await setupYandexCloudConnector({});
16497
+ }
16489
16498
  if (components.includes("codex")) {
16490
16499
  await installCodexIfMissing();
16491
16500
  await aiSetup(["codex"]);
@@ -16524,19 +16533,18 @@ async function chooseOnboardComponents(status = null) {
16524
16533
  1: "workspace",
16525
16534
  2: "policy",
16526
16535
  3: "iola",
16527
- 4: "yandex-cloud",
16528
- 5: "gigachat",
16529
- 6: "openai",
16530
- 7: "openrouter",
16531
- 8: "codex",
16532
- 9: "codex-mcp",
16533
- 10: "archive",
16534
- 11: "index",
16535
- 12: "browser",
16536
- 13: "ollama",
16537
- 14: "cloud",
16538
- 15: "yandex",
16539
- 16: "yandex",
16536
+ 4: "gigachat",
16537
+ 5: "openai",
16538
+ 6: "openrouter",
16539
+ 7: "codex",
16540
+ 8: "codex-mcp",
16541
+ 9: "archive",
16542
+ 10: "index",
16543
+ 11: "browser",
16544
+ 12: "ollama",
16545
+ 13: "yandex",
16546
+ 14: "yandex-cloud",
16547
+ 15: "yandex-cloud",
16540
16548
  };
16541
16549
  return [...selected].map((item) => map[item] || item).filter(Boolean);
16542
16550
  } finally {
@@ -16559,7 +16567,6 @@ async function getOnboardComponentStatus() {
16559
16567
  getYandexGeocoderKey(),
16560
16568
  loadSecrets(),
16561
16569
  ]);
16562
- const cloudSecrets = secrets.cloud || {};
16563
16570
  const workspaceReady = existsSync(PROJECT_CONTEXT_FILE) || existsSync(PROJECT_CONTEXT_DIR_FILE) || existsSync(PROJECT_IOLA_DIR);
16564
16571
  const policyReady = (config.toolsets?.enabled || []).includes("analyst");
16565
16572
  return {
@@ -16576,7 +16583,6 @@ async function getOnboardComponentStatus() {
16576
16583
  archive: Boolean(archive),
16577
16584
  index: false,
16578
16585
  browser: browser.installed === "yes",
16579
- cloud: Object.keys(cloudSecrets).length > 0,
16580
16586
  yandex: isYandexConnectorFullyConnected(secrets),
16581
16587
  };
16582
16588
  }
@@ -16586,18 +16592,17 @@ function onboardComponentRows(status) {
16586
16592
  ["1", "workspace", "workspace и контекст", "рабочая папка, IOLA.md и .iola/context.md"],
16587
16593
  ["2", "policy", "policy analyst", "разрешения и профиль аналитика"],
16588
16594
  ["3", "iola", "IOLA локальная модель", "локальная модель найдена"],
16589
- ["4", "yandex-cloud", "Yandex Cloud Connector", "геокодинг и YandexGPT"],
16590
- ["5", "gigachat", "GigaChat API", "authorization key сохранен или есть в env"],
16591
- ["6", "openai", "OpenAI API", "API-ключ сохранен или есть в env"],
16592
- ["7", "openrouter", "OpenRouter API", "API-ключ сохранен или есть в env"],
16593
- ["8", "codex", "Codex CLI", "CLI установлен и авторизация найдена"],
16594
- ["9", "codex-mcp", "MCP для Codex", "можно переустановить/обновить"],
16595
- ["10", "archive", "7-Zip / архивы", "архиватор найден"],
16596
- ["11", "index", "Индекс локальных документов", "настраивается под выбранную папку"],
16597
- ["12", "browser", "Browser runtime", "Playwright/Chromium установлен"],
16598
- ["13", "ollama", "Ollama", "опциональный локальный runtime"],
16599
- ["14", "cloud", "Облачный диск", "Яндекс Диск или Облако Mail.ru"],
16600
- ["15", "yandex", "Yandex Connector", "единый вход и категории сервисов Яндекса"],
16595
+ ["4", "gigachat", "GigaChat API", "authorization key сохранен или есть в env"],
16596
+ ["5", "openai", "OpenAI API", "API-ключ сохранен или есть в env"],
16597
+ ["6", "openrouter", "OpenRouter API", "API-ключ сохранен или есть в env"],
16598
+ ["7", "codex", "Codex CLI", "CLI установлен и авторизация найдена"],
16599
+ ["8", "codex-mcp", "MCP для Codex", "можно переустановить/обновить"],
16600
+ ["9", "archive", "7-Zip / архивы", "архиватор найден"],
16601
+ ["10", "index", "Индекс локальных документов", "настраивается под выбранную папку"],
16602
+ ["11", "browser", "Browser runtime", "Playwright/Chromium установлен"],
16603
+ ["12", "ollama", "Ollama", "опциональный локальный runtime"],
16604
+ ["13", "yandex", "Yandex Connector", "единый вход и категории сервисов Яндекса"],
16605
+ ["14", "yandex-cloud", "Yandex Cloud Connector", "геокодинг и YandexGPT"],
16601
16606
  ];
16602
16607
  return rows.map(([number, key, title, hint]) => ({ number, key, title, hint, status: status[key] ? "готово" : "не настроено" }));
16603
16608
  }
@@ -16607,12 +16612,12 @@ function defaultOnboardSelection(status) {
16607
16612
  if (!status.workspace) defaults.push("1");
16608
16613
  if (!status.policy) defaults.push("2");
16609
16614
  if (!status.iola) defaults.push("3");
16610
- if (!status.archive) defaults.push("10");
16615
+ if (!status.archive) defaults.push("9");
16611
16616
  return defaults.length ? defaults : ["1", "2"];
16612
16617
  }
16613
16618
 
16614
16619
  function defaultOnboardComponents(status) {
16615
- const map = { 1: "workspace", 2: "policy", 3: "iola", 4: "yandex-cloud", 5: "gigachat", 6: "openai", 7: "openrouter", 8: "codex", 9: "codex-mcp", 10: "archive", 11: "index", 12: "browser", 13: "ollama", 14: "cloud", 15: "yandex", 16: "yandex" };
16620
+ const map = { 1: "workspace", 2: "policy", 3: "iola", 4: "gigachat", 5: "openai", 6: "openrouter", 7: "codex", 8: "codex-mcp", 9: "archive", 10: "index", 11: "browser", 12: "ollama", 13: "yandex", 14: "yandex-cloud", 15: "yandex-cloud" };
16616
16621
  return defaultOnboardSelection(status).map((item) => map[item]).filter(Boolean);
16617
16622
  }
16618
16623
 
@@ -18,7 +18,7 @@ iola master
18
18
  В мастере выберите:
19
19
 
20
20
  ```text
21
- 4. Yandex Cloud Connector - геокодинг и YandexGPT
21
+ 14. Yandex Cloud Connector - геокодинг и YandexGPT
22
22
  ```
23
23
 
24
24
  CLI откроет консоль Yandex Cloud и попросит сохранить:
@@ -30,49 +30,39 @@ iola master
30
30
 
31
31
  После настройки локальную модель можно менять в интерактивном агенте через `/model`. Помимо штатной IOLA-модели можно выбрать установленную или рекомендуемую Ollama-модель, либо вручную ввести имя любой модели из библиотеки Ollama.
32
32
 
33
- ### 4. Yandex Cloud Connector
34
-
35
- Настраивает Yandex Cloud Connector: геокодер и, при необходимости, YandexGPT.
36
-
37
- Геокодер включается по умолчанию. Он нужен для geo-skills и deeplink Яндекс Go. YandexGPT можно включить сразу или выбрать позже через `/model`.
38
-
39
- Ключи сохраняются локально у пользователя. Российский AI-провайдер вызывается напрямую, без gateway/proxy.
40
-
41
- Инструкция: [Yandex Cloud Connector](Yandex-Cloud-Connector).
42
-
43
- ### 5. GigaChat API
33
+ ### 4. GigaChat API
44
34
 
45
35
  Настраивает профиль GigaChat и сохраняет authorization key локально у пользователя.
46
36
 
47
37
  Российский провайдер вызывается напрямую, без gateway/proxy.
48
38
 
49
- ### 6. OpenAI API
39
+ ### 5. OpenAI API
50
40
 
51
41
  Настраивает профиль OpenAI и сохраняет API-ключ локально у пользователя.
52
42
 
53
43
  После сохранения ключа мастер предлагает выбрать модель из доступного списка.
54
44
 
55
- ### 7. OpenRouter API
45
+ ### 6. OpenRouter API
56
46
 
57
47
  Настраивает профиль OpenRouter и сохраняет API-ключ локально у пользователя.
58
48
 
59
49
  После сохранения ключа мастер предлагает выбрать разработчика моделей OpenRouter, а затем одну из свежих моделей для текстовой работы. В списке моделей `0` возвращает к выбору разработчика.
60
50
 
61
- ### 8. Codex CLI
51
+ ### 7. Codex CLI
62
52
 
63
53
  Проверяет наличие Codex CLI и авторизации. Если Codex уже установлен и вход выполнен, пункт показывается как `готово`.
64
54
 
65
- ### 9. MCP для Codex
55
+ ### 8. MCP для Codex
66
56
 
67
57
  Добавляет MCP-сервер открытых данных Йошкар-Олы в Codex. Этот пункт можно запускать повторно для обновления подключения.
68
58
 
69
- ### 10. 7-Zip / архивы
59
+ ### 9. 7-Zip / архивы
70
60
 
71
61
  Проверяет 7-Zip. Если архиватор не найден, мастер устанавливает его.
72
62
 
73
63
  Нужен для чтения, распаковки, сборки и индексирования архивов.
74
64
 
75
- ### 11. Индекс локальных документов
65
+ ### 10. Индекс локальных документов
76
66
 
77
67
  Готовит режим чтения файлов и подсказывает команду индексирования локальной папки:
78
68
 
@@ -80,28 +70,17 @@ iola master
80
70
  iola index folder ./docs
81
71
  ```
82
72
 
83
- ### 12. Browser runtime
73
+ ### 11. Browser runtime
84
74
 
85
75
  Проверяет Playwright/Chromium runtime. Нужен для браузерного агента.
86
76
 
87
- ### 13. Ollama
77
+ ### 12. Ollama
88
78
 
89
79
  Опциональный локальный runtime для выбора сторонних моделей из библиотеки Ollama.
90
80
 
91
81
  Если runtime уже установлен, пункт показывается как `готово`.
92
82
 
93
- ### 14. Облачный диск
94
-
95
- Подключает личный облачный диск пользователя:
96
-
97
- - Яндекс Диск;
98
- - Облако Mail.ru.
99
-
100
- Секреты сохраняются локально в `~/.iola/secrets.json`. Резервные копии CLI не включают OAuth-токены, пароли и API-ключи.
101
-
102
- Инструкция: [Облачные диски](Облачные-диски).
103
-
104
- ### 15. Yandex Connector
83
+ ### 13. Yandex Connector
105
84
 
106
85
  Настраивает единый коннектор пользовательских сервисов Яндекса.
107
86
 
@@ -116,6 +95,16 @@ iola index folder ./docs
116
95
 
117
96
  Инструкция: [Yandex Connector](Yandex-Connector).
118
97
 
98
+ ### 14. Yandex Cloud Connector
99
+
100
+ Настраивает Yandex Cloud Connector: геокодер и, при необходимости, YandexGPT.
101
+
102
+ Геокодер включается по умолчанию. Он нужен для geo-skills и deeplink Яндекс Go. YandexGPT можно включить сразу или выбрать позже через `/model`.
103
+
104
+ Ключи сохраняются локально у пользователя. Российский AI-провайдер вызывается напрямую, без gateway/proxy.
105
+
106
+ Инструкция: [Yandex Cloud Connector](Yandex-Cloud-Connector).
107
+
119
108
  ## Повторный запуск
120
109
 
121
110
  Если компонент уже настроен, его можно не выбирать. Если нужно переустановить или обновить компонент, выберите его номер вручную.