Five browser e2e scenarios over the existing keyless lane, one recorded base fixture per spec family: - live-interactions: one tool-free recorded turn + per-run override sidecars authored in the spec (content single-sourced from the fixture via deriveReplayScript, minted into a spec-owned temp dir). Cancel uses a hang patch with a readyFile marker — the marker proves the stream is parked mid-turn before the Stop click, so mid-stream cancellation is deterministic by construction (turn/end 'aborted', composer re-enabled). AUTH pins the non-retryable path: turn/end 'error', zero llm/retry events, composer recovers; FIXME(web-error-surface) marks the found product gap (no error copy renders — the client consumes no agent/error frames and a pre-chunk failure freezes no partial). SERVER retry appends the fixture's own success after an injected throw and proves llm-retry end-to-end in the browser via the durable llm/retry record. - question-composer: the shipped ask_user_question takeover blocks the turn mid-step on the real userInteraction seam; the test answers through the composer (the one sanctioned model-content-reactive drive step: the turn cannot complete without it) and the tool result carries the answer. Adds the composer waiting-state aria golden. - steering: steers mid-turn while the composer blocks the step (the deterministic mid-turn window). The steer rides the real wire (session.prompt mode:'steer' POSTed from the page; the locked composer has no steering gesture yet — TODO(web-steer-composer)); downstream is all product: gateway -> Agent.steer -> step-boundary drain -> durable steering/message -> SSE -> badged interjection bubble. Record mode rejects a fixture whose live reply ignored the steer. Scaffold gains the replayOverride passthrough; specs register in both tsconfig planes (client exclude, host include).
41 lines
938 B
JSON
41 lines
938 B
JSON
{
|
|
"extends": "../../tsconfig.base.json",
|
|
"compilerOptions": {
|
|
"rootDir": ".",
|
|
"outDir": "lib/types",
|
|
"jsx": "react-jsx",
|
|
"lib": [
|
|
"ES2024",
|
|
"DOM",
|
|
"DOM.Iterable"
|
|
],
|
|
"types": [
|
|
"node"
|
|
]
|
|
},
|
|
"include": [
|
|
"src",
|
|
"tests"
|
|
],
|
|
// The web e2e lane (scaffold + replay specs) boots the host spine and reads
|
|
// its Context merges — host-plane programs, checked in tsconfig.host.json;
|
|
// this client-registered project must not also hold them (one program
|
|
// cannot see both sides of the cordis Context merges).
|
|
"exclude": [
|
|
"tests/scaffold.ts",
|
|
"tests/live-interactions.e2e.ts",
|
|
"tests/question-composer.e2e.ts",
|
|
"tests/steering.e2e.ts",
|
|
"tests/replay-round-trip.e2e.ts",
|
|
"tests/seeded-history.e2e.ts"
|
|
],
|
|
"references": [
|
|
{
|
|
"path": "../../packages/client/web"
|
|
},
|
|
{
|
|
"path": "../../packages/client/modules"
|
|
}
|
|
]
|
|
}
|