dsh-life-pack 0.3.19 → 0.3.21

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.
@@ -0,0 +1,29 @@
1
+ /** 官方桌面客户端安装出口的「认」:宿主进程内那个插件管理器(`ctx.get('pluginManager')`)。
2
+ *
3
+ * 为什么住这里(票 #988 的根因):本机装的是**官方 Electron 宿主**,它**不发布**
4
+ * `desktopProfiles`/`desktopPnpm` 两项服务(2026-09-30 实测 app.asar:两个名字命中 0)。
5
+ * 于是执行器配方只能走 `cli-process`,而 Electron 下 `process.argv[1]` 是宿主入口不是
6
+ * `dsh` 命令行入口 ⇒ `resolveCliEntry` 回 null ⇒ 必然 `install-failed`。
7
+ *
8
+ * 本文件只「认」——执行不自己做:认出来后由 `update-host.ts` 把 kind 定为
9
+ * `'desktop-manager'` 交回更新包执行器(0.2.0 `commands.js:48-57` 冻结规格、
10
+ * `store.js:375-416` 跑 `installBundle`)。认的口径与更新包自己一致:
11
+ * 更新包三电话同样从 ctx 现取 `pluginManager` 并认 `installBundle`(0.2.0
12
+ * `host.js:32-40`),dshmarket 同理——不是野路,是宿主公开的出口。
13
+ *
14
+ * 纪律:本文件只做「认」一件事——不调安装、不拼命令行、不按系统分支、不缓存服务。
15
+ */
16
+ /** 宿主插件管理器:`installBundle` 必备(更新包执行器认它);`cancelInstall` 有则用于超时取消。 */
17
+ export interface DesktopPluginManager {
18
+ installBundle(spec: string, options: {
19
+ readonly requestId: string;
20
+ readonly registry?: string;
21
+ }): Promise<unknown> | unknown;
22
+ cancelInstall?(requestId: string): unknown;
23
+ }
24
+ /** 从宿主上下文现取插件管理器:不是这个形状就回 null(回 null 表示「这个宿主没有这个出口」)。 */
25
+ export declare function desktopManagerOf(ctx: unknown): DesktopPluginManager | null;
26
+ /** 管理器只吃精确版本规格(`name@x.y.z`):拿不到就不许走这条路
27
+ * (与更新包 `commands.js:4` 的 `MANAGER_TARGET_RE` 同规则,执行器里还会再验一次)。 */
28
+ export declare function desktopInstallSpec(packageName: string, version: string): string | null;
29
+ //# sourceMappingURL=desktop-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-install.d.ts","sourceRoot":"","sources":["../src/desktop-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,qEAAqE;AACrE,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC7H,aAAa,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CAC5C;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAY1E;AAED;kEACkE;AAClE,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAItF"}
@@ -0,0 +1,42 @@
1
+ /** 官方桌面客户端安装出口的「认」:宿主进程内那个插件管理器(`ctx.get('pluginManager')`)。
2
+ *
3
+ * 为什么住这里(票 #988 的根因):本机装的是**官方 Electron 宿主**,它**不发布**
4
+ * `desktopProfiles`/`desktopPnpm` 两项服务(2026-09-30 实测 app.asar:两个名字命中 0)。
5
+ * 于是执行器配方只能走 `cli-process`,而 Electron 下 `process.argv[1]` 是宿主入口不是
6
+ * `dsh` 命令行入口 ⇒ `resolveCliEntry` 回 null ⇒ 必然 `install-failed`。
7
+ *
8
+ * 本文件只「认」——执行不自己做:认出来后由 `update-host.ts` 把 kind 定为
9
+ * `'desktop-manager'` 交回更新包执行器(0.2.0 `commands.js:48-57` 冻结规格、
10
+ * `store.js:375-416` 跑 `installBundle`)。认的口径与更新包自己一致:
11
+ * 更新包三电话同样从 ctx 现取 `pluginManager` 并认 `installBundle`(0.2.0
12
+ * `host.js:32-40`),dshmarket 同理——不是野路,是宿主公开的出口。
13
+ *
14
+ * 纪律:本文件只做「认」一件事——不调安装、不拼命令行、不按系统分支、不缓存服务。
15
+ */
16
+ /** 从宿主上下文现取插件管理器:不是这个形状就回 null(回 null 表示「这个宿主没有这个出口」)。 */
17
+ export function desktopManagerOf(ctx) {
18
+ let value;
19
+ try {
20
+ const get = ctx?.get;
21
+ if (typeof get !== 'function')
22
+ return null;
23
+ value = get.call(ctx, 'pluginManager');
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ const manager = value;
29
+ if (!manager || typeof manager.installBundle !== 'function')
30
+ return null;
31
+ return manager;
32
+ }
33
+ /** 管理器只吃精确版本规格(`name@x.y.z`):拿不到就不许走这条路
34
+ * (与更新包 `commands.js:4` 的 `MANAGER_TARGET_RE` 同规则,执行器里还会再验一次)。 */
35
+ export function desktopInstallSpec(packageName, version) {
36
+ if (!/^(@[A-Za-z0-9._~-]+\/)?[A-Za-z0-9._~-]+$/.test(packageName))
37
+ return null;
38
+ if (!/^\d+\.\d+\.\d+$/.test(version))
39
+ return null;
40
+ return packageName + '@' + version;
41
+ }
42
+ //# sourceMappingURL=desktop-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"desktop-install.js","sourceRoot":"","sources":["../src/desktop-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,0DAA0D;AAC1D,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAI,GAA6D,EAAE,GAAG,CAAC;QAChF,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QAC3C,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,KAAgD,CAAC;IACjE,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IACzE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;kEACkE;AAClE,MAAM,UAAU,kBAAkB,CAAC,WAAmB,EAAE,OAAe;IACrE,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,WAAW,GAAG,GAAG,GAAG,OAAO,CAAC;AACrC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,eAAO,MAAM,IAAI,kBAAkB,CAAC;AACpC,eAAO,MAAM,MAAM,EAAE,SAAS,MAAM,EAAmB,CAAC;AAaxD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAgDxC;AAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC9H,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtG,8DAA8D;AAC9D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpF,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,oDAAoD;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,eAAO,MAAM,IAAI,kBAAkB,CAAC;AACpC,eAAO,MAAM,MAAM,EAAE,SAAS,MAAM,EAAmB,CAAC;AAaxD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAwDxC;AAED,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC9H,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtG,8DAA8D;AAC9D,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpF,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,oDAAoD;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js CHANGED
@@ -22,7 +22,18 @@ function loggerOf(ctx) {
22
22
  }
23
23
  export function apply(ctx) {
24
24
  const logger = loggerOf(ctx);
25
- const table = buildUpdatePhoneTable(ctx);
25
+ // 安装留痕(票 #988):装的动作走哪条落点、失败原文是什么,都要落到宿主日志里——
26
+ // 此前失败只剩面板上一句「安装没有完成」,真因无处可查(本票的现象正是这么来的)。
27
+ const log = (level, event, fields) => {
28
+ const line = '[dsh-life-pack] ' + event + ' ' + JSON.stringify(fields);
29
+ if (level === 'error')
30
+ logger.error?.(line);
31
+ else if (level === 'warn')
32
+ logger.warn?.(line);
33
+ else
34
+ logger.info?.(line);
35
+ };
36
+ const table = buildUpdatePhoneTable(ctx, { log });
26
37
  const reply = (rpcId, result) => Response.json({ type: 'server-response', rpcId, result });
27
38
  const fail = (rpcId, code, details = {}) => reply(rpcId, { ok: false, error: { code, message: reasonText(code), details } });
28
39
  try {
package/dist/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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"}
@@ -1,3 +1,6 @@
1
+ import type { EnvironmentKind, ExecutorParts } from 'dsh-plugin-update';
2
+ import type { DesktopPluginManager } from './desktop-install.js';
3
+ import type { UpdateTarget } from './update-targets.js';
1
4
  /** 面板侧认的回执信封(与 DSH 载体的 `RpcCallResult` 同形,见 cookbook §6)。 */
2
5
  export type ManagerReply = {
3
6
  readonly ok: true;
@@ -13,6 +16,88 @@ export type ManagerReply = {
13
16
  export interface UpdatePhoneTable {
14
17
  call(method: string, args: Record<string, unknown>): Promise<ManagerReply>;
15
18
  }
16
- /** 建电话表(懒建:首次调用时才读磁盘)。 */
17
- export declare function buildUpdatePhoneTable(ctx: unknown): UpdatePhoneTable;
19
+ /** 建表那一刻的现场事实(导出只为单测能拼一份替身喂给 `installMissing`)。 */
20
+ export interface HostFacts {
21
+ readonly ctx: unknown;
22
+ readonly profileDir: string;
23
+ readonly profileName: string;
24
+ readonly environmentKind: EnvironmentKind;
25
+ readonly runningVersions: ReadonlyMap<string, string | null>;
26
+ }
27
+ /** 一次安装的落点与留痕(可注入:单测用替身替掉执行器与宿主出口,不碰真机)。 */
28
+ export interface InstallPorts {
29
+ /** 装的动作(缺省走更新包执行器:路由与参数都是它冻结的配方)。 */
30
+ readonly runExecutor?: (target: UpdateTarget, version: string) => Promise<void>;
31
+ /** 执行器工厂(缺省 `createUpdateExecutor`;单测用它捕获传给更新包的零件,断言路由)。 */
32
+ readonly createExecutor?: (parts: ExecutorParts) => (args?: {
33
+ version?: string;
34
+ profileName?: string | null;
35
+ environmentKind?: EnvironmentKind;
36
+ }) => Promise<void>;
37
+ /** 宿主进程内的插件管理器(官方桌面客户端的安装出口);缺省从 ctx 现取。 */
38
+ readonly desktopManager?: () => DesktopPluginManager | null;
39
+ /** 安装留痕:与宿主日志同一条路(info/warn/error)。 */
40
+ readonly log?: (level: string, event: string, fields: Record<string, unknown>) => void;
41
+ }
42
+ /** 从异常里取出能报给用户的那句人话(0.2.0 实测形状:`store.js:460-466` 抛出的错恒带
43
+ * `debug`(原始堆栈)与 `exitCode`(有则带);走 desktop-manager 路由失败时还带 `detail`
44
+ * (宿主原话,已脱敏截断,见 `withDetail`/`sanitizeDetail`:`store.js:299-309`)。
45
+ *
46
+ * 取值顺序:`detail`(宿主原话,给用户看的那句)> `debug`(执行器堆栈,排查用)>
47
+ * `message`。漏取 `detail` 会把堆栈摊上屏(票 #988 复查时发现)。 */
48
+ export declare function installErrorDetail(error: unknown): string;
49
+ /** 总管自有电话一:装上缺席的目标包(更新包的三个电话只管已装的包,见 `update-env.ts` 头注)。
50
+ *
51
+ * 两条落点,按宿主有没有「进程内插件管理器」分(票 #988):
52
+ * 1. 有(官方桌面客户端):执行器的 desktop-manager 路由——0.2.0 `commands.js:48-57`
53
+ * 按 kind 冻结规格 `["add", "<包>@<精确版本>"]`(零开关),`store.js:375-416` 跑
54
+ * `installBundle`(三态算成功、超时取消、失败原文脱敏进 `error.detail`)。
55
+ * 总管只定 kind + 把这家 manager 交进去,不自己调 `installBundle`、不重写成功判定——
56
+ * 安装语义与更新包三电话同一套(能力自治:不抄对方那份)。
57
+ * 2. 没有(普通 DSH/第三方宿主):照旧交回更新包执行器,路由与参数仍是它冻结的配方。
58
+ *
59
+ * 为什么这里要显式定 kind:本机官方宿主**不发布** `desktopProfiles`/`desktopPnpm`,
60
+ * `detectEnvironmentKind` 只能认出 `'cli'`,配方会走 cli-process 而 Electron 下认不出
61
+ * CLI 入口(`store.js:420` 的 `resolveCliEntry` 回 null)⇒ 必然 `install-failed`。
62
+ * 第三方桌面(kind `'desktop'`)不走这条,沿既有 desktop-service 路由。
63
+ *
64
+ * 失败一律**留痕 + 把原文回给面板**:此前这里是个空 `catch`,屏上只剩一句「安装没有完成」,
65
+ * 真因无处可查(票 #988 的现象就是这么来的)。 */
66
+ export declare function installMissing(facts: HostFacts, target: UpdateTarget, args: Record<string, unknown>, ports?: InstallPorts): Promise<ManagerReply>;
67
+ /** 七个目标 version 行的组装(票 #986 第二半:独立 I/O 并行化)。
68
+ *
69
+ * 住这里(不是调用方各自写一份并发):七目标之间、单目标三次读之间都并发——
70
+ * 墙上时间取最慢那一次读,不随目标数与读次数线性累加。读不到的按原语义回 null/false,不抛。
71
+ * 读替身可注入(单测给每次耗时 T 的假读数验并发),缺省走真读数。
72
+ */
73
+ export interface TargetRowReaders {
74
+ readonly capture: (packageName: string, profileDir: string) => Promise<string | null>;
75
+ readonly panel: (packageName: string, profileDir: string) => Promise<boolean>;
76
+ readonly skill: (packageName: string, profileDir: string) => Promise<{
77
+ packageName: string;
78
+ version: string;
79
+ } | null>;
80
+ }
81
+ export interface AssembledTargetRow {
82
+ readonly key: string;
83
+ readonly title: string;
84
+ readonly packageName: string;
85
+ readonly installedVersion: string | null;
86
+ readonly panelRegistered: boolean;
87
+ readonly skill: {
88
+ packageName: string;
89
+ version: string;
90
+ } | null;
91
+ }
92
+ export declare function assembleTargetRows(targets: readonly UpdateTarget[], profileDir: string, readers?: TargetRowReaders): Promise<AssembledTargetRow[]>;
93
+ /** 建电话表(懒建:首次调用时才读磁盘)。
94
+ *
95
+ * 自足动作不排队(票 #986 第二半):本机根清单不经表构建——入口先分流,
96
+ * 只有需要表的方法才懒建表。overrides 只在单测里给(慢建表验分流),线上走缺省;
97
+ * `log` 由插件入口交进来(票 #988:安装留痕走宿主日志同一条路)。 */
98
+ export declare function buildUpdatePhoneTable(ctx: unknown, overrides?: {
99
+ readonly buildTable?: (ctx: unknown) => Promise<(method: string, args: Record<string, unknown>) => Promise<ManagerReply>>;
100
+ readonly rootsReply?: () => Promise<ManagerReply>;
101
+ readonly log?: InstallPorts['log'];
102
+ }): UpdatePhoneTable;
18
103
  //# sourceMappingURL=update-host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-host.d.ts","sourceRoot":"","sources":["../src/update-host.ts"],"names":[],"mappings":"AAkBA,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAAE,CAAC;AAE3I,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5E;AA+JD,0BAA0B;AAC1B,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAQpE"}
1
+ {"version":3,"file":"update-host.d.ts","sourceRoot":"","sources":["../src/update-host.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,6DAA6D;AAC7D,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAAE,CAAC;AAE3I,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5E;AAKD,mDAAmD;AACnD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAC9D;AAeD,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,4DAA4D;IAC5D,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,KAAK,EAAE,aAAa,KACjB,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,eAAe,CAAC,EAAE,eAAe,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpH,4CAA4C;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,oBAAoB,GAAG,IAAI,CAAC;IAC5D,uCAAuC;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CACxF;AAUD;;;;;kDAKkD;AAClD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAYzD;AAED;;;;;;;;;;;;;;;;+BAgB+B;AAC/B,wBAAsB,cAAc,CAClC,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,GAAE,YAAiB,GACvB,OAAO,CAAC,YAAY,CAAC,CAgFvB;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtF,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9E,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;CACvH;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACjE;AAQD,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,gBAAoC,GAC5C,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAkB/B;AAkHD;;;;2CAI2C;AAC3C,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,OAAO,EACZ,SAAS,CAAC,EAAE;IACV,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IAC1H,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,QAAQ,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;CACpC,GACA,gBAAgB,CAWlB"}
@@ -10,6 +10,7 @@
10
10
  */
11
11
  import { createHostUpdate, createUpdateExecutor, detectEnvironmentKind, resolveUpdateConfig } from 'dsh-plugin-update';
12
12
  import { DEFAULT_REGISTRY, MANAGER_ACTIONS, reasonText } from './update-contract.js';
13
+ import { desktopInstallSpec, desktopManagerOf } from './desktop-install.js';
13
14
  import { rootsReply } from './roots.js';
14
15
  import { UPDATE_TARGETS, targetFor } from './update-targets.js';
15
16
  import { MISSING_RUNNING_VERSION, captureRunningVersion, readPanelRegistered, readSkillRide, readTargetEnvironment, resolveProfileDir } from './update-env.js';
@@ -25,58 +26,180 @@ function service(ctx, name) {
25
26
  function failure(code, details = {}) {
26
27
  return { ok: false, error: { code, message: reasonText(code), details } };
27
28
  }
28
- /** 总管自有电话一:装上缺席的目标包(更新包的三个电话只管已装的包,见 `update-env.ts` 头注)。 */
29
- async function installMissing(facts, target, args) {
29
+ function trace(log, level, event, fields) {
30
+ try {
31
+ log?.(level, event, fields);
32
+ }
33
+ catch {
34
+ /* 留痕不许影响安装本身 */
35
+ }
36
+ }
37
+ /** 从异常里取出能报给用户的那句人话(0.2.0 实测形状:`store.js:460-466` 抛出的错恒带
38
+ * `debug`(原始堆栈)与 `exitCode`(有则带);走 desktop-manager 路由失败时还带 `detail`
39
+ * (宿主原话,已脱敏截断,见 `withDetail`/`sanitizeDetail`:`store.js:299-309`)。
40
+ *
41
+ * 取值顺序:`detail`(宿主原话,给用户看的那句)> `debug`(执行器堆栈,排查用)>
42
+ * `message`。漏取 `detail` 会把堆栈摊上屏(票 #988 复查时发现)。 */
43
+ export function installErrorDetail(error) {
44
+ const seen = error;
45
+ const raw = typeof seen?.detail === 'string' && seen.detail.length > 0
46
+ ? seen.detail
47
+ : typeof seen?.debug === 'string' && seen.debug.length > 0
48
+ ? seen.debug
49
+ : typeof seen?.message === 'string' && seen.message.length > 0
50
+ ? seen.message
51
+ : String(error);
52
+ const exit = typeof seen?.exitCode === 'number' ? ' exit=' + String(seen.exitCode) : '';
53
+ return (exit + ' ' + raw.replace(/\s+/g, ' ').trim()).trim().slice(0, 600);
54
+ }
55
+ /** 总管自有电话一:装上缺席的目标包(更新包的三个电话只管已装的包,见 `update-env.ts` 头注)。
56
+ *
57
+ * 两条落点,按宿主有没有「进程内插件管理器」分(票 #988):
58
+ * 1. 有(官方桌面客户端):执行器的 desktop-manager 路由——0.2.0 `commands.js:48-57`
59
+ * 按 kind 冻结规格 `["add", "<包>@<精确版本>"]`(零开关),`store.js:375-416` 跑
60
+ * `installBundle`(三态算成功、超时取消、失败原文脱敏进 `error.detail`)。
61
+ * 总管只定 kind + 把这家 manager 交进去,不自己调 `installBundle`、不重写成功判定——
62
+ * 安装语义与更新包三电话同一套(能力自治:不抄对方那份)。
63
+ * 2. 没有(普通 DSH/第三方宿主):照旧交回更新包执行器,路由与参数仍是它冻结的配方。
64
+ *
65
+ * 为什么这里要显式定 kind:本机官方宿主**不发布** `desktopProfiles`/`desktopPnpm`,
66
+ * `detectEnvironmentKind` 只能认出 `'cli'`,配方会走 cli-process 而 Electron 下认不出
67
+ * CLI 入口(`store.js:420` 的 `resolveCliEntry` 回 null)⇒ 必然 `install-failed`。
68
+ * 第三方桌面(kind `'desktop'`)不走这条,沿既有 desktop-service 路由。
69
+ *
70
+ * 失败一律**留痕 + 把原文回给面板**:此前这里是个空 `catch`,屏上只剩一句「安装没有完成」,
71
+ * 真因无处可查(票 #988 的现象就是这么来的)。 */
72
+ export async function installMissing(facts, target, args, ports = {}) {
30
73
  const version = typeof args.version === 'string' && /^\d+\.\d+\.\d+$/.test(args.version) ? args.version : '';
31
74
  if (!version)
32
75
  return failure('invalid-release', { packageName: target.packageName });
76
+ const managerOf = ports.desktopManager ?? (() => desktopManagerOf(facts.ctx));
77
+ let manager = null;
33
78
  try {
34
- // 装的动作交回更新包的执行器:路由(桌面服务 / 子进程)与参数数组(精确版本、官方源、
35
- // --save-exact)都是它冻结的配方(`commands.ts:71-96`),总管不自己拼命令、不按系统分支。
36
- const runInstall = createUpdateExecutor({
79
+ manager = managerOf();
80
+ }
81
+ catch {
82
+ manager = null;
83
+ }
84
+ const spec = desktopInstallSpec(target.packageName, version);
85
+ if (manager && spec && facts.environmentKind !== 'desktop') {
86
+ const create = ports.createExecutor ?? createUpdateExecutor;
87
+ const runInstall = create({
37
88
  profileName: facts.profileName,
38
- environmentKind: facts.environmentKind,
89
+ environmentKind: 'desktop-manager',
39
90
  profileDir: facts.profileDir,
40
- subprocess: () => service(facts.ctx, 'subprocess'),
41
- desktopPnpm: () => service(facts.ctx, 'desktopPnpm'),
42
- desktopProfiles: () => service(facts.ctx, 'desktopProfiles'),
91
+ pluginManager: () => manager,
43
92
  targetPackageName: target.packageName,
44
93
  registryUrl: DEFAULT_REGISTRY,
45
94
  pluginId: 'dsh-life-pack-' + target.key,
95
+ // 执行器自带的留痕口(`store.js:268-282`):给它一条路,路由与退出码才有人记下来。
96
+ log: (level, event, fields) => trace(ports.log, level, event, fields),
46
97
  });
47
- await runInstall({ version, profileName: facts.profileName, environmentKind: facts.environmentKind });
98
+ try {
99
+ await runInstall({ version, profileName: facts.profileName, environmentKind: 'desktop-manager' });
100
+ }
101
+ catch (error) {
102
+ const detail = installErrorDetail(error);
103
+ trace(ports.log, 'warn', 'ilife.install.failed', {
104
+ route: 'desktop-manager',
105
+ packageName: target.packageName,
106
+ version,
107
+ detail,
108
+ });
109
+ return failure('install-failed', { packageName: target.packageName, version, route: 'desktop-manager', detail });
110
+ }
111
+ trace(ports.log, 'info', 'ilife.install.done', { route: 'desktop-manager', packageName: target.packageName, version });
112
+ return { ok: true, value: { packageName: target.packageName, version, route: 'desktop-manager' } };
48
113
  }
49
- catch {
50
- return failure('install-failed', { packageName: target.packageName, version });
114
+ try {
115
+ // 装的动作交回更新包的执行器:路由(桌面服务 / 子进程)与参数数组(精确版本、官方源、
116
+ // --save-exact)都是它冻结的配方(0.2.0 `commands.js:38-65`),总管不自己拼命令、不按系统分支。
117
+ const runExecutor = ports.runExecutor ??
118
+ (async (_target, installVersion) => {
119
+ const runInstall = createUpdateExecutor({
120
+ profileName: facts.profileName,
121
+ environmentKind: facts.environmentKind,
122
+ profileDir: facts.profileDir,
123
+ subprocess: () => service(facts.ctx, 'subprocess'),
124
+ desktopPnpm: () => service(facts.ctx, 'desktopPnpm'),
125
+ desktopProfiles: () => service(facts.ctx, 'desktopProfiles'),
126
+ targetPackageName: target.packageName,
127
+ registryUrl: DEFAULT_REGISTRY,
128
+ pluginId: 'dsh-life-pack-' + target.key,
129
+ // 执行器自带的留痕口(`store.js:268-282`):给它一条路,路由与退出码才有人记下来。
130
+ log: (level, event, fields) => trace(ports.log, level, event, fields),
131
+ });
132
+ await runInstall({ version: installVersion, profileName: facts.profileName, environmentKind: facts.environmentKind });
133
+ });
134
+ await runExecutor(target, version);
135
+ }
136
+ catch (error) {
137
+ const detail = installErrorDetail(error);
138
+ trace(ports.log, 'warn', 'ilife.install.failed', {
139
+ route: 'executor',
140
+ environmentKind: facts.environmentKind,
141
+ packageName: target.packageName,
142
+ version,
143
+ detail,
144
+ });
145
+ return failure('install-failed', {
146
+ packageName: target.packageName,
147
+ version,
148
+ route: 'executor',
149
+ environmentKind: facts.environmentKind,
150
+ detail,
151
+ });
51
152
  }
52
- return { ok: true, value: { packageName: target.packageName, version } };
153
+ trace(ports.log, 'info', 'ilife.install.done', { route: 'executor', packageName: target.packageName, version });
154
+ return { ok: true, value: { packageName: target.packageName, version, route: 'executor' } };
53
155
  }
54
- /** 总管自有电话二:七个更新目标的表 —— 每家的三个电话名 + 版本行事实 + 轮询间隔。 */
55
- async function readTargets(facts, phones, pollMs) {
56
- const targets = [];
57
- for (const target of UPDATE_TARGETS) {
58
- targets.push({
156
+ const defaultRowReaders = {
157
+ capture: (packageName, profileDir) => captureRunningVersion(packageName, profileDir),
158
+ panel: (packageName, profileDir) => readPanelRegistered(packageName, profileDir),
159
+ skill: (packageName, profileDir) => readSkillRide(packageName, profileDir),
160
+ };
161
+ export async function assembleTargetRows(targets, profileDir, readers = defaultRowReaders) {
162
+ return Promise.all(targets.map(async (target) => {
163
+ const [installedVersion, panelRegistered, skill] = await Promise.all([
164
+ readers.capture(target.packageName, profileDir),
165
+ readers.panel(target.packageName, profileDir),
166
+ readers.skill(target.packageName, profileDir),
167
+ ]);
168
+ return {
59
169
  key: target.key,
60
170
  title: target.title,
61
171
  packageName: target.packageName,
62
- phones: phones.get(target.key) ?? null,
63
- runningVersion: facts.runningVersions.get(target.key) ?? null,
64
- installedVersion: await captureRunningVersion(target.packageName, facts.profileDir),
65
- // 面板缺席卡三态要的第三个事实:已装产物里有没有爱生活页签槽的注册代码。
66
- // 它答的是「重装/重启有没有用」,版本号答不出来(票 #723,见 `readPanelRegistered` 头注)。
67
- panelRegistered: await readPanelRegistered(target.packageName, facts.profileDir),
68
- skill: await readSkillRide(target.packageName, facts.profileDir),
69
- });
70
- }
172
+ installedVersion,
173
+ panelRegistered,
174
+ skill,
175
+ };
176
+ }));
177
+ }
178
+ /** 总管自有电话二:七个更新目标的表 —— 每家的三个电话名 + 版本行事实 + 轮询间隔。 */
179
+ async function readTargets(facts, phones, pollMs) {
180
+ const rows = await assembleTargetRows(UPDATE_TARGETS, facts.profileDir);
181
+ const targets = rows.map((row) => ({
182
+ key: row.key,
183
+ title: row.title,
184
+ packageName: row.packageName,
185
+ phones: phones.get(row.key) ?? null,
186
+ runningVersion: facts.runningVersions.get(row.key) ?? null,
187
+ installedVersion: row.installedVersion,
188
+ // 面板缺席卡三态要的第三个事实:已装产物里有没有爱生活页签槽的注册代码。
189
+ // 它答的是「重装/重启有没有用」,版本号答不出来(票 #723,见 `readPanelRegistered` 头注)。
190
+ panelRegistered: row.panelRegistered,
191
+ skill: row.skill,
192
+ }));
71
193
  return { ok: true, value: { targets, pollMs } };
72
194
  }
73
- async function buildTable(ctx) {
195
+ async function buildTable(ctx, ports = {}) {
74
196
  const { dir: profileDir, name: profileName } = await resolveProfileDir();
75
197
  const environmentKind = detectEnvironmentKind(ctx);
76
- const runningVersions = new Map();
77
- for (const target of UPDATE_TARGETS) {
78
- runningVersions.set(target.key, await captureRunningVersion(target.packageName, profileDir));
79
- }
198
+ const runningPairs = await Promise.all(UPDATE_TARGETS.map(async (target) => ({
199
+ key: target.key,
200
+ version: await captureRunningVersion(target.packageName, profileDir),
201
+ })));
202
+ const runningVersions = new Map(runningPairs.map((pair) => [pair.key, pair.version]));
80
203
  const facts = { ctx, profileDir, profileName, environmentKind, runningVersions };
81
204
  const updatePhones = new Map();
82
205
  const phonesByTarget = new Map();
@@ -120,7 +243,7 @@ async function buildTable(ctx) {
120
243
  const target = targetFor(packageName);
121
244
  if (!target)
122
245
  return Promise.resolve(failure('bad-request', { packageName }));
123
- return installMissing(facts, target, args);
246
+ return installMissing(facts, target, args, ports);
124
247
  },
125
248
  ],
126
249
  [MANAGER_ACTIONS.targets, () => readTargets(facts, phonesByTarget, pollMs)],
@@ -155,12 +278,20 @@ async function buildTable(ctx) {
155
278
  }
156
279
  };
157
280
  }
158
- /** 建电话表(懒建:首次调用时才读磁盘)。 */
159
- export function buildUpdatePhoneTable(ctx) {
281
+ /** 建电话表(懒建:首次调用时才读磁盘)。
282
+ *
283
+ * 自足动作不排队(票 #986 第二半):本机根清单不经表构建——入口先分流,
284
+ * 只有需要表的方法才懒建表。overrides 只在单测里给(慢建表验分流),线上走缺省;
285
+ * `log` 由插件入口交进来(票 #988:安装留痕走宿主日志同一条路)。 */
286
+ export function buildUpdatePhoneTable(ctx, overrides) {
287
+ const build = overrides?.buildTable ?? ((host) => buildTable(host, { log: overrides?.log }));
288
+ const roots = overrides?.rootsReply ?? rootsReply;
160
289
  let table = null;
161
290
  return {
162
291
  async call(method, args) {
163
- table ??= buildTable(ctx);
292
+ if (method === MANAGER_ACTIONS.roots)
293
+ return roots();
294
+ table ??= build(ctx);
164
295
  return (await table)(method, args ?? {});
165
296
  },
166
297
  };
@@ -1 +1 @@
1
- {"version":3,"file":"update-host.js","sourceRoot":"","sources":["../src/update-host.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-host.js","sourceRoot":"","sources":["../src/update-host.ts"],"names":[],"mappings":"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"}
@@ -107,4 +107,24 @@ export declare function loadFailureDetail(failure: {
107
107
  readonly code: string;
108
108
  readonly details: Record<string, unknown>;
109
109
  }): string;
110
+ /** 失败原文那一行(票 #988):宿主回包 `details.detail` 里那句人话,面板把它摊在原因句下面。
111
+ *
112
+ * 为什么要摊:`install-failed` 这句人话对每一种装不上都长一个样,光看它分不出「这个宿主没有安装出口」
113
+ * 与「pnpm 退出码非零」。原文由宿主半取好并回传(`update-host.ts` 的 `installErrorDetail`),
114
+ * 这里只取值与截断(长文本会撑爆那一行)。没有原文回 null——面板不自己编原因。 */
115
+ export declare function failureDetailOf(failure: {
116
+ readonly details?: Record<string, unknown>;
117
+ } | null | undefined): string | null;
118
+ /** 题头两颗按钮的悬停标题(票 #986 第二半:目标表未就绪时说真因)。
119
+ *
120
+ * 住这里(不是面板组件旁边):标题口径只有一个定义地,面板与单测共用同一份;
121
+ * 忙时沿用 update-busy 原句(与禁用判据同源),未就绪且空闲时说「还在读更新目标」,
122
+ * 就绪后回到调用方给的动作说明(本函数不写死那两句动作说明,由调用方传入)。
123
+ *
124
+ * 入参只取判据形状(blocked 与 empty),不 import 面板钩子。 */
125
+ export declare function headerButtonTitle(input: {
126
+ readonly blocked: boolean;
127
+ readonly empty: boolean;
128
+ readonly readyText?: string;
129
+ }): string;
110
130
  //# sourceMappingURL=update-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-view.d.ts","sourceRoot":"","sources":["../src/update-view.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-view.d.ts","sourceRoot":"","sources":["../src/update-view.ts"],"names":[],"mappings":"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"}
@@ -149,4 +149,30 @@ export function loadFailureDetail(failure) {
149
149
  return failure.code + ' detail=' + raw.slice(0, 300);
150
150
  return failure.code;
151
151
  }
152
+ /** 失败原文那一行(票 #988):宿主回包 `details.detail` 里那句人话,面板把它摊在原因句下面。
153
+ *
154
+ * 为什么要摊:`install-failed` 这句人话对每一种装不上都长一个样,光看它分不出「这个宿主没有安装出口」
155
+ * 与「pnpm 退出码非零」。原文由宿主半取好并回传(`update-host.ts` 的 `installErrorDetail`),
156
+ * 这里只取值与截断(长文本会撑爆那一行)。没有原文回 null——面板不自己编原因。 */
157
+ export function failureDetailOf(failure) {
158
+ const raw = failure?.details?.detail;
159
+ if (typeof raw !== 'string')
160
+ return null;
161
+ const text = raw.trim();
162
+ return text.length === 0 ? null : text.slice(0, 300);
163
+ }
164
+ /** 题头两颗按钮的悬停标题(票 #986 第二半:目标表未就绪时说真因)。
165
+ *
166
+ * 住这里(不是面板组件旁边):标题口径只有一个定义地,面板与单测共用同一份;
167
+ * 忙时沿用 update-busy 原句(与禁用判据同源),未就绪且空闲时说「还在读更新目标」,
168
+ * 就绪后回到调用方给的动作说明(本函数不写死那两句动作说明,由调用方传入)。
169
+ *
170
+ * 入参只取判据形状(blocked 与 empty),不 import 面板钩子。 */
171
+ export function headerButtonTitle(input) {
172
+ if (input.blocked)
173
+ return reasonText('update-busy');
174
+ if (input.empty)
175
+ return '还在读更新目标,稍候再试';
176
+ return input.readyText ?? '';
177
+ }
152
178
  //# sourceMappingURL=update-view.js.map