@iola_adm/iola-cli 0.1.63 → 0.1.64

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
@@ -111,6 +111,7 @@ iola version --check
111
111
 
112
112
  - [Установка](https://github.com/adm-iola/iola-cli/wiki/Установка)
113
113
  - [Первый запуск](https://github.com/adm-iola/iola-cli/wiki/Первый-запуск)
114
+ - [Мастер настройки](https://github.com/adm-iola/iola-cli/wiki/Мастер-настройки)
114
115
  - [AI-профили](https://github.com/adm-iola/iola-cli/wiki/AI-профили)
115
116
  - [Локальный инструментальный агент](https://github.com/adm-iola/iola-cli/wiki/Локальный-инструментальный-агент)
116
117
  - [Skills и toolsets](https://github.com/adm-iola/iola-cli/wiki/Skills-и-toolsets)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iola_adm/iola-cli",
3
- "version": "0.1.63",
3
+ "version": "0.1.64",
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
@@ -2431,6 +2431,7 @@ async function handleWiki(args) {
2431
2431
  ["Главная", base],
2432
2432
  ["Установка", `${base}/Установка`],
2433
2433
  ["Первый запуск", `${base}/Первый-запуск`],
2434
+ ["Мастер настройки", `${base}/Мастер-настройки`],
2434
2435
  ["AI-профили", `${base}/AI-профили`],
2435
2436
  ["Локальный инструментальный агент", `${base}/Локальный-инструментальный-агент`],
2436
2437
  ["Skills и toolsets", `${base}/Skills-и-toolsets`],
@@ -7094,7 +7095,8 @@ async function onboard(args = []) {
7094
7095
  }
7095
7096
  }
7096
7097
 
7097
- const components = options.yes ? ["workspace", "policy", "ollama", "openai", "openrouter", "codex", "codex-mcp", "archive", "index"] : await chooseOnboardComponents();
7098
+ const componentStatus = await getOnboardComponentStatus();
7099
+ const components = options.yes ? defaultOnboardComponents(componentStatus) : await chooseOnboardComponents(componentStatus);
7098
7100
  if (components.includes("workspace")) await handleWorkspace(["init"]);
7099
7101
  if (components.includes("policy")) await handlePolicy(["use", "analyst"]);
7100
7102
  if (components.includes("archive")) await ensureArchiveTool({ install: true });
@@ -7139,25 +7141,19 @@ async function onboard(args = []) {
7139
7141
  console.log("Onboard завершен.");
7140
7142
  }
7141
7143
 
7142
- async function chooseOnboardComponents() {
7144
+ async function chooseOnboardComponents(status = null) {
7143
7145
  if (!process.stdin.isTTY) return ["workspace", "policy"];
7146
+ const componentStatus = status || await getOnboardComponentStatus();
7144
7147
  console.log("");
7145
7148
  console.log("Выберите компоненты через запятую:");
7146
- console.log("1. workspace и контекст");
7147
- console.log("2. policy analyst");
7148
- console.log("3. Ollama + локальная модель");
7149
- console.log("4. OpenAI API");
7150
- console.log("5. OpenRouter API");
7151
- console.log("6. Codex CLI");
7152
- console.log("7. MCP для Codex");
7153
- console.log("8. 7-Zip / архивы");
7154
- console.log("9. Индекс локальных документов");
7155
- console.log("10. Browser runtime");
7156
- console.log("11. Личное подключение Госуслуг");
7149
+ for (const item of onboardComponentRows(componentStatus)) {
7150
+ console.log(`${item.number}. ${item.title} [${item.status}] - ${item.hint}`);
7151
+ }
7157
7152
  console.log("");
7158
7153
  const rl = readline.createInterface({ input, output });
7159
7154
  try {
7160
- const answer = (await rl.question("Компоненты [1,2,8]: ")).trim() || "1,2,8";
7155
+ const defaults = defaultOnboardSelection(componentStatus);
7156
+ const answer = (await rl.question(`Компоненты [${defaults.join(",")}]: `)).trim() || defaults.join(",");
7161
7157
  const selected = new Set(answer.split(/[,\s]+/).filter(Boolean));
7162
7158
  const map = {
7163
7159
  1: "workspace",
@@ -7178,6 +7174,64 @@ async function chooseOnboardComponents() {
7178
7174
  }
7179
7175
  }
7180
7176
 
7177
+ async function getOnboardComponentStatus() {
7178
+ const [config, readiness, browser, archive, codexVersion, ollamaVersion, secrets] = await Promise.all([
7179
+ loadConfig(),
7180
+ getAiReadiness(),
7181
+ getBrowserStatus(),
7182
+ findCommand(["7z", "7zz", "7za"], ["--help"]).catch(() => null),
7183
+ getCommandVersion("codex", ["--version"]),
7184
+ getOllamaVersion(),
7185
+ loadSecrets(),
7186
+ ]);
7187
+ const workspaceReady = existsSync(PROJECT_CONTEXT_FILE) || existsSync(PROJECT_CONTEXT_DIR_FILE) || existsSync(PROJECT_IOLA_DIR);
7188
+ const policyReady = (config.toolsets?.enabled || []).includes("analyst");
7189
+ const gosuslugiReady = Boolean(config.gosuslugi?.enabled && existsSync(GOSUSLUGI_BROWSER_PROFILE_DIR) && secrets.gosuslugiBrowser?.connectedAt);
7190
+ return {
7191
+ workspace: workspaceReady,
7192
+ policy: policyReady,
7193
+ ollama: Boolean(ollamaVersion && readiness.ollama),
7194
+ openai: Boolean(readiness.openai),
7195
+ openrouter: Boolean(readiness.openrouter),
7196
+ codex: Boolean(codexVersion !== "не найден" && readiness.codex),
7197
+ "codex-mcp": false,
7198
+ archive: Boolean(archive),
7199
+ index: false,
7200
+ browser: browser.installed === "yes",
7201
+ gosuslugi: gosuslugiReady,
7202
+ };
7203
+ }
7204
+
7205
+ function onboardComponentRows(status) {
7206
+ const rows = [
7207
+ ["1", "workspace", "workspace и контекст", "рабочая папка, IOLA.md и .iola/context.md"],
7208
+ ["2", "policy", "policy analyst", "разрешения и профиль аналитика"],
7209
+ ["3", "ollama", "Ollama + локальная модель", "локальная модель найдена"],
7210
+ ["4", "openai", "OpenAI API", "API-ключ сохранен или есть в env"],
7211
+ ["5", "openrouter", "OpenRouter API", "API-ключ сохранен или есть в env"],
7212
+ ["6", "codex", "Codex CLI", "CLI установлен и авторизация найдена"],
7213
+ ["7", "codex-mcp", "MCP для Codex", "можно переустановить/обновить"],
7214
+ ["8", "archive", "7-Zip / архивы", "архиватор найден"],
7215
+ ["9", "index", "Индекс локальных документов", "настраивается под выбранную папку"],
7216
+ ["10", "browser", "Browser runtime", "Playwright/Chromium установлен"],
7217
+ ["11", "gosuslugi", "Личное подключение Госуслуг", "профиль и keepalive"],
7218
+ ];
7219
+ return rows.map(([number, key, title, hint]) => ({ number, key, title, hint, status: status[key] ? "готово" : "не настроено" }));
7220
+ }
7221
+
7222
+ function defaultOnboardSelection(status) {
7223
+ const defaults = [];
7224
+ if (!status.workspace) defaults.push("1");
7225
+ if (!status.policy) defaults.push("2");
7226
+ if (!status.archive) defaults.push("8");
7227
+ return defaults.length ? defaults : ["1", "2"];
7228
+ }
7229
+
7230
+ function defaultOnboardComponents(status) {
7231
+ const map = { 1: "workspace", 2: "policy", 3: "ollama", 4: "openai", 5: "openrouter", 6: "codex", 7: "codex-mcp", 8: "archive", 9: "index", 10: "browser", 11: "gosuslugi" };
7232
+ return defaultOnboardSelection(status).map((item) => map[item]).filter(Boolean);
7233
+ }
7234
+
7181
7235
  function parseOptions(args) {
7182
7236
  const result = { _: [] };
7183
7237
 
package/wiki/Home.md CHANGED
@@ -26,6 +26,7 @@ iola ask "найди школу 29"
26
26
 
27
27
  - [Установка](Установка)
28
28
  - [Первый запуск](Первый-запуск)
29
+ - [Мастер настройки](Мастер-настройки)
29
30
  - [AI-профили](AI-профили)
30
31
  - [Локальный инструментальный агент](Локальный-инструментальный-агент)
31
32
  - [Skills и toolsets](Skills-и-toolsets)
@@ -43,3 +43,5 @@ iola onboard
43
43
  В списке компонентов есть отдельный пункт `7-Zip / архивы`. Если выбрать его, CLI установит архиватор сразу из мастера настройки.
44
44
 
45
45
  Мастер также предлагает подключить workspace, policy, Ollama, OpenAI, OpenRouter, Codex CLI, MCP, browser runtime, Госуслуги и индекс локальных документов.
46
+
47
+ Подробное описание пунктов мастера вынесено на страницу [Мастер настройки](Мастер-настройки).
@@ -0,0 +1,82 @@
1
+ # Мастер настройки
2
+
3
+ Мастер запускается при первом старте CLI и повторно командой:
4
+
5
+ ```bash
6
+ iola master
7
+ ```
8
+
9
+ Мастер обновляет только выбранные компоненты и не сбрасывает остальные настройки.
10
+
11
+ Перед выбором компонентов CLI проверяет окружение и показывает статус каждого пункта: `готово` или `не настроено`.
12
+
13
+ ## Компоненты
14
+
15
+ ### 1. workspace и контекст
16
+
17
+ Создает рабочую среду текущей папки: `.iola/`, `IOLA.md` и `.iola/context.md`.
18
+
19
+ Нужно, если агент будет работать с локальными файлами, документами, задачами, артефактами и контекстом проекта.
20
+
21
+ ### 2. policy analyst
22
+
23
+ Включает профиль разрешений для аналитической работы: открытые данные, отчеты, безопасные локальные операции.
24
+
25
+ ### 3. Ollama + локальная модель
26
+
27
+ Проверяет Ollama и локальные модели. Если Ollama не установлена, мастер может установить ее и предложить модель под возможности ПК.
28
+
29
+ Если модель уже скачана и доступна, пункт показывается как `готово`.
30
+
31
+ ### 4. OpenAI API
32
+
33
+ Настраивает профиль OpenAI и сохраняет API-ключ локально у пользователя.
34
+
35
+ ### 5. OpenRouter API
36
+
37
+ Настраивает профиль OpenRouter и сохраняет API-ключ локально у пользователя.
38
+
39
+ ### 6. Codex CLI
40
+
41
+ Проверяет наличие Codex CLI и авторизации. Если Codex уже установлен и вход выполнен, пункт показывается как `готово`.
42
+
43
+ ### 7. MCP для Codex
44
+
45
+ Добавляет MCP-сервер открытых данных Йошкар-Олы в Codex. Этот пункт можно запускать повторно для обновления подключения.
46
+
47
+ ### 8. 7-Zip / архивы
48
+
49
+ Проверяет 7-Zip. Если архиватор не найден, мастер устанавливает его.
50
+
51
+ Нужен для чтения, распаковки, сборки и индексирования архивов.
52
+
53
+ ### 9. Индекс локальных документов
54
+
55
+ Готовит режим чтения файлов и подсказывает команду индексирования локальной папки:
56
+
57
+ ```bash
58
+ iola index folder ./docs
59
+ ```
60
+
61
+ ### 10. Browser runtime
62
+
63
+ Проверяет Playwright/Chromium runtime. Нужен для браузерного агента и подключения Госуслуг.
64
+
65
+ Если runtime уже установлен, пункт показывается как `готово`.
66
+
67
+ ### 11. Личное подключение Госуслуг
68
+
69
+ Открывает браузерный профиль Госуслуг. Пользователь сам вводит логин, пароль и двухфакторный код.
70
+
71
+ После входа CLI сохраняет профиль на ПК и автоматически создает keepalive-задачу Windows Task Scheduler каждые 30 минут.
72
+
73
+ Проверить:
74
+
75
+ ```bash
76
+ iola gosuslugi status
77
+ iola gosuslugi keepalive-status
78
+ ```
79
+
80
+ ## Повторный запуск
81
+
82
+ Если компонент уже настроен, его можно не выбирать. Если нужно переустановить или обновить компонент, выберите его номер вручную.
@@ -34,12 +34,13 @@ iola commands
34
34
  Повторный запуск мастера:
35
35
 
36
36
  ```bash
37
- iola wizard
38
- iola setup wizard
37
+ iola master
39
38
  ```
40
39
 
41
40
  Мастер обновляет только выбранные разделы и не сбрасывает остальные настройки.
42
41
 
42
+ Подробное описание всех пунктов: [Мастер настройки](Мастер-настройки).
43
+
43
44
  Диагностика:
44
45
 
45
46
  ```bash