@yaklabs-ai/plugin-protocol 0.29.0 → 0.31.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.
package/README.md CHANGED
@@ -11,7 +11,7 @@ flow.
11
11
  ```json
12
12
  {
13
13
  "dependencies": {
14
- "@bonsai/plugin-protocol": "npm:@yaklabs-ai/plugin-protocol@^0.29.0"
14
+ "@bonsai/plugin-protocol": "npm:@yaklabs-ai/plugin-protocol@^0.31.0"
15
15
  }
16
16
  }
17
17
  ```
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@yaklabs-ai/plugin-protocol",
4
- "version": "0.29.0",
4
+ "version": "0.31.0",
5
5
  "target": "npm",
6
6
  "firstPartyLicense": "MIT",
7
7
  "bundled": [],
package/dist/index.d.ts CHANGED
@@ -1564,6 +1564,7 @@ declare namespace authoringCommonSchemas {
1564
1564
  hostWithinDomain,
1565
1565
  urlHostWithinDomain,
1566
1566
  refineWebSessionScopeConfined,
1567
+ KAY_PLUGIN_MANIFEST_SIZE_CAP_BYTES,
1567
1568
  KAY_PLUGIN_PROTOCOL_VERSION,
1568
1569
  KAY_PLUGIN_PROTOCOL_PACKAGE_NAME,
1569
1570
  KAY_PLUGIN_SDK_VERSION,
@@ -1634,6 +1635,7 @@ declare namespace authoringContributionSchemas {
1634
1635
  EntityResolverContribution,
1635
1636
  AgentRenderContribution,
1636
1637
  EndpointContribution,
1638
+ WorkflowContribution,
1637
1639
  McpServerUrl,
1638
1640
  McpServerAuthMode,
1639
1641
  McpServerContribution,
@@ -1659,7 +1661,7 @@ declare namespace authoringContributionSchemas {
1659
1661
  RichViewContribution,
1660
1662
  KayUiAppHostCapability,
1661
1663
  UiAppCapabilities,
1662
- UiAppActivityRail,
1664
+ UiRailEntryContribution,
1663
1665
  UiAppContribution,
1664
1666
  ThemeContribution,
1665
1667
  CommandHandler,
@@ -2477,6 +2479,17 @@ declare const canonicalContributionSchemas: {
2477
2479
  requestSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>>;
2478
2480
  responseSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>>;
2479
2481
  }, z.core.$strict>;
2482
+ WorkflowContribution: z.ZodObject<{
2483
+ localId: z.ZodString;
2484
+ name: z.ZodString;
2485
+ description: z.ZodString;
2486
+ everyMs: z.ZodNumber;
2487
+ auth: z.ZodOptional<z.ZodObject<{
2488
+ service: z.ZodString;
2489
+ scheme: z.ZodString;
2490
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
2491
+ }, z.core.$strict>>;
2492
+ }, z.core.$strict>;
2480
2493
  McpServerUrl: z.ZodString;
2481
2494
  McpServerAuthMode: z.ZodEnum<{
2482
2495
  oauth: "oauth";
@@ -2698,15 +2711,18 @@ declare const canonicalContributionSchemas: {
2698
2711
  "workspace.arrange": "workspace.arrange";
2699
2712
  }>>>;
2700
2713
  }, z.core.$strict>;
2701
- UiAppActivityRail: z.ZodObject<{
2714
+ UiRailEntryContribution: z.ZodObject<{
2715
+ id: z.ZodString;
2716
+ title: z.ZodString;
2717
+ icon: z.ZodOptional<z.ZodString>;
2718
+ page: z.ZodString;
2719
+ homeLocation: z.ZodOptional<z.ZodString>;
2720
+ shortcut: z.ZodOptional<z.ZodString>;
2721
+ order: z.ZodOptional<z.ZodNumber>;
2702
2722
  section: z.ZodOptional<z.ZodEnum<{
2703
2723
  primary: "primary";
2704
2724
  plugins: "plugins";
2705
2725
  }>>;
2706
- order: z.ZodOptional<z.ZodNumber>;
2707
- icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
2708
- svg: z.ZodString;
2709
- }, z.core.$strict>]>>;
2710
2726
  }, z.core.$strict>;
2711
2727
  UiAppContribution: z.ZodObject<{
2712
2728
  localId: z.ZodString;
@@ -2746,17 +2762,45 @@ declare const canonicalContributionSchemas: {
2746
2762
  "workspace.arrange": "workspace.arrange";
2747
2763
  }>>>;
2748
2764
  }, z.core.$strict>>;
2749
- activityRail: z.ZodOptional<z.ZodObject<{
2750
- section: z.ZodOptional<z.ZodEnum<{
2751
- primary: "primary";
2752
- plugins: "plugins";
2753
- }>>;
2754
- order: z.ZodOptional<z.ZodNumber>;
2755
- icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
2756
- svg: z.ZodString;
2757
- }, z.core.$strict>]>>;
2765
+ }, z.core.$strict> | z.ZodPreprocess<z.ZodObject<{
2766
+ localId: z.ZodString;
2767
+ displayName: z.ZodString;
2768
+ description: z.ZodOptional<z.ZodString>;
2769
+ icon: z.ZodOptional<z.ZodString>;
2770
+ runtime: z.ZodLiteral<"kay.react-app.v1">;
2771
+ contextOnly: z.ZodOptional<z.ZodLiteral<true>>;
2772
+ sdk: z.ZodObject<{
2773
+ range: z.ZodString;
2774
+ }, z.core.$strict>;
2775
+ entrypoint: z.ZodObject<{
2776
+ module: z.ZodString;
2777
+ export: z.ZodOptional<z.ZodString>;
2778
+ }, z.core.$strict>;
2779
+ styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
2780
+ assets: z.ZodOptional<z.ZodArray<z.ZodString>>;
2781
+ capabilities: z.ZodOptional<z.ZodObject<{
2782
+ endpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
2783
+ host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
2784
+ "sessions.create": "sessions.create";
2785
+ "memory.read": "memory.read";
2786
+ "skills.read": "skills.read";
2787
+ "automations.run": "automations.run";
2788
+ "artifacts.read": "artifacts.read";
2789
+ "navigation.open-session": "navigation.open-session";
2790
+ "artifacts.preview": "artifacts.preview";
2791
+ "cost.read": "cost.read";
2792
+ "billing.read": "billing.read";
2793
+ "context.read": "context.read";
2794
+ "usage.read": "usage.read";
2795
+ "self-improvement.read": "self-improvement.read";
2796
+ "automations.read": "automations.read";
2797
+ "shared-artifacts.read": "shared-artifacts.read";
2798
+ "workspace.place-pane": "workspace.place-pane";
2799
+ "workspace.pane-header": "workspace.pane-header";
2800
+ "workspace.arrange": "workspace.arrange";
2801
+ }>>>;
2758
2802
  }, z.core.$strict>>;
