npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@flyer103/dsh-side-chat

v0.7.0

Published

DSH side chat: fork the current session into an ephemeral side conversation that can really edit files, without polluting the main transcript.

Downloads

1,166

Readme

dsh-side-chat

给 DeepSeek Harness Web GUI 用的侧边会话:从会话头部展开右侧边栏,添加 侧边会话(English 界面为 Side chat)tab,聊完关掉,主会话完全不受影响——但侧边会话用的是同一个 agent、同一套工具,并且会真实修改同一工作区的文件。

English | 中文

CI Release npm License: MIT

快速开始

# npm(推荐)
dsh plugin --profile desktop add @flyer103/dsh-side-chat

# GitHub:默认分支,或固定到 tag
dsh plugin --profile desktop add github:flyer103/dsh-side-chat
dsh plugin --profile desktop add github:flyer103/dsh-side-chat#v0.7.0

# 本地路径(记录为 link: 依赖)
cd /path/to/dsh-side-chat
dsh plugin --profile desktop add "$(pwd)"

# 用 npm pack 打出的 tarball
dsh plugin --profile desktop add /absolute/path/flyer103-dsh-side-chat-0.7.0.tgz

--profile 用你实际运行的那个:Desktop 应用用 desktop,自己起的 web 进程用 web 或你的 profile 名。装进 desktop 时建议先退出 Desktop 应用(CLI 会等 profile 写锁),装完再打开;无论如何都要重启才生效。add 会自动把包追加进 profile 的 dsh.profile.bundles,不需要手工编辑 profile 的 cordis.patch.yml;重复执行是安全的。

也可以从本地仓库跑安装脚本:

node scripts/install.mjs --profile desktop            # 幂等;不会重启 DSH
node scripts/install.mjs --profile desktop --dry-run  # 只打印计划

然后重启 DSH,打开任意会话,从会话头部展开右侧边栏(「打开侧边栏」/「Open sidebar」),在边栏的引导页里点 「侧边会话」(English 界面显示 Side chat)卡片,侧边会话会作为该栏的一个原生 tab 打开。没有会话头部的专属侧边会话按钮,也没有浮层:入口就在右侧边栏的引导页(已开其它 tab 时,可用 tab 条上的「+」控件打开引导页);tab 打开后,状态栏上还有 「新建侧边会话」(English 界面显示 New side chat)按钮。发送第一条消息——该 tab 的侧边会话在首条消息发送时才创建,关闭该 tab 即销毁;收起侧边栏或切到别的 tab 只是暂停,不销毁;只打开 tab 不发送不产生任何会话或开销。每点一次引导页卡片、每按一次 tab 状态栏的「新建侧边会话」按钮,都会在同一分栏里再开一个侧边会话 tab,各自拥有独立的侧边会话,tab 标题按父会话编号(「侧边会话」「侧边会话 2」…;English 界面为 Side chat、Side chat 2…)。关闭其中一个侧边会话 tab 只销毁它自己,其它侧边会话和主会话都不受影响。

它做什么

  • 右侧边栏原生 tab:作为右侧边栏里的一个 tab 存在,没有会话头部的独立按钮、没有浮层。
  • 可同时开多个:同一个父会话可以并排开多个独立的侧边会话 tab,每个都是自己的临时侧边会话,tab 标题按父会话编号;可从引导页卡片或 tab 状态栏的「新建侧边会话」按钮再开一个。
  • 继承上下文:父会话已完成的轮次,加上主会话此刻正在做什么的实时快照;快照在该侧边会话创建时拍下。
  • 继承 agent:相同工作目录、preset 组合、工具、技能、模型路由、sandbox 模式与审批策略。
  • 真实改文件:write / edit / bash 的改动落在同一工作区,主会话能看到。
  • 用 @ 引用文件:在侧边会话输入框里输入 @ 会弹出当前工作区的路径菜单,选中后插入与主会话输入框完全相同的 @path 文本;引用只是文本,模型仍用自己的工具读取文件。选中目录会保留菜单继续下钻;已发送的用户气泡会把文件 / 目录引用渲染成 chip。
  • 隔离 transcript:侧边会话的对话不写主会话、不进会话列表、不进 subagent 目录。
  • 流式输出:assistant 文本、思考与工具调用在生成过程中逐 token 渲染(实时事件流);传输不支持流式时自动回退到轮询。
  • 显示自己的用量:composer 下方有一条细状态栏(位置对应 DSH 主输入框的底部 dock),显示这个侧边会话的总 token 数、缓存命中率,以及一个小的上下文占用圆环 + 百分比;悬停可看精确的未缓存输入 / 缓存读取 / 输出计数(提供方报告缓存写入时还会列出缓存写入)和近似的「~已用 / 窗口」值。侧边会话还没有用量样本时整行隐藏,新建侧边会话时重新计数。
  • 关闭即销毁:关闭某个 tab 时只 dispose 该 tab 的侧边会话,host 会尝试删除它的落盘产物;已关闭的侧边会话无法再打开,其它侧边会话和主会话都不受影响。收起侧边栏或切换 tab 只是暂停。

