Hermes
a3c6b5f153
fix: разрешить timeout/failed → collecting (перезапуск сбора через /start и /retry)
CI / test (push) Successful in 41s
CI / build-and-package (amd64, linux) (push) Successful in 38s
CI / build-and-package (amd64, windows) (push) Successful in 36s
2026-08-16 23:45:05 +05:00
Hermes
80c1097a72
log: логировать каждый переход статуса задачи (task N: status "from" → "to")
CI / test (push) Successful in 45s
CI / build-and-package (amd64, linux) (push) Successful in 41s
CI / build-and-package (amd64, windows) (push) Successful in 38s
2026-08-16 23:33:13 +05:00
Hermes
76ec7d21f1
fix: блокировать ввод в running-задачу (S3: нельзя running→collecting); разрешены /cancel и /status N
CI / test (push) Successful in 46s
CI / build-and-package (amd64, linux) (push) Successful in 41s
CI / build-and-package (amd64, windows) (push) Successful in 40s
2026-08-16 23:21:30 +05:00
Hermes
c8cd425b29
fix: генерить task_tag (UUID) при создании задачи; защита feat/' при пустом tag
CI / test (push) Successful in 46s
CI / build-and-package (amd64, linux) (push) Successful in 44s
CI / build-and-package (amd64, windows) (push) Successful in 41s
2026-08-16 23:07:30 +05:00
Hermes
35d9a74ef1
fix: разрешить формат owner/repo в имени репозитория (E3 был слишком строг, слэш ≠ эскейп)
CI / test (push) Successful in 50s
CI / build-and-package (amd64, linux) (push) Successful in 40s
CI / build-and-package (amd64, windows) (push) Successful in 45s
2026-08-16 23:00:56 +05:00
Hermes
4044c0866f
fix: создавать каталог worktree при старте app (decider запускается до воркера)
CI / test (push) Successful in 54s
CI / build-and-package (amd64, linux) (push) Successful in 51s
CI / build-and-package (amd64, windows) (push) Successful in 47s
2026-08-16 22:13:36 +05:00
Hermes
e055d1937c
fix: создавать каталог worktree в prepareRepos (decider: не могу сменить папку на ./worktrees)
CI / test (push) Successful in 44s
CI / build-and-package (amd64, linux) (push) Successful in 43s
CI / build-and-package (amd64, windows) (push) Successful in 42s
2026-08-16 22:04:16 +05:00
Hermes
f0794300b5
docs: подробная инструкция по сборке и автообновлению из Gitea Packages
2026-08-16 21:43:06 +05:00
Hermes
4a6ed57971
worker: add reviewer stage (branch→review→push) with R1-R6 errors
CI / test (push) Successful in 47s
CI / build-and-package (amd64, linux) (push) Successful in 43s
CI / build-and-package (amd64, windows) (push) Successful in 40s
2026-08-16 21:21:21 +05:00
Hermes
130dc59840
fix: пути (db, worktree) и config.yaml резолвятся рядом с .exe, а не от CWD
CI / test (push) Successful in 1m5s
CI / build-and-package (amd64, linux) (push) Successful in 44s
CI / build-and-package (amd64, windows) (push) Successful in 43s
2026-08-16 20:31:08 +05:00
Hermes
91e91ac3ce
feat: команда /help — справка по всем командам бота
CI / test (push) Successful in 47s
CI / build-and-package (amd64, linux) (push) Successful in 41s
CI / build-and-package (amd64, windows) (push) Successful in 41s
2026-08-16 20:05:11 +05:00
Hermes
0142686592
ci: только linux/windows amd64 — mac/arm пока не нужны
CI / test (push) Successful in 55s
CI / build-and-package (amd64, linux) (push) Successful in 41s
CI / build-and-package (amd64, windows) (push) Successful in 47s
2026-08-16 13:11:40 +05:00
Hermes
63668a0f69
fix(update): убрать псевдо-версию latest, всё в commit-<sha7>
...
CI / test (push) Successful in 59s
CI / build-and-package (amd64, darwin) (push) Successful in 42s
CI / build-and-package (amd64, linux) (push) Successful in 40s
CI / build-and-package (amd64, windows) (push) Successful in 42s
CI / build-and-package (arm64, darwin) (push) Successful in 45s
CI / build-and-package (arm64, linux) (push) Successful in 41s
Gitea: при параллельных PUT матрицы (6 платформ) псевдо-версия 'latest'
переуказывается на каждый снимок, companion-файлы и бинарь разъезжаются
между версиями — checksum U4 ломался.
- CI: публикует бинарь+.version+.sha256 в (commit-<sha7>), latest не используется
- Updater.ResolveLatest: новейшая commit-* версия из листинга /api/v1/packages/{owner}/generic/{package},
берём макс id у которой есть бинарь текущей платформы
- Download/Verify/checksum читают ТУ ЖЕ version, а не latest
2026-08-16 13:05:37 +05:00
Hermes
05c17ed1f7
refactor(update): владелец пакета — жёсткая константа packageOwner
...
CI / test (push) Successful in 48s
CI / build-and-package (amd64, darwin) (push) Successful in 46s
CI / build-and-package (amd64, linux) (push) Successful in 44s
CI / build-and-package (amd64, windows) (push) Successful in 47s
CI / build-and-package (arm64, darwin) (push) Successful in 45s
CI / build-and-package (arm64, linux) (push) Successful in 47s
- Убран update.owner из конфига, ldflag -X main.updateOwner, vars.TC_GITEA_OWNER и UPDATE_OWNER в Make.
- Владелец пакета = packageOwner (kamelion), совпадает с владельцем репо и создателем токена.
- app.New снова с 3 аргументами; тесты обновлены.
2026-08-16 12:37:53 +05:00
Hermes
8fcafcdffd
feat(update): владелец пакета вшивается в бинарь
...
CI / test (push) Successful in 42s
CI / build-and-package (amd64, darwin) (push) Successful in 39s
CI / build-and-package (amd64, linux) (push) Successful in 42s
CI / build-and-package (amd64, windows) (push) Successful in 41s
CI / build-and-package (arm64, darwin) (push) Successful in 48s
CI / build-and-package (arm64, linux) (push) Successful in 47s
- -X main.updateOwner (из vars.TC_GITEA_OWNER / Make UPDATE_OWNER), фоллбэк на update.owner в конфиге.
- update.owner больше не обязателен: гейты в startAutoCheck и handleUpdateCmd требуют только update.base_url.
- Обновлены main, app.New (сигнатура), CI, Makefile, тесты.
2026-08-16 12:33:17 +05:00
Hermes
4de6a4241a
feat(update): отдельный update.base_url и вшитый токен read:package
...
CI / test (push) Successful in 43s
CI / build-and-package (amd64, darwin) (push) Successful in 40s
CI / build-and-package (amd64, linux) (push) Successful in 39s
CI / build-and-package (amd64, windows) (push) Successful in 39s
CI / build-and-package (arm64, darwin) (push) Successful in 36s
CI / build-and-package (arm64, linux) (push) Successful in 39s
- update.base_url (env UPDATE_BASE_URL) — хост обновления, БЕЗ фоллбэка на git.base_url: пустое значение отключает update.
- Убран git.token из пути обновления: теперь отдельный токен.
- Токен read:package вшивается при сборке (-X main.updateToken из секрета TC_UPDATE_TOKEN), приоритет над update.token из конфига.
- Обновлены app.New (сигнатура), main, Makefile, CI, config.example, тесты.
2026-08-16 12:20:53 +05:00
Hermes
44ac7d73bb
feat: автообновление бинаря из Gitea Packages (/update, /status, авто-уведомление)
CI / test (push) Successful in 47s
CI / build-and-package (amd64, darwin) (push) Successful in 40s
CI / build-and-package (amd64, linux) (push) Successful in 40s
CI / build-and-package (amd64, windows) (push) Successful in 39s
CI / build-and-package (arm64, darwin) (push) Successful in 40s
CI / build-and-package (arm64, linux) (push) Successful in 40s
2026-08-16 11:50:23 +05:00
Hermes
bd3d825738
feat: множественные репозитории (Repos) и клонирование в воркере
...
CI / test (push) Successful in 46s
CI / build-and-package (amd64, darwin) (push) Successful in 36s
CI / build-and-package (amd64, linux) (push) Successful in 37s
CI / build-and-package (amd64, windows) (push) Successful in 44s
CI / build-and-package (arm64, darwin) (push) Successful in 35s
CI / build-and-package (arm64, linux) (push) Successful in 36s
- Task.Repos []string (XML-колонка repos, обратная совместимость с repo)
- config: блок git {base_url, token}
- аналитик: ответ repos[], шаблон показывает список
- core: propose без repos → возврат в сбор (E1)
- worker вариант A: один dev из общего cwd, prepareRepos клонирует
недостающие репо (git clone), validateRepoName (E3), ErrRepoNotGit (E4)
- ошибки E1-E4 в worker/errors.go
2026-08-16 09:18:15 +05:00
Hermes
7be75fe14f
fix: убран префикс tg:// из chat_id при отправке (chat not found); тесты проверяют ChatID
CI / test (push) Successful in 54s
CI / build-and-package (amd64, darwin) (push) Successful in 45s
CI / build-and-package (amd64, linux) (push) Successful in 46s
CI / build-and-package (amd64, windows) (push) Successful in 46s
CI / build-and-package (arm64, darwin) (push) Successful in 44s
CI / build-and-package (arm64, linux) (push) Successful in 47s
2026-08-16 00:19:49 +05:00
Hermes
005877bfc5
fix: логировать ошибку getUpdates в polling — тишина не пряталась в консоли
CI / test (push) Successful in 46s
CI / build-and-package (amd64, darwin) (push) Successful in 44s
CI / build-and-package (amd64, linux) (push) Successful in 43s
CI / build-and-package (amd64, windows) (push) Successful in 44s
CI / build-and-package (arm64, darwin) (push) Successful in 50s
CI / build-and-package (arm64, linux) (push) Successful in 47s
2026-08-15 23:56:24 +05:00
Hermes
2b761aa0bc
feat: встроенные агенты opencode (analyst, dev) через go:embed, распаковка по умолчанию в ./agents рядом с бинарём
CI / test (push) Successful in 38s
CI / build-and-package (amd64, darwin) (push) Successful in 34s
CI / build-and-package (amd64, linux) (push) Successful in 33s
CI / build-and-package (amd64, windows) (push) Successful in 35s
CI / build-and-package (arm64, darwin) (push) Successful in 35s
CI / build-and-package (arm64, linux) (push) Successful in 34s
2026-08-15 15:41:26 +05:00
Hermes
9e7c95e1d8
feat: opencode.config_dir — каталог с агентами (OPENCODE_CONFIG_DIR)
CI / test (push) Successful in 43s
CI / build-and-package (amd64, darwin) (push) Successful in 40s
CI / build-and-package (amd64, linux) (push) Successful in 39s
CI / build-and-package (amd64, windows) (push) Successful in 41s
CI / build-and-package (arm64, darwin) (push) Successful in 42s
CI / build-and-package (arm64, linux) (push) Successful in 41s
2026-08-15 14:59:10 +05:00
Hermes
87fae9b82c
fix: дефолтные пути — ./worktrees и ./ratatoskr.db (независимо от ОС)
CI / test (push) Successful in 40s
CI / build-and-package (amd64, darwin) (push) Successful in 39s
CI / build-and-package (amd64, linux) (push) Successful in 40s
CI / build-and-package (amd64, windows) (push) Successful in 40s
CI / build-and-package (arm64, darwin) (push) Successful in 42s
CI / build-and-package (arm64, linux) (push) Successful in 45s
2026-08-15 11:26:34 +05:00
Hermes
3298bbcf8a
feat: кросс-компиляция linux/windows/darwin × amd64/arm64
CI / test (push) Successful in 35s
CI / build-and-package (amd64, darwin) (push) Successful in 1m7s
CI / build-and-package (amd64, linux) (push) Successful in 34s
CI / build-and-package (amd64, windows) (push) Successful in 1m9s
CI / build-and-package (arm64, darwin) (push) Successful in 1m11s
CI / build-and-package (arm64, linux) (push) Successful in 1m17s
2026-08-15 11:12:22 +05:00
a24077f37f
chore: удалён build.yml (дублирует ci.yaml)
2026-08-15 10:48:57 +05:00
Hermes
39a79f78fc
fix: build+package в одной джобе (upload-artifact несовместим с Gitea)
build-test / build (push) Successful in 38s
2026-08-15 10:48:51 +05:00
Hermes
de43236e0b
fix: flat filename в generic-пакете (ratatoskr вместо linux-amd64/ratatoskr)
build-test / build (push) Successful in 33s
2026-08-15 10:46:00 +05:00
Hermes
ea84e07f84
fix: используем vars.GIT_MAIN_URL + секрет TC_GITEA_TOKEN (вм. хардкода)
build-test / build (push) Successful in 27s
2026-08-15 10:23:40 +05:00
Hermes
572f39cb3e
CI: Gitea Actions workflow (test+build+package), Makefile, config.yaml.example, .gitignore
build-test / build (push) Successful in 32s
CI / test (push) Successful in 32s
CI / build (push) Failing after 37s
CI / package (push) Has been skipped
2026-08-15 10:20:34 +05:00
Hermes
35fcffe035
config: удалён GiteaCfg (GITEA_URL/GITEA_TOKEN) — нигде не использовался, хранение в локальной SQLite
build-test / build (push) Successful in 33s
2026-08-15 10:07:54 +05:00
Hermes
c72b41b2c5
app: composition root (A1-A4), Run(ctx), handleIncoming (вариант A), фикс config.Load(""), GetActiveTaskByChatID, main.go обновлён
build-test / build (push) Successful in 35s
2026-08-15 09:51:03 +05:00
Hermes
4641090398
worker: добавлен пакет worker (W1-W5, poll-цикл, runTask, промпт, тесты) + SetMaxOpenConns(1) для SQLITE_BUSY
build-test / build (push) Successful in 42s
2026-08-15 09:14:34 +05:00
Hermes
dfe374dd55
internal/analyst: Decider через opencode (A1–A4)
...
build-test / build (push) Successful in 1m15s
- Analyst struct: строит Go-template промпт из history+draft
- opencode.Runner.Run (agent=analyst) → ExtractVerdict → ExtractJSON
- Валидация phase/полей → core.Decision
- A1 DecodeFail, A2 RunError, A3 Validation, A4 NotReady
- MockRunner в тестах (11 тестов, зелёные)
- core.runDecide оборачивает ошибки аналитика в D1 ErrDecideFailed
- allow ready→collecting (фикс для правки готового черновика)
2026-08-15 00:32:49 +05:00
Hermes
2957bf0d63
internal/core: ядро-машина состояний (ProcessTurn поверх storage) + история задач в БД
...
build-test / build (push) Successful in 1m11s
- status = единственный источник истины (collecting/ready как фазы диалога)
- команды /start /cancel /skip /retry N /status N /continue N
- Decider интерфейс (аналитик→opencode, мок для тестов)
- task_history таблица для промпта аналитика
- allow ready→collecting (правка черновика)
2026-08-15 00:27:16 +05:00
Hermes
089e196dbc
internal/storage: SQLite-БД для задач и трассировок (таски + статус-машина, трассы с группировкой по task_id)
build-test / build (push) Successful in 30s
2026-08-14 23:38:57 +05:00
Hermes
cc180d7517
internal/chat/telegram: long-poll Channel (sendMessage, getUpdates, Options→HTML, apiURL заменяем для тестов)
build-test / build (push) Successful in 38s
2026-08-14 23:02:58 +05:00
Hermes
238f00ba36
internal/config: загрузка YAML+env (подстановка ${VAR:-default}, defaults, env override, Validate)
build-test / build (push) Successful in 1m23s
2026-08-14 22:59:23 +05:00
Hermes
c9d69594cc
internal/chat: мультиканальный Router (UserID-сессии, routing, pending Ask/ответ) + Channel интерфейс
build-test / build (push) Successful in 41s
2026-08-14 20:33:04 +05:00
Hermes
4ebafc48d0
internal/opencode: runner (idle/hard timeout, process-group kill, resume-fallback) + verdict/json parsing
build-test / build (push) Successful in 1m21s
2026-08-14 13:29:05 +05:00
Hermes
53cf901707
ratatoskr-go: стартовый каркас (Go-бинарь, CI, structure)
build-test / build (push) Successful in 47s
2026-08-14 08:53:57 +05:00