diff --git a/.project-docs/30-worklog/tasks/20260831-show-progress-messages-a14f9c2d.md b/.project-docs/30-worklog/tasks/20260831-show-progress-messages-a14f9c2d.md new file mode 100644 index 0000000..cfef58e --- /dev/null +++ b/.project-docs/30-worklog/tasks/20260831-show-progress-messages-a14f9c2d.md @@ -0,0 +1,84 @@ +# Task: Show assistant progress messages + +## Identity + +- Task ID: 20260831-show-progress-messages-a14f9c2d +- Mode: Feature +- Branch: codex/20260831-show-progress-messages-a14f9c2d-show-progress-messages-a14f9c2d +- Worktree: /Users/inmanx/Documents/makelore-show-progress-messages-a14f9c2d +- Base commit: 38f85f6b5e4dc4e2c5e5b9f8f4506554cfd578f5 +- Owner: codex +- Status: Ready for Integration + +## Scope + +- Identify the protocol and UI classification of assistant text emitted before + or between tool calls, using the supplied screenshot only as a visual example. +- Verify that this stage/progress narration is projected and rendered in the + current Makelore Code timeline without exposing Pi-private wire types. +- Preserve per-item expand/collapse after a stage explanation has completed, + including after the enclosing turn has settled. +- Make every collapsed thinking, stage-explanation, and tool-output preview + start from its first visible block and line, including horizontally + overflowing text. + +## Intent And Constraints + +- Preserve the product-neutral `ConversationMessageNode` / Snapshot / Patch + contract and the Main-owned Pi boundary. +- Keep private reasoning distinct from user-visible assistant narration and + tool execution output. +- Do not modify the occupied primary worktree or the separate running + development worktree. + +## Outcome + +- Confirmed the raw message is an ordinary Pi assistant message whose turn ends + with `stopReason: toolUse`; Main normalizes it to an assistant + `ConversationMessageNode` with `stopReason: tool-use`. +- Confirmed the Renderer semantically projects non-final assistant text as + `assistant-commentary` / “过程说明”, rather than treating it as hidden + thinking or as a tool node. +- Confirmed active process groups open automatically and show a compact + one-line stage explanation with an expand control; settled process groups + retain the explanation behind their collapsed process summary while the + final assistant answer remains visible. +- Added explicit regression coverage proving a completed stage explanation + remains collapsed to its first line by default, retains its own expand + control, reveals the complete Markdown body, and can be collapsed again. +- Changed collapsed process preview selection to use the first displayable + block and first non-empty line for thinking, assistant commentary, and tool + output. Long lines retain their beginning and use a trailing ellipsis. +- Kept every collapsed preview viewport at horizontal offset zero on content + and size changes. Tail-only streaming updates no longer replace or replay an + unchanged head preview, while expanded content remains complete. + +## Verification + +- Installed the existing lockfile with pinned pnpm `10.33.4`; 1,015 packages + were reused from the local store and no manifest or lockfile changed. +- Focused Vitest passed: 3 files / 28 tests covering live Pi event projection, + durable session hydration, and Coding timeline process/commentary rendering. +- Follow-up focused Vitest passed: 1 file / 9 tests, including completed + commentary expand/collapse and stable head-preview assertions across + streaming updates. +- `pnpm run typecheck`: passed. +- Scoped ESLint for the changed Renderer, unit, and Electron E2E files: passed. +- `pnpm run build:vite`: passed; only the repository's existing dynamic-import + and bundle-size warnings were emitted. +- Focused Electron Playwright E2E passed: 1 file / 2 tests, including first-line + thinking display, head truncation, and a measured tool-preview + `scrollLeft` of zero. +- Inspected `electron/coding-runtime/pi/event-projector.ts`, + `electron/coding-runtime/pi/session-projector.ts`, + `shared/coding-conversation-contracts.ts`, and + `src/pages/Chat/CodingConversationTimeline.tsx` across the complete + classification path. + +## Follow-ups + +- None. + +## Promotion Candidates + +- None recorded. diff --git a/src/pages/Chat/CodingConversationTimeline.tsx b/src/pages/Chat/CodingConversationTimeline.tsx index 2a82f2c..e4e407f 100644 --- a/src/pages/Chat/CodingConversationTimeline.tsx +++ b/src/pages/Chat/CodingConversationTimeline.tsx @@ -72,7 +72,6 @@ const WINDOW_STEP = 100; const LONG_OUTPUT_CHARS = 4_000; const STREAMING_THINKING_WINDOW_CHARS = 16_000; const PROGRESS_PREVIEW_MAX_CHARS = 360; -const PROGRESS_ROLL_CHAR_STEP = 6; const NODE_STATUS_LABELS: Record = { declared: '已声明', @@ -652,19 +651,19 @@ function toolActivityIcon(node: ConversationToolNode) { return