@yaklabs-ai/plugin-protocol 0.46.0 → 0.48.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.46.0"
14
+ "@bonsai/plugin-protocol": "npm:@yaklabs-ai/plugin-protocol@^0.48.0"
15
15
  }
16
16
  }
17
17
  ```
@@ -1,10 +1,22 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@yaklabs-ai/plugin-protocol",
4
- "version": "0.46.0",
4
+ "version": "0.48.0",
5
5
  "target": "npm",
6
6
  "firstPartyLicense": "MIT",
7
- "bundled": [],
7
+ "bundled": [
8
+ {
9
+ "name": "@json-render/core",
10
+ "version": "0.19.0",
11
+ "license": "Apache-2.0",
12
+ "copyright": "Copyright 2025 Vercel Inc.",
13
+ "source": "https://github.com/vercel-labs/json-render/tree/0bbe6ed6394b23b5aee25320d03c9b7ac717e5b7/packages/core",
14
+ "licenseSource": "https://github.com/vercel-labs/json-render/blob/0bbe6ed6394b23b5aee25320d03c9b7ac717e5b7/LICENSE",
15
+ "upstreamCommit": "0bbe6ed6394b23b5aee25320d03c9b7ac717e5b7",
16
+ "note": "Type declarations are flattened into this package; runtime code is not bundled.",
17
+ "noticeFile": "THIRD-PARTY-NOTICES.md"
18
+ }
19
+ ],
8
20
  "external": [
9
21
  {
10
22
  "name": "zod",
@@ -1,5 +1,217 @@
1
1
  # Third-party notices
2
2
 
3
- This package bundles 0 first-party-selected component(s). The notices below are reproduced verbatim from each component's upstream MIT license source.
3
+ This package bundles 1 first-party-selected component(s). The notices below are reproduced verbatim from each component's upstream license source.
4
+
5
+ ## @json-render/core@0.19.0
6
+
7
+ - Source: https://github.com/vercel-labs/json-render/tree/0bbe6ed6394b23b5aee25320d03c9b7ac717e5b7/packages/core
8
+ - License: Apache-2.0
9
+ - License source: https://github.com/vercel-labs/json-render/blob/0bbe6ed6394b23b5aee25320d03c9b7ac717e5b7/LICENSE
10
+ - Upstream commit: 0bbe6ed6394b23b5aee25320d03c9b7ac717e5b7
11
+ - Integration: Type declarations are flattened into this package; runtime code is not bundled.
12
+
13
+ License text for the component(s) above, verbatim from the license source:
14
+
15
+ Apache License
16
+ Version 2.0, January 2004
17
+ http://www.apache.org/licenses/
18
+
19
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
20
+
21
+ 1. Definitions.
22
+
23
+ "License" shall mean the terms and conditions for use, reproduction,
24
+ and distribution as defined by Sections 1 through 9 of this document.
25
+
26
+ "Licensor" shall mean the copyright owner or entity authorized by
27
+ the copyright owner that is granting the License.
28
+
29
+ "Legal Entity" shall mean the union of the acting entity and all
30
+ other entities that control, are controlled by, or are under common
31
+ control with that entity. For the purposes of this definition,
32
+ "control" means (i) the power, direct or indirect, to cause the
33
+ direction or management of such entity, whether by contract or
34
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
35
+ outstanding shares, or (iii) beneficial ownership of such entity.
36
+
37
+ "You" (or "Your") shall mean an individual or Legal Entity
38
+ exercising permissions granted by this License.
39
+
40
+ "Source" form shall mean the preferred form for making modifications,
41
+ including but not limited to software source code, documentation
42
+ source, and configuration files.
43
+
44
+ "Object" form shall mean any form resulting from mechanical
45
+ transformation or translation of a Source form, including but
46
+ not limited to compiled object code, generated documentation,
47
+ and conversions to other media types.
48
+
49
+ "Work" shall mean the work of authorship, whether in Source or
50
+ Object form, made available under the License, as indicated by a
51
+ copyright notice that is included in or attached to the work
52
+ (an example is provided in the Appendix below).
53
+
54
+ "Derivative Works" shall mean any work, whether in Source or Object
55
+ form, that is based on (or derived from) the Work and for which the
56
+ editorial revisions, annotations, elaborations, or other modifications
57
+ represent, as a whole, an original work of authorship. For the purposes
58
+ of this License, Derivative Works shall not include works that remain
59
+ separable from, or merely link (or bind by name) to the interfaces of,
60
+ the Work and Derivative Works thereof.
61
+
62
+ "Contribution" shall mean any work of authorship, including
63
+ the original version of the Work and any modifications or additions
64
+ to that Work or Derivative Works thereof, that is intentionally
65
+ submitted to Licensor for inclusion in the Work by the copyright owner
66
+ or by an individual or Legal Entity authorized to submit on behalf of
67
+ the copyright owner. For the purposes of this definition, "submitted"
68
+ means any form of electronic, verbal, or written communication sent
69
+ to the Licensor or its representatives, including but not limited to
70
+ communication on electronic mailing lists, source code control systems,
71
+ and issue tracking systems that are managed by, or on behalf of, the
72
+ Licensor for the purpose of discussing and improving the Work, but
73
+ excluding communication that is conspicuously marked or otherwise
74
+ designated in writing by the copyright owner as "Not a Contribution."
75
+
76
+ "Contributor" shall mean Licensor and any individual or Legal Entity
77
+ on behalf of whom a Contribution has been received by Licensor and
78
+ subsequently incorporated within the Work.
79
+
80
+ 2. Grant of Copyright License. Subject to the terms and conditions of
81
+ this License, each Contributor hereby grants to You a perpetual,
82
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
83
+ copyright license to reproduce, prepare Derivative Works of,
84
+ publicly display, publicly perform, sublicense, and distribute the
85
+ Work and such Derivative Works in Source or Object form.
86
+
87
+ 3. Grant of Patent License. Subject to the terms and conditions of
88
+ this License, each Contributor hereby grants to You a perpetual,
89
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
90
+ (except as stated in this section) patent license to make, have made,
91
+ use, offer to sell, sell, import, and otherwise transfer the Work,
92
+ where such license applies only to those patent claims licensable
93
+ by such Contributor that are necessarily infringed by their
94
+ Contribution(s) alone or by combination of their Contribution(s)
95
+ with the Work to which such Contribution(s) was submitted. If You
96
+ institute patent litigation against any entity (including a
97
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
98
+ or a Contribution incorporated within the Work constitutes direct
99
+ or contributory patent infringement, then any patent licenses
100
+ granted to You under this License for that Work shall terminate
101
+ as of the date such litigation is filed.
102
+
103
+ 4. Redistribution. You may reproduce and distribute copies of the
104
+ Work or Derivative Works thereof in any medium, with or without
105
+ modifications, and in Source or Object form, provided that You
106
+ meet the following conditions:
107
+
108
+ (a) You must give any other recipients of the Work or
109
+ Derivative Works a copy of this License; and
110
+
111
+ (b) You must cause any modified files to carry prominent notices
112
+ stating that You changed the files; and
113
+
114
+ (c) You must retain, in the Source form of any Derivative Works
115
+ that You distribute, all copyright, patent, trademark, and
116
+ attribution notices from the Source form of the Work,
117
+ excluding those notices that do not pertain to any part of
118
+ the Derivative Works; and
119
+
120
+ (d) If the Work includes a "NOTICE" text file as part of its
121
+ distribution, then any Derivative Works that You distribute must
122
+ include a readable copy of the attribution notices contained
123
+ within such NOTICE file, excluding those notices that do not
124
+ pertain to any part of the Derivative Works, in at least one
125
+ of the following places: within a NOTICE text file distributed
126
+ as part of the Derivative Works; within the Source form or
127
+ documentation, if provided along with the Derivative Works; or,
128
+ within a display generated by the Derivative Works, if and
129
+ wherever such third-party notices normally appear. The contents
130
+ of the NOTICE file are for informational purposes only and
131
+ do not modify the License. You may add Your own attribution
132
+ notices within Derivative Works that You distribute, alongside
133
+ or as an addendum to the NOTICE text from the Work, provided
134
+ that such additional attribution notices cannot be construed
135
+ as modifying the License.
136
+
137
+ You may add Your own copyright statement to Your modifications and
138
+ may provide additional or different license terms and conditions
139
+ for use, reproduction, or distribution of Your modifications, or
140
+ for any such Derivative Works as a whole, provided Your use,
141
+ reproduction, and distribution of the Work otherwise complies with
142
+ the conditions stated in this License.
143
+
144
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
145
+ any Contribution intentionally submitted for inclusion in the Work
146
+ by You to the Licensor shall be under the terms and conditions of
147
+ this License, without any additional terms or conditions.
148
+ Notwithstanding the above, nothing herein shall supersede or modify
149
+ the terms of any separate license agreement you may have executed
150
+ with Licensor regarding such Contributions.
151
+
152
+ 6. Trademarks. This License does not grant permission to use the trade
153
+ names, trademarks, service marks, or product names of the Licensor,
154
+ except as required for reasonable and customary use in describing the
155
+ origin of the Work and reproducing the content of the NOTICE file.
156
+
157
+ 7. Disclaimer of Warranty. Unless required by applicable law or
158
+ agreed to in writing, Licensor provides the Work (and each
159
+ Contributor provides its Contributions) on an "AS IS" BASIS,
160
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
161
+ implied, including, without limitation, any warranties or conditions
162
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
163
+ PARTICULAR PURPOSE. You are solely responsible for determining the
164
+ appropriateness of using or redistributing the Work and assume any
165
+ risks associated with Your exercise of permissions under this License.
166
+
167
+ 8. Limitation of Liability. In no event and under no legal theory,
168
+ whether in tort (including negligence), contract, or otherwise,
169
+ unless required by applicable law (such as deliberate and grossly
170
+ negligent acts) or agreed to in writing, shall any Contributor be
171
+ liable to You for damages, including any direct, indirect, special,
172
+ incidental, or consequential damages of any character arising as a
173
+ result of this License or out of the use or inability to use the
174
+ Work (including but not limited to damages for loss of goodwill,
175
+ work stoppage, computer failure or malfunction, or any and all
176
+ other commercial damages or losses), even if such Contributor
177
+ has been advised of the possibility of such damages.
178
+
179
+ 9. Accepting Warranty or Additional Liability. While redistributing
180
+ the Work or Derivative Works thereof, You may choose to offer,
181
+ and charge a fee for, acceptance of support, warranty, indemnity,
182
+ or other liability obligations and/or rights consistent with this
183
+ License. However, in accepting such obligations, You may act only
184
+ on Your own behalf and on Your sole responsibility, not on behalf
185
+ of any other Contributor, and only if You agree to indemnify,
186
+ defend, and hold each Contributor harmless for any liability
187
+ incurred by, or claims asserted against, such Contributor by reason
188
+ of your accepting any such warranty or additional liability.
189
+
190
+ END OF TERMS AND CONDITIONS
191
+
192
+ APPENDIX: How to apply the Apache License to your work.
193
+
194
+ To apply the Apache License to your work, attach the following
195
+ boilerplate notice, with the fields enclosed by brackets "[]"
196
+ replaced with your own identifying information. (Don't include
197
+ the brackets!) The text should be enclosed in the appropriate
198
+ comment syntax for the file format. We also recommend that a
199
+ file or class name and description of purpose be included on the
200
+ same "printed page" as the copyright notice for easier
201
+ identification within third-party archives.
202
+
203
+ Copyright 2025 Vercel Inc.
204
+
205
+ Licensed under the Apache License, Version 2.0 (the "License");
206
+ you may not use this file except in compliance with the License.
207
+ You may obtain a copy of the License at
208
+
209
+ http://www.apache.org/licenses/LICENSE-2.0
210
+
211
+ Unless required by applicable law or agreed to in writing, software
212
+ distributed under the License is distributed on an "AS IS" BASIS,
213
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
214
+ See the License for the specific language governing permissions and
215
+ limitations under the License.
4
216
 
5
217
  The package's own code is licensed under the MIT License in `LICENSE`.
package/dist/index.d.ts CHANGED
@@ -11,6 +11,60 @@ export declare const AccessApprovalReview: z.ZodObject<{
11
11
 
12
12
  export declare type AccessApprovalReview = z.infer<typeof AccessApprovalReview>;
13
13
 
14
+ /**
15
+ * Action binding — maps an event to an action invocation.
16
+ *
17
+ * Used inside the `on` field of a UIElement:
18
+ * ```json
19
+ * { "on": { "press": { "action": "setState", "params": { "statePath": "/x", "value": 1 } } } }
20
+ * ```
21
+ */
22
+ declare interface ActionBinding {
23
+ /** Action name (must be in catalog) */
24
+ action: string;
25
+ /** Parameters to pass to the action handler */
26
+ params?: Record<string, DynamicValue>;
27
+ /** Confirmation dialog before execution */
28
+ confirm?: ActionConfirm;
29
+ /** Handler after successful execution */
30
+ onSuccess?: ActionOnSuccess;
31
+ /** Handler after failed execution */
32
+ onError?: ActionOnError;
33
+ /** Whether to prevent default browser behavior (e.g. navigation on links) */
34
+ preventDefault?: boolean;
35
+ }
36
+
37
+ /**
38
+ * Confirmation dialog configuration
39
+ */
40
+ declare interface ActionConfirm {
41
+ title: string;
42
+ message: string;
43
+ confirmLabel?: string;
44
+ cancelLabel?: string;
45
+ variant?: "default" | "danger";
46
+ }
47
+
48
+ /**
49
+ * Action error handler
50
+ */
51
+ declare type ActionOnError = {
52
+ set: Record<string, unknown>;
53
+ } | {
54
+ action: string;
55
+ };
56
+
57
+ /**
58
+ * Action success handler
59
+ */
60
+ declare type ActionOnSuccess = {
61
+ navigate: string;
62
+ } | {
63
+ set: Record<string, unknown>;
64
+ } | {
65
+ action: string;
66
+ };
67
+
14
68
  export declare const AdapterPlacement: z.ZodEnum<{
15
69
  "local-only": "local-only";
16
70
  anywhere: "anywhere";
@@ -76,6 +130,15 @@ export declare const AgentToolContribution: z.ZodObject<{
76
130
 
77
131
  export declare type AgentToolContribution = z.infer<typeof AgentToolContribution>;
78
132
 
133
+ /**
134
+ * AND wrapper — all child conditions must be true.
135
+ * This is the explicit form of the implicit array AND (`SingleCondition[]`).
136
+ * Unlike the implicit form, `$and` supports nested `$or` and `$and` conditions.
137
+ */
138
+ declare type AndCondition = {
139
+ $and: VisibilityCondition[];
140
+ };
141
+
79
142
  export declare const AppDataMaterializerContribution: z.ZodObject<{
80
143
  source: z.ZodString;
81
144
  }, z.core.$strict>;
@@ -1687,8 +1750,6 @@ declare namespace authoringContributionSchemas {
1687
1750
  SessionReaderContribution,
1688
1751
  UiCommandContribution,
1689
1752
  UiSlotContribution,
1690
- SettingsPanelContribution,
1691
- ResultRendererContribution,
1692
1753
  ReferenceOpenBehavior,
1693
1754
  ReferencePresentationVariant,
1694
1755
  ReferencePresentationVariants,
@@ -1699,7 +1760,6 @@ declare namespace authoringContributionSchemas {
1699
1760
  ReferencePresentationAccountLinks,
1700
1761
  ReferencePresentationWords,
1701
1762
  ReferencePresentationContribution,
1702
- RichViewContribution,
1703
1763
  KayUiAppHostCapability,
1704
1764
  UiAppCapabilities,
1705
1765
  UiRailEntryContribution,
@@ -1711,7 +1771,9 @@ declare namespace authoringContributionSchemas {
1711
1771
  CommandContribution,
1712
1772
  PluginContributionKind,
1713
1773
  canonicalContributionSchemas,
1714
- PluginCardResult
1774
+ PluginCardResult,
1775
+ PluginCardReadResult,
1776
+ PluginCardSubmitResult
1715
1777
  }
1716
1778
  }
1717
1779
 
@@ -2449,9 +2511,6 @@ declare const canonicalContributionSchemas: {
2449
2511
  bodyField: z.ZodString;
2450
2512
  }, z.core.$strict>], "kind">;
2451
2513
  valueSchema: z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>;
2452
- presentation: z.ZodOptional<z.ZodObject<{
2453
- app: z.ZodString;
2454
- }, z.core.$strict>>;
2455
2514
  }, z.core.$strict>;
2456
2515
  AppDataMaterializerContribution: z.ZodObject<{
2457
2516
  source: z.ZodString;
@@ -2663,15 +2722,6 @@ declare const canonicalContributionSchemas: {
2663
2722
  slot: z.ZodString;
2664
2723
  title: z.ZodOptional<z.ZodString>;
2665
2724
  }, z.core.$strict>;
2666
- SettingsPanelContribution: z.ZodObject<{
2667
- localId: z.ZodString;
2668
- title: z.ZodString;
2669
- configSection: z.ZodOptional<z.ZodString>;
2670
- }, z.core.$strict>;
2671
- ResultRendererContribution: z.ZodObject<{
2672
- localId: z.ZodString;
2673
- resultKinds: z.ZodArray<z.ZodString>;
2674
- }, z.core.$strict>;
2675
2725
  ReferenceOpenBehavior: z.ZodDiscriminatedUnion<[z.ZodObject<{
2676
2726
  kind: z.ZodLiteral<"working-document">;
2677
2727
  }, z.core.$strict>, z.ZodObject<{
@@ -2910,14 +2960,10 @@ declare const canonicalContributionSchemas: {
2910
2960
  }, z.core.$strict>>>;
2911
2961
  }, z.core.$strict>>;
2912
2962
  }, z.core.$strict>;
2913
- RichViewContribution: z.ZodObject<{
2914
- localId: z.ZodString;
2915
- title: z.ZodString;
2916
- route: z.ZodOptional<z.ZodString>;
2917
- }, z.core.$strict>;
2918
2963
  KayUiAppHostCapability: z.ZodEnum<{
2919
2964
  "navigation.open-session": "navigation.open-session";
2920
2965
  "sessions.create": "sessions.create";
2966
+ "models.complete": "models.complete";
2921
2967
  "artifacts.read": "artifacts.read";
2922
2968
  "artifacts.preview": "artifacts.preview";
2923
2969
  "markdown.document-view": "markdown.document-view";
@@ -2935,6 +2981,7 @@ declare const canonicalContributionSchemas: {
2935
2981
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
2936
2982
  "navigation.open-session": "navigation.open-session";
2937
2983
  "sessions.create": "sessions.create";
2984
+ "models.complete": "models.complete";
2938
2985
  "artifacts.read": "artifacts.read";
2939
2986
  "artifacts.preview": "artifacts.preview";
2940
2987
  "markdown.document-view": "markdown.document-view";
@@ -3006,6 +3053,7 @@ declare const canonicalContributionSchemas: {
3006
3053
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
3007
3054
  "navigation.open-session": "navigation.open-session";
3008
3055
  "sessions.create": "sessions.create";
3056
+ "models.complete": "models.complete";
3009
3057
  "artifacts.read": "artifacts.read";
3010
3058
  "artifacts.preview": "artifacts.preview";
3011
3059
  "markdown.document-view": "markdown.document-view";
@@ -3041,6 +3089,7 @@ declare const canonicalContributionSchemas: {
3041
3089
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
3042
3090
  "navigation.open-session": "navigation.open-session";
3043
3091
  "sessions.create": "sessions.create";
3092
+ "models.complete": "models.complete";
3044
3093
  "artifacts.read": "artifacts.read";
3045
3094
  "artifacts.preview": "artifacts.preview";
3046
3095
  "markdown.document-view": "markdown.document-view";
@@ -3101,9 +3150,8 @@ declare const canonicalContributionSchemas: {
3101
3150
  storage: "storage";
3102
3151
  uriModule: "uriModule";
3103
3152
  authService: "authService";
3104
- app: "app";
3105
3153
  command: "command";
3106
- configSection: "configSection";
3154
+ app: "app";
3107
3155
  skill: "skill";
3108
3156
  converter: "converter";
3109
3157
  artifactUriModule: "artifactUriModule";
@@ -3126,11 +3174,9 @@ declare const canonicalContributionSchemas: {
3126
3174
  mcpServer: "mcpServer";
3127
3175
  uiCommand: "uiCommand";
3128
3176
  uiSlot: "uiSlot";
3129
- settingsPanel: "settingsPanel";
3130
- resultRenderer: "resultRenderer";
3131
3177
  referencePresentation: "referencePresentation";
3132
- view: "view";
3133
3178
  theme: "theme";
3179
+ configSection: "configSection";
3134
3180
  }>;
3135
3181
  };
3136
3182
 
@@ -3262,6 +3308,34 @@ export declare function compareClaims(a: PluginCapabilityClaimV1, b: PluginCapab
3262
3308
  */
3263
3309
  export declare function compareSemver(a: string, b: string): number | undefined;
3264
3310
 
3311
+ /**
3312
+ * Shared comparison operators for visibility conditions.
3313
+ *
3314
+ * Use at most ONE comparison operator per condition. If multiple are
3315
+ * provided, only the first matching one is evaluated (precedence:
3316
+ * eq > neq > gt > gte > lt > lte). With no operator, truthiness is checked.
3317
+ *
3318
+ * `not` inverts the final result of whichever operator (or truthiness
3319
+ * check) is used.
3320
+ */
3321
+ declare type ComparisonOperators = {
3322
+ eq?: unknown;
3323
+ neq?: unknown;
3324
+ gt?: number | {
3325
+ $state: string;
3326
+ };
3327
+ gte?: number | {
3328
+ $state: string;
3329
+ };
3330
+ lt?: number | {
3331
+ $state: string;
3332
+ };
3333
+ lte?: number | {
3334
+ $state: string;
3335
+ };
3336
+ not?: true;
3337
+ };
3338
+
3265
3339
  /**
3266
3340
  * The section-key convention for every declared plugin config section.
3267
3341
  */
@@ -3482,6 +3556,16 @@ export declare const DeviceDelegationContribution: z.ZodObject<{
3482
3556
 
3483
3557
  export declare type DeviceDelegationContribution = z.infer<typeof DeviceDelegationContribution>;
3484
3558
 
3559
+ /**
3560
+ * Dynamic value - can be a literal or a `{ $state }` reference to the state model.
3561
+ *
3562
+ * Used in action params and validation args where values can either be
3563
+ * hardcoded or resolved from state at runtime.
3564
+ */
3565
+ declare type DynamicValue<T = unknown> = T | {
3566
+ $state: string;
3567
+ };
3568
+
3485
3569
  export declare const EndpointContribution: z.ZodObject<{
3486
3570
  localId: z.ZodString;
3487
3571
  displayName: z.ZodOptional<z.ZodString>;
@@ -3608,6 +3692,14 @@ export declare const HttpsUrl: z.ZodURL;
3608
3692
 
3609
3693
  export declare type HttpsUrl = z.infer<typeof HttpsUrl>;
3610
3694
 
3695
+ /**
3696
+ * A condition that resolves `$index` to the current repeat array index.
3697
+ * Only meaningful inside a `repeat` scope.
3698
+ */
3699
+ declare type IndexCondition = {
3700
+ $index: true;
3701
+ } & ComparisonOperators;
3702
+
3611
3703
  export declare const InteractionDriverContribution: z.ZodObject<{
3612
3704
  localId: z.ZodString;
3613
3705
  displayName: z.ZodOptional<z.ZodString>;
@@ -3680,6 +3772,16 @@ export declare function isSupportedSemverRange(range: string): boolean;
3680
3772
  */
3681
3773
  export declare function isUiAppSourceModule(module: string): boolean;
3682
3774
 
3775
+ /**
3776
+ * A condition that resolves `$item` to a field on the current repeat item.
3777
+ * Only meaningful inside a `repeat` scope.
3778
+ *
3779
+ * Use `""` to reference the whole item, or `"field"` for a specific field.
3780
+ */
3781
+ declare type ItemCondition = {
3782
+ $item: string;
3783
+ } & ComparisonOperators;
3784
+
3683
3785
  export declare const JsonObject: z.ZodRecord<z.ZodString, z.ZodType<JsonValue, unknown, z.core.$ZodTypeInternals<JsonValue, unknown>>>;
3684
3786
 
3685
3787
  export declare type JsonObject = z.infer<typeof JsonObject>;
@@ -4417,8 +4519,12 @@ export declare const KAY_PLUGIN_PROTOCOL_VERSION: "kay.plugin.v1";
4417
4519
  *
4418
4520
  * 0.46.0 adds `@bonsai/plugin-sdk/artifact-provenance`, so a plugin shipped as files can finalize
4419
4521
  * and read the provenance the host captured. Additive: a plugin that imports it declares ^0.46.0.
4522
+ *
4523
+ * 0.47.0 adds card layouts and builders; successful card submits now require a summary.
4524
+ *
4525
+ * 0.48.0 adds the models.complete UI capability.
4420
4526
  */
4421
- export declare const KAY_PLUGIN_SDK_VERSION: "0.46.0";
4527
+ export declare const KAY_PLUGIN_SDK_VERSION: "0.48.0";
4422
4528
 
4423
4529
  export declare const KAY_PLUGIN_TARGET_NAMES: readonly ["kay.agent", "kay.app", "kay.ui"];
4424
4530
 
@@ -4961,9 +5067,6 @@ export declare const KayAppTargetManifest: z.ZodObject<{
4961
5067
  bodyField: z.ZodString;
4962
5068
  }, z.core.$strict>], "kind">;
4963
5069
  valueSchema: z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>;
4964
- presentation: z.ZodOptional<z.ZodObject<{
4965
- app: z.ZodString;
4966
- }, z.core.$strict>>;
4967
5070
  }, z.core.$strict>>>;
4968
5071
  approvalTypes: z.ZodOptional<z.ZodArray<z.ZodObject<{
4969
5072
  localId: z.ZodString;
@@ -5763,9 +5866,6 @@ export declare const KayPluginManifestV1: z.ZodObject<{
5763
5866
  bodyField: z.ZodString;
5764
5867
  }, z.core.$strict>], "kind">;
5765
5868
  valueSchema: z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>;
5766
- presentation: z.ZodOptional<z.ZodObject<{
5767
- app: z.ZodString;
5768
- }, z.core.$strict>>;
5769
5869
  }, z.core.$strict>>>;
5770
5870
  approvalTypes: z.ZodOptional<z.ZodArray<z.ZodObject<{
5771
5871
  localId: z.ZodString;
@@ -5957,15 +6057,6 @@ export declare const KayPluginManifestV1: z.ZodObject<{
5957
6057
  slot: z.ZodString;
5958
6058
  title: z.ZodOptional<z.ZodString>;
5959
6059
  }, z.core.$strict>>>;
5960
- settingsPanels: z.ZodOptional<z.ZodArray<z.ZodObject<{
5961
- localId: z.ZodString;
5962
- title: z.ZodString;
5963
- configSection: z.ZodOptional<z.ZodString>;
5964
- }, z.core.$strict>>>;
5965
- resultRenderers: z.ZodOptional<z.ZodArray<z.ZodObject<{
5966
- localId: z.ZodString;
5967
- resultKinds: z.ZodArray<z.ZodString>;
5968
- }, z.core.$strict>>>;
5969
6060
  referencePresentations: z.ZodOptional<z.ZodArray<z.ZodObject<{
5970
6061
  localId: z.ZodString;
5971
6062
  uriModule: z.ZodOptional<z.ZodString>;
@@ -6083,11 +6174,6 @@ export declare const KayPluginManifestV1: z.ZodObject<{
6083
6174
  }, z.core.$strict>>>;
6084
6175
  }, z.core.$strict>>;
6085
6176
  }, z.core.$strict>>>;
6086
- views: z.ZodOptional<z.ZodArray<z.ZodObject<{
6087
- localId: z.ZodString;
6088
- title: z.ZodString;
6089
- route: z.ZodOptional<z.ZodString>;
6090
- }, z.core.$strict>>>;
6091
6177
  apps: z.ZodOptional<z.ZodArray<z.ZodObject<{
6092
6178
  localId: z.ZodString;
6093
6179
  displayName: z.ZodString;
@@ -6109,6 +6195,7 @@ export declare const KayPluginManifestV1: z.ZodObject<{
6109
6195
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6110
6196
  "navigation.open-session": "navigation.open-session";
6111
6197
  "sessions.create": "sessions.create";
6198
+ "models.complete": "models.complete";
6112
6199
  "artifacts.read": "artifacts.read";
6113
6200
  "artifacts.preview": "artifacts.preview";
6114
6201
  "markdown.document-view": "markdown.document-view";
@@ -6144,6 +6231,7 @@ export declare const KayPluginManifestV1: z.ZodObject<{
6144
6231
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6145
6232
  "navigation.open-session": "navigation.open-session";
6146
6233
  "sessions.create": "sessions.create";
6234
+ "models.complete": "models.complete";
6147
6235
  "artifacts.read": "artifacts.read";
6148
6236
  "artifacts.preview": "artifacts.preview";
6149
6237
  "markdown.document-view": "markdown.document-view";
@@ -7014,6 +7102,7 @@ export declare interface KayPluginTreeReader {
7014
7102
  export declare const KayUiAppHostCapability: z.ZodEnum<{
7015
7103
  "navigation.open-session": "navigation.open-session";
7016
7104
  "sessions.create": "sessions.create";
7105
+ "models.complete": "models.complete";
7017
7106
  "artifacts.read": "artifacts.read";
7018
7107
  "artifacts.preview": "artifacts.preview";
7019
7108
  "markdown.document-view": "markdown.document-view";
@@ -7149,15 +7238,6 @@ export declare const KayUiTargetManifest: z.ZodObject<{
7149
7238
  slot: z.ZodString;
7150
7239
  title: z.ZodOptional<z.ZodString>;
7151
7240
  }, z.core.$strict>>>;
7152
- settingsPanels: z.ZodOptional<z.ZodArray<z.ZodObject<{
7153
- localId: z.ZodString;
7154
- title: z.ZodString;
7155
- configSection: z.ZodOptional<z.ZodString>;
7156
- }, z.core.$strict>>>;
7157
- resultRenderers: z.ZodOptional<z.ZodArray<z.ZodObject<{
7158
- localId: z.ZodString;
7159
- resultKinds: z.ZodArray<z.ZodString>;
7160
- }, z.core.$strict>>>;
7161
7241
  referencePresentations: z.ZodOptional<z.ZodArray<z.ZodObject<{
7162
7242
  localId: z.ZodString;
7163
7243
  uriModule: z.ZodOptional<z.ZodString>;
@@ -7275,11 +7355,6 @@ export declare const KayUiTargetManifest: z.ZodObject<{
7275
7355
  }, z.core.$strict>>>;
7276
7356
  }, z.core.$strict>>;
7277
7357
  }, z.core.$strict>>>;
7278
- views: z.ZodOptional<z.ZodArray<z.ZodObject<{
7279
- localId: z.ZodString;
7280
- title: z.ZodString;
7281
- route: z.ZodOptional<z.ZodString>;
7282
- }, z.core.$strict>>>;
7283
7358
  apps: z.ZodOptional<z.ZodArray<z.ZodObject<{
7284
7359
  localId: z.ZodString;
7285
7360
  displayName: z.ZodString;
@@ -7301,6 +7376,7 @@ export declare const KayUiTargetManifest: z.ZodObject<{
7301
7376
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
7302
7377
  "navigation.open-session": "navigation.open-session";
7303
7378
  "sessions.create": "sessions.create";
7379
+ "models.complete": "models.complete";
7304
7380
  "artifacts.read": "artifacts.read";
7305
7381
  "artifacts.preview": "artifacts.preview";
7306
7382
  "markdown.document-view": "markdown.document-view";
@@ -7336,6 +7412,7 @@ export declare const KayUiTargetManifest: z.ZodObject<{
7336
7412
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
7337
7413
  "navigation.open-session": "navigation.open-session";
7338
7414
  "sessions.create": "sessions.create";
7415
+ "models.complete": "models.complete";
7339
7416
  "artifacts.read": "artifacts.read";
7340
7417
  "artifacts.preview": "artifacts.preview";
7341
7418
  "markdown.document-view": "markdown.document-view";
@@ -7539,6 +7616,13 @@ export declare interface OperationCaptureInput {
7539
7616
  readonly causes?: readonly ArtifactProvenanceCause[];
7540
7617
  }
7541
7618
 
7619
+ /**
7620
+ * OR wrapper — at least one child condition must be true.
7621
+ */
7622
+ declare type OrCondition = {
7623
+ $or: VisibilityCondition[];
7624
+ };
7625
+
7542
7626
  export declare const PackageAssetPath: z.ZodString;
7543
7627
 
7544
7628
  export declare type PackageAssetPath = z.infer<typeof PackageAssetPath>;
@@ -9902,6 +9986,12 @@ export declare const PluginCardContribution: z.ZodObject<{
9902
9986
 
9903
9987
  export declare type PluginCardContribution = z.infer<typeof PluginCardContribution>;
9904
9988
 
9989
+ export declare type PluginCardReadResult<T> = PluginCardResult<T> | {
9990
+ readonly ok: true;
9991
+ readonly presentation: "layout";
9992
+ readonly layout: Spec;
9993
+ };
9994
+
9905
9995
  export declare type PluginCardResult<T> = {
9906
9996
  readonly ok: true;
9907
9997
  readonly data: T;
@@ -9911,6 +10001,14 @@ export declare type PluginCardResult<T> = {
9911
10001
  readonly message: string;
9912
10002
  };
9913
10003
 
10004
+ export declare type PluginCardSubmitResult<T> = {
10005
+ readonly ok: true;
10006
+ readonly data: T;
10007
+ readonly summary: string;
10008
+ } | Extract<PluginCardResult<T>, {
10009
+ readonly ok: false;
10010
+ }>;
10011
+
9914
10012
  export declare const PluginCompatibilityManifest: z.ZodObject<{
9915
10013
  supportedProtocols: z.ZodOptional<z.ZodArray<z.ZodLiteral<"kay.plugin.v1">>>;
9916
10014
  minKayVersion: z.ZodOptional<z.ZodString>;
@@ -9964,9 +10062,8 @@ export declare const PluginContributionKind: z.ZodEnum<{
9964
10062
  storage: "storage";
9965
10063
  uriModule: "uriModule";
9966
10064
  authService: "authService";
9967
- app: "app";
9968
10065
  command: "command";
9969
- configSection: "configSection";
10066
+ app: "app";
9970
10067
  skill: "skill";
9971
10068
  converter: "converter";
9972
10069
  artifactUriModule: "artifactUriModule";
@@ -9989,11 +10086,9 @@ export declare const PluginContributionKind: z.ZodEnum<{
9989
10086
  mcpServer: "mcpServer";
9990
10087
  uiCommand: "uiCommand";
9991
10088
  uiSlot: "uiSlot";
9992
- settingsPanel: "settingsPanel";
9993
- resultRenderer: "resultRenderer";
9994
10089
  referencePresentation: "referencePresentation";
9995
- view: "view";
9996
10090
  theme: "theme";
10091
+ configSection: "configSection";
9997
10092
  }>;
9998
10093
 
9999
10094
  export declare type PluginContributionKind = z.infer<typeof PluginContributionKind>;
@@ -11876,9 +11971,6 @@ export declare const ResolvedKayAppWhiteboardType: z.ZodObject<{
11876
11971
  bodyField: z.ZodString;
11877
11972
  }, z.core.$strict>], "kind">;
11878
11973
  valueSchema: z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>;
11879
- presentation: z.ZodOptional<z.ZodObject<{
11880
- app: z.ZodString;
11881
- }, z.core.$strict>>;
11882
11974
  }, z.core.$strict>;
11883
11975
 
11884
11976
  export declare type ResolvedKayAppWhiteboardType = z.infer<typeof ResolvedKayAppWhiteboardType>;
@@ -11923,6 +12015,7 @@ export declare const ResolvedKayUiApp: z.ZodObject<{
11923
12015
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
11924
12016
  "navigation.open-session": "navigation.open-session";
11925
12017
  "sessions.create": "sessions.create";
12018
+ "models.complete": "models.complete";
11926
12019
  "artifacts.read": "artifacts.read";
11927
12020
  "artifacts.preview": "artifacts.preview";
11928
12021
  "markdown.document-view": "markdown.document-view";
@@ -12292,9 +12385,8 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
12292
12385
  storage: "storage";
12293
12386
  uriModule: "uriModule";
12294
12387
  authService: "authService";
12295
- app: "app";
12296
12388
  command: "command";
12297
- configSection: "configSection";
12389
+ app: "app";
12298
12390
  skill: "skill";
12299
12391
  converter: "converter";
12300
12392
  artifactUriModule: "artifactUriModule";
@@ -12317,11 +12409,9 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
12317
12409
  mcpServer: "mcpServer";
12318
12410
  uiCommand: "uiCommand";
12319
12411
  uiSlot: "uiSlot";
12320
- settingsPanel: "settingsPanel";
12321
- resultRenderer: "resultRenderer";
12322
12412
  referencePresentation: "referencePresentation";
12323
- view: "view";
12324
12413
  theme: "theme";
12414
+ configSection: "configSection";
12325
12415
  }>;
12326
12416
  localId: z.ZodString;
12327
12417
  globalId: z.ZodString;
@@ -13174,9 +13264,6 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
13174
13264
  bodyField: z.ZodString;
13175
13265
  }, z.core.$strict>], "kind">;
13176
13266
  valueSchema: z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>;
13177
- presentation: z.ZodOptional<z.ZodObject<{
13178
- app: z.ZodString;
13179
- }, z.core.$strict>>;
13180
13267
  }, z.core.$strict>>>;
13181
13268
  kayAppMcpServers: z.ZodOptional<z.ZodArray<z.ZodObject<{
13182
13269
  name: z.ZodString;
@@ -13341,6 +13428,7 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
13341
13428
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
13342
13429
  "navigation.open-session": "navigation.open-session";
13343
13430
  "sessions.create": "sessions.create";
13431
+ "models.complete": "models.complete";
13344
13432
  "artifacts.read": "artifacts.read";
13345
13433
  "artifacts.preview": "artifacts.preview";
13346
13434
  "markdown.document-view": "markdown.document-view";
@@ -13373,9 +13461,8 @@ export declare const ResolvedPluginContributionId: z.ZodObject<{
13373
13461
  storage: "storage";
13374
13462
  uriModule: "uriModule";
13375
13463
  authService: "authService";
13376
- app: "app";
13377
13464
  command: "command";
13378
- configSection: "configSection";
13465
+ app: "app";
13379
13466
  skill: "skill";
13380
13467
  converter: "converter";
13381
13468
  artifactUriModule: "artifactUriModule";
@@ -13398,11 +13485,9 @@ export declare const ResolvedPluginContributionId: z.ZodObject<{
13398
13485
  mcpServer: "mcpServer";
13399
13486
  uiCommand: "uiCommand";
13400
13487
  uiSlot: "uiSlot";
13401
- settingsPanel: "settingsPanel";
13402
- resultRenderer: "resultRenderer";
13403
13488
  referencePresentation: "referencePresentation";
13404
- view: "view";
13405
13489
  theme: "theme";
13490
+ configSection: "configSection";
13406
13491
  }>;
13407
13492
  localId: z.ZodString;
13408
13493
  globalId: z.ZodString;
@@ -14001,13 +14086,6 @@ export declare const ResourceContribution: z.ZodObject<{
14001
14086
 
14002
14087
  export declare type ResourceContribution = z.infer<typeof ResourceContribution>;
14003
14088
 
14004
- export declare const ResultRendererContribution: z.ZodObject<{
14005
- localId: z.ZodString;
14006
- resultKinds: z.ZodArray<z.ZodString>;
14007
- }, z.core.$strict>;
14008
-
14009
- export declare type ResultRendererContribution = z.infer<typeof ResultRendererContribution>;
14010
-
14011
14089
  /**
14012
14090
  * What a plugin declares about the host it can run under.
14013
14091
  *
@@ -14074,14 +14152,6 @@ export declare interface RetiredPermissionAsks {
14074
14152
  */
14075
14153
  export declare function retiredPermissionAsksIn(rawManifest: unknown): readonly RetiredPermissionAsks[];
14076
14154
 
14077
- export declare const RichViewContribution: z.ZodObject<{
14078
- localId: z.ZodString;
14079
- title: z.ZodString;
14080
- route: z.ZodOptional<z.ZodString>;
14081
- }, z.core.$strict>;
14082
-
14083
- export declare type RichViewContribution = z.infer<typeof RichViewContribution>;
14084
-
14085
14155
  /** Whether a `where` holds for one row. A field the row doesn't have is absent, not unknown. */
14086
14156
  export declare function rowMatchesWhere(where: Where, row: Readonly<Record<string, unknown>>): boolean;
14087
14157
 
@@ -14522,18 +14592,13 @@ export declare const SessionRelationship: z.ZodDiscriminatedUnion<[z.ZodObject<{
14522
14592
 
14523
14593
  export declare type SessionRelationship = z.infer<typeof SessionRelationship>;
14524
14594
 
14525
- export declare const SettingsPanelContribution: z.ZodObject<{
14526
- localId: z.ZodString;
14527
- title: z.ZodString;
14528
- configSection: z.ZodOptional<z.ZodString>;
14529
- }, z.core.$strict>;
14530
-
14531
- export declare type SettingsPanelContribution = z.infer<typeof SettingsPanelContribution>;
14532
-
14533
14595
  export declare const SignedInStatusCode: z.ZodNumber;
14534
14596
 
14535
14597
  export declare type SignedInStatusCode = z.infer<typeof SignedInStatusCode>;
14536
14598
 
14599
+ /** A single visibility condition (state, item, or index). */
14600
+ declare type SingleCondition = StateCondition | ItemCondition | IndexCondition;
14601
+
14537
14602
  export declare const SkillContribution: z.ZodObject<{
14538
14603
  localId: z.ZodString;
14539
14604
  displayName: z.ZodOptional<z.ZodString>;
@@ -14581,6 +14646,31 @@ export declare type SkillSuggestionEvidenceRef = {
14581
14646
  readonly raw: string;
14582
14647
  };
14583
14648
 
14649
+ /**
14650
+ * Flat UI tree structure (optimized for LLM generation)
14651
+ */
14652
+ declare interface Spec {
14653
+ /** Root element key */
14654
+ root: string;
14655
+ /** Flat map of elements by key */
14656
+ elements: Record<string, UIElement>;
14657
+ /** Optional initial state to seed the state model.
14658
+ * Components using statePath will read from / write to this state. */
14659
+ state?: Record<string, unknown>;
14660
+ }
14661
+
14662
+ /**
14663
+ * A single state-based condition.
14664
+ * Resolves `$state` to a value from the state model, then applies the operator.
14665
+ * Without an operator, checks truthiness.
14666
+ *
14667
+ * When `not` is `true`, the result of the entire condition is inverted.
14668
+ * For example `{ $state: "/count", gt: 5, not: true }` means "NOT greater than 5".
14669
+ */
14670
+ declare type StateCondition = {
14671
+ $state: string;
14672
+ } & ComparisonOperators;
14673
+
14584
14674
  export declare const StorageGrantRequest: z.ZodObject<{
14585
14675
  kind: z.ZodEnum<{
14586
14676
  sqlite: "sqlite";
@@ -15017,6 +15107,7 @@ export declare const UiAppCapabilities: z.ZodObject<{
15017
15107
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
15018
15108
  "navigation.open-session": "navigation.open-session";
15019
15109
  "sessions.create": "sessions.create";
15110
+ "models.complete": "models.complete";
15020
15111
  "artifacts.read": "artifacts.read";
15021
15112
  "artifacts.preview": "artifacts.preview";
15022
15113
  "markdown.document-view": "markdown.document-view";
@@ -15055,6 +15146,7 @@ export declare const UiAppContribution: z.ZodObject<{
15055
15146
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
15056
15147
  "navigation.open-session": "navigation.open-session";
15057
15148
  "sessions.create": "sessions.create";
15149
+ "models.complete": "models.complete";
15058
15150
  "artifacts.read": "artifacts.read";
15059
15151
  "artifacts.preview": "artifacts.preview";
15060
15152
  "markdown.document-view": "markdown.document-view";
@@ -15090,6 +15182,7 @@ export declare const UiAppContribution: z.ZodObject<{
15090
15182
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
15091
15183
  "navigation.open-session": "navigation.open-session";
15092
15184
  "sessions.create": "sessions.create";
15185
+ "models.complete": "models.complete";
15093
15186
  "artifacts.read": "artifacts.read";
15094
15187
  "artifacts.preview": "artifacts.preview";
15095
15188
  "markdown.document-view": "markdown.document-view";
@@ -15128,6 +15221,33 @@ export declare type UiCommandContribution = z.infer<typeof UiCommandContribution
15128
15221
 
15129
15222
  declare type UiContributes = NonNullable<KayUiTargetManifest["contributes"]>;
15130
15223
 
15224
+ /**
15225
+ * Base UI element structure for v2
15226
+ */
15227
+ declare interface UIElement<T extends string = string, P = Record<string, unknown>> {
15228
+ /** Component type from the catalog */
15229
+ type: T;
15230
+ /** Component props */
15231
+ props: P;
15232
+ /** Child element keys (flat structure) */
15233
+ children?: string[];
15234
+ /** Visibility condition */
15235
+ visible?: VisibilityCondition;
15236
+ /** Event bindings — maps event names to action bindings */
15237
+ on?: Record<string, ActionBinding | ActionBinding[]>;
15238
+ /** Repeat children once per item in a state array */
15239
+ repeat?: {
15240
+ statePath: string;
15241
+ key?: string;
15242
+ };
15243
+ /**
15244
+ * State watchers — maps JSON Pointer state paths to action bindings.
15245
+ * When the value at a watched path changes, the bound actions fire.
15246
+ * Useful for cascading dependencies (e.g. country → city option loading).
15247
+ */
15248
+ watch?: Record<string, ActionBinding | ActionBinding[]>;
15249
+ }
15250
+
15131
15251
  export declare const UiEventSubscriptionContribution: z.ZodObject<{
15132
15252
  localId: z.ZodString;
15133
15253
  event: z.ZodString;
@@ -15538,6 +15658,16 @@ export declare function validateKayUiEventSubscription(event: string, definedPlu
15538
15658
  readonly message: string;
15539
15659
  };
15540
15660
 
15661
+ /**
15662
+ * Visibility condition types.
15663
+ * - `boolean` — always/never
15664
+ * - `SingleCondition` — single condition (`$state`, `$item`, or `$index`)
15665
+ * - `SingleCondition[]` — implicit AND (all must be true)
15666
+ * - `AndCondition` — `{ $and: [...] }`, explicit AND (all must be true)
15667
+ * - `OrCondition` — `{ $or: [...] }`, at least one must be true
15668
+ */
15669
+ declare type VisibilityCondition = boolean | SingleCondition | SingleCondition[] | AndCondition | OrCondition;
15670
+
15541
15671
  /**
15542
15672
  * The one element a CSRF token is read from, as a COMPOUND SIMPLE selector: an optional tag
15543
15673
  * followed by any number of `#id` and `[attr]` / `[attr=value]` predicates, all on that one
