mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
Isolation is restored on the premise the review corrected: a workspace file need not be agent-authored — a read row makes every file in a cloned repository openable — and a same-origin active document was measured driving /api/settings.describe to a 200 with full data. Script-capable documents go back into an opaque origin; the preview's lost localStorage is the known cost, and a separate serving origin is the way to retire it. - confine(): a workspace rooted at a filesystem root has a realpath already ending in the separator, and the doubled prefix 403'd every child. - turnDeliverables(): reset on the turn boundary, not only at a closing assistant, so an interrupted turn cannot spill into the next turn's row; and recognize a mutation by render intent (diff card, or generic with kind 'edit') so str_replace_editor's insert counts. - 405 answers name the methods it allows. - The e2e now cold-seeds a recorded WRITE turn, so the assembled application covers the Produced row, its chip's served URL, and the isolation header. - Agent Note matched to what shipped (the row is in this PR, not deferred); ui-conversation README documents the new destination and the row; the fixture lane's dead-tab quirk and the cold-path listing cost are recorded.
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.