deepseek-harness/apps/web/tests
_Kerman 3a0baa1e9d Merge remote-tracking branch 'origin/master' into dshw/pr-2250
# Conflicts:
#	packages/client/connection/tests/fake-api.client.ts
#	packages/client/runtime/tests/manager.client.spec.ts
#	packages/client/runtime/tests/workspaces-service.client.spec.ts
#	packages/host/apiproxy/tests/rpc-schemas.spec.ts
2026-08-12 04:50:51 +08:00
..
snapshots test(web): refresh browser goldens for the compact workspace sidebar 2026-08-12 01:32:23 +08:00
support
access-confirmation.e2e.ts Merge remote-tracking branch 'origin/master' into worktree/custom-deepseek-models 2026-08-03 16:20:55 +08:00
agent-preset-authoring.e2e.ts fix(web): clamp preset card descriptions instead of sizing the roster 2026-08-11 14:09:04 +08:00
agent-preset-authoring.overlay.yml refactor(agent-presets,web): copy-only preset authoring with a path to the files 2026-08-08 22:35:26 +08:00
agent-preset-selection.e2e.ts fix(web): pin preset before subagent header action 2026-08-10 19:54:08 +08:00
approval-composer.e2e.ts docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
assembled-boot.ts test(web): mount the settings domain base in the assembled boot table 2026-08-11 19:25:41 +08:00
background-task-list.e2e.ts fix(tasks): correct the change-feed contract and its documentation 2026-08-10 13:37:18 +08:00
bash-abort-row.e2e.ts test(web): follow the structured abort message in the bash-abort-row scenario 2026-08-03 20:57:26 +08:00
built-boot.snapshot.ts test(web): adapt workspace browser e2e interactions to the compact sidebar 2026-08-12 01:32:08 +08:00
chat-continuous-conversation.e2e.ts refactor(faces): keep the generated contributions out of the Host aggregate 2026-08-11 23:33:16 +08:00
chat-long-interactions.e2e.ts Merge remote-tracking branch 'origin/master' into dshw/pr-2250 2026-08-12 04:50:51 +08:00
chat-scroll-contract.e2e.ts test(web): adapt workspace browser e2e interactions to the compact sidebar 2026-08-12 01:32:08 +08:00
chat-scroll-fixture.ts Merge remote-tracking branch 'origin/master' into xtr/react-loop-simplification 2026-08-05 21:42:33 +08:00
code-mode-round.e2e.ts docs: purge chain-of-thought leakage from prose 2026-08-09 21:10:59 +08:00
complex-history.perf.ts docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
composer-draft-scroll.e2e.ts fix: client spec 2026-08-12 02:16:39 +08:00
composer-tab-geometry.e2e.ts test(web): adapt workspace browser e2e interactions to the compact sidebar 2026-08-12 01:32:08 +08:00
conversation-column-overflow.e2e.ts docs: purge chain-of-thought leakage from prose 2026-08-09 21:10:59 +08:00
cordis-tool-round.e2e.ts
declared-reasoning.e2e.ts fix(headless): dsh run is a direct core front door 2026-08-09 13:44:44 +08:00
declared-reasoning.overlay.yml fix(headless): dsh run is a direct core front door 2026-08-09 13:44:44 +08:00
default-model.e2e.ts docs: reserve seam for complete capabilities 2026-08-09 17:26:57 +08:00
default-model.overlay.yml docs: purge chain-of-thought leakage from prose 2026-08-09 21:10:59 +08:00
details-session-lifecycle.e2e.ts docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
feedback-command.e2e.ts test(feedback): fix the assembled e2e record path and teardown restore 2026-08-11 11:01:48 +08:00
goal-bar.e2e.ts
goal-bar.overlay.yml
goal-command-presentation.e2e.ts feat(web): show command inputs in the human transcript 2026-08-11 17:19:51 +08:00
goal-multi-turn-actions.e2e.ts fix: client spec 2026-08-12 02:16:39 +08:00
hmr-live.e2e.ts refactor(web): remove --dev; mount the reload chain unconditionally 2026-08-11 18:01:25 +08:00
image-display.snapshot.ts fix(web): review-round attachment refinements 2026-08-11 17:45:11 +08:00
lifecycle-chrome.e2e.ts test(web): adapt workspace browser e2e interactions to the compact sidebar 2026-08-12 01:32:08 +08:00
live-interactions.e2e.ts docs: reserve seam for complete capabilities 2026-08-09 17:26:57 +08:00
markdown-cjk-strong.e2e.ts test: stabilize markdown web snapshots 2026-08-06 15:37:40 +08:00
markdown-images.e2e.ts test(web): pin the remaining markdown fixture's event times 2026-08-06 16:24:20 +08:00
markdown-inline-code-links.e2e.ts test: stabilize markdown web snapshots 2026-08-06 15:37:40 +08:00
math-rendering.e2e.ts fix(ci): await math snapshot metrics 2026-08-11 11:22:08 +08:00
message-actions.e2e.ts fix(ci): await token stats before aria snapshot 2026-08-11 00:28:00 +08:00
message-feedback-protocol.snapshot.ts fix(feedback): address backend review gaps 2026-08-10 21:40:03 -07:00
minimal-preset.snapshot.ts feat: align minimal runtime profiles 2026-08-11 15:19:33 +08:00
models-settings.e2e.ts fix(web): answer the review on the declared-provider editor 2026-08-10 23:31:21 +08:00
navigation-panes.e2e.ts test(web): adapt workspace browser e2e interactions to the compact sidebar 2026-08-12 01:32:08 +08:00
onboarding-deepseek-config.e2e.ts docs: state the Host-face rule for the browser e2e and settle the follow-ups 2026-08-11 19:25:41 +08:00
permission-policy-context.e2e.ts
pin-browse-picker.overlay.yml refactor(picker): split the directory-picker faces into their own packages 2026-08-11 23:33:16 +08:00
plan-review.e2e.ts feat(client): surface pending session interactions 2026-08-04 17:15:10 +08:00
plugin-config.e2e.ts refactor(client-ui-plugin-config): stage card edits behind an explicit save 2026-08-10 22:51:12 +08:00
produced-file-mentions.e2e.ts feat(web): a prose mention of a produced file opens it 2026-08-07 03:02:10 -07:00
produced-files.e2e.ts Merge upstream master into feat/produced-files-folder 2026-08-11 05:22:59 -07:00
produced-files.overlay.yml feat(web): make produced-file overflow discoverable 2026-08-10 21:53:38 -07:00
pwa-manifest.e2e.ts revert(web): drop the 32x32 PNG favicon fallback 2026-08-10 14:17:17 +08:00
pwsh-terminal.e2e.ts test(web): adapt workspace browser e2e interactions to the compact sidebar 2026-08-12 01:32:08 +08:00
pwsh-terminal.overlay.yml feat(pwsh): render pwsh calls as bash-shaped terminal cards in the Web UI 2026-08-05 02:05:06 +08:00
question-composer.e2e.ts docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
queue-actions.e2e.ts test(web): await stopped queue state 2026-08-04 15:09:55 +08:00
README.i18n.yaml docs: state the Host-face rule for the browser e2e and settle the follow-ups 2026-08-11 19:25:41 +08:00
README.md docs: state the Host-face rule for the browser e2e and settle the follow-ups 2026-08-11 19:25:41 +08:00
README.zh.md docs: state the Host-face rule for the browser e2e and settle the follow-ups 2026-08-11 19:25:41 +08:00
remote-welcome.e2e.ts test(web): keep the browser e2e out of the Client build graph 2026-08-11 19:25:40 +08:00
replay-round-trip.e2e.ts refactor(web): remove --dev; mount the reload chain unconditionally 2026-08-11 18:01:25 +08:00
scaffold-hermetic.e2e.ts fix(agent-presets): unify the session event entrypoint and re-address the hermetic skills probe 2026-08-09 23:42:44 +08:00
scaffold.ts refactor(picker): split the directory-picker faces into their own packages 2026-08-11 23:33:16 +08:00
schedule-after.e2e.ts fix: build 2026-08-11 23:33:18 +08:00
search-card.snapshot.ts docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
seeded-history.e2e.ts Merge remote-tracking branch 'origin/master' into worktree/preset-plane-fallout-p1 2026-08-11 12:57:58 +08:00
settings-chrome.e2e.ts fix(client): apply theme before plugin loading 2026-08-11 15:35:32 +08:00
shipped-composition.e2e.ts refactor: replace overloaded surface terminology 2026-08-11 15:23:05 +08:00
sidebar-scrollbar.e2e.ts test(web): cover workspace sidebar behavior 2026-08-11 15:25:11 +08:00
sidebar-subagent-activity.e2e.ts docs: reserve seam for complete capabilities 2026-08-09 17:26:57 +08:00
skill-invocation-policy.e2e.ts test(web): cover user-only skill invocation end to end 2026-08-08 01:27:25 +08:00
skill-tool-row.e2e.ts feat(web): add dedicated skill tool row 2026-08-06 14:07:15 +08:00
skill-user-invoke.e2e.ts test: update conversation assembly coverage and docs 2026-08-09 18:16:44 +08:00
smoke-real.e2e.ts refactor(web): remove --dev; mount the reload chain unconditionally 2026-08-11 18:01:25 +08:00
startup-auto-selection.e2e.ts docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
steering.e2e.ts test: stabilize steering mid-turn snapshot 2026-08-11 21:45:30 +08:00
subagent-conversation.e2e.ts test(web): re-record the preset section golden and borderless menu inset 2026-08-10 23:14:27 +08:00
subagent-interrupt-ui.e2e.ts docs: purge chain-of-thought leakage from prose 2026-08-09 21:10:59 +08:00
subagent-interrupt.e2e.ts docs: purge chain-of-thought leakage from prose 2026-08-09 21:10:59 +08:00
support.ts refactor(faces): keep the generated contributions out of the Host aggregate 2026-08-11 23:33:16 +08:00
todo-row.snapshot.ts docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
trajectory-virtualization.e2e.ts test(web): adapt workspace browser e2e interactions to the compact sidebar 2026-08-12 01:32:08 +08:00
turn-tail-actions.e2e.ts docs: make technical prose concrete 2026-08-10 16:34:20 +08:00
vite-entry.e2e.ts
web-search-round.e2e.ts fix(ui-primitives): keep two-digit source markers out of the scroll clip 2026-08-03 18:58:44 +08:00
workflow-run.e2e.ts fix(workflow): close review and snapshot gaps 2026-08-10 19:25:21 +08:00
workspace-management.e2e.ts test(web): adapt workspace browser e2e interactions to the compact sidebar 2026-08-12 01:32:08 +08:00

