Session auto rename

The session menu presents Auto rename directly after Rename. Clicking it asks the configured title model to generate a concise title from existing conversation content. Manual Rename remains unchanged; background title scheduling is outside this change.

Behavior

The sidebar native menu, sidebar web menu and conversation menu share one client action. The client shows progress, deduplicates in-flight clicks per session, and waits for a correlated reply. Existing content and the old title remain visible while generation runs. Failure keeps the old title and shows a retryable message; a transport timeout reports an unconfirmed result and asks the user to reload the page to check the final title, without replaying the operation.

The existing rename_session command without a title invokes the existing no-tools title generator in a worker thread, managed by a background task that releases the WebSocket receive loop immediately. The task is retained until completion and removed afterward; loss of the requesting socket does not undo a saved title. Providers without verified native JSON Schema support use the existing prompt fallback with the same local schema validation and no tools. Chat history supplies text; function-only conversations supply their call title and result. Successful names are persisted before session_updated is broadcast. The loaded conversation and all clients see the same title. Explicitly generated names are treated as user-chosen titles so later background naming does not replace them. A renamed or deleted conversation is rechecked after generation; stale results are discarded.

Scope and verification

No changes to operating-system permissions, approval modes, automatic first-turn titling or other applications. Verify public rename commands for chat and function-only histories, failures, manual-name races, deletion and persistence; verify menu actions and disconnected feedback. Run affected Python tests, repository contracts, Web tests and typecheck, documentation links, production build and installed-App acceptance.

Implementation status

The menu, shared client action, and background rename handler are implemented and have passed independent specification and quality reviews. Focused checks cover nine public-handler cases and three client/menu cases. Final regression gates pass: 539 Python checks, 807 web checks, TypeScript, production build, and documentation links; one optional-environment Python case is skipped. Installed-App acceptance confirms that the explicit sidebar action generates a title with the configured DeepSeek model, updates the sidebar and tab, and survives a full page reload. The acceptance conversation remains visible.