跳到主内容

dsh-plugin/integrations/dsh-plugin

24Star1Fork0Issue1Watching

为 DSH 装上 GEML 块级文档能力:MCP 让模型按块读写 Markdown/SKILL 文档,附带调用图谱技能,告别多轮任务里整篇读写的 Token 浪费。

机审证据4/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
JavaScript
License
NOASSERTION
分支
main
ai-agentscall-graphclaude-codeclidocumentationdsh-plugingemlllm

安装

命令web profile
$ dsh plugin --profile web add @geml/dsh-plugin

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 geml-spec/geml/integrations/dsh-plugin:先查看仓库 https://github.com/geml-spec/geml 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

geml 是一个 DSH 配置 bundle,把 GEML 的"按块读写文档"能力装进 harness——模型不再整篇读写 Markdown/SKILL 文件,而是按小节精确读取和改写,省下大量 Token;附带一个调用图谱技能,让 Agent 能像翻书一样浏览项目的代码结构。

核心能力

  • 按块读取长文档:传入块地址,只返回那一节内容,无需把整篇文档塞进上下文
  • 按块改写文档:用地址定位修改点,原文件不会被改写格式,写不匹配会直接报错
  • 把任意 Markdown 当 GEML 读:无需转换,原 Markdown 文件直接当只读层用
  • 构建并浏览项目调用图谱:识别 TS、Rust、Java、C、Python、Go 等语言,生成谁调用谁的影响链路,浏览器实时渲染
  • 把 MCP 服务限定在会话项目目录:每个会话独立起一个 stdio 进程,访问范围不互相串
  • 提供两份技能文档:写作技能教 Agent 按块工作,代码图谱技能教 Agent 看/建/更新调用图

技术实现

  • 语言: TypeScript / YAML(配置 bundle,无自有运行时代码;MCP 服务与技能是 dsh/CLI 自带)
  • 关键依赖: @deepseek-ai/dsh-mcp-client(MCP 启动器)、@deepseek-ai/dsh-skill-filesystem(技能加载器)、@geml/geml(通过 npx 调用的 CLI)
  • 架构模式: DSH cordis 配置注入——cordis.patch.yml 通过 dsh.bundle.patch 字段挂到宿主,向 cordis 配置树插入一行 MCP 客户端和一行技能文件系统,宿主在启动时合并;技能目录用 baseUrl 相对解析,bundle 装到哪技能就跟到哪
  • 入口文件: cordis.patch.yml(无运行时入口,配置即行为)

适用场景

当 Agent 在多轮交互里反复读改同一份长 Markdown/SKILL/规范文档时,整篇读写会让上下文迅速膨胀并偏离事实。本插件让模型按"块地址"精确读写,仅来回一小节内容,省 Token、保留原格式。它也适合做大型项目的代码导航:让 Agent 自动识别项目语言、生成调用图、用浏览器看模块/方法的调用链路,不再靠 grep 猜关系。

前置依赖与兼容性

依赖最低版本说明
DSH未声明插件未在 package.json 中声明 DSH 版本要求;通过 cordis.patch.yml 注入,依赖 dsh 自带 @deepseek-ai/dsh-mcp-client 与 @deepseek-ai/dsh-skill-filesystem
Node.js未声明插件未声明 Node 版本要求;MCP 启动器使用 node:url 内置模块,需运行时具备该模块
平台跨平台无 os/cpu 字段限制;MCP 通过 stdio + npx 启动,运行时不绑定平台
原生模块无bundle 自身不引入原生依赖;GEML CLI 的功能依赖由其自身声明

安装方式

dsh plugin --profile web add github:geml-spec/geml/integrations/dsh-plugin

配置项

bundle 默认配置即可使用。如需自定义,在 profile 的 cordis.patch.yml 里按 id 重写对应行(必须把所有键重新写全):

