🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

工程驾驶舱插件 LLYlab/DSHEssentialTools

DeepSeek Harnessv2.9.4
LLYlab28 天前有提交已提供中文文档扫描:含敏感能力

DSH 永久插件:LVAL 负责工程运行、代码查看和程序版本快照回退,VTD 提供虚拟对话树(编辑、重试、分支,以及消息小版本),DET 是功能管理器。

30.5/100
综合分
1
GitHub 星标
1,873
npm 周下载
—/5
用户评分

数据截至 2026/10/10 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-essential-tools
npm 源 · dsh-essential-tools 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/10/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 28 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-essential-tools @ 2.9.4
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 18:56:52

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 32 处,展示前 25 条)
  • 读取本地文件
    lib/index.js:1070
    try { if (existsSync(cfg) && statSync(cfg).isFile()) resolved = cfg; } catch (e) { }
  • 读取本地文件
    lib/index.js:1070
    try { if (existsSync(cfg) && statSync(cfg).isFile()) resolved = cfg; } catch (e) { }
  • 读取本地文件
    lib/index.js:1101
    try { if (existsSync(p)) return p; } catch (e) { }
  • 读取本地文件
    lib/index.js:1159
    const entries = readdirSync(dir);
  • 读取本地文件
    lib/index.js:1166
    try { return statSync(join(dir, name)).isFile(); } catch (e) { return false; }
  • 读取本地文件
    lib/index.js:1174
    try { return existsSync(p) && statSync(p).isFile(); } catch (e) { return false; }
  • 发起网络请求
    lib/index.js:5497
    resp = await fetch(safe.url, {
  • 发起网络请求
    lib/ds.js:110
    resp = await fetch(BALANCE_URL, {
  • 发起网络请求
    lib/ds.js:173
    resp = await fetch(candidate.url, {
  • 发起网络请求
    lib/browser.js:311
    const res = await this.request(tabId, cmd, args, opts);
  • 读取本地文件
    lib/dlt-tools.js:320
    if (!existsSync(path)) return { ok: false, error: `文件不存在: ${path}` };
  • 读取本地文件
    lib/dlt-tools.js:415
    if (!existsSync(path)) return { ok: false, error: `文件不存在: ${path}(新建请用 action=create)` };
  • 读取本地文件
    lib/dlt-tools.js:526
    if (!existsSync(path)) return { ok: false, error: `文件不存在: ${path}` };
  • 读取本地文件
    lib/dlt-tools.js:544
    if (existsSync(out) && args.backup !== false) await fsp.copyFile(out, `${out}.bak-${Date.now()}`);
  • 读取本地文件
    lib/dlt-tools.js:723
    pythonEngineExists: existsSync(PY_ENGINE),
  • 读取本地文件
    lib/dlt-tools.js:725
    officeBridgeExists: existsSync(OFFICE_BRIDGE),
  • 读取本地文件
    lib/alv.js:116
    if (!existsSync(ALV_ENGINE)) return { ok: false, error: `ALV 引擎不存在: ${ALV_ENGINE}` };
  • 读取本地文件
    lib/alv.js:230
    engineExists: existsSync(ALV_ENGINE),
  • 读取本地文件
    lib/alv.js:232
    ocrBridgeExists: existsSync(ALV_OCR_BRIDGE),
  • 读取本地文件
    lib/dlt-engine.js:219
    return existsSync(target)
  • 执行外部命令来自配置/变量
    lib/dlt-engine.js:430
    child = spawn(realProgram, realArgs, {
  • 执行外部命令固定命令
    lib/dlt-engine.js:454
    spawn('taskkill', ['/PID', String(child.pid), '/T', '/F'], { windowsHide: true })
  • 读取本地文件
    lib/dlt-engine.js:494
    if (!existsSync(engine)) throw new Error(`文档引擎不存在: ${engine}`)
  • 读取本地文件
    lib/dlt-engine.js:575
    if (!existsSync(edge)) throw new Error(`未找到 Edge: ${edge}`)
  • 读取本地文件
    lib/dlt-engine.js:592
    if (!existsSync(target)) {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-credentials@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-storage-domain@deepseek-ai/dsh-tools@deepseek-ai/dsh-typert-protocol@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 工程运行与代码查看
  • 程序版本快照回退
  • 虚拟对话树分支编辑
v2.14.12026-10-26
· v2.14.1 — 修「关一次总开关/切一次模式,装过的东西就全忘了」+ boot 早期恢复失败 实测现场:重启后 adu_status 显示 warm 四个模块在,但只有历史里有的 plugins 没回来。 挖出两个叠在一起的问题: · 1) 临时拆台把"意图"也删了 _aduUnmountAll()(总开关关闭、模式切换、插件卸载时调用)走的是 _aduUnmount(), 而 _aduUnmount() 在 v2.11 起会 _aduWanted.delete(id) 并落盘 —— 于是"临时拆台" 等于"用户不想装了",下一次启动就不再恢复。这就是"装过的东西一个都没回来"的主因。 · 拆出 _aduDisposeGroup(key):只销毁注册,不动 wanted / 持久化。 · _aduUnmountAll() 改用它;只有模型/用户显式 adu_unload 才清意图。 · 2) boot 早期读不到存储 → 恢复空转 storageDomain 在宿主启动早期可能还没就绪,det.adu.mounted 读到空表,于是"上次装的" 一个都没回来(warm 兜住了四个,历史里的 plugins 就丢了)。 · 新增 _aduScheduleRestore():0s / 2s / 6s / 15s 各试一次,_aduRestoreMounts() 幂等。 · 3) 状态可自证 adu_status 与 _aduStatus() 现在回传 wanted(期望集合)、warm(开局自动装)、 diag(最近失败账本)。以后"为什么没装/为什么失败"在状态里就能看到,不必再猜。 · 测试 · alv-adu 166 → 176:拆台不清 wanted(行为)、拆台后自愈装回、状态含 wanted/diag、 源码守卫(拆台不得走 _aduUnmount)。 · 全量:631 断言全绿。 --- Install powershell dsh plugin --profile web add github:LLYlab/DSHEssentialTools
v2.14.02026-10-26
· v2.14.0 — 默认就装(warm)· 浏览器断连自动等一次 · 提示不再每步重注册 三条反馈:「不会自动装载东西」「不会用」「手动装载后 web 频繁失效」。 · 1) 自动装载:开局就把最常用的四个模块装上(warm) 2.12/2.13 只有"上次装过什么"会恢复,没装过的就一直是空的 —— 新会话/新机器上只有 adu_* 五个 元工具,模型自然"不会用"。现在: · 新增配置 aduWarm,默认 ["dlt","alv","browser","web"]:启动时与 det.adu.mounted 合并后一起装载。 于是写代码(dlt)、看文档(dlt)、看图(alv)、查网页(browser/web)一开局就可用; 只剩最重、最少用的 plugins(19 个工具)保持按需。 · aduWarm: [] 回到纯按需;aduWarm: "all" 全装。 · 面板与 adu_status 会显示 warm,一眼看清"开局自动装了什么"。 · 2) web 频繁失效:断连不再立刻判死 扩展是 MV3 service worker,休眠/重启时 socket 掉一下再连回来是常态。旧实现一看到断连就 直接把失败甩给模型(2.10 引入的 fail-fast),观感就是"web 工具频繁失效"。现在: · 调用前若扩展未连上,先最多等 1.5s(每 300ms 探一次)让 service worker 连回 127.0.0.1:9123; · 若命令中途断连(browser-disconnected),等 600ms 后重试一次; · 仍然失败时错误文案区分三层:桥(未启动)/ 扩展(未连接)/ 档位(只读、只写、关闭),并给下一步。 · detHealth 新增「浏览器桥」检查:桥是否运行、扩展是否连接、当前档位、网络权限是否到位。 · 3) 提示抖动:文本没变就不重注册 _refreshAduPrompt() 原来每次装载/卸载都 dispose + 重注册系统提示段。系统提示每变一次, 宿主可能重开一个请求序列(缓存失效、界面观感抖动)。现在先比对文本,没变就什么都不做。 · 测试 · alv-adu 157 → 166:_aduWarmIds 默认值 / aduWarm: [] / "all" 三种形态、 浏览器断连等待与可读错误、detHealth 的桥检查、提示缓存守卫。 · 全量:128 + 60 + 23 + 47 + 17 + 37 + 22 + 40 + 71 + 10 + 166 = 621 断言全绿。 --- Install powershell dsh plugin --profile web add github:LLYlab/DSHEssentialTools
v2.13.02026-10-26
· v2.13.0 — 治「模型疯狂 pwsh」:工具选择优先级提示 + 修掉 dlt_run 的输出校验 bug 反馈:「AI 不喜欢用这些 tool 了,现在疯狂 pwsh」。查下来是两个原因叠加,都不是模型"变懒": · 1) dlt_run / dlt_build 的输出曾被宿主判为非法 输出 schema 声明 exitCode: number,但超时或进程起不来时真实值是 null → 宿主 「无损 JSON / 类型校验」直接判 invalid output。模型撞一次 value.exitCode must be a number, 之后就会本能地绕开这个工具、回到万能的 pwsh。 · 修:新增 normalizedRun(),exitCode 统一归一化(拿不到就是 -1),并显式给 timedOut。 · 顺手把 dlt_run 的描述改成「首选执行入口 …… 而不是 pwsh 里拼命令行」。 · 2) ADU 的提示只讲"怎么装",没讲"什么时候该用它而不是 pwsh" 旧提示的重点是"按需装载、粘性、忘了就 rememory",模型的默认推理就变成了 「我手里没有专用工具 → 用 pwsh」。现在 tool:det-adu 这一段整个重写为工具选择优先级: · 先列这一轮真实可用的专用工具(按已装模块动态生成,不推荐手里没有的工具): 文档 → dlt_doc_*、执行/编译 → dlt_run/dlt_build、环境 → dlt_env、 图片 → alv_*、浏览器 → det_browser、网页 → web_*、插件 → det_global_plugin_*。 · 再明确写:pwsh 只用于 git、目录/文件日常整理、以及确实没有专用工具时的临时探测; 判据是「只要上面有一件工具能直接完成这件事,就先用它」。 · 装载/卸载后即时刷新这段文案(_refreshAduPrompt),保证"可用清单"永远是真的;全装模式下同样注册。 · 测试 · alv-adu 145 → 157:提示生成器与 _refreshAduPrompt 的源码守卫;dlt-tools 的 normalizedRun 与 exitCode: number 双声明守卫(并禁止宿主不认识的 nullable); 行为上断言"已装模块的工具被点名、未装的不点名、未装单独提示 adu_load"。 · 全量:128 + 60 + 23 + 47 + 17 + 37 + 22 + 40 + 71 + 10 + 157 = 612 断言全绿。 --- Install powershell dsh plugin --profile web add github:LLYlab/DSHEssentialTools
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
DET · dsh-essential-tools — 这个插件把 DeepSeek Harness 变成真正能用的工程驾驶舱。 让 AI 驱动你自己已登录的浏览器 · 对任意对话分支、编辑、重试 · 运行 / 快照 / 回滚真实项目 · 管理每一个插件、每一笔 token 开销 快速开始 ·用户指导手册 · Changelog · Security ·功能总览 😤 痛点 如果你一边写真实代码,一边让 AI 智能体参与进来,这四个问题你一定懂: | 痛点 | 现在大家怎么做 | DET 怎么做 | | 🧠 一步走错,整条对话就废了 — 你想从第 12 条消息重新提问,而不是从头再来 | 复制粘贴到新会话,上下文全丢 | VTD:编辑 / 重试任意一条消息 → 生成真正的隐藏分支,用 <N> 切回去,而且工作区代码跟着一起回滚 | | 🌐 AI 看不见也点不到你眼前的东西 — 你已登录的仪表盘、内网页面、file:// 页面 | 截图、粘贴、手把手教、反复重试 | DET Browser Extension:模型驱动你已经登录的 Edge/Chrome,走 localhost 桥接,权限由你自己把关(off / read / write / on) |
展开完整文档(README 剩余 1 节)
DET · dsh-essential-tools — 这个插件把 DeepSeek Harness 变成真正能用的工程驾驶舱。
让 AI 驱动你自己已登录的浏览器 · 对任意对话分支、编辑、重试 · 运行 / 快照 / 回滚真实项目 · 管理每一个插件、每一笔 token 开销

快速开始 ·用户指导手册 · Changelog · Security ·功能总览

😤 痛点

如果你一边写真实代码,一边让 AI 智能体参与进来,这四个问题你一定懂:

| 痛点 | 现在大家怎么做 | DET 怎么做 |
| 🧠 一步走错,整条对话就废了 — 你想从第 12 条消息重新提问,而不是从头再来 | 复制粘贴到新会话,上下文全丢 | VTD:编辑 / 重试任意一条消息 → 生成真正的隐藏分支,用 <N> 切回去,而且工作区代码跟着一起回滚 |
| 🌐 AI 看不见也点不到你眼前的东西 — 你已登录的仪表盘、内网页面、file:// 页面 | 截图、粘贴、手把手教、反复重试 | DET Browser Extension:模型驱动你已经登录的 Edge/Chrome,走 localhost 桥接,权限由你自己把关(off / read / write / on) |
| 🛠 构建-运行-查看-检查全靠手动循环 | 每小时 Alt-Tab 切到 IDE 和终端 40 次 | 右侧工具栏:▶ 运行 · 🗎 文件树 + 预览/编辑 · 🕘 程序快照与回滚 |
| 💸 你根本不知道一次会话花了多少 | 月底才发现 | 角落实时显示余额 + 各模型价格 + 每轮开销 + 高峰/低谷估算 |

DET(插件名 dsh-essential-tools)是 DeepSeek Harness 的永久插件,一次解决这四个问题 —— 还额外带来完整的插件管理器、对话记忆层和安全审计。它常驻在你的 web 配置档里,重启也不消失,并出现在设置 → 插件清单中。

🎁 零配置: 不填项目路径,所有对话/token/插件功能开箱即用。只有想用 ▶ 运行时,才需要添加路径。

✨ 功能一览

🌐 浏览器控制 —— 重头戏

真正的 MV3 扩展(Edge / Chrome)通过仅限 localhost 的 WebSocket(127.0.0.1:9123)连到 DSH 主机,这样模型就能操作你已经登录的浏览器 —— 内部工具、仪表盘、网页邮箱、本地 file:// 页面,你开着什么就能操作什么。

- 读: read_text · read_dom · screenshot · get_url · get_title
- 写: navigate · click · fill · run
- 六个模型工具: det_browser,外加 web_human_search(像人一样搜索)、web_insite_search(在你打开的标签页里找)、web_act、web_inspect、web_focus
- 权限旋钮在你手里 —— 四档开关装在扩展弹窗里,DSH 只能读:
| 模式 | 模型能做 |
| 关闭 off | 什么都做不了 |
| 只读 read | 读页面(文本 / DOM / URL / 截图) |
| 只写 write | navigate、click、fill、run —— 但页面内容不会回传 |
| 启用 on | 读 + 写全开 |
- 双重闸门: 除非网络权限 = 第 4 档(使用你的浏览器),否则主机连桥都不启动;低于这一档,det_browser 还没到你的浏览器就被拦下。
- 感知审批: 非 Full access 模式下,浏览器操作走 DSH 的 tools/pre-execute 审批流程;Full access 免审。
- 加固措施:握手校验 origin,注入走固定函数 + 参数(绝不用 new Function),只操作 DSH 指定的 tabId,桥只保留最新的扩展连接,这样僵死的 MV3 service worker 抢不走你的命令。

➡️ 安装:browser-extension/README.md · 深入阅读见指导手册

🌲 VTD —— 虚拟对话树

别再扔掉对话了。

- 编辑 / 重试任意用户消息 → 生成真正的分支子会话(origin: vtd-fork,侧边栏里不显示)。你原来的对话不受影响。
- 消息上的 <N> 分支选择器:在分支间跳转,DET 会给工作区打快照,并帮你恢复目标分支的代码(消息微版本)。
- 流式分支视图: 不再固定 4 秒轮询 —— 主机发出 generating 信号,于是 token 流动时标签页约 700 ms 刷新一次,空闲时约 2.5 s 一次,自动滚动,并显示「正在生成…」。
- 产品级原生渲染: 只显示真正的用户气泡,上下文注入折叠收起,工具调用 / 结果做成卡片,推理过程折叠,细粒度 Markdown。
- 消息微版本: baseline / edit / retry / auto-switch 自动记录,可恢复。

🖥 右侧工具栏 —— 不离开聊天就能干项目活

| | 工具 | 做什么 |
| ▶ | Run | 找到你的入口点(main/entry/run .py/.cpp,或 .sln/.slnx),用 MSBuild 构建,启动程序 |
| 🗎 | Files | 工作区文件树(可折叠、带计数、缩进),点击可在弹窗里预览或编辑 |
| 🕘 | 版本 | 程序级快照:手动快照 / 回滚(先自动备份)/ 删除 —— 仅代码文件 |
| 🧩 | 插件 | 跳转到插件管理器 / 当前会话的插件开关 |
| 🛡 | 安全 | 审计日志与安全开关 |

MSBuild 缺失或配置有误?自动发现:vswhere → 常见 VS 安装目录 → PATH,缓存 60 s,lvalInfo 会报告实际使用的路径。

🧩 全局插件管理器 —— 一个库、五个级别、两条安装路径

- 库贯穿整个进程(存储域 dsh_global_plugins,重启后仍在)。每个插件都带一个级别: 全局启用 always · 对话AI可自行决定启用 ai-auto · 对话内AI需审批启用 ai-approve · 不再会有新启用 frozen · 全局禁用 disabled
- 引入插件: ① 从任意运行中的会话里,把活跃的动态 Cordis 插件提升进来;② 搜索商店(GitHub / marketplace / leaderboard / radar),附带缓存的 AI 摘要;③ 粘贴 manifest URL。
- 从 GitHub 引入有两种方式: ① 直接下载(det_global_plugin_github_direct);② AI 读取源码,重写一个等价且更安全的版本(det_global_plugin_github_rebuild → det_global_plugin_github_save)—— 第三方代码绝不执行,两条路径都会返回病毒/漏洞警告。
- 常驻插件(例如 dbs)有一个干净的启用/禁用开关,通过 loader 热卸载/热重载,重启后仍然生效,并提供刷新前端按钮(det_global_plugin_set_enabled)。
- 意图与事实存在不同字段里(v2.9.4)。 以前是一个字段干两件事 —— globallyEnabled 既是「你的意图」,又是总开关的记账,而 gpList 还会把 loader 的实际状态写回其中。三个写入方互相覆盖,这就是「禁用一个常驻插件 → 重启后它又回来了」反复出现的原因。现在:
- 意图放在它自己的权威字段 enabledIntent 里(在存储 schema 中是可选的,所以旧记录仍能读取;读取时推断一次并迁移);
- 级别 全局禁用 disabled 是硬否决(按定义它「拒绝任何启用」),然后由 enabledIntent 决定,只有旧记录才回退到 level(level 的优先级高于被记账污染的 globallyEnabled);
- gpList 绝不把事实写回意图。 loader 的真实状态只被上报(actualEnabled / fiberPhase / stateMismatch),绝不覆盖你的选择持久化;
- 二元开关不再破坏你的级别 —— 它以前会把 ai-approve / frozen 改写成 always / disabled,让你的五级设置永久丢失。「是否已安装」和「谁可以启用它」是两个维度,现在分开存储;
- 启动守卫 / 总开关的暂停会写入真实意图(enabledIntent = false),所以安全禁用不会再被下一次 apply 悄悄撤销。
- 意图与事实分开看。 条目按任意一个名字匹配(id、嵌套 id、options.id、options.name —— 配置档的 insert 行带两个不同的名字,比如 id: dbs 对应 name: 'dsh-bgm-service',以前会让「禁用」悄无声息地失效)。意图和事实不一致时,卡片会直接说出来,而不是改写你的意图;立即应用禁用状态(gpApplyPermanentStates)把意图推给加载器,不用重启。持久化的状态在启动时重新应用,靠一次延迟 kick 加上第一个会话 —— 刻意不用 loader.await(),从插件自己的 apply 里调用它会死锁。
- 禁用一个插件,绝不会重载你整个页面(v2.9.4)。 以前它会无条件调用 window.location.reload() —— 哪怕宿主刚报告了 applyError,也就是什么都没应用上。这就是「关掉一个插件把 DET 自己的功能和 UI 搞乱了」的真相:它重置了 DET 的界面、你正待着的设置页,还有所有没保存的输入。现在面板会报告加载器实际做了什么(loader 已实时禁用 / 实时未生效:<reason>),刷新交给你自己按的刷新前端按钮。
- Boot Guard: 连续 bootFailLimit 次启动失败(默认 2)就自动禁用所有全局插件,坏插件永远搞不崩你的启动。
- 会话内工具: det_global_plugin_list/enable/disable/scan_installed/import_installed/set_enabled/github_direct/github_rebuild/github_save/store_search。

🧭 MDA · CDM · TCT —— 记忆与成本控制

- MDA(Mixing Dialogue Agent)分层: native / workspace 分组 / model 分组(侧边栏 🔀 MDA 分组 里的可折叠树)。
- CDM(CrossDialogueMemory): cdm_list / cdm_search(默认限定在工作区,cross=true 升级到跨区)/ cdm_read —— 取回你在另一段对话里已经想清楚的东西。
- TCT(Temp Chat Tool): det_tct —— 一条提示词,可选预设(review / summary / format / brainstorm),带类型的权限,一条反馈字符串,会话销毁,什么都不留。
- 模型协作(model 分组): mda_card 用 TCT 写某个模型的配置档;mda_activate 把活派给另一个模型(⚠ 很费 token,默认关闭);mda_create_no_workspace_agent 起一个没有工作区的智能体。

📊 DeepSeek 余额 · 价格 · 每轮成本

- 角落状态卡:余额来自 api.deepseek.com/user/balance,每 5 s 刷新一次,可展开看多币种明细和还能撑几天的估算。
- 按模型的价格标签,从官方定价页解析(先取人民币页,美元兜底),在高峰 / 低谷之间切换(北京时间周一至周五 09:00–12:00 与 14:00–18:00 为高峰),缓存 6 h,取不到就用上次的好数据兜底。
- 你当前这段对话的每轮成本。
- 密钥处理: 只由宿主解析(配置 → DSH 凭据接缝 → 环境变量),只存在于请求头里 —— 绝不写入磁盘,绝不记日志,绝不发给客户端。没有 MITM 代理,没有密钥台账,没有遥测。网络只访问 api.deepseek.com 和 api-docs.deepseek.com。

🔧 DLT 集成 —— DLT 的功能,由 DET 托管

DET 可以完全接管 DLT (dsh-light-tool),这样你只跑一个插件,不用跑两个。它自带一份 DLT 引擎的副本(lib/dlt-engine.js + py/),注册同样六个模型工具 —— dlt_env、dlt_run、dlt_build、dlt_doc_read、dlt_doc_write、dlt_doc_convert —— 注入同样的环境/文档系统提示词,并自己渲染同样的三块 UI:

| 组件 | 插槽 | 端点 |
| 每轮费用标签(本轮 ¥x.xx,可展开 token 明细) | conversation.chat.turnTail | dltCost / dltPricingInfo |
| 右侧栏 Word / Excel / CSV 预览 | documentPreviews + sidebar.right.tab.document | dltOffice |
| 输入框 + 旁边的草图按钮(立即绘制 → 图片附件,或在文本模型里给出 PNG 路径) | conversation.input.left | dltDraftSupport / dltDraftSave |

- DET 的总开关打开时,它会声明接管(subordinateGrants().grants.dlt = true)。DLT 随即完全让位:六个工具一个都不注册,提示词段落也不加,费用标签、余额卡片、草图按钮、预览以及它自己的设置页全部撤下。唯一的控制入口变成 设置 → DET 管理器 → DLT 集成(六个分项开关:dltDocs / dltPreview / dltEnv / dltRun / dltCost / dltDraft)。
- 可逆,无需重启: 关掉 DET 的总开关(或设置 det.subordinate.suppress.dlt = false),DLT 会在约 5 秒内收回自己的功能 —— DLT 在启动时以及每 5 秒重新检查一次声明,DET 在每次功能变更时重新检查。
- 不是加载器暂停。 DLT 不在 DET 的全局插件库里,也永远不会像绑定库的插件那样被热卸载;接管是对 ctx.get('dshEssentialTools').subordinateGrants() 的功能性声明。DLT 自己的总开关和 switch.json 照常工作,所以关掉 DET 就能精确恢复你在那里启用的模块。
- 余额和定价仍是 DET 自己的(角落状态卡片 + 价格标签)—— DLT 的余额卡片本来就是重复的那一个;所以集成里没有第二张余额卡片。
- 一行搞定草图导入: 输入框的 ✏ 按钮(在 + 旁边)会打开画布;点 导入 就把画稿以图片形式放进消息里——如果当前模型没有声明 image 输入(dltDraftSupport),DET 会向宿主询问哪些模型支持(dltVisionRoutes),把会话切到其中一个,把 PNG 作为图片草稿附上,并给出一键 切回 <original model>。不调用工具,也不用「自己去读文件」。只有压根没有视觉模型时,才退回到保存 <workspace>/.dsh-drafts/sketch-.png 并粘贴相对路径——而且它会明说。

- 判断是真正实时的(v2.9.4)。 以前有两处会过期,现在都修好了:模型* 现在取自会话投影的 pending ?? lastUsed(你刚在模型选择器里选的那个,而不是已经跑完的上一次请求),客户端 在每次导入时都重新问宿主,而不是复用画布打开时拿到的答案。所以画布开着的时候切换模型,立刻就能看到。「这个模型收不收图片?」只由模型表的 inputModalities 决定;读不到就保守地答「不收」(保存 PNG),而不是等到发送时才失败。

- Sketch 也是独立包:dsh-sketch-draft(v2.9.4)。Sketch 不需要 DET 提供任何东西——只要宿主的 llm / sessions / sessionProjections / attachments——所以它现在独立发布,DET 里的那份是可选的。任何时候只会挂载一个铅笔按钮:DET 在自己的 dltDraft 开启时声明 subordinateGrants().grants.sketchDraft = true,独立包读到这个就让位(它根本不注册槽位)。在这里关掉 dltDraft(或 DET 的总开关),独立包就自动接管——不用重启。

🛡 安全审计 + 网络权限分级

- 可选的执行前审计:每次工具调用都过一次独立的模型审查;高风险调用会被 deny 并记录日志(secCmdAudit、secPromptDefense)。⚠ 每次调用都要付出延迟和 token 代价。
- 网络权限——5 档(输入行内下拉菜单,持久化为 det.webperm):

| 档位 | key | 含义 |
| 禁用网络 | off | 完全无网络 |
| 官方API搜索 | api | 仅 DeepSeek 官方 API(余额/定价需要 ≥1) |
| 搜索API搜索 | search | 搜索 API;通用抓取需要 ≥2 |
| 静默浏览器仿真 | silent | 无头浏览器仿真(读取页面) |
| 使用用户浏览器 | browser | 驱动你的真实浏览器(det_browser 必须用这一档) |

🎛 总开关——一键回到原版 DSH

Settings → DET 管理器打开后,各功能开关上方有一个总开关(det.features.master,默认开启)。
- 关闭 = 完全原生。 DET 只保留两样东西:这个管理页面和开关本身。其余全部卸载——▶🗎🕘🧩🛡 工具栏、角落的余额/费用/MMS 卡片、网络权限控制、VTD 标签页和消息操作、MDA 侧边栏浮层、Global plugins 和 MDA 设置项、所有 det_ / web_ 模型工具和系统提示词注入、安全审计钩子、本地浏览器桥接,以及侧边栏注册表自检。MDA 分组重置为 native。
- DET 管理的插件也会停止——且只停这些。 范围是 Global plugins 库:绑定到加载器条目(通过 scan installed plugins → import,会写入 moduleName)且实际处于开启状态的记录。常驻插件通过加载器热卸载,动态插件的每会话实例被停止。不在库中的插件——例如 dlt,它有自己的设置页面和总开关——归它自己管,永远不会被碰。(这是加载器层面的说法:DLT 的功能仍可通过单独的 subordinateGrants() 声明由 DET 托管——见上文 DLT integration——它从内部抑制 DLT,而不暂停其 fiber。)容器/内置条目(cordis:include,拥有整个 cordis.yml 子树)永远不会被禁用,框架包(@deepseek-ai/)和 DET 本身也不会。
- 停止是经过验证的,不是假设的。 每个目标都会从加载器重新读取并重试一次;任何拒绝停止的都会在管理页面上报告(⚠ 未能停用 + 原因),而不是声称已停止。声称常驻但未绑定到任何加载器条目的库记录会单独列为未停止(det.master.unmanaged),并指向导入操作。停止的集合快照保存在 det.master.paused 中(带 applied 标志),开关重新打开时恢复;常驻插件的浏览器部分只有在页面刷新后才会消失,所以面板提供 刷新前端 按钮,而不是在你背后重新加载页面。
- 开启会恢复全部——包括重新加载总开关停止的插件(常驻插件重新挂载,会话启用记录被恢复,gpSync 会把它们带回来)。各功能开关保留保存的值。开关立即生效并持久化——无需重启,关闭也是可逆的,因为每个注册都作为 disposer 持有。
- 总开关开启时,各功能开关仍像以前一样工作:关闭 plugin manager,所有全局插件被禁用;关闭 MDA,分组恢复为原生。

✅ 指示器跟随现实

Global plugins 列表从不猜测:
- 常驻插件由宿主 loader 上报(只有它决定插件是否挂载),所以 启用/禁用 才是真实状态。如果 DET 记录的意图与 loader 不一致,DET 会修正记录、标记卡片,并显示 fiber 阶段(failed / still loading)。
- 会话状态区分已保存的启用记录与实际运行*:只有运行处于活动状态时才显示「本会话运行中」,否则显示「已启用记录 · 未运行」或「本会话未打开 · 打开后恢复」。面向模型的 det_global_plugin_list 上报的也是同样的实际状态。

🚀 快速开始(60 秒)

环境要求: Windows、DeepSeek Harness 0.1.1-rc.2+、PowerShell、web 配置档(首次运行 dsh web 时自动创建)。

Option A — installer from the clone (recommended: installs + registers the plugin) .\install.ps1 -Profile web

Option B — manual, exactly equivalent
dsh plugin --profile web add dsh-essential-tools

Option C — straight from GitHub (no npm needed)
dsh plugin --profile web add github:LLYlab/DSHEssentialTools

然后重启 DSH。dsh-essential-tools 会出现在 Settings → Plugin inventory 下,并带有自己的 DET 管理器 区块。

包中声明了 dsh.bundle.patch(→ cordis.patch.yml),所以上面三条命令中的任意一条都会自动把插件注册到配置档的 bundle 层——你不需要手动编辑 cordis.patch.yml。下面的手动 insert 只用于直接从源码检出挂载。

手动注册 / 添加项目路径 / 配置参考

追加到 %USERPROFILE%\.dsh\profiles\web\cordis.patch.yml:

- insert:
- id: dsh-essential-tools
name: 'dsh-essential-tools'
config: # optional — only needed for the ▶ run / 🗎 file / 🕘 version tools lvalRoot: 'C:\path\to\project' srcDir: 'C:\path\to\project\src' solution: 'C:\path\to\project\App.slnx' msbuild: 'C:\Program Files\Microsoft Visual Studio\18\Community\MSBuild\Current\Bin\MSBuild.exe' # optional, auto-discovered configuration: 'Debug' platform: 'x64' rollbackTargetDefault: 'minor' bootFailLimit: 2 # consecutive boot failures before auto-disabling all global plugins

config 留空,除项目工具之外的一切仍然可用。

可选:启用浏览器扩展

1. edge://extensions(或 chrome://extensions)→ 启用 Developer mode → Load unpacked → 选择 browser-extension/。
2. 在 DET 中,把 network permission = 使用用户浏览器 (tier 4)。
3. 点击扩展图标并选择模式——先从 只读 开始,需要时再往上调。
4. 让模型在你打开的标签页上工作;在 DET 中观察 浏览器控制 状态区块。

v1 动态加载(仅开发用) cordis_define 配合 plugin/host.js + plugin/client.js,然后 cordis_run。v2(npm)是受支持的路径。

📚 文档

| 文档 | 内容 |
| docs/GUIDE.md | 🧑🏫 用户指导手册 — 安装、首次运行走查、每项功能的分步说明、权限模型、FAQ、故障排查、卸载 |
| docs/DET功能.md | 功能清单:25 个模型工具、75 个端点、8 个 UI 槽位、存储域、权限层级 |
| docs/DET修改.md | 变更/开发日志:改了什么、为什么改 |
| docs/DET运行思路.md | 架构与运行时流程 |
| docs/SECURITY.md | 安全设计、五维审查、已知边界、缓解措施 |
| CHANGELOG.md | 发布历史 |
| ARCHITECTURE.md | 实现层面的架构 |

🔒 一段话讲清安全

插件代码以 DSH 进程的真实权限运行 —— 这不是沙箱,所以只启用你信任的代码(DET 在每次安装前都会大声提醒)。DET 额外做的事:每次主机侧 fetch 都做 SSRF 防护(仅 http/https、URL 里不带凭据、拒绝私有/回环/元数据地址、解析后重新检查 DNS 以阻断 rebinding、手动重定向逐跳重新校验、最多 5 跳)、15 秒超时与 Content-Length 预检、商店安装时做可疑代码扫描并附 commit-SHA 溯源、对 cmd.exe 的 argv 加引号以杜绝参数拆分/注入、浏览器桥接绑定 127.0.0.1 并做来源校验握手,外加扩展侧一道主机无法覆盖的闸门、Full access 之外的浏览器操作走审批路由,以及一条绝不持久化你 API key 的凭据路径。黑名单扫描器只是提示,不是边界;真正的边界是你的审批。

🤝 参与贡献

欢迎在 LLYlab/DSHEssentialTools 提 Issue 和 PR。浏览器扩展必须通过加载未打包版本进行测试;npm 包从不附带它(.npmignore)。

License

MIT © 2026 L2959159224
预览分享卡片长什么样 ↓LLYlab/DSHEssentialTools
分享 · DeepSeek Harness Hub
LLYlab/DSHEssentialTools

DSH 永久插件:LVAL 负责工程运行、代码查看和程序版本快照回退,VTD 提供虚拟对话树(编辑、重试、分支,以及消息小版本),DET 是功能管理器。

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部