Files
kandev/apps/web/components/task/chat/messages
João Salavisa 3ff3a53c75 feat(web): structured renderers for Kandev MCP tool calls (#987)
* feat(web): structured renderers for Kandev MCP tool calls

Replaces the raw-JSON dump in the chat for every Kandev MCP tool with a
per-tool structured view. Adds 20 renderers — list (workspaces, workflows,
workflow-steps, tasks, related, agents, executor-profiles, task-documents),
task actions (create/update/move/message), plan + document (get/create/update/
delete plan, get/write document, conversation), and ask_user_question.

Dispatcher in message-renderer.tsx scans tool name on metadata.title,
comment.content and normalized.generic.name (the ACP normalizer's "name"
field is the *category*, often "other", not the tool name).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(web): address review feedback on kandev tool renderers

- ask_user_question: accept both keyed-object and positional-array
  responses shapes (replaces pickObject which silently discarded arrays).
- get_task_conversation: derive the "more not shown" footer from the
  backend's absolute total so paginated responses don't hide pages, and
  guard the leading SummaryDot when both taskId and sessionId are absent.
- IdChip: drop unused label prop and the stale label="..." callsites.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(web): consistency follow-ups on kandev renderers

- Guard the leading SummaryDot in GetTaskPlanRenderer and
  UpdateTaskPlanRenderer the same way GetTaskConversationRenderer does.
- ListTaskDocumentsRenderer reads `total` from the result like the other
  list renderers, so a paginated document list doesn't understate.
- Add a regression test for the positional-array `responses` branch in
  matchAnswerForQuestion.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(web): guard MoveTaskRenderer SummaryDot

Same orphan-dot fix as the other renderers — only render the dot when
both flanking IdChips are present.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(web): final review nits on kandev renderers

- ask_user_question: use shortId() for the pending_id hint instead of
  hand-rolled slice (handles short ids correctly).
- list-renderers: add a stable index fallback to every map() key when
  id/name/title are all absent, so React reconciliation stays stable on
  malformed payloads.
- MoveTaskRenderer: extend hasExpandableContent to cover workflow/step
  rows so they remain accessible without task/prompt data.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-21 04:14:42 +01:00
..
2026-03-02 08:54:58 +00:00