65 lines
2.6 KiB
TypeScript
65 lines
2.6 KiB
TypeScript
import { seedSessionTask, withSession } from "../actions"
|
|
import { test, expect } from "../fixtures"
|
|
import { inputMatch } from "../prompt/mock"
|
|
|
|
test("task tool child-session link does not trigger stale show errors", async ({ page, llm, project }) => {
|
|
test.setTimeout(120_000)
|
|
|
|
const errs: string[] = []
|
|
const onError = (err: Error) => {
|
|
errs.push(err.message)
|
|
}
|
|
page.on("pageerror", onError)
|
|
|
|
try {
|
|
await project.open()
|
|
await withSession(project.sdk, `e2e child nav ${Date.now()}`, async (session) => {
|
|
const taskInput = {
|
|
description: "Open child session",
|
|
prompt: "Search the repository for AssistantParts and then reply with exactly CHILD_OK.",
|
|
subagent_type: "general",
|
|
}
|
|
await llm.toolMatch(inputMatch(taskInput), "task", taskInput)
|
|
const child = await seedSessionTask(project.sdk, {
|
|
sessionID: session.id,
|
|
description: taskInput.description,
|
|
prompt: taskInput.prompt,
|
|
})
|
|
project.trackSession(child.sessionID)
|
|
|
|
await project.gotoSession(session.id)
|
|
|
|
const header = page.locator("[data-session-title]")
|
|
await expect(header.getByRole("button", { name: "More options" })).toBeVisible({ timeout: 30_000 })
|
|
|
|
const card = page
|
|
.locator('[data-component="task-tool-card"]')
|
|
.filter({ hasText: /open child session/i })
|
|
.first()
|
|
await expect(card).toBeVisible({ timeout: 30_000 })
|
|
await card.click()
|
|
|
|
await expect(page).toHaveURL(new RegExp(`/session/${child.sessionID}(?:[/?#]|$)`), { timeout: 30_000 })
|
|
await expect(header.locator('[data-slot="session-title-parent"]')).toHaveText(session.title)
|
|
await expect(header.locator('[data-slot="session-title-child"]')).toHaveText(taskInput.description)
|
|
await expect(header.locator('[data-slot="session-title-separator"]')).toHaveText("/")
|
|
await expect
|
|
.poll(
|
|
() =>
|
|
header.locator('[data-slot="session-title-separator"]').evaluate((el) => ({
|
|
left: getComputedStyle(el).paddingLeft,
|
|
right: getComputedStyle(el).paddingRight,
|
|
})),
|
|
{ timeout: 30_000 },
|
|
)
|
|
.toEqual({ left: "8px", right: "8px" })
|
|
await expect(header.getByRole("button", { name: "More options" })).toHaveCount(0)
|
|
await expect(page.getByText("Subagent sessions cannot be prompted.")).toBeVisible({ timeout: 30_000 })
|
|
await expect(page.getByRole("button", { name: "Back to main session." })).toBeVisible({ timeout: 30_000 })
|
|
await expect.poll(() => errs, { timeout: 5_000 }).toEqual([])
|
|
})
|
|
} finally {
|
|
page.off("pageerror", onError)
|
|
}
|
|
})
|