dsh-web
zhu1090093659
DeepSeek Harness (DSH) Web 插件聚合生态 · 万物皆插件,通过创意工坊分发||DeepSeek Harness (DSH) Web Plugin Aggregation Ecosystem · Everything is a plugin, distributed via the Creative Workshop
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:gjj-star/dsh-conversation-navigator
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
English | 中文
DeepSeek Harness(DSH)Web 端会话导航面板:在对话页右侧悬浮展示按轮折叠的对话大纲,点击任意节点平滑跳转,滚动对话时实时高亮当前阅读位置,步次徽标配色与内置"轨迹"视图统一。
纯浏览器插件(无宿主行为)、纯 JavaScript、零构建、零 npm 依赖(按钮/Tooltip 复用 DSH 内核 seed 的官方 primitives)。
| 深色模式 | 浅色模式 |
|---|---|
![]() |
![]() |
深色 / 浅色模式下的会话导航面板。三种形态:显示轮次、隐藏轮次、极简·左(极简·右自 0.2.6 暂缓,代码保留;极简收起仅露行内指示条,悬停展开定位面板)。更多截图见 assets/screenshots。
▸ N,展开时旋转为 ▾)平滑展开/折叠该轮的步次明细(助手回复、工具调用、命令、压缩点等)--dsw 主题 token,自动适配明暗主题)Button/Tooltip 组件与官方图标(搜索、关闭);其余操作图标(导航、加载更早、加载全部、回到最新、全部折叠、切换轮次等)取自 Lucide 描边图标集(ISC License,lucide.dev),currentColor 自动适配明暗主题本插件是官方规范的组合包(dsh.bundle manifest + dsh.client 声明),纯 JavaScript、无构建步骤,推荐用官方 CLI 安装:
# 方式一:npm(发布后,用户无需任何构建授权)
dsh plugin --profile web add dsh-conversation-navigator
# 方式二:GitHub(纯 JS 包无需 prepare/allowBuilds,直接可用)
dsh plugin --profile web add github:gjj-star/dsh-conversation-navigator
# 方式三:本地 tarball
pnpm pack
dsh plugin --profile web add ./dsh-conversation-navigator-<version>.tgz
dsh plugin 在 profile 目录内转发给 pnpm,因此需要 pnpm 在 PATH 上;安装会自动把本包追加进 profile 的 dsh.profile.bundles,其自带的 cordis.patch.yml 层负责插入插件行。重启 dsh web 后生效。双形态默认值:官方 < 0.1.2-rc.1(无内置导航)时面板默认展开;官方 ≥ 0.1.2-rc.1(会话视图内置 TurnNavigator 轮次轨道)时面板默认关闭、默认形态为「极简·左」、搜索框默认收起,由标题栏「导航」按钮主动呼出,与官方右侧轨道零重叠。
手动方式(不依赖 pnpm):把仓库放进
<DSH_HOME>\profiles\<profile>\node_modules\dsh-conversation-navigator,并在 profile 的cordis.patch.yml顶层数组追加example.patch.yml的内容。
修改 lib/client.js 后重启 dsh web 即可;停靠状态、拖动位置、极简左对齐、面板宽高持久化于 localStorage(dsh-cnvnav:ui:v2;面板的展开/收起 open 不再持久化——新宿主每次启动都从默认关闭开始,搜索关键词等界面状态仍只存于页面会话内。
已发布到 npm(
dsh-conversation-navigator,徽章实时显示最新版本);升级已安装副本:市场更新或dsh plugin --profile web add dsh-conversation-navigator后重启。
conversation.session.header.utilities(标题栏「导航」开关)+ shell.overlay(浮动面板)useSession;新宿主(官方 ≥ 0.1.2-rc.1)走 uiConversation.binding(binding).target("chat") 快照——主通道为官方 timeline.turnOrder + locations 索引分组,ChatNodeStore.values() 兜底(依节点自带 location 或 anchorSeq 对照轮次边界归组),再用官方 turnOutline 投影(sessions.projectionStore(sid).get("turnOutline") / slot 标准 props 的 useProjection,与官方 rail 的 mergeTurnRailItems 同源)补上被组装器漏挂的用户消息与加载窗口外的轮次;随 loadOlder 自动重派生sessions 服务的 binding(sessionId).session.loadOlder() 分页向后加载,「加载全部」循环至 hasMore=false[data-chat-anchor-key](与产品内部 paging/scroll 定位同源),scrollIntoView 平滑滚动[data-conversation-scroll] 滚动容器的 scroll 事件(节流 120ms),计算视口顶部首个可见节点user 与 assistant-step 节点提取检索文本(dialogueText),大小写不敏感匹配,命中片段以 <mark> 高亮并按首个命中位置截取显示窗口fullDialogueText(用户节点全部文本块拼接),用 Tooltip 展示并限宽 340pxviewMode 三态循环(full/hidden/minimal-left,「极简·右」minimal 已注释保留),隐藏时仅把轮次头标题替换为轨迹徽标(titleNode 策略);极简左对齐以 scrollport.left + 12 钉在对话区左缘(定位 key 含 r.left,并用 ResizeObserver 监听对话区宽度变化,左侧栏展开/折叠时紧贴跟随);搜索框展开时按钮让位docked 状态;place() 对自由放置的面板只做视口夹边、不再自动停靠;位置、停靠状态与对齐选择存于 localStorage(dsh-cnvnav:ui:v1)style.width(240–560),高度只调 maxHeight 并保持 height:auto,使实际高度恒为 min(内容, 上限) 而不产生空白;拖动以起点为基准线性跟随(base + 位移),上限与 place() 的容器/视口钳制同源,松手零回弹;宽高随 panelWidth/panelHeight 持久化Button/Tooltip/搜索与关闭图标复用 @deepseek-ai/dsh-client-ui-primitives,其余图标为 Lucide 内联 SVG(ISC License);面板容器自建 <style> 注入,颜色使用 --dsw-* 主题 token;插件卸载时随 fiber 清理dsh.client.platform: web),依赖内核 seed 的 react、slots、sessions 服务与 @deepseek-ai/dsh-client-ui-primitives;dsh.client.inject 声明 @deepseek-ai/dsh-client-ui-conversation(dsh-client-runtime 已于官方 v0.1.2-rc.1 移除,不再注入)uiConversation 服务即新宿主(官方 ≥ 0.1.2-rc.1),不硬编码版本号。uiConversation 已加入客户端 exports.inject 声明,运行时保证其先就绪,宿主检测稳定不再随加载时序翻转。旧宿主保持全功能导航器(默认展开);新宿主与官方内置 TurnNavigator 共存:默认关闭 + 「极简·左」 + 搜索框默认收起,官方轨道负责跳转,本插件专注关键词搜索、批量「加载全部」与步次级徽标uiConversation 服务、conversation.session.header.utilities 空 props 契约、chat target 快照(timeline/locations/nodes/navigation/legacy)与 turnOutline 投影;旧宿主(无 uiConversation)经 useSession 路径兼容保留,未在 0.1.2-rc.1 之前的官方版本上逐一回归@deepseek-ai/dsh-client-ui-conversation 以 peerDependencies + semver 范围声明(awesome-dsh-plugin 约定,dshmarket 的依赖检查据此展示宿主兼容性)[data-chat-anchor-key] / [data-conversation-scroll] 是当前 DSH 聊天视图的 DOM 锚点约定(官方 v0.1.2-rc.1 中已验证仍在),DSH 升级后若锚点变化,只需调整 lib/client.js 中 findAnchor / computeActiveKey 两个函数timer 硬依赖:客户端的 timer 服务存在则用于节流,不存在时自动退化为未节流模式官方 v0.1.2-rc.1 对会话数据层做了一次爆破性更新(会话节点从 session.chat 快照迁移到 uiConversation 的 chat target 快照),因此插件按宿主版本分叉:
宿主 dsh-client-ui-conversation |
对应插件版本 | npm 标签 |
|---|---|---|
≥ 0.1.2-rc.1(有 uiConversation 服务) |
0.2.6 及以后(当前 0.2.11) | latest(默认) |
≤ 0.1.1-rc.2(无 uiConversation,旧 session.chat 快照) |
0.2.5 及以前 | legacy |
dsh plugin --profile web add dsh-conversation-navigator)。npm i dsh-conversation-navigator@legacy(= 0.2.5)。peerDependencies 声明 >=0.1.2-rc.1 <0.3.0(会话数据层与 UI primitives 两个包)。IconXxxOutline16 静默改为 IconXxxOutlineRegular / Medium(0.1.2~0.1.6 只有旧名)。0.2.11 起插件在一处集中解析、新名优先 → 旧名回退,缺失时打印可诊断的报错并退化为占位组件,不再让整个 slot 因 minified React error #130 被判崩溃;CI 对已发布 DSH 版本做宿主导出契约检查(scripts/check-host-exports.mjs)。lib/
index.js # 宿主侧空入口(纯浏览器插件)
client.js # 浏览器端完整实现(window.__ModuleLoader__ 模块格式)
assets/
screenshots/ # 截图(README 主图 + 市场截图墙)
scripts/
check-host-exports.mjs # CI: 宿主导出契约检查(图标改名这类静默移除)
cordis.patch.yml # 组合包补丁层(插入插件行)
example.patch.yml # 手动安装时的补丁示例
统计区间 2026-08-17 → 2026-10-06(GitHub Actions 每日自动刷新):
| npm 下载 | GitHub 独立访客 | GitHub 独立克隆者 | Stars | Forks |
|---|---|---|---|---|
| 7,567 | 631 | 528 | 23 | 1 |
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: ui。