From 3890a5efb6ac9e2062b62ea706f1f4cc3b38b716 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 25 Jul 2026 05:04:05 -0700 Subject: [PATCH] fix(qa): restore current scenario source and documentation references (#113639) Co-authored-by: Peter Steinberger --- .../qa-lab/src/scenario-catalog.test.ts | 19 +++++++++++++++++++ ...struction-followthrough-repo-contract.yaml | 2 +- .../telegram-reply-chain-exact-marker.yaml | 2 +- .../telegram-tools-compact-command.yaml | 2 +- .../whatsapp-access-control-dm-disabled.yaml | 2 +- .../whatsapp-access-control-dm-open.yaml | 2 +- ...hatsapp-access-control-group-disabled.yaml | 2 +- .../whatsapp-access-control-group-open.yaml | 2 +- .../channels/whatsapp-pairing-block.yaml | 2 +- .../whatsapp-tools-compact-command.yaml | 2 +- .../media/image-generation-roundtrip.yaml | 2 +- .../media/image-understanding-attachment.yaml | 2 +- .../media/native-image-generation.yaml | 2 +- .../active-memory-preprompt-recall.yaml | 2 +- .../models/model-switch-tool-continuity.yaml | 2 +- .../plugins/bundled-plugin-skill-runtime.yaml | 4 ++-- .../plugins/plugin-lifecycle-hot-reload.yaml | 2 +- .../skill-install-hot-availability.yaml | 2 +- .../plugins/skill-visibility-invocation.yaml | 2 +- .../approval-turn-tool-followthrough.yaml | 2 +- .../compaction-retry-mutating-tool.yaml | 2 +- .../runtime/docker-prometheus-smoke.yaml | 2 +- ...ty-response-recovery-replay-safe-read.yaml | 2 +- ...empty-response-retry-budget-exhausted.yaml | 2 +- .../runtime/gateway-restart-multi-live.yaml | 2 +- ...soning-only-no-auto-retry-after-write.yaml | 2 +- ...soning-only-recovery-replay-safe-read.yaml | 2 +- .../runtime/tools/skill-invocation.yaml | 2 +- .../cron-natural-fire-no-duplicate.yaml | 2 +- .../cron-single-run-no-duplicate.yaml | 2 +- ...control-ui-qa-channel-image-roundtrip.yaml | 2 +- 31 files changed, 50 insertions(+), 31 deletions(-) diff --git a/extensions/qa-lab/src/scenario-catalog.test.ts b/extensions/qa-lab/src/scenario-catalog.test.ts index 665c408194b2..ca95a5e78b5a 100644 --- a/extensions/qa-lab/src/scenario-catalog.test.ts +++ b/extensions/qa-lab/src/scenario-catalog.test.ts @@ -4,6 +4,7 @@ import os from "node:os"; import path from "node:path"; import { describe, expect, it } from "vitest"; import { resolveQaParityPackScenarioIds } from "./agentic-parity.js"; +import { resolveQaRepoPath } from "./repo-path.js"; import { listQaScenarioYamlPaths, readQaBootstrapScenarioCatalog, @@ -91,6 +92,24 @@ describe("qa scenario catalog", () => { expect(recall.coverage?.primary).toContain(`${memory}.memory-recall`); }); + it("keeps scenario documentation and code references backed by the repository", () => { + for (const scenario of readQaScenarioPack().scenarios) { + const referenceGroups = [ + ["docsRefs", scenario.docsRefs], + ["codeRefs", scenario.codeRefs], + ] as const; + + for (const [kind, references] of referenceGroups) { + for (const reference of references ?? []) { + const resolvedReference = + resolveQaRepoPath(import.meta.dirname, reference, "file") ?? + resolveQaRepoPath(import.meta.dirname, reference, "directory"); + expect(resolvedReference, `${scenario.id} ${kind} ${reference} exists`).not.toBeNull(); + } + } + } + }); + it("exposes bootstrap data from the YAML pack", () => { const catalog = readQaBootstrapScenarioCatalog(); diff --git a/qa/scenarios/agents/instruction-followthrough-repo-contract.yaml b/qa/scenarios/agents/instruction-followthrough-repo-contract.yaml index fa4679d8255d..00fbaeacb7e5 100644 --- a/qa/scenarios/agents/instruction-followthrough-repo-contract.yaml +++ b/qa/scenarios/agents/instruction-followthrough-repo-contract.yaml @@ -21,7 +21,7 @@ scenario: codeRefs: - src/agents/system-prompt.ts - src/agents/embedded-agent-runner/run/incomplete-turn.ts - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts execution: kind: flow summary: Verify the agent reads repo instructions first, then completes the first bounded followthrough task without stalling. diff --git a/qa/scenarios/channels/telegram-reply-chain-exact-marker.yaml b/qa/scenarios/channels/telegram-reply-chain-exact-marker.yaml index b25587b13e2f..6a6f125bc924 100644 --- a/qa/scenarios/channels/telegram-reply-chain-exact-marker.yaml +++ b/qa/scenarios/channels/telegram-reply-chain-exact-marker.yaml @@ -12,7 +12,7 @@ scenario: - The model returns the requested exact marker through the reply path. - Exactly one outbound message contains the marker. codeRefs: - - src/auto-reply/reply/reply-payload.ts + - src/auto-reply/reply-payload.ts - extensions/qa-lab/src/live-transports/telegram/adapter.runtime.ts execution: profiles: { "telegram:adapter": 13, "telegram:all": 12 } diff --git a/qa/scenarios/channels/telegram-tools-compact-command.yaml b/qa/scenarios/channels/telegram-tools-compact-command.yaml index 58b7756036d0..7002b2d7a338 100644 --- a/qa/scenarios/channels/telegram-tools-compact-command.yaml +++ b/qa/scenarios/channels/telegram-tools-compact-command.yaml @@ -12,7 +12,7 @@ scenario: - The compact tools command reaches native command dispatch. - The joined reply includes exec and the verbose-mode hint. codeRefs: - - src/auto-reply/reply/commands-tools.ts + - src/auto-reply/reply/commands-info.ts - extensions/qa-lab/src/live-transports/telegram/adapter.runtime.ts execution: profiles: diff --git a/qa/scenarios/channels/whatsapp-access-control-dm-disabled.yaml b/qa/scenarios/channels/whatsapp-access-control-dm-disabled.yaml index cb34c8a987dc..1a6a60dc6451 100644 --- a/qa/scenarios/channels/whatsapp-access-control-dm-disabled.yaml +++ b/qa/scenarios/channels/whatsapp-access-control-dm-disabled.yaml @@ -18,7 +18,7 @@ scenario: docsRefs: - docs/channels/whatsapp.md codeRefs: - - extensions/whatsapp/src/monitor.ts + - extensions/whatsapp/src/inbound/access-control.ts execution: kind: flow channel: whatsapp diff --git a/qa/scenarios/channels/whatsapp-access-control-dm-open.yaml b/qa/scenarios/channels/whatsapp-access-control-dm-open.yaml index 207a4eb47e50..e415cf5feb98 100644 --- a/qa/scenarios/channels/whatsapp-access-control-dm-open.yaml +++ b/qa/scenarios/channels/whatsapp-access-control-dm-open.yaml @@ -18,7 +18,7 @@ scenario: docsRefs: - docs/channels/whatsapp.md codeRefs: - - extensions/whatsapp/src/monitor.ts + - extensions/whatsapp/src/inbound/access-control.ts execution: kind: flow channel: whatsapp diff --git a/qa/scenarios/channels/whatsapp-access-control-group-disabled.yaml b/qa/scenarios/channels/whatsapp-access-control-group-disabled.yaml index 00648f9c009c..52fbf6ad92d2 100644 --- a/qa/scenarios/channels/whatsapp-access-control-group-disabled.yaml +++ b/qa/scenarios/channels/whatsapp-access-control-group-disabled.yaml @@ -18,7 +18,7 @@ scenario: docsRefs: - docs/channels/whatsapp.md codeRefs: - - extensions/whatsapp/src/monitor.ts + - extensions/whatsapp/src/inbound/access-control.ts execution: kind: flow channel: whatsapp diff --git a/qa/scenarios/channels/whatsapp-access-control-group-open.yaml b/qa/scenarios/channels/whatsapp-access-control-group-open.yaml index 433101a6d97f..6f5157c7c4c6 100644 --- a/qa/scenarios/channels/whatsapp-access-control-group-open.yaml +++ b/qa/scenarios/channels/whatsapp-access-control-group-open.yaml @@ -18,7 +18,7 @@ scenario: docsRefs: - docs/channels/whatsapp.md codeRefs: - - extensions/whatsapp/src/monitor.ts + - extensions/whatsapp/src/inbound/access-control.ts execution: kind: flow channel: whatsapp diff --git a/qa/scenarios/channels/whatsapp-pairing-block.yaml b/qa/scenarios/channels/whatsapp-pairing-block.yaml index f86d2f6a1261..055ad08a1c77 100644 --- a/qa/scenarios/channels/whatsapp-pairing-block.yaml +++ b/qa/scenarios/channels/whatsapp-pairing-block.yaml @@ -21,7 +21,7 @@ scenario: docsRefs: - docs/channels/whatsapp.md codeRefs: - - extensions/whatsapp/src/monitor.ts + - extensions/whatsapp/src/inbound/access-control.ts execution: kind: flow channel: whatsapp diff --git a/qa/scenarios/channels/whatsapp-tools-compact-command.yaml b/qa/scenarios/channels/whatsapp-tools-compact-command.yaml index 68f1a6bffb2e..7fc0d8095f34 100644 --- a/qa/scenarios/channels/whatsapp-tools-compact-command.yaml +++ b/qa/scenarios/channels/whatsapp-tools-compact-command.yaml @@ -12,7 +12,7 @@ scenario: - The compact tools command reaches native command dispatch. - The joined reply includes exec and the verbose-mode hint. codeRefs: - - src/auto-reply/reply/commands-tools.ts + - src/auto-reply/reply/commands-info.ts - extensions/qa-lab/src/live-transports/whatsapp/adapter.runtime.ts execution: profiles: { "whatsapp:mock-default": 34 } diff --git a/qa/scenarios/media/image-generation-roundtrip.yaml b/qa/scenarios/media/image-generation-roundtrip.yaml index 989d46daab02..3ac68fcf75a2 100644 --- a/qa/scenarios/media/image-generation-roundtrip.yaml +++ b/qa/scenarios/media/image-generation-roundtrip.yaml @@ -20,7 +20,7 @@ scenario: codeRefs: - src/agents/tools/image-generate-tool.ts - src/gateway/chat-attachments.ts - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts execution: kind: flow summary: Verify a generated image is saved as media, reattached on the next turn, and described correctly through the vision path. diff --git a/qa/scenarios/media/image-understanding-attachment.yaml b/qa/scenarios/media/image-understanding-attachment.yaml index 78ff256ce974..94f6db44d06d 100644 --- a/qa/scenarios/media/image-understanding-attachment.yaml +++ b/qa/scenarios/media/image-understanding-attachment.yaml @@ -20,7 +20,7 @@ scenario: codeRefs: - src/gateway/server-methods/agent.ts - extensions/qa-lab/src/suite.ts - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts execution: kind: flow summary: Verify an attached image reaches the agent model and the agent can describe what it sees. diff --git a/qa/scenarios/media/native-image-generation.yaml b/qa/scenarios/media/native-image-generation.yaml index 063715176a5a..e544d0a1981a 100644 --- a/qa/scenarios/media/native-image-generation.yaml +++ b/qa/scenarios/media/native-image-generation.yaml @@ -19,7 +19,7 @@ scenario: - docs/providers/openai.md codeRefs: - src/agents/tools/image-generate-tool.ts - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts execution: kind: flow summary: Verify image_generate appears when configured and returns a real saved media artifact. diff --git a/qa/scenarios/memory/active-memory-preprompt-recall.yaml b/qa/scenarios/memory/active-memory-preprompt-recall.yaml index 652602872fb7..6b1ce5836c6f 100644 --- a/qa/scenarios/memory/active-memory-preprompt-recall.yaml +++ b/qa/scenarios/memory/active-memory-preprompt-recall.yaml @@ -38,7 +38,7 @@ scenario: - extensions/active-memory/index.ts - extensions/active-memory/doctor-contract-api.ts - extensions/qa-lab/src/suite.ts - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts execution: kind: flow summary: Verify Active Memory stays off when session-toggled off, runs memory search/get when enabled, and helps a live model answer with the recalled preference in the first visible reply. diff --git a/qa/scenarios/models/model-switch-tool-continuity.yaml b/qa/scenarios/models/model-switch-tool-continuity.yaml index da60bb11db14..4a48242b9bdd 100644 --- a/qa/scenarios/models/model-switch-tool-continuity.yaml +++ b/qa/scenarios/models/model-switch-tool-continuity.yaml @@ -19,7 +19,7 @@ scenario: - docs/concepts/model-failover.md codeRefs: - extensions/qa-lab/src/suite.ts - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts execution: kind: flow summary: Verify switching models preserves session context and tool use instead of dropping into plain-text only behavior. diff --git a/qa/scenarios/plugins/bundled-plugin-skill-runtime.yaml b/qa/scenarios/plugins/bundled-plugin-skill-runtime.yaml index 61df93e01a2b..e37e5e26d45c 100644 --- a/qa/scenarios/plugins/bundled-plugin-skill-runtime.yaml +++ b/qa/scenarios/plugins/bundled-plugin-skill-runtime.yaml @@ -18,8 +18,8 @@ scenario: - docs/plugins/manifest.md codeRefs: - scripts/stage-bundled-plugin-runtime.mjs - - src/agents/skills/workspace.ts - - src/agents/skills/plugin-skills.ts + - src/skills/loading/workspace.ts + - src/skills/loading/plugin-skills.ts execution: kind: flow summary: Force the packaged dist-runtime plugin tree and verify an enabled bundled plugin skill survives discovery. diff --git a/qa/scenarios/plugins/plugin-lifecycle-hot-reload.yaml b/qa/scenarios/plugins/plugin-lifecycle-hot-reload.yaml index a7d01df478b8..4e1f74aaf324 100644 --- a/qa/scenarios/plugins/plugin-lifecycle-hot-reload.yaml +++ b/qa/scenarios/plugins/plugin-lifecycle-hot-reload.yaml @@ -19,7 +19,7 @@ scenario: - docs/gateway/configuration.md - docs/plugins/manifest.md codeRefs: - - src/agents/skills-status.ts + - src/skills/discovery/status.ts - src/gateway/server-methods/config.ts - extensions/qa-lab/src/suite-runtime-agent-tools.ts execution: diff --git a/qa/scenarios/plugins/skill-install-hot-availability.yaml b/qa/scenarios/plugins/skill-install-hot-availability.yaml index 11ddec305e8b..da557236aeaf 100644 --- a/qa/scenarios/plugins/skill-install-hot-availability.yaml +++ b/qa/scenarios/plugins/skill-install-hot-availability.yaml @@ -17,7 +17,7 @@ scenario: - docs/tools/skills.md - docs/gateway/configuration.md codeRefs: - - src/agents/skills-status.ts + - src/skills/discovery/status.ts - extensions/qa-lab/src/suite.ts execution: kind: flow diff --git a/qa/scenarios/plugins/skill-visibility-invocation.yaml b/qa/scenarios/plugins/skill-visibility-invocation.yaml index 99f01646899f..481dfb426bc1 100644 --- a/qa/scenarios/plugins/skill-visibility-invocation.yaml +++ b/qa/scenarios/plugins/skill-visibility-invocation.yaml @@ -17,7 +17,7 @@ scenario: - docs/tools/skills.md - docs/gateway/protocol.md codeRefs: - - src/agents/skills-status.ts + - src/skills/discovery/status.ts - extensions/qa-lab/src/suite.ts execution: kind: flow diff --git a/qa/scenarios/runtime/approval-turn-tool-followthrough.yaml b/qa/scenarios/runtime/approval-turn-tool-followthrough.yaml index 6db6a53589a6..95c71c30463e 100644 --- a/qa/scenarios/runtime/approval-turn-tool-followthrough.yaml +++ b/qa/scenarios/runtime/approval-turn-tool-followthrough.yaml @@ -19,7 +19,7 @@ scenario: - docs/channels/qa-channel.md codeRefs: - extensions/qa-lab/src/suite.ts - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts - src/agents/embedded-agent-runner/run/incomplete-turn.ts execution: kind: flow diff --git a/qa/scenarios/runtime/compaction-retry-mutating-tool.yaml b/qa/scenarios/runtime/compaction-retry-mutating-tool.yaml index 749b6d27370e..4a47d7087ddb 100644 --- a/qa/scenarios/runtime/compaction-retry-mutating-tool.yaml +++ b/qa/scenarios/runtime/compaction-retry-mutating-tool.yaml @@ -19,7 +19,7 @@ scenario: - docs/help/testing.md codeRefs: - extensions/qa-lab/src/suite.ts - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts - src/agents/embedded-agent-subscribe.ts - src/agents/embedded-agent-subscribe.handlers.lifecycle.ts execution: diff --git a/qa/scenarios/runtime/docker-prometheus-smoke.yaml b/qa/scenarios/runtime/docker-prometheus-smoke.yaml index 343f1f5b40f7..2141fb75c7b8 100644 --- a/qa/scenarios/runtime/docker-prometheus-smoke.yaml +++ b/qa/scenarios/runtime/docker-prometheus-smoke.yaml @@ -27,7 +27,7 @@ scenario: - docs/concepts/qa-e2e-automation.md codeRefs: - extensions/diagnostics-prometheus/src/service.ts - - src/diagnostics/internal-diagnostics.ts + - src/infra/diagnostic-events.ts - extensions/qa-lab/src/suite.ts execution: kind: flow diff --git a/qa/scenarios/runtime/empty-response-recovery-replay-safe-read.yaml b/qa/scenarios/runtime/empty-response-recovery-replay-safe-read.yaml index 3e4589c40d32..d3bc9207717d 100644 --- a/qa/scenarios/runtime/empty-response-recovery-replay-safe-read.yaml +++ b/qa/scenarios/runtime/empty-response-recovery-replay-safe-read.yaml @@ -17,7 +17,7 @@ scenario: docsRefs: - docs/help/testing.md codeRefs: - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts - src/agents/embedded-agent-runner/run/incomplete-turn.ts execution: kind: flow diff --git a/qa/scenarios/runtime/empty-response-retry-budget-exhausted.yaml b/qa/scenarios/runtime/empty-response-retry-budget-exhausted.yaml index 9f2459775363..7831a7d118f0 100644 --- a/qa/scenarios/runtime/empty-response-retry-budget-exhausted.yaml +++ b/qa/scenarios/runtime/empty-response-retry-budget-exhausted.yaml @@ -16,7 +16,7 @@ scenario: docsRefs: - docs/help/testing.md codeRefs: - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts - src/agents/embedded-agent-runner/run/incomplete-turn.ts execution: kind: flow diff --git a/qa/scenarios/runtime/gateway-restart-multi-live.yaml b/qa/scenarios/runtime/gateway-restart-multi-live.yaml index fe2e8320251e..d1015e1bcf33 100644 --- a/qa/scenarios/runtime/gateway-restart-multi-live.yaml +++ b/qa/scenarios/runtime/gateway-restart-multi-live.yaml @@ -26,7 +26,7 @@ scenario: - The Gateway child and qa-channel recover after every replacement without a user follow-up. - Restart-safe policy remains active, the unsafe probe stays unavailable, and the completed audit is delivered exactly once. docsRefs: - - docs/reference/code-mode.md + - docs/tools/code-mode.md - docs/channels/qa-channel.md codeRefs: - extensions/qa-lab/src/suite-runtime-agent-session.ts diff --git a/qa/scenarios/runtime/reasoning-only-no-auto-retry-after-write.yaml b/qa/scenarios/runtime/reasoning-only-no-auto-retry-after-write.yaml index 34f5c3fa129d..2a3e5f4fc7fa 100644 --- a/qa/scenarios/runtime/reasoning-only-no-auto-retry-after-write.yaml +++ b/qa/scenarios/runtime/reasoning-only-no-auto-retry-after-write.yaml @@ -17,7 +17,7 @@ scenario: docsRefs: - docs/help/testing.md codeRefs: - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts - src/agents/embedded-agent-runner/run/incomplete-turn.ts execution: kind: flow diff --git a/qa/scenarios/runtime/reasoning-only-recovery-replay-safe-read.yaml b/qa/scenarios/runtime/reasoning-only-recovery-replay-safe-read.yaml index 7d8f59201ddf..3354f9b6d0f0 100644 --- a/qa/scenarios/runtime/reasoning-only-recovery-replay-safe-read.yaml +++ b/qa/scenarios/runtime/reasoning-only-recovery-replay-safe-read.yaml @@ -17,7 +17,7 @@ scenario: docsRefs: - docs/help/testing.md codeRefs: - - extensions/qa-lab/src/mock-openai-server.ts + - extensions/qa-lab/src/providers/mock-openai/server.ts - src/agents/embedded-agent-runner/run/incomplete-turn.ts execution: kind: flow diff --git a/qa/scenarios/runtime/tools/skill-invocation.yaml b/qa/scenarios/runtime/tools/skill-invocation.yaml index c410e8df627b..dc0ba8d09850 100644 --- a/qa/scenarios/runtime/tools/skill-invocation.yaml +++ b/qa/scenarios/runtime/tools/skill-invocation.yaml @@ -14,7 +14,7 @@ scenario: docsRefs: - docs/tools/skills.md codeRefs: - - src/agents/skills-clawhub.ts + - src/skills/runtime/tool-dispatch.ts - extensions/qa-lab/src/runtime-tool-fixture.ts execution: kind: flow diff --git a/qa/scenarios/scheduling/cron-natural-fire-no-duplicate.yaml b/qa/scenarios/scheduling/cron-natural-fire-no-duplicate.yaml index e96373e8bb9a..e75d3f75ad90 100644 --- a/qa/scenarios/scheduling/cron-natural-fire-no-duplicate.yaml +++ b/qa/scenarios/scheduling/cron-natural-fire-no-duplicate.yaml @@ -21,7 +21,7 @@ scenario: codeRefs: - src/cron/service.ts - src/cron/service/timer.ts - - src/cron/run-log.ts + - src/cron/task-run-history.ts - extensions/qa-lab/src/cron-run-wait.ts - extensions/qa-lab/src/suite-runtime-transport.ts execution: diff --git a/qa/scenarios/scheduling/cron-single-run-no-duplicate.yaml b/qa/scenarios/scheduling/cron-single-run-no-duplicate.yaml index 6b1f1a74ae4e..7261d5d6339f 100644 --- a/qa/scenarios/scheduling/cron-single-run-no-duplicate.yaml +++ b/qa/scenarios/scheduling/cron-single-run-no-duplicate.yaml @@ -20,7 +20,7 @@ scenario: - docs/channels/qa-channel.md codeRefs: - src/cron/service.ts - - src/cron/run-log.ts + - src/cron/task-run-history.ts - extensions/qa-lab/src/cron-run-wait.ts - extensions/qa-lab/src/suite-runtime-transport.ts execution: diff --git a/qa/scenarios/ui/control-ui-qa-channel-image-roundtrip.yaml b/qa/scenarios/ui/control-ui-qa-channel-image-roundtrip.yaml index 091f0072fe52..c46b4f09bcda 100644 --- a/qa/scenarios/ui/control-ui-qa-channel-image-roundtrip.yaml +++ b/qa/scenarios/ui/control-ui-qa-channel-image-roundtrip.yaml @@ -24,7 +24,7 @@ scenario: - extensions/qa-lab/src/scenario-runtime-api.ts - extensions/qa-lab/src/suite.ts - extensions/qa-lab/src/web-runtime.ts - - ui/src/ui/views/chat.ts + - ui/src/pages/chat/chat-view.ts gatewayRuntime: forwardHostHome: true execution: