dsh-plugin-shop 0.4.14 → 0.5.0

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.
@@ -20,12 +20,13 @@ const dsh_plugin_shop_shop_catalog_result$schema = z.object({
20
20
  'review': z.union([z.undefined(), z.object({
21
21
  'reviewedVersion': z.union([z.undefined(), z.string()]).optional(),
22
22
  'reviewedCommit': z.union([z.undefined(), z.string()]).optional(),
23
+ 'reviewedSha256': z.union([z.undefined(), z.string()]).optional(),
23
24
  'reviewer': z.string(),
24
25
  'reviewCommit': z.string(),
25
26
  'notes': z.string(),
26
27
  })]).optional(),
27
28
  'catalog': z.union([z.undefined(), z.object({
28
- 'category': z.union([z.literal("tool"), z.literal("provider"), z.literal("ui"), z.literal("workflow"), z.literal("integration"), z.literal("other")]),
29
+ 'category': z.union([z.literal("tool"), z.literal("provider"), z.literal("ui"), z.literal("workflow"), z.literal("integration"), z.literal("theme"), z.literal("other")]),
29
30
  'summary': z.object({
30
31
  'en': z.string(),
31
32
  'zh': z.union([z.undefined(), z.string()]).optional(),
@@ -35,10 +36,16 @@ const dsh_plugin_shop_shop_catalog_result$schema = z.object({
35
36
  'source': z.union([z.literal("npm"), z.literal("github")]),
36
37
  'repo': z.union([z.undefined(), z.string()]).optional(),
37
38
  'subdir': z.union([z.undefined(), z.string()]).optional(),
39
+ 'tarball': z.union([z.undefined(), z.object({
40
+ 'url': z.string(),
41
+ 'sha256': z.string(),
42
+ })]).optional(),
43
+ 'added': z.string(),
38
44
  })),
39
45
  'denied': z.array(z.object({
40
46
  'name': z.string(),
41
47
  'detail': z.string(),
48
+ 'replacement': z.union([z.undefined(), z.string()]).optional(),
42
49
  })),
43
50
  'stars': z.record(z.string(), z.number()),
44
51
  })
@@ -59,7 +66,7 @@ const dsh_plugin_shop_shop_installStart_result$schema = z.union([z.object({
59
66
  'installId': z.string(),
60
67
  }), z.object({
61
68
  'ok': z.literal(false),
62
- 'code': z.union([z.literal("not-in-catalog"), z.literal("denied"), z.literal("version-mismatch"), z.literal("needs-acknowledgement"), z.literal("git-missing")]),
69
+ 'code': z.union([z.literal("not-in-catalog"), z.literal("denied"), z.literal("version-mismatch"), z.literal("needs-acknowledgement"), z.literal("git-missing"), z.literal("tarball-integrity")]),
63
70
  'detail': z.string(),
64
71
  })])
65
72
  const dsh_plugin_shop_shop_installStatus_parameter_0$schema = z.object({
@@ -70,6 +77,7 @@ const dsh_plugin_shop_shop_installStatus_result$schema = z.object({
70
77
  'state': z.union([z.literal("running"), z.literal("done"), z.literal("failed")]),
71
78
  'log': z.array(z.string()),
72
79
  'needsRestart': z.union([z.undefined(), z.literal(false), z.literal(true)]).optional(),
80
+ 'restartReason': z.union([z.undefined(), z.string()]).optional(),
73
81
  'detail': z.union([z.undefined(), z.string()]).optional(),
74
82
  })
75
83
  const dsh_plugin_shop_shop_restart_result$schema = z.union([z.object({
@@ -110,6 +118,7 @@ const dsh_plugin_shop_shop_version_result$schema = z.object({
110
118
  'installed': z.string(),
111
119
  'latest': z.union([z.literal(null), z.string()]),
112
120
  'outdated': z.boolean(),
121
+ 'restartSupported': z.boolean(),
113
122
  })
114
123
 
115
124
  export const TYPERT = {
@@ -142,7 +151,7 @@ export const TYPERT = {
142
151
  typeSymbol: 'dsh-plugin-shop/types#ShopCatalogResult',
143
152
  schema: dsh_plugin_shop_shop_catalog_result$schema,
144
153
  },
145
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":275,"column":9},
154
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":447,"column":9},
146
155
  },
147
156
  {
148
157
  id: 'dsh-plugin-shop#shop/installed',
@@ -157,7 +166,7 @@ export const TYPERT = {
157
166
  typeSymbol: 'dsh-plugin-shop#shop/installed:result',
158
167
  schema: dsh_plugin_shop_shop_installed_result$schema,
159
168
  },
160
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":380,"column":9},
169
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":597,"column":9},
161
170
  },
162
171
  {
163
172
  id: 'dsh-plugin-shop#shop/installStart',
@@ -183,7 +192,7 @@ export const TYPERT = {
183
192
  typeSymbol: 'dsh-plugin-shop/types#ShopInstallResult',
184
193
  schema: dsh_plugin_shop_shop_installStart_result$schema,
185
194
  },
186
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":301,"column":9},
195
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":473,"column":9},
187
196
  },
188
197
  {
189
198
  id: 'dsh-plugin-shop#shop/installStatus',
@@ -208,7 +217,7 @@ export const TYPERT = {
208
217
  typeSymbol: 'dsh-plugin-shop/types#ShopInstallStatusResult',
209
218
  schema: dsh_plugin_shop_shop_installStatus_result$schema,
210
219
  },
211
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":369,"column":3},
220
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":586,"column":3},
212
221
  },
213
222
  {
214
223
  id: 'dsh-plugin-shop#shop/restart',
@@ -223,7 +232,7 @@ export const TYPERT = {
223
232
  typeSymbol: 'dsh-plugin-shop/types#ShopRestartResult',
224
233
  schema: dsh_plugin_shop_shop_restart_result$schema,
225
234
  },
226
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":491,"column":9},
235
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":721,"column":9},
227
236
  },
228
237
  {
229
238
  id: 'dsh-plugin-shop#shop/setEnabled',
@@ -248,7 +257,7 @@ export const TYPERT = {
248
257
  typeSymbol: 'dsh-plugin-shop/types#ShopSetEnabledResult',
249
258
  schema: dsh_plugin_shop_shop_setEnabled_result$schema,
250
259
  },
251
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":241,"column":3},
260
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":400,"column":3},
252
261
  },
253
262
  {
254
263
  id: 'dsh-plugin-shop#shop/uninstallStart',
@@ -274,7 +283,7 @@ export const TYPERT = {
274
283
  typeSymbol: 'dsh-plugin-shop/types#ShopUninstallResult',
275
284
  schema: dsh_plugin_shop_shop_uninstallStart_result$schema,
276
285
  },
277
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":451,"column":9},
286
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":668,"column":9},
278
287
  },
279
288
  {
280
289
  id: 'dsh-plugin-shop#shop/updateStart',
@@ -299,7 +308,7 @@ export const TYPERT = {
299
308
  typeSymbol: 'dsh-plugin-shop/types#ShopUpdateResult',
300
309
  schema: dsh_plugin_shop_shop_updateStart_result$schema,
301
310
  },
302
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":540,"column":9},
311
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":781,"column":9},
303
312
  },
304
313
  {
305
314
  id: 'dsh-plugin-shop#shop/version',
@@ -314,7 +323,7 @@ export const TYPERT = {
314
323
  typeSymbol: 'dsh-plugin-shop/types#ShopVersionResult',
315
324
  schema: dsh_plugin_shop_shop_version_result$schema,
316
325
  },
317
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":525,"column":9},
326
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":765,"column":9},
318
327
  },
319
328
  ],
320
329
  model: {
@@ -352,7 +361,7 @@ export const TYPERT = {
352
361
  "name": "install",
353
362
  "signature": "@Remote('installStart') async install(args: InstallArgs): Promise<ShopInstallResult>",
354
363
  "summary": "Install one cataloged version into the profile (§7.2).",
355
- "jsDoc": "/**\n * Install one cataloged version into the profile (§7.2). The four rejection\n * paths run against this Host's snapshot before anything is spawned; only a\n * passing request reaches the executor.\n */"
364
+ "jsDoc": "/**\n * Install one cataloged version into the profile (§7.2). The rejection\n * paths run against this Host's snapshot before anything is spawned; only a\n * passing request reaches the executor.\n */"
356
365
  },
357
366
  {
358
367
  "kind": "method",
@@ -400,11 +409,11 @@ export const TYPERT = {
400
409
  "types": [
401
410
  {
402
411
  "name": "CatalogEntry",
403
- "declaration": "export interface CatalogEntry {\n name: string;\n version: string;\n integrity: string | null;\n publishedAt: string | null;\n repository: string | null;\n license: string | null;\n tier: 'verified' | 'verified-stale' | 'community';\n metadata: 'declared' | 'derived';\n review?: { reviewedVersion?: string; reviewedCommit?: string; reviewer: string; reviewCommit: string; notes: string; };\n catalog?: CatalogSection;\n source: 'npm' | 'github';\n repo?: string;\n subdir?: string;\n}"
412
+ "declaration": "export interface CatalogEntry {\n name: string;\n version: string;\n integrity: string | null;\n publishedAt: string | null;\n repository: string | null;\n license: string | null;\n tier: 'verified' | 'verified-stale' | 'community';\n metadata: 'declared' | 'derived';\n review?: { reviewedVersion?: string; reviewedCommit?: string; reviewedSha256?: string; reviewer: string; reviewCommit: string; notes: string; };\n catalog?: CatalogSection;\n source: 'npm' | 'github';\n repo?: string;\n subdir?: string;\n tarball?: { url: string; sha256: string; };\n added: string;\n}"
404
413
  },
405
414
  {
406
415
  "name": "CatalogSection",
407
- "declaration": "export interface CatalogSection {\n category: 'tool' | 'provider' | 'ui' | 'workflow' | 'integration' | 'other';\n summary: CatalogSummary;\n capabilities: string[];\n}"
416
+ "declaration": "export interface CatalogSection {\n category: 'tool' | 'provider' | 'ui' | 'workflow' | 'integration' | 'theme' | 'other';\n summary: CatalogSummary;\n capabilities: string[];\n}"
408
417
  },
409
418
  {
410
419
  "name": "CatalogSummary",
@@ -412,7 +421,7 @@ export const TYPERT = {
412
421
  },
413
422
  {
414
423
  "name": "DeniedEntry",
415
- "declaration": "export interface DeniedEntry {\n name: string;\n detail: string;\n}"
424
+ "declaration": "export interface DeniedEntry {\n name: string;\n detail: string;\n replacement?: string;\n}"
416
425
  },
417
426
  {
418
427
  "name": "InstallArgs",
@@ -420,7 +429,7 @@ export const TYPERT = {
420
429
  },
421
430
  {
422
431
  "name": "InstallRejectionCode",
423
- "declaration": "export type InstallRejectionCode = 'not-in-catalog' | 'denied' | 'version-mismatch' | 'needs-acknowledgement' | 'git-missing';"
432
+ "declaration": "export type InstallRejectionCode = 'not-in-catalog' | 'denied' | 'version-mismatch' | 'needs-acknowledgement' | 'git-missing' | 'tarball-integrity';"
424
433
  },
425
434
  {
426
435
  "name": "InstallState",
@@ -428,7 +437,7 @@ export const TYPERT = {
428
437
  },
429
438
  {
430
439
  "name": "InstallStatus",
431
- "declaration": "export interface InstallStatus {\n state: InstallState;\n log: string[];\n needsRestart?: boolean;\n detail?: string;\n}"
440
+ "declaration": "export interface InstallStatus {\n state: InstallState;\n log: string[];\n needsRestart?: boolean;\n restartReason?: string;\n detail?: string;\n}"
432
441
  },
433
442
  {
434
443
  "name": "RestartOutcome",
@@ -468,7 +477,7 @@ export const TYPERT = {
468
477
  },
469
478
  {
470
479
  "name": "ShopVersionResult",
471
- "declaration": "export interface ShopVersionResult {\n installed: string;\n latest: string | null;\n outdated: boolean;\n}"
480
+ "declaration": "export interface ShopVersionResult {\n installed: string;\n latest: string | null;\n outdated: boolean;\n restartSupported: boolean;\n}"
472
481
  }
473
482
  ]
474
483
  }
@@ -20,12 +20,13 @@ const dsh_plugin_shop_shop_catalog_result$schema = z.object({
20
20
  'review': z.union([z.undefined(), z.object({
21
21
  'reviewedVersion': z.union([z.undefined(), z.string()]).optional(),
22
22
  'reviewedCommit': z.union([z.undefined(), z.string()]).optional(),
23
+ 'reviewedSha256': z.union([z.undefined(), z.string()]).optional(),
23
24
  'reviewer': z.string(),
24
25
  'reviewCommit': z.string(),
25
26
  'notes': z.string(),
26
27
  })]).optional(),
27
28
  'catalog': z.union([z.undefined(), z.object({
28
- 'category': z.union([z.literal("tool"), z.literal("provider"), z.literal("ui"), z.literal("workflow"), z.literal("integration"), z.literal("other")]),
29
+ 'category': z.union([z.literal("tool"), z.literal("provider"), z.literal("ui"), z.literal("workflow"), z.literal("integration"), z.literal("theme"), z.literal("other")]),
29
30
  'summary': z.object({
30
31
  'en': z.string(),
31
32
  'zh': z.union([z.undefined(), z.string()]).optional(),
@@ -35,10 +36,16 @@ const dsh_plugin_shop_shop_catalog_result$schema = z.object({
35
36
  'source': z.union([z.literal("npm"), z.literal("github")]),
36
37
  'repo': z.union([z.undefined(), z.string()]).optional(),
37
38
  'subdir': z.union([z.undefined(), z.string()]).optional(),
39
+ 'tarball': z.union([z.undefined(), z.object({
40
+ 'url': z.string(),
41
+ 'sha256': z.string(),
42
+ })]).optional(),
43
+ 'added': z.string(),
38
44
  })),
39
45
  'denied': z.array(z.object({
40
46
  'name': z.string(),
41
47
  'detail': z.string(),
48
+ 'replacement': z.union([z.undefined(), z.string()]).optional(),
42
49
  })),
43
50
  'stars': z.record(z.string(), z.number()),
44
51
  })
@@ -59,7 +66,7 @@ const dsh_plugin_shop_shop_installStart_result$schema = z.union([z.object({
59
66
  'installId': z.string(),
60
67
  }), z.object({
61
68
  'ok': z.literal(false),
62
- 'code': z.union([z.literal("not-in-catalog"), z.literal("denied"), z.literal("version-mismatch"), z.literal("needs-acknowledgement"), z.literal("git-missing")]),
69
+ 'code': z.union([z.literal("not-in-catalog"), z.literal("denied"), z.literal("version-mismatch"), z.literal("needs-acknowledgement"), z.literal("git-missing"), z.literal("tarball-integrity")]),
63
70
  'detail': z.string(),
64
71
  })])
65
72
  const dsh_plugin_shop_shop_installStatus_parameter_0$schema = z.object({
@@ -70,6 +77,7 @@ const dsh_plugin_shop_shop_installStatus_result$schema = z.object({
70
77
  'state': z.union([z.literal("running"), z.literal("done"), z.literal("failed")]),
71
78
  'log': z.array(z.string()),
72
79
  'needsRestart': z.union([z.undefined(), z.literal(false), z.literal(true)]).optional(),
80
+ 'restartReason': z.union([z.undefined(), z.string()]).optional(),
73
81
  'detail': z.union([z.undefined(), z.string()]).optional(),
74
82
  })
75
83
  const dsh_plugin_shop_shop_restart_result$schema = z.union([z.object({
@@ -110,6 +118,7 @@ const dsh_plugin_shop_shop_version_result$schema = z.object({
110
118
  'installed': z.string(),
111
119
  'latest': z.union([z.literal(null), z.string()]),
112
120
  'outdated': z.boolean(),
121
+ 'restartSupported': z.boolean(),
113
122
  })
114
123
 
115
124
  export const TYPERT_REMOTE = {
@@ -139,7 +148,7 @@ export const TYPERT_REMOTE = {
139
148
  typeSymbol: 'dsh-plugin-shop/types#ShopCatalogResult',
140
149
  schema: dsh_plugin_shop_shop_catalog_result$schema,
141
150
  },
142
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":275,"column":9},
151
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":447,"column":9},
143
152
  },
144
153
  {
145
154
  id: 'dsh-plugin-shop#shop/installed',
@@ -154,7 +163,7 @@ export const TYPERT_REMOTE = {
154
163
  typeSymbol: 'dsh-plugin-shop#shop/installed:result',
155
164
  schema: dsh_plugin_shop_shop_installed_result$schema,
156
165
  },
157
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":380,"column":9},
166
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":597,"column":9},
158
167
  },
159
168
  {
160
169
  id: 'dsh-plugin-shop#shop/installStart',
@@ -180,7 +189,7 @@ export const TYPERT_REMOTE = {
180
189
  typeSymbol: 'dsh-plugin-shop/types#ShopInstallResult',
181
190
  schema: dsh_plugin_shop_shop_installStart_result$schema,
182
191
  },
183
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":301,"column":9},
192
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":473,"column":9},
184
193
  },
185
194
  {
186
195
  id: 'dsh-plugin-shop#shop/installStatus',
@@ -205,7 +214,7 @@ export const TYPERT_REMOTE = {
205
214
  typeSymbol: 'dsh-plugin-shop/types#ShopInstallStatusResult',
206
215
  schema: dsh_plugin_shop_shop_installStatus_result$schema,
207
216
  },
208
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":369,"column":3},
217
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":586,"column":3},
209
218
  },
210
219
  {
211
220
  id: 'dsh-plugin-shop#shop/restart',
@@ -220,7 +229,7 @@ export const TYPERT_REMOTE = {
220
229
  typeSymbol: 'dsh-plugin-shop/types#ShopRestartResult',
221
230
  schema: dsh_plugin_shop_shop_restart_result$schema,
222
231
  },
223
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":491,"column":9},
232
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":721,"column":9},
224
233
  },
225
234
  {
226
235
  id: 'dsh-plugin-shop#shop/setEnabled',
@@ -245,7 +254,7 @@ export const TYPERT_REMOTE = {
245
254
  typeSymbol: 'dsh-plugin-shop/types#ShopSetEnabledResult',
246
255
  schema: dsh_plugin_shop_shop_setEnabled_result$schema,
247
256
  },
248
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":241,"column":3},
257
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":400,"column":3},
249
258
  },
250
259
  {
251
260
  id: 'dsh-plugin-shop#shop/uninstallStart',
@@ -271,7 +280,7 @@ export const TYPERT_REMOTE = {
271
280
  typeSymbol: 'dsh-plugin-shop/types#ShopUninstallResult',
272
281
  schema: dsh_plugin_shop_shop_uninstallStart_result$schema,
273
282
  },
274
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":451,"column":9},
283
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":668,"column":9},
275
284
  },
276
285
  {
277
286
  id: 'dsh-plugin-shop#shop/updateStart',
@@ -296,7 +305,7 @@ export const TYPERT_REMOTE = {
296
305
  typeSymbol: 'dsh-plugin-shop/types#ShopUpdateResult',
297
306
  schema: dsh_plugin_shop_shop_updateStart_result$schema,
298
307
  },
299
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":540,"column":9},
308
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":781,"column":9},
300
309
  },
301
310
  {
302
311
  id: 'dsh-plugin-shop#shop/version',
@@ -311,7 +320,7 @@ export const TYPERT_REMOTE = {
311
320
  typeSymbol: 'dsh-plugin-shop/types#ShopVersionResult',
312
321
  schema: dsh_plugin_shop_shop_version_result$schema,
313
322
  },
314
- sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":525,"column":9},
323
+ sourceLocation: {"file":"packages/dsh-plugin-shop/src/host/index.ts","line":765,"column":9},
315
324
  },
316
325
  ],
317
326
  }
@@ -15,6 +15,7 @@ export declare const zh: {
15
15
  categoryUi: string;
16
16
  categoryWorkflow: string;
17
17
  categoryIntegration: string;
18
+ categoryTheme: string;
18
19
  categoryOther: string;
19
20
  empty: string;
20
21
  emptySearch: string;
@@ -39,11 +40,13 @@ export declare const zh: {
39
40
  license: string;
40
41
  customLicense: string;
41
42
  reviewedVersionLine: string;
43
+ reviewedPinLine: string;
42
44
  deniedCode: string;
43
45
  notInCatalogCode: string;
44
46
  versionMismatchCode: string;
45
47
  needsAcknowledgementCode: string;
46
48
  gitMissingCode: string;
49
+ tarballIntegrityCode: string;
47
50
  githubSource: string;
48
51
  installedSection: string;
49
52
  installedVersion: string;
@@ -54,6 +57,7 @@ export declare const zh: {
54
57
  uninstalling: string;
55
58
  uninstallFailed: string;
56
59
  uninstallTransportFailed: string;
60
+ uninstalledLiveNotice: string;
57
61
  uninstalledRestartNotice: string;
58
62
  restart: string;
59
63
  restartTitle: string;
@@ -62,6 +66,7 @@ export declare const zh: {
62
66
  restarting: string;
63
67
  restartFailedNotice: string;
64
68
  restartTransportFailed: string;
69
+ restartDisabledNotice: string;
65
70
  updateFailed: string;
66
71
  updateTransportFailed: string;
67
72
  checkUpdate: string;
@@ -89,6 +94,7 @@ export declare const en: {
89
94
  categoryUi: string;
90
95
  categoryWorkflow: string;
91
96
  categoryIntegration: string;
97
+ categoryTheme: string;
92
98
  categoryOther: string;
93
99
  empty: string;
94
100
  emptySearch: string;
@@ -113,11 +119,13 @@ export declare const en: {
113
119
  license: string;
114
120
  customLicense: string;
115
121
  reviewedVersionLine: string;
122
+ reviewedPinLine: string;
116
123
  deniedCode: string;
117
124
  notInCatalogCode: string;
118
125
  versionMismatchCode: string;
119
126
  needsAcknowledgementCode: string;
120
127
  gitMissingCode: string;
128
+ tarballIntegrityCode: string;
121
129
  githubSource: string;
122
130
  installedSection: string;
123
131
  installedVersion: string;
@@ -128,6 +136,7 @@ export declare const en: {
128
136
  uninstalling: string;
129
137
  uninstallFailed: string;
130
138
  uninstallTransportFailed: string;
139
+ uninstalledLiveNotice: string;
131
140
  uninstalledRestartNotice: string;
132
141
  restart: string;
133
142
  restartTitle: string;
@@ -136,6 +145,7 @@ export declare const en: {
136
145
  restarting: string;
137
146
  restartFailedNotice: string;
138
147
  restartTransportFailed: string;
148
+ restartDisabledNotice: string;
139
149
  updateFailed: string;
140
150
  updateTransportFailed: string;
141
151
  checkUpdate: string;
@@ -18,6 +18,12 @@ export declare function displayVersion(entry: {
18
18
  source: 'npm' | 'github';
19
19
  version: string;
20
20
  }): string;
21
+ /** The hash pin a stale line names for a repo or release-rescued entry — the
22
+ * reviewed commit, or the reviewed release tarball sha256 (market borrowings
23
+ * §3.1). Shortened to 7 chars like the card's own version; '' only for a
24
+ * hand-built fixture carrying no pin. The npm form is a version and keeps the
25
+ * version line's `v` prefix instead. */
26
+ export declare function reviewHashPin(review: NonNullable<CatalogEntry['review']>): string;
21
27
  /**
22
28
  * Whether the license value is the npm idiom `SEE LICENSE IN <file>` — a
23
29
  * valid SPDX form meaning "custom license, text ships in that file". The
@@ -31,6 +37,7 @@ export interface InstallStatusShape {
31
37
  state: 'running' | 'done' | 'failed';
32
38
  log: string[];
33
39
  needsRestart?: boolean;
40
+ restartReason?: string;
34
41
  detail?: string;
35
42
  }
36
43
  /** The install view state machine (§7.2). */
@@ -47,6 +54,7 @@ export type InstallView = {
47
54
  } | {
48
55
  kind: 'done';
49
56
  needsRestart: boolean;
57
+ restartReason?: string;
50
58
  } | {
51
59
  kind: 'failed';
52
60
  detail: string;
@@ -105,15 +113,16 @@ declare const CATEGORY_KEYS: {
105
113
  readonly ui: "categoryUi";
106
114
  readonly workflow: "categoryWorkflow";
107
115
  readonly integration: "categoryIntegration";
116
+ readonly theme: "categoryTheme";
108
117
  readonly other: "categoryOther";
109
118
  };
110
119
  /** The locale key for one entry's category — derived entries read as `other`
111
120
  * (§6.1: a derived listing has no declared category). */
112
121
  export declare function categoryKey(entry: CatalogEntry): ShopLocaleKey;
113
122
  /** The category vocabulary as a type, derived from the map above so the
114
- * client never repeats the six literals. */
123
+ * client never repeats the seven literals. */
115
124
  export type Category = keyof typeof CATEGORY_KEYS;
116
- /** The six categories in display order (map insertion order). */
125
+ /** The seven categories in display order (map insertion order). */
117
126
  export declare const CATEGORY_ORDER: Category[];
118
127
  /** The locale key for one bare category value (the filter buttons). */
119
128
  export declare function categoryLocaleKey(category: Category): ShopLocaleKey;
@@ -2,8 +2,10 @@
2
2
  import type { CatalogEntry, DeniedEntry } from './types.ts';
3
3
  /** Highest schemaVersion this build understands; a higher one is refused (§10).
4
4
  * 3 adds `source` and repo entries (github install channel); 4 adds `subdir`
5
- * for monorepo-subpackage entries (2026-08-31 hub-borrowings A). */
6
- export declare const SUPPORTED_SCHEMA_VERSION = 4;
5
+ * for monorepo-subpackage entries (2026-08-31 hub-borrowings A); 5 adds
6
+ * `added`, `tarball` (release rescue), the `theme` category, and
7
+ * `denied[].replacement` (2026-08-31 market borrowings). */
8
+ export declare const SUPPORTED_SCHEMA_VERSION = 5;
7
9
  export interface CatalogSnapshot {
8
10
  schemaVersion: number;
9
11
  builtAt: string;
@@ -7,6 +7,7 @@ export interface InstallStatus {
7
7
  state: InstallState;
8
8
  log: string[];
9
9
  needsRestart?: boolean;
10
+ restartReason?: string;
10
11
  detail?: string;
11
12
  }
12
13
  interface RunningInstall {
@@ -17,7 +18,8 @@ interface RunningInstall {
17
18
  /**
18
19
  * Run one `dsh plugin --profile <profile> add <spec>` and track it.
19
20
  * When `expectedName` is given, a zero exit is confirmed against the profile
20
- * manifest (§7.2 step 6) before the install reports `done`.
21
+ * manifest (§7.2 step 6) before the install reports `done`. When `afterDone`
22
+ * is given, the terminal `done` waits for it to settle (§D hot mount).
21
23
  */
22
24
  export declare function startInstall(options: {
23
25
  profile: string;
@@ -25,13 +27,18 @@ export declare function startInstall(options: {
25
27
  dshBin?: string;
26
28
  env?: NodeJS.ProcessEnv;
27
29
  expectedName?: string;
30
+ afterDone?: (home: string | undefined) => Promise<{
31
+ needsRestart: boolean;
32
+ restartReason?: string;
33
+ } | void>;
28
34
  onStatus?: (status: InstallStatus) => void;
29
35
  }): RunningInstall;
30
36
  /**
31
37
  * Run one `dsh plugin --profile <profile> remove <name>` and track it.
32
38
  * When `expectedName` is given, a zero exit is confirmed against the profile
33
39
  * manifest — the bundle must actually have LEFT `dsh.profile.bundles` — before
34
- * the uninstall reports `done`.
40
+ * the uninstall reports `done`. When `afterDone` is given, the terminal `done`
41
+ * waits for it to settle (§D hot mount).
35
42
  */
36
43
  export declare function startUninstall(options: {
37
44
  profile: string;
@@ -39,6 +46,10 @@ export declare function startUninstall(options: {
39
46
  dshBin?: string;
40
47
  env?: NodeJS.ProcessEnv;
41
48
  expectedName?: string;
49
+ afterDone?: (home: string | undefined) => Promise<{
50
+ needsRestart: boolean;
51
+ restartReason?: string;
52
+ } | void>;
42
53
  onStatus?: (status: InstallStatus) => void;
43
54
  }): RunningInstall;
44
55
  export {};
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Restart-free installs: mount a freshly installed plugin into the running
3
+ * composition through a shop-owned Include subtree (design 2026-08-31
4
+ * market-borrowings §4, mechanism ported from dsh-market's hot.ts).
5
+ *
6
+ * Durable state stays with the profile's `dsh.profile.bundles`, so the next
7
+ * boot loads the plugin through the normal bundle layer. The subtree exists
8
+ * only for this process: its input files live under `<profile>/.dsh-shop/`
9
+ * and are wiped on every boot, so a crash can never leave a file that
10
+ * collides with the bundle layer (inserting an id the bundle layer also
11
+ * inserts is a hard boot failure). Rows are prefixed `mkt-` for the same
12
+ * reason: within this session the hot entry must never share an id with a
13
+ * boot-layer entry, including a disabled one left behind by an update swap.
14
+ *
15
+ * The Include subclass suppresses `write()` — the loader otherwise persists
16
+ * tree changes back to the file it read (dsh-market hot.ts; the in-tree
17
+ * precedent is dsh's agent-presets PresetTree).
18
+ *
19
+ * Deliberate non-port: dsh-market's client-only shim (`mountClientOnlyDeps`
20
+ * and `shimNames`, which hot-mounted a package with no server-side entry by
21
+ * inserting a shim loader entry) is omitted. Our catalog never lists a
22
+ * package without `dsh.bundle`, so the shim branch is unreachable here
23
+ * (YAGNI). `hotMount` still distinguishes "no patch file / not
24
+ * hot-mountable" from "restart will fix it" through the bilingual `reason`.
25
+ */
26
+ /** One hot-mountable insert row: a plain `- id:` / `name:` pair. */
27
+ export interface HotRow {
28
+ id: string;
29
+ name: string;
30
+ }
31
+ /** The loader-side surface hot mounts consume: a cordis plugin registration
32
+ * and (optionally) a logger. The real ctx satisfies this structurally. */
33
+ export interface HotContext {
34
+ plugin(plugin: unknown, config: unknown): PluginHandle;
35
+ logger?: {
36
+ info(message: string): void;
37
+ warn(message: string): void;
38
+ };
39
+ }
40
+ /** A cordis Fiber handle: `await()` settles when activation finishes (or
41
+ * fails); `dispose()` tears the fiber down. */
42
+ export interface PluginHandle {
43
+ await(): Promise<unknown>;
44
+ dispose(): Promise<unknown> | void;
45
+ }
46
+ export interface HotMountResult {
47
+ ok: boolean;
48
+ /** Bilingual, distinguishing "restart will fix it" (a transient mount
49
+ * failure) from "this package can never hot-mount" (no patch file, or a
50
+ * patch the hot tree cannot replicate). null exactly when ok. */
51
+ reason: string | null;
52
+ }
53
+ /** Test injection for the host shell (filesystem + ctx + clock). Production
54
+ * defaults: the real include import, node:fs, `join(profileDir, '.dsh-shop')`
55
+ * and `DSH_SHOP_HOT_MOUNT_TIMEOUT_MS || 10000`. */
56
+ export interface HotDeps {
57
+ /** The tree class to mount; production loads the Include class via the
58
+ * optional peer. An explicit null means "the include is unavailable" and
59
+ * short-circuits the load (the old-harness fallback). */
60
+ hotTreeClass?: unknown;
61
+ fs?: HotFs;
62
+ dir?: string;
63
+ timeoutMs?: number;
64
+ now?: () => number;
65
+ }
66
+ /** The node:fs surface hot.ts uses; injectable so tests never touch disk. */
67
+ export interface HotFs {
68
+ read: (path: string) => string;
69
+ write: (path: string, data: string) => void;
70
+ list: (path: string) => string[];
71
+ }
72
+ /**
73
+ * Parse a bundle patch into the plain insert rows a hot tree can replicate.
74
+ * Only `- id:` / `name:` pairs parse — a row with config, an expression
75
+ * name, or a dangling id returns null, and the caller falls back to restart
76
+ * activation. CRLF-aware: a patch authored with Windows line endings must
77
+ * not read as "contains config rows" (the Windows-patch regression their
78
+ * hot.ts documents). Pure: string in, rows out.
79
+ */
80
+ export declare function parseSimplePatch(patchText: string): HotRow[] | null;
81
+ /**
82
+ * Mount one installed package into the running composition through an
83
+ * Include subtree: read its bundle patch, replicate the simple rows under
84
+ * `mkt-` ids into `<profile>/.dsh-shop/hot-<n>.yml`, register the tree, and
85
+ * race its activation against `timeoutMs`. Success returns `ok: true` with
86
+ * no reason; any fallback returns `ok: false` with a bilingual reason
87
+ * distinguishing "restart will fix it" (timeout, activation failure,
88
+ * unavailable include) from "this package can never hot-mount" (no patch
89
+ * file, or rows the hot tree cannot replicate). The plugin is installed in
90
+ * the bundle layer either way, so a restart always activates it.
91
+ */
92
+ export declare function hotMount(ctx: HotContext, profileDir: string, packageName: string, deps?: HotDeps): Promise<HotMountResult>;
93
+ /**
94
+ * Dispose a package's hot mount. Returns false (without touching anything)
95
+ * when the name is not mounted; the handle leaves the map before the
96
+ * dispose so a mount can never be disposed twice, and a throwing dispose
97
+ * propagates — the plugin may still be live in this session.
98
+ */
99
+ export declare function hotUnmount(packageName: string): Promise<boolean>;
100
+ /** The package names hot-mounted this session, in mount order. */
101
+ export declare function listHotMounts(): string[];
102
+ /** Wipe the session's mount inputs at host start: `hot-<n>.yml` files under
103
+ * `<profile>/.dsh-shop/` only — anything else in the namespace directory is
104
+ * left alone, and a missing directory is a no-op. */
105
+ export declare function cleanHotDir(profileDir: string): void;