packages/dsh-task-board
zhu1090093659/dsh-web侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
对话区左侧 Codex 风格短横线锚点,悬停预览,点击跳转到对应轮次。
Codex 风格的左侧会话锚点轨(默认),以及(旧版 DSH 上的)思考过程折叠,用于 DeepSeek Harness Web GUI。DeepSeek 网页聊天那种右侧轨可以在设置里打开,不是默认。
会话阅读插件,核心能力是锚点导航;思考过程折叠仅在 DSH 尚未自带该能力时启用(见下文「DSH 版本与能力检测」)。
[data-turn-process] 折叠条时,插件不再挂载,避免双重折叠。纯浏览器端插件,以树外(out-of-tree)bundle 的形式安装,不修改 DSH 源码。host 半部分只注册设置项,全部界面行为在浏览器半部分(./client)实现。
默认 Codex 左侧轨:


设置面板切换:
GitHub 仓库 owner 和 npm 包 scope 不是同一个字符串,安装时不要混用:
| 用途 | 名称 |
|---|---|
| GitHub 仓库 | biggerboy/dsh-conversation-anchors |
| npm 包名 | @biggerboy123/dsh-conversation-anchors |
dsh plugin add 默认走 npm registry,参数必须写 npm 包名 @biggerboy123/dsh-conversation-anchors。不要写成 GitHub 风格的 biggerboy/dsh-conversation-anchors 或 biggerboy123/dsh-conversation-anchors,registry 上没有这两个名字,会装失败。
导航
loadThrough 再跳转,落地后短横线闪光↑/↓ 或 j/k 跳到上一/下一轮,Home/End 到两端(输入框内不抢键)turnOutline 投影时,Codex / DeepSeek 轨与官方一样列出全部轮次(含尚未载入的),点未加载刻度按需分页;此时不再开会话自动 loadOlder drainturnOutline 时,打开会话后循环 session.loadOlder()(最多 80 页),尽量一次出齐锚点;详见「历史拉齐」阅读(条件启用)
其它
document.documentElement.lang 切换文案需要 Node ^22.19 || >=24 和 dsh CLI(npm i -g @deepseek-ai/dsh@next)。
这条命令从 npm registry(https://registry.npmjs.org)拉包,需要能访问 npm,不经过 GitHub。github.com 超时不影响这条路径。
dsh plugin --profile web add @biggerboy123/dsh-conversation-anchors
安装过程中 pnpm 常会打印类似:
✕ missing peer @deepseek-ai/dsh-client-runtime Wanted: ^0.1.0-rc.6
这是 良性告警,不是安装失败。该 peer 由 DSH Web 自己提供,profile 里 hoisted 的 node_modules 运行时能解析到。只要命令 退出码为 0,就可以继续:重启 dsh web,打开任意会话即可在对话区左侧看到短横线锚点。
走 GitHub / git 源,需要能访问 github.com(或你自己的镜像)。不要把仓库路径当成 npm 包名去 add。
# 默认分支
dsh plugin --profile web add github:biggerboy/dsh-conversation-anchors
# 指定分支或标签
dsh plugin --profile web add github:biggerboy/dsh-conversation-anchors#master
装完同样需要重启 dsh web。只刷新浏览器页面不会重新拉插件。
安装完客户端,启动,点击左侧【插件】 - 点击【添加插件】 - 选择【npm官方源】 - 输入【@biggerboy123/dsh-conversation-anchors】回车 - 点击【安装】 - 安装成功点击【启用】
j k 跳转,Home / End 到首尾[data-turn-process] 负责;否则插件会收成「思考过程 · N 步」,点击可展开/收起。正在生成的回合保持展开推荐 DSH @deepseek-ai/dsh@0.1.2 及以上(含 0.1.2-alpha.*)。插件通过能力检测而非解析 semver 字符串来决定是否挂载思考过程折叠:
| 条件 | 插件思考过程折叠 |
|---|---|
对话区已出现官方 [data-turn-process] / data-chat-flow-kind="turn-process" | 不挂载 |
Host 已注册 ui-chat 设置且 对话显示 = Compact(0.1.2+ 默认) | 不挂载 |
| 旧版 DSH,或 0.1.2+ 但 对话显示 = Normal | 仍挂载(兼容) |
控制台会打印:DSH official turn-process fold active; plugin fold skipped。
锚点轨三种风格(Codex / DeepSeek / DSH 官方)与上述检测独立:即使跳过插件折叠,Codex / DeepSeek 左侧或右侧轨仍正常工作;选「DSH 官方(右侧)」则完全交给内置 TurnNavigator。
锚点数据同样按能力回退,不解析版本号:有 uiConversation 就用 target('chat');否则用旧的 session.getSnapshot().chat。uiConversation 在 inject 里是可选依赖,旧版不会因缺服务而无法启动。有 session.projections.faceOf('turnOutline') 时合并全会话大纲;有 loadThrough 时支持未加载跳转。
DSH 0.1.2-alpha.3+(官方)
turnOutline 列出全会话轮次(含未加载);点未加载刻度调用 session.loadThrough(seq) 按需分页并跳转(连续窗口契约,深跳仍会加载沿途页)。hasMore === true 时仍可能暂不展示 turn-process 条(半截上下文策略),与导航大纲相互独立。DSH 0.1.2-alpha.1 / alpha.2
loadThrough 尚未提供。插件行为(能力回退)
| 环境 | Codex / DeepSeek 轨 | DSH 官方风格 | 自动 drain |
|---|---|---|---|
有 turnOutline + loadThrough(约 alpha.3+) | 合并大纲,未加载点按需跳转 | 交给官方轨 | 关闭 |
| 无大纲投影(更早 DSH) | 只画已加载轮次 | 交给官方轨(若有) | 开启(最多 80 页) |
| 风格 = 官方 | 不画插件轨 | 官方自管 | 关闭 |
loadOlder drain,否则长会话轨不完整。ctx.sessions 跟踪当前会话;锚点数据优先读 uiConversation.binding(id).target('chat')(DSH 0.1.2+),没有该服务时回退到 session.getSnapshot().chat(旧版)turnOutline 投影:与已加载 navigation / order 合并为全会话轨(未加载标记 data-unloaded);否则只遍历已加载窗口[data-chat-anchor-key];点击未加载锚点调用 session.loadThrough(seq),载入后落点open 后循环 loadOlder()(最多 80 页)作旧版兼容;有大纲或风格为「官方」时不 drain[data-turn-process] 后跳过;否则观察对话列 DOM 折叠过程叙述conversation-anchors.style(codex | deepseek | official,默认 codex),浏览器半边订阅后立刻换轨变更记录见 CHANGELOG.md。
platform: "web"),不支持 TUI / headlessturnOutline 时,超大会话会在 80 页(约 4000 条消息)处停止 drain,避免拖死标签页本地改代码时用 link: 指向检出目录(不经过 npm / GitHub):
dsh plugin --profile web add link:$(pwd)
改 lib/client.js 后重启 dsh web 即生效。
发版前跑 npm run check:package.json 的 name、cordis.patch.yml 的 name、client.js 的 __ModuleLoader__.load id 必须相同,PLUGIN_VERSION 必须等于包版本。npm publish 会自动跑同一检查。
MIT