dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
DSH web GUI plugin: auto fold/expand the chat window — bottom checkpoints hide old pages, top-scroll expands earlier messages with the viewport anchored.
DSH Web GUI 插件:聊天窗口自动折叠/展开(对系统自带的分页窗口的增强)。
| 项 | 值 |
|---|---|
| 插件版本 | 0.1.8 |
| 适用 DSH | 0.1.2-rc.1(已在当前版本实测核对);0.1.x 系列均可 |
| 运行平台 | Web(dsh web / web profile) |
| 依赖槽 | conversation.input.dock(来自 @deepseek-ai/dsh-client-ui-conversation) |
已在 DSH 0.1.2-rc.1 上逐项核对:会话快照(s.chat.order / s.hasMore)、插槽标准 props(sessionId / useSession)、DOM 锚点([data-conversation-scroll]、[data-chat-flow]、[data-chat-anchor-key]、[data-composer-seat])、翻页接口(loadOlder())与分页容器类名(*_older)均与实现一致,可正常挂载运行。
若 DSH 升级后插件不生效,请先按上表核对槽与 DOM 契约是否变化,再提 issue。
foldCheckEvery 个事件一个判定点,前两次跳过、自 N=75 起判定),当你滚动到底部且窗口已超过 foldThreshold 行时,把手眼神之外的早期消息悄然折叠,窗口始终保持在约 50 条(窗口峰值 <80,低配机器友好)。hasMore 为假自动停止。DSH 插件通过 dsh plugin 命令安装进 profile(dsh web 对应 web profile)。
插件已发布到 npm,一条命令安装:
dsh plugin --profile web add dsh-chat-window-fold
装完重启 dsh web 即生效(dsh plugin add 自动完成依赖安装与 bundle 登记)。
仓库源码已随 npm 发布,此方式仅供开发调试(需要 Node.js 与 pnpm):
git clone https://github.com/dove-a/dsh-chat-window-fold.git
cd dsh-chat-window-fold
pnpm install # 插件目录安装依赖(含 schemastery,缺失会导致 DSH 启动失败)
dsh plugin --profile web add link:$(pwd) # 以 link 依赖接入 web profile
# 重启 dsh web 生效;改代码后重启即生效(link 指向源码目录)
重启 dsh web 后,在长历史会话(事件数 >75)里滚到底部即可看到早期消息被折叠;滚到顶部可逐批追回。也可用 dsh --profile web --dump-config 确认组合树出现 chat-window-fold 行。
卸载:dsh plugin --profile web remove dsh-chat-window-fold,然后重启 dsh web。
阈值与判定周期经行 config 配置(无 UI 开关):
| 键 | 默认 | 说明 |
|---|---|---|
foldThreshold | 50 | 折叠后保留的最近行数 |
foldCheckEvery | 25 | 判定周期(会话累计事件数;前两次 N=25/50 跳过,自 N=75 起判定) |
maxExpandPages | 0 | 可选内存上限:插件自身自动翻页最多加载的页数。0 = 不限制(默认,保持原有行为,一直翻到 hasMore 为假)。设为正数后,到达上限时停在顶部只恢复已折叠内容、不再拉新页。仅限制本插件自身的自动翻页,系统"加载更早"入口不受影响 |
配置示例(web profile 的 cordis.patch.yml):
- id: chat-window-fold
name: 'dsh-chat-window-fold'
config:
foldThreshold: 50
foldCheckEvery: 25
maxExpandPages: 0 # 设为 0 表示不限制;例如 20 表示最多自动翻 20 页
display:none 隐藏窗口外行;展开时恢复显示并从宿主拉取)。宿主与 runtime 的窗口数据按只读协议保持完好;插件不写会话快照、不调用宿主 API、不卸载 DOM 行(卸载会被 React 的键式列表重建,破坏折叠与系统锚定)——隐藏行只是退出布局/绘制/滚动高度计算,仍驻留浏览器内存。display:none 不参与布局)。ui-conversation 的槽协议(conversation.input.dock 标准 props:sessionId/useSession)与 DOM 挂点([data-conversation-scroll]、[data-chat-flow]、[data-chat-anchor-key]、[data-composer-seat]),请保持 DSH 为较新版本(0.1.0-rc.* 系列)。Apache-2.0,见 LICENSE。