feat(bundle): the web and one-shot apps own their own flags

dsh-web-app owns --host/--port/--dev/--workspace-root/--trusted-host and
its --help in a web-startup row; the rows it configures wait for the
webStartup service, and the client-plugin HMR receiver now ships disabled
so --dev is a row toggle rather than a runtime insert (the Loader cannot
resolve a row inserted from inside a mounting plugin).

dsh-headless owns the task positional and rejects a missing task as its own
usage error. Its runner ships disabled, not merely waiting: the schema
requires the task, and a row's config is validated when its fiber is
created, before the startup row can supply one. A composition has exactly
one command-line owner, so the patch disables the web startup row and this
one provides webStartup too, leaving the web rows on their composed
one-shot values.

The keyless web scaffold provides the same three values with no arguments,
which is what an embedding host with no command line does.
This commit is contained in:
Turtle
2026-08-06 20:52:26 +08:00
parent 788368e314
commit 82728808d4
23 changed files with 692 additions and 36 deletions

View File

@@ -1,7 +1,8 @@
# The dsh-headless bundle patch: one-shot task mode directly over dsh-base.
# It mounts no Host, HTTP server, Web runtime, or browser plugin. The launcher
# patches the runner's `task`; the direct driver creates an Agent through the
# core registry and prints the final durable assistant message.
# It mounts no Host, HTTP server, Web runtime, or browser plugin. The startup
# row owns the task positional (`dsh --profile headless "<task>"`) and this
# app's --help; the direct driver creates an Agent through the core registry
# and prints the final durable assistant message.
- id: system-prompt
config:
@@ -22,5 +23,12 @@
- id: code-runtime
name: '@deepseek-ai/dsh-code-runtime-worker'
- id: headless-startup
name: '@deepseek-ai/dsh-headless/startup'
# Shipped off, not merely waiting: the runner's schema requires the task.
# The startup row enables it with the task after parsing this app's argv.
- id: headless-runner
name: '@deepseek-ai/dsh-headless'
inject: [headlessStartup]
disabled: true