deepseek-harness/apps/cli/tests
Yichen Jiang d247c50c6f fix(web): return every service a host row injects, and run the browser lane
The browser e2e lane had been failing wholesale since this stack moved the
agent plane into presets, and nothing caught it: 34 of 48 files. Two of the
causes are product defects, not test breakage.

`bashEnv` goes back to the host plane. `apps/cli/src/web.ts` injects it to
publish `DSH_WEB_URL`/`DSH_WEB_MODE`, so the earlier note that "nothing outside
the agent plane injects bashEnv" was simply wrong — behind a preset's `shell`
realm those variables reached no shell at all, and a `dsh web` agent could not
find the address of its own interface. This is the same criterion that returned
`subagents`: a host row that injects a service resolves before any session
exists and has no agent to key by, so the service is host-plane. `tool-bash`
consumes the host registry from inside the preset, which works because an
agent context chains to the host; only the reverse is invisible.

`tool-subagent-report` goes back with it. It is not a tool this agent calls: it
registers a continuable SETUP on the host `subagents` singleton, and that list
is not scope-aware. One copy per mounted preset meant every child was handed
`report` once per live session, so the second registration threw and a cold
subagent resume failed with `subagent-not-resumable` — a diagnostic three
layers removed from the cause.

The lane's own composition facts follow. Skill roots resolve inside a preset
now, a subtree include patches cannot reach, so the scaffold pins the roots'
documented environment fallback for its whole lifetime rather than for the boot
— presets mount per session. Without it the developer's real `~/.dsh/skills`
enters replay requests and goldens while CI sees none. The `apps/cli`
composition test pins `storage-json` for the same reason: unpinned it wrote,
and then read back, the developer's own `~/.dsh/storages/`.

Three tests now address through an agent what they used to read off the root
context, because that is where the thing lives: the tool catalog, the skill
registry, and the token meter. The seeded-history projection baseline asserts
the opposite of what it did — a detached session yields a preset-plane
projection only from a durable checkpoint written while it was live, and this
seed was written straight to persistence and never ran.

Goldens re-recorded for the hero's preset chip and the settings nav entry.
2026-08-07 00:42:25 +08:00
..
fixtures fix: retire leftovers of the removed $DSH_HOME/config.yaml personal overlay 2026-08-06 17:28:58 +08:00
args.spec.ts fix: address ds-review-bot round — insert-aliasing clones, settlement gates, closure module fallback 2026-08-06 09:27:44 +08:00
built-bin.e2e.ts refactor(cli)!: namespace the profile and bundle manifests under dsh.profile and dsh.bundle 2026-08-06 17:28:30 +08:00
headless-shutdown.e2e.ts refactor(cli)!: namespace the profile and bundle manifests under dsh.profile and dsh.bundle 2026-08-06 17:28:30 +08:00
install-script.spec.ts cleanup: remove TUI package and legacy dsh entrypoints 2026-08-04 13:20:28 +08:00
lazy-search-startup.compat.spec.ts feat(cli)!: dsh boots profiles; plugin subcommand manages them via pnpm 2026-08-06 06:29:06 +08:00
memory-mcp-configs.spec.ts fix(examples): keep memory configs provider-owned 2026-07-31 02:34:52 -07:00
process-shutdown.spec.ts test(cli): cover shutdown timer invariants 2026-08-04 11:03:52 +08:00
source-launch.compat.spec.ts feat(cli)!: dsh boots profiles; plugin subcommand manages them via pnpm 2026-08-06 06:29:06 +08:00
telemetry-switch.spec.ts fix(ci): telemetry switch trivially satisfied without the row; coverage-lane test fixes 2026-08-06 07:30:32 +08:00
trusted-hosts.spec.ts feat(cli)!: dsh boots profiles; plugin subcommand manages them via pnpm 2026-08-06 06:29:06 +08:00
web-agent-presets.spec.ts fix(web): return every service a host row injects, and run the browser lane 2026-08-07 00:42:25 +08:00