
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-nav-pointer
Advanced tools
DSH Web client plugin: vertical message pointer rail on the left edge of the chat area, with clickable markers per user message for quick navigation and hover preview bubbles.
DSH (DeepSeek Harness) Web 客户端插件:在聊天界面左侧添加一条消息指针导轨,每条用户消息对应一个短横条标记,点击可快速跳转到对应消息位置,鼠标悬停显示消息预览气泡。
A DSH Web client plugin that adds a vertical message pointer rail to the left of the chat area. Each user message gets a clickable dash marker that scrolls to that message; hover shows a preview bubble.
Alt+↑ / Alt+↓ 在用户消息间上下跳转Alt+Shift+↑ / Alt+Shift+↓ 跳到第一条/最后一条消息
在市场里搜索 dsh-nav-pointer 一键安装。与其他插件一致,多数情况刷新页面即生效。
dsh plugin --profile web add dsh-nav-pointer
该命令会安装到 ~/.dsh/profiles/web,并因为本包声明了
dsh.bundle.patch,自动把 dsh-nav-pointer 追加进
dsh.profile.bundles。重启 dsh web 生效。
若 pnpm ≥11 报
minimumReleaseAge(安全等待期),是新发布的包触发的策略,可一次性放行:dsh plugin --profile web add dsh-nav-pointer --config.minimumReleaseAge=0
git clone https://github.com/kongdexu/dsh-nav-pointer
cd ~/.dsh/profiles/web
dsh plugin --profile web add link:/path/to/dsh-nav-pointer
用 --config.minimumReleaseAge=0 同理。
src/
core.ts # 纯逻辑:CSS/常量/几何压缩/高亮推导/预览裁剪/行收集(无 React,可单测)
config.ts # 共享配置类型与默认值(host schema 与 client scope 共用)
client.ts # Client 端入口,挂载 shell.overlay + settings.section 槽位
index.ts # Host 端入口,注册 schemastery 设置命名空间(installSettingsSection)
types/… # 声明文件,构建时拷入 lib/types
lib/ # esbuild 构建产物(client.js / index.js / types),发布与加载用
build.mjs # esbuild 构建(client→iife+模块加载包装,host→esm,设置包 external)
tsconfig.json # tsc 类型检查
vitest.config.ts # vitest(jsdom 行为测试)
test/
*.test.ts # vitest 行为测试
smoke.mjs # 构建产物加载契约(无浏览器)
cordis.patch.yml # Cordis profile patch,把插件插入 bundle 树
package.json # 包元信息,含 dsh.bundle / dsh.client / peerDependencies 字段
shell.overlay(frame-wide 浮层,list 槽位,不替换任何内置 UI)[data-conversation-scroll](DSH 对话区域公开约定的稳定属性)[data-chat-flow-kind="user"]requestAnimationFrame 循环每帧读取 getBoundingClientRect(),签名变化时重算位置MutationObserver 监听消息列表变化,scroll 事件(capture 阶段)更新气泡位置所有偏好都在 设置 → 消息指针 页面实时调整并持久化:
| 配置项 | 默认 | 说明 |
|---|---|---|
| 滚动时长 | 260ms | 点击 / 键盘跳转动画时长(固定时长,范围和 60–2000ms) |
| 显示指针导轨 | 开 | 关闭后不渲染消息指针导轨 |
| 悬停预览气泡 | 开 | 鼠标悬停标记时的消息预览 |
| 键盘跳转 | 开 | Alt+↑/↓ 在用户消息间跳转 |
滚轮滚动、手指触摸、拖拽导轨都会立即打断进行中的跳转动画。当用户消息很多、自然高度超出可用视口时,标记之间的间距会自动压缩到刚好铺满视口(这是固定行为,不可关闭)。
兼容旧用法:仍可通过
window.__DSH_NAV_POINTER_SCROLL_MS__覆盖滚动时长 (优先级高于设置面板,需在插件加载前设置),但推荐改用设置面板。
一键跑完整校验(类型检查 → 构建 → 行为测试 → 加载契约):
npm run check
npm run typecheck:tsc --noEmit 类型检查 src/npm run build:esbuild 产出 lib/(client → iife + window.__ModuleLoader__ 包装,host → esm)npm test:vitest + jsdom,覆盖导轨压缩几何、高亮推导、预览裁剪、行收集与样式注入npm run test:smoke:无浏览器加载构建产物 lib/client.js,用 mock 的
window.__ModuleLoader__ + React + document + settingsScope 断言插件导出
{ name, inject: ["slots", "settingsScope"], apply }、apply() 正确注册
shell.overlay 与 settings.section 槽位,且注入的 CSS 符合当前规格ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION:本包(或 profile 里其他新发布包)在 pnpm 24h 安全等待期内,用上文一次性放行参数重试一次即可。dsh.profile.bundles 里含 dsh-nav-pointer,且当前会话存在用户消息(无用户消息时不渲染);清空聊天后重新发送一条再看。position: fixed 且 width:240px,不受导轨 36px 窄列影响。更多实现细节见 docs/DEVELOPMENT.md,变更记录见 CHANGELOG.md。
MIT
FAQs

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.