@iola_adm/iola-cli 0.2.43 → 0.2.45
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
package/src/cli.js
CHANGED
|
@@ -16668,6 +16668,7 @@ async function onboard(args = []) {
|
|
|
16668
16668
|
if (components.includes("workspace")) await handleWorkspace(["init"]);
|
|
16669
16669
|
if (components.includes("policy")) await handlePolicy(["use", "analyst"]);
|
|
16670
16670
|
if (components.includes("archive")) await ensureArchiveTool({ install: true });
|
|
16671
|
+
if (components.includes("city-data")) await checkHealth([]);
|
|
16671
16672
|
if (components.includes("iola")) {
|
|
16672
16673
|
await setupIolaLocal(["--yes"]);
|
|
16673
16674
|
}
|
|
@@ -16734,8 +16735,12 @@ async function chooseOnboardComponents(status = null) {
|
|
|
16734
16735
|
console.log("");
|
|
16735
16736
|
console.log("Выберите компоненты через запятую:");
|
|
16736
16737
|
console.log("0. выход в CLI [без настройки] - пропустить мастер");
|
|
16737
|
-
for (const
|
|
16738
|
-
console.log(
|
|
16738
|
+
for (const group of onboardComponentGroups(componentStatus)) {
|
|
16739
|
+
console.log("");
|
|
16740
|
+
console.log(group.title);
|
|
16741
|
+
for (const item of group.rows) {
|
|
16742
|
+
console.log(`${item.number}. ${item.title} [${item.status}] - ${item.hint}`);
|
|
16743
|
+
}
|
|
16739
16744
|
}
|
|
16740
16745
|
console.log("");
|
|
16741
16746
|
const rl = readline.createInterface({ input, output });
|
|
@@ -16747,19 +16752,19 @@ async function chooseOnboardComponents(status = null) {
|
|
|
16747
16752
|
const map = {
|
|
16748
16753
|
1: "workspace",
|
|
16749
16754
|
2: "policy",
|
|
16750
|
-
3: "
|
|
16751
|
-
4: "
|
|
16752
|
-
5: "
|
|
16753
|
-
6: "
|
|
16754
|
-
7: "codex",
|
|
16755
|
-
8: "
|
|
16756
|
-
9: "
|
|
16757
|
-
10: "
|
|
16758
|
-
11: "
|
|
16759
|
-
12: "
|
|
16760
|
-
13: "
|
|
16761
|
-
14: "
|
|
16762
|
-
15: "
|
|
16755
|
+
3: "archive",
|
|
16756
|
+
4: "index",
|
|
16757
|
+
5: "browser",
|
|
16758
|
+
6: "city-data",
|
|
16759
|
+
7: "codex-mcp",
|
|
16760
|
+
8: "iola",
|
|
16761
|
+
9: "ollama",
|
|
16762
|
+
10: "gigachat",
|
|
16763
|
+
11: "yandex",
|
|
16764
|
+
12: "yandex-cloud",
|
|
16765
|
+
13: "openai",
|
|
16766
|
+
14: "openrouter",
|
|
16767
|
+
15: "codex",
|
|
16763
16768
|
};
|
|
16764
16769
|
return [...selected].map((item) => map[item] || item).filter(Boolean);
|
|
16765
16770
|
} finally {
|
|
@@ -16772,7 +16777,7 @@ function isOnboardExitAnswer(answer) {
|
|
|
16772
16777
|
}
|
|
16773
16778
|
|
|
16774
16779
|
async function getOnboardComponentStatus() {
|
|
16775
|
-
const [config, readiness, browser, archive, codexVersion, ollamaVersion, yandexGeocoderKey, secrets] = await Promise.all([
|
|
16780
|
+
const [config, readiness, browser, archive, codexVersion, ollamaVersion, yandexGeocoderKey, secrets, cityDataHealth] = await Promise.all([
|
|
16776
16781
|
loadConfig(),
|
|
16777
16782
|
getAiReadiness(),
|
|
16778
16783
|
getBrowserStatus(),
|
|
@@ -16781,6 +16786,7 @@ async function getOnboardComponentStatus() {
|
|
|
16781
16786
|
getOllamaVersion(),
|
|
16782
16787
|
getYandexGeocoderKey(),
|
|
16783
16788
|
loadSecrets(),
|
|
16789
|
+
getMcpBaseUrl().then((baseUrl) => probeEndpoint(`${baseUrl}/mcp-health`)),
|
|
16784
16790
|
]);
|
|
16785
16791
|
const workspaceReady = existsSync(PROJECT_CONTEXT_FILE) || existsSync(PROJECT_CONTEXT_DIR_FILE) || existsSync(PROJECT_IOLA_DIR);
|
|
16786
16792
|
const policyReady = (config.toolsets?.enabled || []).includes("analyst");
|
|
@@ -16795,6 +16801,7 @@ async function getOnboardComponentStatus() {
|
|
|
16795
16801
|
openrouter: Boolean(readiness.openrouter),
|
|
16796
16802
|
codex: Boolean(codexVersion !== "не найден" && readiness.codex),
|
|
16797
16803
|
"codex-mcp": false,
|
|
16804
|
+
"city-data": cityDataHealth === "доступен",
|
|
16798
16805
|
archive: Boolean(archive),
|
|
16799
16806
|
index: false,
|
|
16800
16807
|
browser: browser.installed === "yes",
|
|
@@ -16802,37 +16809,75 @@ async function getOnboardComponentStatus() {
|
|
|
16802
16809
|
};
|
|
16803
16810
|
}
|
|
16804
16811
|
|
|
16805
|
-
function
|
|
16806
|
-
const
|
|
16807
|
-
|
|
16808
|
-
|
|
16809
|
-
|
|
16810
|
-
|
|
16811
|
-
|
|
16812
|
-
|
|
16813
|
-
|
|
16814
|
-
|
|
16815
|
-
|
|
16816
|
-
|
|
16817
|
-
|
|
16818
|
-
|
|
16819
|
-
|
|
16820
|
-
|
|
16812
|
+
function onboardComponentGroups(status) {
|
|
16813
|
+
const groups = [
|
|
16814
|
+
{
|
|
16815
|
+
title: "Базовая настройка",
|
|
16816
|
+
rows: [
|
|
16817
|
+
["1", "workspace", "Рабочая папка и контекст", "IOLA.md и .iola/context.md"],
|
|
16818
|
+
["2", "policy", "Разрешения и безопасный режим", "профиль аналитика"],
|
|
16819
|
+
["3", "archive", "7-Zip / архивы", "архиватор найден"],
|
|
16820
|
+
["4", "index", "Индекс локальных документов", "выбранная папка"],
|
|
16821
|
+
["5", "browser", "Браузерный модуль", "Playwright/Chromium"],
|
|
16822
|
+
],
|
|
16823
|
+
},
|
|
16824
|
+
{
|
|
16825
|
+
title: "Городские сервисы",
|
|
16826
|
+
rows: [
|
|
16827
|
+
["6", "city-data", "Открытые данные Йошкар-Олы", "API/MCP gateway доступен"],
|
|
16828
|
+
["7", "codex-mcp", "Подключить городские данные к Codex", "MCP для Codex"],
|
|
16829
|
+
],
|
|
16830
|
+
},
|
|
16831
|
+
{
|
|
16832
|
+
title: "Локальный AI",
|
|
16833
|
+
rows: [
|
|
16834
|
+
["8", "iola", "IOLA локальная модель", "локальная модель найдена"],
|
|
16835
|
+
["9", "ollama", "Ollama", "опциональный локальный runtime"],
|
|
16836
|
+
],
|
|
16837
|
+
},
|
|
16838
|
+
{
|
|
16839
|
+
title: "Российские AI и сервисы",
|
|
16840
|
+
rows: [
|
|
16841
|
+
["10", "gigachat", "GigaChat API", "authorization key сохранен или есть в env"],
|
|
16842
|
+
["11", "yandex", "Yandex Connector", "Диск, Почта, Календарь, Контакты"],
|
|
16843
|
+
["12", "yandex-cloud", "Yandex Cloud Connector", "геокодинг и YandexGPT"],
|
|
16844
|
+
],
|
|
16845
|
+
},
|
|
16846
|
+
{
|
|
16847
|
+
title: "Зарубежные AI",
|
|
16848
|
+
rows: [
|
|
16849
|
+
["13", "openai", "OpenAI API", "API-ключ сохранен или есть в env"],
|
|
16850
|
+
["14", "openrouter", "OpenRouter API", "API-ключ сохранен или есть в env"],
|
|
16851
|
+
],
|
|
16852
|
+
},
|
|
16853
|
+
{
|
|
16854
|
+
title: "Codex",
|
|
16855
|
+
rows: [
|
|
16856
|
+
["15", "codex", "Codex CLI", "CLI установлен и авторизация найдена"],
|
|
16857
|
+
],
|
|
16858
|
+
},
|
|
16821
16859
|
];
|
|
16822
|
-
return
|
|
16860
|
+
return groups.map((group) => ({
|
|
16861
|
+
...group,
|
|
16862
|
+
rows: group.rows.map(([number, key, title, hint]) => ({ number, key, title, hint, status: status[key] ? "готово" : "не настроено" })),
|
|
16863
|
+
}));
|
|
16864
|
+
}
|
|
16865
|
+
|
|
16866
|
+
function onboardComponentRows(status) {
|
|
16867
|
+
return onboardComponentGroups(status).flatMap((group) => group.rows);
|
|
16823
16868
|
}
|
|
16824
16869
|
|
|
16825
16870
|
function defaultOnboardSelection(status) {
|
|
16826
16871
|
const defaults = [];
|
|
16827
16872
|
if (!status.workspace) defaults.push("1");
|
|
16828
16873
|
if (!status.policy) defaults.push("2");
|
|
16829
|
-
if (!status.
|
|
16830
|
-
if (!status.
|
|
16874
|
+
if (!status.archive) defaults.push("3");
|
|
16875
|
+
if (!status.iola) defaults.push("8");
|
|
16831
16876
|
return defaults.length ? defaults : ["1", "2"];
|
|
16832
16877
|
}
|
|
16833
16878
|
|
|
16834
16879
|
function defaultOnboardComponents(status) {
|
|
16835
|
-
const map = { 1: "workspace", 2: "policy", 3: "
|
|
16880
|
+
const map = { 1: "workspace", 2: "policy", 3: "archive", 4: "index", 5: "browser", 6: "city-data", 7: "codex-mcp", 8: "iola", 9: "ollama", 10: "gigachat", 11: "yandex", 12: "yandex-cloud", 13: "openai", 14: "openrouter", 15: "codex" };
|
|
16836
16881
|
return defaultOnboardSelection(status).map((item) => map[item]).filter(Boolean);
|
|
16837
16882
|
}
|
|
16838
16883
|
|
|
@@ -18,7 +18,7 @@ iola master
|
|
|
18
18
|
В мастере выберите:
|
|
19
19
|
|
|
20
20
|
```text
|
|
21
|
-
|
|
21
|
+
12. Yandex Cloud Connector - геокодинг и YandexGPT
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
CLI не просто открывает консоль. Он печатает короткую инструкцию, что делать дальше, и только потом просит вставить ключи.
|
|
@@ -12,75 +12,106 @@ iola master
|
|
|
12
12
|
|
|
13
13
|
## Компоненты
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
```text
|
|
16
|
+
0. выход в CLI [без настройки] - пропустить мастер
|
|
17
|
+
|
|
18
|
+
Базовая настройка
|
|
19
|
+
1. Рабочая папка и контекст
|
|
20
|
+
2. Разрешения и безопасный режим
|
|
21
|
+
3. 7-Zip / архивы
|
|
22
|
+
4. Индекс локальных документов
|
|
23
|
+
5. Браузерный модуль
|
|
24
|
+
|
|
25
|
+
Городские сервисы
|
|
26
|
+
6. Открытые данные Йошкар-Олы
|
|
27
|
+
7. Подключить городские данные к Codex
|
|
28
|
+
|
|
29
|
+
Локальный AI
|
|
30
|
+
8. IOLA локальная модель
|
|
31
|
+
9. Ollama
|
|
32
|
+
|
|
33
|
+
Российские AI и сервисы
|
|
34
|
+
10. GigaChat API
|
|
35
|
+
11. Yandex Connector
|
|
36
|
+
12. Yandex Cloud Connector
|
|
37
|
+
|
|
38
|
+
Зарубежные AI
|
|
39
|
+
13. OpenAI API
|
|
40
|
+
14. OpenRouter API
|
|
41
|
+
|
|
42
|
+
Codex
|
|
43
|
+
15. Codex CLI
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Базовая настройка
|
|
47
|
+
|
|
48
|
+
### 1. Рабочая папка и контекст
|
|
16
49
|
|
|
17
50
|
Создает рабочую среду текущей папки: `.iola/`, `IOLA.md` и `.iola/context.md`.
|
|
18
51
|
|
|
19
52
|
Нужно, если агент будет работать с локальными файлами, документами, задачами, артефактами и контекстом проекта.
|
|
20
53
|
|
|
21
|
-
### 2.
|
|
54
|
+
### 2. Разрешения и безопасный режим
|
|
22
55
|
|
|
23
56
|
Включает профиль разрешений для аналитической работы: открытые данные, отчеты, безопасные локальные операции.
|
|
24
57
|
|
|
25
|
-
### 3.
|
|
58
|
+
### 3. 7-Zip / архивы
|
|
26
59
|
|
|
27
|
-
Проверяет
|
|
28
|
-
|
|
29
|
-
Если модель уже скачана и доступна, пункт показывается как `готово`.
|
|
60
|
+
Проверяет 7-Zip. Если архиватор не найден, мастер устанавливает его.
|
|
30
61
|
|
|
31
|
-
|
|
62
|
+
Нужен для чтения, распаковки, сборки и индексирования архивов.
|
|
32
63
|
|
|
33
|
-
### 4.
|
|
64
|
+
### 4. Индекс локальных документов
|
|
34
65
|
|
|
35
|
-
|
|
66
|
+
Готовит режим чтения файлов и подсказывает команду индексирования локальной папки:
|
|
36
67
|
|
|
37
|
-
|
|
68
|
+
```bash
|
|
69
|
+
iola index folder ./docs
|
|
70
|
+
```
|
|
38
71
|
|
|
39
|
-
### 5.
|
|
72
|
+
### 5. Браузерный модуль
|
|
40
73
|
|
|
41
|
-
|
|
74
|
+
Проверяет Playwright/Chromium runtime. Нужен для браузерного агента.
|
|
42
75
|
|
|
43
|
-
|
|
76
|
+
## Городские сервисы
|
|
44
77
|
|
|
45
|
-
### 6.
|
|
78
|
+
### 6. Открытые данные Йошкар-Олы
|
|
46
79
|
|
|
47
|
-
|
|
80
|
+
Проверяет доступность городского API/MCP-шлюза `apiiola.yasg.ru`.
|
|
48
81
|
|
|
49
|
-
|
|
82
|
+
Этот пункт ничего не устанавливает локально. Он нужен, чтобы пользователь явно видел: CLI подключен к городским слоям открытых данных и может проверять школы, детские сады и другие подключенные городские сервисы через проверяемый gateway.
|
|
50
83
|
|
|
51
|
-
### 7. Codex
|
|
84
|
+
### 7. Подключить городские данные к Codex
|
|
52
85
|
|
|
53
|
-
|
|
86
|
+
Добавляет MCP-сервер открытых данных Йошкар-Олы во внешний Codex CLI. Этот пункт нужен только тем, кто хочет, чтобы Codex CLI тоже видел городские данные как MCP-инструменты.
|
|
54
87
|
|
|
55
|
-
|
|
88
|
+
Для обычной работы `iola-cli` с городскими слоями этот пункт не обязателен: сам CLI уже ходит к городскому API/MCP-шлюзу напрямую.
|
|
56
89
|
|
|
57
|
-
|
|
90
|
+
## Локальный AI
|
|
58
91
|
|
|
59
|
-
###
|
|
92
|
+
### 8. IOLA локальная модель
|
|
60
93
|
|
|
61
|
-
Проверяет
|
|
94
|
+
Проверяет штатную локальную модель IOLA и готовит ее к работе через доступный runtime.
|
|
62
95
|
|
|
63
|
-
|
|
96
|
+
Если модель уже скачана и доступна, пункт показывается как `готово`.
|
|
64
97
|
|
|
65
|
-
|
|
98
|
+
После настройки локальную модель можно менять в интерактивном агенте через `/model`. Помимо штатной IOLA-модели можно выбрать установленную или рекомендуемую Ollama-модель, либо вручную ввести имя любой модели из библиотеки Ollama.
|
|
66
99
|
|
|
67
|
-
|
|
100
|
+
### 9. Ollama
|
|
68
101
|
|
|
69
|
-
|
|
70
|
-
iola index folder ./docs
|
|
71
|
-
```
|
|
102
|
+
Опциональный локальный runtime для выбора сторонних моделей из библиотеки Ollama.
|
|
72
103
|
|
|
73
|
-
|
|
104
|
+
Если runtime уже установлен, пункт показывается как `готово`.
|
|
74
105
|
|
|
75
|
-
|
|
106
|
+
## Российские AI и сервисы
|
|
76
107
|
|
|
77
|
-
###
|
|
108
|
+
### 10. GigaChat API
|
|
78
109
|
|
|
79
|
-
|
|
110
|
+
Настраивает профиль GigaChat и сохраняет authorization key локально у пользователя.
|
|
80
111
|
|
|
81
|
-
|
|
112
|
+
Российский провайдер вызывается напрямую, без gateway/proxy.
|
|
82
113
|
|
|
83
|
-
###
|
|
114
|
+
### 11. Yandex Connector
|
|
84
115
|
|
|
85
116
|
Настраивает единый коннектор пользовательских сервисов Яндекса.
|
|
86
117
|
|
|
@@ -95,7 +126,7 @@ iola index folder ./docs
|
|
|
95
126
|
|
|
96
127
|
Инструкция: [Yandex Connector](Yandex-Connector).
|
|
97
128
|
|
|
98
|
-
###
|
|
129
|
+
### 12. Yandex Cloud Connector
|
|
99
130
|
|
|
100
131
|
Настраивает Yandex Cloud Connector: геокодер и, при необходимости, YandexGPT.
|
|
101
132
|
|
|
@@ -107,6 +138,26 @@ iola index folder ./docs
|
|
|
107
138
|
|
|
108
139
|
Инструкция: [Yandex Cloud Connector](Yandex-Cloud-Connector).
|
|
109
140
|
|
|
141
|
+
## Зарубежные AI
|
|
142
|
+
|
|
143
|
+
### 13. OpenAI API
|
|
144
|
+
|
|
145
|
+
Настраивает профиль OpenAI и сохраняет API-ключ локально у пользователя.
|
|
146
|
+
|
|
147
|
+
После сохранения ключа мастер предлагает выбрать модель из доступного списка.
|
|
148
|
+
|
|
149
|
+
### 14. OpenRouter API
|
|
150
|
+
|
|
151
|
+
Настраивает профиль OpenRouter и сохраняет API-ключ локально у пользователя.
|
|
152
|
+
|
|
153
|
+
После сохранения ключа мастер предлагает выбрать разработчика моделей OpenRouter, а затем одну из свежих моделей для текстовой работы. В списке моделей `0` возвращает к выбору разработчика.
|
|
154
|
+
|
|
155
|
+
## Codex
|
|
156
|
+
|
|
157
|
+
### 15. Codex CLI
|
|
158
|
+
|
|
159
|
+
Проверяет наличие Codex CLI и авторизации. Если Codex уже установлен и вход выполнен, пункт показывается как `готово`.
|
|
160
|
+
|
|
110
161
|
## Повторный запуск
|
|
111
162
|
|
|
112
163
|
Если компонент уже настроен, его можно не выбирать. Если нужно переустановить или обновить компонент, выберите его номер вручную.
|