2759
- }, z.core.$strict>;
2803
+ }, z.core.$strict>, unknown>;
2760
2804
  ThemeContribution: z.ZodObject<{
2761
2805
  localId: z.ZodString;
2762
2806
  displayName: z.ZodString;
@@ -2818,6 +2862,7 @@ declare const canonicalContributionSchemas: {
2818
2862
  appDataSource: "appDataSource";
2819
2863
  whiteboardType: "whiteboardType";
2820
2864
  approvalType: "approvalType";
2865
+ workflow: "workflow";
2821
2866
  contextContributor: "contextContributor";
2822
2867
  transcriptionProvider: "transcriptionProvider";
2823
2868
  deviceDelegation: "deviceDelegation";
@@ -3093,6 +3138,18 @@ export declare const DeclaredSkillSourceEnvelope: z.ZodDiscriminatedUnion<[z.Zod
3093
3138
 
3094
3139
  export declare type DeclaredSkillSourceEnvelope = z.infer<typeof DeclaredSkillSourceEnvelope>;
3095
3140
 
3141
+ declare interface DeclaredUiIconPath {
3142
+ readonly label: string;
3143
+ readonly path: string;
3144
+ }
3145
+
3146
+ /**
3147
+ * Every icon file a manifest's `kay.ui` section declares. The directory scan reads them, the
3148
+ * containment check covers them, and a compiled plugin supplies their contents, so a new kind with
3149
+ * an icon adds one line here and all three follow.
3150
+ */
3151
+ export declare function declaredUiIconPaths(manifest: KayPluginManifestV1): readonly DeclaredUiIconPath[];
3152
+
3096
3153
  /** Drop repeats under {@link sameClaim}, preserving first-seen order (a sort settles the rest). */
3097
3154
  export declare function dedupeClaims(claims: readonly PluginCapabilityClaimV1[]): PluginCapabilityClaimV1[];
3098
3155
 
@@ -3344,7 +3401,7 @@ export declare const KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS: readonly string[];
3344
3401
  /** The file whose presence makes a directory a plugin. A directory without one is not a plugin. */
3345
3402
  export declare const KAY_PLUGIN_MANIFEST_FILENAME = "kay-plugin.json";
3346
3403
 
3347
- /** Manifest byte cap: a larger file is refused unread. */
3404
+ /** Manifest byte cap, including declared app-data schemas; larger files are refused unread. */
3348
3405
  export declare const KAY_PLUGIN_MANIFEST_SIZE_CAP_BYTES: number;
3349
3406
 
3350
3407
  export declare const KAY_PLUGIN_PROTOCOL_PACKAGE_NAME: "@bonsai/plugin-protocol";
@@ -3923,8 +3980,19 @@ export declare const KAY_PLUGIN_PROTOCOL_VERSION: "kay.plugin.v1";
3923
3980
  * whichever process runs the plugin. A plugin's simulator file exports `createPluginSimulator`
3924
3981
  * (`KayPluginSimulatorFactory`). A clean break: only this repo's plugins read the old member, and
3925
3982
  * a plugin with no simulator is unaffected, so 0.28.0 stays served.
3983
+ *
3984
+ * 0.30.0 lets a scheduled workflow be described as data (#15722). `contributes.workflows` under
3985
+ * `kay.app` declares its name, schedule and sign-in, and `app.implementWorkflow(localId, run)`
3986
+ * supplies what a run does: each run is handed the workflow's accounts and tokens, so the code
3987
+ * runs the same in the daemon and in the plugin host. Additive: `app.workflows.define` stays, and
3988
+ * a plugin that declares a workflow declares ^0.30.0.
3989
+ *
3990
+ * 0.31.0 lets a plugin declare its rail entries as data (#15896). `railEntries` under `kay.ui`
3991
+ * `contributes` names each entry's title, page, shortcut and icon file. It replaces `activityRail` on a
3992
+ * UI app, which is stripped from a manifest that still carries it, so that manifest loses only the
3993
+ * rail button. A plugin that declares a rail entry declares ^0.31.0.
3926
3994
  */
3927
- export declare const KAY_PLUGIN_SDK_VERSION: "0.29.0";
3995
+ export declare const KAY_PLUGIN_SDK_VERSION: "0.31.0";
3928
3996
 
3929
3997
  export declare const KAY_PLUGIN_TARGET_NAMES: readonly ["kay.agent", "kay.app", "kay.ui"];
3930
3998
 
@@ -4515,6 +4583,17 @@ export declare const KayAppTargetManifest: z.ZodObject<{
4515
4583
  }, z.core.$strict>>>;
4516
4584
  }, z.core.$strict>>;
4517
4585
  }, z.core.$strict>>>;
4586
+ workflows: z.ZodOptional<z.ZodArray<z.ZodObject<{
4587
+ localId: z.ZodString;
4588
+ name: z.ZodString;
4589
+ description: z.ZodString;
4590
+ everyMs: z.ZodNumber;
4591
+ auth: z.ZodOptional<z.ZodObject<{
4592
+ service: z.ZodString;
4593
+ scheme: z.ZodString;
4594
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
4595
+ }, z.core.$strict>>;
4596
+ }, z.core.$strict>>>;
4518
4597
  eventDefinitions: z.ZodOptional<z.ZodArray<z.ZodObject<{
4519
4598
  localId: z.ZodString;
4520
4599
  displayName: z.ZodOptional<z.ZodString>;
@@ -5268,6 +5347,17 @@ export declare const KayPluginManifestV1: z.ZodObject<{
5268
5347
  }, z.core.$strict>>>;
5269
5348
  }, z.core.$strict>>;
5270
5349
  }, z.core.$strict>>>;
5350
+ workflows: z.ZodOptional<z.ZodArray<z.ZodObject<{
5351
+ localId: z.ZodString;
5352
+ name: z.ZodString;
5353
+ description: z.ZodString;
5354
+ everyMs: z.ZodNumber;
5355
+ auth: z.ZodOptional<z.ZodObject<{
5356
+ service: z.ZodString;
5357
+ scheme: z.ZodString;
5358
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
5359
+ }, z.core.$strict>>;
5360
+ }, z.core.$strict>>>;
5271
5361
  eventDefinitions: z.ZodOptional<z.ZodArray<z.ZodObject<{
5272
5362
  localId: z.ZodString;
5273
5363
  displayName: z.ZodOptional<z.ZodString>;
@@ -5450,16 +5540,57 @@ export declare const KayPluginManifestV1: z.ZodObject<{
5450
5540
  "workspace.arrange": "workspace.arrange";
5451
5541
  }>>>;
5452
5542
  }, z.core.$strict>>;
5453
- activityRail: z.ZodOptional<z.ZodObject<{
5454
- section: z.ZodOptional<z.ZodEnum<{
5455
- primary: "primary";
5456
- plugins: "plugins";
5457
- }>>;
5458
- order: z.ZodOptional<z.ZodNumber>;
5459
- icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
5460
- svg: z.ZodString;
5461
- }, z.core.$strict>]>>;
5543
+ }, z.core.$strict> | z.ZodPreprocess<z.ZodObject<{
5544
+ localId: z.ZodString;
5545
+ displayName: z.ZodString;
5546
+ description: z.ZodOptional<z.ZodString>;
5547
+ icon: z.ZodOptional<z.ZodString>;
5548
+ runtime: z.ZodLiteral<"kay.react-app.v1">;
5549
+ contextOnly: z.ZodOptional<z.ZodLiteral<true>>;
5550
+ sdk: z.ZodObject<{
5551
+ range: z.ZodString;
5552
+ }, z.core.$strict>;
5553
+ entrypoint: z.ZodObject<{
5554
+ module: z.ZodString;
5555
+ export: z.ZodOptional<z.ZodString>;
5556
+ }, z.core.$strict>;
5557
+ styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
5558
+ assets: z.ZodOptional<z.ZodArray<z.ZodString>>;
5559
+ capabilities: z.ZodOptional<z.ZodObject<{
5560
+ endpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
5561
+ host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
5562
+ "sessions.create": "sessions.create";
5563
+ "memory.read": "memory.read";
5564
+ "skills.read": "skills.read";
5565
+ "automations.run": "automations.run";
5566
+ "artifacts.read": "artifacts.read";
5567
+ "navigation.open-session": "navigation.open-session";
5568
+ "artifacts.preview": "artifacts.preview";
5569
+ "cost.read": "cost.read";
5570
+ "billing.read": "billing.read";
5571
+ "context.read": "context.read";
5572
+ "usage.read": "usage.read";
5573
+ "self-improvement.read": "self-improvement.read";
5574
+ "automations.read": "automations.read";
5575
+ "shared-artifacts.read": "shared-artifacts.read";
5576
+ "workspace.place-pane": "workspace.place-pane";
5577
+ "workspace.pane-header": "workspace.pane-header";
5578
+ "workspace.arrange": "workspace.arrange";
5579
+ }>>>;
5462
5580
  }, z.core.$strict>>;
5581
+ }, z.core.$strict>, unknown>>>;
5582
+ railEntries: z.ZodOptional<z.ZodArray<z.ZodObject<{
5583
+ id: z.ZodString;
5584
+ title: z.ZodString;
5585
+ icon: z.ZodOptional<z.ZodString>;
5586
+ page: z.ZodString;
5587
+ homeLocation: z.ZodOptional<z.ZodString>;
5588
+ shortcut: z.ZodOptional<z.ZodString>;
5589
+ order: z.ZodOptional<z.ZodNumber>;
5590
+ section: z.ZodOptional<z.ZodEnum<{
5591
+ primary: "primary";
5592
+ plugins: "plugins";
5593
+ }>>;
5463
5594
  }, z.core.$strict>>>;
5464
5595
  themes: z.ZodOptional<z.ZodArray<z.ZodObject<{
5465
5596
  localId: z.ZodString;
@@ -6503,16 +6634,57 @@ export declare const KayUiTargetManifest: z.ZodObject<{
6503
6634
  "workspace.arrange": "workspace.arrange";
6504
6635
  }>>>;
6505
6636
  }, z.core.$strict>>;
