diff --git a/packages/app/src/pages/session/helpers.ts b/packages/app/src/pages/session/helpers.ts index 73cb4c9a2..31316c51f 100644 --- a/packages/app/src/pages/session/helpers.ts +++ b/packages/app/src/pages/session/helpers.ts @@ -44,6 +44,7 @@ export const createSessionTabs = (input: TabsInput) => { fileBrowser() && (input.tabs().active() === SESSION_OPEN_FILE_TAB || input.tabs().all().includes(SESSION_OPEN_FILE_TAB)), ) + const runInspectorOpen = createMemo(() => input.tabs().active() === "runInspector" || input.tabs().all().includes("runInspector")) const panelTabs = createMemo( () => { const seen = new Set() @@ -51,7 +52,7 @@ export const createSessionTabs = (input: TabsInput) => { .tabs() .all() .flatMap((tab) => { - if (tab === "context" || tab === "review" || tab === "vault" || tab === SESSION_PREVIEW_TAB) return [] + if (tab === "context" || tab === "review" || tab === "vault" || tab === SESSION_PREVIEW_TAB || tab === "runInspector") return [] if (tab === SESSION_OPEN_FILE_TAB && !fileBrowser()) return [] const value = input.pathFromTab(tab) ? input.normalizeTab(tab) : tab if (seen.has(value)) return [] @@ -68,6 +69,7 @@ export const createSessionTabs = (input: TabsInput) => { const activeTab = createMemo(() => { const active = input.tabs().active() if (active === "context") return active + if (active === "runInspector") return active if (active === SESSION_PREVIEW_TAB && previewOpen()) return active if (active === "vault" && vaultOpen()) return active if (active === SESSION_OPEN_FILE_TAB && openFileOpen()) return active @@ -79,6 +81,7 @@ export const createSessionTabs = (input: TabsInput) => { if (vaultOpen()) return "vault" if (previewOpen()) return SESSION_PREVIEW_TAB if (contextOpen()) return "context" + if (runInspectorOpen()) return "runInspector" if (review() && hasReview()) return "review" return "empty" }) @@ -98,6 +101,7 @@ export const createSessionTabs = (input: TabsInput) => { return { contextOpen, previewOpen, + runInspectorOpen, openFileOpen, panelTabs, openedTabs, diff --git a/packages/app/src/pages/session/session-side-panel.tsx b/packages/app/src/pages/session/session-side-panel.tsx index fefa143e1..8fc556823 100644 --- a/packages/app/src/pages/session/session-side-panel.tsx +++ b/packages/app/src/pages/session/session-side-panel.tsx @@ -254,7 +254,8 @@ export function SessionSidePanel(props: { return false }) - // Panel menu items + // Panel menu items — Files Changed lives as the "review" trigger, Context and + // Preview are the secondary tabs, and Run Inspector is the third requested tab. const panelMenuItems = createMemo((): PanelMenuItem[] => [ { id: "context", @@ -263,6 +264,13 @@ export function SessionSidePanel(props: { available: () => true, active: contextOpen, }, + { + id: "runInspector", + label: "Run Inspector", + icon: "pulse", + available: () => true, + active: () => activeTab() === "runInspector", + }, { id: SESSION_PREVIEW_TAB, label: "Preview", @@ -447,6 +455,32 @@ export function SessionSidePanel(props: { + + tabs().close("runInspector")} + aria-label={language.t("common.closeTab")} + /> + + } + hideCloseButton + onMiddleClick={() => tabs().close("runInspector")} + > +
+ +
Run Inspector
+
+
+ + +
+
Live run — reuses the same bridge as the Work Column
+
+
Run Inspector (sidebar)
+
Iterations, pulse, fidelity — third tab next to Files Changed + Context.
+
sparkline placeholder
+
Iteration137 / 200Fidelity0.9987
+
+
Full plot stays in Work Column — click “Open in Work Column” to focus.
+
+
+
+
@@ -645,6 +694,38 @@ export function SessionSidePanel(props: {
+ + {language.t("common.closeTab")} + 0}> + + + + } + placement="bottom" + gutter={10} + > + tabs().close("runInspector")} + aria-label={language.t("common.closeTab")} + /> + + } + hideCloseButton + onMiddleClick={() => tabs().close("runInspector")} + > +
+ +
Run Inspector
+
+
+ + +
+
Live run — same bridge as Work Column
+
+
Run Inspector (sidebar)
+
Iterations, pulse, fidelity — third tab next to Files Changed + Context.
+
sparkline placeholder
+
Iteration137 / 200Fidelity0.9987
+
+
Full plot stays in Work Column — click “Open in Work Column” to focus.
+
+
+
+