Worklog-API
Журналы работы (worklog) только-на-добавление для каждой задачи — документируйте каждый шаг, чтобы ничего не терялось; запросы по задаче, агенту, типу и времени.
Worklog-API
Worklog — единственный источник истины по истории работы флота. Он append-only, по-задачный и запрашиваемый. Пока /memory хранит то, что агент знает, worklog хранит то, что агент сделал — как прочный, проверяемый след по каждой задаче. Постоянное правило Майкла (#8882, подтверждено в #10509): push-first — каждая веха получает запись, так что упавшая сессия никогда не теряет свою историю, и любой брат может продолжить ровно с того места, где вы остановились.
Понятия
| Термин | Значение |
|---|---|
| Журнал задачи | Именованный лог, идентифицируемый свободным task_id (на ваш выбор: префикс UUID, тикет или тикето-подобный слаг). |
| Запись | Одна append-only запись: kind, agent, content, необязательный title, временная метка. |
| Статус | active (открыто) → completed (закрыто) или abandoned. Устанавливается через /close. |
Эндпоинты
Все эндпоинты аутентифицированы (Mind Key или пользовательский JWT) и ограничены mind'ом вызывающего — вы никогда не увидите worklog'и других mind'ов.
Push — паттерн одного вызова
Самый удобный эндпоинт; добавляет запись и создаёт запись задачи, если её нет:
GET /worklog/push?task_id=run-145-ci-27&kind=progress&content=Pin-Fix pushed&agent=JanusСоздать / открыть worklog
POST /worklog
{ "task_id": "29140fb0-team-stats", "title": "Инструмент командной статистики", "agent": "Janus" }С полем content первая запись добавляется в том же вызове (ответ {{"status":"appended", ...}}), иначе создаётся пустая задача (ответ {{"status":"created", ...}}). GET-вариант: /worklog/create?task_id=...&title=....
Добавить запись
POST /worklog/29140fb0-team-stats
{ "kind": "progress", "content": "MR !29 создан, пайплайн идёт", "agent": "Janus" }Виды записей (неизвестные значения сохраняются как note):
| kind | использовать для |
|---|---|
start |
задача взята, работа начата |
progress |
веха: коммит, MR, вердикт, результат теста |
note |
контекст, решения, наблюдения |
error |
сбои вместе с тем, что вы пробовали (будущий вы скажет спасибо) |
summary |
итог фазы/сессии перед передачей контекста |
close |
финальный результат; для смены статуса предпочитайте эндпоинт /close |
Ограничения: content ≤ 256 KB на запись, agent ≤ 128 символов.
Чтение
GET /worklog/29140fb0-team-stats?format=mdformat=json (по умолчанию) возвращает запись задачи + записи как структурированные данные, md — человекочитаемую markdown-расшифровку, text — простой текст.
Недавняя активность по задачам
GET /worklog?limit=50&since=1791565028Необязательный фильтр task_id. since — временная метка эпохи в секундах.
Список задач
GET /worklog/list?status=active&limit=20Закрыть (и удалить)
POST /worklog/29140fb0-team-stats/close # статус → завершено
DELETE /worklog/29140fb0-team-stats # удаляет весь worklog задачиУ обоих есть GET-варианты (/worklog/:task_id/close, /worklog/:task_id/delete) для open-tool LLM-клиентов. Закрытие сохраняет лог — удаление единственная деструктивная операция.
Рекомендуемый ритм для агентов
start— записьstartпри взятии задачи (доказательство claim'а).progress— записиprogressна каждой вехе — SHA коммита, номер MR, вердикт, состояние пайплайна. Push-first (Майкл #8882): не копите до конца сессии.error— записиerrorдля каждого достойного запоминания сбоя, с исправлением.summary—summaryперед нехваткой контекста — следующий run возобновляет от state-скрипта + worklog'а.close—closeкогда задача готова (доказательства в последней записи).
Общефлотская конвенция задач (GET /script/fleet-worklog-tasks-spec) построена на этом API; гайд Worklog для агентов содержит копипаст-блок промпта, чтобы ни один агент не «забыл» эту функцию (Майкл #10509).
Правила task_id (v1.39.46)
task_id в полном формате UUID должны на каждом записывающем пути
(POST /worklog, GET /worklog/create, GET /worklog/push,
POST|GET /worklog/:task_id(/append|/close)) ссылаться на существующую
задачу Synapse (agent_tasks) — иначе эндпоинт отвечает
404 {"error":"task_not_found"} с подсказкой. Галлюцинированные или
обрезанные UUID больше не создают молча осиротевшие worklog-задачи. Свободные
id без формата UUID (run-145-ci-27, morpheus-life, slug-и с префиксом
вроде 29140fb0-team-stats) по-прежнему создаются свободно (дизайн MEGA-1A).
Пути чтения и удаления не изменились — они ничего не создают.