Files
1jehuang--jcode/docs/DESKTOP_SINGLE_SESSION_DESIGN.md
wehub-resource-sync a789495a98
FreeBSD Smoke / FreeBSD Smoke (x86_64) (push) Has been cancelled
CI / Quality Guardrails (push) Has been cancelled
CI / Build & Test (macos-latest) (push) Has been cancelled
CI / Build & Test (ubuntu-latest) (push) Has been cancelled
CI / Build & Test (windows-latest) (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / PowerShell Syntax (push) Has been cancelled
CI / Windows Cross-Target Check (Linux) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:34 +08:00

73 lines
2.6 KiB
Markdown

# Desktop Single Session Design
This document describes the visual target for the default `jcode-desktop` single-session mode.
## Layering
The single-session view is the primitive desktop surface. The Niri/workspace mode should later compose multiple single-session views rather than redefining what a session looks like.
```mermaid
flowchart TD
SingleSession[SingleSessionView\nspawn/connect/render one Jcode session]
Workspace[Niri Workspace Wrapper\narrange many sessions]
SessionA[SingleSessionView]
SessionB[SingleSessionView]
SessionC[SingleSessionView]
Workspace --> SessionA
Workspace --> SessionB
Workspace --> SessionC
```
## Typography
Primary font target:
- Family: `JetBrainsMono Nerd Font`
- Weight: `Light`
- Preferred fontconfig match: `JetBrainsMonoNerdFont-Light.ttf`
- Fallback family: `JetBrainsMono Nerd Font Mono`, then `JetBrains Mono`, then `monospace`
Rationale:
- Mono fits code, transcripts, tool output, and terminals.
- Light weight makes a dense agent session feel less heavy than the current blocky bitmap prototype.
- Nerd Font coverage gives us room for subtle icons/status glyphs later without switching fonts.
## Type scale
Initial target scale for a single session window:
| Role | Size | Weight | Notes |
| --- | ---: | --- | --- |
| Session title | 18 px | Light | Top left, preserves original case |
| Message body | 15 px | Light | Main transcript and assistant text |
| Metadata/status | 12 px | Light | Muted status, model, cwd, token/debug hints |
| Inline code/tool output | 14 px | Light | Same family, tighter line-height |
Line-height targets:
- Body: 1.45
- Code/tool output: 1.35
- Metadata: 1.25
## Rendering note
The current prototype uses a custom 5x7 bitmap text path in `render_helpers.rs`. That path is acceptable for layout exploration only. The next rendering pass should replace single-session text with a real font renderer that can:
1. Load `JetBrainsMonoNerdFont-Light.ttf` from fontconfig/system font paths.
2. Preserve casing and punctuation.
3. Shape/rasterize UTF-8 text, including Nerd Font glyphs.
4. Support alpha text over the existing WGPU surface.
5. Allow the workspace wrapper to reuse the same text renderer for each composed session.
## First visual goal
The default single-session window should read as one calm, focused coding conversation:
- No workspace lane/status strip.
- One content column.
- Large breathing room around the transcript.
- JetBrains Mono Light Nerd for every text element.
- Muted graphite text over the existing soft pastel background until a more final theme is chosen.