19 Commits

Author SHA1 Message Date
程序员阿江(Relakkes)
5d908b2828 feat: redesign sidebar — project filter dropdown + time-grouped session list
Replace project-grouped session list with a flat time-grouped layout
(Today / Yesterday / Last 7 days / Last 30 days / Older) matching
the original Claude Code desktop design. Add ProjectFilter component
with multi-select dropdown for filtering by project. Deduplicate
sessions by ID in the store to fix duplicate-key React errors caused
by the same session appearing across multiple project directories.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 01:08:55 +08:00
程序员阿江(Relakkes)
767abfc233 fix: restore tool calls on page refresh — handle server type mapping
Server marks assistant messages with tool_use blocks as type='tool_use'
(not 'assistant'), and user messages with tool_result blocks as
type='tool_result' (not 'user'). mapHistoryMessagesToUiMessages now
handles both type variants when parsing content arrays, so tool calls
are properly restored after page refresh.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 23:26:29 +08:00
程序员阿江(Relakkes)
5e4e7d3955 fix: soften error indicators in tool call groups — icon instead of red badge
- Replace "ERROR" text badge with material error icon (less visually jarring)
- Add "pending" icon when tool results haven't been matched yet
- Remove red border on error groups — all groups now use the same neutral border
- Single tool call ERROR badge also changed to icon

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 23:13:18 +08:00
程序员阿江(Relakkes)
5e71da88c3 fix: preserve intermediate text between tool calls, restore thinking blocks on refresh
Two bugs fixed:

1. Intermediate assistant text (e.g. "项目已经有 node_modules,直接启动") was
   lost between tool calls because content_start didn't flush streamingText.
   Now we flush accumulated text as assistant_text before switching to the
   next content block.

2. History reload (page refresh) now restores thinking blocks alongside
   tool_use, tool_result, and text blocks. Previously thinking blocks were
   intentionally dropped — now they're preserved for full conversation replay.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 23:01:37 +08:00
程序员阿江(Relakkes)
83559ce7be feat: sync CLI status (verb, elapsed, tokens) to StreamingIndicator
- Store statusVerb from server 'status' WebSocket messages
- StreamingIndicator now shows the real CLI verb (Canoodling, Thinking, etc.)
  plus elapsed time and output token count
- Only show StreamingIndicator during tool_executing (not during thinking,
  where ThinkingBlock already provides feedback)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 22:49:33 +08:00
程序员阿江(Relakkes)
905d4216a5 fix: hide duplicate StreamingIndicator during thinking, fix plain text color in code blocks
- StreamingIndicator now only shows during 'tool_executing' state
  (ThinkingBlock already animates during 'thinking')
- Plain text code blocks force dark color (#24292f) instead of prism's
  default faded gray which was invisible on our beige background

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 22:45:07 +08:00
程序员阿江(Relakkes)
8cc38f6979 chore: delete highlightCode.ts, remove hljs CSS, fix test for new DiffViewer
- Deleted desktop/src/components/chat/highlightCode.ts (no longer needed)
- Removed all .hljs-* CSS rules from globals.css
- Updated chatBlocks test for react-diff-viewer-continued (doesn't render
  diff content in jsdom, so test verifies component mounting instead)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 22:29:52 +08:00
程序员阿江(Relakkes)
9dc0dbacad feat: rewrite MarkdownRenderer code blocks with React CodeViewer — no more HTML string templates
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 22:21:47 +08:00
程序员阿江(Relakkes)
e3714e9245 feat: rewrite DiffViewer with react-diff-viewer-continued — GitHub PR-style diffs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 22:19:58 +08:00
程序员阿江(Relakkes)
b9a387406a feat: rewrite CodeViewer with prism-react-renderer — pure React rendering, GitHub theme
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 22:17:48 +08:00
程序员阿江(Relakkes)
3b83c9bd34 fix: disable hljs.highlightAuto for unknown languages, hide line numbers for plain text
- highlightAuto was misdetecting plain text (file trees, command output) as
  code and applying wrong syntax colors (red keywords, green tags, etc.)
- Now only highlights when language is explicitly specified and known to hljs
- Code blocks without a specified language render as clean plain text
- Line numbers hidden for plain text blocks (only shown for actual code)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 21:55:00 +08:00
程序员阿江(Relakkes)
be9ae99793 fix: address code review findings — consistent px-3, rounded-lg, leading-[1.3]
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 21:41:48 +08:00
程序员阿江(Relakkes)
d25be78f0c fix: streamline AssistantMessage, ThinkingBlock, and StreamingIndicator — remove avatar, compact layout
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 21:38:14 +08:00
程序员阿江(Relakkes)
001994d0bd feat: group consecutive tool calls into collapsible summaries in MessageList
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 21:36:39 +08:00
程序员阿江(Relakkes)
458945da52 feat: add ToolCallGroup + compact ToolCallBlock for collapsible tool summaries
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 21:35:04 +08:00
程序员阿江(Relakkes)
defa72292e fix: sync markdown code blocks with CodeViewer compact styles
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 21:32:41 +08:00
程序员阿江(Relakkes)
7ed1c920cc fix: compact diff viewer — tighter rows, gutter indicators, softer borders
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 21:31:40 +08:00
程序员阿江(Relakkes)
cc9fe832c2 fix: compact code block rendering — tighter line height, softer borders
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 21:30:34 +08:00
程序员阿江(Relakkes)
993b96cd39 Stabilize the desktop transcript so long agent sessions stay readable
The desktop app now keeps the composer stable while turns are active,
reduces low-signal tool noise in the transcript, restores project context
under the composer after session creation, and relies on the CLI's own
permission requests instead of injecting broader desktop-side Bash asks.

This also brings in the supporting desktop app source tree and the server
routes/session metadata needed for git info, filesystem browsing, session
resume, slash commands, and SDK-backed permission bridging so the UI can
operate as a coherent feature instead of a partial patch.

Constraint: Desktop transcript needs to stay usable during long multi-tool sessions without hiding file-change diffs
Constraint: Permission prompts must mirror CLI behavior closely enough that read-only commands do not get desktop-only prompts
Rejected: Keep rendering Read/Bash bodies inline | too noisy and unlike the intended transcript model
Rejected: Commit only the touched desktop files | would leave the newly introduced desktop app incomplete in git history
Confidence: medium
Scope-risk: broad
Reversibility: messy
Directive: Treat non-writing tools as summary-first transcript events; do not re-expand them by default without validating the UX against long sessions
Tested: cd desktop && bun run lint
Tested: cd desktop && bun run test -- --run
Tested: bun test src/server/__tests__/conversations.test.ts
Not-tested: Manual visual regression against the exact screenshots in a live desktop session
Not-tested: Full root TypeScript check (repository still has unrelated extracted-native parse failures)
2026-04-06 20:37:44 +08:00