6506
- activityRail: z.ZodOptional<z.ZodObject<{
6507
- section: z.ZodOptional<z.ZodEnum<{
6508
- primary: "primary";
6509
- plugins: "plugins";
6510
- }>>;
6511
- order: z.ZodOptional<z.ZodNumber>;
6512
- icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
6513
- svg: z.ZodString;
6514
- }, z.core.$strict>]>>;
6637
+ }, z.core.$strict> | z.ZodPreprocess<z.ZodObject<{
6638
+ localId: z.ZodString;
6639
+ displayName: z.ZodString;
6640
+ description: z.ZodOptional<z.ZodString>;
6641
+ icon: z.ZodOptional<z.ZodString>;
6642
+ runtime: z.ZodLiteral<"kay.react-app.v1">;
6643
+ contextOnly: z.ZodOptional<z.ZodLiteral<true>>;
6644
+ sdk: z.ZodObject<{
6645
+ range: z.ZodString;
6646
+ }, z.core.$strict>;
6647
+ entrypoint: z.ZodObject<{
6648
+ module: z.ZodString;
6649
+ export: z.ZodOptional<z.ZodString>;
6650
+ }, z.core.$strict>;
6651
+ styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
6652
+ assets: z.ZodOptional<z.ZodArray<z.ZodString>>;
6653
+ capabilities: z.ZodOptional<z.ZodObject<{
6654
+ endpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
6655
+ host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6656
+ "sessions.create": "sessions.create";
6657
+ "memory.read": "memory.read";
6658
+ "skills.read": "skills.read";
6659
+ "automations.run": "automations.run";
6660
+ "artifacts.read": "artifacts.read";
6661
+ "navigation.open-session": "navigation.open-session";
6662
+ "artifacts.preview": "artifacts.preview";
6663
+ "cost.read": "cost.read";
6664
+ "billing.read": "billing.read";
6665
+ "context.read": "context.read";
6666
+ "usage.read": "usage.read";
6667
+ "self-improvement.read": "self-improvement.read";
6668
+ "automations.read": "automations.read";
6669
+ "shared-artifacts.read": "shared-artifacts.read";
6670
+ "workspace.place-pane": "workspace.place-pane";
6671
+ "workspace.pane-header": "workspace.pane-header";
6672
+ "workspace.arrange": "workspace.arrange";
6673
+ }>>>;
6515
6674
  }, z.core.$strict>>;
6675
+ }, z.core.$strict>, unknown>>>;
6676
+ railEntries: z.ZodOptional<z.ZodArray<z.ZodObject<{
6677
+ id: z.ZodString;
6678
+ title: z.ZodString;
6679
+ icon: z.ZodOptional<z.ZodString>;
6680
+ page: z.ZodString;
6681
+ homeLocation: z.ZodOptional<z.ZodString>;
6682
+ shortcut: z.ZodOptional<z.ZodString>;
6683
+ order: z.ZodOptional<z.ZodNumber>;
6684
+ section: z.ZodOptional<z.ZodEnum<{
6685
+ primary: "primary";
6686
+ plugins: "plugins";
6687
+ }>>;
6516
6688
  }, z.core.$strict>>>;
6517
6689
  themes: z.ZodOptional<z.ZodArray<z.ZodObject<{
6518
6690
  localId: z.ZodString;
@@ -8935,6 +9107,7 @@ export declare const PluginContributionKind: z.ZodEnum<{
8935
9107
  appDataSource: "appDataSource";
8936
9108
  whiteboardType: "whiteboardType";
8937
9109
  approvalType: "approvalType";
9110
+ workflow: "workflow";
8938
9111
  contextContributor: "contextContributor";
8939
9112
  transcriptionProvider: "transcriptionProvider";
8940
9113
  deviceDelegation: "deviceDelegation";
@@ -10513,21 +10686,26 @@ export declare const ResolvedKayAppWhiteboardType: z.ZodObject<{
10513
10686
 
10514
10687
  export declare type ResolvedKayAppWhiteboardType = z.infer<typeof ResolvedKayAppWhiteboardType>;
10515
10688
 
10689
+ export declare const ResolvedKayAppWorkflow: z.ZodObject<{
10690
+ localId: z.ZodString;
10691
+ globalId: z.ZodString;
10692
+ name: z.ZodString;
10693
+ description: z.ZodString;
10694
+ everyMs: z.ZodNumber;
10695
+ auth: z.ZodOptional<z.ZodObject<{
10696
+ serviceId: z.ZodString;
10697
+ schemeId: z.ZodString;
10698
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
10699
+ }, z.core.$strict>>;
10700
+ }, z.core.$strict>;
10701
+
10702
+ export declare type ResolvedKayAppWorkflow = z.infer<typeof ResolvedKayAppWorkflow>;
10703
+
10516
10704
  export declare const ResolvedKayUiApp: z.ZodObject<{
10517
10705
  localId: z.ZodString;
10518
10706
  globalId: z.ZodString;
10519
10707
  displayName: z.ZodString;
10520
10708
  contextOnly: z.ZodOptional<z.ZodLiteral<true>>;
10521
- activityRail: z.ZodOptional<z.ZodObject<{
10522
- section: z.ZodOptional<z.ZodEnum<{
10523
- primary: "primary";
10524
- plugins: "plugins";
10525
- }>>;
10526
- order: z.ZodOptional<z.ZodNumber>;
10527
- icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
10528
- svg: z.ZodString;
10529
- }, z.core.$strict>]>>;
10530
- }, z.core.$strict>>;
10531
10709
  description: z.ZodOptional<z.ZodString>;
10532
10710
  icon: z.ZodOptional<z.ZodString>;
10533
10711
  runtime: z.ZodLiteral<"kay.react-app.v1">;
@@ -10916,6 +11094,7 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
10916
11094
  appDataSource: "appDataSource";
10917
11095
  whiteboardType: "whiteboardType";
10918
11096
  approvalType: "approvalType";
11097
+ workflow: "workflow";
10919
11098
  contextContributor: "contextContributor";
10920
11099
  transcriptionProvider: "transcriptionProvider";
10921
11100
  deviceDelegation: "deviceDelegation";
@@ -11687,6 +11866,18 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
11687
11866
  moduleId: z.ZodString;
11688
11867
  authService: z.ZodOptional<z.ZodString>;
11689
11868
  }, z.core.$strict>>>;
11869
+ kayAppWorkflows: z.ZodOptional<z.ZodArray<z.ZodObject<{
11870
+ localId: z.ZodString;
11871
+ globalId: z.ZodString;
11872
+ name: z.ZodString;
11873
+ description: z.ZodString;
11874
+ everyMs: z.ZodNumber;
11875
+ auth: z.ZodOptional<z.ZodObject<{
11876
+ serviceId: z.ZodString;
11877
+ schemeId: z.ZodString;
11878
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
11879
+ }, z.core.$strict>>;
11880
+ }, z.core.$strict>>>;
11690
11881
  kayAppDataSources: z.ZodOptional<z.ZodArray<z.ZodObject<{
11691
11882
  localId: z.ZodString;
11692
11883
  globalId: z.ZodString;
@@ -11802,16 +11993,6 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
11802
11993
  globalId: z.ZodString;
11803
11994
  displayName: z.ZodString;
11804
11995
  contextOnly: z.ZodOptional<z.ZodLiteral<true>>;
11805
- activityRail: z.ZodOptional<z.ZodObject<{
11806
- section: z.ZodOptional<z.ZodEnum<{
11807
- primary: "primary";
11808
- plugins: "plugins";
11809
- }>>;
11810
- order: z.ZodOptional<z.ZodNumber>;
11811
- icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
11812
- svg: z.ZodString;
11813
- }, z.core.$strict>]>>;
11814
- }, z.core.$strict>>;
11815
11996
  description: z.ZodOptional<z.ZodString>;
11816
11997
  icon: z.ZodOptional<z.ZodString>;
11817
11998
  runtime: z.ZodLiteral<"kay.react-app.v1">;
@@ -11883,6 +12064,7 @@ export declare const ResolvedPluginContributionId: z.ZodObject<{
11883
12064
  appDataSource: "appDataSource";
11884
12065
  whiteboardType: "whiteboardType";
11885
12066
  approvalType: "approvalType";
12067
+ workflow: "workflow";
11886
12068
  contextContributor: "contextContributor";
11887
12069
  transcriptionProvider: "transcriptionProvider";
11888
12070
  deviceDelegation: "deviceDelegation";
@@ -13412,19 +13594,6 @@ export declare interface TurnPacketMessage {
13412
13594
  readonly origin: TurnMessageOrigin;
13413
13595
  }
13414
13596
 
13415
- export declare const UiAppActivityRail: z.ZodObject<{
13416
- section: z.ZodOptional<z.ZodEnum<{
13417
- primary: "primary";
13418
- plugins: "plugins";
13419
- }>>;
13420
- order: z.ZodOptional<z.ZodNumber>;
13421
- icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
13422
- svg: z.ZodString;
13423
- }, z.core.$strict>]>>;
13424
- }, z.core.$strict>;
13425
-
13426
- export declare type UiAppActivityRail = z.infer<typeof UiAppActivityRail>;
13427
-
13428
13597
  export declare const UiAppCapabilities: z.ZodObject<{
13429
13598
  endpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
13430
13599
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
@@ -13488,17 +13657,45 @@ export declare const UiAppContribution: z.ZodObject<{
13488
13657
  "workspace.arrange": "workspace.arrange";
13489
13658
  }>>>;
13490
13659
  }, z.core.$strict>>;
13491
- activityRail: z.ZodOptional<z.ZodObject<{
13492
- section: z.ZodOptional<z.ZodEnum<{
13493
- primary: "primary";
13494
- plugins: "plugins";
13495
- }>>;
13496
- order: z.ZodOptional<z.ZodNumber>;
13497
- icon: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
13498
- svg: z.ZodString;
13499
- }, z.core.$strict>]>>;
13660
+ }, z.core.$strict> | z.ZodPreprocess<z.ZodObject<{
13661
+ localId: z.ZodString;
13662
+ displayName: z.ZodString;
13663
+ description: z.ZodOptional<z.ZodString>;
13664
+ icon: z.ZodOptional<z.ZodString>;
13665
+ runtime: z.ZodLiteral<"kay.react-app.v1">;
13666
+ contextOnly: z.ZodOptional<z.ZodLiteral<true>>;
13667
+ sdk: z.ZodObject<{
13668
+ range: z.ZodString;
13669
+ }, z.core.$strict>;
13670
+ entrypoint: z.ZodObject<{
13671
+ module: z.ZodString;
13672
+ export: z.ZodOptional<z.ZodString>;
13673
+ }, z.core.$strict>;
13674
+ styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
13675
+ assets: z.ZodOptional<z.ZodArray<z.ZodString>>;
13676
+ capabilities: z.ZodOptional<z.ZodObject<{
13677
+ endpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
13678
+ host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
13679
+ "sessions.create": "sessions.create";
13680
+ "memory.read": "memory.read";
13681
+ "skills.read": "skills.read";
13682
+ "automations.run": "automations.run";
13683
+ "artifacts.read": "artifacts.read";
13684
+ "navigation.open-session": "navigation.open-session";
13685
+ "artifacts.preview": "artifacts.preview";
13686
+ "cost.read": "cost.read";
13687
+ "billing.read": "billing.read";
13688
+ "context.read": "context.read";
13689
+ "usage.read": "usage.read";
13690
+ "self-improvement.read": "self-improvement.read";
13691
+ "automations.read": "automations.read";
13692
+ "shared-artifacts.read": "shared-artifacts.read";
13693
+ "workspace.place-pane": "workspace.place-pane";
13694
+ "workspace.pane-header": "workspace.pane-header";
13695
+ "workspace.arrange": "workspace.arrange";
13696
+ }>>>;
13500
13697
  }, z.core.$strict>>;
13501
- }, z.core.$strict>;
13698
+ }, z.core.$strict>, unknown>;
13502
13699
 
13503
13700
  export declare type UiAppContribution = z.infer<typeof UiAppContribution>;
13504
13701
 
