mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
Review finding, valid — the previous SDK fix covered only the non-default branch: in the default mode under Code Mode the wire filter dropped exit_plan_mode but the registry-rendered tools:sdk section still advertised its binding, offering default-mode agents a call that can only error and breaking the byte-identical claim (a no-dsh-mode deployment's registry never saw the tool, so its SDK never listed it). The SDK re-render extracts to one helper both branches share: the non-default branch passes the mode's visibility rule, the default branch hides exactly the exit binding. The pinning test now compares the default-mode SDK byte-for-byte against a bare deployment without dsh-mode — the strongest form of the invariant the RFC states.
mode/ — session-mode policy family
Session modes: named, logged, per-agent policy states, with plan mode as the first shipped definition. A single product package — there is no interface/implementation seam here, because a mode's variable parts are config values (allowlist, section text), not swappable implementations.
| Package | Role | ctx key |
|---|---|---|
mode/ |
mode/set vocabulary + fold, the ctx.modes service (list/get/set with the turn-boundary flush), the soft layer (assemble filter + mode:policy section), the hard layer (tools/pre-execute deny-by-default gate), and the model-facing exit_plan_mode review tool |
ctx.modes |
The mode in force is a pure function of the session log (SessionEventMap['mode/set'], last one wins), so resume and fork restore it with no extra machinery; the default mode is the absence of policy, keeping the plugin invisible until a mode is set. UIs read flips off session/event: the stdio app exposes /mode, the ACP bridge maps the vocabulary to the session-mode picker. RFC: plan mode.