@ericsanchezok/synergy-plugin 2.4.2 → 2.4.4

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.
@@ -9,11 +9,10 @@ export declare const PluginManifest: z.ZodObject<{
9
9
  license: z.ZodOptional<z.ZodString>;
10
10
  icon: z.ZodOptional<z.ZodString>;
11
11
  keywords: z.ZodOptional<z.ZodArray<z.ZodString>>;
12
- minSynergyVersion: z.ZodOptional<z.ZodString>;
13
12
  engines: z.ZodOptional<z.ZodObject<{
14
13
  synergy: z.ZodOptional<z.ZodString>;
15
14
  bun: z.ZodOptional<z.ZodString>;
16
- }, z.core.$strip>>;
15
+ }, z.core.$strict>>;
17
16
  dependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
18
17
  trust: z.ZodOptional<z.ZodObject<{
19
18
  requestedTier: z.ZodOptional<z.ZodEnum<{
@@ -25,7 +24,6 @@ export declare const PluginManifest: z.ZodObject<{
25
24
  }, z.core.$strip>>;
26
25
  permissions: z.ZodOptional<z.ZodObject<{
27
26
  tools: z.ZodOptional<z.ZodObject<{
28
- invoke: z.ZodDefault<z.ZodBoolean>;
29
27
  shell: z.ZodDefault<z.ZodBoolean>;
30
28
  filesystem: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodEnum<{
31
29
  read: "read";
@@ -42,7 +40,7 @@ export declare const PluginManifest: z.ZodObject<{
42
40
  agents: z.ZodOptional<z.ZodArray<z.ZodString>>;
43
41
  maxRuntimeMs: z.ZodOptional<z.ZodNumber>;
44
42
  }, z.core.$strict>]>>;
45
- }, z.core.$strip>>;
43
+ }, z.core.$strict>>;
46
44
  data: z.ZodOptional<z.ZodObject<{
47
45
  session: z.ZodDefault<z.ZodEnum<{
48
46
  read: "read";
@@ -63,24 +61,26 @@ export declare const PluginManifest: z.ZodObject<{
63
61
  none: "none";
64
62
  own: "own";
65
63
  }>>;
66
- }, z.core.$strip>>;
64
+ }, z.core.$strict>>;
67
65
  network: z.ZodOptional<z.ZodObject<{
68
66
  connectDomains: z.ZodDefault<z.ZodArray<z.ZodString>>;
69
67
  resourceDomains: z.ZodDefault<z.ZodArray<z.ZodString>>;
70
68
  frameDomains: z.ZodDefault<z.ZodArray<z.ZodString>>;
71
- }, z.core.$strip>>;
69
+ }, z.core.$strict>>;
72
70
  ui: z.ZodOptional<z.ZodObject<{
73
71
  toolRenderers: z.ZodDefault<z.ZodBoolean>;
74
72
  partRenderers: z.ZodDefault<z.ZodBoolean>;
75
- workspacePanels: z.ZodDefault<z.ZodBoolean>;
76
- globalPanels: z.ZodDefault<z.ZodBoolean>;
73
+ workbenchPanels: z.ZodDefault<z.ZodBoolean>;
74
+ appPanels: z.ZodDefault<z.ZodBoolean>;
77
75
  settings: z.ZodDefault<z.ZodBoolean>;
76
+ messageSlots: z.ZodDefault<z.ZodBoolean>;
78
77
  themes: z.ZodDefault<z.ZodBoolean>;
79
78
  icons: z.ZodDefault<z.ZodBoolean>;
80
- routes: z.ZodDefault<z.ZodBoolean>;
79
+ appRoutes: z.ZodDefault<z.ZodBoolean>;
80
+ commands: z.ZodDefault<z.ZodBoolean>;
81
81
  trustedImport: z.ZodDefault<z.ZodBoolean>;
82
82
  sandboxIframe: z.ZodDefault<z.ZodBoolean>;
83
- }, z.core.$strip>>;
83
+ }, z.core.$strict>>;
84
84
  hooks: z.ZodOptional<z.ZodObject<{
85
85
  events: z.ZodDefault<z.ZodEnum<{
86
86
  all: "all";
@@ -101,8 +101,8 @@ export declare const PluginManifest: z.ZodObject<{
101
101
  }>>;
102
102
  promptTransform: z.ZodDefault<z.ZodBoolean>;
103
103
  compactionTransform: z.ZodDefault<z.ZodBoolean>;
104
- }, z.core.$strip>>;
105
- }, z.core.$strip>>;
104
+ }, z.core.$strict>>;
105
+ }, z.core.$strict>>;
106
106
  contributes: z.ZodOptional<z.ZodObject<{
107
107
  tools: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
108
108
  id: z.ZodOptional<z.ZodString>;
@@ -132,14 +132,9 @@ export declare const PluginManifest: z.ZodObject<{
132
132
  default: "default";
133
133
  "media-generation": "media-generation";
134
134
  }>>;
135
- visibility: z.ZodOptional<z.ZodEnum<{
136
- default: "default";
137
- media: "media";
138
- "hidden-unless-error": "hidden-unless-error";
139
- }>>;
140
- presentation: z.ZodOptional<z.ZodEnum<{
141
- default: "default";
142
- "artifact-only": "artifact-only";
135
+ toolCard: z.ZodOptional<z.ZodEnum<{
136
+ visible: "visible";
137
+ hidden: "hidden";
143
138
  }>>;
144
139
  media: z.ZodOptional<z.ZodObject<{
145
140
  type: z.ZodEnum<{
@@ -150,7 +145,6 @@ export declare const PluginManifest: z.ZodObject<{
150
145
  actionLabel: z.ZodOptional<z.ZodString>;
151
146
  pendingTitle: z.ZodOptional<z.ZodString>;
152
147
  pendingDescription: z.ZodOptional<z.ZodString>;
153
- promptField: z.ZodOptional<z.ZodString>;
154
148
  aspectRatio: z.ZodOptional<z.ZodEnum<{
155
149
  "1:1": "1:1";
156
150
  "4:3": "4:3";
@@ -158,7 +152,6 @@ export declare const PluginManifest: z.ZodObject<{
158
152
  auto: "auto";
159
153
  }>>;
160
154
  }, z.core.$strict>>;
161
- primaryAttachmentIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
162
155
  }, z.core.$strict>>;
163
156
  capabilities: z.ZodOptional<z.ZodObject<{
164
157
  filesystem: z.ZodOptional<z.ZodEnum<{
@@ -183,12 +176,7 @@ export declare const PluginManifest: z.ZodObject<{
183
176
  global: "global";
184
177
  none: "none";
185
178
  }>>;
186
- }, z.core.$strip>>;
187
- risk: z.ZodOptional<z.ZodEnum<{
188
- low: "low";
189
- medium: "medium";
190
- high: "high";
191
- }>>;
179
+ }, z.core.$strict>>;
192
180
  }, z.core.$strip>>>>;
193
181
  skills: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
194
182
  name: z.ZodString;
@@ -248,9 +236,9 @@ export declare const PluginManifest: z.ZodObject<{
248
236
  }, z.core.$strip>>;
249
237
  toolCache: z.ZodOptional<z.ZodObject<{
250
238
  mode: z.ZodOptional<z.ZodEnum<{
239
+ session: "session";
251
240
  persistent: "persistent";
252
241
  disabled: "disabled";
253
- session: "session";
254
242
  }>>;
255
243
  ttlMs: z.ZodOptional<z.ZodNumber>;
256
244
  }, z.core.$strip>>;
@@ -292,9 +280,9 @@ export declare const PluginManifest: z.ZodObject<{
292
280
  }, z.core.$strip>>;
293
281
  toolCache: z.ZodOptional<z.ZodObject<{
294
282
  mode: z.ZodOptional<z.ZodEnum<{
283
+ session: "session";
295
284
  persistent: "persistent";
296
285
  disabled: "disabled";
297
- session: "session";
298
286
  }>>;
299
287
  ttlMs: z.ZodOptional<z.ZodNumber>;
300
288
  }, z.core.$strip>>;
@@ -334,9 +322,9 @@ export declare const PluginManifest: z.ZodObject<{
334
322
  }, z.core.$strip>>;
335
323
  toolCache: z.ZodOptional<z.ZodObject<{
336
324
  mode: z.ZodOptional<z.ZodEnum<{
325
+ session: "session";
337
326
  persistent: "persistent";
338
327
  disabled: "disabled";
339
- session: "session";
340
328
  }>>;
341
329
  ttlMs: z.ZodOptional<z.ZodNumber>;
342
330
  }, z.core.$strip>>;
@@ -351,7 +339,6 @@ export declare const PluginManifest: z.ZodObject<{
351
339
  }, z.core.$strip>>>;
352
340
  permissions: z.ZodOptional<z.ZodOptional<z.ZodObject<{
353
341
  tools: z.ZodOptional<z.ZodObject<{
354
- invoke: z.ZodDefault<z.ZodBoolean>;
355
342
  shell: z.ZodDefault<z.ZodBoolean>;
356
343
  filesystem: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodDefault<z.ZodEnum<{
357
344
  read: "read";
@@ -368,7 +355,7 @@ export declare const PluginManifest: z.ZodObject<{
368
355
  agents: z.ZodOptional<z.ZodArray<z.ZodString>>;
369
356
  maxRuntimeMs: z.ZodOptional<z.ZodNumber>;
370
357
  }, z.core.$strict>]>>;
371
- }, z.core.$strip>>;
358
+ }, z.core.$strict>>;
372
359
  data: z.ZodOptional<z.ZodObject<{
373
360
  session: z.ZodDefault<z.ZodEnum<{
374
361
  read: "read";
@@ -389,24 +376,26 @@ export declare const PluginManifest: z.ZodObject<{
389
376
  none: "none";
390
377
  own: "own";
391
378
  }>>;
392
- }, z.core.$strip>>;
379
+ }, z.core.$strict>>;
393
380
  network: z.ZodOptional<z.ZodObject<{
394
381
  connectDomains: z.ZodDefault<z.ZodArray<z.ZodString>>;
395
382
  resourceDomains: z.ZodDefault<z.ZodArray<z.ZodString>>;
396
383
  frameDomains: z.ZodDefault<z.ZodArray<z.ZodString>>;
397
- }, z.core.$strip>>;
384
+ }, z.core.$strict>>;
398
385
  ui: z.ZodOptional<z.ZodObject<{
399
386
  toolRenderers: z.ZodDefault<z.ZodBoolean>;
400
387
  partRenderers: z.ZodDefault<z.ZodBoolean>;
401
- workspacePanels: z.ZodDefault<z.ZodBoolean>;
402
- globalPanels: z.ZodDefault<z.ZodBoolean>;
388
+ workbenchPanels: z.ZodDefault<z.ZodBoolean>;
389
+ appPanels: z.ZodDefault<z.ZodBoolean>;
403
390
  settings: z.ZodDefault<z.ZodBoolean>;
391
+ messageSlots: z.ZodDefault<z.ZodBoolean>;
404
392
  themes: z.ZodDefault<z.ZodBoolean>;
405
393
  icons: z.ZodDefault<z.ZodBoolean>;
406
- routes: z.ZodDefault<z.ZodBoolean>;
394
+ appRoutes: z.ZodDefault<z.ZodBoolean>;
395
+ commands: z.ZodDefault<z.ZodBoolean>;
407
396
  trustedImport: z.ZodDefault<z.ZodBoolean>;
408
397
  sandboxIframe: z.ZodDefault<z.ZodBoolean>;
409
- }, z.core.$strip>>;
398
+ }, z.core.$strict>>;
410
399
  hooks: z.ZodOptional<z.ZodObject<{
411
400
  events: z.ZodDefault<z.ZodEnum<{
412
401
  all: "all";
@@ -427,12 +416,12 @@ export declare const PluginManifest: z.ZodObject<{
427
416
  }>>;
428
417
  promptTransform: z.ZodDefault<z.ZodBoolean>;
429
418
  compactionTransform: z.ZodDefault<z.ZodBoolean>;
430
- }, z.core.$strip>>;
431
- }, z.core.$strip>>>;
419
+ }, z.core.$strict>>;
420
+ }, z.core.$strict>>>;
432
421
  ui: z.ZodOptional<z.ZodOptional<z.ZodObject<{
433
- entry: z.ZodOptional<z.ZodOptional<z.ZodString>>;
434
- minUIApiVersion: z.ZodOptional<z.ZodOptional<z.ZodString>>;
435
- toolRenderers: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
422
+ entry: z.ZodOptional<z.ZodString>;
423
+ minUIApiVersion: z.ZodOptional<z.ZodString>;
424
+ toolRenderers: z.ZodOptional<z.ZodArray<z.ZodObject<{
436
425
  tool: z.ZodString;
437
426
  exportName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
438
427
  priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
@@ -441,71 +430,87 @@ export declare const PluginManifest: z.ZodObject<{
441
430
  title: z.ZodOptional<z.ZodString>;
442
431
  subtitleTemplate: z.ZodOptional<z.ZodString>;
443
432
  }, z.core.$strip>>;
444
- }, z.core.$strict>>>>;
445
- partRenderers: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
433
+ }, z.core.$strict>>>;
434
+ partRenderers: z.ZodOptional<z.ZodArray<z.ZodObject<{
446
435
  type: z.ZodString;
447
436
  exportName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
448
437
  priority: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
449
- }, z.core.$strict>>>>;
450
- workspacePanels: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
438
+ }, z.core.$strict>>>;
439
+ workbenchPanels: z.ZodOptional<z.ZodArray<z.ZodObject<{
451
440
  id: z.ZodString;
452
441
  label: z.ZodString;
453
442
  icon: z.ZodString;
454
443
  exportName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
444
+ order: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
455
445
  sandbox: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
456
446
  sandboxEntry: z.ZodOptional<z.ZodString>;
457
- }, z.core.$strict>>>>;
458
- globalPanels: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
447
+ surface: z.ZodEnum<{
448
+ side: "side";
449
+ bottom: "bottom";
450
+ }>;
451
+ cardinality: z.ZodEnum<{
452
+ exclusive: "exclusive";
453
+ singleton: "singleton";
454
+ multi: "multi";
455
+ }>;
456
+ requiresSession: z.ZodOptional<z.ZodBoolean>;
457
+ }, z.core.$strict>>>;
458
+ appPanels: z.ZodOptional<z.ZodArray<z.ZodObject<{
459
459
  id: z.ZodString;
460
460
  label: z.ZodString;
461
461
  icon: z.ZodString;
462
462
  exportName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
463
+ order: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
463
464
  sandbox: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
464
465
  sandboxEntry: z.ZodOptional<z.ZodString>;
465
- }, z.core.$strict>>>>;
466
- settings: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
466
+ }, z.core.$strict>>>;
467
+ settings: z.ZodOptional<z.ZodArray<z.ZodObject<{
467
468
  id: z.ZodString;
468
469
  label: z.ZodString;
469
470
  icon: z.ZodString;
470
471
  group: z.ZodString;
471
472
  formSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
472
- exportName: z.ZodOptional<z.ZodString>;
473
+ exportName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
474
+ order: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
473
475
  sandbox: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
474
476
  sandboxEntry: z.ZodOptional<z.ZodString>;
475
- }, z.core.$strict>>>>;
476
- chatComponents: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
477
+ }, z.core.$strict>>>;
478
+ messageSlots: z.ZodOptional<z.ZodArray<z.ZodObject<{
477
479
  id: z.ZodString;
478
480
  exportName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
479
- slot: z.ZodOptional<z.ZodEnum<{
480
- "before-tools": "before-tools";
481
- "after-tools": "after-tools";
481
+ slot: z.ZodEnum<{
482
482
  "before-reasoning": "before-reasoning";
483
483
  "after-reasoning": "after-reasoning";
484
- }>>;
485
- }, z.core.$strict>>>>;
486
- themes: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
484
+ "before-tools": "before-tools";
485
+ "after-tools": "after-tools";
486
+ }>;
487
+ }, z.core.$strict>>>;
488
+ themes: z.ZodOptional<z.ZodArray<z.ZodObject<{
487
489
  id: z.ZodString;
488
490
  label: z.ZodString;
489
491
  path: z.ZodString;
490
- }, z.core.$strict>>>>;
491
- icons: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
492
+ }, z.core.$strict>>>;
493
+ icons: z.ZodOptional<z.ZodArray<z.ZodObject<{
492
494
  name: z.ZodString;
493
495
  path: z.ZodString;
494
- }, z.core.$strict>>>>;
495
- routes: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
496
- path: z.ZodString;
497
- entry: z.ZodString;
496
+ }, z.core.$strict>>>;
497
+ appRoutes: z.ZodOptional<z.ZodArray<z.ZodObject<{
498
+ id: z.ZodString;
498
499
  label: z.ZodString;
499
500
  icon: z.ZodOptional<z.ZodString>;
500
- }, z.core.$strict>>>>;
501
- commands: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodObject<{
501
+ entry: z.ZodOptional<z.ZodString>;
502
+ exportName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
503
+ sandbox: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
504
+ sandboxEntry: z.ZodOptional<z.ZodString>;
505
+ }, z.core.$strict>>>;
506
+ commands: z.ZodOptional<z.ZodArray<z.ZodObject<{
502
507
  id: z.ZodString;
503
508
  label: z.ZodString;
504
- exportName: z.ZodOptional<z.ZodString>;
509
+ exportName: z.ZodDefault<z.ZodOptional<z.ZodString>>;
505
510
  description: z.ZodOptional<z.ZodString>;
506
511
  icon: z.ZodOptional<z.ZodString>;
507
- }, z.core.$strict>>>>;
508
- }, z.core.$strip>>>;
512
+ }, z.core.$strict>>>;
513
+ }, z.core.$strict>>>;
509
514
  }, z.core.$strip>>;
