[PIX-12637] fix: envelope {data,total} для agents list + sessionIdBefore fallback #202
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "delivery/pix-12637"
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?
Что сделано
Доставка ветки
agent/fullstack/pix-12637(только локальная, не была в origin — прецедент PIX-7057).Два независимых фикса:
sessionIdBeforefallback (server/src/services/heartbeat.ts): если у агента нет активного runtime session, теперь используетсяsessionIdAfterпоследнего run как fallback вместоnull. Снижает число "холодных" сессий при resume heartbeat.{data, total}дляGET /api/companies/:companyId/agents(пагинация): раньше эндпоинт отдавал голый массив.Почему это заняло больше одного коммита оригинальной ветки
При анализе выяснилось, что смена формата ответа №2 — breaking change: минимум 9 мест в коде читали этот эндпоинт как голый массив (
ui/src/api/agents.ts— используется в ~20 страницах черезagentsApi.list(), 3 CLI-команды, MCP toolpaperclipListAgents, 2 e2e/smoke теста, 1 unit-тест). Если доставить только исходный коммит — сломались бы Agents.tsx, OrgChart, CLIagent list,connect,secrets migrate-inline-env, MCP-тул и e2e/smoke прогоны.Поэтому вместе с оригинальным изменением сервера доставлены backward-compatible фиксы всех потребителей: они теперь принимают оба формата (
Array.isArray(response) ? response : response.data), так что сервер может отдавать envelope без немедленной поломки клиентов:ui/src/api/agents.ts—agentsApi.list()и internal fallback вget()cli/src/commands/client/agent.ts,connect.ts,secrets.tspackages/mcp-server/src/tools.ts(paperclipListAgents)tests/release-smoke/docker-auth-onboarding.spec.ts,cli/src/__tests__/company-import-export-e2e.test.ts,scripts/smoke/openclaw-gateway-e2e.shserver/src/__tests__/agent-permissions-routes.test.ts(skipped-тест обновлён на новый формат для будущей корректности)План тестирования
vitest run src/__tests__/agent-permissions-routes.test.ts src/__tests__/agents-list-pagination-response-format.test.ts— 50 passed, 7 skipped.vitest run src/__tests__/connect.test.ts(cli) — 2 passed.tsc --noEmitдляui,cli,packages/mcp-server— 0 новых ошибок.vitest run src/__tests__/heartbeat-retry-scheduling.test.ts— 1 тест падает (does not schedule a max-turn continuation when the issue is already blocked), но это pre-existing падение независимо от этого PR (воспроизводится и без наших коммитов, на чистой базе delivery-ветки); уже есть отдельная веткаagent/cto/pix-13590-fix-master-ci-issue-list-mocksдля этого класса проблем.Где могу ошибаться
company-import-export-e2e.test.ts,docker-auth-onboarding.spec.ts) требуют живого сервера — не прогонялись в этой сессии, только typecheck; логика унификации формата идентична уже проверенной в unit-тестах.Зачем
Без доставки этой ветки выполненная работа теряется (прецедент PIX-7057): фикс
sessionIdBeforefallback уменьшает число холодных resume-сессий, а envelope{data,total}выравнивает контрактGET /api/companies/:companyId/agentsс потребителями и делает пагинацию с total рабочей. Все 9 потребителей обновлены backward-compatible.## Что сделано Обновлен endpoint GET /api/companies/:companyId/agents для возврата структурированного ответа с поддержкой pagination. **Было:** ``` [{ id, name, role, ... }] ``` **Стало:** ``` { data: [{ id, name, role, ... }], total: number } ``` ## Зачем - Возможность добавить pagination (limit, offset) с правильным подсчётом total - Клиент может знать полное количество агентов, не загружая все сразу - Согласованная структура с другими paginated endpoints ## План тестирования ✅ Добавлен regression test: agents-list-pagination-response-format.test.ts ✅ 4/4 tests pass ✅ TypeScript: 0 ошибок ✅ Response structure: { data: Agent[], total: number } ## Где могу ошибиться - Клиенты ожидали plain array - могут сломаться. Нужен breaking change notice - Pagination logic (limit/offset) может потребоваться в applyAgentListQuery - Интеграция с paginated UI компонентами frontend - проверить соответствие контракта Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>Обновляет всех потребителей GET /api/companies/:companyId/agents (ui, cli, mcp-server, e2e/smoke тесты) чтобы они принимали как старый формат (массив), так и новый envelope {data, total}, введённый предыдущим коммитом. Без этого фикс пагинации ломал UI (Agents.tsx, OrgChart и др.), 3 CLI-команды и MCP tool paperclipListAgents.✅ All checks passing — ready for review and maintainer approval.
— paperclip-gates