DeepSeek Harness Plugin Hub

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

探索

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

社区

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

相关链接

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

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

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
S

dsh-side-chat-plus

Side Chat Plus

侧边聊天 Plus (Side chat Plus) — DSH 网页插件:在对话中选择文本,并在按会话划分的侧边聊天中提问(隐藏的普通会话、独立的右侧面板、继承模型/effort/权限、查找开关)。

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

npx -y @deepseek-ai/dsh plugin --profile web add github:heartmove/dsh-side-chat#dd9dbb481cce16128a9e39966ae5e744e422160d
README兼容性版本
Bring-back demoQuestion dialog demo

兼容性与来源证明

Side Chat Plus 以 dsh-side-chat-plus 发布,当前版本为 0.5.2。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/11/3

版本

0.5.2stable
2026/11/3
0.5.0stable
2026/10/17
0.4.3stable
2026/9/24
查看其余 6 个版本收起版本
0.4.2stable
2026/9/24
0.4.1-alpha.1prerelease
2026/9/22
0.4.0-alpha.1prerelease
2026/9/15
0.3.4stable
2026/9/10
0.3.3stable
2026/9/3
0.3.2stable
2026/9/3

相关插件

正在加载相关插件…

最新版
0.5.2
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 14
周下载
0
最近提交
2026/11/3
查看源码 ↗
README Badge

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

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

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

认领这个 Plugin →
报告问题

相关插件

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

Claude Designdsh-claude-designDeepSeek Harness 插件:来自 baoyu-design 的 claude-design 技能。智能体将画板画布写入文件,并在本地画布编辑器中打开它们。Claude Slidesdsh-claude-slidesDeepSeek Harness 插件:来自 baoyu-design 的 claude-slides 技能。代理会将可编辑的幻灯片演示文稿写入文件,并在本地幻灯片编辑器中打开。Claude Design Systemdsh-claude-design-systemDeepSeek Harness 插件:来自 baoyu-design 的 claude-design-system skill。代理将设计系统(令牌、字体、组件、资源)写入文件,并在本地 design-system 页面中打开。Claude Dashboarddsh-claude-dashboardDeepSeek Harness 插件:来自 baoyu-design 的 claude-dashboard 技能。该代理将基于数据的仪表板构建为文件,并在本地仪表板编辑器中打开。

README

dsh-side-chat — 侧边聊天 (Side chat)

Targets DSH 0.2.1-rc.1 and newer (verified against 0.2.2-alpha.3 and the floor 0.2.1-rc.1). See compatibility changes.

An enhanced version of a Codex-style side chat for DSH: a dedicated, agentic chat in a right-side panel, scoped to the conversation it was started from and aware of its workspace. Select part of a conversation and ask about it in the side chat; the side chat inherits the main conversation's toolset, model, and permission preset, and its AI replies can be brought back to the main conversation (directly or as a summary, into the composer draft or as a collapsed context row).

On top of the Codex-style base, it adds one extra capability: when the main agent asks you a question dialog, you can side-chat about the question and its options without interrupting the flow — let the AI help you think it through first, then bring the answer back and answer the dialog.

中文文档见 README.zh.md.

