2026-07-24 01:40:25 +08:00
# ACP automation server and backend snapshot-record composition. With
# `DSH_SNAPSHOT=record`, the app bin runs the real DeepSeek adapter and the
# harness harvests its persisted log. The bin loads the gitignored root `.env`
# before this config. This tree has no stdout logger or HMR because stdout
# carries ACP JSON-RPC.
2026-06-16 11:10:25 +08:00
2026-07-22 10:55:16 +08:00
# The DeepSeek adapter. Shipped default: full thinking at max effort on every
# request (wire-only defaults; they never enter the request header).
2026-06-21 12:03:44 +08:00
- id : llm-deepseek
name : '@deepseek-ai/dsh-llm-deepseek'
config :
apiKey : !!js process.env.DEEPSEEK_API_KEY
baseURL : !!js process.env.DEEPSEEK_BASE_URL
2026-07-22 10:55:16 +08:00
thinking : enabled
reasoningEffort : max
2026-07-23 11:51:52 +08:00
defaultContextWindow : 256000
2026-07-20 15:34:00 +08:00
models :
- id : deepseek-v4-flash
- id : deepseek-v4-pro
2026-06-16 11:10:25 +08:00
2026-07-14 20:05:57 +08:00
# The default composition confines bash AND the filesystem tools to the
# workspace and asks before a wider retry. Snapshot runs select
# danger-full-access so the established scenarios remain runner-independent;
# DSH_PERMISSION_MODE provides the same explicit deployment/test override
2026-07-21 00:44:28 +08:00
# outside the snapshot harness. The sandbox default + fallback root live on
# ctx.sandboxPolicy; agent calls resolve both families against the session cwd.
2026-07-14 01:09:44 +08:00
- id : sandbox
name : '@deepseek-ai/dsh-sandbox-local'
2026-07-14 20:05:57 +08:00
- id : sandbox-policy
name : '@deepseek-ai/dsh-sandbox-policy'
config :
mode : !!js "process.env.DSH_PERMISSION_MODE ?? (process.env.DSH_SNAPSHOT === undefined ? 'workspace-write' : 'danger-full-access')"
workspaceRoot : !!js process.cwd()
2026-06-21 12:03:44 +08:00
- id : bash
2026-07-14 01:09:44 +08:00
name : '@deepseek-ai/dsh-bash-sandbox'
2026-06-16 11:10:25 +08:00
config :
2026-06-21 12:03:44 +08:00
timeoutMs : 60000
2026-07-14 01:09:44 +08:00
- id : approval
name : '@deepseek-ai/dsh-user-approval'
config :
policy : !!js "(process.env.DSH_PERMISSION_MODE ?? (process.env.DSH_SNAPSHOT === undefined ? 'workspace-write' : 'danger-full-access')) === 'danger-full-access' ? 'never' : 'ask'"
2026-07-24 01:40:25 +08:00
# The ACP automation app: agent spine + JSONL persistence + protocol bridge.
2026-06-21 12:03:44 +08:00
# Persistence root: $DSH_SNAPSHOT_SESSIONS_ROOT when the snapshot harness sets it
# (so it can harvest / isolate the log), else ./.sessions for the demo.
2026-07-20 00:06:21 +08:00
# Snapshot modes use raw JSONL fixtures; ordinary runs keep the compressed default.
2026-06-21 12:03:44 +08:00
- id : acp-agent
2026-07-15 15:57:57 +08:00
name : '@deepseek-ai/dsh-acp-demo'
2026-06-16 11:10:25 +08:00
config :
2026-07-14 21:57:52 +08:00
provider : deepseek
2026-07-22 10:55:16 +08:00
model : deepseek-v4-pro
2026-06-21 12:03:44 +08:00
persistenceRoot : !!js process.env.DSH_SNAPSHOT_SESSIONS_ROOT ?? './.sessions'
2026-07-20 00:06:21 +08:00
persistenceCompression : !!js "process.env.DSH_SNAPSHOT === undefined ? 'zstd' : 'none'"
2026-07-12 12:09:35 +08:00
workspaceContext :
maxBytes : 65536
2026-07-13 23:27:00 +08:00
# Keep the persona to identity and behavior; tool plugins own tool guidance.
# The loop resolves {{model}} and each ACP session's client-supplied {{cwd}}.
2026-07-05 23:23:46 +08:00
persona : |
2026-07-14 01:09:44 +08:00
You are a coding assistant powered by the {{model}} model. Your working directory is {{cwd}}. Your bash tool runs under a file sandbox — a `[sandbox: file access denied …]` result is policy, not a command bug.
2026-06-21 12:03:44 +08:00
2026-07-11 22:33:33 +08:00
Verify your work by running the code or tests. Keep answers brief and factual.
2026-06-29 10:30:52 +08:00
2026-07-20 15:34:00 +08:00
# Replay-aware request pressure; the routed adapter supplies model capacity.
2026-07-20 11:47:17 +08:00
- id : token-meter
name : '@deepseek-ai/dsh-token-meter'
# Summarize an older range after measured pressure or a canonical provider overflow.
2026-07-20 15:34:00 +08:00
# Ratios scale against the routed model's context window.
2026-07-15 16:42:32 +08:00
- id : compact-basic
name : '@deepseek-ai/dsh-compact-basic'
config :
thresholdRatio : 0.8
2026-07-20 15:34:00 +08:00
retainRatio : 0.08
2026-07-15 16:42:32 +08:00
maxTokens : 8192
compactionRetries : 1
2026-07-13 23:27:00 +08:00
# Expose fresh-child `spawn` and completed-prefix `fork` through separate tool
# names so multi-child scenarios exercise both transports. These leaves follow
# the app because it provides `ctx.agents` and `ctx.tools`.
2026-06-22 08:39:36 +08:00
- id : subagent
name : '@deepseek-ai/dsh-subagent'
- id : subagent-spawn
name : '@deepseek-ai/dsh-subagent-spawn'
config :
providerName : spawn
- id : subagent-fork
name : '@deepseek-ai/dsh-subagent-fork'
config :
providerName : fork
- id : tool-subagent
name : '@deepseek-ai/dsh-tool-subagent'
config :
provider : spawn
2026-06-22 17:00:59 +08:00
toolName : subagent
2026-07-19 17:20:49 +08:00
maxDepth : 1
2026-06-22 17:00:59 +08:00
- id : tool-subagent-fork
name : '@deepseek-ai/dsh-tool-subagent'
config :
provider : fork
toolName : subagent_fork
2026-07-19 17:20:49 +08:00
maxDepth : 1
2026-06-29 10:30:52 +08:00
2026-07-05 13:29:35 +08:00
2026-07-13 23:27:00 +08:00
# The worker-thread workflow engine fans a model-written JavaScript script's
# `agent()` calls out through the spawn backend; the adjacent tool exposes it to the model.
2026-07-09 19:06:55 +08:00
- id : workflow-workerthread
name : '@deepseek-ai/dsh-workflow-workerthread'
2026-07-05 13:29:35 +08:00
config :
provider : spawn
- id : tool-workflow
name : '@deepseek-ai/dsh-tool-workflow'
2026-07-20 00:51:19 +08:00
- id : tool-ralph
name : '@deepseek-ai/dsh-tool-ralph'
2026-07-24 01:40:25 +08:00
# `todo_write` replaces the logged whole list for later model requests.
2026-06-29 10:30:52 +08:00
- id : tool-todo
name : '@deepseek-ai/dsh-tool-todo'
2026-07-01 04:22:00 +08:00
2026-07-13 23:27:00 +08:00
# Identical repeat calls trigger advisory context, never a block, at the default
# thresholds [3, 5, 8]. Only the repeat-tool-guard snapshot scenario reaches them.
2026-07-08 14:24:20 +08:00
- id : repeat-tool-guard
name : '@deepseek-ai/dsh-repeat-tool-guard'
2026-07-14 20:05:57 +08:00
# The filesystem stack rides the SAME sandbox policy as bash: dsh-fs-sandbox
# replaces dsh-fs-local behind ctx.fs and fences write/edit by the effective
# mode (read-only denies, workspace-write contains to the workspace + temp
# roots, danger-full-access passes through), so read/write/edit are available
# under every mode. fs-policy (read-before-edit) composes orthogonally on top.
- id : fs-sandbox
name : '@deepseek-ai/dsh-fs-sandbox'
2026-07-02 12:55:01 +08:00
config :
cwd : !!js process.cwd()
- id : fs-policy
name : '@deepseek-ai/dsh-fs-policy'
- id : tool-fs
name : '@deepseek-ai/dsh-tool-fs'
2026-07-04 03:09:37 +08:00
2026-07-13 23:27:00 +08:00
# `configPath` is read once at load and resolves from the server launch cwd, not
# `session/new.cwd`; one `hooks.json` therefore applies to every session and a
# project-local file is not discovered. Missing config registers nothing. Hook
# commands still run in the session cwd. Warnings use `ctx.logger`, never stdout;
# see packages/hooks/hooks-claude/README.md for the deferred per-session design.
2026-07-01 04:22:00 +08:00
- id : hooks-claude
name : '@deepseek-ai/dsh-hooks-claude'
config :
configPath : ./hooks.json
2026-07-04 00:40:35 +08:00
2026-07-13 23:27:00 +08:00
# Codex uses its own `codex-hooks.json` and snake_case five-event dialect; it
# cannot share Claude's file. It has the same process-level, read-once, missing-is-no-op,
# logger-only contract. Shipping both bridges lets a scenario seed and exercise either dialect.
2026-07-04 00:40:35 +08:00
- id : hooks-codex
name : '@deepseek-ai/dsh-hooks-codex'
config :
configPath : ./codex-hooks.json