dsh-dock-host
Generic dock-button host for a dsh (DeepSeek Harness) web client: renders one row of buttons above the composer and owns the dockButtons registry, overflow menu, i18n, and motion. Built as a Feature-Sliced Design static Cordis plugin.
安装
dsh plugin --profile web add github:tecfancy/dsh-dock-host
需要可复现安装时,可在仓库后追加 #commit 固定提交。
Generic dock-button host for a dsh (DeepSeek Harness) web client: renders one row of buttons above the composer and owns the dockButtons registry, overflow menu, i18n, and motion. Built as a Feature-Sliced Design static Cordis plugin.
该插件未提供要点说明,请参考仓库 README。
- 安装并启动 DeepSeek Harness:
npx @deepseek-ai/dsh web - 在终端执行上面的安装命令(CLI 会解析插件并核验来源)
- 用 dsh plugins list 确认已安装,必要时重启 Harness 生效
插件以当前 dsh 进程的权限运行,安装时可能执行代码。请先通读仓库源码与许可证,确认无破坏性命令与越权访问;本站只做索引,不对第三方插件安全性作担保。
| 代码仓库 | github.com/tecfancy/dsh-dock-host |
| 许可证 | MIT |
| 主要语言 | main |
| 下载量 | 1 |
| GitHub 星标 | 0 |
| 最近推送 | 2026-08-28 |
| 收录日期 | 2026-09-19 |
| 分类 | 工具与能力 |
事实信息来自公开插件目录快照(2026-10-01),介绍文案由本站再加工。
以下为插件仓库 README 全文(原始内容,由公开目录抓取整理)。
# dsh-dock-host
A generic **dock-button host** for the [dsh](https://github.com/deepseek-ai/deepseek-harness)
web client, built as a [Feature-Sliced Design](https://feature-sliced.design)
static Cordis plugin. It renders one row of buttons above the composer/input
box and owns everything about _placement_: the `dockButtons` registry, theme
tokens, i18n (`dockHost` namespace, zh/en), overflow "更多" menu, and motion.
It is intentionally **feature-agnostic** — it knows nothing about what a
specific button does. A concrete feature (terminal, files, ...) registers its
own buttons into the registry; the host only places them.
## Install
```sh
npm install @tecfancy/dsh-dock-host
```
Then mount it into a dsh profile (the CLI reconciles `dsh.profile.bundles`):
```sh
dsh plugin --profile web add @tecfancy/dsh-dock-host
```
Requires `@deepseek-ai/cordis` `^4.0.1` as a peer dependency.
## Layering (client-only)
`dsh-dock-host` is a **client-only** plugin: the host half (`src/index.ts`)
registers no tools and no RPC. The client half under `src/client/` follows the
framework's FSD layering:
```
src/
index.ts host root: name only (no host capabilities)
client/
index.tsx client assembly root: provide registry, mount the
conversation.input.dock row slot, register i18n
shared/
config/context.ts structural type contracts (slots, locale, logger)
dock/registry.ts the dockButtons registry (register/list/subscribe)
features/
dock-host/
DockButtonsRow.tsx the row + overflow menu (placement, tokens, i18n)
DockButtonsRow.module.css reduced-motion kill switch (build-time inline)
```
Host and client are physically isolated: host never uses JSX/React, client never
touches `window`/`document` directly. There are no cross-boundary code imports.
Because there is no host Remote RPC in this plugin, no Typert artifacts are
generated and no `harness.handle`/`host.call`/`styles.insert` builtins are used
(those are dynamic plugin evaluator builtins, not the static surface).
## The DockButton contract
A feature registers a button with the shape:
```ts
{
id: string, // unique, namespaced e.g. 'terminal:open'
order?: number, // ascending placement, default 0
label: string | (() => string), // thunk for i18n
icon?: string, // optional glyph prefix
enabled?: boolean | ((ctx) => boolean), // optional visibility predicate
primary?: boolean, // always visible before the overflow
run(ctx: { input, inputActions, sessionId }): void | Promise,
}
```
The host fills the row up to `DEFAULT_MAX_VISIBLE` (4) primary-then-ordered
buttons, and puts the rest in the overflow menu; primary buttons always stay
visible.
## Adding a feature (later)
A provider (terminal, files, ...) is added as another `client/features//`
slice. The client assembly root creates the registry once and hands it to each
feature so they can `registry.register(...)`. Because this is a single plugin,
no cross-plugin service composition is required.
## Commands
| Task | Command |
| ------------- | ------------------------------------------------------------ |
| Install | `npm install` |
| Type-check | `npm run type-check` |
| Lint | `npm run lint` / `npm run lint:no-emdash` |
| Format | `npm run format:check` (fix with `npm run format`) |
| Test | `npm run test` / `npm run test:coverage` |
| Aliases drift | `npm run aliases:check` |
| Build | `npm run build` (host tsc + tsdown client bundle) |
| Bundle verify | `npm run bundle:check` |
| Full gate | `npm run verify` (must stay green) |
| Smoke install | `node scripts/install-to-profile.mjs --profile web [--copy]` |
## Requirements
- Node >= 22.19.0, npm 10.9+
- A dsh web profile for smoke testing (optional for development)
## License
MIT (c) 2026 TecFancy
> This plugin is scaffolded from the [dsh-plugin-framework](../dsh-plugin-framework)
> template (feature-sliced design + host/client isolation + engineering gates).
数据来源:公开的 DeepSeek Harness 插件目录与各插件 GitHub 仓库。本站为独立第三方目录,与 DeepSeek、幻方(High-Flyer)及插件作者均无隶属或背书关系。