已核实档案CONF. 80/100官方

Client Connection

dsh-client-connection

Wire consumer layer: the client plugin's apply mounts `ctx.connection` (shared api client + current-page loop…

AI 能力插件clientclientclient-connection
类型
插件
client
版本
0.1.1-rc.2
能力包版本
分发
open_source
安装分发方式
资料置信度
80/100
达到公开展示门槛
01

先看结论

基于现有公开资料生成,最后决策仍应核对原始来源。

Wire consumer layer: the client plugin's apply mounts `ctx.connection` (shared api client + current-page loopback state + observable generation-scoped `hostDescription` + single-consumer stream-loop starter); the export face carries the wire contract types, the `AbstractApiClient` abstraction, and the loop's sink/config types. Each successful readiness handshake publishes the exact `host.describe` value before `onConnected`; generation loss and explicit stop clear it, so native-capability consumers never retain a disconnected answer. The browser carrier uses HTTP POST for unary and respond operations and opens one downlink-only WebSocket each for `events.mux` and `events.host`; the in-process carrier satisfies the same two-stream abstraction. The exported `ClientTransportHooks` names the page global `__DSH_TRANSPORT__` that replaces the browser carrier wholesale: the served web app leaves it unset and gets HTTP + WebSocket, while a shell owning a different physical transport (the worker preview's postMessage tunnel) provides `createApiClient` and `fetch` — plus `loadBundle` when it also owns bundle bytes — instead of forking the plugin. The Host half owns the single `/api` route and its Fetch bridge; a registered Typert interceptor claims its Remote endpoints before the API Proxy fallback. Loopback hostname classification stays package-internal: the `/api` Host fence and WebSocket upgrades use it directly, while other client plugins consume the derived `ctx.connection.isLoopback` state. The node half's `/api` route pins the privileged method set (`host.pickDirectory`, `host.openPath`, and the whole configuration plane — `settings.describe`/`openDocument`/`update`/`replace`/`mutate` and `credentials.describe`/`set`/`unset`; reads and native actions included, since describing returns the exposed configuration, opening acts on the Host desktop, and probing an arbitrary reference reports where a credential comes from — and the agent-preset authoring plane, `agentPreset.read`/`copy`/`openDocument`/`remove`, since a composition names the plugins a session runs, so reading one is reconnaissance, and copy/remove/openDocument manage the roster and drive the host desktop (authoring is copy-only, so none of them accepts composition text or a path); `agentPreset.list` and `agentPreset.select` stay out — the roster carries only ids and trust, and choosing a preset grants nothing `session.create`'s own `agentPreset` did not, over a default that already carries bash) to loopback by passing the trust fence with an empty trust list — a declared `trustedHosts` authority reaches every other method, while these stay loopback-local until a real authentication layer exists. The platform carriers and ConnectionController loop are package-internal; apply selects and drives them. The downlink boundary is documented in the [WebSocket downlink carrier Agent Note](../../../.agents/notes/implemented/architecture/2026-08-04-websocket-downlink-carrier.md).

02

能力

它能让 Agent / 使用者做什么。

  • 适用 Agent:DeepSeek Harness
  • 适配模型:DeepSeek
03

安装与获取

可复现安装方式。

@deepseek-ai/dsh-client-connection

04

来源与核实

保留来源、时间与置信度,供回溯。

来源
DeepSeek Harness 官方 npm @deepseek-ai/dsh(源码仓库 github.com/deepseek-ai/deepseek-harness)
核实日期
2026-09-04
许可证
MIT
05

实效证据

来源可信不等于任务有效。

暂无通过审核、可复现的同任务 A/B 运行证据;本档案仅证明来源可信,不代表实测有效。

Client Connection - 档案 - 效率派 · 效率派