@@ -15804,9 +15934,6 @@ export declare const WhiteboardTypeContribution: z.ZodObject<{
15804
15934
  bodyField: z.ZodString;
15805
15935
  }, z.core.$strict>], "kind">;
15806
15936
  valueSchema: z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>;
15807
- presentation: z.ZodOptional<z.ZodObject<{
15808
- app: z.ZodString;
15809
- }, z.core.$strict>>;
15810
15937
  }, z.core.$strict>;
15811
15938
 
15812
15939
  export declare type WhiteboardTypeContribution = z.infer<typeof WhiteboardTypeContribution>;
@@ -15816,9 +15943,6 @@ export declare const WhiteboardTypeInfo: z.ZodObject<{
15816
15943
  displayName: z.ZodString;
15817
15944
  schemaVersion: z.ZodNumber;
15818
15945
  available: z.ZodBoolean;
15819
- presentation: z.ZodOptional<z.ZodObject<{
15820
- app: z.ZodString;
15821
- }, z.core.$strict>>;
15822
15946
  }, z.core.$strict>;
15823
15947
 
15824
15948
  export declare type WhiteboardTypeInfo = Readonly<z.infer<typeof WhiteboardTypeInfo>>;
package/dist/index.js CHANGED
@@ -260,13 +260,13 @@ var JsonSchema = z4.record(z4.string(), JsonValue);
260
260
  var KAY_PLUGIN_MANIFEST_SIZE_CAP_BYTES = 1024 * 1024;
