DeepSeek Harness 插件

dsh-code-index

Semantic repo index for DeepSeek Harness — tree-sitter symbol index, code search, and a bounded ranked repo map injected into agent context.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
lemonxiny55/dsh-code-index
最近更新
2026年8月22日
分类
自动化与任务
GitHub stars
2
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-21

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/lemonxiny55/dsh-code-index
插件名:dsh-code-index
作者:lemonxiny55

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器4 个文件
README.zh.md来源说明 · 只读预览
README 语言

dsh-code-index

English | 中文

语义仓库索引 —— 一个 DeepSeek Harness(dsh)插件,为 agent 提供代码库地图:基于 tree-sitter 的符号索引、带排名的符号搜索,以及注入到系统提示词里的限量自动更新仓库地图。

填补了一个真实的生态缺口:检索 dsh-plugin 话题(2026-08)会发现 git/语音/浏览器/记忆类插件琳琅满目,但缺少原生、模型可用的代码索引 / 仓库地图能力——也就是 aider 的 repo-map 和 Cursor 的 @Codebase 为各自 agent 提供的同类能力。

模型能得到什么

工具用途
code_index查看 / (重)建当前工作区的索引
code_symbols列出符号(函数、类、接口、类型、方法……),带 file:line——支持按名称、路径、类型、是否导出过滤
code_search排名检索:精确 > 前缀 > 子串,导出优先,带相关度分数与 file:line
code_map限量排名仓库地图(按符号密度取核心文件 + 关键符号与行号)

外加一个可选的自动注入系统提示词段(code-index:repo-map,序 60):默认工作区的精简排名地图,60 秒 TTL 自动刷新。将 autoInject: false 可关闭,只依赖 code_map 工具。

安装

需要 dsh(任意安装方式——npx、npm 或源码)与 Node ≥ 22。

# 从 npm(预编译)
npx @deepseek-ai/dsh plugin --profile web add dsh-code-index

# 或从包含本仓库检查副本的目录
npx @deepseek-ai/dsh plugin --profile web add ./dsh-code-index

重启 Web UI(npx @deepseek-ai/dsh web)——启动日志会确认每个工具:

[dsh-code-index] plugin loaded
[dsh-code-index] registered tool: code_index
...

不启动即可核对组合配置:dsh --profile web --dump-config

使用

在工作区会话中,向 agent 提这类请求:

  • "我们现在在哪个仓库?先跑 code_map。"
  • "找出所有名字含 parse 的函数及其位置。"
  • "列出 src/core 里的导出符号。"
  • "重建代码索引。"

*索引*本身不需要 API key;模型当然要配置好才能调用这些工具。

示例(输入 → 输出)

用户提示:

> 我们现在在哪个仓库?先跑 code_map,然后找出 extractSymbols 定义在哪。

agent 依次调用工具:

code_map
# repo map
## src/extract.ts (14)
  function extractSymbols(code, id) :121
  function languageForFile(filePath) :37
  ...

code_search { query: "extractSymbols" }
export function extractSymbols(code, id) — src/extract.ts:121

索引在首次使用时惰性构建;后续调用由磁盘缓存提供,并按 mtime 增量刷新。

配置

选项通过插件行的 config 在 profile 补丁中传入(缺省时使用默认值):

# $DSH_HOME/profiles/<name>/cordis.patch.yml —— 裸行按 id 覆盖。
- id: code-index
  config:
    excludeDirs: [generated, playground]
    mapTopFiles: 30
    mapMaxChars: 4000
    autoInject: true
默认含义
excludeDirs[]追加到内置排除列表(node_modules.gitdistbuildoutcoverage.next.nuxt.cachetargetvendor……)之外的额外目录
mapTopFiles24排名地图中的最大文件数
mapMaxChars3200渲染地图的硬性字符上限
autoInjecttrue是否注册系统提示词段

支持的语言

TypeScript + JavaScript + Python(.ts .tsx .mts .cts .js .jsx .mjs .cjs .py .pyi),通过 tree-sitter WASM 解析——纯解析,无需原生编译。符号提供方的接缝(src/extract.ts + 语法文件)预留了后续接入其他语言/嵌入检索的位置。

工作原理

  • 索引构建(src/buildIndex.ts):递归扫描(应用排除规则),逐文件 tree-sitter 提取(src/extract.ts),JSON 缓存置于 <repo>/.dsh-code-index/,按 mtime 增量刷新(只有被改动的文件才重新解析)。
  • 搜索(src/search.ts):纯打分——精确 1 / 前缀 0.8 / 子串 0.5,导出加权,名称序平局裁决。
  • 仓库地图(src/repomap.ts):密度感知的文件打分(class/interface/function 加权,轻微反膨胀),取 Top-N 文件,每文件符号上限,硬截断。
  • 工作区解析:每个工具解析会话 cwd(agent.session.header.cwd)并向上查找最近的 .git(有界——没有仓库标记的目录绝不会被索引)。

已知限制

  • web-tree-sitter 固定为 ^0.20.8 —— 新版本期望 dylink 语法的 wasm,而 tree-sitter-wasms 提供静态构建;此组合在 Node ≥ 22/24 下验证可用。
  • 自动注入段针对默认工作区(启动目录,与 headless/CLI 模式一致)。多工作区 Web UI 会话应使用 code_map/code_symbols(它们按会话 cwd 解析)。
  • 局部变量也会被索引——召回优先于精确;code_search 的排名会压低它们。
  • 开发者预览版 harness:上游 harness/插件 API 大概率有破坏性变更。

开发

pnpm install
pnpm test        # vitest —— 提取器、扫描、缓存、搜索、仓库地图(35 项测试)
pnpm typecheck
pnpm build       # tsup → dist/index.js(ESM,外部依赖)

许可证

MIT。与 DeepSeek 无关;基于公开的 dsh 插件接口构建。