510
515
  main: z.ZodDefault<z.ZodOptional<z.ZodString>>;
511
516
  lifecycle: z.ZodOptional<z.ZodObject<{
@@ -523,9 +528,16 @@ export declare const PluginManifest: z.ZodObject<{
523
528
  resources: z.ZodOptional<z.ZodObject<{
524
529
  memoryMb: z.ZodOptional<z.ZodNumber>;
525
530
  startupTimeoutMs: z.ZodOptional<z.ZodNumber>;
526
- requestTimeoutMs: z.ZodOptional<z.ZodNumber>;
531
+ toolInvocationTimeoutMs: z.ZodOptional<z.ZodNumber>;
532
+ hookInvocationTimeoutMs: z.ZodOptional<z.ZodNumber>;
533
+ bridgeRequestTimeoutMs: z.ZodOptional<z.ZodNumber>;
534
+ taskRunTimeoutMs: z.ZodOptional<z.ZodNumber>;
535
+ shutdownGraceMs: z.ZodOptional<z.ZodNumber>;
527
536
  maxConcurrentRequests: z.ZodOptional<z.ZodNumber>;
528
537
  maxLogBytesPerMinute: z.ZodOptional<z.ZodNumber>;
538
+ memoryPollIntervalMs: z.ZodOptional<z.ZodNumber>;
539
+ heartbeatIntervalMs: z.ZodOptional<z.ZodNumber>;
540
+ heartbeatMissesBeforeKill: z.ZodOptional<z.ZodNumber>;
529
541
  }, z.core.$strip>>;
530
542
  }, z.core.$strip>>;
531
543
  }, z.core.$strict>;
