Files
deepseek-harness/examples/sandbox-acp-agent/cordis.snapshot.yml
T
kingwl ca39fd89b0 feat(example): sandbox-acp-agent — the live composition; RFCs to implemented
The three-entry cordis.yml (dsh-sandbox-local + dsh-bash-sandbox at a
read-only default + dsh-approval) served over ACP: the first live approval
composition. Recorded snapshot scenarios pin the wire end to end —
config-options advertisement, the mode-switching arc as the suite pinned
header (both switches, the prompt-section delta, one changed-by-the-user
notice per knob, a confined write landing under the switched mode), and
both escalation branches over scripted permissionAnswers (a grant runs
confined under workspace-write; a rejection executes nothing and pins the
fail-closed text). The with-key escalation e2e drives a real model +
real runner + the real bridge answerer, world-verified; ci.yml snapshot
lane and e2e.yml install bubblewrap so the confined replays actually
execute.

Both RFCs move to implemented/ (Decision/Consequences form, deferred
phases tracked in their own sections), with every cross-reference flipped.
2026-07-10 15:44:38 +08:00

31 lines
1.5 KiB
YAML

# Snapshot-test REPLAY overlay for the sandboxed composition: the SAME app
# tree as cordis.yml, derived from it by an include — the one difference is
# the model backend. A keyless replay run cannot boot the real adapter
# (llm-deepseek's apply() throws without DEEPSEEK_API_KEY), so the include
# patches the live tree at load time: the llm-deepseek entry is disabled by
# id, and the llm-replay entry (which serves a recorded session JSONL — no
# API key, no network) is inserted. Every other entry — the sandbox provider,
# the confined bash executor, the approval seam, the app — IS the live tree.
# The sandbox provider probes for a platform runner per EXECUTION, not at
# boot, so a protocol-only scenario (session config options) replays on hosts
# with no runner at all.
#
# The dsh-acp-agent bin selects this file for DSH_SNAPSHOT=replay (the
# sibling-swap of whatever config path it was handed). The replay fixture
# path comes from $DSH_SNAPSHOT_FILE, set by the snapshot harness. stdout
# stays reserved for the ACP JSON-RPC protocol.
- id: base
name: '@cordisjs/plugin-include'
config:
path: ./cordis.yml
patches:
# The name is an assertion, not an override: the include skips the patch
# (warning) when the id points at a different plugin, so this can never
# disable the wrong entry.
- id: llm-deepseek
name: '@deepseek-ai/dsh-llm-deepseek'
disabled: true
- insert:
- id: llm-replay
name: '@deepseek-ai/dsh-llm-replay'