给 DeepSeek Harness 侧边栏加一个会话内容检索——标题/内容一键切换,还能按用户/回复/工具筛选
38.5/100
综合分
7
GitHub 星标
4,774
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-search-indexnpm 源 · dsh-search-index 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-search-index @ 0.7.14
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 12:54:31
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 38 处,展示前 24 条)
- 写入本地文件lib/index.mjs:38
await mkdir(dirname(actual), { recursive: true }); - 读取本地文件lib/index.mjs:1081
const ids = JSON.parse(readFileSync(path, "utf8")).global?.archivedSessionIds; - 读取本地文件lib/index.mjs:1099
if (!existsSync(path)) continue; - 写入本地文件lib/index.mjs:1216
await mkdir(layout.dir, { recursive: true }); - 读取本地文件lib/index.mjs:1219
const activeExists = existsSync(activePath); - 读取本地文件lib/index.mjs:1220
if (!existsSync(buildingPath)) return actions; - 删除本地文件lib/index.mjs:1226
]) await rm(`${buildingPath}${suffix}`, { force: true }); - 写入本地文件lib/index.mjs:1235
await rename(join(layout.dir, newest), activePath); - 读取本地文件lib/index.mjs:1245
if (!existsSync(layout.dir)) return []; - 读取本地文件lib/index.mjs:1246
return (await readdir(layout.dir)).filter((name) => name.startsWith(layout.archivePrefix) && name.endsWith(".sqlite")).sort(); - 写入本地文件lib/index.mjs:1260
await rename(src, destBasePath + suffix); - 删除本地文件lib/index.mjs:1263
await rm(src, { force: true }).catch(() => {}); - 写入本地文件lib/index.mjs:1284
await rename(activePath, archivePath); - 写入本地文件lib/index.mjs:1287
await rename(buildingPath, activePath); - 删除本地文件lib/index.mjs:1335
if (existsSync(buildingPath)) await unlink(buildingPath); - 删除本地文件lib/index.mjs:1404
await unlink(buildingPath).catch(() => {}); - 删除本地文件lib/index.mjs:1439
if (existsSync(buildingPath)) await unlink(buildingPath); - 删除本地文件lib/index.mjs:1464
await unlink(buildingPath).catch(() => {}); - 发起网络请求src/client/host-api.ts:17
return fetch(`/switch-search/api/${method}`, { - 发起网络请求src/client/host-api.ts:52
return fetch(`/switch-search/api/${method}`, { - 发起网络请求src/client/host-api.ts:169
return fetch(`/manage-session/api/${method}`, { - 发起网络请求src/client/host-api.ts:195
const res = await fetch('/switch-search/api/index-export', { method: 'POST' }) - 读取本地文件src/index.ts:767
if (!existsSync(path)) return '' - 读取本地文件src/index.ts:768
const parsed = JSON.parse(readFileSync(path, 'utf8')) as {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-ui-slots@deepseek-ai/schemastery@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-settings-general给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
2 张 · 点击查看大图功能亮点
- 会话内容检索
- 标题内容一键切换
- 按用户回复工具筛选
README
由 DeepSeek 最新模型翻译生成dsh-search-index(会话检索)
DSH 插件:会话标题 / 内容全文检索,自带独立 FTS5 索引;内容检索的语料与语义来自 dsh-reference-session-collector(DRS)投影库,经 HTTP 或进程内只读 两条通道取数。
- 标题模式 —— 直接命中会话标题,输入即出结果;
- 内容模式 —— 按会话聚合展示标题 + 命中片段,支持类型(用户/回复/工具)、检索域(全部/活跃/归档)、日期区间、排序(相关度/时间)与「命中展开」;
- 命中定位 —— 点结果打开会话并巡逻定位到目标行(诊断徽标 ⏳/✓/✗);冷数据(目标距会话最新回合 >40)在会话名后标 🧊,点击先弹确认,确认后按实测页宽尽力回溯翻页(HUD 浮窗显示进度,落定停驻给「跳转/取消」;未命中可再追加两轮预算重试;>200 回合的过冷数据标 ❄️ 不自动回溯);
- 索引生命周期 —— 增量同步(水位轮询)、非破坏性整理(影子库构建 + 原子切换 + 有界归档)、深度同步(DRS 慢扫自愈 + 整理)、JSON Lines 快照导出/导入。
DRS 是硬依赖,但通道可选:内容检索的语义(会话分组、类型加权、表面与归档日期过滤、锚定节选)全部在 dsh-reference-session-collector 的投影库里完成。
展开完整文档(README 剩余 1 节)
dsh-search-index(会话检索)
DSH 插件:会话标题 / 内容全文检索,自带独立 FTS5 索引;内容检索的语料与语义来自 dsh-reference-session-collector(DRS)投影库,经 HTTP 或进程内只读 两条通道取数。
- 标题模式 —— 直接命中会话标题,输入即出结果;
- 内容模式 —— 按会话聚合展示标题 + 命中片段,支持类型(用户/回复/工具)、检索域(全部/活跃/归档)、日期区间、排序(相关度/时间)与「命中展开」;
- 命中定位 —— 点结果打开会话并巡逻定位到目标行(诊断徽标 ⏳/✓/✗);冷数据(目标距会话最新回合 >40)在会话名后标 🧊,点击先弹确认,确认后按实测页宽尽力回溯翻页(HUD 浮窗显示进度,落定停驻给「跳转/取消」;未命中可再追加两轮预算重试;>200 回合的过冷数据标 ❄️ 不自动回溯);
- 索引生命周期 —— 增量同步(水位轮询)、非破坏性整理(影子库构建 + 原子切换 + 有界归档)、深度同步(DRS 慢扫自愈 + 整理)、JSON Lines 快照导出/导入。
DRS 是硬依赖,但通道可选:内容检索的语义(会话分组、类型加权、表面与归档日期过滤、锚定节选)全部在 dsh-reference-session-collector 的投影库里完成。它作为本包的正式依赖随包安装,包本身不需要用户单独下载;但注意「包装上 ≠ 插件激活」:宿主激活 bundles 只扫 profile 顶层 dependencies,作为传递依赖它可能不被挂载,此时投影库不会更新——设置卡会提示激活命令:dsh plugin --profile <name> add dsh-reference-session-collector 后重启宿主。两条检索通道任一生效即可用:http(同源路由)与 in-process(只读直连 projection.db)。
DSH NEXT 桌面版必读:桌面宿主在 web 层对非渲染进程请求一律 403 Browser access is disabled,所以 HTTP 通道在桌面版永远不可用——contentTransport 缺省 auto 会自动改走进程内只读臂,用户无需任何操作。仅当两臂都不可用时,search-status 才返回 available:false 并给出具体档位码(browser-access-denied / drs-http-unreachable / drs-http-error / drs-not-activated / drs-missing / drs-empty / drs-schema-mismatch);其中 drs-not-activated(路由 404)会在 search-status.notActivated=true 中单独标记,即使进程内接穗可用也会提示执行上述激活命令。
进程内臂只读:不建目录、不跑 DDL、不写 meta;库 schema 与本包预期不符时只报错,绝不清库。
索引自愈:整理 vs 深度同步
面板页脚与设置卡各有两枚按钮,修的不是同一层:
| 按钮 | 做什么 | 修什么 |
| 整理索引(index-rebuild) | 读宿主 sessionQuery 全量重建本地 FTS 索引:影子库构建 → 原子切换 → 有界归档 | 本地索引脏 / 缺会话 / 标题陈旧 |
| 深度同步(drsc)(index-deep-sync) | ① POST {op:'sync'} 让 DRS 慢速重扫投影库,轮询 last_sync.busy=false(上限 180s);② 再自动跑一遍整理 | 命中定位不到(DRS 投影库滞后,seq/on_surface 与界面文本对不上) |
命中定位不走本地索引:拿命中行 seq 回查 DRS op=session,取该行 search_text / surface_text 当 needle 到 GUI 里做文本匹配。所以「有些命中点进去不跳」只有深度同步对症,整理索引重建多少次都不动 DRS 投影库。进度经 index-status.deepSync(idle → drs-syncing → rebuilding → done | failed)暴露,两个按钮都在进行中拒绝并发;整理正在跑时点深度同步会直接失败,等它跑完或只点深度同步。DRSC 侧触发契约为 POST ?op=sync(op 必须在 query,body 不作为判据),落定与否记在 drsSettled。
入口双形态(宿主代际)
| 宿主 | 形态 | 注册内容 / 交互 |
| ≥ 0.1.7 | 「插件页式」主栏整页 | sidebar.panellist 面板行(id dsh-search-index, order 5,落在「插件」0 之后、「会话管理」6 之前)+ main 整页(key 同名);点行或 Ctrl/⌘+K → layout.selectPanel('dsh-search-index');页内「关闭」回到会话 |
| < 0.1.7 | 侧栏弹窗(原样) | sidebar.footer.action 入口(order 5)+ SwitchPanel dialog(遮罩 / Esc / Ctrl/⌘+K);不注册 panellist/main |
代际信号:sidebar.workspaces.session.menu.item 席位 + main 席位(0.1.5 线无前者、0.1.7 线起有)。两形态互斥:席位就绪后一次性决定,席位后到时就地撤掉另一形态;enabled=false 时整对注销。
支持 DSH 0.1.0-rc.2、0.1.0-rc.3、0.1.0-rc.6、0.1.0-rc.7、0.1.0-rc.8、0.1.1-rc.1、0.1.1-rc.2、0.1.2-rc.1、0.1.5-rc.1、0.1.5-rc.2、0.1.5-rc.3、0.1.7-rc.1、0.1.7-rc.2、0.2.0-rc.1、0.2.0-rc.2、0.2.1-rc.1、0.2.1-rc.2、0.2.1-rc.3、0.2.1-rc.4、0.2.1-rc.5(枚举 peer;其中 9 个 rc 有农场 cell 实测,矩阵见下节)。
兼容矩阵(0.7.7 实测)
农场 cell(_host-farm/cells/<rc>)逐个装入 0.7.7 后起 dsh web,探测宿主半身与设置面:
| 宿主 rc | /switch-search/api/index-status | settings-describe | 入口形态 |
| 0.1.0-rc.8 | 200 · available:true | 200 · writable:true(legacy 桥) | 底栏弹窗 |
| 0.1.1-rc.2 | 200 · available:true | 200 · writable:true | 底栏弹窗 |
| 0.1.2-rc.1 | 200 · available:true | 200 · writable:true | 底栏弹窗 |
| 0.1.5-rc.3 | 200 · available:true | 200 · writable:true | 底栏弹窗(UI 实测) |
| 0.1.7-rc.2 | 200 · available:true | 200 · writable:false(只读投影) | 主栏整页 |
| 0.2.0-rc.2 | 200 · available:true | 200 · writable:false | 主栏整页 |
| 0.2.1-rc.1 | 200 · available:true | 200 · writable:false | 主栏整页 |
| 0.2.1-rc.2 | 200 · available:true | 200 · writable:false | 主栏整页 |
| 0.2.1-rc.3 | 200 · available:true | 200 · writable:false | 主栏整页(UI 实测,桌面宿主) |
UI 侧(真浏览器)两端各验一格:0.1.5-rc.3 = 底栏「搜索 Ctrl K」+ 弹窗(Esc / Ctrl+K); 0.2.1-rc.3 = sidebar.panellist 行 + 主栏整页(无遮罩)。
仍在枚举、暂无农场 cell 的 9 个 rc(0.1.0-rc.2/rc.3/rc.6/rc.7、0.1.1-rc.1、0.1.5-rc.1/rc.2、 0.1.7-rc.1、0.2.0-rc.1)是声明面放行,未逐格实测;若要收窄,删掉对应枚举即可。
安装
dsh plugin --profile web add dsh-search-index
或本地 tgz
dsh plugin --profile web add "file:E:/test/rewrite-agently/mine-dsh-plugins/dsh-search-index/dsh-search-index-0.7.7.tgz"
安装后必须重启宿主进程。DRS 未装时本插件的内容检索不可用(标题面可用)。
不能与合并包 dsh-session-steward(≤0.5.x,内含 search)同装:两者都注册 /switch-search/api 前缀,0.1.5 线宿主会直接启动失败(webserver: duplicate prefix route)。
升级路径:dsh plugin remove dsh-session-steward → 装 dsh-manage-session + 本插件。
0.1.5 线实测:底栏「搜索 Ctrl K」入口 → 弹窗(Esc 关闭),settings-describe 走 legacy 桥 writable:true;无 DRS 时 search-status 返回 available:false, reason:'drs-unavailable'。
路由契约
前缀 /switch-search/api,方法名:
| 方法 | 作用 |
| list-sessions | 标题语料(会话 id + 标题 + cwd/updatedAt;索引优先、sessionQuery 兜底) |
| content-search | 内容检索(DRS 分组检索直连;archived/types/sortBy/expand/from/to) |
| search-status | 可用性由 DRS 探针裁决(available/reason),附索引水位与整理进度 |
| index-status / index-rebuild | 索引生命周期面(设置卡行;index-status 附 deepSync 状态面) |
| index-deep-sync | 深度同步:DRS 慢扫自愈 → 本地索引整理(后台执行,进度走 index-status) |
| index-export / index-import | 快照导出(JSON Lines 原始体)/ 导入(原始体) |
| settings-describe / settings-mutate | 设置面:0.1.7+ 只读投影;≤0.1.5 走 legacy settings 桥(可写) |
设置
命名空间:switch-search(存储键稳定承诺)。
0.7.0 起从合并包的 manage-sessions-search 回归本命名空间:旧键不再读取,升级后 enabled 等开关回到缺省(搜索默认开启),需要重新按需调整一次。
| 开关/字段 | 缺省 | 说明 |
| enabled | true | 关闭后不注册任何方法,入口整体消失 |
| defaultMode | title | 面板打开时默认标题还是内容模式 |
| autoSync / syncIntervalMs | true / 30000 | 后台水位轮询增量同步 |
| archiveKeep | 2 | 整理索引后保留的历史索引份数 |
| indexDir | '' | 索引目录覆盖(缺省 ~/.dsh-switch-search,环境变量 DSH_SWITCH_SEARCH_DIR) |
| corpusSource | drs | 同步语料源;drs=DRS 投影库;native=sessionQuery 兜底(仅标题面可用) |
| drsBaseUrl | '' | DRS 基址;空=首个 trustedHosts 条目,再退 http://127.0.0.1:8080 |
| contentTransport | auto | 内容检索通道:auto=HTTP 优先、失败降级进程内只读库;http=只走 HTTP;in-process=只走进程内只读库(桌面版) |
与 dsh-manage-session 的职责边界
- 归档集合只读:本插件只读官方归档集合(存储文件优先、registry 兜底),把归档标记折进索引语料;写方只有 dsh-manage-session(归档 / 取消归档 / 清理)。
- 行内删除:搜索结果行的「删除」按钮可见性由跨插件探针决定 —— POST /manage-session/api/session-health-status 的 switches.directDelete === true;未装或探针失败即隐藏(破坏性入口 fail-soft)。删除动作走 POST /manage-session/api/session-history-purge(不复制 purge 实现,单一 owner)。
- 未装 manage-session 时,搜索结果打开会话仍正常(导航不依赖它)。
存储
| 路径 | 内容 |
| ~/.dsh-switch-search/ | 独立索引库(FTS5)、历史归档份数、墓碑台账 |
| ~/.dsh/storages/workspace.json | 只读:归档集合与工作区成员表 |
开发
pnpm install
pnpm run typecheck # tsc --noEmit
pnpm run build # tsc -p tsconfig.build.json && tsdown
pnpm test # 11 个客户端/宿主契约脚本 + DRS/归档契约(node:test,TS 走 tsx)
许可
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
drscrewdriver/dsh-search-index
给 DeepSeek Harness 侧边栏加一个会话内容检索——标题/内容一键切换,还能按用户/回复/工具筛选
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目