package/dist/manifest.js CHANGED
@@ -1,4 +1,9 @@
1
1
  import z from "zod";
2
+ const UiSurfaceId = z.string().regex(/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/);
3
+ const JsAssetPath = z
4
+ .string()
5
+ .regex(/^[a-zA-Z0-9_/.-]+\.js$/)
6
+ .max(256);
2
7
  const ToolRendererDef = z
3
8
  .object({
4
9
  tool: z.string().min(1),
@@ -22,39 +27,38 @@ const PartRendererDef = z
22
27
  .strict();
23
28
  const PanelDef = z
24
29
  .object({
25
- id: z.string().min(1).max(64),
30
+ id: UiSurfaceId,
26
31
  label: z.string().min(1).max(64),
27
32
  icon: z.string().min(1),
28
33
  exportName: z.string().optional().default("default"),
34
+ order: z.number().int().optional().default(1000),
29
35
  sandbox: z.boolean().optional().default(false),
30
- sandboxEntry: z
31
- .string()
32
- .regex(/^[a-zA-Z0-9_/.-]+\.js$/)
33
- .max(256)
34
- .optional(),
36
+ sandboxEntry: JsAssetPath.optional(),
35
37
  })
36
38
  .strict();
39
+ const WorkbenchPanelDef = PanelDef.extend({
40
+ surface: z.enum(["side", "bottom"]),
41
+ cardinality: z.enum(["exclusive", "singleton", "multi"]),
42
+ requiresSession: z.boolean().optional(),
43
+ }).strict();
37
44
  const SettingsDef = z
38
45
  .object({
39
- id: z.string().min(1).max(64),
46
+ id: UiSurfaceId,
40
47
  label: z.string().min(1).max(64),
41
48
  icon: z.string().min(1),
42
49
  group: z.string(),
43
50
  formSchema: z.record(z.string(), z.unknown()).optional(),
44
- exportName: z.string().optional(),
51
+ exportName: z.string().optional().default("default"),
52
+ order: z.number().int().optional().default(1000),
45
53
  sandbox: z.boolean().optional().default(false),
46
- sandboxEntry: z
47
- .string()
48
- .regex(/^[a-zA-Z0-9_/.-]+\.js$/)
49
- .max(256)
50
- .optional(),
54
+ sandboxEntry: JsAssetPath.optional(),
51
55
  })
52
56
  .strict();
53
- const ChatComponentDef = z
57
+ const MessageSlotDef = z
54
58
  .object({
55
- id: z.string().min(1),
59
+ id: UiSurfaceId,
56
60
  exportName: z.string().optional().default("default"),
57
- slot: z.enum(["before-tools", "after-tools", "before-reasoning", "after-reasoning"]).optional(),
61
+ slot: z.enum(["before-reasoning", "after-reasoning", "before-tools", "after-tools"]),
58
62
  })
59
63
  .strict();
60
64
  const ThemeDef = z
@@ -70,19 +74,22 @@ const IconDef = z
70
74
  path: z.string().min(1),
71
75
  })
