Skip to content

feat(chat): show project breadcrumb and inline title editing - #1831

Merged
Tioit-Wang merged 4 commits into
mainfrom
feat/topbar-project-title
Oct 23, 2026
Merged

Tioit-Wang merged 4 commits into
mainfrom
feat/topbar-project-title

Conversation

@Tioit-Wang

@Tioit-Wang Tioit-Wang commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

What changed

The conversation top bar now names the active session's project beside its title and lets a local task title be renamed in place.

  • Left cluster: folder glyph + project name + / + task title, using the quiet 11px / 12.5px type scale from the supplied design. The right action lane is untouched, and the demo's row hairline is intentionally not added.
  • The crumb resolves from the active session, not the globally selected workspace: remote sessions use their remote workspace label, local sessions use their project path and naming preference, and temporary chats keep the title only. Before the first prompt there is no session, so the active workspace names the draft.
  • Clicking the title swaps it for a boxless inline editor focused and selected on the next frame. Enter or blur commits the trimmed value through the existing rename path; Escape cancels; IME composition owns both keys; empty and unchanged drafts are silent no-ops; failures keep the previous title and raise the existing toast.
  • Remote and scheduled-run transcripts render a plain title because their titles are host-owned. Switching sessions closes the editor and cannot commit one task's draft onto another.

Why

The project a task belongs to was previously hidden in the title tooltip, and renaming required the sidebar dialog. Showing the crumb and editing the title in place matches the project/task hierarchy the rest of the app already exposes, without duplicating the whole top bar or changing its drag geometry.

Files

  • apps/desktop/src/components/ConversationTopbar.tsx
  • apps/desktop/src/styles/chrome.css
  • apps/desktop/test/topbar-title-inline-rename.test.mjs (new)
  • apps/desktop/test/{topbar-title-rendering,thinking-ui,plan-mode-source-contract}.test.mjs
  • docs/spec/04-ux/08-component-spec.md + docs/zh-CN/spec/04-ux/08-component-spec.md

Validation

  • Local affected suites: 148 pass, 0 fail across the 12 topbar/chrome contracts plus the 7 suites that were red on the previous base (auto-update, background-tasks, chat-error-message, live-work-concrete-adapters, pending-interactive-restore, session-turn-ended, shutdown-regenerate-persistence).
  • tsc -p apps/desktop/tsconfig.json --noEmit → exit 0.
  • node scripts/check-style-tokens.mjs → style tokens OK.
  • node docs/scripts/check-locales.mjs → 86 pairs verified; node docs/scripts/check-docs.mjs → 585 pages verified.
  • git merge-base --is-ancestor origin/main HEAD → 0.

CI status

All required checks pass on head b67f2e249, which merges origin/main 86944c05d:

  • JS build / typecheck / lint / architecture / test
  • Docs checks
  • Head contains latest base
  • Rust host-core format / lint / test
  • Rust host-core Windows / transcript cache E2E
  • Trusted extensions Electron E2E

Electron/verify:ui:* E2E was not run locally; this is a renderer-only surface and the user did not request UI E2E.

Known limitations

The repo has no DOM test harness, so the inline editor's focus, Enter/Escape/blur, and IME paths are covered by SSR markup and source-contract tests rather than driven events. No live visual pass was run.

v_wyxgwang added 4 commits October 23, 2026 09:50
The conversation top bar only named the task, so the project a task
belongs to was hidden in a tooltip. Put the session's project beside the
title as a quiet crumb and let the title be renamed in place, matching
the rest of the app's direct-manipulation surfaces.

The crumb resolves from the active session rather than the globally
selected workspace, so a task opened from another project stays labeled
correctly. Remote and scheduled transcripts keep a plain title because
their titles are host-owned, and the inline editor keeps the existing
title limit, IME behavior, and error path.

Update the component spec and its source-contract test to match.
The English component spec now describes the project breadcrumb, the
inline title editor, and the expanded state table. Mirror those changes
in the Chinese page so the locale pair keeps the same table and fence
structure and the docs checks stay green.
An empty chat has no session yet, so the crumb previously disappeared
even though the app still has an active project. Fall back to the
workspace name only in that state; temporary sessions keep the plain
title because they belong to no project.

Extend the topbar rendering test and both spec pages.
@Tioit-Wang
Tioit-Wang merged commit d281f40 into main Oct 23, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant