On Windows, Claude Code can record the same working directory with a
different drive-letter case (D:\projects\demo vs d:\projects\demo),
depending on how the terminal or editor was launched. The session
manager grouped sessions by the raw projectDir string, so one project
showed up as two groups with its history split between them.
Group by a normalized key instead: trailing separators are dropped for
every path, and Windows paths (drive letter or UNC prefix) are also
case-folded with "/" unified to "\". POSIX paths stay case-sensitive.
The group still displays the original path of its first session; the
stored session data is untouched.
Refs #8233
Rebuild the session page around structured transcripts.
- Session list: project groups start collapsed and remember the ones
expanded by hand; unchanged session files reuse their parsed metadata.
- Backend: all nine agents' transcripts parse into structured blocks
(text, thinking, tool call / result, image, event, step); the Codex
rollout parser is rewritten. New commands stream transcripts over a
Channel, serve full block content, image bytes and Finder reveal behind
validated content refs, and export a session as a Markdown file; a
transcript cache (8 entries / 96 MB) keyed by source fingerprints.
open_external now only allows http, https and mailto.
- Reader: turns laid out as prompt -> execution steps -> final reply, with
steps folded into a one-line summary, failures always shown, each
agent's native symbols and verbs, all / conversation / changes filters,
a conversation outline, in-session find, Markdown rendering (ported
from #6332), image lightbox and copy / export as Markdown.
- Review follow-ups: clippy, Codex 0.119-0.128 duplicate steps and late
failure status, Grok Build in-progress refresh, full arguments for long
shell commands, and shared block helpers across the parsers.
Co-authored-by: bigben446 <bigben446@users.noreply.github.com>
Co-authored-by: Jason <farion1231@gmail.com>
Pages (phase 4):
- Usage: v7 layout (filter row, four metrics with more on demand,
switchable trend, request log / provider / model / pricing tabs, data
sources sheet). Latency becomes output speed: output / (duration -
first token), shown only for requests with at least 100 output tokens;
provider totals sum output and generation time instead of averaging.
- Sessions: single-column list grouped by project or time, drilling into
a reader with resume, find, question jump and copy actions.
- MCP and Skills share one app matrix (neutral checks, retry on failed
writes, column bulk actions with undo); MCP add/edit moves into a
drawer with form/JSON modes; Skills merges installed and discover and
always shows a Pi column.
- Prompts: one page for eight apps including Hermes SOUL.md, enable and
disable as buttons, delete with undo instead of a confirm, copy to
other apps, import existing files; app pages show the active prompt.
- Add provider is two steps: pick a preset (always-on search including
Chinese names and domains, categories inferred for display, sorted by
name with no promoted entries), then fill the form. Edit pages name
the provider and warn when it is the one in use.
- App page menu links to that app's usage.
Visual pass (phase 6):
- Secondary pages cover only the content area so the sidebar stays.
- Cmd/Ctrl+K jumps to apps, pages and settings sections.
- Legacy button variants, primary color, dialogs, toasts and sheets
follow v7 tokens; hard-coded palette classes and 10px text across
the remaining components are replaced with tokens.
* Fix Codex VS Code session previews
* fix(codex): use last IDE request heading for session previews
A markdown heading inside the active selection / open file could precede the real injected request, so matching the first "## My request for Codex:" heading picked selection content instead of the user prompt. Scan for the last matching heading (the IDE injects the real request as the final section) on both the Rust title path and the frontend TOC preview path.
Add regression tests for the selection-heading case, and pin the known best-effort limitation when the request body itself repeats the heading.
---------
Co-authored-by: Jason <farion1231@gmail.com>