@deepseek-ai/dsh-plugin-manager 0.1.7-alpha.2 → 0.1.7-rc.2

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.
@@ -25,7 +25,7 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_inspect_result$schema = () =
25
25
  'host': z.string().readonly().optional(),
26
26
  }), z.object({
27
27
  'status': z.literal("refused").readonly(),
28
- 'problem': z.union([z.literal("network"), z.literal("unknown"), z.literal("invalid-spec"), z.literal("already-installed"), z.literal("not-found"), z.literal("not-a-package"), z.literal("not-a-bundle")]).readonly(),
28
+ 'problem': z.union([z.literal("network"), z.literal("unknown"), z.literal("invalid-spec"), z.literal("not-found"), z.literal("already-installed"), z.literal("not-a-package"), z.literal("not-a-bundle")]).readonly(),
29
29
  'reason': z.string().readonly(),
30
30
  'registries': z.array(z.union([z.literal(null), z.string()])).readonly().optional(),
31
31
  })]))
@@ -46,8 +46,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_installBundle_result$schema
46
46
  'target': z.string(),
47
47
  'enabled': z.boolean().optional(),
48
48
  'error': z.object({
49
- 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("operation-error")]),
49
+ 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("incompatible-version"), z.literal("operation-error")]),
50
50
  'diagnostic': z.string().optional(),
51
+ 'incompatible': z.array(z.object({
52
+ 'name': z.string(),
53
+ 'version': z.string(),
54
+ 'runtimeVersion': z.string(),
55
+ 'peers': z.record(z.string(), z.string()),
56
+ })).optional(),
51
57
  }).optional(),
52
58
  'warnings': z.array(z.string()).optional(),
53
59
  'packageResult': z.object({
@@ -55,7 +61,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_installBundle_result$schema
55
61
  'output': z.string(),
56
62
  'truncated': z.boolean(),
57
63
  'logPath': z.string(),
58
- 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("not-found"), z.literal("pnpm-missing"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
64
+ 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("pnpm-missing"), z.literal("not-found"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
65
+ 'timedOut': z.boolean().optional(),
66
+ 'incompatible': z.array(z.object({
67
+ 'name': z.string(),
68
+ 'version': z.string(),
69
+ 'runtimeVersion': z.string(),
70
+ 'peers': z.record(z.string(), z.string()),
71
+ })).optional(),
59
72
  }).optional(),
60
73
  'bundle': z.string().optional(),
61
74
  'pendingBuilds': z.array(z.string()).optional(),
@@ -84,8 +97,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_listBundles_result$schema =
84
97
  'removable': z.boolean(),
85
98
  'readOnlyReason': z.union([z.literal("management-required"), z.literal("unaddressable")]).optional(),
86
99
  'error': z.object({
87
- 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("operation-error")]),
100
+ 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("incompatible-version"), z.literal("operation-error")]),
88
101
  'diagnostic': z.string().optional(),
102
+ 'incompatible': z.array(z.object({
103
+ 'name': z.string(),
104
+ 'version': z.string(),
105
+ 'runtimeVersion': z.string(),
106
+ 'peers': z.record(z.string(), z.string()),
107
+ })).optional(),
89
108
  }).optional(),
90
109
  'rows': z.array(z.object({
91
110
  'rowId': z.string(),
@@ -142,6 +161,11 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_listPlugins_result$schema =
142
161
  'patchId': z.never().optional(),
143
162
  'readOnlyReason': z.union([z.literal("management-required"), z.literal("unaddressable")]),
144
163
  }))])))
164
+ let _deepseek_ai_dsh_plugin_manager_pluginManager_listVersionExemptions_result$schema$value
165
+ const _deepseek_ai_dsh_plugin_manager_pluginManager_listVersionExemptions_result$schema = () => (_deepseek_ai_dsh_plugin_manager_pluginManager_listVersionExemptions_result$schema$value ??= z.object({
166
+ 'exemptions': z.record(z.string(), z.array(z.string())),
167
+ 'warnings': z.array(z.string()),
168
+ }))
145
169
  let _deepseek_ai_dsh_plugin_manager_pluginManager_registries_result$schema$value
