DSH Plugins Marketplace

DSH Plugins

Plugins

/

dsh-folder-search

V

dsh-folder-search

Discovered★ 3

Search local Word/PDF/PPT/Excel folders for exam questions and export paper drafts.Extensive use of AI assisted programming

本地文件夹检索模式(实验)

给 DSH 新建会话增加一个「本地文件夹检索模式」:在本地 Word / PDF / PPT / Excel 文件夹里按关键词找内容,回答哪些文件、哪些位置有命中;也可以把库里的题组一套新卷。

  • 包名:dsh-folder-search
  • 版本:0.5.27
  • 作者:七七(Voyager77Twt)
  • 许可:MIT
  • 兼容:DSH >= 0.2.0-rc.2,Node >= 22.19
  • .doc / .ppt / .rtf 转换需要 Windows + 本机 Office

解析与检索都在插件内部完成,只把命中片段和位置送进模型上下文,不把整份文件塞给模型。


1. 安装

方式一:从 GitHub 安装

先在 DSH 里装好本仓库:

请用 plugin_manager 的 install_bundle 安装这个 DSH 插件:
github:Voyager77Twt/dsh-folder-search
安装完成后确认 list_plugins 里出现 dsh-folder-search,
并告诉我怎么新建会话选择「本地文件夹检索模式」。

固定版本:

github:Voyager77Twt/dsh-folder-search#v0.5.27

仓库是私有时,运行 DSH 的机器必须已登录对应 GitHub 账号,或使用可访问该仓库的 token。

方式二:安装 tgz

把 dsh-folder-search-0.5.27.tgz 发给对方,然后:

我发给你一个 DSH 插件包:<tgz 的绝对路径>。
请用 plugin_manager 的 install_bundle 安装它(target 用 file:<绝对路径>)。
装好后确认 list_plugins 里有 dsh-folder-search,
并告诉我怎么新建会话选择「本地文件夹检索模式」。

方式三:本地目录(开发调试)

plugin_manager install_bundle  target: D:\path\to\dsh-folder-search

安装需要 Full access / 用户批准。装好后:

  1. 新建会话 → 模式选「本地文件夹检索模式」;
  2. 打开 设置 → 本地搜索设置 → 「数据库与索引库位置」,填写题库的绝对路径并保存;
  3. 保存后会自动开始建索引,可在同页「索引库状态」查看进度;
  4. 旧配置仍可在插件配置里写 libraries,但设置页的题库位置优先:
- id: library-search-tools
  name: dsh-folder-search
  config:
    libraries: ['D:\你的题库']

卸载:插件管理里移除 dsh-folder-search,不会动题库文件。


2. 使用

  1. 新建会话,模式选「本地文件夹检索模式」;
  2. 给出文件夹绝对路径,例如 D:\题库\化学;
  3. 直接问:
搜索「侯氏制碱法」相关的题目,给文件和位置。

第一次检索会在后台建文本缓存;大库分批建,输出会提示还剩多少。设置页在 DSH 设置 → 本地搜索设置(排在插件市场后面,order 50)。修改题库/索引路径并保存会触发自动迁移和建库;只改输出设置不会重建索引。


3. 数据库与索引库位置

设置页「数据库与索引库位置」:

  • 题库位置:本地题库/文件夹的绝对路径;
  • 索引库位置:文本缓存目录,留空使用 %LOCALAPPDATA%\dsh-library-search。

保存设置后:

  1. 如果题库或索引库路径发生变化,插件自动开始建索引;
  2. 索引在后台分批进行,不阻塞设置页;
  3. 设置页「索引库状态」显示:
    • 索引大小;
    • 已索引 / 总文件数;
    • 待建、失败数量;
    • 进度条和建库中状态;
    • 索引目录。

第一次填写路径并保存就会开始建库;已有缓存时只补新增/改动文件。

路径变化时:

  • 修改题库位置:新位置会重新建库;
  • 修改索引库位置:先自动迁移旧索引,复制成功后再删除旧目录;
  • 目标位置已有同名 lib-* 时跳过,保留旧目录;
  • 建库由设置页「索引库状态」控制,可点「开始/继续建库」。

旧版 .doc/.rtf 会先用一个 Word 会话批量转 PDF,再并行抽取;.docx/.pdf/.xlsx 等按「建库并发数」并行。

