dsh-session-search

DSH PLUGIN记忆与知识

仓库 240xu/dsh-session-search

记忆与知识 L5 · 运行验证通过 安全审查:低风险 可信度:金 可安装插件
安装这个插件

DSH web plugin: cross-session full-text search — incremental index of all session logs, fenced API, agent tool session_search, standalone panel. 跨会话全文搜索(增量索引+信任围栏+agent 工具+独立面板)

一句话选型结论

按资料字段整理

dsh-session-search 是记忆与知识类的 DSH 可安装插件,验证等级 L5 · 运行验证通过,安全审查为低风险,有可直接复制的安装命令。验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么;涉及密钥或系统权限的,建议先在隔离环境试装。

分类记忆与知识 收录类型可安装插件 验证等级L5 · 运行验证通过 安全审查低风险
验证等级 L5 L5 · 运行验证通过
GitHub 星标 0 复刻 未标注 · 未关闭 issue 未标注
最近更新 2026-10-21 创建于 未标注
README 7.8 KB 正文体量,越大说明说明书写得越细

安装

可安装插件
在 DSH 里执行,装完用 dsh plugin list 确认已挂上;标了 L4 / L5 的命令已在沙盒里真实跑通
dsh plugin --profile web add @240xu/dsh-session-search
  1. 1
    确认版本与运行环境

    仓库没有标注兼容版本与 Node.js 要求,先确认你的 DSH 版本能装,再继续。

  2. 2
    执行安装命令

    在 DSH 里执行上面的命令;多包仓库要注意区分具体子包名,别装错包。

  3. 3
    确认已挂载

    用 dsh plugin list 查看列表里是否出现这个插件,出现即挂载成功。

  4. 4
    试跑并检查权限

    加载后跑一个最小用例,确认它能正常工作;同时看它申请了哪些文件、命令或网络权限。

兼容 DSH 版本未标注版本不匹配时安装会报错
Node.js 要求未标注来自仓库 package.json 的 engines 字段
前置依赖无需要同时安装的同级依赖
npm 包名未发布到 npm可用 npm view 查看包信息

能做什么

记忆与知识
字段来自项目仓库与公开索引,中文说明由本站标注

适用场景

记忆存储联网搜索

验证等级与安全审查

L5 · 运行验证通过
自动化流程结论,不是人工审核
验证等级L5 · 运行验证通过在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来
安全审查低风险静态分析结论,未标注不代表已通过审查
仓库健康度活跃按仓库活跃度与最近更新时间给出
可信度金综合仓库活跃度与验证结果

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 验证等级 L5:安装和运行都在沙盒里跑通过,装完能直接用的概率高。
  • 静态安全审查为低风险,没有发现明显可疑行为。
  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有声明 Node.js 版本要求,版本不匹配可能装不上。
  • 验证通过不等于安全:插件会读写文件、执行命令或联网,装前先到仓库确认它做了什么。

更适合

  • 需要在记忆与知识场景里给 DSH 补能力的人。
  • 想装完就能用、不想自己排依赖的人。
  • 能接受在本地装依赖、愿意自己确认权限的人。

不太适合

  • 只使用 DSH 官方内置能力、不接受第三方插件的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
插件验证等级安全审查星标兼容版本安装命令
dsh-session-search当前 L5 · 运行验证通过 低风险 0 未标注 有
ruflo L3 · 安装规范通过 低风险 7.4 万 未标注 无
OpenViking L3 · 安装规范通过 低风险 3.9 万 未标注 无
WeKnora L4 · 沙盒安装通过 低风险 3.3 万 未标注 有
distilly L4 · 沙盒安装通过 低风险 2.5 万 未标注 有
EverOS L4 · 沙盒安装通过 低风险 1.3 万 未标注 有

仓库档案

记忆与知识
字段来自项目仓库与公开索引,中文说明由本站标注
作者 / 维护方240xu仓库 dsh-session-search · 默认分支 未标注
分类记忆与知识memory
收录类型可安装插件声明了 dsh.bundle、可用 dsh plugin add 安装的条目
开发语言未标注仓库主语言
许可证MIT商用或二次分发前请确认条款原文
星标 / 复刻 / issue0 / 未标注 / 未标注收录时的数值,非实时
创建 / 更新未标注 · 2026-10-21最后推送 未标注
本站收录2026-10-30首次进入本站目录的时间

README 全文

7.8 KB
作者原文,中文版优先;只做安全转义,不改内容

@240xu/dsh-session-search

<!-- TODO(截图): 真机截图替换占位图(本轮无浏览器通道,不硬造) -->

