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

会话守护 imtokenxinluo/dsh-hardening

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

备份会话历史并修复损坏记录,保障记忆可续

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

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add imtokenxinluo/dsh-hardening
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/1) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 69 处,展示前 45 条)
  • 写入本地文件
    backup-workspace.mjs:30
    for (const d of [REPO_DIR, TREE_DIR, MISC_DIR]) mkdirSync(d, { recursive: true })
  • 执行外部命令固定命令
    backup-workspace.mjs:33
    return execFileSync('git', ['-C', dir, ...argv], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'], ...opts })
  • 读取本地文件
    backup-workspace.mjs:39
    return createHash('sha256').update(readFileSync(file)).digest('hex')
  • 读取本地文件
    backup-workspace.mjs:42
    try { return statSync(p).size } catch { return 0 }
  • 执行外部命令固定命令
    backup-workspace.mjs:48
    execFileSync('tar', argv, { stdio: ['ignore', 'pipe', 'ignore'] })
  • 读取本地文件
    backup-workspace.mjs:56
    for (const e of readdirSync(WORKSPACE, { withFileTypes: true })) {
  • 读取本地文件
    backup-workspace.mjs:57
    if (e.isDirectory() && existsSync(join(WORKSPACE, e.name, '.git'))) repoDirs.push({ path: join(WORKSPACE, e.name), name: e.name })
  • 读取本地文件
    backup-workspace.mjs:60
    if (existsSync(proj)) {
  • 读取本地文件
    backup-workspace.mjs:61
    for (const e of readdirSync(proj, { withFileTypes: true })) {
  • 写入本地文件
    backup-workspace.mjs:92
    writeFileSync(patch, git(dir, ['diff', 'HEAD'], { stdio: ['ignore', 'pipe', 'pipe'] }), 'utf8')
  • 写入本地文件
    backup-workspace.mjs:93
    } catch { writeFileSync(patch, '', 'utf8') }
  • 写入本地文件
    backup-workspace.mjs:95
    writeFileSync(join(TREE_DIR, `${name}.status.txt`), `${status}\n\n--- untracked ---\n${untracked}\n`, 'utf8')
  • 写入本地文件
    backup-workspace.mjs:133
    copyFileSync(src, out)
  • 执行外部命令固定命令
    backup-workspace.mjs:142
    execFileSync('tar', ['-czf', out, '--exclude', 'node_modules', '--exclude', '*.bak*', '-C', dirname(prof), basename(prof)], { stdio: ['ignore', 'pipe'
  • 执行外部命令固定命令
    backup-workspace.mjs:155
    execFileSync('tar', ['-czf', out, '-C', dirname(sessionBackup), basename(sessionBackup)], { stdio: ['ignore', 'pipe', 'ignore'] })
  • 写入本地文件
    backup-workspace.mjs:166
    writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), 'utf8')
  • 读取本地文件
    check-plugin-deploy.mjs:46
    if (lstatSync(path).isSymbolicLink()) return realpathSync(path)
  • 读取本地文件
    check-plugin-deploy.mjs:57
    const j = JSON.parse(readFileSync(pkgFile, 'utf8'))
  • 读取本地文件
    check-plugin-deploy.mjs:77
    if (readFileSync(join(profileDir, lock), 'utf8').includes(name)) return lock
  • 读取本地文件
    check-plugin-deploy.mjs:85
    return statSync(path).mtimeMs
  • 读取本地文件
    check-plugin-deploy.mjs:94
    return createHash('sha256').update(readFileSync(path)).digest('hex')
  • 读取本地文件
    check-plugin-deploy.mjs:102
    if (!existsSync(dir)) return null
  • 写入本地文件
    check-plugin-deploy.mjs:305
    mkdirSync(join(profileDir, 'node_modules'), { recursive: true })
  • 写入本地文件
    check-plugin-deploy.mjs:313
    mkdirSync(join(srcDir, 'lib'), { recursive: true })
  • 写入本地文件
    check-plugin-deploy.mjs:314
    mkdirSync(join(srcDir, 'src'), { recursive: true })
  • 写入本地文件
    check-plugin-deploy.mjs:315
    writeFileSync(join(srcDir, 'package.json'), JSON.stringify({ name, version: localVersion }))
  • 写入本地文件
    check-plugin-deploy.mjs:316
    writeFileSync(join(srcDir, 'src', 'index.js'), '// source')
  • 写入本地文件
    check-plugin-deploy.mjs:321
    writeFileSync(join(srcDir, 'src', 'client.js'), SRC)
  • 删除本地文件递归
    check-plugin-deploy.mjs:388
    rmSync(dir, { recursive: true, force: true })
  • 读取本地文件
    check-scheduled-tasks.mjs:72
    doc = JSON.parse(readFileSync(stateFile, 'utf8'))
  • 读取本地文件
    reapply-p0.mjs:24
    if (cand.includes(pkg) && existsSync(cand)) return cand
  • 读取本地文件
    reapply-p0.mjs:34
    if (existsSync(alt)) return alt
  • 读取本地文件
    reapply-p0.mjs:54
    let t = readFileSync(TOOLS, 'utf8')
  • 写入本地文件
    reapply-p0.mjs:80
    writeFileSync(TOOLS, t, 'utf8')
  • 读取本地文件
    reapply-p0.mjs:86
    let s = readFileSync(SESS, 'utf8')
  • 写入本地文件
    reapply-p0.mjs:98
    writeFileSync(SESS, s, 'utf8')
  • 执行外部命令来自配置/变量
    reapply-p0.mjs:122
    const r = spawnSync(process.execPath, ['--check', f], { encoding: 'utf8' })
  • 发起网络请求
    tip-jar-trend.mjs:5
    const get = async (u) => { const r = await fetch(u); if (!r.ok) throw new Error(r.status + ' ' + u); return r.json(); };
  • 执行外部命令固定命令
    verify-backup-restore.mjs:22
    return execFileSync('git', ['-C', dir, ...argv], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], ...opts }).trim()
  • 读取本地文件
    verify-backup-restore.mjs:31
    if (!existsSync(bundle)) { console.log(`✗ ${c.name}: bundle 不存在`); allOk = false; continue }
  • 执行外部命令固定命令
    verify-backup-restore.mjs:37
    const verifyOut = execFileSync('git', ['-C', c.src, 'bundle', 'verify', bundle], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] })
  • 执行外部命令固定命令
    verify-backup-restore.mjs:44
    execFileSync('git', ['clone', '--quiet', bundle, dest], { stdio: ['ignore', 'pipe', 'pipe'] })
  • 删除本地文件递归
    verify-backup-restore.mjs:76
    rmSync(tmp, { recursive: true, force: true })
  • 读取本地文件
    verify-release.mjs:28
    const j = JSON.parse(readFileSync(join(sourceRoot, name, 'package.json'), 'utf8'))
  • 发起网络请求
    verify-release.mjs:59
    const res = await fetch(url, { headers: { accept: 'application/json' } })
