Master's "fix(acp): align prompt and workspace contracts" made session/new reject a non-empty additionalDirectories / mcpServers (widening the workspace scope is unimplemented). Add a `reject-extra-dirs` scenario + a `newSessionExpectError` input op that pins this editor-facing contract: the bridge answers with `-32602 Invalid params: additionalDirectories is not supported`. Keyless, deterministic, no model call. (session/load replay — the other new master behavior — needs a two-phase seed-then-load harness and is left for a focused follow-up.)
Examples
Runnable demos (not workspaces) that showcase how the harness is wired.
echo-agent
A mock model + echo tool + stdio UI + JSONL persistence demo. Demonstrates:
- Loading plugins from a
cordis.ymlvia@cordisjs/plugin-loader+@cordisjs/plugin-include - Registering a mock
LlmAdapter(streaming scripted responses) - Registering a tool via
ctx.tools.register() - Persisting session events to JSONL via the
session/event+session/flushpattern - A minimal stdio UI consuming
agent/stream-chunkand session events
Run with: pnpm run demo:echo
When prompted, type "echo " to trigger a tool call round-trip.
coding-agent
The real thing: DeepSeek V4 + the bash tool suite + stdio chat + JSONL persistence, wired from cordis.yml. Where echo-agent proves the skeleton with mocks, this is a usable coding assistant.
Run with: pnpm run demo:coding (needs DEEPSEEK_API_KEY in the environment or a gitignored repo-root .env). See coding-agent/README.md for details.