6.0 KiB
6.0 KiB
Why
Мост в ежедневной работе с 13.10.2026, агент меняется часто: v2 → v3 → v4 за два дня. Каждое обновление — ручная
процедура на виртуалке банка: положить agent.py в корень общей папки, остановить старый процесс, скопировать файл
в ~/jira-agent-bundle, check, run. Хаб уже знает версию агента (agent_version в claim, предупреждение по
min_agent_version), но доставлять код не умеет; падение агента никто не поднимает — он запущен в терминале.
Решения владельца 14.10.2026 (brainstorming):
- доставка через хаб (вариант A): явная публикация
jira-hub agent publish, версия в ответеclaim, файл — поGET /agent/release; работает и по HTTP, и через общую папку; - перезапуск и откат — маленький постоянный запускатель
run.pyрядом сagent.py(вариант 2): подмена файла, пробный период, откат на прежнюю версию, перезапуск после падения; - код в общую папку не кладётся: агент получает файл через API хаба, пишет и запускает его в каталоге
run.pyна виртуалке (~/jira-agent-bundle); - хаб правится параллельно с
web-app(#21), без пересечения требований спек; - после этого change ручное обновление на виртуалке — одно последнее (v5 +
run.py); дальше агент обновляется сам после публикации, которую делает Claude в чеклисте закрытия PR агента.
What Changes
- jira-hub:
- команда
jira-hub agent publish <agent.py>: версия из строкиAGENT_VERSION = N, sha256, только вверх; файл иmanifest.jsonв<данные>/release/(права 0700); схема БД не меняется; - ответ
POST /agent/claim— полеagent_release: {version, sha256} | null; POST /agent/claimпринимаетupdate_stateиlauncher_version; хаб держит последние значения в памяти;- маршрут
GET /agent/release(агентский токен) →{version, sha256, content}; 404no_release; GET /agentи MCPagent_status: опубликованная версия, состояние обновления, версия запускателя, подсказка «агент запущен без run.py».
- команда
- jira-agent (версия 5):
- новый файл
run.py(Python 3.9, stdlib): дочернийagent.py run, код 75 — подмена файла, пробный период до первого успешногоclaim(10 мин), откат, перезапуск после падения с паузой 5…300 с, своя блокировкаrun.py.lock; agent.py: в паузе между командами (ответclaimбез команды) видитagent_releaseновее себя, скачивает, проверяет sha256, компиляцию и версию в файле, запускаетagent.py.new selftest, выходит с кодом 75; отвергнутую версию не повторяет; без запускателя только пишет в лог раз в час; выключательauto_updateвagent.json;- новая команда
agent.py selftest;update.json— состояние обновления рядом сagent.py; - README: запуск через
run.py, последнее ручное обновление, публикация.
- новый файл
Capabilities
New Capabilities
Modified Capabilities
agent: состав (запускатель,auto_update,selftest), доставка и запуск; новые требования — самообновление и запускатель.hub-api: маршруты агента (agent_release,update_state,GET /agent/release); новое требование — публикация версии агента.mcp:agent_statusпоказывает публикацию и состояние обновления.
Non-Goals
- подпись файла ключом (целостность — sha256; доверие — как сейчас, см. design R-9);
- снятие публикации и откат «вниз» по команде — откат делается публикацией старого кода с новой версией;
- самообновление
run.py— обновляется вручную, меняется редко; - изменение схемы БД хаба и
min_agent_version(не поднимается); - показ публикации в веб-приложении (#21) — после его merge, отдельно.
Impact
- jira-hub:
release.py(новый),cli.py,api.py(h_claim, маршрут,h_agent_get),queue.agent_viewне меняется,mcp_server.fmt_agent, README, ARCHITECTURE.md, CLAUDE.md. Пересечение с веткойfeat/21-web-app— толькоapi.py(разные места); дельтаhub-apiweb-app трогает «Процесс и доступ», эта — «Маршруты агента». - jira-agent:
src/agent.py(v5),src/run.py(новый), тесты, README, ARCHITECTURE.md, CLAUDE.md. - Выкатка: хаб — pull + kickstart; агент — последнее ручное обновление (v5 +
run.py), затем живая проверка публикацией v6, сломанной v7 (откат) и v8.