mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
ui-workspace's two trigger surfaces each declare a single-kind directory-flow hole (conversation.hero.workspace.directoryFlow / sidebar.workspaces.directoryFlow, same owner contract) and keep only the trigger and the adoption: the Open-local- folder entry renders while the surface's hole is occupied, and the occupant reports one picked path per open through the hole's owner conversation (open/busy/onPicked/onCancel/onError). directory-picker-native becomes dual-face: its browser half fills both holes with a renderless occupant driving host.pickDirectory, so the cordis.yml row that mounts the backend also composes the client interaction — a mismatch is impossible and a second flow package fails at client load. With composition wiring both sides, the host.describe.directoryPicker advertisement and the client's kind branching lose their last consumer: the field, WorkspacesService.directoryPickerKind(), the DirectoryPickerKind wire type, and the picker's per-open describe read are deleted. The connection fixture now serves a deterministic pickDirectory path so the keyless snapshot drives the full pick-then-adopt flow. ui-workspace's hand-rolled declaration deferral is replaced by the deferRegistration helper it duplicated.
1.7 KiB
1.7 KiB
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/ |
In-app browsing backend: listing/creation primitives over Node stdlib; remote-capable | (registers ctx.directoryPicker) |
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.