
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
dsh-turn-nav
Advanced tools
Right-side turn navigation for DSH conversations: hover cards, click-to-jump, auto-load older turns. / DSH 右侧会话轮次导航栏:悬停卡片、点击跳转、自动加载更早轮次。
DSH(DeepSeek Harness)右侧会话轮次导航栏插件。
像 DeepSeek 网页端聊天界面右侧的目录一样,在 DSH 聊天窗口右侧悬浮一条窄导航,让你在多轮长会话中快速定位、跳转到任意一个历史轮次。
loadOlder(),把之前分页未加载的轮次也补全,不需要手动滚动到顶部点“加载更早”。shell.overlay 全局浮层,不替换、不遮挡 DSH 官方聊天界面。dsh.bundle.patch,可通过 dsh plugin add 安装。┌─────────────────────────────────────┐
│ │ ┌───┐
│ 用户问题 1 │ │ 1 │ ← 悬停弹出卡片:
│ AI 回答 1 │ └───┘ “Q 用户问题摘要...”
│ │ ┌───┐
│ 用户问题 2 │ │ 2 │
│ AI 回答 2 │ └───┘
│ │ ┌───┐
│ ... │ │ 3 │ ← 当前阅读位置高亮蓝色
│ │ └───┘
└─────────────────────────────────────┘
插件通过 DSH 的 shell.overlay slot 注册一个全局浮层组件。
组件扫描当前会话中已渲染的聊天节点:
data-chat-flow-kind="user" / "steering" 的行作为“轮次”;assistant-step / turn-tail。每个轮次生成一个导航圆点,并提取消息文本作为悬停卡片内容。
使用 MutationObserver 监听聊天 DOM 变化,自动重建导航。
使用 DSH 的 session.loadOlder() 自动向后翻页,把更早的历史轮次也加载进 DOM,从而被导航识别。
点击圆点时,计算目标节点在 [data-conversation-scroll] 滚动容器内的位置,执行平滑滚动。
dsh-turn-nav/
├── package.json # 插件元信息、dsh.bundle、client 注入声明
├── cordis.patch.yml # bundle patch:安装时自动挂载插件行
├── tsconfig.json # host 编译配置(只编译 src/index.ts)
├── tsdown.config.ts # client 打包配置(生成 lib/client.js)
├── scripts/
│ └── build.sh # host 构建脚本(依赖 DSH checkout)
├── src/
│ ├── index.ts # host 侧:API 路由 + 状态工具
│ └── client/
│ └── index.ts # client 侧:右侧导航浮层实现
├── lib/ # 构建产物
│ ├── index.js # host 产物
│ └── client.js # client 产物(ModuleLoader bundle)
├── MARKET.md # 上传插件市场详细教程
└── README.md
deepseek-harness-master),用于本地构建因为插件已经声明 dsh.bundle,用户可以直接用 DSH 插件命令安装:
# 从本地目录安装
dsh plugin --profile web add ./dsh-turn-nav
# 或从 npm 安装(发布后)
dsh plugin --profile web add dsh-turn-nav
# 或从 GitHub 安装
dsh plugin --profile web add github:flyHZJ/dsh-turn-nav
安装后重启 dsh web,右侧导航即生效。
在 DSH 的超级模组注入器环境中执行:
dev_inject_plugin {"dir": "C:/Users/J/Desktop/新建文件夹/dsh-turn-nav"}
看到类似输出即成功:
OK: dsh-turn-nav 已注入
- host ✓
- client ✓ (lib/client.js)
重启后 super-injector 的 autoRestore 会自动恢复。
# 1. 设置 DSH 源码目录
export DSH_CHECKOUT="D:/ai小工具开发/dsh/deepseek-harness-master"
# 2. 构建 host
bash scripts/build.sh
# 3. 构建 client
npm run build:client
如果 Windows 环境没有
bash,可以参考下方“PowerShell 手动构建”章节。
使用 super-injector 注入时,修改源码并重新构建后执行:
dev_reload_package {"packageName": "dsh-turn-nav"}
浏览器里刷新 DSH 页面即可看到最新效果。
使用 bundle 安装时,重新发布 npm 包后用户执行:
dsh plugin --profile web update dsh-turn-nav
dev_uninject_plugin {"match": "dsh-turn-nav"}
dsh plugin --profile web remove dsh-turn-nav
插件已经按 DSH 插件市场要求改造:
dsh-turn-navdsh.bundle.patchcordis.patch.ymllib/详细上传步骤见:
MARKET.md
主要包括:
package.json 中 repository / homepage 已指向 flyHZJ/dsh-turn-nav;npm run build && npm run build:client;npm publish 发布到 npm;plugins.json 中添加插件条目;如果 Windows 上没有 bash,可以手动执行构建步骤:
$root = "C:\Users\J\Desktop\新建文件夹\dsh-turn-nav"
$checkout = "D:\ai小工具开发\dsh\deepseek-harness-master"
# 1. 链接构建依赖
New-Item -ItemType Directory -Force -Path "$root\node_modules\@deepseek-ai" | Out-Null
$links = @{
"node_modules\cordis" = "$checkout\vendor\cordis"
"node_modules\cosmokit" = "$checkout\vendor\cosmokit"
"node_modules\schemastery" = "$checkout\vendor\schemastery"
"node_modules\@deepseek-ai\dsh-tools" = "$checkout\packages\core\tools"
"node_modules\@deepseek-ai\dsh-llm" = "$checkout\packages\llm\llm"
"node_modules\@deepseek-ai\dsh-system-prompt" = "$checkout\packages\core\system-prompt"
"node_modules\@types\node" = "$checkout\node_modules\@types\node"
}
foreach ($name in $links.Keys) {
$path = Join-Path $root $name
if (Test-Path $path) { Remove-Item -Recurse -Force $path }
New-Item -ItemType Directory -Force -Path (Split-Path $path -Parent) | Out-Null
New-Item -ItemType Junction -Path $path -Target $links[$name] | Out-Null
}
# 2. 编译 host
& "$checkout\node_modules\.bin\tsc.cmd" -p "$root\tsconfig.json"
# 3. 编译 client
& "$checkout\node_modules\.bin\tsdown.cmd" --config "$root\tsdown.config.ts" --cwd "$root"
declares no dsh.bundle如果你使用的是旧版本(@dsh-external/dsh-turn-nav),请升级到当前版本(dsh-turn-nav)。
当前版本已经正确声明:
"dsh": {
"bundle": {
"patch": "./cordis.patch.yml"
}
}
lib/client.js插件已设置:
min-width: 240px;
max-width: 400px;
如果仍觉得窄,可以修改 src/client/index.ts 里的 STYLE_TEXT 中 .dsh-turn-nav-card 的 min-width / max-width,然后重新构建、热重载。
插件会自动调用 loadOlder() 加载更早历史,最多 200 页。
如果仍然不全:
openState === 'open');MAX_OLDER_PAGES 后重新构建。| 配置项 | 位置 | 说明 |
|---|---|---|
| 卡片最小宽度 | STYLE_TEXT → .dsh-turn-nav-card → min-width | 默认 240px |
| 卡片最大宽度 | STYLE_TEXT → .dsh-turn-nav-card → max-width | 默认 400px |
| 导航右侧间距 | STYLE_TEXT → .dsh-turn-nav → right | 默认 10px |
| 导航垂直位置 | STYLE_TEXT → .dsh-turn-nav → top | 默认 50% |
| 自动加载历史页数上限 | src/client/index.ts → MAX_OLDER_PAGES | 默认 200 |
| 摘要长度 | src/client/index.ts → summarizeText() → max | 默认 60 字符 |
C:\Users\J\Desktop\新建文件夹\dsh-turn-navMARKET.mdC:\Users\J\.dsh\super-injector\registry.jsonC:\Users\J\.dsh\profiles\web\package.jsonFAQs

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.