建库时的单文件回退:

  1. 批量转换;
  2. 批量失败 → 逐文件单独转换;
  3. 单文件也失败才标记失败;
  4. 建库 sync 会重试之前失败的条目(retryErrors),不会因为 mtime 没变就永远跳过。

索引状态接口:/api/dsh-folder-search/index(GET 查进度,POST action=build 开始/继续)。

4. 设置页说明

3.1 原词、自动扩展、强关联

检索结果分三类,各自使用自己的输出上限:

类型怎么产生使用哪组上限
直接命中原词用户原词在文件中出现原词检索·输出文件数 / 每文件位置数 / 片段长度
自动扩展命中内置词表或自定义词表把关键词扩成关联词自动扩展输出
仅强关联命中只命中了强关联词,没有原词强关联输出

同一文件如果既命中原文又命中扩展词,按“直接命中”处理。

3.2 搜索步骤

一次工具调用内按顺序执行:

步骤执行次数作用
1. 自动补索引1 次(可关)搜索前检查题库更新并补缓存;关后只用旧缓存
2. 原词检索1 次(必开)用用户原词搜索
3. 强关联词1 次,与第 2 步合并模型自检后填 1 个专名(人物 / 旧称 / 别名 / 缩写);工具做广度闸门
4. 自动关联词扩展1 次,与第 2 步合并内置词表 + 自定义词表;自定义词优先
5. 一般关联词1 次,与第 2 步合并模型补充的一般关联词;不新增文件,只补已命中文件
6. 匹配范围1 次同文件 / 同段页
7. 显示片段1 次关后只给文件和位置
8. 显示题号1 次标“题号 N(文中编号)”
9. 合并重复文件1 次合并内容完全相同的文件
10. 降级后重复搜索0–5 次(可关)强关联词被降级时用剩余强关联词再搜,仍在本工具调用内

最低花费:只保留步骤 1–2。要更全再逐步打开 3、4、5。

3.3 强关联词闸门

默认规则(可在设置里改):

  • 强关联词单独命中文件数超过直接命中文件数的 2 倍;
  • 或超过全库 20%;
  • 或以领域词结尾(工业 / 产业 / 行业 / 领域 / 技术 / 方法 / 工艺 / 生产 / 应用 / 研究 / 化学 / 反应 / 原理 / 实验 / 流程 / 装置 / 设备 / 材料 / 物质 / 题目 / 试题);
  • 任一成立 → 降级;只保留最窄的 1 个强关联词;
  • 降级词不再带入新文件,已命中原词的文件保留;
  • 结果顶部注明降级词。

可选判定模式:factor(直接命中倍数)、files(固定文件数)、ratio(全库占比)、domain(领域词)、all(以上任一,默认)。

3.4 最终输出

「最终输出文件数」默认全部。有上限时按顺序保留:

直接命中 → 自动扩展命中 → 仅强关联命中

例如直接命中 100 个、关联词 18 个、最终输出 75:输出前 75 个直接命中,关联词不再输出。

3.5 自定义词表

设置页第 4 步下方:

关键词=关联词1,关联词2
  • 同一个关键词:自定义词优先,剩余名额用内置词表补齐;
  • 与内置词表共用「关联词数量上限」和「自动扩展输出」;
  • 与当前关键词无关的自定义条目不会参与检索,无需手动关闭。

3.6 默认值速查

设置默认
原词检索·输出文件数 / 每文件位置数 / 片段长度全部 / 4 / 90
自动词表扩展开
关联词数量上限4
自动扩展输出·文件数 / 位置数 / 片段长度全部 / 2 / 45
强关联词开
强关联词上限1
强关联降级判定all(2 倍 / 20% / 领域词)
强关联输出·文件数 / 位置数 / 片段长度全部 / 2 / 45
一般关联词开
降级后重复搜索 / 最多次数关 / 1
匹配范围同文件
显示片段 / 显示题号开 / 开
合并重复文件关
最终输出文件数全部
自动补索引开
建库并发数3(1–8)
题库位置空(空时在对话里询问)
索引库位置空(默认 %LOCALAPPDATA%\dsh-library-search)
目录默认文件数60

全部设置写入:

%LOCALAPPDATA%\dsh-library-search\settings.json

(目录名保留了旧的 dsh-library-search,这样已有索引和设置不会丢。)


5. 文本缓存