DSH web 插件:跨会话全文搜索。对 ~/.dsh/sessions 下全部会话日志(多帧
zstd,v3 格式)建立消息级全文索引,一条关键词查回所有历史会话的命中位置
(sessionId + seq ±60 字符窗口摘录)。

  • 零 npm 依赖(node:zlib zstd + 纯 JS);
  • 对 ~/.dsh/sessions 零写入:索引缓存是唯一写点,存
    $DSH_HOME/cache/session-search/index.json(原子写 tmp+rename);
  • 侧边栏零触碰:无任何 sidebar 注册面,UI 是独立面板页
    /api/session-search/panel(可选:装了 dsh-devkit 后可由 Ctrl+K 指向该 URL);
  • 信任围栏硬门槛:全部路由先过 isTrustedApiRequest(回环 Host 挡
    DNS rebinding + sec-fetch-site: cross-site 拒绝 + Origin 同源校验),
    与 dsh-message-ops 0.2.1 同款(arch-review L4/L5 教训)。

10 秒速查

dsh plugin --profile web add @240xu/dsh-session-search
# 重启后访问 http:///api/session-search/panel
  • 纯只读:只写 $DSH_HOME/cache/session-search/index.json,不写会话目录
  • 不想逐个装:dsh plugin --profile web add @240xu/dsh-plugin-hub
  • 卸载:dsh plugin --profile web remove @240xu/dsh-session-search

端点

方法 路径 说明
GET /api/session-search?q=&amp;limit=20&amp;project= 跨会话搜索;大小写不敏感子串(indexOf,防 ReDoS);命中按会话 mtime 新→旧
GET /api/session-search/panel 独立 HTML 面板页(搜索框 + 结果列表 + 「复制定位」)
POST /api/session-search/refresh 手动触发增量刷新(Content-Type 必须 application/json)

Agent 工具

session_search(peer @deepseek-ai/dsh-tools,容错注册——tools 服务缺失或
包不可解析时只跳过工具,HTTP 面不受影响):参数 q(必填)、limit(1-100)、
project(slug 过滤)。输出每行 [slug] title/id seq N (type): snippet,定位符
在前、摘录在后(见「权威依据」节)。

安装

# 方式一:独立安装
claude mcp add ... # 不适用;DSH 插件安装:
dsh plugin add @240xu/dsh-session-search

# 方式二:随 suite 聚合安装(@240xu/dsh-suite 依赖聚合,推荐)
dsh plugin add @240xu/dsh-suite   # 会带入本插件

独立安装与 suite 安装互斥即可(同 id 的 bundle 行不重复插入)。

索引与性能取舍

  • 索引条目 = 每条 user/assistant/system message 的 {seq, type, text(截 500 字符)};
    tool/call 与空文本不入索引(工具调用文本噪声大且无对话语义)。
  • 增量判定:会话日志 mtimeMs + size 与缓存一致 → 跳过;变更/新增重扫该会话;
    消失的会话从缓存移除。
  • 检索:大小写不敏感 indexOf 线性扫描内存数组(按 mtime 新→旧的会话序遍历,
    满 limit 即停)。本地规模(数千会话 × 数百条消息)亚秒级,未做倒排/分词。
  • 首次全量构建:逐帧解压每 8 帧 setImmediate 让出事件循环(大会话不冻结 GUI)。

权威依据与取舍(读了什么 → 采纳/拒绝)

  1. node:sqlite vs JSON 索引 — Node 22.5+ 内建 node:sqlite(DatabaseSync,
    Node v26 SQLite 文档)。拒绝迁移:
    本插件索引是单进程、单对象(≤几 MB)的轻量投影,tmp+rename 原子写已满足
    一致性;而检索核心是 CJK 子串匹配,SQLite FTS 默认分词器不处理 CJK 子串
    (trigram tokenizer 需要额外配置且索引体积 ×3),换 schema 反而偏离「零依赖、
    可整包删缓存」的目标。采纳路径:若未来语料涨到十万级消息或需要相关性
    排序,再迁 node:sqlite(FTS5 + trigram),接口 SessionIndex.search() 不变。
  2. worker_threads — Node Worker threads 文档
    建议 CPU 密集 JS 出主线程。暂缓:索引构建的耗时大头是 zstd 同步解压 +
    JSON.parse,已用帧间 setImmediate 让出(每 8 帧一次)把 GUI 卡顿压到帧级;
    worker 化的收益(彻底零阻塞)要付出每会话一次结构化克隆的序列化成本与
    worker 生命周期管理,在「首次构建 < 数秒」的本地规模下不成比例。采纳阈值:
    真实语料首次全量构建 > 5s 时再出 worker(readSessionFileAsync 的让出粒度
    参数已预留调优空间)。
  3. snippet 策略 — Tavily Search Best Practices:
    面向查询的短片段(chunks)优于整页摘要;max_results 过高反而稀释质量
    (→ 本插件 limit 钳制 1-100、默认 20)。采纳:±60 字符窗口 + 首尾 … 的
    query-aligned 摘录。Anthropic long-context prompting /
    Contextual Retrieval:
    相关内容置于上下文前部、给出来源引用。采纳:工具输出与面板条目都是
    「定位符(slug/session id/seq)在前、摘录在后」,让模型/用户先拿到 citation
    再读内容;agent 多轮检索的 dedupe 思路(Tavily [...] 分隔符合并唯一内容)
    留作工具输出的后续优化。

