feat: default session name to '{workspace} {tool_type}', improve terminal tab title
ToolStarter:
- Auto-populate Session Name as '{workspace.name} {tool_type.display_name}'
when a tool type is selected
- Track whether user has manually edited the name (nameEdited flag) to avoid
overwriting their custom input
Terminal page:
- Fetch instance display_name via getUserSessions for tab title
- Tab title format: '{display_name} {terminal_session_name} — Terminal'
instead of just '{session_name} — Terminal'
Quality gates: tsc --noEmit pass, npm run build pass, 82/82 tests pass
This commit is contained in:
@@ -9,6 +9,7 @@ import { useTerminalSessions } from "./use-terminal-sessions";
|
||||
import type { TerminalSession } from "../api/terminal";
|
||||
import type { ModifierKey } from "./use-special-keys";
|
||||
|
||||
|
||||
const SESSIONS_TO_INFO = (sessions: TerminalSession[]): TerminalSessionInfo[] =>
|
||||
sessions.map((s) => ({
|
||||
id: s.id,
|
||||
@@ -45,6 +46,10 @@ export const useTerminalPage = () => {
|
||||
const { isOpen: isKeyboardOpen, height: keyboardHeight } =
|
||||
useVirtualKeyboard();
|
||||
|
||||
const [instanceDisplayName, setInstanceDisplayName] = useState<string | null>(
|
||||
null,
|
||||
);
|
||||
|
||||
const {
|
||||
sessions,
|
||||
activeSessionId,
|
||||
@@ -57,6 +62,26 @@ export const useTerminalPage = () => {
|
||||
error,
|
||||
} = useTerminalSessions(instanceId ?? "");
|
||||
|
||||
// Fetch instance details for tab title
|
||||
useEffect(() => {
|
||||
if (!instanceId) return;
|
||||
const load = async () => {
|
||||
try {
|
||||
// Try to find instance in user sessions first
|
||||
const { getUserSessions } = await import("../api/sessions");
|
||||
const allSessions = await getUserSessions();
|
||||
const match = allSessions.find((s) => s.id === instanceId);
|
||||
if (match) {
|
||||
setInstanceDisplayName(match.display_name);
|
||||
return;
|
||||
}
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
};
|
||||
void load();
|
||||
}, [instanceId]);
|
||||
|
||||
// Auto-create default session
|
||||
useEffect(() => {
|
||||
if (!loading && sessions.length === 0 && !error && instanceId) {
|
||||
@@ -71,12 +96,13 @@ export const useTerminalPage = () => {
|
||||
return;
|
||||
}
|
||||
const active = sessions.find((s) => s.id === activeSessionId);
|
||||
const name = active?.name ?? `Instance ${instanceId.slice(0, 8)}`;
|
||||
document.title = `${name} — Terminal — Headquarter`;
|
||||
const sessionName = active?.name ?? "Session";
|
||||
const baseName = instanceDisplayName ?? `Instance ${instanceId.slice(0, 8)}`;
|
||||
document.title = `${baseName} ${sessionName} — Terminal — Headquarter`;
|
||||
return () => {
|
||||
document.title = "Headquarter";
|
||||
};
|
||||
}, [instanceId, activeSessionId, sessions]);
|
||||
}, [instanceId, activeSessionId, sessions, instanceDisplayName]);
|
||||
|
||||
// Sync refs with sessions
|
||||
useEffect(() => {
|
||||
|
||||
Reference in New Issue
Block a user