从侧边栏或智能体工具重启应用并自动续接原会话
29.5/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add machine202502/dsh-restart该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · browser
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件
查看扫描证据(共 29 处,展示前 21 条)
- 读取本地文件index.js:34
out[name] = createHash('sha256').update(readFileSync(join(profileDir, name))).digest('hex'); - 读取本地文件index.js:56
for (const workspace of readdirSync(root)) { - 读取本地文件index.js:58
for (const name of readdirSync(join(root, workspace))) { - 读取本地文件index.js:78
const parsed = JSON.parse(readFileSync(markerPath(), 'utf8')); - 写入本地文件index.js:86
mkdirSync(dataDir(), { recursive: true }); - 写入本地文件index.js:87
writeFileSync(markerPath(), JSON.stringify(marker, null, 2)); - 删除本地文件index.js:92
rmSync(markerPath(), { force: true }); - 写入本地文件index.js:105
mkdirSync(target, { recursive: true }); - 读取本地文件index.js:108
writeFileSync(join(target, file), readFileSync(join(profileDir, file))); - 写入本地文件index.js:108
writeFileSync(join(target, file), readFileSync(join(profileDir, file))); - 写入本地文件index.js:124
writeFileSync(join(backupRoot(), 'last.json'), JSON.stringify({ - 执行外部命令固定命令index.js:143
const child = spawn('schtasks.exe', args, { windowsHide: true }); - 写入本地文件index.js:152
mkdirSync(dataDir(), { recursive: true }); - 读取本地文件index.js:161
const backup = existsSync(good) ? good : null; - 执行外部命令固定命令index.js:312
const launcher = spawn('/bin/sh', ['-c', script], { detached: true, stdio: 'ignore' }); - 删除本地文件index.js:346
rmSync(watchdogPath(), { force: true }); - 删除本地文件index.js:516
if (failed) rmSync(failedPath(), { force: true }); - 读取本地文件src/settings.js:36
return existsSync(file) ? sanitizeSettings(JSON.parse(readFileSync(file, 'utf8'))) : {}; - 读取本地文件src/settings.js:36
return existsSync(file) ? sanitizeSettings(JSON.parse(readFileSync(file, 'utf8'))) : {}; - 写入本地文件src/settings.js:44
mkdirSync(dataDir, { recursive: true }); - 写入本地文件src/settings.js:45
writeFileSync(file, JSON.stringify(overrides, null, 2));
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
从侧边栏或智能体工具重启 DeepSeek Harness,带看门狗、配置档回滚和自动续跑
README
由 DeepSeek 最新模型翻译生成dsh-restart
从界面或智能体工具重启 DeepSeek Harness,启动后还能继续同一个会话。
功能
| 功能 | 位置 |
| 「重启」按钮 | 侧边栏页脚,账号旁边(电源图标) |
| 确认 | 弹窗,两个按钮,没有多余选项 |
| 智能体工具 | dsh_restart({ fake }),仅用于开发扩展 |
| 继续会话 | 用工具重启会打开会话并写入 [auto.continue] |
重启怎么工作
重启进程不能是应用的子进程:taskkill /T 会把整棵进程树连同它一起杀掉。所以插件:
1. 写入标记文件 %LOCALAPPDATA%\dsh-restart\pending.json;
2. 创建一次性计划任务 DSH-Restart(Windows),附带 helper 脚本;
3. helper 等 1.5 秒,关闭应用的进程树,再等 1.8 秒,启动 .exe,然后删除任务。
macOS/Linux 上改用独立的 sh 进程(kill + open/启动)。
展开完整文档(README 剩余 1 节)
dsh-restart
从界面或智能体工具重启 DeepSeek Harness,启动后还能继续同一个会话。
功能
| 功能 | 位置 |
| 「重启」按钮 | 侧边栏页脚,账号旁边(电源图标) |
| 确认 | 弹窗,两个按钮,没有多余选项 |
| 智能体工具 | dsh_restart({ fake }),仅用于开发扩展 |
| 继续会话 | 用工具重启会打开会话并写入 [auto.continue] |
重启怎么工作
重启进程不能是应用的子进程:taskkill /T 会把整棵进程树连同它一起杀掉。所以插件:
1. 写入标记文件 %LOCALAPPDATA%\dsh-restart\pending.json;
2. 创建一次性计划任务 DSH-Restart(Windows),附带 helper 脚本;
3. helper 等 1.5 秒,关闭应用的进程树,再等 1.8 秒,启动 .exe,然后删除任务。
macOS/Linux 上改用独立的 sh 进程(kill + open/启动)。
自动继续
启动后,客户端通过本地桥 127.0.0.1:49233 读取标记:
GET /claim → { marker } — 原子操作:只有一个客户端能拿到标记 POST /restart → 写入标记并重启 GET /health → 供看门狗判断宿主是否存活 GET /settings → 当前的覆盖配置 POST /settings → 保存覆盖配置(不重启)
标记只会被一次页面加载取走,所以双重初始化不会产生两条消息。用工具重启会以 [auto.continue] 消息恢复会话:客户端打开同一个会话,等输入框就绪,插入文本,再点发送按钮发出(Enter 是备用方案)。侧边栏页脚的按钮不写标记,也不继续会话。
你的草稿不会丢:如果输入框里已经有文字,先临时存到 localStorage,发出 [auto.continue],然后把文字放回输入框(不发送)。消息队列是会话状态,插件不读也不改。
工具
这个工具用于开发和调试 DSH 本身:插件、cordis.patch.yml、配置档。它不用于日常使用、「刷新状态」,也不用于那些不改代码或配置、却需要新进程的调用。
dsh_restart { fake: true }
→ Preflight passed; fake restart requested, nothing was restarted.
不带 fake 时,工具会重启应用,并以 [auto.continue] 消息恢复会话。fake 标志会跑完所有检查,但不重启任何东西,用于测试。如果工具被禁用,从旧记忆里发起的调用会失败,报 unknown tool "dsh_restart"。
插件设置
在 Plugins → Restart → Configure 页面:
| 设置 | 默认值 | 作用 |
| 智能体可调用 dsh_restart 命令 | 开启 | 关闭后工具消失;从旧记忆里发起的调用会失败,报 unknown tool "dsh_restart" |
| 看门狗已启用 | 开启 | 关闭时,重启只会关闭并重新打开应用,不回滚配置档 |
| 看门狗等待,秒 | 10 | 回滚前等待「启动成功」信号多久(1–120) |
覆盖项保存在 %LOCALAPPDATA%\dsh-restart\settings.json;cordis.patch.yml 里的值仍是默认值。保存设置不需要重启:工具会即时注册和注销。
工具何时拒绝执行
dsh_restart 只在「安静」模式下对智能体可用——此时重启不会打扰任何人:
| 检查 | 拒绝信息 |
| 由子代理调用 | dsh_restart is only available to the main agent: a subagent cannot restart the app; do not retry, report the need to the parent agent instead |
| 访问模式不是 Full access | dsh_restart requires the Full access permission preset (current: …) |
| 还有其他会话或子代理在工作 | dsh_restart refused: N other session(s) or subagent(s) are still working (…) |
| 有正在运行的后台任务 | dsh_restart refused: N background job(s) are still running (…) |
检查通过 ctx.permissionPresets.current(agent.session)、ctx.agents.list() 和 ctx.jobs.list(agentId) 进行;「工作中」状态指 running,或智能体的输入队列非空。子代理的标志是 exec.agent.options.subagentDepth(外加 exec.parent)。
界面上的按钮不执行这些检查:何时重启由用户自己决定。
限制
- 托盘和原生 Application 菜单里的菜单项无法由插件添加:托盘和菜单运行在 Electron main 进程,而插件运行在子 host 进程;
- 重启通过 Windows 任务计划程序执行;如果策略禁止创建任务,重启不会生效;
- 此刻正在执行一轮对话的工作区会话会被中断(模态框也会这样提示)。
按钮和工具的行为不同
- dsh_restart(智能体)——总是打开会话并写入 [auto.continue](如果看门狗回滚了配置档,则写入 [auto.continue.failed])。
- 侧边栏的「Restart DeepSeek Harness」按钮——只是重启应用:不创建标记,不继续会话,不发送自动消息。
Cookie 与「Web authentication failed」
每次启动 Desktop Host 都会占用新端口,并为 127.0.0.1 设置 dsh-auth-<random> cookie。Chromium 按主机而非端口存储 cookie,所以旧 cookie 不会被替换,会越积越多。在真实安装环境实测:约 122 个这类 cookie 会让 Cookie 请求头达到约 17.5 KB,超出限制(16 KB),欢迎请求收到 431,应用随即崩溃并报 desktop welcome: Web authentication failed。另外,这些 cookie 的寿命在配置档里有限制:connection.cookieMaxAgeDays: 7。
每次启动前(杀掉应用之后、Start-Process 之前),helper 会运行 src/cookie-clean.py,只删除 127.0.0.1/localhost 的 dsh-auth-* 行。其他 cookie 不动。
如果应用偏偏在问候语这一步崩溃(崩溃日志里有 Web authentication failed),看门狗不会回滚配置档,也不会禁用插件:它会清掉 cookie,再次启动应用,等待健康启动。
看门狗与重启的绑定
每次重启都会拿到一个 token:
dsh_restart → marker { token, sessionId } + watchdog.json { token }
сторож → перед откатом сверяет токен в watchdog.json
старт → хост удаляет watchdog.json (токен аннулирован)
因此看门狗只对触发它的那次重启生效,碰不到之后启动的应用,也碰不到由其他重启启动的应用。
回滚之前,看门狗会把 package.json、cordis.patch.yml、cordis.yml 的 SHA-256 与请求时保存的值比对。如果文件被手动改过,就不执行回滚——视为人已经接手了这些改动。
配置档文件写入时不带 BOM(WriteAllText + UTF8Encoding(false)),否则宿主读不了 package.json。
已知限制:子代理结束后的任务
如果子代理启动了后台任务,然后结束了本轮,DSH 会连同智能体一起删掉这条任务记录,尽管任务本身还在跑。重启前的检查看不到这种任务,也不会因此拒绝重启。
覆盖情况:
| 工作归属 | 能否拒绝 |
| 自己的后台任务 | 能 |
| 子代理或其他会话仍在运行 | 能 |
| 归属者存活期间它们的任务 | 能 |
| 子代理结束本轮后的任务 | 不能 |
原因:任务注册表 ctx.jobs 按智能体 id 索引,智能体销毁时一并清空;jobs.start 包装只看得见经这条路启动的任务,而子代理启动任务走的是另一条路。靠子进程检测并不可靠:应用的服务进程一直在旁边出现又消失。方案暂缓。
安装
npx --yes github:machine202502/dsh-restart
或手动:
"dsh-restart": "github:machine202502/dsh-restart#main"
再把 dsh-restart 加进 dsh.profile.bundles。
安装后需要重启应用(等按钮出来以后,也可以点按钮)。
检查
node tests/smoke.mjs # 工具、检查、fake、桥
node tests/load-client.mjs client.js # 客户端模块能加载并导出 apply
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
machine202502/dsh-restart
从侧边栏或智能体工具重启应用并自动续接原会话
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,928已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目