@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 +2 -0
- package/package.json +1 -1
- package/src/cli.js +69 -14
- package/wiki/Home.md +1 -0
- package/wiki//320/220/321/200/321/205/320/270/320/262/321/213-/320/270-/320/274/320/260/321/201/321/202/320/265/321/200-/320/275/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/270.md +2 -0
- package/wiki//320/234/320/260/321/201/321/202/320/265/321/200-/320/275/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/270.md +82 -0
- package/wiki//320/237/320/265/321/200/320/262/321/213/320/271-/320/267/320/260/320/277/321/203/321/201/320/272.md +3 -2
- package/wiki//320/237/320/276/320/264/320/272/320/273/321/216/321/207/320/265/320/275/320/270/320/265-/320/223/320/276/321/201/321/203/321/201/320/273/321/203/320/263.md +1 -0
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
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
|
|
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
|
-
|
|
7146
|
-
|
|
7147
|
-
|
|
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
|
|
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
|
|
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
|
|