deepseek-harness/apps/web/tests
Hypatia May b6b6a72df7 feat(session-query): ship full-text session search opt-in via openAt never
The shipped bundles keep ctx.sessionQuery mounted but set the new
session-query-sqlite `openAt: never` phase: searchSessions/searchEvents
fail with the typed SESSION_QUERY_SEARCH_DISABLED code before any request
normalization, node:sqlite is never imported or opened, and no source
observation or reconciliation runs. Every inherited exact read, filter,
and trace — session export descendants, subagent-fork Workspace
inheritance, title reads — keeps working, and the Web sidebar search
degrades to its designed local title/workspace matching. Enabling content
search is a one-line openAt override in a later patch layer; the web e2e
scaffold keeps it enabled as the assembled opt-in coverage.
2026-08-13 11:46:37 +08:00
..
snapshots feat: optimze skill and tool 2026-08-13 03:46:20 +08:00
support
access-confirmation.e2e.ts
agent-preset-authoring.e2e.ts
agent-preset-authoring.overlay.yml
agent-preset-selection.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
approval-composer.e2e.ts
assembled-boot.ts fix(session-query): rename session log export package 2026-08-13 05:02:00 +08:00
background-job-list.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
bash-abort-row.e2e.ts
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 Merge remote-tracking branch 'origin/master' into feat/web-message-feedback-ui 2026-08-12 10:43:23 +08:00
chat-long-interactions.e2e.ts Merge remote-tracking branch 'origin/master' into feat/web-message-feedback-ui 2026-08-12 10:43:23 +08:00
chat-scroll-contract.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
chat-scroll-fixture.ts
code-mode-round.e2e.ts
complex-history.perf.ts fix: 分页问题 2026-08-12 20:26:47 +08:00
composer-draft-scroll.e2e.ts Merge remote-tracking branch 'origin/master' into feat/web-message-feedback-ui 2026-08-12 10:43:23 +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
cordis-tool-round.e2e.ts feat: optimze skill and tool 2026-08-13 03:46:20 +08:00
declared-reasoning.e2e.ts
declared-reasoning.overlay.yml
default-model.e2e.ts
default-model.overlay.yml
details-session-lifecycle.e2e.ts
feedback-command.e2e.ts
goal-bar.e2e.ts
goal-bar.overlay.yml
goal-command-presentation.e2e.ts
goal-multi-turn-actions.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
hmr-live.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
image-display.snapshot.ts Merge pull request #2346 from deepseek-harness/fix/web-max-tokens-turn-end-notice 2026-08-12 20:07:35 +08:00
lifecycle-chrome.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
live-interactions.e2e.ts
markdown-cjk-strong.e2e.ts
markdown-images.e2e.ts
markdown-inline-code-links.e2e.ts
math-rendering.e2e.ts review: address ds-review-bot findings on session-stats 2026-08-12 21:43:35 +08:00
max-tokens-notice.snapshot.ts fix(web): surface max-tokens turn ends as a localized truncation notice 2026-08-12 15:36:27 +08:00
message-actions.e2e.ts
message-feedback-protocol.snapshot.ts
message-feedback.e2e.ts
minimal-preset.snapshot.ts Merge remote-tracking branch 'origin/master' into worktree/minimal-no-runtime-context 2026-08-13 10:24:29 +08:00
models-settings.e2e.ts
navigation-panes.e2e.ts fix(session-export): preserve streamed browser downloads 2026-08-12 18:44:04 +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
onboarding-usable-provider.e2e.ts fix(web): end first-run onboarding on any usable provider 2026-08-12 12:50:45 +08:00
permission-policy-context.e2e.ts
pin-browse-picker.overlay.yml refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
plan-review.e2e.ts
plugin-config.e2e.ts feat(web): combine plugin settings into tabs 2026-08-12 01:06:01 -07:00
produced-file-mentions.e2e.ts
produced-files.e2e.ts Merge upstream master into feat/produced-files-folder 2026-08-11 05:22:59 -07:00
produced-files.overlay.yml
pwa-manifest.e2e.ts
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 refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
question-composer.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
queue-actions.e2e.ts
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
replay-round-trip.e2e.ts
scaffold-hermetic.e2e.ts
scaffold.ts feat(session-query): ship full-text session search opt-in via openAt never 2026-08-13 11:46:37 +08:00
schedule-after.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
search-card.snapshot.ts
seeded-history.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
settings-chrome.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
shipped-composition.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
sidebar-scrollbar.e2e.ts
sidebar-subagent-activity.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
skill-invocation-policy.e2e.ts
skill-tool-row.e2e.ts
skill-user-invoke.e2e.ts
smoke-real.e2e.ts fix(session-query): rename session log export package 2026-08-13 05:02:00 +08:00
startup-auto-selection.e2e.ts refactor: apply repository naming contract 2026-08-13 00:54:38 +08:00
stats-paged-history.e2e.ts fix: 分页问题 2026-08-12 20:26:47 +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): wait for the transcript the subagent golden pins 2026-08-11 22:03:50 +08:00
subagent-interrupt-ui.e2e.ts
subagent-interrupt.e2e.ts
support.ts Merge remote-tracking branch 'origin/master' into feat/web-message-feedback-ui 2026-08-12 10:43:23 +08:00
todo-row.snapshot.ts fix(web): surface max-tokens turn ends as a localized truncation notice 2026-08-12 15:36:27 +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
vite-entry.e2e.ts
web-search-round.e2e.ts
workflow-run.e2e.ts fix(workflow): refold coalesced disclosure cycles 2026-08-12 01:01:25 +08:00
workspace-management.e2e.ts fix: rebase 5 2026-08-13 02:51:52 +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.