146
170
  const _deepseek_ai_dsh_plugin_manager_pluginManager_registries_result$schema = () => (_deepseek_ai_dsh_plugin_manager_pluginManager_registries_result$schema$value ??= z.object({
147
171
  'registry': z.union([z.literal(null), z.string()]).readonly(),
@@ -158,8 +182,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_removeBundle_result$schema =
158
182
  'target': z.string(),
159
183
  'enabled': z.boolean().optional(),
160
184
  'error': z.object({
161
- 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("operation-error")]),
185
+ 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("incompatible-version"), z.literal("operation-error")]),
162
186
  'diagnostic': z.string().optional(),
187
+ 'incompatible': z.array(z.object({
188
+ 'name': z.string(),
189
+ 'version': z.string(),
190
+ 'runtimeVersion': z.string(),
191
+ 'peers': z.record(z.string(), z.string()),
192
+ })).optional(),
163
193
  }).optional(),
164
194
  'warnings': z.array(z.string()).optional(),
165
195
  'packageResult': z.object({
@@ -167,7 +197,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_removeBundle_result$schema =
167
197
  'output': z.string(),
168
198
  'truncated': z.boolean(),
169
199
  'logPath': z.string(),
170
- 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("not-found"), z.literal("pnpm-missing"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
200
+ 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("pnpm-missing"), z.literal("not-found"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
201
+ 'timedOut': z.boolean().optional(),
202
+ 'incompatible': z.array(z.object({
203
+ 'name': z.string(),
204
+ 'version': z.string(),
205
+ 'runtimeVersion': z.string(),
206
+ 'peers': z.record(z.string(), z.string()),
207
+ })).optional(),
171
208
  }).optional(),
172
209
  'bundle': z.string().optional(),
173
210
  'pendingBuilds': z.array(z.string()).optional(),
@@ -187,8 +224,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_setBundleEnabled_result$sche
187
224
  'target': z.string(),
188
225
  'enabled': z.boolean().optional(),
189
226
  'error': z.object({
190
- 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("operation-error")]),
227
+ 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("incompatible-version"), z.literal("operation-error")]),
191
228
  'diagnostic': z.string().optional(),
229
+ 'incompatible': z.array(z.object({
230
+ 'name': z.string(),
231
+ 'version': z.string(),
232
+ 'runtimeVersion': z.string(),
233
+ 'peers': z.record(z.string(), z.string()),
234
+ })).optional(),
192
235
  }).optional(),
193
236
  'warnings': z.array(z.string()).optional(),
