dsh-chat-history-locator
消息通讯 活跃维护

dsh-chat-history-locator

linanatoly/dsh-chat-history-locator

Cordis生态插件,在聊天界面左侧打造持久化垂直标记轨道,支持点击、悬停、滚轮快捷操作,无需翻找聊天记录即可快速定位自己发送的历史消息,交互轻量无负担。

0
Stars 标星
0
Forks 分支
0
Watchers 关注
0
Open Issues
JavaScript
主要语言
MIT
开源协议
18 KB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:linanatoly/dsh-chat-history-locator
git clone https://github.com/linanatoly/dsh-chat-history-locator.git
git clone git@github.com:linanatoly/dsh-chat-history-locator.git
README.md main

Chat History Locator

一个为 DeepSeek Harness (DSH) Web 界面设计的插件:在聊天消息区左缘常驻一条竖向历史定位条,帮你快速回到聊天历史中的任意一条你发过的消息。

A plugin for the DeepSeek Harness (DSH) web UI: a persistent vertical marker rail on the left edge of the chat area, letting you jump back to any message you sent.

DSH

功能特性 / Features

  • 竖向定位条:常驻在消息区左缘(不遮挡消息,利用消息列自带的内边距),每个你发过的消息(user / steering 类型)对应一个圆点。
  • 最多 10 个可见标记:标记超过 10 个时以滑动窗口展示;在定位条上滚动滚轮即可浏览其余标记(每 60px 滚动距离换一格,触控板平滑累积)。
  • 悬浮预览:鼠标悬浮圆点 → 弹出气泡显示该消息的内容(截断 140 字)和发送时间,同时在聊天里用虚线描出对应消息;悬浮的圆点变为固定大小的蓝色空心圆scale(1.5),任意位置大小一致)。
  • 点击跳转:点击圆点 → 聊天滚到那条消息并闪光高亮,定位窗口自动把该标记移到中间。
  • 中间大、两端小:可见圆点按余弦曲线缩放(中心 1.0 → 两端 0.35),滑动换格时尺寸同步平滑过渡。
  • 端点提示:全部标记都在显示(无法滑动)时上下两端同时亮起蓝色端点条;窗口模式下到达顶部/底部时,对应端点(圆弧顶点处)亮蓝条。
  • 回到最新:滚离底部时条顶出现「最新 ↓」,点击回到最新消息并显示末尾标记窗口。
  • 健壮性:测量全部同步执行,不依赖 requestAnimationFrame(空闲/后台页面会冻结 rAF);通过 ResizeObserver / MutationObserver / 原生 wheel(非 passive)跟踪变化;切换会话、加载更早、输入框变高都会自动重定位。

安装 / Install

有两种安装方式:

方式一:持久安装(推荐,重启/重装桌面端后仍然生效)

把插件作为一个 dsh.client 静态插件装进 DSH 的 web profile:

1. 把本仓库的 dsh-package/ 目录复制为:
   <DSH_HOME>/profiles/web/node_modules/dsh-chat-history-locator/
   (Windows 默认 DSH_HOME = %USERPROFILE%\.dsh)

2. 在 <DSH_HOME>/profiles/web/cordis.patch.yml 中追加:
   - insert:
       - id: chat-history-locator
         name: 'dsh-chat-history-locator'

3. 重启 DeepSeek Harness 桌面端。定位条即对所有会话生效。

因为包和配置都位于 $DSH_HOME(用户数据目录),重新安装桌面端不会丢失插件

方式二:动态插件(快速试用,进程重启后失效)

在 DSH 会话内通过 cordis_define / cordis_run 工具加载(闭包符号 React / styles / host 仅在动态插件环境中存在):

1. 在 DSH 会话中让 Agent 执行:
   cordis_define:
     plugin: { kind: "new", idPrefix: "chloc" }   (或任意 3–6 位小写字母前缀)
     name:   "Chat History Locator"
     purpose: "聊天历史定位条"
     code.client = plugin/client.js 的全部内容
2. cordis_run 激活返回的 pluginId / packageId,并在运行卡片上批准。

注意:动态插件只存在于当前进程,重启或重装后需要重新加载。

工作原理 / How it works

关注点 方案
数据来源 Session 标准 kit 的 useSessionsnapshot.nodes(legacy 兼容层)+ chat.nodes(把消息 seq 映射到 DOM 行的 data-chat-anchor-key
滚动容器 产品自带的 [data-conversation-scroll],跳转公式与官方 chatScroll 记忆逻辑同源,不与自动跟随底部冲突
测量时机 useLayoutEffect 同步测量 + ResizeObserver(滚动区/输入区/消息流)+ MutationObserver(流元素挂载/卸载)+ scroll/resize 监听
滚轮浏览 原生 wheel 监听(passive: false + preventDefault),增量累积 60px/格
样式 插件自持 <style> 标签(ctx.effect 生命周期管理),CSS 变量驱动缩放(--dsh-loc-scale

文件 / Files

  • dsh-package/静态插件包package.json + lib/index.js 空宿主半身 + lib/client.js 浏览器半身),持久安装用
  • plugin/client.js — 动态插件源码(code.client 函数体),快速试用用
  • CHANGELOG.md — 从 v1 到定稿的演进记录
  • LICENSE — MIT

许可 / License

MIT © 2025


Built and polished through 11 iterations inside a DeepSeek Harness session — from a plain marker strip to a windowed, wheel-browsable, animated locator rail, then packaged as a persistent static plugin.