53 lines
2.3 KiB
Markdown
53 lines
2.3 KiB
Markdown
---
|
|
id: "03-frontend-command-row"
|
|
title: "Frontend command output row"
|
|
status: done
|
|
wave: 2
|
|
depends_on: ["01-backend-normalization"]
|
|
plan: "plan.md"
|
|
spec: "../../specs/ui/acp-shell-command-output.md"
|
|
---
|
|
|
|
# Task 03: Frontend Command Output Row
|
|
|
|
## Acceptance
|
|
|
|
- The expanded `ToolExecuteMessage` shows live/final combined output, explicit `Exit code N` or `Exit code unavailable`, and truncation state.
|
|
- Exit `0`, nonzero exit, ACP error, and unknown exit use success, failure, failure, and neutral semantics respectively; missing exit is never success.
|
|
- Focused component tests cover the four states without changing chat state or introducing a new API/hook.
|
|
|
|
## Verification
|
|
|
|
```bash
|
|
(cd apps && pnpm --filter @kandev/web test -- components/task/chat/messages/tool-execute-message.test.tsx)
|
|
(cd apps/web && pnpm run typecheck)
|
|
(cd apps && pnpm --filter @kandev/web lint)
|
|
```
|
|
|
|
## Files likely touched
|
|
|
|
- `apps/web/components/task/chat/types.ts`
|
|
- `apps/web/components/task/chat/messages/tool-execute-message.tsx`
|
|
- `apps/web/components/task/chat/messages/tool-execute-message.test.tsx` (new)
|
|
|
|
## Dependencies
|
|
|
|
Task 01 defines the serialized optional-exit/truncation contract. This task can run in parallel with Task 02 afterward because their file ownership does not overlap.
|
|
|
|
## Inputs
|
|
|
|
- Spec scenarios for known success, known failure, unknown exit, live output, and truncation.
|
|
- Existing `ExpandableRow`, `useExpandState`, and `transformPathsInText` patterns in `tool-execute-message.tsx`.
|
|
- Mobile-parity constraints in `apps/web/AGENTS.md`.
|
|
|
|
## Output contract
|
|
|
|
Report rendered labels/status rules, tests run, files changed, blockers, and mobile layout risks. Set this task to `done` and update `plan.md` only after targeted tests, typecheck, and lint pass.
|
|
|
|
## Completion Report
|
|
|
|
- Added expandable live/final stdout and stderr, exact or unavailable exit labels, truncation state, and neutral unknown-exit semantics.
|
|
- Normalized ACP `in_progress` to the running UI state and treated cancellation as terminal without inventing an exit code.
|
|
- Changed the shell payload types, command-row component, and focused component tests.
|
|
- Component tests, web typecheck, lint, production build, and desktop/mobile Playwright coverage passed. No blockers remain; very long unbroken output relies on the tested wrapping and scroll bounds.
|