@iola_adm/iola-cli 0.1.61 → 0.1.63
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 +3 -1
- package/package.json +1 -1
- package/src/cli.js +86 -24
- package/wiki/Daemon-RPC-/320/270-cron.md +2 -2
- package/wiki//320/232/320/276/320/274/320/260/320/275/320/264/321/213.md +2 -0
- 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 +12 -3
package/README.md
CHANGED
|
@@ -90,6 +90,7 @@ iola gosuslugi whoami
|
|
|
90
90
|
iola gosuslugi debt
|
|
91
91
|
iola gosuslugi notifications --unread
|
|
92
92
|
iola gosuslugi keepalive
|
|
93
|
+
iola gosuslugi install-keepalive
|
|
93
94
|
```
|
|
94
95
|
|
|
95
96
|
Локальная модель через Ollama:
|
|
@@ -139,7 +140,8 @@ iola version --check
|
|
|
139
140
|
- браузерный runtime через Playwright: чтение страниц, скриншоты, PDF, клики, ввод и eval;
|
|
140
141
|
- личное локальное подключение Госуслуг через отдельный браузерный профиль на ПК пользователя;
|
|
141
142
|
- read-only tools Госуслуг для агента: ФИО, дата рождения, задолженности и уведомления;
|
|
142
|
-
- keepalive-проверка сессии Госуслуг каждые 30 минут без
|
|
143
|
+
- keepalive-проверка сессии Госуслуг каждые 30 минут через Windows Task Scheduler без висящего окна терминала;
|
|
144
|
+
- мастер настройки автоматически включает keepalive после подключения Госуслуг;
|
|
143
145
|
- управляемые локальные файловые операции с режимами `locked`, `read-only`, `workspace-write`, `full-access`;
|
|
144
146
|
- планы выполнения, traces, tasks, artifacts, snapshots и policy-профили;
|
|
145
147
|
- экспорт отчетов в Excel/Word-совместимые файлы;
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -524,7 +524,7 @@ Usage:
|
|
|
524
524
|
iola fork SESSION_ID [TEXT]
|
|
525
525
|
iola features list|enable|disable
|
|
526
526
|
iola settings list|get|validate|doctor|init
|
|
527
|
-
iola gosuslugi terms|consent|status|check|keepalive|install-keepalive|connect|open|text|screenshot|whoami|debt|notifications|mark-read|logout|configure|login|userinfo
|
|
527
|
+
iola gosuslugi terms|consent|status|check|keepalive|install-keepalive|keepalive-status|uninstall-keepalive|connect|open|text|screenshot|whoami|debt|notifications|mark-read|logout|configure|login|userinfo
|
|
528
528
|
iola wiki [open|links]
|
|
529
529
|
iola context list|show|init
|
|
530
530
|
iola skills list|show|paths|enable|disable|bundles|bundle|doctor
|
|
@@ -2026,25 +2026,6 @@ async function handleDb(args) {
|
|
|
2026
2026
|
return;
|
|
2027
2027
|
}
|
|
2028
2028
|
|
|
2029
|
-
if (action === "check") {
|
|
2030
|
-
const result = await gosuslugiCheck(options);
|
|
2031
|
-
if (options.json) printJson(result);
|
|
2032
|
-
else printKeyValue(result);
|
|
2033
|
-
return;
|
|
2034
|
-
}
|
|
2035
|
-
|
|
2036
|
-
if (action === "keepalive") {
|
|
2037
|
-
await gosuslugiKeepalive(options);
|
|
2038
|
-
return;
|
|
2039
|
-
}
|
|
2040
|
-
|
|
2041
|
-
if (action === "install-keepalive") {
|
|
2042
|
-
const id = addCronJob("каждые 30 минут", "gosuslugi check --silent");
|
|
2043
|
-
console.log(`Keepalive-задача добавлена: ${id}`);
|
|
2044
|
-
console.log("Для выполнения запускайте периодически: iola cron tick");
|
|
2045
|
-
return;
|
|
2046
|
-
}
|
|
2047
|
-
|
|
2048
2029
|
if (action === "reset") {
|
|
2049
2030
|
const shouldReset = await confirm("Удалить локальную SQLite-БД iola.db? [y/N] ");
|
|
2050
2031
|
if (!shouldReset) {
|
|
@@ -2319,9 +2300,17 @@ async function handleGosuslugi(args) {
|
|
|
2319
2300
|
}
|
|
2320
2301
|
|
|
2321
2302
|
if (action === "install-keepalive") {
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2303
|
+
await installGosuslugiKeepaliveTask(options);
|
|
2304
|
+
return;
|
|
2305
|
+
}
|
|
2306
|
+
|
|
2307
|
+
if (action === "uninstall-keepalive") {
|
|
2308
|
+
await uninstallGosuslugiKeepaliveTask(options);
|
|
2309
|
+
return;
|
|
2310
|
+
}
|
|
2311
|
+
|
|
2312
|
+
if (action === "keepalive-status") {
|
|
2313
|
+
await printGosuslugiKeepaliveTaskStatus(options);
|
|
2325
2314
|
return;
|
|
2326
2315
|
}
|
|
2327
2316
|
|
|
@@ -2428,7 +2417,7 @@ async function handleGosuslugi(args) {
|
|
|
2428
2417
|
return;
|
|
2429
2418
|
}
|
|
2430
2419
|
|
|
2431
|
-
throw new Error("Команды gosuslugi: terms, consent, status, check, keepalive, install-keepalive, connect, open, text, screenshot, whoami, debt, notifications, mark-read, logout, configure, login, userinfo.");
|
|
2420
|
+
throw new Error("Команды gosuslugi: terms, consent, status, check, keepalive, install-keepalive, keepalive-status, uninstall-keepalive, connect, open, text, screenshot, whoami, debt, notifications, mark-read, logout, configure, login, userinfo.");
|
|
2432
2421
|
}
|
|
2433
2422
|
|
|
2434
2423
|
function targetOrDefault(args, options = {}) {
|
|
@@ -7137,6 +7126,7 @@ async function onboard(args = []) {
|
|
|
7137
7126
|
await ensureBrowserRuntimeForGosuslugi();
|
|
7138
7127
|
if (process.stdin.isTTY && await confirm("Открыть Госуслуги для входа сейчас? [Y/n] ")) {
|
|
7139
7128
|
await gosuslugiBrowserConnect({ yes: true });
|
|
7129
|
+
await installGosuslugiKeepaliveTask({ interval: "30m" });
|
|
7140
7130
|
} else {
|
|
7141
7131
|
console.log("Подключить личные Госуслуги позже: iola gosuslugi connect");
|
|
7142
7132
|
}
|
|
@@ -7885,6 +7875,78 @@ async function gosuslugiKeepalive(options = {}) {
|
|
|
7885
7875
|
}
|
|
7886
7876
|
}
|
|
7887
7877
|
|
|
7878
|
+
function gosuslugiKeepaliveTaskName() {
|
|
7879
|
+
return "iola-gosuslugi-keepalive";
|
|
7880
|
+
}
|
|
7881
|
+
|
|
7882
|
+
function gosuslugiKeepaliveLogFile() {
|
|
7883
|
+
return path.join(CONFIG_DIR, "gosuslugi-keepalive.log");
|
|
7884
|
+
}
|
|
7885
|
+
|
|
7886
|
+
function cliEntrypointFile() {
|
|
7887
|
+
return path.resolve(__dirname, "..", "bin", "iola.js");
|
|
7888
|
+
}
|
|
7889
|
+
|
|
7890
|
+
async function installGosuslugiKeepaliveTask(options = {}) {
|
|
7891
|
+
const intervalMinutes = Math.max(1, Math.round(parseDurationMs(options.interval || "30m") / 60000));
|
|
7892
|
+
if (process.platform === "win32") {
|
|
7893
|
+
await installWindowsGosuslugiKeepaliveTask(intervalMinutes);
|
|
7894
|
+
return;
|
|
7895
|
+
}
|
|
7896
|
+
const id = addCronJob(`каждые ${intervalMinutes} минут`, "gosuslugi check --silent");
|
|
7897
|
+
console.log(`Локальная cron-задача добавлена: ${id}`);
|
|
7898
|
+
console.log("Для автоматического выполнения настройте системный планировщик на запуск: iola cron tick");
|
|
7899
|
+
}
|
|
7900
|
+
|
|
7901
|
+
async function installWindowsGosuslugiKeepaliveTask(intervalMinutes) {
|
|
7902
|
+
await mkdir(CONFIG_DIR, { recursive: true });
|
|
7903
|
+
const taskName = gosuslugiKeepaliveTaskName();
|
|
7904
|
+
const logFile = gosuslugiKeepaliveLogFile();
|
|
7905
|
+
const script = path.join(CONFIG_DIR, "gosuslugi-keepalive-task.cmd");
|
|
7906
|
+
const command = `"${process.execPath}" --no-warnings "${cliEntrypointFile()}" gosuslugi check --silent >> "${logFile}" 2>&1`;
|
|
7907
|
+
await writeFile(script, `@echo off\r\n${command}\r\n`, "utf8");
|
|
7908
|
+
await runCommand("schtasks.exe", [
|
|
7909
|
+
"/Create",
|
|
7910
|
+
"/TN", taskName,
|
|
7911
|
+
"/SC", "MINUTE",
|
|
7912
|
+
"/MO", String(intervalMinutes),
|
|
7913
|
+
"/TR", script,
|
|
7914
|
+
"/F",
|
|
7915
|
+
]);
|
|
7916
|
+
console.log(`Windows Task Scheduler задача создана: ${taskName}`);
|
|
7917
|
+
console.log(`Интервал: ${intervalMinutes} мин.`);
|
|
7918
|
+
console.log(`Лог: ${logFile}`);
|
|
7919
|
+
console.log("Проверить: iola gosuslugi keepalive-status");
|
|
7920
|
+
}
|
|
7921
|
+
|
|
7922
|
+
async function uninstallGosuslugiKeepaliveTask() {
|
|
7923
|
+
if (process.platform === "win32") {
|
|
7924
|
+
await runCommand("schtasks.exe", ["/Delete", "/TN", gosuslugiKeepaliveTaskName(), "/F"]).catch(() => {});
|
|
7925
|
+
console.log(`Windows Task Scheduler задача удалена: ${gosuslugiKeepaliveTaskName()}`);
|
|
7926
|
+
return;
|
|
7927
|
+
}
|
|
7928
|
+
console.log("Для не-Windows удалите локальную cron-задачу вручную: iola cron list, затем iola cron delete ID.");
|
|
7929
|
+
}
|
|
7930
|
+
|
|
7931
|
+
async function printGosuslugiKeepaliveTaskStatus(options = {}) {
|
|
7932
|
+
if (process.platform === "win32") {
|
|
7933
|
+
try {
|
|
7934
|
+
const { stdout } = await runCommand("schtasks.exe", ["/Query", "/TN", gosuslugiKeepaliveTaskName(), "/FO", "LIST"]);
|
|
7935
|
+
console.log(stdout.trim());
|
|
7936
|
+
} catch {
|
|
7937
|
+
console.log(`Задача не найдена: ${gosuslugiKeepaliveTaskName()}`);
|
|
7938
|
+
}
|
|
7939
|
+
if (existsSync(gosuslugiKeepaliveLogFile())) {
|
|
7940
|
+
console.log("");
|
|
7941
|
+
console.log(`Лог: ${gosuslugiKeepaliveLogFile()}`);
|
|
7942
|
+
}
|
|
7943
|
+
return;
|
|
7944
|
+
}
|
|
7945
|
+
const rows = listCronJobs().filter((job) => String(job.command).includes("gosuslugi check"));
|
|
7946
|
+
if (options.json) printJson(rows);
|
|
7947
|
+
else printTable(rows, [["id", "ID"], ["enabled", "Вкл"], ["schedule_text", "Расписание"], ["command", "Команда"], ["last_run_at", "Последний запуск"]]);
|
|
7948
|
+
}
|
|
7949
|
+
|
|
7888
7950
|
function parseDurationMs(value) {
|
|
7889
7951
|
const text = String(value || "30m").trim().toLocaleLowerCase("ru-RU");
|
|
7890
7952
|
const match = text.match(/^(\d+(?:[.,]\d+)?)(ms|s|m|h|мин|минут|час|часа|часов)?$/u);
|
|
@@ -34,9 +34,9 @@ iola cron delete 1
|
|
|
34
34
|
|
|
35
35
|
`cron tick` проверяет задачи, которые пора выполнить. Его можно запускать вручную, через Windows Task Scheduler или другой планировщик.
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
Для Госуслуг на Windows лучше использовать готовую системную задачу без висящего окна терминала:
|
|
38
38
|
|
|
39
39
|
```bash
|
|
40
40
|
iola gosuslugi install-keepalive
|
|
41
|
-
iola
|
|
41
|
+
iola gosuslugi keepalive-status
|
|
42
42
|
```
|
|
@@ -98,6 +98,8 @@ iola gosuslugi status
|
|
|
98
98
|
iola gosuslugi check
|
|
99
99
|
iola gosuslugi keepalive
|
|
100
100
|
iola gosuslugi install-keepalive
|
|
101
|
+
iola gosuslugi keepalive-status
|
|
102
|
+
iola gosuslugi uninstall-keepalive
|
|
101
103
|
iola gosuslugi terms
|
|
102
104
|
iola gosuslugi consent
|
|
103
105
|
iola gosuslugi connect
|
|
@@ -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
|
|
|
@@ -99,14 +100,22 @@ iola gosuslugi keepalive
|
|
|
99
100
|
iola gosuslugi keepalive --once
|
|
100
101
|
```
|
|
101
102
|
|
|
102
|
-
|
|
103
|
+
Полностью автоматический режим через системный планировщик Windows:
|
|
103
104
|
|
|
104
105
|
```bash
|
|
105
106
|
iola gosuslugi install-keepalive
|
|
106
|
-
iola
|
|
107
|
+
iola gosuslugi keepalive-status
|
|
107
108
|
```
|
|
108
109
|
|
|
109
|
-
|
|
110
|
+
На Windows создается задача Task Scheduler `iola-gosuslugi-keepalive`, которая каждые 30 минут выполняет `iola gosuslugi check --silent` без постоянно открытого окна терминала.
|
|
111
|
+
|
|
112
|
+
Удалить задачу:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
iola gosuslugi uninstall-keepalive
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Если сессия протухла, CLI запишет это в лог и при следующей ручной команде попросит выполнить `iola gosuslugi connect`.
|
|
110
119
|
|
|
111
120
|
## Отключение
|
|
112
121
|
|