已知重复(待 suite 聚合层收口)

与生态其它插件存在有意复制(保持插件自包含、不跨包 import),待
@240xu/dsh-suite 聚合层提供共享工具后收口(agg-researcher L3 建议):

  • src/fence.js 的 isTrustedApiRequest ≡ dsh-message-ops ops-core.js 同款
    (arch-review 要求的上线硬门槛,复制是安全侧的选择);
  • src/session-file.js 的多帧 zstd 帧扫描/读取 ≡ dsh-message-ops session-file.js、
    dsh-session-lazy-view frames.js(同源实现,帧魔数扫描的取舍三处一致);
  • messageText(message 事件 → 首个非空 text 块)与 dsh-message-ops 重复。

开发

npm test            # 33 个零依赖测试(node --test,含围栏 403/415 与增量跳过)
node --check src/*.js

License

MIT

v0.1.4

  • 命中项新增「在 Timeline 打开」按钮:直达 lazy-view 时间线深链
    /lazyview?session=&amp;seq=(lazy-view ≥0.3.0)。
  • 主搜索按钮触控目标提升至 ≥44×44px(.acts 辅助钮 36px 下限)。
  • 搜索请求飞行中按钮 disabled(含失败恢复),防重复点击。

0.1.5 · Bug 猎场修复(P1 毒化 + P2)

  • [P1] refresh 被 rejected promise 永久毒化:async IIFE 首个 await 前同步抛出
    (如缓存目录被占位 → saveCache mkdirSync 抛)时,内层 finally 的 scanning=null
    先于赋值执行,随后 rejected promise 永久挂上 → 索引/搜索 500 到进程重启,且坏缓存
    无法自愈。改为先赋值再外挂 finally;loadCache 校验收紧(typeof null===&#x27;object&#x27;
    陷阱:{&quot;sessions&quot;:null} 现在走重建)。两条回归测试在原代码上实证全红。
  • [P2] 零变更不重写 index.json:脏标记(scanned/removed>0 才落盘)——原实现每次
    搜索(GET 先 refresh)都同步 stringify 全缓存 + 写盘。

0.1.6 · 未来代际前视(P2)

  • 文件名泛扫 session.vN.jsonl.zstd(取 N 最大)——固定 v4/v3 字面量会让 dsh 发布
    v5 后新会话文件永远发现不了(静默断索引);与 lazy-view artifact.js 同款做法。
  • header 版本 ≥5 正整数:warn + best-effort 索引(原 throw → per-session 静默 skip);
    1/2/负数/非整数(损坏头)保持 fail loud。测试改语义 + 新增未来代际接受用例。

常见问题

6 问
答案由本站依据条目字段整理,不引用上游原文
dsh-session-search 怎么安装?

在 DSH 里执行 `dsh plugin --profile web add @240xu/dsh-session-search` 即可。

dsh-session-search 的验证等级是什么意思?

L5 · 运行验证通过。在 dsh 沙盒中完成安装与运行冒烟——装得上、跑得起来

dsh-session-search 安全吗?

低风险。

dsh-session-search 装之前要先确认什么?

先看它会读写哪些文件、执行哪些命令、连接哪些网络地址;验证等级只说明装得上、跑得起来,不等于安全。涉及密钥或系统权限的,建议先在隔离环境试装。

dsh-session-search 用的是什么许可证?

上游标注为 MIT。商用或二次分发前请到仓库确认许可证原文。

这条记录的数据可靠吗?

本站按仓库名去重后合并整理,字段以作者仓库与 npm 元数据为准;安装命令、仓库地址与 README 保持原文,带 L4 / L5 标记的安装命令已在隔离沙盒里真实跑通。

同名或近似条目

8 条
不同作者的仓库分开列,请确认你要装的是哪一个
记忆与知识
按星标排序,可作替代方案

ruflo

ruflo

L3 · 安装规范通过 7.4 万 星

OpenViking

OpenViking

面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`vik

L3 · 安装规范通过 3.9 万 星

WeKnora

WeKnora

把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己

L4 · 沙盒安装通过 3.3 万 星

distilly

distilly

Distilly — Distill how they think into reusable Skills for any Agent o

L4 · 沙盒安装通过 2.5 万 星

EverOS

EverOS

L4 · 沙盒安装通过 1.3 万 星

MemOS

MemOS

L4 · 沙盒安装通过 1.2 万 星

240xu 的其它插件

5 个

插件的元信息来自作者仓库;分类、验证等级与安全结论的中文说明为中文整理,最近核验 —。