Files
deepseek-harness/packages/examples/acp-demo/README.md
Tianyi Cui d07875947b Merge remote-tracking branch 'origin/master' into worktree/acp-automation-protocol
# Conflicts:
#	packages/examples/acp-demo/README.md
2026-07-24 11:50:56 +08:00

4.0 KiB

@deepseek-ai/dsh-acp-demo

ACP automation server app: the default agent spine, client-created agents through @deepseek-ai/dsh-acp, JSONL persistence, and semantic checkpointing behind one JSON-RPC stdio bin. Programmatic clients create fresh sessions; this package mounts no human UI.

Composition

Plugin Role
@deepseek-ai/dsh-agent-spine-demo Providerless agent spine with no pre-created agents; session/new creates each agent.
@deepseek-ai/dsh-session-persistence-jsonl Durable session logs used by checkpointing, observability, and snapshot replay.
@deepseek-ai/dsh-session-checkpoint-policy Durability barriers before model calls and top-level tool effects, plus completed-step checkpoints.
@deepseek-ai/dsh-acp Automation-only ACP transport over stdin/stdout.

The app does not install commands, user interaction, session navigation, configuration pickers, or a stdout logger. It owns the four plugins through one ordered effect so ACP sessions quiesce before checkpointing and persistence detach. Leaf configurations supply LLM, executor, sandbox, approval, filesystem, and model-facing tool plugins.

Config

Key Default Routed to
provider required Provider route for each ACP-created agent.
model required Model for each ACP-created agent.
maxParallelToolCalls agent-loop default Positive-integer tool-call concurrency cap; 1 is serial.
persona Deployment persona template for dsh-system-prompt.
toolOrder lexicographic Explicit model-facing tool order for dsh-system-prompt.
tools { mode: 'native' } Native, Code Mode, or combined model tool transport.
dshHome $DSH_HOME or ~/.dsh Harness home shared by bash and local skill discovery.
sessionTitle spine example limits Durable fallback-title limits; titles remain off the ACP wire.
persistenceRoot ./.sessions JSONL backend root.
packChunks false Pack consecutive delta-chunk events in storage.
persistenceCompression zstd Checksummed Zstandard frames or raw none.
workspaceContext required Workspace-instruction byte budget/config, or false.
skills owner defaults Skill registry, local provider, and model-facing skill tool.
toolBash owner defaults Model-facing bash tool config.
toolTasks owner defaults Generic background-task control config, or false.
goals owner defaults Persisted same-session goal domain and model tools, or false.
llmRetry owner defaults Bounded transient model-request retry policy.

The shipped examples/acp-agent/cordis.yml adds the DeepSeek adapter, sandboxed bash and filesystem providers, one-shot approval policy, compaction, subagents, workflows, hooks, and model-facing tools. Snapshot overlays replace only nondeterministic providers or policy values.

Bin

dsh-acp-demo [--config path-to-cordis.yml] (short form -c; default ./cordis.yml) loads the gitignored .env, except in replay mode; DSH_SNAPSHOT=replay selects the sibling cordis.snapshot.yml; stdin EOF disposes the context and flushes sessions before exit. Loader's installed optional node-addon-require-builtin peer resolves bare plugin specifiers for the built bin under plain Node. Diagnostics use stderr because stdout is the ACP wire.

Model Experience

Indirectly, through dsh-agent-spine-demo and the leaf's model-facing plugins. ACP prompt text becomes the ordinary logged user message; protocol metadata and permission choices do not enter the model request.

KV Cache effect

Append-only per session; the app adds no request-prefix content itself.

Known Limitations and Deferred Work

  • JSONL persistence is fixed — a different backend requires another composition.
  • Sibling plugins can corrupt stdout — the app cannot prevent another entry from writing non-protocol bytes.
  • Fresh automation sessions only — resume and human interaction belong to other front doors.