deepseek-harness/packages/host
Huanqi Cao 4cb5f328bb refactor(picker): drop the Windows PowerShell fallback chain
The win32 tier is exactly the koffi IFileOpenDialog child process; any failure surfaces as-is. The pwsh -> Windows PowerShell 5.1 cascade, the shared WinForms script, and the triple-miss AggregateError are deleted: koffi is a packaged dependency whose availability the install guarantees, so no mechanism fallback exists (the browse backend remains the fallback at the composition level). The pwsh-first DPI picker-fix note is consolidated into a new simplification note recording the reversal.
2026-08-05 00:31:43 +08:00
..
apiproxy feat(web): move connection downlinks to WebSocket 2026-08-04 16:07:35 +08:00
directory-picker revert: restore the reviewer-approved tree (97a192d7b) 2026-07-30 09:22:16 +08:00
directory-picker-auto fix(cordis): make config reload transactional 2026-08-02 01:25:01 +08:00
directory-picker-browse fix(directory-picker-browse): light the whole bar, and move the view once per keystroke 2026-08-03 13:45:30 +08:00
directory-picker-native refactor(picker): drop the Windows PowerShell fallback chain 2026-08-05 00:31:43 +08:00
webserver fix(web): quiesce websocket teardown 2026-08-04 16:42:50 +08:00
README.i18n.yaml Merge remote-tracking branch 'origin/feat/directory-picker-quiet-navigation' into feat/dir-selector-adaptive-default 2026-07-30 18:41:41 +08:00
README.md Merge remote-tracking branch 'origin/feat/directory-picker-quiet-navigation' into feat/dir-selector-adaptive-default 2026-07-30 18:41:41 +08:00
README.zh.md Merge remote-tracking branch 'origin/feat/directory-picker-quiet-navigation' into feat/dir-selector-adaptive-default 2026-07-30 18:41:41 +08:00

host/ — web-GUI host half

English | 中文

The host side of the dsh web GUI: the API gateway every client shape shares, and the plain HTTP server it rides on. The browser side lives in client/; the composed application is apps/cli serving apps/web. All product packages.

Package Role ctx key
apiproxy/ The shared API gateway: the zero-Node TS wire contract (src/api/), the fetch carrier pair (toFetchHandler host-side, AbstractApiClient client-side), and the host implementation over ctx.agents/ctx.workspace ctx.apiProxy
webserver/ Plain HTTP route-registration carrier: node:http server listening on activation; routes register as named exact/prefix handlers ctx.httpServer
directory-picker/ Workspace-directory picking seam: discriminated native/browse capability the gateway's picker RPCs delegate to ctx.directoryPicker
directory-picker-native/ Dual-face native interaction: OS-chooser backend (osascript / PowerShell / Zenity+KDialog, host-display only) + the browser half filling ui-workspace's directory-flow slots (registers ctx.directoryPicker)
directory-picker-browse/ Dual-face browse interaction: listing/creation primitives over Node stdlib (remote-capable) + the browser half rendering the in-app Select Workspace Directory dialog (registers ctx.directoryPicker)
directory-picker-auto/ Adaptive chooser: resolves the host's situation once at boot (bind host, SSH, display) and mounts the matching dual-face backend as an in-memory Loader entry (mounts a backend row)

apiproxy is transport-agnostic by design — it registers no routes; carriers wrap ctx.apiProxy themselves. The HTTP carrier route (with its /api browser-trust fence) is mounted by client/connection's node half, which is why that package lives in the client group: it owns both ends of the wire.