配置类型说明默认值
mcp-gemlMCP 客户端行启动 GEML MCP 服务,让模型获得按块读写文档的工具(mcp__geml__geml_get/set/check 等),作用域限定在当前会话项目目录启动命令:npx -y @geml/geml mcp --root .;传输:stdio;服务名:geml
skill-geml技能文件系统行把 bundle 自带的两份技能文档(写作技能、调用图谱技能)作为独立的技能源暴露给 Agent,与用户已有技能根目录互不冲突技能目录:bundle 内的 skills/;提供者名:geml;不引入默认技能根

常见问题

Q: 这个插件是干什么用的?和 VS Code 的扩展是一回事吗?

A: 不完全是代码层面的"扩展"。它向 DSH 注入一份配置,让 Agent 能用 GEML 协议按"块"读写长文档,并附带一份代码调用图谱技能。你可以理解为给 Agent 装上"按章节翻文档 + 看代码谁调用谁"两件工具。

Q: 我不想改 Markdown 格式,能直接用吗?

A: 能。GEML 把普通 Markdown 当只读层使用——geml list/find/get 直接读 .md,原文件保持原样不转换;只有当你主动把项目迁到 GEML(新建 .geml 文档)时才会出现 .geml 格式。

Q: 怎么验证插件装好了?

A: 跑 dsh --profile web --dump-config,应该能看到一段 # == @geml/dsh-plugin 的配置层;再启动 dsh --profile web,模型会话里会出现 mcp__geml__* 系列工具和 geml / geml-code-graph 两份技能。

Q: 我能把 MCP 钉到某个具体版本,避免 npx 拉最新版出问题吗?

A: 可以。在你 profile 的 cordis.patch.yml 里覆盖 id: mcp-geml 那一行,把 args 里的 @geml/geml 改成 @geml/[email protected] 这种带版本的形式即可;也可以用 PATH 上的全局 geml 命令,把 command 从 npx 改成 geml 并去掉 npx 相关参数。

Q: 调用图谱技能支持哪些语言?

A: TypeScript/JavaScript(用 scip-typescript)、Rust(rust-analyzer scip)、Java 与 C(用 Joern,需要 JDK)、Python/Go/Kotlin(Joern,可用但精度次之);Vue/Svelte 单文件组件走自动构建路径。检测由 Agent 自动完成,不会问用户。

Q: 卸载干净吗?会留下什么残留配置吗?

A: dsh plugin --profile web remove @geml/dsh-plugin 会同时移除依赖项和注入的 cordis 这一层,profile 回到安装前的状态,无残留。

Q: 报错说找不到 geml 命令怎么办?

A: bundle 通过 npx 拉取 @geml/geml CLI 启动 MCP;如果你禁用了 npx 或网络受限,应先在 PATH 装好 geml,然后在 cordis.patch.yml 里把 command 改为 geml 并去掉 -y @geml/geml mcp 那几个参数。

上手难度

入门 — 装一行命令即生效;用户无需理解 cordis 配置语法,默认配置就能让模型使用所有能力;如需钉版本或换全局 CLI 才需要改 cordis.patch.yml。

已知问题与限制

  • 非 GEML 文件上的 geml find 需要 @geml/geml 1.7.5 及以上版本;旧版本对非 .geml 文件的搜索会静默返回空结果而非报错,遇到"该命中的搜索没结果"时改用 geml list
  • 调用图谱对 Java/C 依赖外部工具 Joern;Joern 需要 JDK 且首次使用时要按提示定位安装目录并写入 ~/.claude/skills/geml-code-graph/config.json
  • 调用图谱对前端框架存在已知盲区:Vue/React 中组件 TAG 用法(如 <Child/>)不会被识别为调用边;Nuxt 自动导入(未显式 import 的 ref、自动注册组件)也无法识别
  • React 间接派发(回调 prop 调用、dispatch()→reducer 处理、context 注入函数)以及 memo()/forwardRef() 包装的组件不会出现在调用边里,需要靠 grep 兜底
  • scip-typescript 对顶级 <script setup> 调用(含 computed(() => …) 体内)会丢失,类似普通 TS 的模块级调用
  • 售卖/嵌入的源码树(如 next.js 的 packages/next/src/compiled/)会大幅膨胀构建任务清单,需用 --exclude "src/compiled/**" 排除

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/geml-spec/geml/integrations/dsh-plugin)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录