72
76
  .strict();
73
- const RouteDef = z
77
+ const AppRouteDef = z
74
78
  .object({
75
- path: z.string().min(1),
76
- entry: z.string().min(1),
79
+ id: UiSurfaceId,
77
80
  label: z.string().min(1),
78
81
  icon: z.string().optional(),
82
+ entry: JsAssetPath.optional(),
83
+ exportName: z.string().optional().default("default"),
84
+ sandbox: z.boolean().optional().default(false),
85
+ sandboxEntry: JsAssetPath.optional(),
79
86
  })
80
87
  .strict();
81
88
  const UICommandDef = z
82
89
  .object({
83
- id: z.string().min(1).max(64),
90
+ id: UiSurfaceId,
84
91
  label: z.string().min(1).max(64),
85
- exportName: z.string().optional(),
92
+ exportName: z.string().optional().default("default"),
86
93
  description: z.string().max(256).optional(),
87
94
  icon: z.string().optional(),
88
95
  })
@@ -127,52 +134,44 @@ const TaskPermissionDef = z.union([
127
134
  const ToolDisplayDef = z
128
135
  .object({
129
136
  kind: z.enum(["default", "media-generation"]).optional(),
130
- visibility: z.enum(["default", "media", "hidden-unless-error"]).optional(),
131
- presentation: z.enum(["default", "artifact-only"]).optional(),
137
+ toolCard: z.enum(["visible", "hidden"]).optional(),
132
138
  media: z
133
139
  .object({
134
140
  type: z.enum(["image", "video", "audio"]),
135
141
  actionLabel: z.string().min(1).max(80).optional(),
136
142
  pendingTitle: z.string().min(1).max(120).optional(),
137
143
  pendingDescription: z.string().min(1).max(200).optional(),
138
- promptField: z.string().min(1).max(64).optional(),
139
144
  aspectRatio: z.enum(["1:1", "4:3", "16:9", "auto"]).optional(),
140
145
  })
141
146
  .strict()
142
147
  .optional(),
143
- primaryAttachmentIds: z.array(z.string().min(1)).optional(),
144
148
  })
145
149
  .strict();
146
150
  const UIContribution = z
147
151
  .object({
148
- entry: z
149
- .string()
150
- .regex(/^[a-zA-Z0-9_/.-]+\.js$/)
151
- .max(256)
152
- .optional(),
152
+ entry: JsAssetPath.optional(),
153
153
  minUIApiVersion: z
154
154
  .string()
155
155
  .regex(/^\d+\.\d+\.\d+$/)
156
156
  .optional(),
157
157
  toolRenderers: z.array(ToolRendererDef).optional(),
158
158
  partRenderers: z.array(PartRendererDef).optional(),
159
- workspacePanels: z.array(PanelDef).optional(),
160
- globalPanels: z.array(PanelDef).optional(),
159
+ workbenchPanels: z.array(WorkbenchPanelDef).optional(),
160
+ appPanels: z.array(PanelDef).optional(),
161
161
  settings: z.array(SettingsDef).optional(),
162
- chatComponents: z.array(ChatComponentDef).optional(),
162
+ messageSlots: z.array(MessageSlotDef).optional(),
163
163
  themes: z.array(ThemeDef).optional(),
164
164
  icons: z.array(IconDef).optional(),
165
- routes: z.array(RouteDef).optional(),
165
+ appRoutes: z.array(AppRouteDef).optional(),
166
166
  commands: z.array(UICommandDef).optional(),
167
167
  })
168
- .partial()
168
+ .strict()
169
169
  .optional();
170
170
  const PluginPermissionsSchema = z
171
171
  .object({
172
172
  /** Tool execution permissions */
173
173
  tools: z
174
174
  .object({
175
- invoke: z.boolean().default(true),
176
175
  shell: z.boolean().default(false),
177
176
  filesystem: z.preprocess((val) => {
178
177
  if (val === true)
@@ -185,15 +184,17 @@ const PluginPermissionsSchema = z
185
184
  mcp: z.enum(["none", "invoke", "spawn"]).default("none"),
186
185
  task: TaskPermissionDef.optional(),
187
186
  })
187
+ .strict()
188
188
  .optional(),
189
189
  /** Data access */
190
190
  data: z
191
191
  .object({
192
192
  session: z.enum(["none", "metadata", "read"]).default("none"),
193
193
  workspace: z.enum(["none", "metadata", "read"]).default("none"),
194
- config: z.enum(["none", "plugin", "global"]).default("plugin"),
194
+ config: z.enum(["none", "plugin", "global"]).default("none"),
195
195
  secrets: z.enum(["none", "own"]).default("none"),
196
196
  })
197
+ .strict()
197
198
  .optional(),
198
199
  /** Network access */
199
200
  network: z
@@ -202,21 +203,25 @@ const PluginPermissionsSchema = z
202
203
  resourceDomains: z.array(z.string()).default([]),
203
204
  frameDomains: z.array(z.string()).default([]),
204
205
  })
206
+ .strict()
205
207
  .optional(),
206
208
  /** UI surface permissions */
207
209
  ui: z
208
210
  .object({
209
211
  toolRenderers: z.boolean().default(false),
210
212
  partRenderers: z.boolean().default(false),
211
- workspacePanels: z.boolean().default(false),
212
- globalPanels: z.boolean().default(false),
213
+ workbenchPanels: z.boolean().default(false),
214
+ appPanels: z.boolean().default(false),
213
215
  settings: z.boolean().default(false),
216
+ messageSlots: z.boolean().default(false),
214
217
  themes: z.boolean().default(false),
215
218
  icons: z.boolean().default(false),
216
- routes: z.boolean().default(false),
219
+ appRoutes: z.boolean().default(false),
220
+ commands: z.boolean().default(false),
217
221
  trustedImport: z.boolean().default(false),
218
222
  sandboxIframe: z.boolean().default(false),
219
223
  })
224
+ .strict()
220
225
  .optional(),
221
226
  /** Hook permission declarations */
222
227
  hooks: z
@@ -228,8 +233,10 @@ const PluginPermissionsSchema = z
228
233
  promptTransform: z.boolean().default(false),
229
234
  compactionTransform: z.boolean().default(false),
230
235
  })
236
+ .strict()
231
237
  .optional(),
232
238
  })
