{"_id":"@dsh-lens/dsh-lens","name":"@dsh-lens/dsh-lens","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@dsh-lens/dsh-lens","version":"0.1.0","description":"TypeScript/JavaScript diagnostics lens for DeepSeek Harness","keywords":["deepseek","dsh","typescript","eslint","diagnostics"],"repository":{"type":"git","url":"git+https://github.com/hajimixiaojie/dsh-lens.git"},"homepage":"https://github.com/hajimixiaojie/dsh-lens#readme","bugs":{"url":"https://github.com/hajimixiaojie/dsh-lens/issues"},"type":"module","main":"./lib/index.js","types":"./lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/client.d.ts","default":"./lib/client.js"},"./types":{"types":"./lib/types.d.ts","default":"./lib/types.js"},"./adapter":{"types":"./lib/adapter.d.ts","default":"./lib/adapter.js"},"./diagnostics":{"types":"./lib/diagnostics.d.ts","default":"./lib/diagnostics.js"},"./delta":{"types":"./lib/delta.d.ts","default":"./lib/delta.js"},"./feedback":{"types":"./lib/feedback.d.ts","default":"./lib/feedback.js"},"./quick-syntax":{"types":"./lib/quick-syntax.d.ts","default":"./lib/quick-syntax.js"},"./scheduler":{"types":"./lib/scheduler.d.ts","default":"./lib/scheduler.js"},"./background-check":{"types":"./lib/background-check.d.ts","default":"./lib/background-check.js"},"./providers":{"types":"./lib/providers/index.d.ts","default":"./lib/providers/index.js"},"./package.json":"./package.json","./snapshot":{"types":"./lib/snapshot.d.ts","default":"./lib/snapshot.js"},"./lens-card":{"types":"./lib/lens-card.d.ts","default":"./lib/lens-card.js"},"./config":{"types":"./lib/config.d.ts","default":"./lib/config.js"},"./reliability":{"types":"./lib/reliability.d.ts","default":"./lib/reliability.js"}},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-conversation"],"platform":"web"}},"peerDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh":"0.1.0-rc.6","@deepseek-ai/dsh-agent":"0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-conversation":"0.1.0-rc.6","@deepseek-ai/dsh-code-runtime":"0.1.0-rc.6","@deepseek-ai/dsh-fs":"0.1.0-rc.6","@deepseek-ai/dsh-host-webserver":"0.1.0-rc.6","@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-session":"0.1.0-rc.6","@deepseek-ai/dsh-subprocess":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6","react":"^18.2.0","typescript":">=5.0.0"},"peerDependenciesMeta":{"typescript":{"optional":true}},"devDependencies":{"@deepseek-ai/cordis":"^4.0.1","@deepseek-ai/dsh":"0.1.0-rc.6","@deepseek-ai/dsh-agent":"0.1.0-rc.6","@deepseek-ai/dsh-client-runtime":"0.1.0-rc.6","@deepseek-ai/dsh-client-ui-conversation":"0.1.0-rc.6","@deepseek-ai/dsh-code-runtime":"0.1.0-rc.6","@deepseek-ai/dsh-fs":"0.1.0-rc.6","@deepseek-ai/dsh-host-webserver":"0.1.0-rc.6","@deepseek-ai/dsh-llm":"0.1.0-rc.6","@deepseek-ai/dsh-session":"0.1.0-rc.6","@deepseek-ai/dsh-subprocess":"0.1.0-rc.6","@deepseek-ai/dsh-subprocess-local":"0.1.0-rc.6","@deepseek-ai/dsh-tools":"0.1.0-rc.6","@types/js-yaml":"^4.0.9","@types/node":"^22.0.0","@types/react":"^18.3.0","esbuild":"^0.25.0","js-yaml":"^4.1.0","react":"^18.3.0","tsx":"^4.19.0","typescript":"^5.8.0"},"scripts":{"build":"node ./scripts/build.mjs","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","test":"node --import tsx --test tests/*.test.ts","verify":"npm run typecheck && npm test && npm run build","pack":"node ./scripts/pack.mjs"},"engines":{"node":">=20"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"license":"MIT","gitHead":"6d7a39166613eec49838b6260ad0b14a076674bb","_id":"@dsh-lens/dsh-lens@0.1.0","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-pofXBviaoVWGQErjwXJdsI/A/knmzlxqpd4bYaCRnpiuCGr6bp0HlrcF14jjZp/9++OkcPS+HOIDNUALYEHjRw==","shasum":"bd8e5d87114018e5fd1a191d89fc61eeef5a3103","tarball":"https://registry.npmjs.org/@dsh-lens/dsh-lens/-/dsh-lens-0.1.0.tgz","fileCount":46,"unpackedSize":169566,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGCBBIFdN4dxlck1wm6A7nZqLtdFhWIY/Bjr6+VRSMQeAiBPQNB2JjrpGSJAKmIwn/xLkXU6wNqjXilB4/LiKy9Qjg=="}]},"_npmUser":{"name":"hajimixiaojie","email":"1105128811@qq.com"},"directories":{},"maintainers":[{"name":"hajimixiaojie","email":"1105128811@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-lens_0.1.0_1786701982698_0.49575037767843"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-14T10:06:22.523Z","0.1.0":"2026-08-14T10:06:22.847Z","modified":"2026-08-14T10:06:23.204Z"},"maintainers":[{"name":"hajimixiaojie","email":"1105128811@qq.com"}],"description":"TypeScript/JavaScript diagnostics lens for DeepSeek Harness","homepage":"https://github.com/hajimixiaojie/dsh-lens#readme","keywords":["deepseek","dsh","typescript","eslint","diagnostics"],"repository":{"type":"git","url":"git+https://github.com/hajimixiaojie/dsh-lens.git"},"bugs":{"url":"https://github.com/hajimixiaojie/dsh-lens/issues"},"license":"MIT","readme":"# dsh-lens\r\n\r\nDSH（DeepSeek Harness）的\"代码体检医生\"插件。\r\n\r\n它会自动检查你改过的代码有没有问题（语法错误、类型错误、代码风格问题），\r\n把问题清楚地列出来，还能帮 AI 助手一起修——**你不需要懂任何技术**。\r\n\r\n---\r\n\r\n## 一、这是什么？有什么用？\r\n\r\n想象你写代码的时候，旁边坐着一位体检医生：\r\n\r\n- 你每改一次代码，它马上看一眼有没有\"低级错误\"（比如少了个括号）；\r\n- AI 打开读取或修改 TypeScript/JavaScript 文件时，它会在后台做一次\"全面体检\"（类型检查、代码规范检查）；\r\n- 发现的问题会：① 显示在聊天框旁边的**诊断卡片**上；② 告诉 AI 助手，让 AI 帮忙修。\r\n\r\n它**不会**阻止你写代码，也不会自己乱改你的文件。卡片刷新走独立的只读接口，不会把快照 JSON 塞进 AI 对话上下文。装好之后，你什么都不用做。\r\n\r\n---\r\n\r\n## 二、安装前，先确认三件事\r\n\r\n| 你需要 | 怎么确认 |\r\n| --- | --- |\r\n| ① 一台电脑（Windows / Mac 都行） | 你现在就在用 ✓ |\r\n| ② DSH 应用已经装好 | 你能打开 DSH 的网页界面（web） |\r\n| ③ 会打开\"终端\"（黑色窗口） | 看下面的\"第一步\" |\r\n\r\n> **什么是终端？** Windows 上叫 **PowerShell**：\r\n> 点屏幕左下角\"开始\"按钮 → 输入 `PowerShell` → 回车。\r\n> 会弹出一个黑色（或深蓝色）窗口，里面有一个光标在闪。后面所有命令都在这里输入。\r\n\r\n---\r\n\r\n## 三、一步一步安装（大约 3 分钟）\r\n\r\n### 第一步：确认 DSH 已经装好\r\n\r\n在终端里，复制粘贴下面这一行，然后按回车：\r\n\r\n```\r\ndsh --version\r\n```\r\n\r\n**看到什么算成功：** 屏幕上出现一个版本号，比如 `0.1.0-rc.6` 这样的一串数字。\r\n\r\n**如果提示\"dsh 不是内部或外部命令\"（或 command not found）：**\r\n说明 DSH 还没装好，或者终端找不到它。请先安装好 DSH 再继续（见文末\"常见问题\"）。\r\n\r\n---\r\n\r\n### 第二步：安装插件（复制一条命令）\r\n\r\n在终端里，复制粘贴下面这一行，按回车：\r\n\r\n```\r\ndsh plugin --profile web add npm:@dsh-lens/dsh-lens\r\n```\r\n\r\n**这一行命令在做什么：**\r\n- `dsh plugin` → 让 DSH 管理插件\r\n- `--profile web` → 装到\"网页版\"配置里\r\n- `add npm:@dsh-lens/dsh-lens` → 从 npm（一个软件商店）下载并安装 dsh-lens\r\n\r\n**看到什么算成功：** 屏幕开始滚动一些文字，最后停下来，回到可以输入命令的状态\r\n（通常看到 `Done` 或类似字样）。整个过程一般不超过 1 分钟。\r\n\r\n> **没有发布 npm 包？想先在本机测试？**\r\n> ① 先在插件源码目录（有 `package.json` 的文件夹）打开终端，运行 `npm run pack`，\r\n> 会生成一个 `dsh-lens-0.1.0.tgz` 文件；\r\n> ② 然后用这条命令安装（把路径换成你的文件位置）：\r\n>\r\n> ```\r\n> dsh plugin --profile web add C:\\你的路径\\dsh-lens-0.1.0.tgz\r\n> ```\r\n>\r\n> （直接 `npm pack` 生成的文件名是 `dsh-lens-dsh-lens-0.1.0.tgz`，也可以用；升级包时先删掉旧的 .tgz 再重新打包）\r\n\r\n---\r\n\r\n### 第三步：确认装好了\r\n\r\n在终端里，复制粘贴下面这一行，按回车：\r\n\r\n```\r\ndsh plugin --profile web list\r\n```\r\n\r\n**看到什么算成功：** 列表里出现了 `@dsh-lens/dsh-lens` 这一行。\r\n\r\n---\r\n\r\n### 第四步：重启 DSH\r\n\r\n1. 把 DSH 的窗口/网页**完全关掉**；\r\n2. 重新打开 DSH（和平时一样打开网页版）。\r\n\r\n装好了！接下来它会自动开始工作，不需要再做任何设置。\r\n\r\n---\r\n\r\n## 四、怎么知道它在工作？（30 秒体验）\r\n\r\n1. 打开任意一个 TypeScript 项目（文件夹里有 `tsconfig.json` 那种）；\r\n2. 随便打开一个 `.ts` 文件，**故意写错一行**，比如：\r\n   ```\r\n   const x: number = \"hello\";\r\n   ```\r\n3. 保存文件；\r\n4. 看聊天输入框附近——应该出现一张**诊断卡片**，显示类似\"1 个问题\"。\r\n\r\n> 如果项目里没有 `tsconfig.json`，插件不会检查它（这是设计如此：没有体检表就不体检）。\r\n\r\n---\r\n\r\n## 五、常见问题（遇到问题先看这里）\r\n\r\n| 问题 | 怎么办 |\r\n| --- | --- |\r\n| 提示 `dsh 不是内部或外部命令` | DSH 没装好或不在系统路径里。重新安装 DSH，或在安装时勾选\"加入 PATH\"。 |\r\n| 提示权限错误 / Access denied | 右键\"PowerShell\"，选**以管理员身份运行**，再试一遍第二步。 |\r\n| 装完重启了，没有诊断卡片 | ① 确认你打开的是**网页版**（web）；② 确认项目里有 `tsconfig.json`；③ 看第三步列表里有没有 `@dsh-lens/dsh-lens`。 |\r\n| 卡片一直显示\"暂无诊断\" | 正常——说明当前没有发现问题。写一个错误再保存，卡片就会出现内容。 |\r\n| 想不装了这个插件 | 在终端运行：`dsh plugin --profile web remove dsh-lens` |\r\n| 想暂时关掉检查 | 见下面的\"高级设置\"，把 `enabled` 改成 `false`。 |\r\n\r\n---\r\n\r\n## 六、高级设置（需要一点技术基础，小白可以跳过）\r\n\r\n插件默认设置已经够用。想改的话，在 DSH 的配置里加一段，或在你项目的根目录\r\n新建一个名为 `.dsh-lens.json` 的文件（不会自动生成，内容如下）：\r\n\r\n```json\r\n{\r\n  \"enabled\": true,\r\n  \"typecheck\": { \"enabled\": true },\r\n  \"eslint\": { \"enabled\": false },\r\n  \"exclude\": [\"generated/**\"]\r\n}\r\n```\r\n\r\n优先级：内置默认值 < DSH 全局配置 < 项目里的 `.dsh-lens.json`。\r\n改完保存即可生效（自动热重载），不用重启。\r\n\r\n完整配置项（在 DSH profile 的 patch 配置里）：\r\n\r\n```yaml\r\n- id: dsh-lens\r\n  config:\r\n    enabled: true\r\n    include:\r\n      - \"**/*.{ts,tsx,js,jsx,mts,cts,mjs,cjs}\"\r\n    exclude:\r\n      - \"**/node_modules/**\"\r\n      - \"**/dist/**\"\r\n      - \"**/build/**\"\r\n    fast:\r\n      enabled: true\r\n      maxFileBytes: 524288\r\n      budgetMs: 50\r\n    typecheck:\r\n      enabled: true\r\n      debounceMs: 800\r\n      timeoutMs: 60000\r\n    eslint:\r\n      enabled: false\r\n      debounceMs: 1000\r\n      timeoutMs: 30000\r\n    feedback:\r\n      inject: true\r\n      maxDiagnostics: 8\r\n      maxBytes: 4096\r\n    scheduler:\r\n      maxConcurrentProjects: 2\r\n```\r\n\r\n---\r\n\r\n## 七、给开发者的说明\r\n\r\n- 环境要求：Node.js `>= 20`；DSH 兼容基线 `0.1.0-rc.6`（所有 `@deepseek-ai/*` 包为 peerDependencies，不打进本包）；TypeScript `>= 5.0.0` 为可选 peer。\r\n- 开发命令：`npm install` → `npm run verify`（typecheck + 107 测试 + build）→ `npm pack --dry-run`。\r\n- 工作流程：\r\n\r\n```\r\nwrite/edit ──► 快速语法（transpileModule）──► post-execute additionalContexts\r\n     │\r\nread ─┴─► 防抖后台检查（tsc / eslint，经 ctx.subprocess）\r\n              └─► delta 分类 ──► agent.inject() 报告\r\n                            └─► lens 快照 ──► Web 卡片\r\n```\r\n\r\n- 子模块：`./client`（Web 插件）、`./adapter`、`./diagnostics`、`./quick-syntax`、\r\n  `./scheduler`、`./background-check`、`./providers`、`./delta`、`./feedback`、\r\n  `./snapshot`、`./lens-card`、`./config`、`./reliability`、`./types`。\r\n- Web 卡片通过同源、禁止缓存的 HTTP 接口轮询内存快照；轮询不会向 Session 上下文写入命令事件或快照 JSON。\r\n- 已知限制：Web 配置页不在首版；typecheck 与 eslint 共用一条防抖管线。\r\n\r\n## 变更日志\r\n\r\n见 [CHANGELOG.md](./CHANGELOG.md)。\r\n\r\n## 许可证\r\n\r\nMIT — 见 [LICENSE](./LICENSE)。\r\n","readmeFilename":"README.zh.md","_rev":"1-7a3316b54499acc43435bc16a6b08df2"}