What it does

  • Select text → ask in a side chat. Select any part of a message and a floating button "Ask in side chat" appears. The selected text is carried into the side chat automatically.
  • Per-conversation isolation. Each side chat is a hidden ordinary DSH session (meta.parentSession links it to the conversation that started it, and the session is archived so it stays out of the main session list). DSH 0.1.7 refuses a model step to an archived session, so the archive is lifted for exactly as long as a side-chat turn is running and restored when it settles. A host-created session is never accounted to a Workspace, so even in that window it can only surface under the sidebar's Ungrouped bucket, never under the workspace it was started from. Every conversation gets its own side chat.
  • Inherits main-conversation context. The side chat is aware of the conversation it was started from and its working directory, and inherits the main conversation's toolset, model, thinking effort, and permission preset by default — so it can act on the same workspace as the main conversation.
  • Model / effort / permission are adjustable. A two-level model menu (provider → model → effort) and a permission menu are copied from the main conversation, so each side chat can be tuned independently.
  • "Look up workspace / parent when needed" switch (default off). When on, the side chat may read files from the workspace and the parent conversation when it needs more information.
  • Normal conversation capabilities. Markdown replies, thinking/reasoning display, image attachments (paste / drag-and-drop), send/stop controls, and thinking-duration display — all reuse the same UI primitives as the main conversation.
  • Bring AI replies back to the main conversation. Every assistant reply in the side chat can be brought into the current main conversation: select part of it with the mouse, or insert the whole reply in one click. Either way you can choose "Insert directly" (verbatim) or "Summarize & insert" (the side chat's inherited model summarizes it first). Where it lands is configurable: into the composer draft, or as a collapsed context row (injected as context — not into the composer, never sent).
  • Ask about the current question dialog — without interrupting the flow. When the main conversation shows a question dialog (the agent asking you something), the side panel automatically lists the question and each option (no manual text selection needed). Each question has "Bring all" and each option has "Bring", both offering to continue an existing side chat or start a new one. The list can be collapsed / expanded, and items can be deleted individually or all at once (deleted items stay gone).
  • Deletable side chats. Each entry in the side-chat list can be deleted individually, or all of them at once via "Delete all".
  • Resolution-aware, resizable, collapsible panel. Drag to resize (280–720 px); the width is automatically capped to keep the panel within ~40% of the window and to leave the main chat usable, re-adapts when the window is resized (different monitor, zoom), and is remembered across reloads. Collapse and expand; no close button.
  • Language-aware. The plugin follows DSH's language setting (Chinese / English).

Codex-style side chat, enhanced

This plugin is an enhanced version of a Codex-style side chat: a second, agentic chat that works beside the main conversation — plus an extra capability on top of the Codex-style base: side-chatting about the current question dialog without interrupting the flow.

The Codex-style base. The side chat is a real DSH agent session, not a scratchpad:

  • It inherits the main conversation's setup — toolset, permission preset, model / thinking effort, and working directory — so it can read and work with the same workspace as the main conversation, subject to the permission preset you choose for it.
  • The "Look up workspace / parent when needed" switch (default off) lets it read workspace files and the parent conversation's records when the task needs more context.
  • Model / thinking effort / permission preset are adjustable per chat, so a hard task can be handed to a stronger model without touching the main conversation.
  • The final reply (or a summary of it) can be brought back into the main conversation — into the composer draft or as a collapsed context row — the Codex-style "hand the result over" without copy-pasting.

The enhancement: question-dialog side chat, no flow interruption. When the main agent asks you something, the flow normally stops until you answer. This plugin lets you keep moving: the side panel automatically lists the question and every option; bring the whole question or any single option into a side chat (new or existing), let the AI analyze it for you, then bring the answer back and answer the dialog. The main conversation simply waits — nothing is interrupted, and you never have to answer before you're ready.

Requirements

  • Node.js ≥ 20
  • pnpm
  • DSH 0.2.1-rc.1 or newer. The declared window is the open range >=0.2.1-rc.1: DSH validates peer ranges with includePrerelease, so that prerelease and every later version are inside it (a caret or an exact pin locks newer runtimes out — see AGENTS.md). The floor moved to 0.2.1-rc.1 with 0.5.0 because that release changed the /api trust fence this plugin mirrors (listener bind literals, protocol-normalized ports, and trustedHosts resolved from webStartup).
  • pnpm build ends with check-seed-exports, which compares the client bundle's frozen-module-table imports against a real DSH install. Set DSH_INSTALL (or pass --shell) when the install is not discoverable via dsh on PATH; without a target the check skips instead of failing.
  • It then runs check-dsh-compat (also available as pnpm check:dsh): every @deepseek-ai/dsh* peer must be a single open lower bound >=<floor>, all peers must share one floor, that floor must match dsh.plugin.json's engines.dsh, and it must not be newer than the DSH runtime under test.
  • pnpm verify:lines (scripts/verify-dsh-lines.mjs) runs the whole suite against both the pinned development line and the declared peer floor — swapping the manifest, aligning cordis/schemastery to each line's own manifest, then restoring everything. CI runs the floor line on every push.

Forward compatibility is the design rule behind that window. The peers carry no upper bound, so any later DSH (0.2.2-rc.1, 0.2.3, 0.3.0, …) installs without a manifest change; the host half then probes runtime capabilities (AgentModel → durable model selection, otherwise the 0.2.1 coupler) instead of comparing version numbers, and the client half is guarded by check-seed-exports at build time plus a render boundary at runtime. Forward compatibility is not a claim about unknown future behavior: install-time acceptance is guaranteed by the open range, and run-time behavior is re-verified against each new line with pnpm verify:lines.

Build

pnpm install
pnpm build

pnpm build clears lib/, runs tsc -p tsconfig.build.json for type declarations, then bundles the host (lib/index.js) and client (lib/client.js + lib/client-registry.js) with tsdown.

CI and publishing

GitHub Actions covers two jobs:

  • ci.yml runs on every push to main and on pull requests: it installs dependencies, typechecks, builds, runs the test script, and packs the tarball (uploaded as an artifact) for Node 20 and 22.
  • publish.yml fires when a v* tag is pushed: it builds and publishes the package to npm as dsh-side-chat-plus, authenticated with the NPM_TOKEN repository secret.

The package name is dsh-side-chat-plus (the plain dsh-side-chat name on npm belongs to a different maintainer, so the release is published under the -plus name).

Registry dependencies. Local and CI builds use exact DSH 0.2.2-alpha.3 development dependencies and the checked-in lockfile. No local harness checkout or CI-only overrides are required.

Deploy

DSH web loads external plugins from the active profile. This package is a bundle: its package.json declares dsh.bundle.patch → cordis.patch.yml, whose insert row mounts the plugin. That declaration is what lets dsh plugin add install the package and activate it in one step.

Trust boundary. /sidechat/api/* is fenced exactly like DSH's own /api: loopback, the listener's own bind address, or an authority declared through --trusted-host is accepted, and cross-site markers or a mismatched Origin are refused. The fence is not an identity check — DSH's /api additionally requires the browser session cookie, while this plugin's routes serve the already authenticated page without re-checking it. Keep the deployment on loopback, or behind a reverse proxy that authenticates, before exposing it.

Recommended: install from npm. The package is published to npm as dsh-side-chat-plus, so dsh plugin add needs no source checkout — the tarball ships the prebuilt lib/ and is activated in one go.

Install from npm

The built package is published to npm as dsh-side-chat-plus. Installed from the registry, the tarball ships the prebuilt lib/ (plus cordis.patch.yml and dsh.plugin.json), so no source build is needed:

npx -p @deepseek-ai/dsh dsh plugin --profile web add dsh-side-chat-plus

dsh plugin reconciles the bundle into the profile's dsh.profile.bundles layer list; the prebuilt lib/ means nothing extra runs at install time. Version falls out of the tagged release (see CI and publishing).

Restart dsh web, then hard-refresh the page (Ctrl/Cmd+Shift+R).

Install from GitHub

npx -p @deepseek-ai/dsh dsh plugin --profile web add github:heartmove/dsh-side-chat-plus

dsh plugin forwards to pnpm inside ~/.dsh/profiles/web/, then reconciles the bundle into the profile's dsh.profile.bundles layer list. A git install fetches sources, so pnpm runs the package's prepare script (tsdown) to build lib/ from src/ after checkout.

pnpm ≥ 10 refuses to run a git dependency's prepare script until it is allowlisted, so the first add fails with an "Ignored build scripts" hint. Copy the exact package key pnpm printed into the profile's pnpm-workspace.yaml (~/.dsh/profiles/web/pnpm-workspace.yaml):

allowBuilds:
  dsh-side-chat-plus: true

then re-run the add. That allowance means "run this package's code on my machine at install time" — only allow packages whose source you trust, and pin a commit (github:heartmove/dsh-side-chat-plus#<sha>) so a later push cannot silently change what runs.

Restart dsh web, then hard-refresh the page (Ctrl/Cmd+Shift+R).

Install from a local checkout

From the directory that contains this checkout:

npx -p @deepseek-ai/dsh dsh plugin --profile web add ./dsh-side-chat-plus

pnpm links the checkout and dsh activates the bundle the same way.

Manual link

To manage the profile by hand, link the package and list it as a bundle in ~/.dsh/profiles/web/package.json (the bundle's own cordis.patch.yml supplies the loader row, so no insert entry is needed):

{
  "dependencies": {
    "dsh-side-chat-plus": "link:D:\\path\\to\\dsh-side-chat-plus"
  },
  "dsh": {
    "profile": {
      "bundles": ["@deepseek-ai/dsh-base", "@deepseek-ai/dsh-web-app", "dsh-side-chat-plus"]
    }
  }
}

(On POSIX systems use link:/path/to/dsh-side-chat-plus.) Then run pnpm install in the profile directory and restart dsh web.

Usage

  1. Select part of any message in the main conversation.
  2. A floating "Ask in side chat" button appears — click it.
    • If a side chat already exists for this conversation, you'll also see "Continue active side chat".
  3. The right-side panel opens (or expands) with the selected text staged in the composer.
  4. Adjust model / effort and permission, and toggle "Look up workspace / parent when needed" as desired.
  5. Send. The reply streams back with markdown rendering and, where applicable, a "Think" row for the model's reasoning.
  6. Drag the panel's left edge to resize, or use the collapse/expand control.

Sending behavior

By default (sendImmediately on), selecting text sends it immediately and appends your configured default prompt. Turn sendImmediately off in settings to stage the selection as an attachment instead, so you can review and edit before sending.

Bring replies back to the main conversation

Assistant replies in the side chat can be brought into the current main conversation (never sent):

  1. Bring a selection. Select part of an assistant reply in the side chat, then choose "Insert directly" (verbatim) or "Summarize & insert" (the side chat's inherited model summarizes it first) from the floating menu.
  2. Bring the whole reply. Each assistant reply has "Insert directly" and "Summarize & insert" buttons under its text, for inserting the full reply (or its summary) in one click.
  3. Per the bring-back target setting, the content is either appended to the main composer draft (edit before sending) or injected as a collapsed context row (source-tagged, not into the composer; the model sees it next turn).

Bring-back demo

Ask about the current question dialog

When the main conversation shows a question dialog, the side panel automatically lists the question and its options:

  1. While the panel is closed, a floating entry appears beside the dialog's header — click it to open the panel.
  2. Each question has "Bring all" and each option has "Bring", both offering to continue an existing side chat or start a new one.
  3. The list can be collapsed / expanded, and items can be deleted individually or all at once (deleted items stay gone).

The main conversation keeps waiting on the dialog — nothing is interrupted; do the research in the side chat first, then bring the answer back and answer the dialog.

Question dialog demo

Delete side chats

Each entry in the side-chat list has a "×" delete button; "Delete all" at the top-right removes every side chat of the current conversation.

Settings

Open DSH Settings → 侧边聊天 (Side chat) to configure:

SettingDefaultDescription
lookupDefaultoffWhether the "look up workspace / parent" switch is on by default for new side chats.
sendImmediatelyonWhether selecting text sends it immediately, or stages it as an attachment.
defaultPrompt(empty)Extra prompt appended when the selection is sent immediately.
bringModedraftWhere brought-back content lands: draft into the composer, or context as a collapsed context row.
panelHomesidebar-rightWhere the panel lives: sidebar-right docks it into the new built-in right sidebar as a "Side chat" tab (same rail as document previews, default); floating is the classic drag-resizable right-edge panel. In floating mode the side chat yields automatically while the built-in sidebar is open (docked, fullscreen or floated), so the two never cover each other.

Preferences are stored in the DSH settings namespace dsh-side-chat.

Project layout

src/
  index.ts            host plugin (routes, session/agent lifecycle, transcript folding)
  wire.ts             request/response helpers
  trust-fence.ts      loopback / trusted-API request guard
  settings-shared.ts  preference vocabulary shared by host and client
  context-types.ts    Cordis Context type augmentation
  client/
    index.tsx         client plugin (panel, composer, settings section, floating buttons)
    api.ts            client↔host API types
    locales.ts        zh/en dictionaries
    client.module.css panel/composer/settings styles
    layout.css        #root margin-right driven by panel width
cordis.patch.yml      bundle patch layer (inserts the loader row; dsh.bundle.patch)
dsh.plugin.json       external plugin manifest
tsdown.config.ts      bundle config (client externals + CSS inlining)

License

MIT