安装
在 DeepSeek Harness 里通过 dsh-market 安装
dsh plugin --profile web add dshmarket
或使用命令行
dsh plugin --profile web add @dsh-plugins/dsh-env-inspector
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络。请先审阅源码,并尽量锁定 commit(github:owner/repo#sha)。
截图
README
🎯 解决什么痛点
| 场景 | 以前的困扰 | dsh-env-inspector 的解法 |
|---|---|---|
| 端口常遭占用报错 | 关了终端后残留的 Node/Python 进程仍霸占端口,下次启动频繁 EADDRINUSE |
实时探测所有监听端口,鼠标一键点击「×」安全释放(Kill 进程),页面即时自动刷新 |
| 全网监听未察觉 | 服务不经意监听在 0.0.0.0,暴露在局域网存在安全隐患 |
醒目黄色警告圆点标注全网监听端口,提醒开发者关注访问控制 |
| 繁杂端口视觉干扰 | 系统高位动态端口(49152+)动辄几十个,严重干扰排查 | 智能抽屉机制:常用开发端口一目了然,高位动态端口平滑折叠,支持一键展开/收起 |
| 排查环境低效繁琐 | 协同或调试时需频繁在终端反复敲 node -v、git --version、lsof 截图 |
顶部 Tab 独立大看板:操作系统、12 款常用 CLI 就绪状态、大模型 Key 存在性全局掌控 |
✨ 核心特性
1. 🔌 活跃端口全景透视与一键安全释放 (Kill Process)
- 实时探测:底层基于系统
lsof探针,补全 macOS 守护进程最小PATH路径,完整捕获服务端口与占用进程名; - 高位动态端口折叠:区分核心服务端口与动态端口,保持界面清爽;
- 坚不可摧的安全护栏:
- 🛡️ 防自杀保护:DSH 核心端口
:3080永久锁定(显示🔒徽标),DSH 宿主自身的process.pid永久锁定,严禁终止;系统核心 PID 强制拦截; - 🔍 状态一致性核验:执行前服务端再次校验目标 PID 确实正在监听目标端口,杜绝因 PID 复用导致的误杀;
- ⚡ 两阶段退出:优先发送
SIGTERM允许平滑清理,未退出时再升级为SIGKILL彻底回收; - 🔄 联动即时自检:终止后无需刷新浏览器,页面自动重拉自检,该端口瞬间消失,KPI 计数同步递减。
- 🛡️ 防自杀保护:DSH 核心端口
2. 🛠️ 命令行工具链与版本嗅探
双列黑曜石圆角卡片,实时探测 12 款常见开发工具的安装与版本状态:
- 基础 CLI:
node/npm/pnpm/yarn/git/cs/docker/mise/brew - AI CLI:
codex/gemini/claude/opencode/agy,另含常见 AI IDE 与本地模型工具 - 语言运行时:
python3/go/rustc,只展示成功读取到版本的已安装运行时
3. 🔐 AI 模型与开发凭据(零明文、零私有泄露)
- 高低层级分明:自动提炼并翡翠绿高亮已配置生效的模型能力(如 DeepSeek、MiniMax 等);
- 低对比度辅助:未配置的环境变量以微型灰度标签展示,视觉清爽不抢戏;
- 安全红线:所有接口与组件绝不输出、不读取、不传递任何密钥明文,零私有凭据泄露。
4. 🧩 扩展插件与网络接口全览
- 自动列出当前 Web / Local profile 下加载的 DSH 扩展插件及其实际生效版本;
- 区分展示局域网 IP、公网出口 IP,并标出是否检测到显式代理配置;公网出口 IP 只在用户点击后检测。
📦 安装与启用
方式 A:通过 DSH 插件管理器安装(推荐)
前提:装好 Node.js 即可,无需全局安装 dsh —— 官方入口就是
npx @deepseek-ai/dsh。已全局安装的可把它换成dsh。
npx @deepseek-ai/dsh plugin --profile web add @dsh-plugins/dsh-env-inspector
再把 @dsh-plugins/dsh-env-inspector 加进 ~/.dsh/profiles/web/package.json 的 dsh.profile.bundles 数组,然后按下方重启 DSH。
方式 B:手动配置 Profile
在你的 DSH profile 配置(如 ~/.dsh/profiles/web/package.json)中添加依赖与 bundle 声明:
{
"dependencies": {
"@dsh-plugins/dsh-env-inspector": "^0.2.4"
},
"dsh": {
"profile": {
"bundles": [
"@dsh-plugins/dsh-env-inspector"
]
}
}
}
执行安装并重启 DSH:
npx @deepseek-ai/dsh plugin --profile web install
# 结束当前 DSH 进程后重新运行
npx @deepseek-ai/dsh web
进入页面后,点击顶部导航栏中的 「🖥️ 电脑环境」 Tab,即可开始使用。
🛡️ 架构与安全承诺
- 零运行时依赖:代码完全基于 Node.js 原生 API 与纯 React 构建,无任何第三方三方包膨胀;
- 默认不联网:本地自检不访问外部服务;用户主动点击“检测出口 IP”时,浏览器才向公网 IP 服务发起一次请求;
- 同源防护:所有接口强制校验
Sec-Fetch-Site: same-origin,彻底杜绝恶意网页跨站探测。
🗺️ 后续落地规划 (Roadmap)
- 项目目录反查:针对端口占用的进程,自动反查并展示其当前的工作目录(如
/Users/.../my-vite-app); - 开机幽灵端口对比:提供“基准端口对比”模式,高亮提示当前会话中新开启但未退出的残留端口;
- 官方命名平滑演进:待维护账号收敛后,无缝兼容并迁移至
@dsh-plugins/dsh-env-inspector与dsh-env-inspector。
🧩 DSH 插件全家桶
一行装齐(只需 Node.js),装完重启 DSH 即可:
npx -y @deepseek-ai/dsh plugin --profile web add dsh-bloom-theme @dsh-plugins/dsh-llm-hub @dsh-plugins/dsh-user-mirror @dsh-plugins/dsh-env-inspector && node -e 'const f=(process.env.DSH_HOME||require("os").homedir()+"/.dsh")+"/profiles/web/package.json",p=require(f),b=p.dsh.profile.bundles;for(const n of Object.keys(p.dependencies))if(/^(dsh-bloom-theme|@dsh-plugins\/)/.test(n)&&!b.includes(n))b.push(n);require("fs").writeFileSync(f,JSON.stringify(p,null,2)+"\n")'
License
评论
评论存放在 GitHub Discussions。用 GitHub 账号登录后可发表评论或点表情。