liangmianya/dsh-synapse
liangmianya/dsh-synapseDeepSeek Harness 的可视化非线性对话工作区:把会话、追问与分支变成可浏览、可拖拽的对话地图。
跨所有工作目录的扁平会话列表:显示最后一句提问、按时间分组、全文搜索,并让随手记下的想法在重开会话时提醒。是 huangxp12/dsh-recent-sessions 的重写分支,界面按原生样式重做;两者注册同一个 recent-sessions 面板 id,不要与原版同装。
把你在所有工作目录里用过的会话,拉平成一块跨目录的列表——外加一个"先记下来,回头它会自己回来找你"的地方。
这是 DSH(DeepSeek Harness) 的客户端插件。本仓库是 huangxp12/dsh-recent-sessions 的 fork(whybebabo/dsh-recent-sessions):界面按 DSH 原生样式重做,并移除了右下角悬浮胶囊和「在独立窗口打开」。两者注册同一个 recent-sessions 面板 id(main slot key 与 sidebar.panellist 的 id 都是它),不要与原版同时安装。English: README.en.md
DSH 的侧栏按工作目录分组会话:每个目录只显示最近几条、只列你注册过的目录。可当你同时在十几个文件夹里干活时,一阵子没碰的项目就是不在屏幕上;而一个"住在你没想到的那个目录里"的会话,等于丢了。
还有第二个更安静的问题:二十分钟后你才冒出来的那个想法,没有地方可去——要么记住,要么忘掉。
这个插件加了一块不跟会话走的全局面板:一张跨所有工作目录的扁平会话列表;以及一个不用唤醒任何东西就能接住"迟到的想法"的地方。
turnOutline 会话投影);鼠标悬停还能看到最后一条助手回复的预览。从 npm 安装:
dsh plugin --profile <你的 profile> add @whybebabo/dsh-recent-sessions本地开发时也可以直接指向仓库目录:
dsh plugin --profile <你的 profile> add /path/to/dsh_recent_locate全部走有文档的扩展点,没有 DOM hack、没有猴子补丁:
东西 · 座位 / 接口 全局面板 · main keyed slot,key = recent-sessions 侧栏入口 · sidebar.panellist(id 必须等于面板 key) 待问小条 · conversation.input.dock(session 作用域) 填入草稿 · InputActions.captureInsertion() + insertText(text, span) 会话列表 · root hooks useSessions / useSessionStatus / useWorkspaces 跑完未看 · ctx.uiSession.sessionStatus 订阅(running 的 true→false + uiSession.current 判定你是不是正在看它) 提问预览 · ctx.sessions.refreshProjections(id) → turnOutline 投影 内容检索 · ctx.sessions.search(query, signal)(命中结果套用当前视图过滤) 显示目录 · ctx.remote.session.canOpenWorkspacePath() / openWorkspacePath({ path, action: "reveal" })
apply):不注册工具、不注册路由、不追加任何会话事件——对会话数据零写入。localStorage(键 dsh-recent-sessions:store:v1)。lib/client.js 是手写的、平台自己的模块格式(window.__ModuleLoader__.load({ id, factory }))。发布包里只有两个小 JS 文件,安装时不执行任何构建。>= 0.2.0-rc.2(写在 engines.dsh 里)。@deepseek-ai/dsh-* peer 依赖**:peer 范围不匹配会直接阻止插件激活,所以这里只保留"建议"而非硬门槛。^22.19.0 || >=24.0.0。useSessions / useSessionStatus / useWorkspaces 三个 root hooks;缺任意一个时会显示一条明确的错误提示,而不是半残渲染。客户端半由平台模块加载器发现并加载:
window.__ModuleLoader__.load({
id: "@whybebabo/dsh-recent-sessions",
factory: (require) => {
const React = require("react"); // ← 外壳的 PLATFORM_MODULES 基座
// ...
return module.exports; // ← 需要 apply / inject
},
});id 必须等于 package.json 的 name:loader 按包名认领 client bundle,写成短名会报 "loaded without registering",整个 Web 启动失败。
改 `lib/client.js` 后,运行中的浏览器约 1 秒内自动热替换(客户端 HMR 轮询 bundle revision);改 `lib/index.js` 或改包版本需要重启应用。
运行单元测试(Node 内置 test runner,无额外依赖):npm test
## 许可
MIT