@deepseek-ai/dsh-headless
English | 中文
The dsh one-shot bundle. cordis.patch.yml rides directly over dsh-base: it inherits the base's disabled module-HMR policy, supplies the coding persona and tool mode, mounts Code Mode's worker as a core execution capability, and inserts this package's headless-runner plugin (config {task}, resolved from the injected headlessStartup provider). It mounts no Host, HTTP server, Web runtime, or browser plugin.
After the Loader settles, the runner reads the shared ctx.agentDefaultModel, creates one fresh persisted Agent through ctx.agents, submits the task as an ordinary user message, and waits for quiescence. Each non-empty provider reasoning delta from that Agent is written to stderr as it arrives under a dsh: reasoning: heading; consecutive deltas remain one section, and the runner terminates the section before later output when the provider supplied no trailing newline. It then flushes the Session before folding the owned durable event interval, writes the last non-empty assistant text to stdout, and requests exit through the launcher-provided ctx.appExit host hook (dsh-cmdline) (final turn/end completed → 0, otherwise 1). A terminal error reason also writes its code and message to stderr; a successful run with no reasoning keeps stderr empty. The process opens no listening port.
The task text is this app's command line: the ordinary headless-startup provider (src/startup.ts) injects ctx.cmdlineArgs (dsh-cmdline), reads the positional argument of dsh --profile headless "task", prints the app's --help, and provides headlessStartup; the runner injects that service and reads its task from lazy config. A missing or whitespace-only task is rejected before the runner activates.
Model Experience
None, as the runner submits the task as an ordinary user message; prompts and tools belong to the base and headless bundle rows.
KV Cache effect
None; the runner adds nothing to the request prefix.
Known Limitations and Deferred Work
- One submitted task only — the runner has no interactive follow-up surface; it waits through any work the Agent completes before returning to idle and prints the last non-empty assistant message in that interval.
- No pre-token heartbeat — stderr remains silent until the provider emits a non-empty reasoning delta; a provider that delays its first streamed token exposes no earlier progress signal.
- Reasoning enters stderr logs — redirection and supervisors may retain substantially more and potentially sensitive model output; route stderr to a controlled sink when that content must not be collected.
ctx.appExitis launcher-owned — booting the headless profile outside thedshlauncher fails loud at activation until the host provides the exit request.