@@ -13518,6 +13715,22 @@ export declare const UiEventSubscriptionContribution: z.ZodObject<{
13518
13715
 
13519
13716
  export declare type UiEventSubscriptionContribution = z.infer<typeof UiEventSubscriptionContribution>;
13520
13717
 
13718
+ export declare const UiRailEntryContribution: z.ZodObject<{
13719
+ id: z.ZodString;
13720
+ title: z.ZodString;
13721
+ icon: z.ZodOptional<z.ZodString>;
13722
+ page: z.ZodString;
13723
+ homeLocation: z.ZodOptional<z.ZodString>;
13724
+ shortcut: z.ZodOptional<z.ZodString>;
13725
+ order: z.ZodOptional<z.ZodNumber>;
13726
+ section: z.ZodOptional<z.ZodEnum<{
13727
+ primary: "primary";
13728
+ plugins: "plugins";
13729
+ }>>;
13730
+ }, z.core.$strict>;
13731
+
13732
+ export declare type UiRailEntryContribution = z.infer<typeof UiRailEntryContribution>;
13733
+
13521
13734
  export declare const UiSlotContribution: z.ZodObject<{
13522
13735
  localId: z.ZodString;
13523
13736
  slot: z.ZodString;
@@ -14108,4 +14321,18 @@ export declare const WhiteboardValue: z.ZodType<JsonValue, unknown, z.core.$ZodT
14108
14321
 
14109
14322
  export declare type WhiteboardValue = z.infer<typeof WhiteboardValue>;
14110
14323
 
14324
+ export declare const WorkflowContribution: z.ZodObject<{
14325
+ localId: z.ZodString;
14326
+ name: z.ZodString;
14327
+ description: z.ZodString;
14328
+ everyMs: z.ZodNumber;
14329
+ auth: z.ZodOptional<z.ZodObject<{
14330
+ service: z.ZodString;
14331
+ scheme: z.ZodString;
14332
+ scopes: z.ZodOptional<z.ZodArray<z.ZodString>>;
14333
+ }, z.core.$strict>>;
14334
+ }, z.core.$strict>;
14335
+
14336
+ export declare type WorkflowContribution = z.infer<typeof WorkflowContribution>;
14337
+
14111
14338
  export { }
package/dist/index.js CHANGED
@@ -10,6 +10,12 @@ var KAY_APP_DATA_CHANGE_MAX_BYTES = 256 * 1024;
10
10
  var KAY_APP_DATA_READ_REQUEST_MAX_BYTES = 64 * 1024;
11
11
  var KAY_APP_DATA_READ_RESULT_MAX_BYTES = 16 * 1024 * 1024;
12
12
 
13
+ // packages/plugin-protocol/dist/ui-icon-paths.js
14
+ function declaredUiIconPaths(manifest) {
15
+ const contributes = manifest.targets?.kay?.ui?.contributes;
16
+ return (contributes?.railEntries ?? []).flatMap((entry) => entry.icon === void 0 ? [] : [{ label: `kay.ui rail entry '${entry.id}' icon`, path: entry.icon }]);
17
+ }
18
+
13
19
  // packages/plugin-protocol/dist/approval-types.js
14
20
  import { z } from "zod";
15
21
  var APPROVAL_KINDS = [
@@ -173,6 +179,7 @@ __export(common_exports, {
173
179
  JsonValue: () => JsonValue,
174
180
  KAY_EVENT_PUBLISHER_ID: () => KAY_EVENT_PUBLISHER_ID,
175
181
  KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS: () => KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS,
182
+ KAY_PLUGIN_MANIFEST_SIZE_CAP_BYTES: () => KAY_PLUGIN_MANIFEST_SIZE_CAP_BYTES,
176
183
  KAY_PLUGIN_PROTOCOL_PACKAGE_NAME: () => KAY_PLUGIN_PROTOCOL_PACKAGE_NAME,
177
184
  KAY_PLUGIN_PROTOCOL_VERSION: () => KAY_PLUGIN_PROTOCOL_VERSION,
178
185
  KAY_PLUGIN_SDK_VERSION: () => KAY_PLUGIN_SDK_VERSION,
@@ -220,13 +227,16 @@ var JsonObject = z4.record(z4.string(), JsonValue);
220
227
  var JsonSchema = z4.record(z4.string(), JsonValue);
221
228
 
222
229
  // packages/plugin-protocol/dist/common.js
230
+ var KAY_PLUGIN_MANIFEST_SIZE_CAP_BYTES = 1024 * 1024;
223
231
  var KAY_PLUGIN_PROTOCOL_VERSION = "kay.plugin.v1";
224
232
  var KAY_PLUGIN_PROTOCOL_PACKAGE_NAME = "@bonsai/plugin-protocol";
225
- var KAY_PLUGIN_SDK_VERSION = "0.29.0";
233
+ var KAY_PLUGIN_SDK_VERSION = "0.31.0";
226
234
  var KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS = [
227
235
  "0.26.3",
228
236
  "0.27.1",
229
- "0.28.0"
237
+ "0.28.0",
238
+ "0.29.0",
239
+ "0.30.0"
230
240
  ];
231
241
  var KAY_PLUGIN_TARGET_NAMES = [
232
242
  "kay.agent",
@@ -2715,16 +2725,17 @@ __export(contributions_exports, {
2715
2725
  ThemeContribution: () => ThemeContribution,
2716
2726
  ToolContribution: () => ToolContribution,
2717
2727
  ToolPermission: () => ToolPermission,
2718
- UiAppActivityRail: () => UiAppActivityRail,
2719
2728
  UiAppCapabilities: () => UiAppCapabilities,
2720
2729
  UiAppContribution: () => UiAppContribution,
2721
2730
  UiCommandContribution: () => UiCommandContribution,
2722
2731
  UiEventSubscriptionContribution: () => UiEventSubscriptionContribution,
2732
+ UiRailEntryContribution: () => UiRailEntryContribution,
2723
2733
  UiSlotContribution: () => UiSlotContribution,
2724
2734
  UriModuleContribution: () => UriModuleContribution,
2725
2735
  UriModuleFacts: () => UriModuleFacts,
2726
2736
  WhiteboardTypeContribution: () => WhiteboardTypeContribution,
2727
2737
  WhiteboardTypeStorage: () => WhiteboardTypeStorage,
2738
+ WorkflowContribution: () => WorkflowContribution,
2728
2739
  canonicalContributionSchemas: () => canonicalContributionSchemas
2729
2740
  });
2730
2741
  import { z as z12 } from "zod";
@@ -3275,6 +3286,24 @@ function createContributionsSchemas(canonical) {
3275
3286
  requestSchema: JsonSchema.optional(),
3276
3287
  responseSchema: JsonSchema.optional()
3277
3288
  });
3289
+ const WorkflowContribution2 = z12.strictObject({
3290
+ localId: LocalContributionId2,
3291
+ name: NonEmptyString3,
3292
+ /** Plain-text purpose, at most 280 characters. */
3293
+ description: NonEmptyString3,
3294
+ /** How often it runs. The automations engine enforces its scheduling floor. */
3295
+ everyMs: z12.number().int().positive(),
3296
+ auth: z12.strictObject({
3297
+ /** A local ref names a service in this manifest; a dotted ref names another plugin's. */
3298
+ service: AuthServiceReference2,
3299
+ scheme: AuthSchemeReference2,
3300
+ /**
3301
+ * Scopes each account's token must hold. Omitted, the host asks for the first scope of the
3302
+ * `background-job` grant's `allowedScopes` that the account holds.
3303
+ */
3304
+ scopes: z12.array(NonEmptyString3).min(1).optional()
3305
+ }).optional()
3306
+ });
3278
3307
  const McpServerUrl2 = pluginString(canonical).min(1).refine((value) => {
3279
3308
  let parsed;
3280
3309
  try {
@@ -3484,12 +3513,17 @@ function createContributionsSchemas(canonical) {
3484
3513
  }
3485
3514
  }
3486
3515
  });
3487
- const UiAppActivityRail2 = z12.strictObject({
3488
- section: z12.enum(["primary", "plugins"]).optional(),
3516
+ const UiRailEntryContribution2 = z12.strictObject({
3517
+ id: LocalContributionId2,
3518
+ title: NonEmptyString3,
3519
+ icon: PackageAssetPath2.optional(),
3520
+ page: NonEmptyString3,
3521
+ homeLocation: NonEmptyString3.optional(),
3522
+ shortcut: NonEmptyString3.optional(),
3489
3523
  order: z12.number().finite().optional(),
3490
- icon: z12.union([NonEmptyString3, z12.strictObject({ svg: NonEmptyString3 })]).optional()
3524
+ section: z12.enum(["primary", "plugins"]).optional()
3491
3525
  });
3492
- const UiAppContribution2 = z12.strictObject({
3526
+ const UiAppFields = z12.strictObject({
3493
3527
  localId: LocalContributionId2,
3494
3528
  displayName: NonEmptyString3,
3495
3529
  description: NonEmptyString3.optional(),
@@ -3501,9 +3535,17 @@ function createContributionsSchemas(canonical) {
3501
3535
  entrypoint: TargetEntrypoint2,
3502
3536
  styles: z12.array(PackageAssetPath2).optional(),
3503
3537
  assets: z12.array(PackageAssetPath2).optional(),
3504
- capabilities: UiAppCapabilities2.optional(),
3505
- activityRail: UiAppActivityRail2.optional()
3538
+ capabilities: UiAppCapabilities2.optional()
3506
3539
  });
3540
+ function stripRetiredUiAppFields(value) {
3541
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
3542
+ return value;
3543
+ }
3544
+ const remaining = { ...value };
3545
+ delete remaining["activityRail"];
3546
+ return remaining;
3547
+ }
3548
+ const UiAppContribution2 = canonical ? UiAppFields : z12.preprocess(stripRetiredUiAppFields, UiAppFields);
3507
3549
  const ThemeContribution2 = z12.strictObject({
3508
3550
  localId: LocalContributionId2,
3509
3551
  displayName: NonEmptyString3,
@@ -3551,6 +3593,7 @@ function createContributionsSchemas(canonical) {
3551
3593
  "appDataSource",
3552
3594
  "whiteboardType",
3553
3595
  "approvalType",
3596
+ "workflow",
3554
3597
  "contextContributor",
3555
3598
  "transcriptionProvider",
3556
3599
  "deviceDelegation",
@@ -3594,6 +3637,7 @@ function createContributionsSchemas(canonical) {
3594
3637
  EntityResolverContribution: EntityResolverContribution2,
3595
3638
  AgentRenderContribution: AgentRenderContribution2,
3596
3639
  EndpointContribution: EndpointContribution2,
3640
+ WorkflowContribution: WorkflowContribution2,
3597
3641
  McpServerUrl: McpServerUrl2,
3598
3642
  McpServerAuthMode: McpServerAuthMode2,
3599
3643
  McpServerContribution: McpServerContribution2,
@@ -3619,7 +3663,7 @@ function createContributionsSchemas(canonical) {
3619
3663
  RichViewContribution: RichViewContribution2,
3620
3664
  KayUiAppHostCapability: KayUiAppHostCapability2,
3621
3665
  UiAppCapabilities: UiAppCapabilities2,
3622
- UiAppActivityRail: UiAppActivityRail2,
3666
+ UiRailEntryContribution: UiRailEntryContribution2,
3623
3667
  UiAppContribution: UiAppContribution2,
3624
3668
  ThemeContribution: ThemeContribution2,
3625
3669
  CommandHandler: CommandHandler2,
@@ -3627,7 +3671,7 @@ function createContributionsSchemas(canonical) {
3627
3671
  PluginContributionKind: PluginContributionKind2
3628
3672
  };
3629
3673
  }
3630
- var { ApprovalCardForm, ApprovalCardStoredForm, ApprovalTypeContribution, UriModuleFacts, ToolContribution, ToolPermission, AgentToolContribution, ConverterContribution, UriModuleContribution, AppUriModuleContribution, AppDataSourceContribution, WhiteboardTypeStorage, WhiteboardTypeContribution, AppDataMaterializerContribution, ArtifactUriModuleContribution, CliBindingContribution, GitHostContribution, ResourceContribution, SkillContribution, PluginSkillSourceDeclaration, SearchProviderContribution, InteractionDriverContribution, EntityResolverContribution, AgentRenderContribution, EndpointContribution, McpServerUrl, McpServerAuthMode, McpServerContribution, McpServerContributions, AppEventSubscription, ContextContributorContribution, PluginEventDefinitionContribution, PluginNotificationRuleContribution, UiEventSubscriptionContribution, DeviceDelegationContribution, SessionReaderContribution, UiCommandContribution, UiSlotContribution, SettingsPanelContribution, ResultRendererContribution, ReferenceOpenBehavior, ReferencePresentationVariant, ReferencePresentationVariants, ReferencePresentationUriPattern, ReferencePresentationUrlClaim, ReferencePresentationTooltip, ReferencePresentationContribution, RichViewContribution, KayUiAppHostCapability, UiAppCapabilities, UiAppActivityRail, UiAppContribution, ThemeContribution, CommandHandler, CommandContribution, PluginContributionKind } = createContributionsSchemas(false);
3674
+ var { ApprovalCardForm, ApprovalCardStoredForm, ApprovalTypeContribution, UriModuleFacts, ToolContribution, ToolPermission, AgentToolContribution, ConverterContribution, UriModuleContribution, AppUriModuleContribution, AppDataSourceContribution, WhiteboardTypeStorage, WhiteboardTypeContribution, AppDataMaterializerContribution, ArtifactUriModuleContribution, CliBindingContribution, GitHostContribution, ResourceContribution, SkillContribution, PluginSkillSourceDeclaration, SearchProviderContribution, InteractionDriverContribution, EntityResolverContribution, AgentRenderContribution, EndpointContribution, WorkflowContribution, McpServerUrl, McpServerAuthMode, McpServerContribution, McpServerContributions, AppEventSubscription, ContextContributorContribution, PluginEventDefinitionContribution, PluginNotificationRuleContribution, UiEventSubscriptionContribution, DeviceDelegationContribution, SessionReaderContribution, UiCommandContribution, UiSlotContribution, SettingsPanelContribution, ResultRendererContribution, ReferenceOpenBehavior, ReferencePresentationVariant, ReferencePresentationVariants, ReferencePresentationUriPattern, ReferencePresentationUrlClaim, ReferencePresentationTooltip, ReferencePresentationContribution, RichViewContribution, KayUiAppHostCapability, UiAppCapabilities, UiRailEntryContribution, UiAppContribution, ThemeContribution, CommandHandler, CommandContribution, PluginContributionKind } = createContributionsSchemas(false);
3631
3675
  var canonicalContributionSchemas = createContributionsSchemas(true);
3632
3676
 
3633
3677
  // packages/plugin-protocol/dist/icon-shape.js
@@ -3701,7 +3745,7 @@ var KAY_UI_NATIVE_EVENT_SUBSCRIPTIONS = [
3701
3745
  var KAY_UI_NATIVE_EVENT_ALLOWLIST = new Set(KAY_UI_NATIVE_EVENT_SUBSCRIPTIONS);
3702
3746
  var RETIRED_COMPATIBILITY_KEYS = ["policy"];
3703
3747
  function createManifestSchemas(canonical) {
3704
- const { AgentRenderContribution: AgentRenderContribution2, ApprovalTypeContribution: ApprovalTypeContribution2, AppDataMaterializerContribution: AppDataMaterializerContribution2, AppDataSourceContribution: AppDataSourceContribution2, AppUriModuleContribution: AppUriModuleContribution2, AppEventSubscription: AppEventSubscription2, ArtifactUriModuleContribution: ArtifactUriModuleContribution2, CliBindingContribution: CliBindingContribution2, CommandContribution: CommandContribution2, ContextContributorContribution: ContextContributorContribution2, ConverterContribution: ConverterContribution2, SessionReaderContribution: SessionReaderContribution2, DeviceDelegationContribution: DeviceDelegationContribution2, EndpointContribution: EndpointContribution2, EntityResolverContribution: EntityResolverContribution2, GitHostContribution: GitHostContribution2, McpServerContributions: McpServerContributions2, PluginEventDefinitionContribution: PluginEventDefinitionContribution2, PluginNotificationRuleContribution: PluginNotificationRuleContribution2, ResourceContribution: ResourceContribution2, ReferencePresentationContribution: ReferencePresentationContribution2, ResultRendererContribution: ResultRendererContribution2, RichViewContribution: RichViewContribution2, PluginSkillSourceDeclaration: PluginSkillSourceDeclaration2, InteractionDriverContribution: InteractionDriverContribution2, SearchProviderContribution: SearchProviderContribution2, SkillContribution: SkillContribution2, SettingsPanelContribution: SettingsPanelContribution2, ThemeContribution: ThemeContribution2, AgentToolContribution: AgentToolContribution2, ToolContribution: ToolContribution2, UiCommandContribution: UiCommandContribution2, UiAppContribution: UiAppContribution2, UiEventSubscriptionContribution: UiEventSubscriptionContribution2, UiSlotContribution: UiSlotContribution2, UriModuleContribution: UriModuleContribution2, WhiteboardTypeContribution: WhiteboardTypeContribution2 } = canonical ? canonicalContributionSchemas : contributions_exports;
3748
+ const { AgentRenderContribution: AgentRenderContribution2, ApprovalTypeContribution: ApprovalTypeContribution2, WorkflowContribution: WorkflowContribution2, AppDataMaterializerContribution: AppDataMaterializerContribution2, AppDataSourceContribution: AppDataSourceContribution2, AppUriModuleContribution: AppUriModuleContribution2, AppEventSubscription: AppEventSubscription2, ArtifactUriModuleContribution: ArtifactUriModuleContribution2, CliBindingContribution: CliBindingContribution2, CommandContribution: CommandContribution2, ContextContributorContribution: ContextContributorContribution2, ConverterContribution: ConverterContribution2, SessionReaderContribution: SessionReaderContribution2, DeviceDelegationContribution: DeviceDelegationContribution2, EndpointContribution: EndpointContribution2, EntityResolverContribution: EntityResolverContribution2, GitHostContribution: GitHostContribution2, McpServerContributions: McpServerContributions2, PluginEventDefinitionContribution: PluginEventDefinitionContribution2, PluginNotificationRuleContribution: PluginNotificationRuleContribution2, ResourceContribution: ResourceContribution2, ReferencePresentationContribution: ReferencePresentationContribution2, ResultRendererContribution: ResultRendererContribution2, RichViewContribution: RichViewContribution2, PluginSkillSourceDeclaration: PluginSkillSourceDeclaration2, InteractionDriverContribution: InteractionDriverContribution2, SearchProviderContribution: SearchProviderContribution2, SkillContribution: SkillContribution2, SettingsPanelContribution: SettingsPanelContribution2, ThemeContribution: ThemeContribution2, AgentToolContribution: AgentToolContribution2, ToolContribution: ToolContribution2, UiCommandContribution: UiCommandContribution2, UiAppContribution: UiAppContribution2, UiRailEntryContribution: UiRailEntryContribution2, UiEventSubscriptionContribution: UiEventSubscriptionContribution2, UiSlotContribution: UiSlotContribution2, UriModuleContribution: UriModuleContribution2, WhiteboardTypeContribution: WhiteboardTypeContribution2 } = canonical ? canonicalContributionSchemas : contributions_exports;
3705
3749
  const { HttpsUrl: HttpsUrl2, LocalContributionId: LocalContributionId2, NonEmptyString: NonEmptyString3, PackageAssetPath: PackageAssetPath2, PluginId: PluginId2, PluginNamespace: PluginNamespace2, RegistrableDomain: RegistrableDomain2, SignedInStatusCode: SignedInStatusCode2, TargetEntrypoint: TargetEntrypoint2 } = canonical ? canonicalCommonSchemas : common_exports;
3706
3750
  const { PluginPermissionManifest: PluginPermissionManifest2 } = canonical ? canonicalPermissionSchemas : permissions_exports;
3707
3751
  const KayAgentTargetManifest2 = z13.strictObject({
@@ -3794,6 +3838,7 @@ function createManifestSchemas(canonical) {
3794
3838
  dataSources: z13.array(AppDataSourceContribution2).optional(),
3795
3839
  whiteboardTypes: z13.array(WhiteboardTypeContribution2).optional(),
3796
3840
  approvalTypes: z13.array(ApprovalTypeContribution2).optional(),
3841
+ workflows: z13.array(WorkflowContribution2).optional(),
3797
3842
  eventDefinitions: z13.array(PluginEventDefinitionContribution2).optional(),
3798
3843
  // Default notification rules over this plugin's own `eventDefinitions`; seeded by the host
3799
3844
  // (see `PluginNotificationRuleContribution`).
@@ -3822,6 +3867,7 @@ function createManifestSchemas(canonical) {
3822
3867
  referencePresentations: z13.array(ReferencePresentationContribution2).optional(),
3823
3868
  views: z13.array(RichViewContribution2).optional(),
3824
3869
  apps: z13.array(UiAppContribution2).optional(),
3870
+ railEntries: z13.array(UiRailEntryContribution2).optional(),
3825
3871
  themes: z13.array(ThemeContribution2).optional(),
3826
3872
  eventSubscriptions: z13.array(UiEventSubscriptionContribution2).optional(),
3827
3873
  dataMaterializers: z13.array(AppDataMaterializerContribution2).optional()
@@ -4374,6 +4420,35 @@ function createManifestSchemas(canonical) {
4374
4420
  });
4375
4421
  }
4376
4422
  }
4423
+ reportDuplicateLocalIds(ctx, ["targets", "kay", "app", "contributes", "workflows"], manifest.targets?.kay?.app?.contributes?.workflows, "workflow");
4424
+ for (const [index, workflow] of (manifest.targets?.kay?.app?.contributes?.workflows ?? []).entries()) {
4425
+ const path = [
4426
+ "targets",
4427
+ "kay",
4428
+ "app",
4429
+ "contributes",
4430
+ "workflows",
4431
+ index
4432
+ ];
4433
+ if (manifest.targets?.kay?.app?.entrypoint === void 0) {
4434
+ ctx.addIssue({
4435
+ code: "custom",
4436
+ path,
4437
+ message: `workflow ${workflow.localId} needs a kay.app entrypoint to implement it`
4438
+ });
4439
+ }
4440
+ const { auth } = workflow;
4441
+ if (auth === void 0)
4442
+ continue;
4443
+ const granted = manifest.permissions?.byTarget["kay.app"]?.auth?.some((grant) => grant.service === auth.service && grant.operations.includes("list") && grant.operations.includes("resolve") && (grant.purposes === void 0 || grant.purposes.includes("background-job")));
4444
+ if (granted !== true) {
4445
+ ctx.addIssue({
4446
+ code: "custom",
4447
+ path: [...path, "auth", "service"],
4448
+ message: `workflow ${workflow.localId} needs a kay.app auth grant on ${auth.service} with the list and resolve operations and the background-job purpose`
4449
+ });
4450
+ }
4451
+ }
4377
4452
  const syntheticContributionIds = collectSyntheticContributionIds(manifest);
4378
4453
  for (const contribution of collectDeclaredContributionIds(manifest)) {
4379
4454
  if (syntheticContributionIds.has(contribution.localId)) {
@@ -4922,6 +4997,7 @@ function collectKayAppContributionIds(manifest) {
4922
4997
  const contributes = manifest.targets?.kay?.app?.contributes;
4923
4998
  const output = [];
4924
4999
  pushContributionIds(output, ["targets", "kay", "app", "contributes", "approvalTypes"], contributes?.approvalTypes);
5000
+ pushContributionIds(output, ["targets", "kay", "app", "contributes", "workflows"], contributes?.workflows);
4925
5001
  pushContributionIds(output, ["targets", "kay", "app", "contributes", "tools"], contributes?.tools);
4926
5002
  pushContributionIds(output, ["targets", "kay", "app", "contributes", "endpoints"], contributes?.endpoints);
4927
5003
  pushContributionIds(output, ["targets", "kay", "app", "contributes", "uriModules"], contributes?.uriModules);
@@ -4997,7 +5073,7 @@ function boundPluginDiagnosticMessage(message) {
4997
5073
  import { z as z14 } from "zod";
4998
5074
  function createResolvedContractSchemas(canonical) {
4999
5075
  const { PluginEventLocalId: PluginEventLocalId2 } = canonical ? canonicalPluginEventSchemas : plugin_events_exports;
5000
- const { ApprovalTypeContribution: ApprovalTypeContribution2, KayUiAppHostCapability: KayUiAppHostCapability2, UiAppActivityRail: UiAppActivityRail2, McpServerAuthMode: McpServerAuthMode2, McpServerUrl: McpServerUrl2, PluginContributionKind: PluginContributionKindSchema, ReferenceOpenBehavior: ReferenceOpenBehavior2, ReferencePresentationUriPattern: ReferencePresentationUriPattern2, ReferencePresentationUrlClaim: ReferencePresentationUrlClaim2, ReferencePresentationVariants: ReferencePresentationVariants2, UriModuleFacts: UriModuleFacts2, WhiteboardTypeStorage: WhiteboardTypeStorage2 } = canonical ? canonicalContributionSchemas : contributions_exports;
5076
+ const { ApprovalTypeContribution: ApprovalTypeContribution2, KayUiAppHostCapability: KayUiAppHostCapability2, McpServerAuthMode: McpServerAuthMode2, McpServerUrl: McpServerUrl2, PluginContributionKind: PluginContributionKindSchema, ReferenceOpenBehavior: ReferenceOpenBehavior2, ReferencePresentationUriPattern: ReferencePresentationUriPattern2, ReferencePresentationUrlClaim: ReferencePresentationUrlClaim2, ReferencePresentationVariants: ReferencePresentationVariants2, UriModuleFacts: UriModuleFacts2, WhiteboardTypeStorage: WhiteboardTypeStorage2 } = canonical ? canonicalContributionSchemas : contributions_exports;
5001
5077
  const { FileExtensionToken: FileExtensionToken2, GitBasicAuthUser: GitBasicAuthUser2, GitHostName: GitHostName2, GlobalContributionId: GlobalContributionId2, HttpsUrl: HttpsUrl2, LocalContributionId: LocalContributionId2, MimeTypeString: MimeTypeString2, NonEmptyString: NonEmptyString3, PackageAssetPath: PackageAssetPath2, PluginId: PluginId2, PluginNamespace: PluginNamespace2, PluginToolName: PluginToolName2, RegistrableDomain: RegistrableDomain2, SignedInStatusCode: SignedInStatusCode2, TargetEntrypoint: TargetEntrypoint2, UriScheme: UriScheme2 } = canonical ? canonicalCommonSchemas : common_exports;
5002
5078
  const { PluginExternalCliConnect: PluginExternalCliConnect2, PluginOAuthClientSupplier: PluginOAuthClientSupplier2 } = canonical ? canonicalManifestSchemas : manifest_exports;
5003
5079
  const { ResolvedPluginGrants: ResolvedPluginGrants2 } = canonical ? canonicalPermissionSchemas : permissions_exports;
@@ -5071,6 +5147,18 @@ function createResolvedContractSchemas(canonical) {
5071
5147
  /** The auth service that module signs in through, whose accounts a card may send from. */
5072
5148
  authService: GlobalContributionId2.optional()
5073
5149
  });
5150
+ const ResolvedKayAppWorkflow2 = z14.strictObject({
5151
+ localId: LocalContributionId2,
5152
+ globalId: GlobalContributionId2,
5153
+ name: NonEmptyString3,
5154
+ description: NonEmptyString3,
5155
+ everyMs: z14.number().int().positive(),
5156
+ auth: z14.strictObject({
5157
+ serviceId: GlobalContributionId2,
5158
+ schemeId: GlobalContributionId2,
5159
+ scopes: z14.array(NonEmptyString3).min(1).optional()
5160
+ }).optional()
5161
+ });
5074
5162
  const ResolvedKayAppWhiteboardType2 = z14.strictObject({
5075
5163
  localId: LocalContributionId2,
5076
5164
  globalId: GlobalContributionId2,
@@ -5270,7 +5358,6 @@ function createResolvedContractSchemas(canonical) {
5270
5358
  globalId: GlobalContributionId2,
5271
5359
  displayName: NonEmptyString3,
5272
5360
  contextOnly: z14.literal(true).optional(),
5273
- activityRail: UiAppActivityRail2.optional(),
5274
5361
  description: NonEmptyString3.optional(),
5275
5362
  icon: PackageAssetPath2.optional(),
5276
5363
  runtime: z14.literal("kay.react-app.v1"),
@@ -5314,6 +5401,7 @@ function createResolvedContractSchemas(canonical) {
5314
5401
  kayAgentTools: z14.array(ResolvedKayAgentTool2).optional(),
5315
5402
  kayAppTools: z14.array(ResolvedKayAppTool2).optional(),
5316
5403
  kayAppApprovalTypes: z14.array(ResolvedKayAppApprovalType2).optional(),
5404
+ kayAppWorkflows: z14.array(ResolvedKayAppWorkflow2).optional(),
5317
5405
  kayAppDataSources: z14.array(ResolvedKayAppDataSource2).optional(),
5318
5406
  kayAppWhiteboardTypes: z14.array(ResolvedKayAppWhiteboardType2).optional(),
5319
5407
  kayAppMcpServers: z14.array(ResolvedKayAppMcpServer2).optional(),
@@ -5326,6 +5414,7 @@ function createResolvedContractSchemas(canonical) {
5326
5414
  ResolvedKayAgentTool: ResolvedKayAgentTool2,
5327
5415
  ResolvedKayAppTool: ResolvedKayAppTool2,
5328
5416
  ResolvedKayAppApprovalType: ResolvedKayAppApprovalType2,
5417
+ ResolvedKayAppWorkflow: ResolvedKayAppWorkflow2,
5329
5418
  ResolvedKayAppDataSource: ResolvedKayAppDataSource2,
5330
5419
  ResolvedKayAppWhiteboardType: ResolvedKayAppWhiteboardType2,
5331
5420
  ResolvedKayAppMcpServer: ResolvedKayAppMcpServer2,
@@ -5344,7 +5433,7 @@ function createResolvedContractSchemas(canonical) {
5344
5433
  ResolvedPluginContractV1: ResolvedPluginContractV12
5345
5434
  };
5346
5435
  }
5347
- var { ResolvedKayAppApprovalType, ResolvedPluginContributionId, ResolvedKayAgentTool, ResolvedKayAppTool, ResolvedKayAppDataSource, ResolvedKayAppWhiteboardType, ResolvedKayAppMcpServer, ResolvedKayAgentUriModule, ResolvedKayAgentArtifactUriModule, ResolvedKayAgentEntityResolver, ResolvedKayAgentGitHostClaim, ResolvedKayAgentConverter, ResolvedReferencePresentation, ResolvedPluginProvisioningRequirement, ResolvedPluginAuthScheme, ResolvedPluginWebSession, ResolvedPluginAuthService, ResolvedKayUiAppEndpointCapability, ResolvedKayUiApp, ResolvedPluginContractV1 } = createResolvedContractSchemas(false);
5436
+ var { ResolvedKayAppApprovalType, ResolvedKayAppWorkflow, ResolvedPluginContributionId, ResolvedKayAgentTool, ResolvedKayAppTool, ResolvedKayAppDataSource, ResolvedKayAppWhiteboardType, ResolvedKayAppMcpServer, ResolvedKayAgentUriModule, ResolvedKayAgentArtifactUriModule, ResolvedKayAgentEntityResolver, ResolvedKayAgentGitHostClaim, ResolvedKayAgentConverter, ResolvedReferencePresentation, ResolvedPluginProvisioningRequirement, ResolvedPluginAuthScheme, ResolvedPluginWebSession, ResolvedPluginAuthService, ResolvedKayUiAppEndpointCapability, ResolvedKayUiApp, ResolvedPluginContractV1 } = createResolvedContractSchemas(false);
5348
5437
  var canonicalResolvedContractSchemas = createResolvedContractSchemas(true);
5349
5438
  function narrowestAccountSelectors() {
5350
5439
  return [{ kind: "active" }];
@@ -5384,6 +5473,7 @@ function collectContributionSources(manifest) {
5384
5473
  pushAll(output, "kay.app", "appDataSource", app?.dataSources);
5385
5474
  pushAll(output, "kay.app", "whiteboardType", app?.whiteboardTypes);
5386
5475
  pushAll(output, "kay.app", "approvalType", app?.approvalTypes);
5476
+ pushAll(output, "kay.app", "workflow", app?.workflows);
5387
5477
  pushAll(output, "kay.app", "command", app?.commands);
5388
5478
  pushAll(output, "kay.app", "eventDefinition", app?.eventDefinitions);
5389
5479
  pushAll(output, "kay.app", "eventSubscription", app?.eventSubscriptions);
@@ -5662,6 +5752,17 @@ function resolveKayPluginContractV1(manifest) {
5662
5752
  globalId: resolveGlobalContributionId(namespace, tool.localId),
5663
5753
  toolName: tool.toolName
5664
5754
  }));
5755
+ const kayAppWorkflows = manifest.targets?.kay?.app?.contributes?.workflows?.map(({ auth, ...workflow }) => ({
5756
+ ...workflow,
5757
+ globalId: resolveGlobalContributionId(namespace, workflow.localId),
5758
+ ...auth === void 0 ? {} : {
5759
+ auth: {
5760
+ serviceId: isQualifiedAuthServiceRef(auth.service) ? auth.service : resolveGlobalContributionId(namespace, auth.service),
5761
+ schemeId: isQualifiedAuthSchemeRef(auth.scheme) ? auth.scheme : resolveGlobalContributionId(namespace, auth.scheme),
5762
+ ...auth.scopes === void 0 ? {} : { scopes: auth.scopes }
5763
+ }
5764
+ }
5765
+ }));
5665
5766
  const kayAppDataSources = manifest.targets?.kay?.app?.contributes?.dataSources?.map((source) => ({
5666
5767
  localId: source.localId,
5667
5768
  globalId: resolveGlobalContributionId(namespace, source.localId),
@@ -5771,7 +5872,6 @@ function resolveKayPluginContractV1(manifest) {
5771
5872
  localId: app.localId,
5772
5873
  globalId: resolveGlobalContributionId(namespace, app.localId),
5773
5874
  ...app.contextOnly === void 0 ? {} : { contextOnly: app.contextOnly },
5774
- ...app.activityRail === void 0 ? {} : { activityRail: app.activityRail },
5775
5875
  displayName: app.displayName,
5776
5876
  ...app.description === void 0 ? {} : { description: app.description },
5777
5877
  ...app.icon === void 0 ? {} : { icon: app.icon },
@@ -5812,6 +5912,7 @@ function resolveKayPluginContractV1(manifest) {
5812
5912
  ...kayAgentTools && kayAgentTools.length > 0 ? { kayAgentTools } : {},
5813
5913
  ...kayAppTools && kayAppTools.length > 0 ? { kayAppTools } : {},
5814
5914
  ...kayAppApprovalTypes && kayAppApprovalTypes.length > 0 ? { kayAppApprovalTypes } : {},
5915
+ ...kayAppWorkflows && kayAppWorkflows.length > 0 ? { kayAppWorkflows } : {},
5815
5916
  ...kayAppDataSources && kayAppDataSources.length > 0 ? { kayAppDataSources } : {},
5816
5917
  ...kayAppWhiteboardTypes && kayAppWhiteboardTypes.length > 0 ? { kayAppWhiteboardTypes } : {},
5817
5918
  ...kayAppMcpServers.length > 0 ? { kayAppMcpServers } : {},
@@ -5839,7 +5940,6 @@ function uriModuleFacts({ localId: _localId, schemes: _schemes, displayName: _di
5839
5940
 
5840
5941
  // packages/plugin-protocol/dist/plugin-directory-verdict.js
5841
5942
  var KAY_PLUGIN_MANIFEST_FILENAME = "kay-plugin.json";
5842
- var KAY_PLUGIN_MANIFEST_SIZE_CAP_BYTES = 64 * 1024;
5843
5943
  var RESERVED_DIRECTORY_PLUGIN_ID_PREFIXES = ["herd.", "kay."];
5844
5944
  async function judgeKayPluginDirectory(input) {
5845
5945
  const { tree, root, dir, host } = input;
@@ -6066,6 +6166,7 @@ function referencedPaths(manifest) {
6066
6166
  refs.push({ label: `kay.ui app '${app.localId}' icon`, path: app.icon });
6067
6167
  }
6068
6168
  }
6169
+ refs.push(...declaredUiIconPaths(manifest));
6069
6170
  return refs;
6070
6171
  }
6071
6172
  function firstIssue(issues) {
@@ -6698,6 +6799,7 @@ export {
6698
6799
  ResolvedKayAppMcpServer,
6699
6800
  ResolvedKayAppTool,
6700
6801
  ResolvedKayAppWhiteboardType,
6802
+ ResolvedKayAppWorkflow,
6701
6803
  ResolvedKayUiApp,
6702
6804
  ResolvedKayUiAppEndpointCapability,
6703
6805
  ResolvedPluginAuthScheme,
@@ -6740,11 +6842,11 @@ export {
6740
6842
  ThemeContribution,
6741
6843
  ToolContribution,
6742
6844
  ToolPermission,
6743
- UiAppActivityRail,
6744
6845
  UiAppCapabilities,
6745
6846
  UiAppContribution,
6746
6847
  UiCommandContribution,
6747
6848
  UiEventSubscriptionContribution,
6849
+ UiRailEntryContribution,
6748
6850
  UiSlotContribution,
6749
6851
  UriModuleContribution,
6750
6852
  UriScheme,
@@ -6764,6 +6866,7 @@ export {
6764
6866
  WhiteboardTypeInfo,
6765
6867
  WhiteboardTypeStorage,
6766
6868
  WhiteboardValue,
6869
+ WorkflowContribution,
6767
6870
  approvalKindSchema,
6768
6871
  boundPluginDiagnosticMessage,
6769
6872
  captureArtifactProvenance,
@@ -6772,6 +6875,7 @@ export {
6772
6875
  compareClaims,
6773
6876
  compareSemver,
6774
6877
  configSectionKeysForManifest,
6878
+ declaredUiIconPaths,
6775
6879
  dedupeClaims,
6776
6880
  deriveDirectoryPluginToolName,
6777
6881
  finalizeArtifactProvenanceEnvelope,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaklabs-ai/plugin-protocol",
3
- "version": "0.29.0",
3
+ "version": "0.31.0",
4
4
  "description": "The Kay plugin manifest schema (`kay.plugin.v1`) — parse and validate a kay-plugin.json.",
5
5
  "author": "YakLabs",
6
6
  "type": "module",