面向 DeepSeek Harnessdsh以及任意 Node 脚本的本地语义代码搜索。
37.9/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add JohnXu22786/semantic-search该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · search
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(dependency_conflict · 2026/10/22) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-semantic-search(未发布到 npm,仅可源码安装)
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 06:18:11
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 23 处,展示前 23 条)
- 读取本地文件src/engine/search.ts:379
content = await readFile(meta.path, { encoding: 'utf8', signal }) - 读取本地文件src/engine/search.ts:458
stat(path), - 读取本地文件src/engine/search.ts:459
readFile(path, { encoding: 'utf8', signal }), - 读取本地文件src/watcher.ts:62
const entries = await readdir(root, { recursive: true, withFileTypes: true }) - 读取本地文件src/watcher.ts:69
const info = await stat(filePath) - 发起网络请求src/engine/provider.ts:228
response = await fetch(url, { - 发起网络请求src/engine/provider.ts:291
const r2 = await fetch(url, { - 读取本地文件src/engine/scanner.ts:159
entries = await readdir(dir, { withFileTypes: true }) - 读取本地文件src/engine/scanner.ts:187
stat = await lstat(abs) - 读取本地文件src/engine/scanner.ts:242
content = await readFile(abs, { encoding: 'utf8', signal: opts.signal }) - 写入本地文件src/engine/persist.ts:62
await mkdir(parent, { recursive: true }) - 写入本地文件src/engine/persist.ts:64
await writeFile(tmp, JSON.stringify(value), 'utf8') - 写入本地文件src/engine/persist.ts:65
await rename(tmp, file) - 写入本地文件src/engine/persist.ts:77
await mkdir(dir, { recursive: true }) - 写入本地文件src/engine/persist.ts:81
await writeFile(tmp, buf) - 写入本地文件src/engine/persist.ts:82
await rename(tmp, join(dir, VECTORS_FILE)) - 读取本地文件src/engine/persist.ts:89
for (const entry of await readdir(dir)) { - 读取本地文件src/engine/persist.ts:90
const st = await stat(join(dir, entry)) - 读取本地文件src/engine/persist.ts:102
await stat(join(dir, INDEX_FILE)) - 读取本地文件src/engine/persist.ts:120
readFile(join(dir, INDEX_FILE), 'utf8'), - 读取本地文件src/engine/persist.ts:121
readFile(join(dir, VECTORS_FILE)), - 删除本地文件src/engine/persist.ts:182
await rm(join(dir, INDEX_FILE), { force: true }) - 删除本地文件src/engine/persist.ts:183
await rm(join(dir, VECTORS_FILE), { force: true })
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-credentials@deepseek-ai/dsh-tools给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 本地语义代码搜索
- 符号感知索引
- 向量与BM25混合检索
README
由 DeepSeek 最新模型翻译生成dsh-semantic-search
面向 DeepSeek Harness(dsh)以及任意 Node 脚本的本地语义代码搜索。
English documentation: README.md
sema 为工作区构建片段级索引:源码经语言感知分词器(camel/snake/kebab 拆分、CJK n-gram)处理后,按符号感知边界切块(函数/类保持完整),再嵌入为定长向量——默认完全本地、零依赖(特征哈希的 TF-IDF),也可接入任意 OpenAI 兼容的 embedding 端点。查询基于该索引做混合检索(向量余弦 + BM25,用倒数排名融合 RRF 合并),即使关键词不完全一致也能按语义命中。
以 dsh 插件 bundle 形式交付——在 harness 工具注册表上提供一个 sema 工具(action=search、action=reindex 或 action=stats)——并附带独立的 sema CLI。
特性一览
- 默认离线可用 —— 内置 lexical 提供方无需网络、无需下载模型、无需 API key;可当作快速 BM25 增强的代码搜索使用。
- 符号感知分块 —— 保守的按语言表(16 种语言)提供边界,函数/类保持完整;漏判边界时优雅退化为普通文本块。
展开完整文档(README 剩余 1 节)
dsh-semantic-search
面向 DeepSeek Harness(dsh)以及任意 Node 脚本的本地语义代码搜索。
English documentation: README.md
sema 为工作区构建片段级索引:源码经语言感知分词器(camel/snake/kebab 拆分、CJK n-gram)处理后,按符号感知边界切块(函数/类保持完整),再嵌入为定长向量——默认完全本地、零依赖(特征哈希的 TF-IDF),也可接入任意 OpenAI 兼容的 embedding 端点。查询基于该索引做混合检索(向量余弦 + BM25,用倒数排名融合 RRF 合并),即使关键词不完全一致也能按语义命中。
以 dsh 插件 bundle 形式交付——在 harness 工具注册表上提供一个 sema 工具(action=search、action=reindex 或 action=stats)——并附带独立的 sema CLI。
特性一览
- 默认离线可用 —— 内置 lexical 提供方无需网络、无需下载模型、无需 API key;可当作快速 BM25 增强的代码搜索使用。
- 符号感知分块 —— 保守的按语言表(16 种语言)提供边界,函数/类保持完整;漏判边界时优雅退化为普通文本块。
- CJK 感知分词 —— n-gram 分词(默认 bigram)让中文查询与文档无需分词库即可对齐;全角标点被折叠而非硬断。
- RRF 混合检索 —— 向量余弦与 BM25 双通道经倒数排名融合,单通道命中的文档也能进入排序。
- 优雅降级 —— 远程 provider 不可达时索引自动回退到本地 lexical provider(可用 allowFallback 控制)。
- 增量刷新 + 文件监听 —— action=reindex 按大小+mtime 差异更新,可选的 watcher 让索引保持新鲜。
- 持久化 —— 索引原子化保存到 <root>/.sema(JSON 元数据 + 二进制向量),provider/维度变化时自动检测失效。
- 确定性 —— 相同的工作区与配置产生相同的索引与排序结果。
支持的语言
TypeScript、JavaScript、Python、Go、Rust、Java、Kotlin、Scala、C、C++、C#、Objective-C、Ruby、PHP、Swift、Bash,以及常见数据/标记格式(JSON、YAML、TOML、Markdown、HTML、XML……)。
安装
作为 dsh bundle
本包声明 "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }。补丁插入一行插件项,将 bundle 挂载到 ctx.tools 并注册 sema 工具。
从 npm(包名已保留;发布待访问权限配置完成后执行)
npm install -g dsh-semantic-search
或直接从此仓库安装
dsh plugin --profile demo add github:JohnXu22786/semantic-search
或使用本地检出目录
dsh plugin --profile demo add /path/to/semantic-search
作为独立 CLI
npm install -g dsh-semantic-search # 或: npm run build && node bin/sema.mjs
sema --help
dsh 工具 API
插件只提供一个 sema 工具。将 action 设为 search、stats 或 reindex,参数对象例如:
- 搜索:{ "action": "search", "query": "查找重试循环" }
- 统计:{ "action": "stats" }
- 全量重建:{ "action": "reindex", "full": true }
搜索时必须提供至少包含一个非空白字符的 query。缺少查询词、空字符串或仅含空白字符都会返回校验错误。
CLI 用法
sema index 从工作区构建完整索引 sema reindex [--full] 增量刷新(或加 --full 全量重建) sema search <query...> 混合向量+BM25 搜索,打印 top 命中 sema stats [--json] 索引健康度、provider 与规模数据
全局选项:
--root <dir> 工作区根目录(默认:当前目录) --data-dir <dir> 索引存储目录(默认:<root>/.sema) --provider <kind> embedding provider:lexical | openai(默认:lexical) --dim <n> embedding 维度(lexical 默认 4096;openai 0=自动) --base-url <url> OpenAI 兼容 embeddings 端点根地址 --model <name> embeddings 模型名(仅 openai) --api-key <key> API key(仅 openai;环境变量:SEMA_EMBEDDING_API_KEY) --top <n> search 打印的命中数(默认:20) --json 输出机器可读结果(支持处) --help 显示帮助
CLI 退出码
- 0 —— 成功(包括零命中的搜索,以及 --version/--help)。
- 1 —— 运行时失败(配置错误、构建/索引/搜索出错)。
- 2 —— 用法错误:未知命令、未知参数、缺少或为空白的搜索查询。
配置
可在 bundle 行的 config(示例见 cordis.patch.yml)、上面的 CLI 参数或代码默认值中配置:
| 选项 | 默认 | 含义 |
| root | cwd | 待索引的工作区根目录 |
| dataDir | .sema | 索引存储目录 |
| provider.kind | lexical | lexical(离线)或 openai |
| provider.dimension | 0(lexical: 4096) | embedding 维度;0=从端点自动推断 |
| provider.baseUrl | https://api.openai.com/v1 | OpenAI 兼容端点根地址 |
| provider.apiKey | 空 | 显式配置的 OpenAI API key;优先于环境变量和凭据库 |
| provider.model | text-embedding-3-small | embedding 模型名 |
| provider.apiKeyEnv | SEMA_EMBEDDING_API_KEY | 环境变量名称;也用作凭据库引用 |
| allowFallback | true | 远程 provider 失败时回退到 lexical |
| include / ignore | 默认 | 索引/忽略的 glob 集合 |
| maxLinesPerChunk | 80 | 分块大小硬上限 |
| nGram | 2 | CJK n-gram 大小(1 关闭 n-gram) |
| topK | 20 | 默认返回的命中数 |
| rrfK | 60 | RRF 融合常数 |
| vectorK | 300 | 融合前每通道候选数 |
| autosave | true | 构建后持久化索引 |
| autoIndex | true | 首次搜索时惰性构建 |
| watch | true | 监听工作区变更 |
OpenAI key 按以下顺序选择:provider.apiKey、provider.apiKeyEnv 指定的环境变量值,最后是以 provider.apiKeyEnv 为引用的宿主凭据库条目。凭据库中的 key 会在每次 embedding 操作时重新解析,因此凭据轮换无需重启插件。
开发
npm ci
npm test # 构建 + 运行 node:test 套件(76 个测试)
npm run typecheck
npm run build # tsc -> lib/
许可证
MIT —— 见 LICENSE。© 2026 dsh-semantic-search 贡献者。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
JohnXu22786/semantic-search
面向 DeepSeek Harnessdsh以及任意 Node 脚本的本地语义代码搜索。
相关插件 · 搜索 / 抓取
LLM 知识平台Tencent/WeKnora
概览 ·快速开始 ·新特性 ·功能 ·客户端 ·文档 ·开发
★ 36,266已汉化DSH
72
智能体记忆系统MemTensor/MemOS
MemOS 2.0 Stardust星尘
★ 12,228已汉化DSH
71.3
跨代理记忆库zilliztech/memsearch
跨平台语义记忆,专为 AI 编程智能体打造。
★ 2,799已汉化DSH
70.9
跨智能体会话记忆vshulcz/deja-vu
你的编码智能体不再重复调试你已经修好的问题。
★ 1,367已汉化MCP
70.4
技能语料库EverMind-AI/SkillCorpus
SkillCorpus 能给你什么
★ 694已汉化DSH
69.7
动画花园资源检索yjl9903/AnimeGarden
按番剧、字幕组和类型搜索动画 BT 资源
★ 1,391已汉化DSH
69.2