194
237
  'packageResult': z.object({
@@ -196,7 +239,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_setBundleEnabled_result$sche
196
239
  'output': z.string(),
197
240
  'truncated': z.boolean(),
198
241
  'logPath': z.string(),
199
- 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("not-found"), z.literal("pnpm-missing"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
242
+ 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("pnpm-missing"), z.literal("not-found"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
243
+ 'timedOut': z.boolean().optional(),
244
+ 'incompatible': z.array(z.object({
245
+ 'name': z.string(),
246
+ 'version': z.string(),
247
+ 'runtimeVersion': z.string(),
248
+ 'peers': z.record(z.string(), z.string()),
249
+ })).optional(),
200
250
  }).optional(),
201
251
  'bundle': z.string().optional(),
202
252
  'pendingBuilds': z.array(z.string()).optional(),
@@ -216,8 +266,60 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_setPluginEnabled_result$sche
216
266
  'target': z.string(),
217
267
  'enabled': z.boolean().optional(),
218
268
  'error': z.object({
219
- 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("operation-error")]),
269
+ 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("incompatible-version"), z.literal("operation-error")]),
270
+ 'diagnostic': z.string().optional(),
271
+ 'incompatible': z.array(z.object({
272
+ 'name': z.string(),
273
+ 'version': z.string(),
274
+ 'runtimeVersion': z.string(),
275
+ 'peers': z.record(z.string(), z.string()),
276
+ })).optional(),
277
+ }).optional(),
278
+ 'warnings': z.array(z.string()).optional(),
279
+ 'packageResult': z.object({
280
+ 'exitCode': z.number(),
281
+ 'output': z.string(),
282
+ 'truncated': z.boolean(),
283
+ 'logPath': z.string(),
284
+ 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("pnpm-missing"), z.literal("not-found"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
285
+ 'timedOut': z.boolean().optional(),
286
+ 'incompatible': z.array(z.object({
287
+ 'name': z.string(),
288
+ 'version': z.string(),
289
+ 'runtimeVersion': z.string(),
290
+ 'peers': z.record(z.string(), z.string()),
291
+ })).optional(),
292
+ }).optional(),
293
+ 'bundle': z.string().optional(),
294
+ 'pendingBuilds': z.array(z.string()).optional(),
295
+ 'approvedBuilds': z.array(z.string()).optional(),
296
+ 'registries': z.array(z.union([z.literal(null), z.string()])).optional(),
297
+ 'failedAt': z.union([z.literal("registry"), z.literal("spec-host")]).optional(),
298
+ }))
299
+ let _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_0$schema$value
300
+ const _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_0$schema = () => (_deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_0$schema$value ??= z.string())
301
+ let _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_1$schema$value
302
+ const _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_1$schema = () => (_deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_1$schema$value ??= z.string())
303
+ let _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_2$schema$value
304
+ const _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_2$schema = () => (_deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_2$schema$value ??= z.boolean())
305
+ let _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_3$schema$value
306
+ const _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_3$schema = () => (_deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_3$schema$value ??= z.union([z.undefined(), z.literal(false), z.literal(true)]))
307
+ let _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_result$schema$value
308
+ const _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_result$schema = () => (_deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_result$schema$value ??= z.object({
309
+ 'changed': z.boolean(),
310
+ 'application': z.union([z.literal("cancelled"), z.literal("failed"), z.literal("applied"), z.literal("restart-required"), z.literal("overridden")]),
311
+ 'stage': z.union([z.literal("remove"), z.literal("install"), z.literal("enable")]),
312
+ 'target': z.string(),
313
+ 'enabled': z.boolean().optional(),
314
+ 'error': z.object({
315
+ 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("incompatible-version"), z.literal("operation-error")]),
220
316
  'diagnostic': z.string().optional(),
317
+ 'incompatible': z.array(z.object({
318
+ 'name': z.string(),
319
+ 'version': z.string(),
320
+ 'runtimeVersion': z.string(),
321
+ 'peers': z.record(z.string(), z.string()),
322
+ })).optional(),
221
323
  }).optional(),
222
324
  'warnings': z.array(z.string()).optional(),
223
325
  'packageResult': z.object({
@@ -225,7 +327,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_setPluginEnabled_result$sche
225
327
  'output': z.string(),
226
328
  'truncated': z.boolean(),
227
329
  'logPath': z.string(),
228
- 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("not-found"), z.literal("pnpm-missing"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
330
+ 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("pnpm-missing"), z.literal("not-found"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
331
+ 'timedOut': z.boolean().optional(),
332
+ 'incompatible': z.array(z.object({
333
+ 'name': z.string(),
334
+ 'version': z.string(),
335
+ 'runtimeVersion': z.string(),
336
+ 'peers': z.record(z.string(), z.string()),
337
+ })).optional(),
229
338
  }).optional(),
230
339
  'bundle': z.string().optional(),
231
340
  'pendingBuilds': z.array(z.string()).optional(),
@@ -243,8 +352,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_waitForInstall_result$schema
243
352
  'target': z.string(),
244
353
  'enabled': z.boolean().optional(),
245
354
  'error': z.object({
246
- 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("operation-error")]),
355
+ 'code': z.union([z.literal("management-required"), z.literal("unaddressable"), z.literal("unknown-plugin"), z.literal("invalid-spec"), z.literal("ambiguous-install"), z.literal("not-bundle"), z.literal("not-removable"), z.literal("stop-profile"), z.literal("bundle-in-use"), z.literal("stale-approval"), z.literal("incompatible-version"), z.literal("operation-error")]),
247
356
  'diagnostic': z.string().optional(),
357
+ 'incompatible': z.array(z.object({
358
+ 'name': z.string(),
359
+ 'version': z.string(),
360
+ 'runtimeVersion': z.string(),
361
+ 'peers': z.record(z.string(), z.string()),
362
+ })).optional(),
248
363
  }).optional(),
249
364
  'warnings': z.array(z.string()).optional(),
250
365
  'packageResult': z.object({
@@ -252,7 +367,14 @@ const _deepseek_ai_dsh_plugin_manager_pluginManager_waitForInstall_result$schema
252
367
  'output': z.string(),
253
368
  'truncated': z.boolean(),
254
369
  'logPath': z.string(),
255
- 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("not-found"), z.literal("pnpm-missing"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
370
+ 'kind': z.union([z.literal("network"), z.literal("unknown"), z.literal("timeout"), z.literal("integrity"), z.literal("pnpm-missing"), z.literal("not-found"), z.literal("no-matching-version"), z.literal("disk-full"), z.literal("permission"), z.literal("build-blocked")]).optional(),
371
+ 'timedOut': z.boolean().optional(),
372
+ 'incompatible': z.array(z.object({
373
+ 'name': z.string(),
374
+ 'version': z.string(),
375
+ 'runtimeVersion': z.string(),
376
+ 'peers': z.record(z.string(), z.string()),
377
+ })).optional(),
256
378
  }).optional(),
257
379
  'bundle': z.string().optional(),
258
380
  'pendingBuilds': z.array(z.string()).optional(),
@@ -287,7 +409,7 @@ export const TYPERT_REMOTE = {
287
409
  typeSymbol: '@deepseek-ai/dsh-plugin-manager/types#PluginInstallCancellation',
288
410
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_cancelInstall_result$schema,
289
411
  },
290
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":516,"column":9},
412
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":585,"column":9},
291
413
  },
292
414
  {
293
415
  id: '@deepseek-ai/dsh-plugin-manager#pluginManager/inspect',
@@ -324,7 +446,7 @@ export const TYPERT_REMOTE = {
324
446
  typeSymbol: '@deepseek-ai/dsh-plugin-manager/types#PluginSpecInspection',
325
447
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_inspect_result$schema,
326
448
  },
327
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":299,"column":9},
449
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":341,"column":9},
328
450
  },
329
451
  {
330
452
  id: '@deepseek-ai/dsh-plugin-manager#pluginManager/installBundle',
@@ -360,7 +482,7 @@ export const TYPERT_REMOTE = {
360
482
  typeSymbol: '@deepseek-ai/dsh-plugin-manager/types#ChangeResult',
361
483
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_installBundle_result$schema,
362
484
  },
363
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":418,"column":3},
485
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":462,"column":3},
364
486
  },
365
487
  {
366
488
  id: '@deepseek-ai/dsh-plugin-manager#pluginManager/listBundles',
@@ -375,7 +497,7 @@ export const TYPERT_REMOTE = {
375
497
  typeSymbol: '@deepseek-ai/dsh-plugin-manager#pluginManager/listBundles:result',
376
498
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_listBundles_result$schema,
377
499
  },
378
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":241,"column":3},
500
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":280,"column":3},
379
501
  },
380
502
  {
381
503
  id: '@deepseek-ai/dsh-plugin-manager#pluginManager/listPlugins',
@@ -390,7 +512,22 @@ export const TYPERT_REMOTE = {
390
512
  typeSymbol: '@deepseek-ai/dsh-plugin-manager#pluginManager/listPlugins:result',
391
513
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_listPlugins_result$schema,
392
514
  },
393
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":217,"column":9},
515
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":256,"column":9},
516
+ },
517
+ {
518
+ id: '@deepseek-ai/dsh-plugin-manager#pluginManager/listVersionExemptions',
519
+ service: 'pluginManager',
520
+ namespace: 'pluginManager',
521
+ method: 'listVersionExemptions',
522
+ invocation: { kind: 'direct' },
523
+ parameters: [
524
+ ],
525
+ result: {
526
+ mode: 'strict',
527
+ typeSymbol: '@deepseek-ai/dsh-plugin-manager#pluginManager/listVersionExemptions:result',
528
+ create: _deepseek_ai_dsh_plugin_manager_pluginManager_listVersionExemptions_result$schema,
529
+ },
530
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":232,"column":3},
394
531
  },
395
532
  {
396
533
  id: '@deepseek-ai/dsh-plugin-manager#pluginManager/registries',
@@ -405,7 +542,7 @@ export const TYPERT_REMOTE = {
405
542
  typeSymbol: '@deepseek-ai/dsh-plugin-manager/types#PluginRegistries',
406
543
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_registries_result$schema,
407
544
  },
408
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":283,"column":9},
545
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":325,"column":9},
409
546
  },
410
547
  {
411
548
  id: '@deepseek-ai/dsh-plugin-manager#pluginManager/removeBundle',
@@ -430,7 +567,7 @@ export const TYPERT_REMOTE = {
430
567
  typeSymbol: '@deepseek-ai/dsh-plugin-manager/types#ChangeResult',
431
568
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_removeBundle_result$schema,
432
569
  },
433
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":532,"column":3},
570
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":601,"column":3},
434
571
  },
435
572
  {
436
573
  id: '@deepseek-ai/dsh-plugin-manager#pluginManager/setBundleEnabled',
@@ -465,7 +602,7 @@ export const TYPERT_REMOTE = {
465
602
  typeSymbol: '@deepseek-ai/dsh-plugin-manager/types#ChangeResult',
466
603
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_setBundleEnabled_result$schema,
467
604
  },
468
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":401,"column":3},
605
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":443,"column":3},
469
606
  },
470
607
  {
471
608
  id: '@deepseek-ai/dsh-plugin-manager#pluginManager/setPluginEnabled',
@@ -500,7 +637,63 @@ export const TYPERT_REMOTE = {
500
637
  typeSymbol: '@deepseek-ai/dsh-plugin-manager/types#ChangeResult',
501
638
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_setPluginEnabled_result$schema,
502
639
  },
503
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":383,"column":3},
640
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":425,"column":3},
641
+ },
642
+ {
643
+ id: '@deepseek-ai/dsh-plugin-manager#pluginManager/setVersionExemption',
644
+ service: 'pluginManager',
645
+ namespace: 'pluginManager',
646
+ method: 'setVersionExemption',
647
+ invocation: { kind: 'direct' },
648
+ parameters: [
649
+ {
650
+ name: 'packageVersion',
651
+ wire: 'packageVersion',
652
+ source: 'json',
653
+ codec: {
654
+ mode: 'strict',
655
+ typeSymbol: '@deepseek-ai/dsh-plugin-manager#pluginManager/setVersionExemption:packageVersion',
656
+ create: _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_0$schema,
657
+ },
658
+ },
659
+ {
660
+ name: 'runtimeVersion',
661
+ wire: 'runtimeVersion',
662
+ source: 'json',
663
+ codec: {
664
+ mode: 'strict',
665
+ typeSymbol: '@deepseek-ai/dsh-plugin-manager#pluginManager/setVersionExemption:runtimeVersion',
666
+ create: _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_1$schema,
667
+ },
668
+ },
669
+ {
670
+ name: 'enabled',
671
+ wire: 'enabled',
672
+ source: 'json',
673
+ codec: {
674
+ mode: 'strict',
675
+ typeSymbol: '@deepseek-ai/dsh-plugin-manager#pluginManager/setVersionExemption:enabled',
676
+ create: _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_2$schema,
677
+ },
678
+ },
679
+ {
680
+ name: 'acceptRisk',
681
+ wire: 'acceptRisk',
682
+ source: 'json',
683
+ acceptsUndefined: true,
684
+ codec: {
685
+ mode: 'strict',
686
+ typeSymbol: '@deepseek-ai/dsh-plugin-manager#pluginManager/setVersionExemption:acceptRisk',
687
+ create: _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_parameter_3$schema,
688
+ },
689
+ },
690
+ ],
691
+ result: {
692
+ mode: 'strict',
693
+ typeSymbol: '@deepseek-ai/dsh-plugin-manager/types#ChangeResult',
694
+ create: _deepseek_ai_dsh_plugin_manager_pluginManager_setVersionExemption_result$schema,
695
+ },
696
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":245,"column":3},
504
697
  },
505
698
  {
506
699
  id: '@deepseek-ai/dsh-plugin-manager#pluginManager/waitForInstall',
@@ -525,7 +718,7 @@ export const TYPERT_REMOTE = {
525
718
  typeSymbol: '@deepseek-ai/dsh-plugin-manager#pluginManager/waitForInstall:result',
526
719
  create: _deepseek_ai_dsh_plugin_manager_pluginManager_waitForInstall_result$schema,
527
720
  },
528
- sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":506,"column":9},
721
+ sourceLocation: {"file":"packages/boot/plugin-manager/src/index.ts","line":575,"column":9},
529
722
  },
530
723
  ],
531
724
  }
@@ -1,10 +1,22 @@
1
1
  /** Localizable rejections shared by profile management operations. */
2
- import type { ManagementError } from './types.ts';
2
+ import type { PluginCompatibility } from '@deepseek-ai/dsh-app-boot';
3
+ import type { IncompatiblePlugin, ManagementError } from './types.ts';
3
4
  /** Expected management rejection; presentation belongs to the caller's locale. */
4
5
  export declare class ManagementFailure extends Error {
5
6
  /** Code rendered by the caller's locale dictionary. */
6
7
  readonly code: ManagementError['code'];
7
- /** @param code Localizable management rejection. */
8
- constructor(code: ManagementError['code']);
8
+ /** The packages an `incompatible-version` rejection names. */
9
+ readonly incompatible: IncompatiblePlugin[] | undefined;
10
+ /**
11
+ * @param code Localizable management rejection.
12
+ * @param incompatible Packages the running DSH version rejects, for `incompatible-version`.
13
+ */
14
+ constructor(code: ManagementError['code'], incompatible?: IncompatiblePlugin[]);
9
15
  }
16
+ /**
17
+ * Drop the exemption status from an unexempted compatibility result.
18
+ * @param issue Result whose exemption is not active.
19
+ * @returns The package, runtime, and rejected peer ranges.
20
+ */
21
+ export declare function incompatiblePlugin(issue: PluginCompatibility): IncompatiblePlugin;
10
22
  //# sourceMappingURL=failure.d.ts.map