兼容性

  • 在 DSH 0.2.1-rc.2(Desktop profile,Web GUI)上验证:本版本在隔离的 DSH home 里用全新 web profile 起真实 dsh web 进程实测——插件启动、host 路由均有响应(含 SSE 路由的 JSON 回退)、client bundle 正常 serve;新增的 @file 路由由 host 路由单测覆盖,未在真实进程里复测。
  • 本包未声明 engines.dsh / DSH peer 依赖,因此安装时没有版本阻断;这与「已验证版本」是两件事——更新的 DSH 版本未经验证。
  • 仅 Web 平台(dsh.client.platform: web),没有 CLI/TUI 界面。
  • Node.js >= 22;插件本身是零依赖 ESM,不 import 任何 @deepseek-ai/*。
  • 界面文案跟随 DSH 语言设置(Settings → General → Language / 语言):内置中文与英文;其它语言回退到英文。技术细节——host 错误 message、路由、事件名与工具名——保持英文原文。

已知限制

  • 侧边会话 tab 内不呈现审批提示:侧边会话继承父会话的审批策略;父策略需要人工确认时,侧边会话会等待。要真实改文件,建议用 danger-full-access 这类不需要交互确认的策略。
  • tab 关闭后无法恢复:重新点引导页卡片或按「新建侧边会话」会开始一个新的侧边会话,agent 在下次发消息时才创建。
  • P1b 已设计未实现:模型选择器、GUI 重启后恢复侧边会话、tab 内审批呈现。
  • @ 补全依赖 host 的 file-reference provider,且当前只补全文件与目录:@会话 引用、/ 命令与技能、附件与拖拽都还没有进入侧边会话输入框。
  • 继承的上下文是创建时的快照,之后主会话的新消息不会推给已存在的侧边会话;每个侧边会话各有自己的快照。
  • 流式输出依赖可流式读取的 fetch 响应;如果页面传输会把响应整体缓冲(以「首帧未按时到达」判定),tab 会回退到 snapshot 轮询:运行中指示仍在,回复仍会在生成过程中按轮询粒度浮现。
  • 每个侧边会话的首条请求大小都约等于主会话的下一次请求(因为它带着继承历史),同时开 N 个就会把这份开销乘以 N。
  • 用量 dock 是近似值,且两类数字口径不同:token 总量与缓存命中率只统计这个侧边会话自己实际计费的请求——包括它首次请求重新发送的继承上下文——不包含父会话更早的请求;上下文占用出于同一原因取绝对值——继承的上下文确实在提示词里——但它不做 DSH 的 projected-token(surface delta)修正,因此可能比主会话的上下文条慢一步。dock 不显示轮次 / 步数 / tok/s,没有点开的详情弹窗,也不跟随 DSH「Performance & usage(性能与用量)」的详细 / 简洁偏好,内容固定。
  • 重新接上的侧边会话 tab 如果会话日志超过 snapshot 的 2000 条分页,dock 可能少算较早的用量;从第一条消息起就在看的 tab 不受影响,因为它逐条收到所有已提交事件。

文档

  • docs/USAGE.md — 完整语义(继承/隔离/修改/生命周期/安装/回滚/排障,英文)。
  • docs/DESIGN.md — 范围、阶段与对抗性推演。
  • docs/CONTRACT.md — host 路由、右侧边栏 tab 集成与渲染契约。

仓库结构

| 路径 | 作用 | |---|---| | lib/index.js | host 半部:路由、实时尝试累积与 SSE 事件流、fork seed、boundary 注入、按实例的 session registry、close/dispose | | lib/client.js | client 半部:右侧边栏 tab 类型 + 引导页入口,按 tab 实例的正文(流式消息区 + composer + 用量 dock)、编号 chip、新建按钮与 close handler | | cordis.patch.yml | bundle patch:插入 dsh-side-chat 行 | | scripts/install.mjs | 本地仓库的幂等安装/卸载脚本 | | dsh.plugin.json | 社区约定的清单元数据;DSH 不读取(官方展示元数据来自 package.json 与可选 locale/*.json) | | tests/ | node --test 单测 |

卸载

dsh plugin --profile desktop remove @flyer103/dsh-side-chat

然后重启 DSH。没有 transcript、schema 或工作区数据的迁移或删除;侧边会话本来就是临时的。

License

MIT