apps/web browser e2e

English | 中文

These tests boot the real web composition in-process and drive it with a real Chromium over real HTTP. The lane's mechanics — modes, fixtures, goldens, and the deliberate composition divergences from dsh web — are documented in scaffold.ts and the browser e2e Agent Note.

These are Host-face tests

They type-check in the root tsconfig.host.json, not in the Client aggregate, because they read Host services directly: ctx.apiProxy, the Host SessionStore, ctx.sessionProjectionCache. Driving a browser at runtime does not make a file part of the Client program — the two faces merge cordis Context under the same keys with different services, so one program cannot see both. Moving these files into the Client aggregate makes every Host-service access fail to compile.

Do not import @deepseek-ai/dsh-client-* here

Importing a Client package — a value or a type — pulls its whole TypeScript project, and every project it references, into the Host build graph. That has bitten this lane once already: four Client consumer packages reference api/remotes' Client face, which cannot compile until Host tsdown has generated @deepseek-ai/dsh-goal/remote, so the Host build phase ended up waiting on an artifact it produces itself.

When a scenario needs a Client-owned constant or pure function, mirror it here instead, next to the commented-out import that names the source module. A drift then surfaces as a missed selector or an unsuppressed notice — a loud failure, never a silent pass. scaffold.ts holds the mirrored welcome-notice values and exports them for the scenarios that assert on them.

Two kinds of Client import stand. assembled-boot.ts drives the shell itself, so it imports AppWebEntry from @deepseek-ai/dsh-client-web and the boot-manifest type from @deepseek-ai/dsh-client-modules/client: booting the real shell is what that harness is for, and both packages are already in the Host graph. Separately, the chat scenarios import conversationContextKey from @deepseek-ai/dsh-client-runtime/client because client/runtime is reachable through the unsplit directory-picker packages and pulls nothing further in. That reachability is incidental, not a guarantee — if it ever leaves the graph, mirror the helper like the rest.

Nothing mechanically enforces this rule; keep it in review.