| Server IP : 85.155.190.233 / Your IP : 216.73.216.103 Web Server : nginx/1.24.0 System : Linux antigravity-cli 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64 User : wp-moonbloom ( 1001) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /opt/Gemini_Swarm_Core/docs/ |
Upload File : |
# План реализации локального планировщика Роя на VPS
Этот план описывает шаги по внедрению надежного, локального планировщика задач для Роя на вашем VPS. Он будет работать напрямую с локальными путями проектов (без клонирования), обеспечивая полную изоляцию контекстов и логов для каждой задачи.
---
## 🛠️ Предлагаемые изменения
### 1. [NEW] [schedule.json](file:///c:/Users/Mikhail/nocode/Gemini%20CLI/Gemini_Swarm_Core/schedule.json)
Файл конфигурации расписания. Будет содержать массив задач с указанием локального пути, cron-выражения, промпта для запуска и таймаута.
```json
[
{
"id": 1,
"task_name": "send_proposals",
"repo_path": "/opt/project-a-proposals",
"cron": "0 11 * * 2",
"prompt": "Read GEMINI.md and tasks.md. Find the next incomplete task in tasks.md, execute it, mark it as completed, and commit/push changes.",
"timeout_sec": 1800,
"enabled": true
},
{
"id": 2,
"task_name": "write_seo_articles",
"repo_path": "/var/www/html/seo-blog",
"cron": "30 11 * * 2",
"prompt": "Read GEMINI.md and tasks.md. Select the next keyword/topic from content plan, generate the article HTML, save it directly to the blog directory, mark task completed, and commit changes.",
"timeout_sec": 1800,
"enabled": true
}
]
```
### 2. [NEW] [run_agent_task.py](file:///c:/Users/Mikhail/nocode/Gemini%20CLI/Gemini_Swarm_Core/scripts/run_agent_task.py)
Автономный скрипт-обертка для запуска задачи. Будет выполнять переключение контекста в базе данных и запускать `agy` в нужной директории.
**Логика работы скрипта:**
1. Принимает аргумент `--task-id` (или считывает параметры из `schedule.json`).
2. Подключается к базе данных `sessions.db` на VPS.
3. Проверяет, существует ли сессия для данного `repo_path` и `task_name`.
- Если нет: создает новую запись в таблице `sessions` и генерирует уникальный `conversation_id` (UUID).
4. Прописывает `active_session_id` in `app_settings` (для изоляции логов).
5. Запускает `agy` в дочернем процессе:
- `cwd` = `repo_path`
- Флаги: `-p "<prompt>" --conversation <conversation_id>`
- `stdout` и `stderr` перенаправляются в `/путь_к_проекту/swarm.log`.
6. После завершения процесса `agy` отправляет результат (success/fail) и последние строки лога обратно в Telegram-мост.
---
### 3. [MODIFY] [tg_bridge.py](file:///c:/Users/Mikhail/nocode/Gemini%20CLI/Gemini_Swarm_Core/scripts/tg_bridge.py)
Интеграция фонового планировщика и новых команд в Telegram-мост.
**Что изменится:**
* **Фоновый цикл (`swarm_scheduler_loop`):**
Асинхронная функция, которая каждые 30 секунд читает `schedule.json`, парсит cron-выражения (будет использован легковесный парсер cron на чистом Python) и запускает `run_agent_task.py` в фоновом режиме через `asyncio.create_subprocess_exec`.
* **Новые Telegram-команды:**
* `/schedules` — показывает список задач, их пути, расписание и статус активности.
* `/schedule_run <id>` — позволяет принудительно запустить любую задачу из расписания прямо сейчас в фоне.
* **Menu hints:** Добавление этих команд в список автодополнения бота.
---
### 4. [MODIFY] [GEMINI.md](file:///c:/Users/Mikhail/nocode/Gemini%20CLI/Gemini_Swarm_Core/GEMINI.md)
Обновление документации: внесение описания стандартизированного манифеста для целевых репозиториев (структура файлов `GEMINI.md`, `tasks.md`, `.geminiignore` в каждом проекте).
---
## 🧪 План верификации
### Автоматические проверки (VPS):
1. **Тест парсинга cron:** Запуск юнит-теста для проверки корректности разбора cron-выражений (например, `*/5 * * * *`, `0 11 * * 2`).
2. **Тест переключения контекста:** Запуск `run_agent_task.py` вручную и проверка через sqlite-клиент, что `active_session_id` в `sessions.db` изменился на правильный и лог записался в нужную сессию.
### Ручные проверки (Telegram):
1. Отправка боту команды `/schedules` — бот должен вывести таблицу расписания из `schedule.json`.
2. Отправка команды `/schedule_run 1` — бот должен запустить задачу №1, переключить контекст на её папку, выполнить промпт, записать логи в `swarm.log` этого проекта и прислать отчет о завершении.
3. Проверка через команду `/log send_proposals` — бот должен вывести последние строки выполнения именно для этой задачи.