Files
deepseek-harness/packages/support
Tianyi Cui f8342b0a8e test(web): cover the settings surface and workspace management
Two new keyless scenarios for the functionality master gained since this
lane's base (#644 websettings, #643 workspace browser rework), both zero
model calls:

- settings-chrome: the modal shell (sidebar-foot trigger aria states,
  role=dialog, aria-current section switch to the deliberately empty
  Models, Escape + close-button paths, dialog aria golden); the Appearance
  row as the REAL theme gesture — retiring lifecycle-chrome's
  TODO(web-theme-gesture): clicking 深色 runs aria-pressed -> persisted
  dsh.theme -> body[data-ds-dark-theme] -> alias-token flip, survives
  reload, and 'system' follows the emulated OS scheme both ways; the
  Language row switches the settings-scoped copy to English (dsh.locale
  persisted, survives reload) and restores zh. Intentional reloads tear
  the SSE stream, so the spec drains exactly its own reconnect warnings —
  the tripwire still fails on unexpected connection loss.
- workspace-management: create-by-name twice through the region-header
  dialog (host-durable via ctx.workspace.list()); rename end to end —
  hover-revealed row menu (the button is display:none until the row
  hovers), duplicate-name pre-check (inline role=alert + disabled primary
  before any wire call), then workspace.rename through the real RPC,
  row update, host durability, reload survival; the flat 'In one list'
  view (section label flips, group headers drop, dsh.workspace.view
  persists across reload, grouped restored); the session hover card
  (dwell to open, closes on pointer leave). The one session row reuses
  seeded-history's committed seed — no new recording. Deliberately not
  driven: the inert menu rows and drag reorder (deferred in the note
  with re-entry triggers).

Agent Note gains scenarios 8-9 and the drag-reorder deferred item in both
languages; llm-replay README's zh side catches up with the { patches }
paragraph; pairings re-recorded.
2026-07-26 20:38:36 +08:00
..
2026-07-26 05:06:39 +08:00
2026-07-26 05:06:39 +08:00

support/ — dev/test/example infrastructure

English | 中文

Packages that exist to serve development, testing, and the examples rather than to ship as product API. They are real workspace packages (typed, tested, under the coverage gate), but they carry lower compatibility expectations: they may change or be removed when the development need behind them does, without the deprecation care a product package would warrant.

Package Role ctx key
acp-snapshot/ ACP test kit: shared subprocess/client launcher + snapshot harness, normalizers, and suite factory (library — imported by ACP e2e and *.snapshot.ts suites)
agent-loop-testkit/ Shared prerequisite mounting for tests that exercise the concrete agent loop (library — imported by AgentLoop integration tests)
invariants/ Runtime event-contract assertions for development diagnostics (listens on session/*, agent/*)
loader-smoke/ Shared real-Loader subprocess harness for keyless example smokes (library — imported by example e2e suites)
llm-mock-server/ Scriptable OpenAI-compatible HTTP/SSE fault server + CLI for LLM recovery tests (standalone server and test library)
llm-replay/ Record/replay adapter: short-circuits llm/stream from a recorded session JSONL (keyless snapshot tests) (listens on llm/stream)

invariants is development support but has no environment guard: it runs wherever registered, and the default dsh-agent-spine-demo bundle mounts it unconditionally. agent-loop-testkit centralizes the mandatory service spine for hand-built AgentLoop tests without owning their loop or scenario. llm-replay backs the demos and the snapshot test tier under the per-file coverage gate, while llm-mock-server drives real provider adapters through deterministic HTTP/SSE faults. acp-snapshot carries the ACP subprocess/client boundary plus the snapshot harness, normalizers, and suite machinery, while loader-smoke owns the parallel real-Loader launch boundary used by keyless example e2e suites. A package graduates OUT of support/ into a product group only when it gains documented product consumers.