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

安全模式修复终端 aorucshiea/dsh-safe-tui

DeepSeek Harness
aorucshiea16 天前有提交已提供中文文档扫描:含敏感能力

仍处于开发阶段,存在 bug,下载后请自行承担风险。

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

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add aorucshiea/dsh-safe-tui
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · ui
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 16 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(dependency_conflict · 2026/11/2) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

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

✗npm 包@dsh-external/dsh-safe-tui(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 46 处,展示前 46 条)
  • 删除本地文件递归
    lib/index.js:453
    await rm(dirname(loc.path), { recursive: true, force: true });
  • 删除本地文件递归
    lib/index.js:470
    await rm(dirname(loc.path), { recursive: true, force: true });
  • 执行外部命令固定命令
    lib/index.js:1077
    spawnSync("chcp", ["65001"], { stdio: "ignore" });
  • 发起网络请求
    lib/client.js:63
    await fetch(HOST_BASE + "/console/api/handoff/ack", { method: "POST" });
  • 发起网络请求
    lib/client.js:335
    const response = await fetch(HOST_BASE + "/console/api/handoff", { cache: "no-store" });
  • 读取本地文件
    lib/repair.js:63
    for (const dir of readdirSync(npxCacheRoot)) {
  • 读取本地文件
    lib/repair.js:76
    .filter((file) => existsSync(file));
  • 执行外部命令来自配置/变量
    lib/repair.js:98
    const result = spawnSync(process.execPath, ["--check", file], { encoding: "utf8" });
  • 读取本地文件
    lib/repair.js:106
    return readFileSync(file, "utf8");
  • 读取本地文件
    lib/repair.js:120
    if (!existsSync(a) || !existsSync(b)) return false;
  • 读取本地文件
    lib/repair.js:121
    return readFileSync(a).equals(readFileSync(b));
  • 写入本地文件
    lib/repair.js:130
    copyFileSync(file, backup);
  • 读取本地文件
    lib/repair.js:205
    if (!existsSync(pristine)) {
  • 写入本地文件
    lib/repair.js:216
    copyFileSync(pristine, file);
  • 执行外部命令固定命令
    bin/deepseek.js:10
    const result = spawnSync("dsh.cmd", args, {
  • 读取本地文件
    lib/session-repair.js:225
    const buffer = readFileSync(file)
  • 写入本地文件
    lib/session-repair.js:231
    copyFileSync(file, backup)
  • 写入本地文件
    lib/session-repair.js:234
    writeFileSync(tmp, encodeSessionLog(repaired, zstd))
  • 写入本地文件
    lib/session-repair.js:235
    renameSync(tmp, file)
  • 读取本地文件
    lib/web-console.js:102
    const body = readFileSync(join(VENDOR_DIR, file))
  • 写入本地文件
    lib/web-console.js:129
    mkdirSync(stateDir(), { recursive: true })
  • 写入本地文件
    lib/web-console.js:130
    writeFileSync(handoffPath(), JSON.stringify({
  • 写入本地文件
    lib/web-console.js:141
    mkdirSync(stateDir(), { recursive: true })
  • 写入本地文件
    lib/web-console.js:142
    writeFileSync(handoffPath(), JSON.stringify({
  • 读取本地文件
    lib/web-console.js:153
    if (!existsSync(handoffPath())) return null
  • 读取本地文件
    lib/web-console.js:154
    const body = JSON.parse(readFileSync(handoffPath(), 'utf8'))
  • 执行外部命令来自配置/变量
    lib/web-console.js:169
    const child = spawn(process.execPath, [BRIDGE_PATH], {
  • 读取本地文件
    lib/web-console.js:219
    if (!existsSync(bridgeStatePath())) return null
  • 读取本地文件
    lib/web-console.js:220
    return JSON.parse(readFileSync(bridgeStatePath(), 'utf8'))
  • 发起网络请求
    lib/agent-tools.js:370
    void globalThis.fetch(webBaseUrl(ctx) + "/easy-start/api/restart", { method: "POST" }).catch(() => {});
  • 写入本地文件
    lib/session-lease.js:34
    mkdirSync(LEASE_DIR, { recursive: true })
  • 读取本地文件
    lib/session-lease.js:46
    if (!existsSync(file)) return null
  • 读取本地文件
    lib/session-lease.js:47
    return JSON.parse(readFileSync(file, 'utf8'))
  • 写入本地文件
    lib/session-lease.js:55
    writeFileSync(tmp, JSON.stringify(value), 'utf8')
  • 写入本地文件
    lib/session-lease.js:56
    renameSync(tmp, file)
  • 删除本地文件
    lib/session-lease.js:79
    try { rmSync(file, { force: true }) } catch { }
  • 写入本地文件
    lib/session-lease.js:126
    try { writeFileSync(fd, JSON.stringify(lease), 'utf8') } finally { closeSync(fd) }
  • 删除本地文件
    lib/session-lease.js:147
    try { rmSync(file, { force: true }) } catch { }
  • 写入本地文件
    lib/console-bridge.js:35
    mkdirSync(dirname(BRIDGE_STATE), { recursive: true })
  • 写入本地文件
    lib/console-bridge.js:37
    writeFileSync(BRIDGE_STATE, JSON.stringify({
  • 删除本地文件
    lib/console-bridge.js:47
    try { rmSync(BRIDGE_STATE, { force: true }) } catch { }
  • 读取本地文件
    lib/console-bridge.js:52
    if (!existsSync(BRIDGE_STATE)) return null
  • 读取本地文件
    lib/console-bridge.js:53
    return JSON.parse(readFileSync(BRIDGE_STATE, 'utf8'))
  • 启用终端会话(PTY)
    lib/console-bridge.js:110
    child = pty.spawn(shell, command, {
  • 写入本地文件
    lib/console-bridge.js:168
    mkdirSync(dirname(BRIDGE_STATE), { recursive: true })
  • 写入本地文件
    lib/console-bridge.js:169
    writeFileSync(BRIDGE_STATE, JSON.stringify({
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-headless@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-tools@deepseek-ai/dsh-session-format-catalog
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 安全模式恢复控制台
  • 极简TUI
  • 模型与服务商管理

DeepSeek Harness 安全模式恢复控制台:极简 TUI、历史、修复、模型与服务商管理

README

由 DeepSeek 最新模型翻译生成
仍处于开发阶段,存在 bug,下载后请自行承担风险。 dsh-safe-tui DeepSeek Harness 安全模式 / 修复模式,并可在 DSH Web 中作为「控制台」Tab 使用。 Demo 它是什么 主 Web UI 因为插件/客户端补丁损坏而打不开时,用这个独立的终端可以: - 不加载任何用户插件、不加载 Web UI; - 不发现用户自建预设(includeUserRoot: false),交互上只允许官方系统预设:minimal / standard / code / cordis; - 继承 ~/.dsh/sessions 里的历史会话(/sessions); - 从内置 pristine 副本自动修复已损坏的官方客户端文件(/repair 或独立 Repair 快捷方式)。 定位区别:dsh-safe-tui 是安全模式/修复专用 TUI,不加载用户插件、不加载 Web、只允许官方系统预设(minimal/standard/code/cordis),用于主界面打不开时修复系统。它不是日常体验增强型 TUI(例如社区里的 ccch1mneyyy/dsh-TUI),二者定位不同、可以互补。
展开完整文档(README 剩余 1 节)
仍处于开发阶段,存在 bug,下载后请自行承担风险。

dsh-safe-tui

DeepSeek Harness 安全模式 / 修复模式,并可在 DSH Web 中作为「控制台」Tab 使用。

Demo

它是什么

主 Web UI 因为插件/客户端补丁损坏而打不开时,用这个独立的终端可以:

- 不加载任何用户插件、不加载 Web UI;
- 不发现用户自建预设(includeUserRoot: false),交互上只允许官方系统预设:minimal / standard / code / cordis;
- 继承 ~/.dsh/sessions 里的历史会话(/sessions);
- 从内置 pristine 副本自动修复已损坏的官方客户端文件(/repair 或独立 Repair 快捷方式)。

定位区别:dsh-safe-tui 是安全模式/修复专用 TUI,不加载用户插件、不加载 Web、只允许官方系统预设(minimal/standard/code/cordis),用于主界面打不开时修复系统。它不是日常体验增强型 TUI(例如社区里的 ccch1mneyyy/dsh-TUI),二者定位不同、可以互补。

Web 控制台

自 v0.5.0 起,dsh-safe-tui 还提供 Web Console 模式:

DSH Safe Console in DSH Web

- 在 DSH Web 的 「对话 | 轨迹 | 控制台」 保留「控制台」Tab;点击后从右侧滑出一个可滚动的控制台面板(类似左侧栏)。
- 面板内是一个真正的 xterm.js 终端,后端通过 node-pty 启动 dsh --profile safe。
- 效果和 PowerShell/终端一致,可以完整使用 Safe TUI 的 /sessions、/new、/preset、/repair 等命令。
- Web 对话因插件错误无法加载时,左侧栏仍可用,可直接切到「控制台」继续操作 DSH。
- Safe TUI 会自动修复因强制中断产生的会话日志 seq 重复问题,恢复后可直接继续历史会话。

同会话穿梭(v0.7.0)

控制台默认继续当前 Web 会话:打开右侧「控制台」面板时会自动附上当前 sessionId,后端以 dsh --profile safe --resume <sessionId> 启动 Safe TUI,因此 Web 和 TUI 看到的是同一条对话。

- Web 服务重启后,Safe TUI 由独立的 console-bridge 进程托管,不会跟着 Web 进程一起退出;浏览器重连后会重放终端滚动缓冲,TUI 保持存活。
- AI 可以通过工具自助穿梭/配置:
- console_status — 查看当前 session / model / preset / cwd;
- console_set_model — 切换当前对话模型(Web 侧立即生效,Safe TUI 侧下一步生效并保存默认);
- console_set_preset — 切换当前对话预设(Web/TUI 均可带历史警告切换,并同步默认预设);
- console_handoff — 把当前 Web 会话移交给右侧「控制台」面板(自动打开面板并 resume 同一 session);
- console_return — 从 Safe TUI 请求关闭控制台并回到 Web 对话。
- 控制台面板可关闭;断线后会自动重连。
- 极简 preset 会额外加 agent 级工具掩码,只暴露 pwsh/bash 与 str_replace_editor,与官方极简模式一致。

会话独占锁

Web 与 Safe TUI 是不同进程,而 DSH 的持久化写锁只在单进程内生效。为避免同一会话被两边同时写入导致日志 seq 损坏,本插件在 ~/.dsh/safe-tui/leases/ 维护跨进程租约:

- Web agent 创建时自动持有 web 租约,agent 销毁或 handoff 时释放;
- Safe TUI resume / 发消息前持有 console 租约;Web 未释放时会显示等待提示;
- 进程崩溃后租约通过 PID 存活检查与 heartbeat 超时自动回收。

因此同一会话同一时间只有一个写入方。若控制台一直等待,请让 Web 侧执行 console_handoff 或关闭占用该会话的 Web agent。

使用

桌面已创建两个入口:

- DeepSeek Harness Safe Mode:进入安全终端(现代化全屏 TUI)。
- DeepSeek Harness Repair:只运行修复脚本,不需要 DSH 启动。

也可以手动运行:

deepseek :: 直接进入全屏 TUI
dsh --profile safe
dsh --profile safe "你的问题" :: 一次性问答
dsh --profile safe --list
dsh --profile safe --resume <sessionId>
dsh --profile safe --check
dsh --profile safe --repair
node "%USERPROFILE%\dsh-safe-tui\lib\repair.js" --repair

安全终端内命令:

/help /sessions /sessions all /new /preset [minimal|standard|code|cordis] /models /models <provider/model> /providers /add-provider /status /repair /clean /check /quit

官方系统 preset 的含义:

- minimal — 极简模式:仅持久 bash + str_replace_editor 双工具编码 Agent。
- standard — 标准模式:完整编码 Agent,含文件编辑、Shell、检索、Skills、计划、目标、子代理、工作流。
- code — PTC 模式:标准全部能力 + Code Mode SDK,用 TypeScript 程序组合多步操作。
- cordis — 创造模式:标准全部能力 + 运行时检查、插件实验和 preset 创作指导(可修改/创建 preset)。

- /sessions 采用 OpenCode 风格的 Sessions 选择器:可直接输入过滤,按 Today/Yesterday/日期分组,行尾显示工作区目录,当前会话带 ● 标记;按 Ctrl+X 两次可删除选中会话。
- /clean 或 dsh --profile safe --clean 会删除所有没有 AI 生成内容的空会话。
- 对话生成中按 Ctrl+C 或 Esc 可强制取消当前回合,模型会停止并回到输入状态。
- 在 /preset 选择器中按 i 或 ? 可查看当前高亮预设的详细说明,再按一次收起。
- 输入框为空时,↑ / ↓ 或 PgUp / PgDn 可上下浏览会话历史;输入状态下 ↑ / ↓ 仍为命令历史。
- 模型思考与工具调用默认折叠为一行,按 Ctrl+O 可展开/收起全部详情;鼠标滚轮也可上下滚动历史。
- 可以在已有会话中切换 preset(会提示旧工具调用可能不兼容)。

从插件市场 / GitHub 安装

插件本身是自包含的 DSH bundle,包含 agent-presets + safe-tui,无需手动建 profile:

从 GitHub 安装并初始化 safe profile
dsh plugin --profile safe add github:aorucshiea/dsh-safe-tui#v0.7.0

之后可以直接运行:

dsh --profile safe

或者如果 deepseek 命令可用(npm 安装会自动提供,或把仓库里的 deepseek.cmd 复制到 PATH):

deepseek

deepseek 会直接打开同一个全屏 TUI。

仓库:<https://github.com/aorucshiea/dsh-safe-tui>

关键文件

- cordis.patch.yml — bundle 补丁,挂载 safe-tui 插件。
- lib/index.js — 交互式/一次性安全终端插件。
- lib/repair.js — 无需 DSH 即可独立运行的修复脚本。
- pristine/ — 从官方 0.1.0-rc.6 提取的原始文件,用于恢复。
- ~/.dsh/profiles/safe/ — 安全 profile,只有 dsh-base + dsh-safe-tui。
预览分享卡片长什么样 ↓aorucshiea/dsh-safe-tui
分享 · DeepSeek Harness Hub
aorucshiea/dsh-safe-tui

仍处于开发阶段,存在 bug,下载后请自行承担风险。

这是你的仓库?认领条目

回到顶部