DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Client Ui Selection Add — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-client-ui-selection-add

Client Ui Selection Add

网页选中添加功能:在对话正文中的文本选区上浮动显示“添加到对话”按钮,并预填编辑器草稿

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add dsh-client-ui-selection-add@0.1.1-rc.2
README兼容性版本

兼容性与来源证明

Client Ui Selection Add 以 dsh-client-ui-selection-add 发布,当前版本为 0.1.1-rc.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/8/24

版本

0.1.1-rc.2prerelease
2026/8/24

相关插件

正在加载相关插件…

最新版
0.1.1-rc.2
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
42.5 kB
文件数
18
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
0
最近提交
2026/8/24
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

README

dsh-client-ui-selection-add

English | 中文

Source: pangzi-club/dsh-client-ui-selection-add

Web selection-add feature plugin: its browser half contributes a floating Add to conversation button into the conversation-owned conversation.input.dock slot. While a session's composer is mounted the plugin listens for text selection; a non-empty, non-editable selection floats a small button just above its bounding box, and clicking the button fills the composer draft (inputActions.setDraft) without sending — the user reviews and hits Enter (or the send button) themselves. Its host half is empty on purpose: capturing a selection and prefilling the draft is pure browser-surface presentation, so there is nothing for the Host to own.

The component is mounted in a session-scope list slot, so the framework delivers the session standard kit (useSession, sessionId, useProjection, useInput, inputActions) plus the session/input owner share and the selection locale seat; the component only reaches for inputActions and t. Because the button is a body-level portal, the dock entry renders nothing itself — the composer layout is untouched.

Two behaviors worth calling out:

  • Prefill, not auto-send. The click is setDraft(text); submit() is deliberately not called, so the user can edit the quoted text before it goes to the model. (Sending on click is a one-line change in SelectionAddButton.)
  • Editable-field guard. Selections inside an input, textarea, or contenteditable never show the button — selecting inside the composer is editing the draft, not quoting the conversation, and the button would fight the caret.

The button copy is bilingual under the selection namespace of dsh-client-locale. The anchor capture lives in a framework-free selection.ts module (selectionAnchorOf / isEditableField), unit-tested on its own.

Model Experience

None. Everything here is a browser interaction: the model never sees a tool, a session event, or a schema. The plugin is a pure presentation surface over the input machine's public inputActions face.

KV Cache effect

No invalidation. The plugin reads no session data and publishes no session events, so the conversation log, projections, and KV caches are untouched.

Known Limitations and Deferred Work

  • Not scoped to the transcript body. The selection listener is document-wide; the only guard today is the editable-field check. Selecting in the sidebar or settings shows the button because the plugin cannot identify the transcript scroll container without changing ui-conversation (the no-core-change choice above). Scoping it requires either a proper conversation.selection.* slot (see below) or a data-* hook the conversation skeleton already owns.
  • Prefill only. The user must confirm before send; there is no "send now" affordance on the floating button.
  • Multi-line selections anchor above the bounding box's top (the first line); a selection that starts near the viewport top may clip the button.
  • View-chat only, by construction. The button only mounts while a session composer is mounted, so it does not appear in the no-session hero. It does not distinguish which view tab is active.

Extension point (the "proper slot") upgrade

The current path rides the existing conversation.input.dock, so it requires zero changes to ui-conversation. To make the capture a first-class extension point instead, add a session-scope slot to ui-conversation (packages/client/ui-conversation/src/client/apply.ts children plus the contract/slots.ts SlotMap merge), e.g. conversation.selection.action { kind: 'list', scope: 'session' }, and register this plugin's entry there.

Build and publish independently (community plugin)

The package is a buildable, independently publishable DSH client plugin. It does not need the deepseek-harness monorepo to compile: package.json, tsconfig.json, and tsdown.config.ts are all standalone, and the @deepseek-ai/* imports are import type only, so they resolve from node_modules at their published versions.

Build

pnpm install
pnpm bundle        # tsc (emits lib/types/**/*.d.ts) + tsdown (emits lib/*.js)
pnpm watch         # tsdown --watch

Output:

  • lib/index.js — host half (empty apply; the browser half does all the work)
  • lib/invariant.js — invariant companion
  • lib/client.js — the browser module-table bundle (window.__ModuleLoader__.load({ id, factory }))
  • lib/types/**/*.d.ts — TypeScript declarations

Publish

pnpm bundle first (or rely on prepack, which runs it automatically), then:

npm publish            # or pnpm publish

The published surface is the files list: lib/*.js (+ maps) and lib/types/**/*.d.ts, plus cordis.patch.yml.

Install into DSH (community plugin)

This package declares the dsh.bundle manifest, so it installs via the same channel as any community plugin (installing it from npm):

npm install dsh-client-ui-selection-add
dsh plugin --profile web add dsh-client-ui-selection-add

or, for a local build:

  1. Symlink/junction this directory into $DSH_HOME/profiles/node_modules/dsh-client-ui-selection-add.
  2. Append the host row to $DSH_HOME/profiles/web/cordis.patch.yml:
    - insert:
        - id: ui-selection-add
          name: dsh-client-ui-selection-add
    
    (or just dsh plugin add writes it for you via dsh.bundle.patch → cordis.patch.yml).

The client half registers into the framework-owned conversation.input.dock slot and pulls the locale service. Both are provided by the stock dsh web build (@deepseek-ai/dsh-client-ui-slots, @deepseek-ai/dsh-client-locale, @deepseek-ai/dsh-client-ui-conversation), so a stock dsh web build resolves the runtime. Because these framework packages are not all baseline module-table rows (they're separate dsh.client graph rows), a bare community install only works against a DSH Web build that already activates them — which is the case for upstream dsh web.

Cross-reference: deepseek-harness monorepo

This repository is the standalone home of the package. The same sources are also wired into the deepseek-harness monorepo as @deepseek-ai/dsh-client-ui-selection-add at packages/client/ui-selection-add; there the tsdown preset and the three registration surfaces (tsconfig.client.json reference, packages/bundle/web-app/cordis.patch.yml dsh.client roster row, packages/bundle/web-app/package.json dependency) come from the monorepo itself. This checkout builds and publishes from the self-contained configs above instead.

相关插件

继续浏览 ui-customization 分类下经过校验的插件。

Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Experimental Agent Team Web Profile@deepseek-ai/dsh-experimental-agent-team-web-profile用于 Agent Teams Remote 和 UI 插件的实验性 Web 配置层Remote Web Ui@linxin666/dsh-remote-web-ui通过扫码配对访问 dsh Web GUI,共享一个官方界面:设置按钮旁的二维码可将手机和 PC 配对到同一个 Web GUI(手机采用竖屏触控适配层,PC 使用完整桌面界面),通过一次性令牌和 rClient Ui Git Graph@linxin666/dsh-client-ui-git-graph外部 dsh Web GUI 插件:空会话 Git 分支选择器和 Git 图,包含实际的主机端 Git 操作与防护,作为 dsh 配置文件包