description: "面向客户端与服务端实现者的 SDK 协议格式(wire format)说明:Harness 运行时与其 SDK 客户端之间使用的按换行分帧 JSON-RPC 传输,以及具名的请求、结果与通知类型。"
English | 中文
dsh-sdk-protocol 让 DeepSeek Harness 运行时与其 SDK 客户端通过按换行分帧的字节流交换 JSON-RPC 2.0 消息:一个传输类,加上协议两端共同使用的具名请求、结果与通知类型。服务端是 dsh-sdk-jsonrpc-server 插件;客户端是 TypeScript 的 dsh-sdk-client 与 Python SDK(后者复现这些结构但不导入它们)。当你实现或调试协议某一端时使用本包:分帧规则、方法名、载荷类型与错误语义都在这里。它是纯库——无插件、无配置、无注册。
当你构建或调试 SDK 协议端——服务插件、客户端库或使用该协议的自定义工具——时使用本包。它为你提供一个在调用方持有的字节流上承载 JSON-RPC 2.0 的传输,以及每个 SDK 方法与通知的类型化结构。
在你拥有的字节流上,每个 \n 结尾的行承载一条 JSON-RPC 2.0 消息。同时带 id 与 method 的帧是请求,仅 id 是响应,仅 method 是通知;格式错误的行会被忽略。没有注册处理器的请求应答 -32601,处理器失败应答 -32603,错误响应会以 JsonRpcResponseError 拒绝挂起的请求,并保留协议中的 code 与可选 data。start() 挂接流监听器,close() 移除监听器并拒绝挂起请求,但不销毁流。
两个协议端共享同一套方法:三个客户端到服务端请求与四个服务端到客户端通知。
| 方向 | 方法 | 载荷类型 |
|---|---|---|
| client→server | initialize |
InitializeParams → InitializeResult |
| client→server | session/prompt |
SessionPromptParams → SessionPromptResult(持久入队回执) |
| client→server | shutdown |
无参数 → {} |
| server→client | session.event |
SessionEventNotification(运行时内每个会话,不过滤) |
| server→client | session.status |
SessionStatusNotification(整个 agent(智能体)的 running/idle 转换) |
| server→client | subagent.started |
SubagentStartedNotification |
| server→client | subagent.finished |
SubagentFinishedNotification(仅进程内运行) |
HarnessSdkRequestMap 与 HarnessSdkNotificationMap 按方法名索引这些结构;包根与传输一起导出它们。
SessionPromptResult.messageId 标识已排队的用户消息;它不标识后续的助手消息、轮次结束或提示词结果。SdkPromptContentBlock 接受普通持久内容以及 SdkEncodedImageBlock { type: "image", data, mimeType };服务器在入队前把编码图像转换为持久引用。InitializeParams.reasoningEffort 是所选提供方/模型路由可选的非空适配器自有标识符;省略时保留该模型的默认值。InitializeParams.maxTokens 是可选的正安全整数,用于限制 SDK 创建的 agent 及其进程内后代的每次对话模型输出;省略时应用所选适配器的确切模型默认值。服务器会在初始化期间解析确切路由,并在握手成功前拒绝 session/prompt,因此缺少适配器、模型不可用或推理强度不受支持时,不会回退到构造期默认值。SubagentFinishedNotification.lastAssistantMessage 携带子 agent 最后一条非空 assistant 消息;若不存在这类消息,则携带其累积的 assistant 文本;子 agent 两种输出均未产生时,该字段缺省。serverInfo.name 的协议值固定为 deepseek-harness-sdk-runtime。通知载荷依赖 SessionEvent(dsh-session)、ContentBlock(dsh-llm)与 SubagentStopReason(dsh-subagent),因此会话词汇是协议格式约定的一部分。
当协议约定不够用时阅读以下页面。它们从服务插件进入客户端与可运行应用。
dsh --profile sdk 应用。无,因为这是面向客户端的协议库;模型可见行为归对外服务入口后方的运行时插件所有。
无;此包既不组装也不发送提供方请求。
这些限制说明协议未覆盖或未承诺的内容。它们是当前包约束,不是与其他协议格式的对比或任务积压。
serverInfo.version(0.0.1,客户端不校验);处于预发布阶段,无兼容承诺。