跨进程投射 UI 表面,按需同步文档变更
27.3/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add CH4ACKO3/dsh-ui-container该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-runtime给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 跨进程投射UI表面
- 按需同步文档变更
- 远程递归界面容器
面向 DeepSeek Harness 的可远程递归 UI 界面容器
README
由 DeepSeek 最新模型翻译生成dsh-ui-container
用于 DeepSeek Harness 浏览器插件的可复用视觉与服务容器。它拥有具名 UI 表面、文档提供者、递归 React 宿主,以及连接另一个前端所需的小型远程协议,而无需传输 DOM 或组件树。
将该插件安装到 DeepSeek Harness 配置文件中:
dsh plugin --profile web add github:CH4ACKO3/dsh-ui-container
此命令作用于配置文件范围,可从任意目录运行。
Git 依赖会运行此包的 prepare 构建。使用 pnpm 10 或更新版本时,请在配置文件的 pnpm-workspace.yaml 中批准首次安装所报告的确切包键,然后重复该命令。注册表发布版本和打包产物不需要该批准。
其他浏览器插件从 @ch4acko3/dsh-ui-container/client 导入其公共 API,并注入 uiContainer Cordis 服务。
远程传输
@ch4acko3/dsh-ui-container 可以跨进程或网络边界投射容器。远程契约传输文档快照和变更通知;它从不传输 React 元素、DOM 节点或 Cordis 服务对象。
能力
协议版本 1 在强制握手期间协商以下能力:
- documents 解析基于 URI 的文档投射。
展开完整文档(README 剩余 1 节)
dsh-ui-container
用于 DeepSeek Harness 浏览器插件的可复用视觉与服务容器。它拥有具名 UI 表面、文档提供者、递归 React 宿主,以及连接另一个前端所需的小型远程协议,而无需传输 DOM 或组件树。
将该插件安装到 DeepSeek Harness 配置文件中:
dsh plugin --profile web add github:CH4ACKO3/dsh-ui-container
此命令作用于配置文件范围,可从任意目录运行。
Git 依赖会运行此包的 prepare 构建。使用 pnpm 10 或更新版本时,请在配置文件的 pnpm-workspace.yaml 中批准首次安装所报告的确切包键,然后重复该命令。注册表发布版本和打包产物不需要该批准。
其他浏览器插件从 @ch4acko3/dsh-ui-container/client 导入其公共 API,并注入 uiContainer Cordis 服务。
远程传输
@ch4acko3/dsh-ui-container 可以跨进程或网络边界投射容器。远程契约传输文档快照和变更通知;它从不传输 React 元素、DOM 节点或 Cordis 服务对象。
能力
协议版本 1 在强制握手期间协商以下能力:
- documents 解析基于 URI 的文档投射。
- subscriptions 订阅一个 URI,并在其投射可能已更改时发送一个小型失效通知。
- surface_commands 将打开、显示和关闭命令路由到已挂载的表面会话。服务器必须选择启用此能力;默认情况下它处于禁用状态。
文档解析包含一个可选的 known_revision。当它与当前服务器修订版本匹配时,响应为 not_modified,且不包含文档负载。变更通知仅包含订阅 id 和 URI。随后客户端会再次解析文档,因此网络使用量取决于实际数据变更,而非所渲染组件树的大小或嵌套深度。
所有远程文档内容和元数据必须与 JSON 兼容。渲染器保留在接收方前端内部,并在本地渲染投射。
跨进程连接
将 MessagePort 用于 Worker、iframe 桥接或宿主 IPC 适配器:
const hostChannel = createMessagePortUiRemoteChannel(hostPort)
const clientChannel = createMessagePortUiRemoteChannel(clientPort)
const stopServing = exposeUiContainerRemote(ctx.uiContainer, hostChannel, {
server: {
name: 'patchouli-host',
version: '0.1.0',
instance_id: crypto.randomUUID(),
},
})
const remote = await UiContainerRemoteClient.connect(clientChannel, {
client: {
name: 'patchouli-window',
version: '0.1.0',
instance_id: crypto.randomUUID(),
},
protocol_versions: [UI_REMOTE_PROTOCOL_VERSION],
capabilities: ['documents', 'subscriptions'],
})
const unregister = ctx.uiContainer.documents.registerProvider(
remote.createDocumentProvider('memory'),
)
将 unregister、remote 和 stopServing 与拥有这些端口的生命周期一起释放。
网络连接
网络所有者首先接受并认证 WebSocket,然后通过该套接字暴露容器:
webSocketServer.on('connection', (socket, request) => {
const principal = authenticate(request)
if (!principal) return socket.close(1008, 'Unauthorized')
const channel = createWebSocketUiRemoteChannel(socket)
exposeUiContainerRemote(ctx.uiContainer, channel, {
server: {
name: 'patchouli-host',
version: '0.1.0',
instance_id: processInstanceId,
},
capabilities: ['documents', 'subscriptions'],
})
})
浏览器客户端可以直接连接:
const remote = await connectUiContainerWebSocket('wss://host.example/ui', {
client: {
name: 'patchouli-web',
version: '0.1.0',
instance_id: crypto.randomUUID(),
},
protocol_versions: [UI_REMOTE_PROTOCOL_VERSION],
capabilities: ['documents', 'subscriptions'],
})
该传输层有意不定义认证。拥有 WebSocket 端点的应用程序必须在调用 exposeUiContainerRemote 之前强制执行认证、授权、TLS 和来源策略。服务器应仅对允许控制所寻址前端会话的主体启用 surface_commands。
线路契约
消息采用 JSON-RPC 2.0。方法名携带其主版本号:
ui.container.handshake@1
ui.container.document.resolve@1
ui.container.document.subscribe@1
ui.container.document.unsubscribe@1
ui.container.document.changed@1 # server notification
ui.container.surface.open@1
ui.container.surface.reveal@1
ui.container.surface.close@1
src/client/remote-protocol.ts 中的 TypeScript 定义是规范性的线路模式。一个连接只允许一次握手,并且之后的每个方法都必须属于已协商的能力。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
CH4ACKO3/dsh-ui-container
跨进程投射 UI 表面,按需同步文档变更
相关插件 · UI / 主题
破甲增强版JeffKeeping/dsh-purge-plus
dsh-purge 的非官方分支fork:适配 DeepSeek Harness 0.2.1-rc.2、破甲内核…
★ 387已汉化DeepSeek 客户端
71.9
无代码业务系统平台nocobase/nocobase
NocoBase 是什么
★ 24,804已汉化DSH
71.8
1Panel 服务器面板1Panel-dev/1Panel
全球 250 万+ 自托管用户共同喜爱。
★ 37,350已汉化DSH
71.5
工作状态行动态ccch1mneyyy/working-activity
作者:chimney@ccch1mneyyy。社区项目,非 DeepSeek 官方项目。
★ 664已汉化DSH
71.2
多模型配置管家farion1231/cc-switch
跨平台桌面一体化助手,支持 Claude Code、Codex、OpenCode、DeepSeek Harness 等工具,唯一官网 ccswitch.io
★ 151,506已汉化DSH
71.1
AI 矢量设计工具ZSeven-W/openpencil
全球首个 AI 原生开源矢量设计工具。
★ 7,027已汉化DSH
71.1
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。