261
261
  var KAY_PLUGIN_PROTOCOL_VERSION = "kay.plugin.v1";
262
262
  var KAY_PLUGIN_PROTOCOL_PACKAGE_NAME = "@bonsai/plugin-protocol";
263
- var KAY_PLUGIN_SDK_VERSION = "0.46.0";
263
+ var KAY_PLUGIN_SDK_VERSION = "0.48.0";
264
264
  var KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS = [
265
+ "0.47.0",
265
266
  "0.42.0",
266
267
  "0.42.1",
267
268
  "0.43.0",
268
- "0.44.0",
269
- "0.45.0"
269
+ "0.44.0"
270
270
  ];
271
271
  var KAY_PLUGIN_TARGET_NAMES = [
272
272
  "kay.agent",
@@ -2786,11 +2786,8 @@ __export(contributions_exports, {
2786
2786
  ReferencePresentationVariants: () => ReferencePresentationVariants,
2787
2787
  ReferencePresentationWords: () => ReferencePresentationWords,
2788
2788
  ResourceContribution: () => ResourceContribution,
2789
- ResultRendererContribution: () => ResultRendererContribution,
2790
- RichViewContribution: () => RichViewContribution,
2791
2789
  SearchProviderContribution: () => SearchProviderContribution,
2792
2790
  SessionReaderContribution: () => SessionReaderContribution,
2793
- SettingsPanelContribution: () => SettingsPanelContribution,
2794
2791
  SkillContribution: () => SkillContribution,
2795
2792
  ThemeContribution: () => ThemeContribution,
2796
2793
  ToolContribution: () => ToolContribution,
@@ -3644,10 +3641,7 @@ function createContributionsSchemas(canonical) {
3644
3641
  displayName: NonEmptyString3,
3645
3642
  schemaVersion: z12.number().int().positive(),
3646
3643
  storage: WhiteboardTypeStorage2,
3647
- valueSchema: JsonSchema,
3648
- presentation: z12.strictObject({
3649
- app: LocalContributionId2
3650
- }).optional()
3644
+ valueSchema: JsonSchema
3651
3645
  });
3652
3646
  const AppDataMaterializerContribution2 = z12.strictObject({
3653
3647
  source: LocalContributionId2
@@ -3959,15 +3953,6 @@ function createContributionsSchemas(canonical) {
3959
3953
  slot: NonEmptyString3,
3960
3954
  title: NonEmptyString3.optional()
3961
3955
  });
3962
- const SettingsPanelContribution2 = z12.strictObject({
3963
- localId: LocalContributionId2,
3964
- title: NonEmptyString3,
3965
- configSection: NonEmptyString3.optional()
3966
- });
3967
- const ResultRendererContribution2 = z12.strictObject({
3968
- localId: LocalContributionId2,
3969
- resultKinds: z12.array(NonEmptyString3).min(1)
3970
- });
3971
3956
  const NOT_LOCAL_APP_SCHEMES = /* @__PURE__ */ new Set([
3972
3957
  "http",
3973
3958
  "https",
@@ -4175,16 +4160,12 @@ function createContributionsSchemas(canonical) {
4175
4160
  });
4176
4161
  }
4177
4162
  });
4178
- const RichViewContribution2 = z12.strictObject({
4179
- localId: LocalContributionId2,
4180
- title: NonEmptyString3,
4181
- route: NonEmptyString3.optional()
4182
- });
4183
4163
  const KayUiAppHostCapability2 = z12.enum([
4184
4164
  "navigation.open-session",
4185
4165
  // Lets `navigation.openChat` create a blank chat (no message, no model
4186
4166
  // turn) when no session id is given. It never sends anything.
4187
4167
  "sessions.create",
4168
+ "models.complete",
4188
4169
  "artifacts.read",
4189
4170
  "artifacts.preview",
4190
4171
  // Draws Bonsai's markdown document view in the app's page (`BonsaiMarkdownDocumentView`).
@@ -4358,10 +4339,7 @@ function createContributionsSchemas(canonical) {
4358
4339
  "mcpServer",
4359
4340
  "uiCommand",
4360
4341
  "uiSlot",
4361
- "settingsPanel",
4362
- "resultRenderer",
4363
4342
  "referencePresentation",
4364
- "view",
4365
4343
  "app",
4366
4344
  "theme",
4367
4345
  "authService",
@@ -4410,8 +4388,6 @@ function createContributionsSchemas(canonical) {
4410
4388
  SessionReaderContribution: SessionReaderContribution2,
4411
4389
  UiCommandContribution: UiCommandContribution2,
4412
4390
  UiSlotContribution: UiSlotContribution2,
4413
- SettingsPanelContribution: SettingsPanelContribution2,
4414
- ResultRendererContribution: ResultRendererContribution2,
4415
4391
  ReferenceOpenBehavior: ReferenceOpenBehavior2,
4416
4392
  ReferencePresentationVariant: ReferencePresentationVariant2,
4417
4393
  ReferencePresentationVariants: ReferencePresentationVariants2,
@@ -4422,7 +4398,6 @@ function createContributionsSchemas(canonical) {
4422
4398
  ReferencePresentationAccountLinks: ReferencePresentationAccountLinks2,
4423
4399
  ReferencePresentationWords: ReferencePresentationWords2,
4424
4400
  ReferencePresentationContribution: ReferencePresentationContribution2,
4425
- RichViewContribution: RichViewContribution2,
4426
4401
  KayUiAppHostCapability: KayUiAppHostCapability2,
4427
4402
  UiAppCapabilities: UiAppCapabilities2,
4428
4403
  UiRailEntryContribution: UiRailEntryContribution2,
@@ -4435,7 +4410,7 @@ function createContributionsSchemas(canonical) {
4435
4410
  PluginContributionKind: PluginContributionKind2
4436
4411
  };
4437
4412
  }
4438
- 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, PluginCardContribution, WorkflowContribution, McpServerUrl, McpServerAuthMode, McpServerContribution, McpServerContributions, AppEventSubscription, ContextContributorContribution, PluginEventDefinitionContribution, PluginNotificationRuleContribution, PluginProductEventContribution, UiEventSubscriptionContribution, DeviceDelegationContribution, SessionReaderContribution, UiCommandContribution, UiSlotContribution, SettingsPanelContribution, ResultRendererContribution, ReferenceOpenBehavior, ReferencePresentationVariant, ReferencePresentationVariants, ReferencePresentationUriPattern, ReferencePresentationUrlClaim, ReferencePresentationTooltip, ReferencePresentationAddress, ReferencePresentationAccountLinks, ReferencePresentationWords, ReferencePresentationContribution, RichViewContribution, KayUiAppHostCapability, UiAppCapabilities, UiRailEntryContribution, UiToastPreviewContribution, UiPageContribution, UiAppContribution, ThemeContribution, CommandHandler, CommandContribution, PluginContributionKind } = createContributionsSchemas(false);
4413
+ 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, PluginCardContribution, WorkflowContribution, McpServerUrl, McpServerAuthMode, McpServerContribution, McpServerContributions, AppEventSubscription, ContextContributorContribution, PluginEventDefinitionContribution, PluginNotificationRuleContribution, PluginProductEventContribution, UiEventSubscriptionContribution, DeviceDelegationContribution, SessionReaderContribution, UiCommandContribution, UiSlotContribution, ReferenceOpenBehavior, ReferencePresentationVariant, ReferencePresentationVariants, ReferencePresentationUriPattern, ReferencePresentationUrlClaim, ReferencePresentationTooltip, ReferencePresentationAddress, ReferencePresentationAccountLinks, ReferencePresentationWords, ReferencePresentationContribution, KayUiAppHostCapability, UiAppCapabilities, UiRailEntryContribution, UiToastPreviewContribution, UiPageContribution, UiAppContribution, ThemeContribution, CommandHandler, CommandContribution, PluginContributionKind } = createContributionsSchemas(false);
4439
4414
  var canonicalContributionSchemas = createContributionsSchemas(true);
4440
4415
  var UI_APP_SOURCE_MODULE = /\.(?:tsx|ts|jsx)$/;
4441
4416
  function isUiAppSourceModule(module) {
@@ -4516,7 +4491,7 @@ var KAY_UI_NATIVE_EVENT_SUBSCRIPTIONS = [
4516
4491
  var KAY_UI_NATIVE_EVENT_ALLOWLIST = new Set(KAY_UI_NATIVE_EVENT_SUBSCRIPTIONS);
4517
4492
  var RETIRED_COMPATIBILITY_KEYS = ["policy"];
4518
4493
  function createManifestSchemas(canonical) {
4519
- const { AgentRenderContribution: AgentRenderContribution2, ApprovalTypeContribution: ApprovalTypeContribution2, WorkflowContribution: WorkflowContribution2, PluginCardContribution: PluginCardContribution2, 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, PluginProductEventContribution: PluginProductEventContribution2, 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, UiToastPreviewContribution: UiToastPreviewContribution2, UiPageContribution: UiPageContribution2, UiEventSubscriptionContribution: UiEventSubscriptionContribution2, UiSlotContribution: UiSlotContribution2, UriModuleContribution: UriModuleContribution2, WhiteboardTypeContribution: WhiteboardTypeContribution2 } = canonical ? canonicalContributionSchemas : contributions_exports;
4494
+ const { AgentRenderContribution: AgentRenderContribution2, ApprovalTypeContribution: ApprovalTypeContribution2, WorkflowContribution: WorkflowContribution2, PluginCardContribution: PluginCardContribution2, 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, PluginProductEventContribution: PluginProductEventContribution2, ResourceContribution: ResourceContribution2, ReferencePresentationContribution: ReferencePresentationContribution2, PluginSkillSourceDeclaration: PluginSkillSourceDeclaration2, InteractionDriverContribution: InteractionDriverContribution2, SearchProviderContribution: SearchProviderContribution2, SkillContribution: SkillContribution2, ThemeContribution: ThemeContribution2, AgentToolContribution: AgentToolContribution2, ToolContribution: ToolContribution2, UiCommandContribution: UiCommandContribution2, UiAppContribution: UiAppContribution2, UiRailEntryContribution: UiRailEntryContribution2, UiToastPreviewContribution: UiToastPreviewContribution2, UiPageContribution: UiPageContribution2, UiEventSubscriptionContribution: UiEventSubscriptionContribution2, UiSlotContribution: UiSlotContribution2, UriModuleContribution: UriModuleContribution2, WhiteboardTypeContribution: WhiteboardTypeContribution2 } = canonical ? canonicalContributionSchemas : contributions_exports;
4520
4495
  const { HttpsUrl: HttpsUrl2, LocalContributionId: LocalContributionId2, NonEmptyString: NonEmptyString3, PackageAssetPath: PackageAssetPath2, PluginId: PluginId2, PluginNamespace: PluginNamespace2, RegistrableDomain: RegistrableDomain2, SignedInStatusCode: SignedInStatusCode2, TargetEntrypoint: TargetEntrypoint2 } = canonical ? canonicalCommonSchemas : common_exports;
4521
4496
  const { PluginPermissionManifest: PluginPermissionManifest2 } = canonical ? canonicalPermissionSchemas : permissions_exports;
4522
4497
  const KayAgentTargetManifest2 = z13.strictObject({
@@ -4635,10 +4610,7 @@ function createManifestSchemas(canonical) {
4635
4610
  contributes: z13.strictObject({
4636
4611
  commands: z13.array(UiCommandContribution2).optional(),
4637
4612
  slots: z13.array(UiSlotContribution2).optional(),
4638
- settingsPanels: z13.array(SettingsPanelContribution2).optional(),
4639
- resultRenderers: z13.array(ResultRendererContribution2).optional(),
4640
4613
  referencePresentations: z13.array(ReferencePresentationContribution2).optional(),
4641
- views: z13.array(RichViewContribution2).optional(),
4642
4614
  apps: z13.array(UiAppContribution2).optional(),
4643
4615
  railEntries: z13.array(UiRailEntryContribution2).optional(),
4644
4616
  toastPreviews: z13.array(UiToastPreviewContribution2).optional(),
@@ -5159,24 +5131,6 @@ function createManifestSchemas(canonical) {
5159
5131
  }
5160
5132
  reportDuplicateLocalIds(ctx, ["targets", "kay", "app", "contributes", "whiteboardTypes"], manifest.targets?.kay?.app?.contributes?.whiteboardTypes, "Whiteboard type");
5161
5133
  const uiAppIds = new Set(manifest.targets?.kay?.ui?.contributes?.apps?.map((app) => app.localId) ?? []);
5162
- for (const [index, type] of (manifest.targets?.kay?.app?.contributes?.whiteboardTypes ?? []).entries()) {
5163
- if (type.presentation !== void 0 && !uiAppIds.has(type.presentation.app)) {
5164
- ctx.addIssue({
5165
- code: "custom",
5166
- path: [
5167
- "targets",
5168
- "kay",
5169
- "app",
5170
- "contributes",
5171
- "whiteboardTypes",
5172
- index,
5173
- "presentation",
5174
- "app"
5175
- ],
5176
- message: `Whiteboard type ${type.localId} references unknown ui app ${type.presentation.app}`
5177
- });
5178
- }
5179
- }
5180
5134
  for (const [index, entry] of (manifest.targets?.kay?.ui?.contributes?.railEntries ?? []).entries()) {
5181
5135
  const body = entry.panel?.body;
5182
5136
  const app = manifest.targets?.kay?.ui?.contributes?.apps?.find((candidate) => candidate.localId === body);
@@ -6034,10 +5988,7 @@ function collectDeclaredContributionIds(manifest) {
6034
5988
  const ui = manifest.targets?.kay?.ui?.contributes;
6035
5989
  pushContributionIds(output, ["targets", "kay", "ui", "contributes", "commands"], ui?.commands);
6036
5990
  pushContributionIds(output, ["targets", "kay", "ui", "contributes", "slots"], ui?.slots);
6037
- pushContributionIds(output, ["targets", "kay", "ui", "contributes", "settingsPanels"], ui?.settingsPanels);
6038
- pushContributionIds(output, ["targets", "kay", "ui", "contributes", "resultRenderers"], ui?.resultRenderers);
6039
5991
  pushContributionIds(output, ["targets", "kay", "ui", "contributes", "referencePresentations"], ui?.referencePresentations);
6040
- pushContributionIds(output, ["targets", "kay", "ui", "contributes", "views"], ui?.views);
6041
5992
  pushContributionIds(output, ["targets", "kay", "ui", "contributes", "apps"], ui?.apps);
6042
5993
  pushContributionIds(output, ["targets", "kay", "ui", "contributes", "themes"], ui?.themes);
6043
5994
  pushContributionIds(output, ["targets", "kay", "ui", "contributes", "eventSubscriptions"], ui?.eventSubscriptions);
@@ -6195,10 +6146,7 @@ function createResolvedContractSchemas(canonical) {
6195
6146
  displayName: NonEmptyString3,
6196
6147
  schemaVersion: z14.number().int().positive(),
6197
6148
  storage: WhiteboardTypeStorage2,
6198
- valueSchema: JsonSchema,
6199
- presentation: z14.strictObject({
6200
- app: GlobalContributionId2
6201
- }).optional()
6149
+ valueSchema: JsonSchema
6202
6150
  });
6203
6151
  const ResolvedKayAppMcpServer2 = z14.strictObject({
6204
6152
  name: LocalContributionId2,
@@ -6534,10 +6482,7 @@ function collectContributionSources(manifest) {
6534
6482
  const ui = manifest.targets?.kay?.ui?.contributes;
6535
6483
  pushAll(output, "kay.ui", "uiCommand", ui?.commands);
6536
6484
  pushAll(output, "kay.ui", "uiSlot", ui?.slots);
6537
- pushAll(output, "kay.ui", "settingsPanel", ui?.settingsPanels);
6538
- pushAll(output, "kay.ui", "resultRenderer", ui?.resultRenderers);
6539
6485
  pushAll(output, "kay.ui", "referencePresentation", ui?.referencePresentations);
6540
- pushAll(output, "kay.ui", "view", ui?.views);
6541
6486
  pushAll(output, "kay.ui", "app", ui?.apps);
6542
6487
  pushAll(output, "kay.ui", "theme", ui?.themes);
6543
6488
  pushAll(output, "kay.ui", "eventSubscription", ui?.eventSubscriptions);
@@ -6864,12 +6809,7 @@ function resolveKayPluginContractV1(manifest) {
6864
6809
  displayName: type.displayName,
6865
6810
  schemaVersion: type.schemaVersion,
6866
6811
  storage: type.storage,
6867
- valueSchema: type.valueSchema,
6868
- ...type.presentation === void 0 ? {} : {
6869
- presentation: {
6870
- app: resolveGlobalContributionId(namespace, type.presentation.app)
6871
- }
6872
- }
6812
+ valueSchema: type.valueSchema
6873
6813
  }));
6874
6814
  const kayAppMcpServers = Object.entries(manifest.targets?.kay?.app?.contributes?.mcpServers ?? {}).map(([name, server]) => ({
6875
6815
  name,
@@ -7633,11 +7573,7 @@ var WhiteboardTypeInfo = z19.strictObject({
7633
7573
  typeId: GlobalContributionId,
7634
7574
  displayName: NonEmptyString,
7635
7575
  schemaVersion: z19.number().int().positive(),
7636
- available: z19.boolean(),
7637
- /** A plugin-owned readonly presentation; absent types use the host fallback. */
7638
- presentation: z19.strictObject({
7639
- app: GlobalContributionId
7640
- }).optional()
7576
+ available: z19.boolean()
7641
7577
  });
7642
7578
 
7643
7579
  // packages/plugin-protocol/dist/product-events.js
@@ -8008,8 +7944,6 @@ export {
8008
7944
  ResolvedReferencePresentation,
8009
7945
  ResolvedTargetGrantSet,
8010
7946
  ResourceContribution,
8011
- ResultRendererContribution,
8012
- RichViewContribution,
8013
7947
  SEMVER_PATTERN,
8014
7948
  SESSION_HEALTH_CLASSIFIER_IDS,
8015
7949
  SESSION_HEALTH_CUSTOM_TYPE,
@@ -8028,7 +7962,6 @@ export {
8028
7962
  SessionProvenanceRecord,
8029
7963
  SessionReaderContribution,
8030
7964
  SessionRelationship,
8031
- SettingsPanelContribution,
8032
7965
  SignedInStatusCode,
8033
7966
  SkillContribution,
8034
7967
  StorageGrantRequest,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaklabs-ai/plugin-protocol",
3
- "version": "0.46.0",
3
+ "version": "0.48.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",