Files
deepseek-harness/packages/ui/jsonrpc/README.md
Tianyi Cui 972e7cc77d Merge remote-tracking branch 'origin/master' into codex/trim-ai-prose
# Conflicts:
#	docs/config-catalog.md
#	docs/event-producer-consumer.md
#	docs/rfc/implemented/feature/2026-07-05-dynamic-workflows.md
#	examples/acp-agent/tests/acp.snapshot.ts
#	packages/code-runtime/code-runtime-worker/tests/built-lib.e2e.ts
#	packages/code-runtime/code-runtime-worker/tsdown.config.ts
2026-07-14 00:40:36 +08:00

1.9 KiB

@deepseek-ai/dsh-jsonrpc

Stdio JSON-RPC plugin for out-of-process SDK clients such as Python deepseek_harness. HarnessSdkServer handles initializesession/promptshutdown plus session and subagent notifications over JsonRpcLineTransport. This package owns the protocol; jsonrpc-agent boots the external cordis.yml that chooses the surrounding runtime. See the single-executable RFC for the distribution design.

Wiring

inject: ['agents']. The server gets or creates one agent per sessionId on session/prompt and demuxes subagent/end through the registry. If initialize.model lacks a registered adapter, it mounts dsh-llm-deepseek using $DEEPSEEK_API_KEY and $DEEPSEEK_BASE_URL; a config-registered adapter wins. Persistence, tools, and other adapters come from the surrounding cordis.yml.

Config

No cordis.yml keys. JsonRpcConfig.input, output, and exit are test-only runtime seams; production uses process stdio and process.exit.

stdout is the protocol

stdout carries only JSON-RPC frames. The loading config must omit stdout loggers; diagnostics go to stderr.

Shutdown and exit semantics

A shutdown request flushes its response, disposes the plugin fiber, then exits 0. Disposal idempotently shuts down every SDK-created agent to quiescence, detaches subscriptions, and closes the transport. Bare fiber disposal only stops serving; it does not exit. The app bin owns root disposal for stdin EOF (0), SIGTERM (0), and SIGINT (130).

Wire notes

initialize.serverInfo.name is the wire-stable deepseek-harness-sdk-runtime. Each session permits one in-flight prompt; overlap fails immediately, other sessions remain independent, and the session is reusable after settlement. Persistence roots and deployment persona remain in cordis.yml.