@iola_adm/iola-cli 0.1.62 → 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)
@@ -141,6 +142,7 @@ iola version --check
141
142
  - личное локальное подключение Госуслуг через отдельный браузерный профиль на ПК пользователя;
142
143
  - read-only tools Госуслуг для агента: ФИО, дата рождения, задолженности и уведомления;
143
144
  - keepalive-проверка сессии Госуслуг каждые 30 минут через Windows Task Scheduler без висящего окна терминала;
145
+ - мастер настройки автоматически включает keepalive после подключения Госуслуг;
144
146
  - управляемые локальные файловые операции с режимами `locked`, `read-only`, `workspace-write`, `full-access`;
145
147
  - планы выполнения, traces, tasks, artifacts, snapshots и policy-профили;
146
148
  - экспорт отчетов в Excel/Word-совместимые файлы;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iola_adm/iola-cli",
3
- "version": "0.1.62",
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 });
@@ -7126,6 +7128,7 @@ async function onboard(args = []) {
7126
7128
  await ensureBrowserRuntimeForGosuslugi();
7127
7129
  if (process.stdin.isTTY && await confirm("Открыть Госуслуги для входа сейчас? [Y/n] ")) {
7128
7130
  await gosuslugiBrowserConnect({ yes: true });
7131
+ await installGosuslugiKeepaliveTask({ interval: "30m" });
7129
7132
  } else {
7130
7133
  console.log("Подключить личные Госуслуги позже: iola gosuslugi connect");
7131
7134
  }
@@ -7138,25 +7141,19 @@ async function onboard(args = []) {
7138
7141
  console.log("Onboard завершен.");
7139
7142
  }
7140
7143
 
7141
- async function chooseOnboardComponents() {
7144
+ async function chooseOnboardComponents(status = null) {
7142
7145
  if (!process.stdin.isTTY) return ["workspace", "policy"];
7146
+ const componentStatus = status || await getOnboardComponentStatus();
7143
7147
  console.log("");
7144
7148
  console.log("Выберите компоненты через запятую:");
7145
- console.log("1. workspace и контекст");
7146
- console.log("2. policy analyst");
7147
- console.log("3. Ollama + локальная модель");
7148
- console.log("4. OpenAI API");
7149
- console.log("5. OpenRouter API");
7150
- console.log("6. Codex CLI");
7151
- console.log("7. MCP для Codex");
7152
- console.log("8. 7-Zip / архивы");
7153
- console.log("9. Индекс локальных документов");
7154
- console.log("10. Browser runtime");
7155
- console.log("11. Личное подключение Госуслуг");
7149
+ for (const item of onboardComponentRows(componentStatus)) {
7150
+ console.log(`${item.number}. ${item.title} [${item.status}] - ${item.hint}`);
7151
+ }
7156
7152
  console.log("");
7157
7153
  const rl = readline.createInterface({ input, output });
7158
7154
  try {
7159
- 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(",");
7160
7157
  const selected = new Set(answer.split(/[,\s]+/).filter(Boolean));
7161
7158
  const map = {
7162
7159
  1: "workspace",
@@ -7177,6 +7174,64 @@ async function chooseOnboardComponents() {
7177
7174
  }
7178
7175
  }
7179
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
+
7180
7235
  function parseOptions(args) {
7181
7236
  const result = { _: [] };
7182
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
@@ -18,6 +18,7 @@ iola gosuslugi connect
18
18
  4. Пользователь сам проходит вход.
19
19
  5. После завершения пользователь закрывает окно браузера.
20
20
  6. CLI сохраняет локальное состояние профиля.
21
+ 7. При подключении через мастер настройки CLI автоматически создает keepalive-задачу на 30 минут.
21
22
 
22
23
  Профиль хранится в:
23
24