Вложения из Jira по запросу: список при синхронизации, скачивание в вебе и MCP (#83) #84
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/83-attachment-fetch"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #83. Агентская часть — aep/jira-agent#43 (PR в jira-agent, агент v14).
Что сделано
issue_attachment— список вложений задачи без содержимого, его пишет толькоapply_state(агент v14 присылаетattachments);attachment_file— скачанные файлы.attachments: ссылки на вложения в описании и комментариях (!имя!,!имя|…!,[^имя],[текст|^имя]), состояние вложения (none/fetching/ready/failed), формат размера.fetch_attachment: пакет из одной команды, без хвостовогоrefreshи без резервной копии; одна команда на вложение (queue.request_fetchв одной транзакции); предел 10 МБ; агент старше v14 — 409.POST /agent/files,GET /attachments/{id},POST /attachments/{id}/fetch,GET /attachments/{id}/content; вGET /issues/{key}—attachments,description_attachment_ids,attachment_idsу комментариев; уборкаdownloads/.issueиcomment; инструментattachmentждёт файл и отдаёт путь к копии с исходным именем<данные хаба>/downloads/<id>/<имя>.Спека —
openspec/changes/attachment-fetch/, план —docs/superpowers/plans/2026-10-22-attachment-fetch-hub.md.Проверка
make checkнаde07623: pytest 741 passed, vitest 454 passed (44 файла), lint и build чистые. Финальное ревью (opus): I-1 и I-2 исправлены, повторное ревью — новых Critical/Important нет. Живой проверки в браузере не было (vitest на jsdom).Rulings I made
command_id/batch_idв состоянии — живой команды приfetching, иначе последней;readyтребует и строкуattachment_file, и файл в хранилище.(created_at, число id, id).request_fetchсначала 409agent_too_old, потом 413.TooLargeнаследуетCommandError;attachment_id— только цифры; отказыdone(нет файла, чужой размер) — один текст.fetch_attachment= 2 с вDEFAULT_PACINGиpacing_from_config.sweep_downloads— по самому новому mtime каталога и файлов; сбой уборкиdownloads/не мешаетfiles/.no_attachment;Content-Type—mime_typeтолько вида тип/подтип, иначеapplication/octet-stream.safe_nameзаменяет «.» и «..» наattachment-<id>.ready.createdс числовым id.TooLargeвPOST /batchesи в повторе команды — 413too_large.!имя!— перекрывающийся regex с условием «после!не пробел».Решения brainstorming без обсуждения — design.md #1–#13.
Deferred (в follow-up при закрытии)
T2.1 (тай-брейк id и равные
created_at), T2.2 (N+1 запросовcommandвget_issue), T2.4 (тестыfetchingповерхfailedиreadyповерх новогоfailed), T3.5 (порядок импортов вtest_queue.py), T4.4 (тест «ready, но файла нет»), T5.1 (размеры в тестах 239821 вместо 240000), T5.4 (тесты обрезкиwait_secondsи повтора), T5.5 (тест пути опроса доready), T6.2 (мигает устаревшая ошибка после повтора), T6.3 (AuthError/HubDownErrorпри опросе — текст вместо экрана входа), T6.6 (двойной import), T6.8 (тесты бейджа после invalidate и порядка на узком экране), M-4 (веб пересортирует вложения поDate.parse), F.1 (isdigit()принимает Unicode-цифры).Выкатка
git pull→make web→ перезапуск хаба владельцем →/mcp→ reconnect.jira-hub agent publish ../jira-agent/src/agent.py→agent_statusпоказывает v14.refresh→ списки вложений; MCPattachmentпо скриншоту и Excel; «Скачать» в карточке.🤖 Generated with Claude Code