239
+ .strict()
233
240
  .optional();
234
241
  // PluginManifest: the declarative plugin descriptor (plugin.json)
235
242
  export const PluginManifest = z
@@ -244,16 +251,12 @@ export const PluginManifest = z
244
251
  license: z.string().optional(),
245
252
  icon: z.string().optional(),
246
253
  keywords: z.array(z.string()).optional(),
247
- // Compatibility
248
- minSynergyVersion: z
249
- .string()
250
- .regex(/^\d+\.\d+\.\d+$/)
251
- .optional(),
252
254
  engines: z
253
255
  .object({
254
256
  synergy: z.string().optional(),
255
257
  bun: z.string().optional(),
256
258
  })
259
+ .strict()
257
260
  .optional(),
258
261
  // Dependencies on other plugins
259
262
  dependencies: z.record(z.string(), z.string()).optional(),
@@ -289,8 +292,8 @@ export const PluginManifest = z
289
292
  workspace: z.enum(["none", "metadata", "read"]).optional(),
290
293
  config: z.enum(["none", "plugin", "global"]).optional(),
291
294
  })
295
+ .strict()
292
296
  .optional(),
293
- risk: z.enum(["low", "medium", "high"]).optional(),
294
297
  }))
295
298
  .optional(),
296
299
  skills: z