@@ -2,7 +2,24 @@
2
2
  export class ManagementFailure extends Error {
3
3
  /** Code rendered by the caller's locale dictionary. */
4
4
  code;
5
- /** @param code Localizable management rejection. */
6
- constructor(code) { super(code); this.code = code; }
5
+ /** The packages an `incompatible-version` rejection names. */
6
+ incompatible;
7
+ /**
8
+ * @param code Localizable management rejection.
9
+ * @param incompatible Packages the running DSH version rejects, for `incompatible-version`.
10
+ */
11
+ constructor(code, incompatible) {
12
+ super(code);
13
+ this.code = code;
14
+ this.incompatible = incompatible;
15
+ }
16
+ }
17
+ /**
18
+ * Drop the exemption status from an unexempted compatibility result.
19
+ * @param issue Result whose exemption is not active.
20
+ * @returns The package, runtime, and rejected peer ranges.
21
+ */
22
+ export function incompatiblePlugin(issue) {
23
+ return { name: issue.name, version: issue.version, runtimeVersion: issue.runtimeVersion, peers: issue.peers };
7
24
  }
8
25
  //# sourceMappingURL=failure.js.map
@@ -0,0 +1,21 @@
1
+ import type { ParsedInstallSpec } from './install-spec.ts';
2
+ import type { PackageResult } from './types.ts';
3
+ /** Deadline, diagnostics and cancellation for one read-only GitHub check. */
4
+ export interface GithubConnectionOptions {
5
+ timeoutMs: number;
6
+ outputBytes: number;
7
+ signal: AbortSignal;
8
+ /** The application-owned package manager's environment, also used by its Git children. */
9
+ env?: Readonly<Record<string, string>>;
10
+ }
11
+ /**
12
+ * Check a GitHub repository before pnpm starts, without downloading or building its package.
13
+ * Git reads the profile's Git and proxy configuration without invoking credential helpers or prompting.
14
+ * Timeout and cancellation terminate its descendants too; pnpm owns authentication and transport fallback.
15
+ * @param spec The parsed installation address; npm packages, local paths and other hosts are not checked.
16
+ * @param dir The profile directory where installation runs.
17
+ * @param options The connection deadline, output bound and operation cancellation.
18
+ * @returns A failed check with bounded output and a complete log at logPath, or undefined for a reachable repository or an unhandled spec.
19
+ */
20
+ export declare function checkGithubConnection(spec: ParsedInstallSpec, dir: string, options: GithubConnectionOptions): Promise<PackageResult | undefined>;
21
+ //# sourceMappingURL=github-connection.d.ts.map
@@ -0,0 +1,61 @@
1
+ /** Bounded GitHub repository checks using the installer's Git configuration and environment. */
2
+ import { mkdir, mkdtemp, open } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { execa } from 'execa';
5
+ import { scrubbedParentEnv } from '@deepseek-ai/dsh-subprocess';
6
+ import { classifyInstallFailure } from "./install-failure.js";
7
+ /**
8
+ * Check a GitHub repository before pnpm starts, without downloading or building its package.
9
+ * Git reads the profile's Git and proxy configuration without invoking credential helpers or prompting.
10
+ * Timeout and cancellation terminate its descendants too; pnpm owns authentication and transport fallback.
11
+ * @param spec The parsed installation address; npm packages, local paths and other hosts are not checked.
12
+ * @param dir The profile directory where installation runs.
13
+ * @param options The connection deadline, output bound and operation cancellation.
14
+ * @returns A failed check with bounded output and a complete log at logPath, or undefined for a reachable repository or an unhandled spec.
15
+ */
16
+ export async function checkGithubConnection(spec, dir, options) {
17
+ if (spec.kind !== 'git')
18
+ return undefined;
19
+ const host = spec.host.toLowerCase().replace(/:.*$/, '');
20
+ if (host !== 'github.com' && !host.endsWith('.github.com'))
21
+ return undefined;
22
+ const repository = spec.spec.replace(/#.*$/s, '')
23
+ .replace(/^github:/i, 'https://github.com/')
24
+ .replace(/^gist:/i, 'https://gist.github.com/')
25
+ .replace(/^git\+/i, '');
26
+ const logRoot = join(dir, '.plugin-manager', 'logs');
27
+ await mkdir(logRoot, { recursive: true, mode: 0o700 });
28
+ const logDir = await mkdtemp(join(logRoot, 'github-connection-'));
29
+ const logPath = join(logDir, 'git.log');
30
+ const log = await open(logPath, 'ax+', 0o600);
31
+ try {
32
+ const result = await execa('git', ['-c', 'credential.helper=', 'ls-remote', '--', repository, 'HEAD'], {
33
+ cwd: dir,
34
+ env: {
35
+ ...scrubbedParentEnv(), ...options.env, LC_ALL: 'C', GIT_TERMINAL_PROMPT: '0',
36
+ GIT_ASKPASS: '', SSH_ASKPASS: '', SSH_ASKPASS_REQUIRE: 'never',
37
+ },
38
+ extendEnv: false,
39
+ stdin: 'ignore', stdout: 'ignore', stderr: { file: logPath, append: true }, buffer: false, reject: false,
40
+ timeout: options.timeoutMs, cancelSignal: options.signal, killDescendants: true, killSignal: 'SIGKILL',
41
+ });
42
+ if (!result.failed)
43
+ return undefined;
44
+ if (result.timedOut)
45
+ await log.write(`dsh: connection to ${spec.host} timed out after ${String(options.timeoutMs)}ms\n`);
46
+ if ((await log.stat()).size === 0)
47
+ await log.write(result.shortMessage ?? 'GitHub connection check failed');
48
+ const { size } = await log.stat();
49
+ const bytes = Buffer.alloc(Math.min(size, options.outputBytes));
50
+ await log.read(bytes, 0, bytes.length, size - bytes.length);
51
+ const output = bytes.toString('utf8');
52
+ return {
53
+ exitCode: result.exitCode ?? (result.code === 'ENOENT' ? 127 : 1), output, truncated: size > options.outputBytes, logPath,
54
+ kind: classifyInstallFailure({ log: output, timedOut: result.timedOut }),
55
+ };
56
+ }
57
+ finally {
58
+ await log.close();
59
+ }
60
+ }
61
+ //# sourceMappingURL=github-connection.js.map
@@ -5,16 +5,20 @@ import type { BundleInfo, ChangeResult, InspectOptions, InstallBundleOptions, Pl
5
5
  export type * from './types.ts';
6
6
  export { classifyInstallFailure, type InstallFailureFacts } from './install-failure.ts';
7
7
  export { InvalidInstallSpecError, parseInstallSpec, type ParsedInstallSpec } from './install-spec.ts';
8
- /** The pnpm executable, the registries asked, and the limits for package diagnostics and registry lookups. */
8
+ /** The pnpm executable, registries, and limits for diagnostics, lookups and connection checks. */
9
9
  export interface Config {
10
10
  /** The pnpm executable name or path; resolved through `PATH` like the `dsh plugin` command. */
11
11
  pnpmCommand?: string;
12
- /** Maximum retained pnpm diagnostic bytes per operation. */
12
+ /** Maximum retained package-operation diagnostic bytes. */
13
13
  outputBytes?: number;
14
14
  /** Maximum time to wait for another process's profile package operation. */
15
15
  lockWaitMs?: number;
16
16
  /** Bound on one registry lookup an inspection runs, in milliseconds. */
17
17
  inspectTimeoutMs?: number;
18
+ /** Maximum duration of the GitHub repository connection check before installation, in milliseconds. */
19
+ githubConnectionTimeoutMs?: number;
20
+ /** Maximum time one captured package run may print nothing before the manager terminates it, in milliseconds. */
21
+ idleTimeoutMs?: number;
18
22
  /** The registry lookups and installations ask first, as an http(s) URL; absent, the one pnpm's own configuration names. */
19
23
  registry?: string;
20
24
  /**
@@ -42,6 +46,8 @@ export declare class PluginManager extends TypertRemoteService {
42
46
  private readonly outputBytes;
43
47
  private readonly lockWaitMs;
44
48
  private readonly inspectTimeoutMs;
49
+ private readonly githubConnectionTimeoutMs;
50
+ private readonly idleTimeoutMs;
45
51
  private readonly pnpmCommand;
46
52
  private readonly configuredRegistries;
47
53
  private readonly ownerContext;
@@ -49,6 +55,22 @@ export declare class PluginManager extends TypertRemoteService {
49
55
  /** Installations by request id, from their call until it settles. */
50
56
  private readonly installs;
51
57
  constructor(ctx: Context, config: Config);
58
+ /** Read exact plugin-version exemptions saved in this profile.
59
+ * @returns Accepted package-name@version keys with the runtime versions they may run on, and any
60
+ * record or file problem the reader rejected, which the caller reports instead of failing.
61
+ */
62
+ listVersionExemptions(): {
63
+ exemptions: Record<string, string[]>;
64
+ warnings: string[];
65
+ };
66
+ /** Grant or revoke one exact plugin/runtime exemption and reevaluate live plugins.
67
+ * @param packageVersion Exact manifest package name followed by @ and its version; never an installation spec or alias.
68
+ * @param runtimeVersion Exact current DSH version for grants; revocation may name a previous runtime.
69
+ * @param enabled Whether to grant rather than revoke the exemption.
70
+ * @param acceptRisk Required true for grants after the user accepts possible crashes and data loss.
71
+ * @returns Saved and runtime outcomes. Startup-only profiles require restart.
72
+ */
73
+ setVersionExemption(packageVersion: string, runtimeVersion: string, enabled: boolean, acceptRisk?: boolean): Promise<ChangeResult>;
52
74
  /** Read current plugins, including why a row cannot be changed through the profile patch.
53
75
  * @returns Current runtime entries with persistent patch targets.
54
76
  */
@@ -83,7 +105,9 @@ export declare class PluginManager extends TypertRemoteService {
83
105
  */
84
106
  setBundleEnabled(name: string, enabled: boolean): Promise<ChangeResult>;
85
107
  /**
86
- * Install a package using the same pnpm implementation as dsh plugin. A run
108
+ * Install a package using the same pnpm implementation as dsh plugin. GitHub
109
+ * repositories get a connection check bounded by githubConnectionTimeoutMs before pnpm starts;
110
+ * only network failures or timeouts stop installation, while pnpm owns authentication and transport fallback. A run
87
111
  * that fails, is cancelled, or adds a package without a bundle patch restores
88
112
  * `package.json` and `pnpm-lock.yaml` as they were; downloaded files can stay.
89
113
  * @param spec One package spec, including local paths relative to the invocation directory.
@@ -100,7 +124,7 @@ export declare class PluginManager extends TypertRemoteService {
100
124
  waitForInstall(requestId: PluginInstallRequestId): Promise<ChangeResult | null>;
101
125
  /** Stop an installation this manager owns and wait until its files are back.
102
126
  * @param requestId The id the installation was started with.
103
- * @returns `cancelled` once pnpm exited and the files are restored, `too-late` once the bundle is being
127
+ * @returns `cancelled` once the Git check or pnpm exited and the files are restored, `too-late` once the bundle is being
104
128
  * applied, `not-running` for any other id.
105
129
  */
106
130
  cancelInstall(requestId: PluginInstallRequestId): Promise<PluginInstallCancellation>;