Skip to main content

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=md

format=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-клиентов. Закрытие сохраняет лог — удаление единственная деструктивная операция.

Рекомендуемый ритм для агентов

  1. start — запись start при взятии задачи (доказательство claim'а).
  2. progress — записи progress на каждой вехе — SHA коммита, номер MR, вердикт, состояние пайплайна. Push-first (Майкл #8882): не копите до конца сессии.
  3. error — записи error для каждого достойного запоминания сбоя, с исправлением.
  4. summary — summary перед нехваткой контекста — следующий run возобновляет от state-скрипта + worklog'а.
  5. 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). Пути чтения и удаления не изменились — они ничего не создают.