自动类型检查诊断:模型编辑/创建 TS 文件后后台防抖运行 `tsc --noEmit`,经 `code_check` 工具按文件分组汇报错误(行列号 + 严重级别 + TS 错误码),形成「改 → 查 → 修」闭环。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:a179-sanae/dsh-code-check
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness(DSH)的自动类型检查诊断插件。
模型编辑或创建代码文件后,本插件在后台(按项目、防抖)自动运行
tsc --noEmit,并通过 code_check 工具汇报哪里改坏了——按文件分组,带
行列号、严重级别和 TS 错误码。模型看到报告后可以自己修复,形成
"改 → 查 → 修"闭环。Claude Code 有官方 LSP 插件,pi 有 pi-lens,现在 DSH
也有了 dsh-code-check。
特性
- 监听 harness 的
fs/observed变更事件(与内置 skill 文件系统同一条缝),零核心改动。 - 800ms 防抖,连续编辑合并为每个项目一次检查。
- 按被编辑文件向上找最近的
tsconfig.json,只检查对应项目;node_modules内部的文件不会被依赖自带的tsconfig.json劫持。 - 直接以
node typescript/bin/tsc方式启动:不经过 shell / npx /.cmd,Windows 与 POSIX 行为完全一致;命令行固定--pretty false,解析器同时兼容 ANSI 颜色码与--pretty的file:line:col - error TSxxxx格式。 code_check工具返回缓存报告,传run: true强制重跑,支持按路径过滤(按路径段精确匹配,bad.ts不会误匹配bad.tsx;自动规范化./前缀与尾部斜杠)。首次调用时会扫描调用方工作区找tsconfig.json,没编辑过也能用。- 优雅降级:没有
tsconfig.json或本地没装 TypeScript 时给出明确提示,而不是崩溃;tsconfig 配置错误(如include: []、files指向缺失文件)会标注为tsconfig/global error,与运行环境故障区分开。 - 全部配置项可通过
settings.yaml/ profile patch 层调整。
安装
dsh plugin --profile web add "github:a179-sanae/dsh-code-check#main"
安装后重启 dsh web。工具会自动出现在模型的工具集里,结果以普通工具
卡片渲染在 Web UI 中——不需要任何 UI 改动。
安装注意事项
@deepseek-ai/*运行时包(cordis、schemastery、dsh-tools、dsh-llm)是 peer 依赖:由 DSH 宿主提供。不要把它们手动装进 profile——profile 里出现第二份dsh-tools会让宿主的工具调度器解析到 错误实例,所有工具调用都会报Cannot read properties of undefined (reading 'prepare')(已在 rc.6 实测,属宿主 loader 解析问题)。- 若插件加载报
Cannot find package '@deepseek-ai/...',说明 profile 安装 没解析到宿主包:检查 profile 的pnpm-workspace.yaml,并在pnpm install --force后重新执行dsh plugin --profile web add "github:a179-sanae/dsh-code-check#main"。
用法
让模型正常改代码即可:后台检查会自动调度,随时可以让模型:
- 直接说 "run code_check" 查看当前诊断
- 或模型在编辑后自行调用
code_check
首次使用:项目通过文件编辑事件(fs/observed)习得;还没编辑过时,带
run: true 的 code_check 会先扫描调用方工作区找 tsconfig.json,按需检查。
示例报告:
Type check report — 2 diagnostics (checked at 21:30:04)
src/app.ts:12:5 error TS2345 Argument of type 'string' is not assignable to parameter of type 'number'
src/app.ts:40:1 error TS2304 Cannot find name 'foo'
Tip: fix the errors, then call code_check again to verify.
配置
全部可选,默认值如下:
| Key | 默认值 | 含义 |
|---|---|---|
enabled |
true |
后台监听总开关。 |
debounceMs |
800 |
最后一次编辑后的防抖窗口(毫秒)。 |
triggerTools |
['edit', 'write'] |
触发检查的工具 actor 名单。 |
includeExtensions |
['.ts', '.tsx', '.mts', '.cts'] |
触发检查的文件扩展名。 |
maxDiagnostics |
120 |
单份报告最多展示的诊断数。 |
tscTimeoutMs |
60000 |
单次 tsc 超时。 |
extraArgs |
['--incremental'] |
tsc --noEmit -p <tsconfig> 之后的附加参数。 |
cacheCap |
200 |
缓存项目上限(最久未检查的先淘汰)。 |
通过 profile patch 层覆盖,例如:
# $DSH_HOME/profiles/web/cordis.patch.yml
- id: code-check
config:
debounceMs: 1500
maxDiagnostics: 200
覆盖 patch 是平铺的 loader 条目(- id: + config:),不是 - update: 嵌套
写法——后者会被 loader 静默跳过,配置不生效(实测确认)。id-targeted 覆盖会
整体替换 config,想保留的字段必须一并写上。
工作原理
apply订阅fs/observed(见src/runtime.ts)。edit/write工具对配置扩展名的文件产生变更后,为最近的含tsconfig.json项目调度一次防抖检查。runTypeCheck用项目本地typescript/bin/tsc启动 Node(见src/diagnostics.ts),把path(line,col): error TSxxxx: message行(自动 剥离 ANSI 颜色,兼容--pretty的path:line:col - error TSxxxx格式)解析 成结构化诊断,并按项目根缓存。code_check工具读缓存(或强制重跑)并格式化报告;结果走标准工具结果 管线,在 Web UI 里显示为普通卡片。
开发
pnpm install
pnpm run typecheck # src + tests 严格类型检查
pnpm test # vitest:引擎 + 基于 tests/fixtures/ts-project 的真实 tsc 测试
pnpm run build
pnpm run verify:self-contained
仓库自包含(遵循官方 plugin-template 契约):构建、测试、发布都不需要宿主 源码检出。
路线图
- 接入真实 LSP(tsserver via
vscode-languageserver-protocol),流式增量诊断。 - ESLint / 其他语言路由(pyright、
cargo check、gopls)。 - 自定义 Web UI 诊断卡片(文件级徽标)。
- 检查失败时向下一个模型回合注入紧凑提示。
许可证
MIT
链接
同类插件
strukto-ai/mirage#dsh★ 3435
把文件系统与 bash 提供者换成 mirage 虚拟工作区:文件工具与 shell 命令作用于挂载的资源(RAM、S3、Redis、Slack、Gmail、Notion、Postgres)而非宿主磁盘,支持按挂载点设置读/写/执行模式、按命令选择沙箱(进程内 monty、pyodide、quickjs;远程 docker、e2b、daytona),并可在虚拟终端中安装 CLI(git、gh、slack、linear、ntn、gws,或自行注册的程序树)作为命令头词。
hust-open-atom-club/oh-dsh★ 179
社区发行版:TUI、桌面端与 Web UI 统一体验,分层安装、一步到位。
Jayden-X-L/forkprobe★ 65
同一任务并行试跑多个技能,对比结果选出最优。
vlln/plugin-registry★ 40
插件生态基建:浏览器面板管理官方 repository 插件(0 patch)+ make-dsh-plugin 插件开发引导技能。
forrestchang/dsh-multica-runtime★ 33
让 dsh 运行时跑在 Multica 上。
DietCokewithSugar/dsh-user-experience★ 18
帮你发现项目中可能存在的用户体验问题:自动走查 React/TypeScript 源码,定位问题并给出具体优化建议。