fix: expand workbench session rail in web probe

This commit is contained in:
Codex
2026-06-27 02:39:04 +00:00
parent 2107937b78
commit b4186fbd59
5 changed files with 118 additions and 14 deletions
@@ -777,9 +777,10 @@ async function ensureWorkbenchComposerReady(options = {}) {
}
async function createProbeSessionFromUi(options = {}) {
const railExpansion = await ensureSessionRailExpandedForProbe();
const create = page.locator("#session-create").first();
if (!(await create.isVisible({ timeout: Math.min(timeoutMs, 5000) }).catch(() => false))) {
return { ok: false, method: "ui-click", reason: "session-create-not-visible" };
return { ok: false, method: "ui-click", reason: "session-create-not-visible", railExpansion };
}
const before = await collectWorkbenchReadyState();
await create.click();
@@ -797,10 +798,36 @@ async function createProbeSessionFromUi(options = {}) {
method: "ui-click",
before: before.workspace,
after: after.workspace,
composer: after.composer
composer: after.composer,
railExpansion
};
}
async function ensureSessionRailExpandedForProbe() {
const before = await collectWorkbenchReadyState();
if (before?.workspace?.sessionCreateVisible === true) {
return { ok: true, action: "already-visible", before: before.workspace, after: before.workspace, valuesRedacted: true };
}
const toggle = page.locator("#session-collapse-toggle").first();
const toggleVisible = await toggle.isVisible({ timeout: Math.min(timeoutMs, 2000) }).catch(() => false);
if (before?.workspace?.sessionRailCollapsed !== true || !toggleVisible) {
return { ok: false, action: "not-expanded", reason: before?.workspace?.sessionRailCollapsed === true ? "collapse-toggle-not-visible" : "session-rail-not-collapsed", before: before.workspace, after: before.workspace, valuesRedacted: true };
}
await toggle.click();
await page.waitForFunction(() => {
const visible = (element) => {
if (!element) return false;
const rect = element.getBoundingClientRect();
const style = window.getComputedStyle(element);
return rect.width > 0 && rect.height > 0 && style.visibility !== "hidden" && style.display !== "none";
};
const rail = document.querySelector("#session-sidebar");
return Boolean(visible(document.querySelector("#session-create")) || (rail && rail.getAttribute("data-collapsed") === "false"));
}, null, { timeout: Math.min(timeoutMs, 5000) }).catch(() => null);
const after = await collectWorkbenchReadyState();
return { ok: after?.workspace?.sessionCreateVisible === true, action: "expanded-session-rail", before: before.workspace, after: after.workspace, valuesRedacted: true };
}
async function collectWorkbenchReadyState() {
return page.evaluate(() => {
const activeTab = document.querySelector(".session-tab[data-active='true'], .session-tab[aria-selected='true']");
@@ -808,6 +835,15 @@ async function collectWorkbenchReadyState() {
const input = document.querySelector("#command-input");
const send = document.querySelector("#command-send");
const form = document.querySelector("#command-form");
const visible = (element) => {
if (!element) return false;
const rect = element.getBoundingClientRect();
const style = window.getComputedStyle(element);
return rect.width > 0 && rect.height > 0 && style.visibility !== "hidden" && style.display !== "none";
};
const sessionCreate = document.querySelector("#session-create");
const sessionRail = document.querySelector("#session-sidebar");
const sessionCollapseToggle = document.querySelector("#session-collapse-toggle");
const warning = document.querySelector(".composer-warning")?.textContent?.trim() || null;
const mode = document.querySelector(".composer-mode")?.textContent?.trim() || null;
const draft = input && typeof input.value === "string" ? input.value : "";
@@ -831,7 +867,14 @@ async function collectWorkbenchReadyState() {
activeSessionId: sessionId,
activeConversationId: conversationId,
activeStatus: activeTab?.getAttribute("data-status") || null,
tabCount: document.querySelectorAll(".session-tab").length
tabCount: document.querySelectorAll(".session-tab").length,
sessionCreatePresent: Boolean(sessionCreate),
sessionCreateVisible: visible(sessionCreate),
sessionRailPresent: Boolean(sessionRail),
sessionRailCollapsed: sessionRail ? sessionRail.getAttribute("data-collapsed") === "true" || sessionRail.classList.contains("is-collapsed") : null,
sessionCollapseTogglePresent: Boolean(sessionCollapseToggle),
sessionCollapseToggleVisible: visible(sessionCollapseToggle),
sessionCollapseToggleExpanded: sessionCollapseToggle ? sessionCollapseToggle.getAttribute("aria-expanded") : null
},
composer: {
ready: composerReady,