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

守夜人 htfc786/dsh-awake

DeepSeek 客户端v0.2.1
htfc78654 天前有提交已提供中文文档扫描:含敏感能力兼容 / 相关生态

任务执行时阻止电脑休眠,结束后自动恢复

35.8/100
综合分
2
GitHub 星标
113
npm 周下载
—/5
用户评分

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

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/htfc786/dsh-awake.git

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

✓npm 包dsh-awake @ 0.2.1
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 9 处,展示前 9 条)
  • 执行外部命令来自配置/变量
    lib/index.js:82
    const result = spawnSync(command, [...args], {
  • 执行外部命令来自配置/变量
    lib/index.js:104
    return spawnSync(command, [...probeArgs], {
  • 执行外部命令来自配置/变量
    lib/index.js:118
    const watchdog = spawn(process.execPath, [
  • 读取本地文件
    lib/index.js:865
    const raw = JSON.parse(readFileSync(pkgPath, "utf8"));
  • 执行外部命令固定命令
    lib/index.js:1182
    const child = spawn("dsh", [
  • 发起网络请求
    lib/client.js:86
    function makeRpc(fetchImpl = (input, init) => globalThis.fetch(input, init)) {
  • 发起网络请求
    lib/client.js:360
    return await navigator.wakeLock.request("screen");
  • 发起网络请求
    lib/client.js:417
    this.request().then((sentinel) => {
  • 发起网络请求
    lib/client.js:1000
    const meta = await (await fetch(NPM_REGISTRY_URL, { cache: "no-store" })).json();
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

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

功能亮点

  • 任务执行期间阻止休眠
  • 任务结束自动恢复

dsh-awake · 守夜人:在 agent 任务执行期间阻止操作系统休眠

README

由 DeepSeek 最新模型翻译生成
dsh-awake · 守夜人(防休眠插件)v0.2.1 DeepSeek Harness 插件:在 agent 任务执行期间阻止操作系统休眠,任务结束(含出错、中断、取消)后恢复允许休眠。跨平台:Windows / Linux / macOS。 电脑在 dsh 执行任务时自动休眠,会导致任务中断、重启后服务报错、会话数据损坏。 dsh-awake 像守夜人一样盯住任务:任务开始 → 点亮「防休眠」,任务结束 → 熄灭。 v0.2.0 是破坏性重构:方式子系统(平台优先、实现级粒度)、动态配置 schema、单通道数据面(设置页不再碰官方 settings wire)、浏览器 Wake Lock 独立为每浏览器状态(localStorage)、一键更新/重启。0.1.x 旧配置在首次加载时自动迁移。 v0.2.1 修正 DSH 0.1.5-rc 兼容性:数据面从 connection.rpc 专用通道改为 POST /api/dsh-awake 精确路由——旧写法在新版 DSH 上启动即报 cannot get property "webServer" without inject(整棵树加载失败),详见「数据面」一节;同时插件不再声明任何必需服务(headless / tui 档位也能加载)。
展开完整文档(README 剩余 1 节)
dsh-awake · 守夜人(防休眠插件)v0.2.1

DeepSeek Harness 插件:在 agent 任务执行期间阻止操作系统休眠,任务结束(含出错、中断、取消)后恢复允许休眠。跨平台:Windows / Linux / macOS。

电脑在 dsh 执行任务时自动休眠,会导致任务中断、重启后服务报错、会话数据损坏。
dsh-awake 像守夜人一样盯住任务:任务开始 → 点亮「防休眠」,任务结束 → 熄灭。

v0.2.0 是破坏性重构:方式子系统(平台优先、实现级粒度)、动态配置 schema、单通道数据面(设置页不再碰官方 settings wire)、浏览器 Wake Lock 独立为每浏览器状态(localStorage)、一键更新/重启。0.1.x 旧配置在首次加载时自动迁移。

v0.2.1 修正 DSH 0.1.5-rc 兼容性:数据面从 connection.rpc 专用通道改为 POST /api/dsh-awake 精确路由——旧写法在新版 DSH 上启动即报 cannot get property "webServer" without inject(整棵树加载失败),详见「数据面」一节;同时插件不再声明任何必需服务(headless / tui 档位也能加载)。

安装

1. 安装到目标 profile(例如 web)
dsh plugin --profile web add dsh-awake

2. 把仓库根目录的 cordis.patch.yml 里的 - insert: 段追加到 $DSH_HOME/profiles/web/cordis.patch.yml

运行中的 DSH 会热监视 profile 的 cordis.patch.yml:追加配置后立即生效,无需重启。本地开发可用 pnpm add dsh-awake@link:... 直接链接源码目录。

配置格式(v0.2.0)

配置在设置页「防休眠」里热改($DSH_HOME/settings.yaml 持久化)。形状:

dsh-awake:
version: 2 # 配置文件版本:2;有老配置(0.1.x)自动转换 platform: linux # 锚点:上次写入配置的平台(复制 .dsh 到其他系统时识别) mode: systemd # 当前平台选中的方式(= 实现文件名);'off' = 关闭服务端 config: # 该方式的配置;字段由方式自己声明(动态表单),多为空 {} why: 'dsh 任务执行中'

- 宽松 schema:config 是任意对象,键由方式声明、校验在 host 侧——加实现不动 schema。
- 常开防休眠(页面底部开关):一键开启后服务端无论是否有任务运行都持续值守(不等 turn/start)。它是纯内存状态——不写配置文件,宿主重启即失效,每次需要时再开。模式为 off(服务端不值守)时无法开启,开关禁用并提示先选择方式。
- 跨平台复制:配置的 platform 与当前系统不一致时,运行时自动用当前平台默认方式,设置页黄色提示「配置来自 Windows,当前为 Linux…」,不覆盖文件;下次保存时 platform 更新为当前平台。
- mode: 'off':服务端不值守,状态行显示「未启用」,无红色提示(用户主动选择)。
- 插件升级后配置的方式被删除 → 同样兜底到默认方式并提示。

方式清单(platform → order → default)

| 平台 | 方式(实现文件) | 默认 | 原理 |
| Linux | systemd(systemd-inhibit)、gnome-gsettings | systemd | 看门狗进程持锁 / 临时改 GNOME 电源设置 |
| macOS | caffeinate、pmset | caffeinate | 看门狗进程持锁 / 临时改电源设置 |
| Windows | powershell(SetThreadExecutionState)、powercfg | powershell | 看门狗进程持锁 / 临时改电源方案 |

拿锁回退链:首选 = 配置的方式;失败则按平台 order 依次尝试;全部失败 → 服务端未值守,设置页红色列出每个原因。

浏览器 Wake Lock(2.3)

「为当前浏览器开启页面防休眠」是每浏览器状态,走
localStorage['dsh-awake.webWakeLock'](默认开),不进配置文件;与服务端
方式完全独立。有任务在运行且页面可见时持有 navigator.wakeLock,页面切后台自动重取。

设置页

打开 dsh web → 设置 → 防休眠:

[● 后端已连接] [● 值守中 · systemd] [🔄 刷新] ⚠ 配置来自 Windows,当前为 Linux,已使用默认方式 systemd ← stale(黄) ❌ 防休眠未能生效:systemd-inhibit 未找到;… ← 全失败(红) 📦 新版本 v0.3.0(当前 v0.2.1) [一键更新] ← 仅新版时渲染
为当前浏览器开启页面防休眠 [开/关] ← localStorage
插件运行模式 [systemd-inhibit ▾](不可用项 disabled + 原因)
说明:通过 systemd-inhibit 阻止系统休眠,需要 systemd 环境…
阻止原因 [dsh 任务执行中 ] ← 动态表单
🛡 常开防休眠(无论是否有任务都持续值守) [开/关] ← 页面底部一键开关

- 状态行每 5s 轮询;刷新按钮 = 重新探测方式可用性。
- 常开防休眠:页面底部开关,开启后服务端立即值守(无需任务);仅本次运行生效,不写配置文件,宿主重启后恢复关闭;模式为「关闭(off)」时开关禁用并提示先选择方式。
- 更新卡片:npm registry 比对版本,一键更新(dsh plugin update)+ 自动重启生效; DSH Desktop 环境不渲染(更新由桌面版管理)。

开发
pnpm install
pnpm typecheck # tsc 双半
pnpm test # vitest(单测 + 看门狗进程测试 + systemd-inhibit 集成测试)
pnpm build # host → lib/index.js(ESM);client → lib/client.js(ModuleLoader 壳)

工程化对齐 dsh-win-mgr:tsconfig.{base,host,client}.json + tsdown.{host,client}.config.ts
+ vitest;host 打 ESM 单文件,client 打 window.__ModuleLoader__.load CJS 工厂壳(react 系列走页面模块表 external)。

加一个实现 / 平台

- 加实现:src/modes//.ts 导出 WakeMode(fields 声明动态配置字段),在 /index.ts 的 order/modes 注册一行。
- 加平台:src/modes// 目录 + src/modes/index.ts 静态 import 聚合。

数据面

所有设置页数据走 POST /api/dsh-awake(单通道,绕开官方 settings wire 白名单),
请求体 { method, payload }、响应体 RpcResult;端点:awake.status /
awake.refresh / awake.select / awake.alwaysOn / awake.version /
awake.update / awake.restart;错误形状对齐 rpcErrorSchema
({ ok: false, error: { code, message, details } })。

host 半用 connection.fetch.register 注册这条 /api 共享通道的精确路由(官方 file-upload / deliverables / session-log-export 同款扩展点),因此自动沿用 Connection 的 Host/Origin + 浏览器登录栅栏(未登录 = 401)。

为什么不用 connection.rpc.handle(0.2.1 起改) DSH 0.1.5-rc 的 dsh-client-connection 在注册专用通道时会执行
owner.effect(() => owner.webServer.register(route)),而 owner 是「提供方
fiber 的影子上下文」——webServer 于是沿 webserver 条目的 fiber 祖先链解析。
第三方插件的条目与 webserver 条目是兄弟(profile 补丁把每个 bundle 的 insert 行平铺在同一层),祖先链上没有 webServer,于是启动即抛 cannot get property "webServer" without inject 并整棵树加载失败(dsh-pocket 1.16.x 同源问题)。connection.fetch 只碰消费方自己的 fiber,没有这个限制。

迁移(0.1.x → 0.2.0)

旧配置 { enabled, shellWakeLock, powerCfgWakeLock, webWakeLock, why } 在 host
首次加载时识别并自动转换(写回一次,不循环):

- webWakeLock → 浏览器 localStorage(默认开),settings 旧字段删除;
- shellWakeLock / powerCfgWakeLock → mode:只开 powerCfg → 该平台电源类实现(gnome-gsettings / pmset / powercfg),否则 → 平台默认实现;
- why → config.why。

License

MIT
预览分享卡片长什么样 ↓htfc786/dsh-awake
分享 · DeepSeek Harness Hub
htfc786/dsh-awake

任务执行时阻止电脑休眠,结束后自动恢复

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