Word / PDF / PPT / Excel 不是纯文本。第一次检索时,插件会:

  1. 把每个文档抽成按“段 / 页 / 幻灯片 / 单元格”分行的文本;
  2. 每行带位置标记(如 第 42 段、第 5 页、Sheet1!B12);
  3. 之后所有关键词搜索用 ripgrep 扫这些文本行,不重新打开原文件;
  4. 原文件完全不动;缓存里只有文字,没有图片、字体、排版。

缓存位置:

%LOCALAPPDATA%\dsh-library-search\lib-<hash>\

实测文本缓存约为原文件的 0.4%(本机 4.5 GB 题库约 20 MB)。默认上限 250 MB,可用 cacheCapMB 调低;删缓存只是下次重新抽。

建库过程中旧版 .doc 会生成 legacy-pdf-* 临时 PDF,这部分不算文本索引,建库结束会删除;如果看到索引大小短时间变大,先看是否还有这个目录。

建库失败与已知不可索引文件

当前题库 1767 个文件里,1760 个已建好;剩余 7 个是:

文件原因
模拟试题/2022/一模/朝阳/朝阳区第二学期高三化学质量检测一试卷.docxinvalid zip data,docx 本身损坏
期末考试/2020期中期末/2020选择.docxinvalid zip data
期末考试/2019期末/东城期末/18题.pptxinvalid zip data
期末考试/2013期末/成绩/王莹.xlsx文件有密码
模拟试题/2020/西城一模05/2020.5西城高三化学诊断性测试试卷.docWord 批量/单文件转换均失败
模拟试题/2013/2013房山高三一模化学试题.doc同上
模拟试题/2010一模/通州区高三年级模拟考试(一).doc同上

损坏的 zip、加密 Excel 无法靠重试修复;3 个 .doc 已经尝试过单文件 Word 转换,仍然失败,通常是文件损坏或本机 Word 打不开。修复这些文件后,重新建库即可补上。

缓存会不会导致搜索不全?

缓存本身不会丢命中:它是抽取文本的完整副本,检索时逐行扫描,没有采样、摘要或截断。

对照样本结果
缓存检索 vs 每次直接解析原文件2019年 70 个文件,3 个关键词命中文件集合完全一致,missing=0
缓存检索 vs Word 自身文本20 个 .docx,3 个关键词missing=0,extra=0

仍可能搜不全的情况:

  • 索引还没建完(会提示还剩多少);
  • Word 页眉 / 页脚 / 脚注 / 公式、PPT 备注、Excel 公式与批注、扫描 PDF 的图片文字;
  • 压缩包 / 图片 / 视频只索引文件名;
  • 单文件/单次扫描的极端上限;
  • 缓存上限到了;
  • 文件改动但 mtime 与大小都没变(可用 refresh: "force" 重建)。

6. 支持范围与工具

类型支持
.docx全文(段落 + 标题路径)
.pdf全文(页码;扫描件无文本会标注)
.doc / .rtf本机 Word 转 PDF 后全文
.pptx全文(第 N 张)
.ppt本机 PowerPoint 转 PDF 后全文
.xlsx / .xls单元格文本(Sheet!B12)
.txt / .md / .csv逐行
.rar / .zip / 图片 / 视频仅文件名

工具:

工具用途
library_search关键词检索;返回文件、位置、片段、三类统计
library_outline目录、大题/题号位置
library_read读完整题目(可用 question 限定)
library_export组卷并导出 .docx
library_status绑题库路径、检查索引状态
library_index批量建索引
library_index_export导索引包 zip
library_index_import导入索引包,按大小/时间校验

7. 发布到 GitHub

6.1 发布前检查

  1. 确认没有把题库、缓存、token 写进仓库;
  2. .gitignore 已排除:
node_modules/
fixtures/
*.tgz
.cache/
*.log
  1. 把 package.json 里的占位地址换成真实仓库:
"repository": { "type": "git", "url": "https://github.com/Voyager77Twt/dsh-folder-search.git" },
"homepage": "https://github.com/Voyager77Twt/dsh-folder-search#readme",
"bugs": { "url": "https://github.com/Voyager77Twt/dsh-folder-search/issues" }
  1. 跑一次静态检查:
node tests/_static-audit.mjs

看到 "ok": true 再发布。

6.2 在 GitHub 新建仓库

打开 https://github.com/new:

  • Repository name:dsh-folder-search
  • 选择 Public 或 Private
  • 不要勾选 “Add a README / .gitignore / license”,本地已经有了

6.3 本地初始化并推送

在 D:\AI\work\kw-search-mode 打开 PowerShell:

git init
git add .
git status --short        # 确认 fixtures/、*.tgz、node_modules/ 没有被加入
git commit -m "feat: dsh-folder-search 0.5.27"
git branch -M main
git remote add origin https://github.com/Voyager77Twt/dsh-folder-search.git
git push -u origin main

如果远程已经初始化过,可改用:

git remote add origin https://github.com/Voyager77Twt/dsh-folder-search.git
git push -u origin main

认证二选一:

  • HTTPS:用 GitHub Personal Access Token 当密码;
  • SSH:
git remote set-url origin git@github.com:Voyager77Twt/dsh-folder-search.git

已安装 GitHub CLI 也可以:

gh auth login
gh repo create dsh-folder-search --public --source . --remote origin --push

6.4 发 Release

git tag v0.5.27
git push origin v0.5.27

然后 GitHub 仓库 → Releases → Draft a new release:

  • Tag:v0.5.27
  • 标题:dsh-folder-search 0.5.27
  • 附件:上传 dsh-folder-search-0.5.27.tgz
  • 说明:写本次改动和安装命令

发布后别人可以:

github:Voyager77Twt/dsh-folder-search

或下载 Release 里的 tgz 安装。

6.5 以后更新

# 改代码
node tests/_static-audit.mjs
pnpm pack

git add .
git commit -m "fix: ..."
git tag v0.5.27
git push origin main
git push origin v0.5.27

再到 Releases 上传新的 tgz。


8. 限制

  • 扫描 PDF、图片文字不索引;
  • Word 的页眉/页脚/脚注、公式对象、PPT 备注、Excel 公式/批注不抽取;
  • .doc / .ppt 转换依赖本机 Office,可能较慢;
  • 去重只比较已显示的前几条 block,Word/PDF 跨格式副本通常不会互相合并;
  • 强关联词闸门是启发式规则,不能保证模型一定想到正确专名;
  • 组卷是实验功能,导出前要自己核对题目和答案。

9. 开发

node tests/_static-audit.mjs   # 语法、清单、设置键、路由、分类/上限
pnpm pack                      # 生成 dsh-folder-search-<version>.tgz

目录:

lib/index.js         工具注册、配置
lib/search.js        检索、分类、强关联闸门、渲染
lib/indexer.js       增量索引、缓存
lib/extract.js       docx/pdf/pptx/xlsx/文本抽取
lib/outline.js       目录
lib/docx-writer.js   组卷导出
lib/client.js        设置页
lib/settings-store.js 设置默认值与持久化
lib/settings-host.js 设置接口
cordis.patch.yml     模式预设

Comments

Loading…

Similar plugins

dsh-office

by copylee711

DeepSeek Harness 插件:AI 直接在你打开的 Word / Excel / PowerPoint 里改文档,改动实时可见,可以一起编辑(Windows)

Development & InfrastructureManifest valid

★ 10

↓ 590/wk

MIT

TypeScript

Oct 23, 2026

dsh plugin --profile web add @copylee/dsh-office

by jetformat

DeepSeek Harness plugin for Jetformat: Office to PDF and PDF tools via the local CLI

Development & InfrastructureManifest valid

★ 2

MIT

TypeScript

Sep 27, 2026

dsh plugin --profile web add @jetformat/dsh-plugin

by shiyan688

DSH paper workbench: arXiv search → local library (metadata/PDF/full text) → L1/L2/L3 three-layer reading notes. Host + browser halves in one package, no build step.

Manifest valid

★ 0

MIT

JavaScript

Sep 30, 2026

dsh plugin --profile web add dsh-paperdesk

by xby-skill

一个基于arXiv的论文检索与内容解析工具,支持论文搜索、PDF链接获取和内容解析功能,适用于学术研究和AI领域的最新论文获取。

Manifest valid

★ 0

MIT

TypeScript

Sep 2, 2026

dsh plugin --profile web add xby-arxiv-paper-search

by cnkids

让 DSH 智能体自己读写 Word / Excel:纯 JavaScript,不装 Office 也能跑。

Tools & CapabilitiesDevelopment & InfrastructureManifest valid

★ 3

↓ 349/wk

MIT

JavaScript

Oct 15, 2026

dsh plugin --profile web add dsh-office-toolkit

by xulixin1968

Search a local Paperless-ngx document library with hybrid semantic + keyword retrieval, returning titles and key snippets as agent context.

Manifest valid

★ 0

JavaScript

Oct 10, 2026

dsh plugin --profile web add dsh-paperless-retrieval