feat(workspace): the console tab bar is the session view's only header

The status/name/back-arrow row is gone; Tools sits at the tab bar's right
end and the pipeline/feature pickers show only with a template.
LaneConsolePane is reduced to the terminal (no title, no Active runs, no
New run): RunHistory.tsx, api.run.history and the page's active-sessions
poll are removed.
This commit is contained in:
2026-10-03 12:13:11 +07:00
parent 4df944c6aa
commit b7efba8747
17 changed files with 177 additions and 1941 deletions
-38
View File
@@ -119,7 +119,6 @@
* - `RunStartArgs` — exported API; see TSDoc on the symbol for behavior.
* - `RunHandle` — exported API; see TSDoc on the symbol for behavior.
* - `RunListResponse` — exported API; see TSDoc on the symbol for behavior.
* - `DashboardRunHistoryItem` — exported API; see TSDoc on the symbol for behavior.
* - `CwdSuggestion` — exported API; see TSDoc on the symbol for behavior.
* - `ModelChoice` — exported API; see TSDoc on the symbol for behavior.
* - `EffortChoice` — exported API; see TSDoc on the symbol for behavior.
@@ -309,11 +308,6 @@
* the signature and return type as stable unless release notes say otherwise.
* When behavior changes, update the `@file` overview and relevant tests.
*
* **DashboardRunHistoryItem**
* Part of this module's public contract. Downstream imports should treat
* the signature and return type as stable unless release notes say otherwise.
* When behavior changes, update the `@file` overview and relevant tests.
*
* **CwdSuggestion**
* Part of this module's public contract. Downstream imports should treat
* the signature and return type as stable unless release notes say otherwise.
@@ -2109,12 +2103,6 @@ export const api = {
run: {
/** GET /api/run - lanes with a live tmux-backed run, computed fresh from tmux state. */
list: () => request<RunListResponse>("/run"),
/** GET /api/run/history - persisted run history from `dashboard_runs`. */
history: (limit = 50, options?: { laneId?: number }) => {
const qs = new URLSearchParams({ limit: String(limit) });
if (options?.laneId !== undefined) qs.set("laneId", String(options.laneId));
return request<{ items: DashboardRunHistoryItem[] }>(`/run/history?${qs.toString()}`);
},
/** GET /api/run/binary - whether the lane tool's CLI was found on PATH (fresh look). */
binary: (tool: LaneTool = "claude") =>
request<{ found: boolean; path: string | null }>(`/run/binary?tool=${tool}`),
@@ -3960,32 +3948,6 @@ export interface RunListResponse {
items: RunHandle[];
}
/**
* A row from the persistent `dashboard_runs` sqlite table - every run ever
* spawned via /api/run, including completed / errored / killed ones long
* after the in-memory handle has been reaped.
*
* Field names are snake_case here (they mirror the DB columns) whereas the live
* {@link RunHandle} uses camelCase; the `isLive` flag bridges the two by telling
* the UI whether a matching live handle still exists for this row.
*/
export interface DashboardRunHistoryItem {
id: string;
session_id: string | null;
cwd: string;
model: string | null;
permission_mode: PermissionMode | null;
effort: EffortLevel | null;
resume_session_id: string | null;
prompt_preview: string | null;
status: "running" | "killed" | "abandoned";
exit_code: number | null;
started_at: string;
ended_at: string | null;
isLive: boolean;
tool: LaneTool;
}
/** One suggested working directory for the Run page's cwd picker. */
export interface CwdSuggestion {
/** "dashboard" = this server's own cwd; "home" = user's home dir; "recent"