@@ -473,9 +476,16 @@ export const PluginManifest = z
473
476
  .object({
474
477
  memoryMb: z.number().positive().optional(),
475
478
  startupTimeoutMs: z.number().positive().optional(),
476
- requestTimeoutMs: z.number().positive().optional(),
479
+ toolInvocationTimeoutMs: z.number().positive().optional(),
480
+ hookInvocationTimeoutMs: z.number().positive().optional(),
481
+ bridgeRequestTimeoutMs: z.number().positive().optional(),
482
+ taskRunTimeoutMs: z.number().positive().optional(),
483
+ shutdownGraceMs: z.number().positive().optional(),
477
484
  maxConcurrentRequests: z.number().positive().optional(),
478
485
  maxLogBytesPerMinute: z.number().positive().optional(),
486
+ memoryPollIntervalMs: z.number().positive().optional(),
487
+ heartbeatIntervalMs: z.number().positive().optional(),
488
+ heartbeatMissesBeforeKill: z.number().positive().optional(),
479
489
  })
480
490
  .optional(),
481
491
  })
@@ -0,0 +1,34 @@
1
+ export interface GitHubPluginMarketplaceDefaults {
2
+ registryRepo: string;
3
+ registryGithubRepo: string;
4
+ registryBaseBranch: string;
5
+ registryBranchPrefix: string;
6
+ }
7
+ export declare const OFFICIAL_GITHUB_PLUGIN_MARKETPLACE: GitHubPluginMarketplaceDefaults;
8
+ export interface GitHubReleaseAssetUrlInput {
9
+ repo: string | undefined;
10
+ version: string;
11
+ filename: string;
12
+ tagTemplate?: string;
13
+ }
14
+ export declare function githubReleaseAssetUrl(input: GitHubReleaseAssetUrlInput): string | undefined;
15
+ export declare function githubReleaseTag(version: string, template?: string): string;
16
+ export declare function normalizeGitHubRepoUrl(input?: string): string | undefined;
17
+ export declare function githubRepoSlug(input?: string): string | undefined;
18
+ export declare function githubRawFileUrl(input: {
19
+ repo?: string;
20
+ branch: string;
21
+ filepath: string;
22
+ }): string | undefined;
23
+ export declare function githubMarketplaceRegistryUrl(input?: GitHubPluginMarketplaceDefaults): string;
24
+ export declare const OFFICIAL_PLUGIN_REGISTRY_URL: string;
25
+ export declare const DEFAULT_PLUGIN_MARKETPLACE_CONFIG: {
26
+ readonly enabled: true;
27
+ readonly registryUrl: string;
28
+ readonly includeLocalRegistry: true;
29
+ readonly cacheTtlMs: 3600000;
30
+ readonly offlineCache: true;
31
+ readonly requestTimeoutMs: 10000;
32
+ readonly artifactDownloadTimeoutMs: 60000;
33
+ readonly cliRequestTimeoutMs: 120000;
34
+ };