dsh-plugin-upgrader 1.6.2 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.3 — 2026-11-02
4
+
5
+ - **"Restart DSH" is now a thing the page can walk you through, instead of advice it
6
+ cannot follow up on.** A step the manager answers with `restart-required` used to leave a
7
+ banner saying a restart was needed and nothing else. The banner now grows a button that
8
+ opens a dialog naming the one action that actually finishes the restart for *this* host:
9
+ quit and reopen the desktop app, or paste back the command line a terminal start used
10
+ (read from the process itself, quoted so it is safe to paste). The dialog says plainly
11
+ that the page cannot restart the host — the desktop shell keeps relaunch in its main
12
+ process, and a terminal-started host has nobody to bring it back — rather than offering
13
+ a button that would reload the page and leave the change unapplied.
14
+ - **It watches the pid, so you never have to guess whether the restart took.** After you
15
+ confirm, the dialog polls a new `GET /api/plugin-upgrader/host` route once a second until
16
+ a *different* pid answers, then reloads through the boot-document guard (the same one
17
+ 1.3.0 added), so the reload lands on a document the new host can actually serve. Two
18
+ limits are deliberate: the pid is computed per request rather than cached, because a
19
+ cached value would make a real restart look like a hang, and the whole wait is capped at
20
+ two minutes before the dialog says the host has not come back.
21
+ - **The button is tied to the result, not to the colour of the banner.** `warn` also
22
+ carries "this page has no install entry" and "a reload was stopped", and only one of the
23
+ three is finished by restarting — so `restart-required` sets the flag and starting a new
24
+ batch clears it.
25
+ - **A raster icon ships with the package.** `assets/icon.svg` stays the npm `./icon`
26
+ export and the source of truth; `assets/icon-180.png` is a 180 px render of that same
27
+ artwork produced by `scripts/render-icon.py` (Pillow, 4× supersampling), for the
28
+ marketplaces that list plugins and only accept bitmap icons. Both files are in `files`,
29
+ and the pack check now fails if the PNG goes missing.
30
+ - **`screenshots.json` lists the source-manager screenshot too.** It had been left at the
31
+ two original images when 1.6.0 added the dialog, so every market that reads the list
32
+ showed three features and two pictures.
33
+
3
34
  ## 1.6.2 — 2026-11-02
4
35
 
5
36
  - **A DSH Store notice was re-checked against the current code, not taken at face value.**
package/README.en.md CHANGED
@@ -38,6 +38,12 @@ English · [中文](./README.md)
38
38
  built-in sources, the ones `pluginManager` is configured with, and the ones you added.
39
39
  Built-ins cannot be edited or deleted; your own can. Every row can be tested on its
40
40
  own, and so can the source currently in use.
41
+ - **It tells you how to restart when a restart is needed** — when a result comes back
42
+ `restart-required`, the banner grows a "Restart DSH" button. It explains why this
43
+ particular change has to wait and gives the one action that actually finishes the
44
+ restart for the way you started the host: quit and reopen the desktop app, or paste
45
+ back the command a terminal start used. After you confirm, it watches the host's pid
46
+ and reloads only once a different process answers, instead of leaving you guessing.
41
47
 