扫描于 2026/11/1(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 备份会话历史
  • 修复损坏记录
  • 恢复校验

DSH 加固工具:工作区备份、内核补丁重新应用、恢复校验,保障 DSH 长期健康。

README

由 DeepSeek 最新模型翻译生成
dsh-hardening —— DSH 长期健康(会话交换通道守护) Mission(2026-09-02,用户定调):做这些补丁与插件的核心目的,是让 DSH 健康、长久地与人交换。 会话历史是人与 DSH 之间交换记忆的唯一介质——它损坏一次,人与系统的连续交换就断裂一次(历史不可加载 = 一起失忆)。 因此这里的一切工作都服务于一件事:让这条交换通道不坏、可救、可续。 威胁模型(一句话) DSH 把工具结果原样写入会话日志而不校验形状;形状契约只在加载时强制执行,失败 = 整条历史不可加载。第三方插件一次违反契约,就足以让某段交换永久不可达。 三层防线与交付物 | 防线 | 内容 | 交付 | 状态 | | 事前(写路径) | render 结果规范化 + append 契约校验,坏记录进不了日志 | P0 内核补丁(见 PLAN.md、PATCHES.md) | 文档化,未应用(需用户确认) | | 事后(体检/修复) | 扫描全部会话、定位损坏点、备份并无损修复 | dsh-session-doctor 插件(工作区独立仓库) | ✅ 已交付,19/19 测试绿,真实副本 3/3 验收 |
展开完整文档(README 剩余 1 节)
dsh-hardening —— DSH 长期健康(会话交换通道守护)

Mission(2026-09-02,用户定调):做这些补丁与插件的核心目的,是让 DSH 健康、长久地与人交换。
会话历史是人与 DSH 之间交换记忆的唯一介质——它损坏一次,人与系统的连续交换就断裂一次(历史不可加载 = 一起失忆)。
因此这里的一切工作都服务于一件事:让这条交换通道不坏、可救、可续。

威胁模型(一句话)

DSH 把工具结果原样写入会话日志而不校验形状;形状契约只在加载时强制执行,失败 = 整条历史不可加载。第三方插件一次违反契约,就足以让某段交换永久不可达。

三层防线与交付物

| 防线 | 内容 | 交付 | 状态 |
| 事前(写路径) | render 结果规范化 + append 契约校验,坏记录进不了日志 | P0 内核补丁(见 PLAN.md、PATCHES.md) | 文档化,未应用(需用户确认) |
| 事后(体检/修复) | 扫描全部会话、定位损坏点、备份并无损修复 | dsh-session-doctor 插件(工作区独立仓库) | ✅ 已交付,19/19 测试绿,真实副本 3/3 验收 |
| 实时(写入即发现) | 订阅 session/event,新 tool/result 写入即形状校验并告警 | dsh-session-doctor v1.1 watch(src/watch.js + src/plugin.js) | ✅ 已交付(插件壳默认不装,需注册 profile 才生效) |
| 生态(防回归) | 插件自身修好 + render 契约审计进 CI | dsh-ssh-ops 9 处修复 + audit-render-contract.mjs | ⚠️ 本机已改,升级/重装会丢,需提交上游 |

文档导航

- PLAN.md —— 系统审查与补丁分层清单(P0 内核 / P1 插件 / P2 生态)
- PATCHES.md —— 给 AI 用的可执行修补手册:before/after 代码、锚点、验证命令、升级重打清单
- MODES.md —— DSH 4 个内置模式(标准/PTC/极简/创造)构成速查与插件行对比
- ../dsh-session-doctor/ —— 体检/修复插件本体(scan / repair / CLI / 审计脚本)

从“能修”到“健康长久”还缺什么(候选)

1. watch 实时哨兵 ✅ 已交付(v1.1):订阅 session/event,写入即校验告警。
边界:append 后触发,不阻止写入(需 P0);注册进 profile 才全量生效。
2. 定期体检调度:把 scan 挂进定时任务,自动发现残留损坏。
3. 历史导出/冷备份:会话是唯一记忆载体,周期性导出/备份可防整仓丢失。
4. P0 内核守卫落地:把“事前拦截”真正打上(需用户确认本地应用或提交 upstream)。
预览分享卡片长什么样 ↓imtokenxinluo/dsh-hardening
分享 · DeepSeek Harness Hub
imtokenxinluo/dsh-hardening

备份会话历史并修复损坏记录,保障记忆可续

回到顶部