{"_id":"@bit-ark/dsh-restart","name":"@bit-ark/dsh-restart","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@bit-ark/dsh-restart","version":"0.1.0","description":"侧边栏一键重启 dsh web：两步确认后在原终端窗口重启服务（macOS Terminal.app）。","type":"module","main":"index.js","exports":{".":"./index.js","./client":"./client.js","./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"platform":"web"}},"publishConfig":{"access":"public"},"gitHead":"15b5d933965db746722b4e11838fb7a54b1ece9b","_id":"@bit-ark/dsh-restart@0.1.0","_nodeVersion":"24.19.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-247cxo1QvB2ADCj8UB7AwrwfWuzWhCWX+IUoi9jbdhoyscjU/LtX3YVQos/C/bsbbQSZxjEiyTfggUQLkTFz3Q==","shasum":"2859c6ac26c5ce34f93f53b62f0cdb2f90f2a0bd","tarball":"https://registry.npmjs.org/@bit-ark/dsh-restart/-/dsh-restart-0.1.0.tgz","fileCount":5,"unpackedSize":25682,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDN11NuUl4KrrWAHiQXdiQsTpvsSHbEULNSSCaZ0PNAbAIhAOQjdYNrbyaOI51Cj+pgYOJiVGZcrNZtHgy+N+wv4sBy"}]},"_npmUser":{"name":"duan-liang","email":"git@duanliang.com.cn"},"directories":{},"maintainers":[{"name":"duan-liang","email":"git@duanliang.com.cn"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-restart_0.1.0_1787031847338_0.786044529219843"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-18T05:44:07.172Z","0.1.0":"2026-08-18T05:44:07.505Z","modified":"2026-08-18T05:44:07.744Z"},"maintainers":[{"name":"duan-liang","email":"git@duanliang.com.cn"}],"description":"侧边栏一键重启 dsh web：两步确认后在原终端窗口重启服务（macOS Terminal.app）。","readme":"# dsh-restart\n\n设置「服务」页一键重启 dsh web（官方 `settings.section` 插槽，id: service,\norder: 90）：页面显示服务状态（PID / 端口 / 启动目录 / 日志尾部）和「重启\n服务」按钮，两步确认后重启服务，**重启后服务仍在原终端窗口拉起**（macOS\nTerminal.app，复用窗口、不新增不关闭）。\n\n- **状态卡**：GET /service/status 显示当前 PID / 端口 / 平台 / 启动目录 / 日志\n  路径 / 最近日志尾部。\n- **重启按钮**：两步确认（第一次点击变红色「确认重启？」，4 秒后自动复位），\n  第二次点击才真正触发。\n- **重启流程**（宿主路由驱动，全程写日志到 `~/.dsh/restart.log`）：延迟约 4\n  秒让 HTTP 响应先送达 → 终止 3080 上当前服务及其 pnpm 包装进程 → 等端口释放\n  → 通过 osascript 把 `cd <cwd> && pnpm dsh web` 发进**同一个服务终端窗口**\n  （找不到该窗口或 osascript 不可用时回退为 nohup 无终端重启，不另开新窗口）→\n  curl 自检 3080 直到恢复。\n- **提示**：成功/失败优先用 dsh-notify 的 `notifier` toast（特性探测，缺席时\n  页面内提示，功能照常）。\n\n## 结构\n\n```\nindex.js    宿主半：GET /service/status | POST /service/restart（生成并执行\n            ~/.dsh/restart-helper.sh，detached 子进程，杀进程不自杀）\nclient.js   客户端半：settings.section 注册（id: service, order: 90）\ncordis.patch.yml  自带组合层：插入 dsh-restart 行\n```\n\n## 行配置（全部可选，默认贴合现状）\n\n```yaml\nconfig:\n  cwd:      ~/github/deepseek-harness       # 服务启动目录（默认 process.cwd()）\n  command:  pnpm dsh web                    # 重启命令\n  port:     3080                            # 服务端口\n  delayMs:  4000                            # 触发到杀进程的延迟\n  logPath:  ~/.dsh/restart.log              # 重启日志\n```\n\n> `cwd` 支持含空格的路径（生成的助手脚本会做 shell 引号处理）。\n\n## 构建 / 安装\n\n纯 JS 插件无需构建。安装（已完成则跳过；插件已发布到 npm，按名安装即可）：\n\n```sh\npnpm dsh plugin --profile web add @bit-ark/dsh-restart\n```\n\n装完后需重启一次 `dsh web` 让插件加载，之后就能用按钮了。\n\n## 生效方式\n\n- 宿主半改动：重启 `dsh web`（用本插件按钮即可）。\n- 客户端半改动：刷新页面即可（重启更稳妥）。dev:web watcher 不覆盖树外插件。\n- 平台限制：Terminal.app 控制（osascript）仅 macOS；非 macOS 点击按钮会返回\n  明确错误。\n\n## 通用性说明\n\n- 只依赖 harness 公开约定：`webServer` 路由、`settings.section` 插槽、\n  `notifier` 客户端服务（可选）。\n- 安全：重启助手只杀命令匹配 `bin.ts web` / `bin.js web` 的监听者及其 pnpm\n  父进程，绝不杀无关进程；端口未释放则中止。按钮两步确认 + 4 秒防抖 + 重启\n  中防抖；重启触发后 90 秒看门狗：若页面仍存活（服务没真正重启）自动复位并\n  提示查看日志，绝不永久卡在「重启中」。POST 路由只接受 `application/json`\n  （415 围栏，防跨站简单 POST）。\n- 日志：重启前后全部关键步骤写入 `~/.dsh/restart.log`，`GET /service/status`\n  可查看当前 PID 与日志尾部。\n","readmeFilename":"README.md","_rev":"1-499b270b75ab76e13269288b86148956"}