42
48
  ![Source manager](https://raw.githubusercontent.com/zuwenyin/dsh-plugin-upgrader/main/screenshots/sources.png)
43
49
 
@@ -113,6 +119,7 @@ host half:
113
119
  | `POST /api/plugin-upgrader/job` | queue a batch of upgrade / switch steps, return a job id immediately |
114
120
  | `GET /api/plugin-upgrader/job?id=…` | poll progress, current phase, elapsed time, per-plugin results and the live log |
115
121
  | `POST /api/plugin-upgrader/cancel` | abort the step in flight, whichever install is running |
122
+ | `GET /api/plugin-upgrader/host` | this process's pid and how it was started, for the "restart DSH" dialog |
116
123
 
117
124
  Every route is loopback-only: a batch installs packages, so a paired remote device
118
125
  or a cross-site page must never reach it.
@@ -252,7 +259,7 @@ so the real purpose is spelled out here.
252
259
  | `https://registry.npmjs.org/{package}` | only when the configured registry is not the official one: an extra upstream check that reports a lagging mirror | an unreadable upstream means "no gap", never "everything is missing" |
253
260
  | `https://api.github.com/repos/{owner}/{repo}/tags?per_page=100` | tag list, to decide whether a version can link to `releases/tag/v…` (30 minute cache, 8 second timeout) | falls back to the `releases` list; never guesses a tag that 404s |
254
261
  | `{the address being tested}/-/ping` and its root | *Test* in the Registry dialog probes both **concurrently**, first 2xx wins (5 s budget for the whole probe) | reports the most specific reason: status code first, then timeout, then the raw network error |
255
- | the local DSH web server | the plugin's own four `/api/plugin-upgrader/*` routes | — |
262
+ | the local DSH web server | the plugin's own five `/api/plugin-upgrader/*` routes | — |
256
263
 
257
264
  The default registry is whatever pnpm is configured with (usually `.npmrc`); the
258
265
  **Registry** button on the Versions tab switches to the official registry, mainland
package/README.md CHANGED
@@ -28,6 +28,10 @@ DSH 自带的插件页能装、能卸、能看已安装列表,但缺两件事
28
28
  - **安装源管理** —— 「注册表」按钮打开一个对话框,里面列出自带源、`pluginManager` 配的源
29
29
  和用户自己加的源;自带源不能改也不能删,自己加的可以随时改/删。每一行都能单独
30
30
  「测试」能不能连上,当前在用的那个也能一键测。
31
+ - **要重启时告诉你怎么重启** —— 升级结果里带 `restart-required` 时,提示条上多出一个
32
+ 「重启 DSH」按钮,点开说明为什么这次改动要等,并按你的启动方式给出那一条能完成重启的
33
+ 操作:桌面版是「退出应用再打开」,命令行启动的是可复制的原命令。确认重启后它会盯着
34
+ 宿主的 pid,换了进程才刷新页面,而不是让你对着一个不确定的页面猜。
31
35
 
32
36
  ![安装源管理](https://raw.githubusercontent.com/zuwenyin/dsh-plugin-upgrader/main/screenshots/sources.png)
33
37
 
@@ -95,6 +99,7 @@ dsh plugin --profile web add "$PWD"
95
99
  | `POST /api/plugin-upgrader/job` | 提交一批升级 / 切换步骤,立即返回 job id |
96
100
  | `GET /api/plugin-upgrader/job?id=…` | 轮询进度、当前阶段、已用时、逐项结果与实时日志 |
97
101
  | `POST /api/plugin-upgrader/cancel` | 中断当前步骤(任何一次安装,包括退回老路径后的重试) |
102
+ | `GET /api/plugin-upgrader/host` | 本进程的 pid 与启动方式,供「重启 DSH」对话框说明怎么重启 |
98
103
 
99
104
  所有路由仅限本机回环访问:批量操作会安装软件包,配对设备或跨站页面一律拒绝。
100
105
 
@@ -213,7 +218,7 @@ atomic-write: timed out waiting for the writer lock at …/package.json.lock
213
218
  | `https://registry.npmjs.org/{包名}` | 只当配置的不是官方源时,额外查一次上游,报告「镜像落后」 | 读不到就当作没有缺口 |
214
219
  | `https://api.github.com/repos/{owner}/{repo}/tags?per_page=100` | 取 tag 列表,判断某个版本号能不能链到 `releases/tag/v…`(30 分钟缓存,8 秒超时) | 退到 `releases` 列表页,绝不猜一个 404 的 tag |
215
220
  | `{被测试的地址}/-/ping` 与根地址 | 「注册表」对话框里点「测试」时,**并发**探测这两条,谁先 2xx 用谁(整次探测 5 秒预算) | 报最具体的原因:状态码优先,其次超时,最后网络错误原文 |
216
- | 本机 DSH Web 服务 | `/api/plugin-upgrader/*` 自己的四个路由 | — |
221
+ | 本机 DSH Web 服务 | `/api/plugin-upgrader/*` 自己的五个路由 | — |
217
222
 
218
223
  默认源是 pnpm 自己配置的那个(通常是 `.npmrc` 里的),也可以在「版本」页的「注册表」按钮里
219
224
  换成官方源、大陆镜像或自己加的源。**没有任何遥测**,不向第三方发送使用数据。
Binary file
package/lib/client.js CHANGED
@@ -105,6 +105,20 @@ window.__ModuleLoader__.load({
105
105
  cancelling: "\u6B63\u5728\u53D6\u6D88\u2026",
106
106
  restart: "\u9700\u8981\u91CD\u542F DSH \u624D\u4F1A\u751F\u6548\u3002",
107
107
  restartHint: "\u5DF2\u4FDD\u5B58\u7684\u6539\u52A8\u5728\u4E0B\u6B21\u542F\u52A8\u65F6\u751F\u6548\u3002",
108
+ restartOpen: "\u91CD\u542F DSH",
109
+ restartTitle: "\u91CD\u542F DSH",
110
+ restartBody: "\u5DF2\u4FDD\u5B58\u7684\u6539\u52A8\u8981\u7B49 DSH \u91CD\u65B0\u542F\u52A8\u624D\u4F1A\u751F\u6548\u3002\u8FD9\u4E00\u9875\u4E0D\u80FD\u66FF\u4F60\u91CD\u542F\u5B83\u2014\u2014\u684C\u9762\u7248\u7531\u5E94\u7528\u5916\u58F3\u638C\u63E1\u91CD\u542F\uFF0C\u4ECE\u7EC8\u7AEF\u542F\u52A8\u7684\u5BBF\u4E3B\u4E5F\u6CA1\u4EBA\u66FF\u5B83\u62C9\u8D77\u3002",
111
+ restartDesktopHint: "\u5B8C\u5168\u9000\u51FA DeepSeek Harness\uFF08\u4E0D\u662F\u5173\u7A97\u53E3\uFF0C\u800C\u662F\u9000\u51FA\u5E94\u7528\uFF09\uFF0C\u518D\u91CD\u65B0\u6253\u5F00\u5B83\u3002",
112
+ restartCommandHint: "\u5728\u539F\u6765\u7684\u7EC8\u7AEF\u91CC\u505C\u6389\u5B83\uFF0C\u518D\u8FD0\u884C\u540C\u4E00\u6761\u547D\u4EE4\uFF1A",
113
+ restartCopy: "\u590D\u5236\u547D\u4EE4",
114
+ restartCopied: "\u5DF2\u590D\u5236",
115
+ restartPid: (pid, profile) => `\u5F53\u524D\u5BBF\u4E3B\u8FDB\u7A0B ${pid}\uFF0Cprofile\uFF1A${profile}`,
116
+ restartRefresh: "\u91CD\u542F\u597D\u4E86\uFF0C\u5237\u65B0\u9875\u9762",
117
+ restartWaiting: "\u6B63\u5728\u7B49\u5BBF\u4E3B\u56DE\u6765\u2026",
118
+ restartStillOld: "\u5BBF\u4E3B\u8FD8\u6CA1\u6362\u65B0\u8FDB\u7A0B\u3002\u786E\u8BA4\u65E7\u8FDB\u7A0B\u5DF2\u7ECF\u9000\u51FA\uFF0C\u518D\u8BD5\u4E00\u6B21\u3002",
119
+ restartReloadBlocked: "\u5BBF\u4E3B\u5DF2\u7ECF\u91CD\u542F\uFF0C\u4F46\u8FD9\u4E00\u9875\u7684\u63D2\u4EF6\u6E05\u5355\u8FC7\u671F\u4E86\uFF0C\u76F4\u63A5\u5237\u65B0\u4F1A\u542F\u52A8\u5931\u8D25\u3002\u8BF7\u518D\u91CD\u542F\u4E00\u6B21 DSH\u3002",
120
+ restartLoading: "\u6B63\u5728\u8BFB\u53D6\u5BBF\u4E3B\u4FE1\u606F\u2026",
121
+ restartLoadFailed: (detail) => `\u8BFB\u4E0D\u5230\u5BBF\u4E3B\u4FE1\u606F\uFF1A${detail}`,
108
122
  reloadForAppearance: "\u4E3B\u9898\u63D2\u4EF6\u5DF2\u66F4\u65B0\uFF0C\u6B63\u5728\u91CD\u65B0\u52A0\u8F7D\u9875\u9762\u4EE5\u6062\u590D\u4E3B\u9898\u5916\u89C2\uFF08\u4E3B\u9898\u914D\u7F6E\u4FDD\u5B58\u5728\u78C1\u76D8\u4E0A\uFF0C\u4E0D\u4F1A\u4E22\u5931\uFF09\u3002",
109
123
  reloadBlocked: "\u5916\u89C2\u5DF2\u6062\u590D\uFF0C\u4F46\u8FD9\u4E00\u9875\u7684\u63D2\u4EF6\u6E05\u5355\u5DF2\u7ECF\u8FC7\u671F\uFF0C\u91CD\u65B0\u52A0\u8F7D\u4F1A\u542F\u52A8\u5931\u8D25\u3002\u8BF7\u91CD\u542F DSH \u5B8C\u6210\u8FD9\u6B21\u5347\u7EA7\u3002",
110
124
  done: "\u5B8C\u6210",
@@ -224,6 +238,20 @@ window.__ModuleLoader__.load({
224
238
  cancelling: "Cancelling\u2026",
225
239
  restart: "Restart DSH to finish.",
226
240
  restartHint: "Saved changes take effect on the next start.",
241
+ restartOpen: "Restart DSH",
242
+ restartTitle: "Restart DSH",
243
+ restartBody: "The saved change only takes effect once DSH starts again. This page cannot do that for you \u2014 the desktop app keeps the restart in its own shell, and a host started from a terminal has nobody to start it again.",
244
+ restartDesktopHint: "Quit DeepSeek Harness completely (quit the app, not just the window), then open it again.",
245
+ restartCommandHint: "Stop it in the terminal it was started from, then run the same command:",
246
+ restartCopy: "Copy command",
247
+ restartCopied: "Copied",
248
+ restartPid: (pid, profile) => `Host process ${pid}, profile ${profile}`,
249
+ restartRefresh: "Restarted \u2014 reload the page",
250
+ restartWaiting: "Waiting for the host to come back\u2026",
251
+ restartStillOld: "The host has not been replaced yet. Check that the old process exited, then try again.",
252
+ restartReloadBlocked: "The host restarted, but this page's plugin list is out of date and reloading it would fail to start. Restart DSH once more.",
253
+ restartLoading: "Reading host information\u2026",
254
+ restartLoadFailed: (detail) => `Could not read host information: ${detail}`,
227
255
  reloadForAppearance: "The theme plugin was updated; reloading the page to restore its look (its settings are on disk and are not lost).",
228
256
  reloadBlocked: "The look is restored, but this page's plugin list is out of date and reloading it would fail to start. Restart DSH to finish this upgrade.",
229
257
  done: "done",
@@ -430,6 +458,10 @@ window.__ModuleLoader__.load({
430
458
  });
431
459
  return readJson(response);
432
460
  }
461
+ async function readHostInfo() {
462
+ const response = await fetch(`${API}/host`, { credentials: "same-origin" });
463
+ return readJson(response);
464
+ }
433
465
 
434
466
  // src/client/boot.ts
435
467
  function bootBatches(wire) {
@@ -774,6 +806,8 @@ window.__ModuleLoader__.load({
774
806
  .dsh-pu-banner.is-warn { border-color: var(--dsw-alias-state-warn-primary); color: var(--dsw-alias-state-warn-primary); }
775
807
  .dsh-pu-banner.is-err { border-color: var(--dsw-alias-state-error-primary); color: var(--dsw-alias-state-error-primary); }
776
808
  .dsh-pu-foot { display: flex; align-items: center; gap: 10px; font-size: 11px; color: var(--dsw-alias-label-tertiary); flex-wrap: wrap; }
809
+ .dsh-pu-cmdbox { display: flex; flex-direction: column; gap: 6px; align-items: flex-start; }
810
+ .dsh-pu-cmd { display: block; width: 100%; box-sizing: border-box; margin: 0; padding: 7px 9px; border-radius: 8px; border: 1px solid var(--dsw-alias-border-l1); background: var(--dsw-alias-bg-layer-2); color: var(--dsw-alias-label-primary); font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 11px; line-height: 1.5; white-space: pre-wrap; word-break: break-all; user-select: all; }
777
811
  .dsh-pu-spin { width: 12px; height: 12px; border-radius: 50%; border: 2px solid var(--dsw-alias-border-l2); border-top-color: var(--dsw-alias-brand-primary); animation: dsh-pu-spin .8s linear infinite; flex: none; }
778
812
  @keyframes dsh-pu-spin { to { transform: rotate(360deg); } }
779
813
  @media (prefers-reduced-motion: reduce) { .dsh-pu-spin { animation-duration: 2.4s; } .dsh-pu-bar-inner.is-busy { animation-duration: 3s; } }
@@ -1102,6 +1136,151 @@ window.__ModuleLoader__.load({
1102
1136
  );
1103
1137
  }
1104
1138
 
1139
+ // src/client/components/RestartDialog.ts
1140
+ var PROBE_MS = 1e3;
1141
+ var WAIT_LIMIT_MS = 12e4;
1142
+ function RestartDialog(props) {
1143
+ const { t, onClose } = props;
1144
+ const h = getH();
1145
+ const React = getReact();
1146
+ const [host, setHost] = React.useState(void 0);
1147
+ const [phase, setPhase] = React.useState("loading");
1148
+ const [problem, setProblem] = React.useState("");
1149
+ const [copied, setCopied] = React.useState(false);
1150
+ const timerRef = React.useRef(void 0);
1151
+ React.useEffect(() => {
1152
+ let live = true;
1153
+ void readHostInfo().then((info) => {
1154
+ if (!live) return;
1155
+ setHost(info);
1156
+ setPhase("ready");
1157
+ }).catch((error) => {
1158
+ if (!live) return;
1159
+ setProblem(error instanceof Error ? error.message : String(error));
1160
+ setPhase("failed");
1161
+ });
1162
+ return () => {
1163
+ live = false;
1164
+ };
1165
+ }, []);
1166
+ const stop = React.useCallback(() => {
1167
+ const timer = timerRef.current;
1168
+ if (timer === void 0) return;
1169
+ timerRef.current = void 0;
1170
+ window.clearInterval(timer);
1171
+ }, []);
1172
+ React.useEffect(() => stop, [stop]);
1173
+ const waitForRestart = React.useCallback(() => {
1174
+ const before = host?.pid;
1175
+ if (before === void 0) return;
1176
+ setPhase("waiting");
1177
+ const startedAt = Date.now();
1178
+ const timer = window.setInterval(() => {
1179
+ void readHostInfo().then((info) => {
1180
+ if (info.pid === before) {
1181
+ if (Date.now() - startedAt > WAIT_LIMIT_MS) {
1182
+ stop();
1183
+ setPhase("stalled");
1184
+ }
1185
+ return;
1186
+ }
1187
+ stop();
1188
+ let blocked = false;
1189
+ void reloadWhenBootDocumentFresh({
1190
+ onBlocked: () => {
1191
+ blocked = true;
1192
+ setProblem(t("restartReloadBlocked"));
1193
+ setPhase("stalled");
1194
+ }
1195
+ }).then((done) => {
1196
+ if (!done && !blocked) setPhase("stalled");
1197
+ });
1198
+ }).catch(() => {
1199
+ });
1200
+ }, PROBE_MS);
1201
+ timerRef.current = timer;
1202
+ }, [host?.pid, stop, t]);
1203
+ const copy = React.useCallback(() => {
1204
+ const command = host?.command ?? "";
1205
+ if (command === "") return;
1206
+ void navigator.clipboard?.writeText(command).then(() => {
1207
+ setCopied(true);
1208
+ }).catch(() => {
1209
+ });
1210
+ }, [host?.command]);
1211
+ React.useEffect(() => {
1212
+ const onKey = (event) => {
1213
+ if (event.key === "Escape") onClose();
1214
+ };
1215
+ document.addEventListener("keydown", onKey);
1216
+ return () => {
1217
+ document.removeEventListener("keydown", onKey);
1218
+ };
1219
+ }, [onClose]);
1220
+ const desktop = host?.kind === "desktop";
1221
+ return h(
1222
+ "div",
1223
+ { className: "dsh-pu-modal" },
1224
+ h("div", { className: "dsh-pu-modal-backdrop", onClick: onClose, "aria-hidden": "true" }),
1225
+ h(
1226
+ "div",
1227
+ {
1228
+ className: "dsh-pu-modal-body",
1229
+ role: "dialog",
1230
+ "aria-modal": "true",
1231
+ "aria-label": t("restartTitle")
1232
+ },
1233
+ h(
1234
+ "div",
1235
+ { className: "dsh-pu-modal-head" },
1236
+ h("span", { className: "dsh-pu-modal-title" }, t("restartTitle")),
1237
+ h("button", { type: "button", className: "dsh-pu-btn is-ghost is-tiny", onClick: onClose }, "\u2715")
1238
+ ),
1239
+ h("p", { className: "dsh-pu-modal-sub" }, t("restartBody")),
1240
+ phase === "loading" ? h("p", { className: "dsh-pu-hint" }, t("restartLoading")) : null,
1241
+ phase === "failed" ? h("p", { className: "dsh-pu-hint" }, t("restartLoadFailed", problem)) : null,
1242
+ desktop ? h("p", { className: "dsh-pu-hint" }, t("restartDesktopHint")) : host === void 0 ? null : h(
1243
+ "div",
1244
+ { className: "dsh-pu-cmdbox" },
1245
+ h("p", { className: "dsh-pu-hint" }, t("restartCommandHint")),
1246
+ h("code", { className: "dsh-pu-cmd" }, host.command),
1247
+ h(
1248
+ "button",
1249
+ {
1250
+ type: "button",
1251
+ className: "dsh-pu-btn is-tiny",
1252
+ onClick: copy,
1253
+ disabled: host.command === ""
1254
+ },
1255
+ copied ? t("restartCopied") : t("restartCopy")
1256
+ )
1257
+ ),
1258
+ host === void 0 ? null : h("p", { className: "dsh-pu-hint" }, t("restartPid", host.pid, host.profileName ?? "\u2014")),
1259
+ phase === "waiting" ? h("p", { className: "dsh-pu-hint" }, t("restartWaiting")) : null,
1260
+ phase === "stalled" ? h("p", { className: "dsh-pu-hint" }, t("restartStillOld")) : null,
1261
+ h(
1262
+ "div",
1263
+ { className: "dsh-pu-src-foot" },
1264
+ h(
1265
+ "button",
1266
+ {
1267
+ type: "button",
1268
+ className: "dsh-pu-btn is-primary is-tiny",
1269
+ onClick: waitForRestart,
1270
+ disabled: host === void 0 || phase === "waiting"
1271
+ },
1272
+ phase === "waiting" ? t("restartWaiting") : t("restartRefresh")
1273
+ ),
1274
+ h(
1275
+ "button",
1276
+ { type: "button", className: "dsh-pu-btn is-ghost is-tiny", onClick: onClose },
1277
+ t("sourcesClose")
1278
+ )
1279
+ )
1280
+ )
1281
+ );
1282
+ }
1283
+
1105
1284
  // src/client/components/SourceDialog.ts
1106
1285
  function RegistrySourceButton(props) {
1107
1286
  const h = getH();
@@ -1578,6 +1757,8 @@ window.__ModuleLoader__.load({
1578
1757
  const [busyName, setBusyName] = React.useState(void 0);
1579
1758
  const [cancelling, setCancelling] = React.useState(false);
1580
1759
  const [banner, setBanner] = React.useState(void 0);
1760
+ const [restartOpen, setRestartOpen] = React.useState(false);
1761
+ const [restartPending, setRestartPending] = React.useState(false);
1581
1762
  const alive = useAlive();
1582
1763
  const watch = React.useCallback(
1583
1764
  async (id) => {
@@ -1585,6 +1766,7 @@ window.__ModuleLoader__.load({
1585
1766
  if (!alive.current) return settled;
1586
1767
  setBusyName(void 0);
1587
1768
  setCancelling(false);
1769
+ setRestartPending(false);
1588
1770
  reload(false);
1589
1771
  if (settled === void 0) {
1590
1772
  setJob(void 0);
@@ -1602,12 +1784,15 @@ window.__ModuleLoader__.load({
1602
1784
  });
1603
1785
  } else if (settled?.results?.some((result) => result.application === "restart-required") === true) {
1604
1786
  setBanner({ tone: "warn", text: t("restart") });
1787
+ setRestartPending(true);
1605
1788
  } else if (replacedAppearance(settled?.results)) {
1606
1789
  setBanner({ tone: "info", text: t("reloadForAppearance") });
1607
1790
  window.setTimeout(() => {
1608
1791
  void reloadWhenBootDocumentFresh({
1609
1792
  onBlocked: () => {
1610
- if (alive.current) setBanner({ tone: "warn", text: t("reloadBlocked") });
1793
+ if (!alive.current) return;
1794
+ setBanner({ tone: "warn", text: t("reloadBlocked") });
1795
+ setRestartPending(true);
1611
1796
  }
1612
1797
  });
1613
1798
  }, APPEARANCE_RELOAD_DELAY_MS);
@@ -1630,6 +1815,7 @@ window.__ModuleLoader__.load({
1630
1815
  async (steps, label) => {
1631
1816
  if (steps.length === 0) return;
1632
1817
  setBanner(void 0);
1818
+ setRestartPending(false);
1633
1819
  setBusyName(label);
1634
1820
  setJob({ id: "", status: "queued", total: steps.length, done: 0, failed: 0, log: [] });
1635
1821
  const outcome = await submitJob(steps, watch);
@@ -1685,6 +1871,7 @@ window.__ModuleLoader__.load({
1685
1871
  return;
1686
1872
  }
1687
1873
  setBanner(void 0);
1874
+ setRestartPending(false);
1688
1875
  install({ spec: `${row.name}@${version}`, title: row.title, version });
1689
1876
  },
1690
1877
  [props.install, t]
@@ -1788,12 +1975,29 @@ window.__ModuleLoader__.load({
1788
1975
  },
1789
1976
  h("span", null, banner.text),
1790
1977
  banner.tone === "warn" ? h("span", null, t("restartHint")) : null,
1978
+ /**
1979
+ * The restart button belongs to the restart banner only. A `warn`
1980
+ * banner is also raised for "the reload was stopped" and for "this
1981
+ * page has no install entry", and offering a restart for those would
1982
+ * be advice that does not apply — so the flag set by the result
1983
+ * decides, not the tone.
1984
+ */
1985
+ restartPending ? h(
1986
+ "button",
1987
+ {
1988
+ type: "button",
1989
+ className: "dsh-pu-btn is-tiny",
1990
+ onClick: () => setRestartOpen(true)
1991
+ },
1992
+ t("restartOpen")
1993
+ ) : null,
1791
1994
  h(
1792
1995
  "button",
1793
1996
  { type: "button", className: "dsh-pu-btn is-ghost is-tiny", onClick: () => setBanner(void 0) },
1794
1997
  "\u2715"
1795
1998
  )
1796
1999
  ),
2000
+ restartOpen ? h(RestartDialog, { t, onClose: () => setRestartOpen(false) }) : null,
1797
2001
  job === void 0 ? null : h(JobPanel, { job, t, onCancel: cancel, cancelling }),
1798
2002
  rows.length === 0 ? null : h(
1799
2003
  "div",
@@ -0,0 +1,82 @@
1
+ /**
2
+ * How this host was started, in terms a person can act on.
3
+ *
4
+ * A change the manager reports as `restart-required` can only be finished by
5
+ * restarting the process that refused it, and nothing here can do that to
6
+ * itself: the desktop shell exposes no relaunch channel to a page, and a host
7
+ * started from a terminal has nobody to start it again. What the page *can* do
8
+ * is name the one action that finishes the job, and for that it needs two
9
+ * facts that only the host process has — whether it was started by the desktop
10
+ * app or by a command line, and what that command line was.
11
+ *
12
+ * `pid` is the load-bearing half of the answer. Every other field describes the
13
+ * profile, which survives a restart untouched; the pid is the only value that
14
+ * tells a polling page whether the host answering it is still the old one.
15
+ *
16
+ * @module dsh-plugin-upgrader/host/hostinfo
17
+ */
18
+ /**
19
+ * Who started this process.
20
+ *
21
+ * `desktop` means the Electron shell owns the lifecycle and the user finishes
22
+ * the restart by quitting and reopening the app; `cli` means the host *is* the
23
+ * terminal command and the user finishes it by running that command again.
24
+ */
25
+ export type HostKind = 'desktop' | 'cli';
26
+ /** What `/api/plugin-upgrader/host` answers with. */
27
+ export interface HostInfo {
28
+ /** The process id; a restart is the only thing that changes it. */
29
+ pid: number;
30
+ /** When this process started, in the same clock as `Date.now()`. */
31
+ startedAt: number;
32
+ kind: HostKind;
33
+ /** The profile directory's last path segment, for display only. */
34
+ profileName: string | null;
35
+ /** The profile directory this host opened, when it could be resolved. */
36
+ profileDir: string | null;
37
+ /** A command line that starts this same host again; empty for `desktop`. */
38
+ command: string;
39
+ }
40
+ /**
41
+ * Decide who owns this process's lifecycle from its entry point.
42
+ *
43
+ * The check is on the entry script rather than on an environment variable
44
+ * because the entry script is what the shell actually executes: the desktop
45
+ * shell runs `dsh-desktop-host/lib/index.js` and nothing else in this install
46
+ * runs from that path.
47
+ *
48
+ * @param entry - `process.argv[1]`, possibly absent.
49
+ * @returns which kind of start this was.
50
+ */
51
+ export declare function hostKindOf(entry: string): HostKind;
52
+ /**
53
+ * Rebuild the command that started this process.
54
+ *
55
+ * The desktop shell is deliberately answered with an empty string: its host is
56
+ * a child of the app, and replaying the child's own command line would start a
57
+ * second host holding the same profile. The instruction that actually works
58
+ * there is "quit the app and open it again", which the page writes itself.
59
+ *
60
+ * @param execPath - `process.execPath`.
61
+ * @param argv - `process.argv`.
62
+ * @param kind - who owns the lifecycle.
63
+ * @returns the command line, or an empty string when there is none to give.
64
+ */
65
+ export declare function relaunchCommand(execPath: string, argv: readonly string[], kind: HostKind): string;
66
+ /**
67
+ * Assemble the answer for one host process.
68
+ *
69
+ * Pure on purpose: the pid, the start time and the profile directory are all
70
+ * inputs, so the shape can be tested without a host.
71
+ *
72
+ * @param input - the facts the process has about itself.
73
+ * @returns what the page may show.
74
+ */
75
+ export declare function buildHostInfo(input: {
76
+ pid: number;
77
+ startedAt: number;
78
+ execPath: string;
79
+ argv: readonly string[];
80
+ profileDir: string | null;
81
+ }): HostInfo;
82
+ //# sourceMappingURL=hostinfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostinfo.d.ts","sourceRoot":"","sources":["../../src/host/hostinfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAA;AAExC,qDAAqD;AACrD,MAAM,WAAW,QAAQ;IACvB,mEAAmE;IACnE,GAAG,EAAE,MAAM,CAAA;IACX,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,QAAQ,CAAA;IACd,mEAAmE;IACnE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,yEAAyE;IACzE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,CAAA;CAChB;AAKD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAElD;AAeD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAIjG;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,GAAG,EAAE,MAAM,CAAA;IACX,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B,GAAG,QAAQ,CAkBX"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * How this host was started, in terms a person can act on.
3
+ *
4
+ * A change the manager reports as `restart-required` can only be finished by
5
+ * restarting the process that refused it, and nothing here can do that to
6
+ * itself: the desktop shell exposes no relaunch channel to a page, and a host
7
+ * started from a terminal has nobody to start it again. What the page *can* do
8
+ * is name the one action that finishes the job, and for that it needs two
9
+ * facts that only the host process has — whether it was started by the desktop
10
+ * app or by a command line, and what that command line was.
11
+ *
12
+ * `pid` is the load-bearing half of the answer. Every other field describes the
13
+ * profile, which survives a restart untouched; the pid is the only value that
14
+ * tells a polling page whether the host answering it is still the old one.
15
+ *
16
+ * @module dsh-plugin-upgrader/host/hostinfo
17
+ */
18
+ /** The entry point the desktop shell spawns for its host child process. */
19
+ const DESKTOP_ENTRY = /[\\/]dsh-desktop-host[\\/]lib[\\/]index\.js$/i;
20
+ /**
21
+ * Decide who owns this process's lifecycle from its entry point.
22
+ *
23
+ * The check is on the entry script rather than on an environment variable
24
+ * because the entry script is what the shell actually executes: the desktop
25
+ * shell runs `dsh-desktop-host/lib/index.js` and nothing else in this install
26
+ * runs from that path.
27
+ *
28
+ * @param entry - `process.argv[1]`, possibly absent.
29
+ * @returns which kind of start this was.
30
+ */
31
+ export function hostKindOf(entry) {
32
+ return DESKTOP_ENTRY.test(entry) ? 'desktop' : 'cli';
33
+ }
34
+ /**
35
+ * Quote one argument for the platform's shell.
36
+ *
37
+ * Only the case a person can paste is handled: an argument with whitespace is
38
+ * wrapped in double quotes, which both `cmd.exe` and POSIX shells accept.
39
+ *
40
+ * @param argument - one raw argv entry.
41
+ * @returns the entry as it would be typed.
42
+ */
43
+ function quoted(argument) {
44
+ return /\s/.test(argument) ? `"${argument}"` : argument;
45
+ }
46
+ /**
47
+ * Rebuild the command that started this process.
48
+ *
49
+ * The desktop shell is deliberately answered with an empty string: its host is
50
+ * a child of the app, and replaying the child's own command line would start a
51
+ * second host holding the same profile. The instruction that actually works
52
+ * there is "quit the app and open it again", which the page writes itself.
53
+ *
54
+ * @param execPath - `process.execPath`.
55
+ * @param argv - `process.argv`.
56
+ * @param kind - who owns the lifecycle.
57
+ * @returns the command line, or an empty string when there is none to give.
58
+ */
59
+ export function relaunchCommand(execPath, argv, kind) {
60
+ if (kind === 'desktop')
61
+ return '';
62
+ const rest = argv.slice(1).map(quoted).join(' ');
63
+ return rest === '' ? quoted(execPath) : `${quoted(execPath)} ${rest}`;
64
+ }
65
+ /**
66
+ * Assemble the answer for one host process.
67
+ *
68
+ * Pure on purpose: the pid, the start time and the profile directory are all
69
+ * inputs, so the shape can be tested without a host.
70
+ *
71
+ * @param input - the facts the process has about itself.
72
+ * @returns what the page may show.
73
+ */
74
+ export function buildHostInfo(input) {
75
+ const kind = hostKindOf(input.argv[1] ?? '');
76
+ const profileDir = input.profileDir;
77
+ const profileName = profileDir === null
78
+ ? null
79
+ : (profileDir
80
+ .split(/[\\/]/)
81
+ .filter((segment) => segment !== '')
82
+ .at(-1) ?? null);
83
+ return {
84
+ pid: input.pid,
85
+ startedAt: input.startedAt,
86
+ kind,
87
+ profileName,
88
+ profileDir,
89
+ command: relaunchCommand(input.execPath, input.argv, kind),
90
+ };
91
+ }
92
+ //# sourceMappingURL=hostinfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostinfo.js","sourceRoot":"","sources":["../../src/host/hostinfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA0BH,2EAA2E;AAC3E,MAAM,aAAa,GAAG,+CAA+C,CAAA;AAErE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAA;AACtD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,MAAM,CAAC,QAAgB;IAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAA;AACzD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAuB,EAAE,IAAc;IACvF,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAChD,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAA;AACvE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,KAM7B;IACC,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;IACnC,MAAM,WAAW,GACf,UAAU,KAAK,IAAI;QACjB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,UAAU;aACR,KAAK,CAAC,OAAO,CAAC;aACd,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC;aACnC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA;IACxB,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,IAAI;QACJ,WAAW;QACX,UAAU;QACV,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;KAC3D,CAAA;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAOrE,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,mBAAmB,CAAA;AAE1B;;;;;;GAMG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,kEAAkE;AAClE,eAAO,MAAM,IAAI,oBAAoB,CAAA;AAErC,gFAAgF;AAChF,eAAO,MAAM,MAAM,UAAgB,CAAA;AAgGnC;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CAscrE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiCA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAQrE,OAAO,EAEL,KAAK,WAAW,EAMjB,MAAM,mBAAmB,CAAA;AAE1B;;;;;;GAMG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,kEAAkE;AAClE,eAAO,MAAM,IAAI,oBAAoB,CAAA;AAErC,gFAAgF;AAChF,eAAO,MAAM,MAAM,UAAgB,CAAA;AAgGnC;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,CA2drE"}
package/lib/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  import { savedRegistry } from './host/config.js';
2
2
  import { writeJson, isLoopbackRequest, readJsonBody } from './host/http.js';
3
+ import { buildHostInfo } from './host/hostinfo.js';
3
4
  import { buildOverview } from './host/overview.js';
4
5
  import { runStep, validateStep } from './host/install.js';
5
6
  import { profileDirFrom, recoverPendingDrop } from './host/manifest.js';
@@ -356,6 +357,23 @@ export function apply(ctx, config) {
356
357
  writeJson(res, 200, { status: 'cancelling' });
357
358
  return;
358
359
  }
360
+ if (req.method === 'GET' && route === 'host') {
361
+ /*
362
+ * The pid is answered fresh on every call, never cached: a page that
363
+ * polls this after telling the user to restart is comparing the pid it
364
+ * saw before against the one answering now, and a cached value would
365
+ * make a real restart look like a hang.
366
+ */
367
+ const startedAt = Date.now() - Math.round(process.uptime() * 1000);
368
+ writeJson(res, 200, buildHostInfo({
369
+ pid: process.pid,
370
+ startedAt,
371
+ execPath: process.execPath,
372
+ argv: process.argv,
373
+ profileDir: profileDirFrom() ?? null,
374
+ }));
375
+ return;
376
+ }
359
377
  if (req.method === 'POST' && route === 'registry/test') {
360
378
  const body = await readJsonBody(req);
361
379
  const address = typeof body?.registry === 'string' ? body.registry.trim() : '';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-upgrader",
3
- "version": "1.6.2",
3
+ "version": "1.6.3",
4
4
  "description": "One-click upgrades, version history and rollback for plugins on the DeepSeek Harness Plugins page",
5
5
  "keywords": [
6
6
  "dsh",
@@ -38,6 +38,7 @@
38
38
  "lib/**/*.map",
39
39
  "locale/*.json",
40
40
  "assets/icon.svg",
41
+ "assets/icon-180.png",
41
42
  "cordis.patch.yml",
42
43
  "README.md",
43
44
  "README.en.md",