@yaklabs-ai/plugin-sdk 0.52.0 → 0.53.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
@@ -13,7 +13,7 @@ it under the name your plugin code actually imports:
13
13
  ```json
14
14
  {
15
15
  "dependencies": {
16
- "@bonsai/plugin-sdk": "npm:@yaklabs-ai/plugin-sdk@^0.52.0"
16
+ "@bonsai/plugin-sdk": "npm:@yaklabs-ai/plugin-sdk@^0.53.0"
17
17
  }
18
18
  }
19
19
  ```
@@ -62,7 +62,7 @@ Every tool the entrypoint registers is declared in the manifest too:
62
62
  "description": "Greets people by name.",
63
63
  "version": "0.1.0",
64
64
  "namespace": "widgets",
65
- "compatibility": { "sdk": "^0.52.0" },
65
+ "compatibility": { "sdk": "^0.53.0" },
66
66
  "targets": {
67
67
  "kay": {
68
68
  "agent": {
@@ -151,7 +151,7 @@ naming both versions, instead of loading it and finding no `activate`.
151
151
  | `@bonsai/plugin-sdk/system-one` | The types and error class for `api.systemOne` / `app.systemOne`, from 0.13.8 |
152
152
  | `@bonsai/plugin-sdk/zod` | `z` (the host's in the daemon), on an entry with no other import, from 0.13.9 |
153
153
 
154
- A plugin that imports these subpaths declares the current supported SDK range (`^0.52.0`).
154
+ A plugin that imports these subpaths declares the current supported SDK range (`^0.53.0`).
155
155
  The rows record when each subpath appeared, not retained runtime compatibility. `vendored-mcp` builds the plugin's URI module (its link cards and help); hosting the
156
156
  vendor's MCP server itself is a separate host decision: Bonsai hosts it once a person approves
157
157
  the plugin's `mcp.host-server` grant for that server's name and URL. A server that needs an OAuth
@@ -159,7 +159,7 @@ sign-in names one of the plugin's auth services in `authService`; that service m
159
159
  one `delegated` scheme, which Bonsai uses to sign the person in to the server. Bonsai declares that
160
160
  scheme at runtime; the plugin's code must not declare it again. From 0.16.2 a plugin's code can also
161
161
  call the server's tools through `api.vendoredMcp.port(<server>)`, typed by this subpath's
162
- `VendoredMcpPort` and `VendoredMcpOutcome` (declare `^0.52.0`).
162
+ `VendoredMcpPort` and `VendoredMcpOutcome` (declare `^0.53.0`).
163
163
 
164
164
  From 0.13.10 the manifest schema carries two facts Bonsai reads for its own plugins only; another
165
165
  plugin's are ignored, with a load diagnostic. An `external-cli` auth scheme's `cli` says how Bonsai
@@ -241,7 +241,7 @@ Provider schemas remain authoritative; declaring a dependency grants no authorit
241
241
  through `app.uri`, parse returned Markdown in the consuming plugin, and retain the read's
242
242
  revision (or `contentDigest` from `/uri`) for edits. The old `memory.read` and `memory.write`
243
243
  grants do not authorize the replacement scheme-and-verb calls. Contracts before 0.49.0 are
244
- refused; migrate and declare `^0.52.0`. The current host also serves the 0.49.0 resource contract.
244
+ refused; migrate and declare `^0.53.0`. The current host also serves the 0.49.0 resource contract.
245
245
 
246
246
  ## What this package is, and is not, at runtime
247
247
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@yaklabs-ai/plugin-sdk",
4
- "version": "0.52.0",
4
+ "version": "0.53.0",
5
5
  "target": "npm",
6
6
  "firstPartyLicense": "MIT",
7
7
  "bundled": [
@@ -234,13 +234,13 @@ declare const ArtifactProvenanceCaptureContextSchema: z.ZodObject<{
234
234
  gaps: z.ZodArray<z.ZodObject<{
235
235
  code: z.ZodEnum<{
236
236
  unknown: "unknown";
237
+ truncated: "truncated";
237
238
  "capture-failed": "capture-failed";
238
239
  "legacy-derived": "legacy-derived";
239
240
  "ambiguous-predecessor": "ambiguous-predecessor";
240
241
  "unverified-index": "unverified-index";
241
242
  "missing-ancestor": "missing-ancestor";
242
243
  cycle: "cycle";
243
- truncated: "truncated";
244
244
  "metadata-write-failed": "metadata-write-failed";
245
245
  "invalid-record": "invalid-record";
246
246
  }>;
@@ -584,13 +584,13 @@ export declare const ArtifactProvenanceEnvelopeV1: z.ZodPipe<z.ZodUnknown, z.Zod
584
584
  gaps: z.ZodArray<z.ZodObject<{
585
585
  code: z.ZodEnum<{
586
586
  unknown: "unknown";
587
+ truncated: "truncated";
587
588
  "capture-failed": "capture-failed";
588
589
  "legacy-derived": "legacy-derived";
589
590
  "ambiguous-predecessor": "ambiguous-predecessor";
590
591
  "unverified-index": "unverified-index";
591
592
  "missing-ancestor": "missing-ancestor";
592
593
  cycle: "cycle";
593
- truncated: "truncated";
594
594
  "metadata-write-failed": "metadata-write-failed";
595
595
  "invalid-record": "invalid-record";
596
596
  }>;
@@ -604,13 +604,13 @@ export declare type ArtifactProvenanceEnvelopeV1 = z.infer<typeof ArtifactProven
604
604
  declare const ArtifactProvenanceGap: z.ZodObject<{
605
605
  code: z.ZodEnum<{
606
606
  unknown: "unknown";
607
+ truncated: "truncated";
607
608
  "capture-failed": "capture-failed";
608
609
  "legacy-derived": "legacy-derived";
609
610
  "ambiguous-predecessor": "ambiguous-predecessor";
610
611
  "unverified-index": "unverified-index";
611
612
  "missing-ancestor": "missing-ancestor";
612
613
  cycle: "cycle";
613
- truncated: "truncated";
614
614
  "metadata-write-failed": "metadata-write-failed";
615
615
  "invalid-record": "invalid-record";
616
616
  }>;
@@ -2458,8 +2458,16 @@ declare const KAY_PLUGIN_PROTOCOL_VERSION: "kay.plugin.v1";
2458
2458
  * contract remains served.
2459
2459
  *
2460
2460
  * 0.51.0 adds flag-dependent title, icon and panel presence on rail entries.
2461
+ *
2462
+ * 0.52.0 adds plugin-owned operational facts through existing manifests and registrations.
2463
+ *
2464
+ * 0.52.1 adds owner-qualified page feed and endpoint references and their kay.ui claims.
2465
+ *
2466
+ * 0.53.0 adds declared working-content layouts, family-root authority, draft projection discovery
2467
+ * and session-bound page references. Older customized Whiteboard copies must accept the plugin
2468
+ * update before using these interfaces.
2461
2469
  */
2462
- declare const KAY_PLUGIN_SDK_VERSION: "0.52.0";
2470
+ declare const KAY_PLUGIN_SDK_VERSION: "0.53.0";
2463
2471
 
2464
2472
  declare const KAY_PLUGIN_TARGET_NAMES: readonly ["kay.agent", "kay.app", "kay.ui"];
2465
2473
 
@@ -2505,9 +2513,9 @@ declare interface KayAgentEvents {
2505
2513
  /** This plugin's folder in the session family's shared Whiteboard. */
2506
2514
  declare interface KayAgentFamilyFolder {
2507
2515
  /**
2508
- * The folder's absolute path, created on first use. The plugin that owns the Whiteboard gets
2509
- * the whole family folder; every other plugin gets its own `plugins/<plugin-id>/` inside it.
2510
- * Undefined outside a session.
2516
+ * Absolute path, created on first use; undefined outside a session. A declared and granted
2517
+ * family-root owner receives the whole folder; other plugins receive `plugins/<plugin-id>/`.
2518
+ * Root access checks the live `family-folder.root` grant on every call.
2511
2519
  */
2512
2520
  path(): Promise<string | undefined>;
2513
2521
  }
@@ -10494,8 +10502,8 @@ declare const WhiteboardEntryInfo: z.ZodObject<{
10494
10502
  authorSessionId: z.ZodNullable<z.ZodString>;
10495
10503
  }, z.core.$strict>>;
10496
10504
  state: z.ZodEnum<{
10497
- unavailable: "unavailable";
10498
10505
  available: "available";
10506
+ unavailable: "unavailable";
10499
10507
  "unsupported-version": "unsupported-version";
10500
10508
  invalid: "invalid";
10501
10509
  }>;
@@ -10516,8 +10524,8 @@ declare const WhiteboardEntryInspection: z.ZodObject<{
10516
10524
  authorSessionId: z.ZodNullable<z.ZodString>;
10517
10525
  }, z.core.$strict>>;
10518
10526
  state: z.ZodEnum<{
10519
- unavailable: "unavailable";
10520
10527
  available: "available";
10528
+ unavailable: "unavailable";
10521
10529
  "unsupported-version": "unsupported-version";
10522
10530
  invalid: "invalid";
10523
10531
  }>;
@@ -10568,6 +10576,9 @@ declare const WhiteboardTypeInfo: z.ZodObject<{
10568
10576
  displayName: z.ZodString;
10569
10577
  schemaVersion: z.ZodNumber;
10570
10578
  available: z.ZodBoolean;
10579
+ reference: z.ZodOptional<z.ZodObject<{
10580
+ uriTemplate: z.ZodString;
10581
+ }, z.core.$strict>>;
10571
10582
  }, z.core.$strict>;
10572
10583
 
10573
10584
  declare type WhiteboardTypeInfo = Readonly<z.infer<typeof WhiteboardTypeInfo>>;
@@ -2512,8 +2512,16 @@ declare const KAY_PLUGIN_PROTOCOL_VERSION: "kay.plugin.v1";
2512
2512
  * contract remains served.
2513
2513
  *
2514
2514
  * 0.51.0 adds flag-dependent title, icon and panel presence on rail entries.
2515
+ *
2516
+ * 0.52.0 adds plugin-owned operational facts through existing manifests and registrations.
2517
+ *
2518
+ * 0.52.1 adds owner-qualified page feed and endpoint references and their kay.ui claims.
2519
+ *
2520
+ * 0.53.0 adds declared working-content layouts, family-root authority, draft projection discovery
2521
+ * and session-bound page references. Older customized Whiteboard copies must accept the plugin
2522
+ * update before using these interfaces.
2515
2523
  */
2516
- declare const KAY_PLUGIN_SDK_VERSION: "0.52.0";
2524
+ declare const KAY_PLUGIN_SDK_VERSION: "0.53.0";
2517
2525
 
2518
2526
  declare const KAY_PLUGIN_TARGET_NAMES: readonly ["kay.agent", "kay.app", "kay.ui"];
2519
2527
 
@@ -2556,9 +2564,9 @@ declare interface KayAgentEvents {
2556
2564
  /** This plugin's folder in the session family's shared Whiteboard. */
2557
2565
  declare interface KayAgentFamilyFolder {
2558
2566
  /**
2559
- * The folder's absolute path, created on first use. The plugin that owns the Whiteboard gets
2560
- * the whole family folder; every other plugin gets its own `plugins/<plugin-id>/` inside it.
2561
- * Undefined outside a session.
2567
+ * Absolute path, created on first use; undefined outside a session. A declared and granted
2568
+ * family-root owner receives the whole folder; other plugins receive `plugins/<plugin-id>/`.
2569
+ * Root access checks the live `family-folder.root` grant on every call.
2562
2570
  */
2563
2571
  path(): Promise<string | undefined>;
2564
2572
  }
@@ -5468,6 +5476,9 @@ declare const ResolvedPluginContractV1: z.ZodObject<{
5468
5476
  }, z.core.$strict>>;
5469
5477
  }, z.core.$strict>;
5470
5478
  }, z.core.$strict>>;
5479
+ kayAgentFamilyFolder: z.ZodOptional<z.ZodObject<{
5480
+ scope: z.ZodLiteral<"root">;
5481
+ }, z.core.$strict>>;
5471
5482
  kayAgentUriModules: z.ZodOptional<z.ZodArray<z.ZodObject<{
5472
5483
  revisionBacked: z.ZodOptional<z.ZodLiteral<true>>;
5473
5484
  mailCalibrationSource: z.ZodOptional<z.ZodLiteral<true>>;
@@ -5931,6 +5942,9 @@ declare const ResolvedPluginContractV1: z.ZodObject<{
5931
5942
  schema: z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>;
5932
5943
  }, z.core.$strict>;
5933
5944
  }, z.core.$strict>>;
5945
+ messageDraft: z.ZodOptional<z.ZodObject<{
5946
+ schemes: z.ZodArray<z.ZodString>;
5947
+ }, z.core.$strict>>;
5934
5948
  store: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
5935
5949
  shape: z.ZodLiteral<"rows">;
5936
5950
  rowsField: z.ZodString;
@@ -5941,7 +5955,6 @@ declare const ResolvedPluginContractV1: z.ZodObject<{
5941
5955
  }, z.core.$strict>>>;
5942
5956
  kayAppWhiteboardTypes: z.ZodOptional<z.ZodArray<z.ZodObject<{
5943
5957
  localId: z.ZodString;
5944
- globalId: z.ZodString;
5945
5958
  displayName: z.ZodString;
5946
5959
  schemaVersion: z.ZodNumber;
5947
5960
  storage: z.ZodDiscriminatedUnion<[z.ZodObject<{
@@ -5953,6 +5966,12 @@ declare const ResolvedPluginContractV1: z.ZodObject<{
5953
5966
  bodyField: z.ZodString;
5954
5967
  }, z.core.$strict>], "kind">;
5955
5968
  valueSchema: z.ZodRecord<z.ZodString, z.ZodType<authoringCommonSchemas.JsonValue, unknown, z.core.$ZodTypeInternals<authoringCommonSchemas.JsonValue, unknown>>>;
5969
+ directory: z.ZodOptional<z.ZodArray<z.ZodString>>;
5970
+ reference: z.ZodOptional<z.ZodObject<{
5971
+ uriTemplate: z.ZodString;
5972
+ }, z.core.$strict>>;
5973
+ handover: z.ZodOptional<z.ZodLiteral<true>>;
5974
+ globalId: z.ZodString;
5956
5975
  }, z.core.$strict>>>;
5957
5976
  kayAppMcpServers: z.ZodOptional<z.ZodArray<z.ZodObject<{
5958
5977
  name: z.ZodString;
@@ -6009,6 +6028,8 @@ declare const ResolvedPluginContractV1: z.ZodObject<{
6009
6028
  search: z.ZodOptional<z.ZodString>;
6010
6029
  }, z.core.$strict>;
6011
6030
  objectId: z.ZodOptional<z.ZodString>;
6031
+ resourceKind: z.ZodOptional<z.ZodString>;
6032
+ label: z.ZodOptional<z.ZodString>;
6012
6033
  open: z.ZodOptional<z.ZodObject<{
6013
6034
  kind: z.ZodLiteral<"none">;
6014
6035
  }, z.core.$strict>>;
@@ -6110,10 +6131,13 @@ declare const ResolvedPluginContractV1: z.ZodObject<{
6110
6131
  styles: z.ZodOptional<z.ZodArray<z.ZodString>>;
6111
6132
  assets: z.ZodOptional<z.ZodArray<z.ZodString>>;
6112
6133
  capabilities: z.ZodOptional<z.ZodObject<{
6113
- endpoints: z.ZodOptional<z.ZodArray<z.ZodObject<{
6134
+ endpoints: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
6114
6135
  localId: z.ZodString;
6115
6136
  globalId: z.ZodString;
6116
- }, z.core.$strict>>>;
6137
+ }, z.core.$strict>, z.ZodObject<{
6138
+ pluginId: z.ZodString;
6139
+ localId: z.ZodString;
6140
+ }, z.core.$strict>]>>>;
6117
6141
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6118
6142
  "navigation.open-session": "navigation.open-session";
6119
6143
  "sessions.create": "sessions.create";
@@ -6131,7 +6155,10 @@ declare const ResolvedPluginContractV1: z.ZodObject<{
6131
6155
  "workspace.pane-header": "workspace.pane-header";
6132
6156
  "workspace.arrange": "workspace.arrange";
6133
6157
  }>>>;
6134
- feeds: z.ZodOptional<z.ZodArray<z.ZodString>>;
6158
+ feeds: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
6159
+ pluginId: z.ZodString;
6160
+ localId: z.ZodString;
6161
+ }, z.core.$strict>]>>>;
6135
6162
  }, z.core.$strict>>;
6136
6163
  }, z.core.$strict>>>;
6137
6164
  }, z.core.$strict>;
@@ -11837,8 +11864,8 @@ declare const WhiteboardEntryInfo: z.ZodObject<{
11837
11864
  authorSessionId: z.ZodNullable<z.ZodString>;
11838
11865
  }, z.core.$strict>>;
11839
11866
  state: z.ZodEnum<{
11840
- unavailable: "unavailable";
11841
11867
  available: "available";
11868
+ unavailable: "unavailable";
11842
11869
  "unsupported-version": "unsupported-version";
11843
11870
  invalid: "invalid";
11844
11871
  }>;
@@ -11859,8 +11886,8 @@ declare const WhiteboardEntryInspection: z.ZodObject<{
11859
11886
  authorSessionId: z.ZodNullable<z.ZodString>;
11860
11887
  }, z.core.$strict>>;
11861
11888
  state: z.ZodEnum<{
11862
- unavailable: "unavailable";
11863
11889
  available: "available";
11890
+ unavailable: "unavailable";
11864
11891
  "unsupported-version": "unsupported-version";
11865
11892
  invalid: "invalid";
11866
11893
  }>;
@@ -11911,6 +11938,9 @@ declare const WhiteboardTypeInfo: z.ZodObject<{
11911
11938
  displayName: z.ZodString;
11912
11939
  schemaVersion: z.ZodNumber;
11913
11940
  available: z.ZodBoolean;
11941
+ reference: z.ZodOptional<z.ZodObject<{
11942
+ uriTemplate: z.ZodString;
11943
+ }, z.core.$strict>>;
11914
11944
  }, z.core.$strict>;
11915
11945
 
11916
11946
  declare type WhiteboardTypeInfo = Readonly<z.infer<typeof WhiteboardTypeInfo>>;
@@ -2791,8 +2791,16 @@ declare const KAY_PLUGIN_PROTOCOL_VERSION: "kay.plugin.v1";
2791
2791
  * contract remains served.
2792
2792
  *
2793
2793
  * 0.51.0 adds flag-dependent title, icon and panel presence on rail entries.
2794
+ *
2795
+ * 0.52.0 adds plugin-owned operational facts through existing manifests and registrations.
2796
+ *
2797
+ * 0.52.1 adds owner-qualified page feed and endpoint references and their kay.ui claims.
2798
+ *
2799
+ * 0.53.0 adds declared working-content layouts, family-root authority, draft projection discovery
2800
+ * and session-bound page references. Older customized Whiteboard copies must accept the plugin
2801
+ * update before using these interfaces.
2794
2802
  */
2795
- declare const KAY_PLUGIN_SDK_VERSION: "0.52.0";
2803
+ declare const KAY_PLUGIN_SDK_VERSION: "0.53.0";
2796
2804
 
2797
2805
  declare const KAY_PLUGIN_TARGET_NAMES: readonly ["kay.agent", "kay.app", "kay.ui"];
2798
2806
 
@@ -2861,9 +2869,9 @@ export declare interface KayAgentEvents {
2861
2869
  /** This plugin's folder in the session family's shared Whiteboard. */
2862
2870
  export declare interface KayAgentFamilyFolder {
2863
2871
  /**
2864
- * The folder's absolute path, created on first use. The plugin that owns the Whiteboard gets
2865
- * the whole family folder; every other plugin gets its own `plugins/<plugin-id>/` inside it.
2866
- * Undefined outside a session.
2872
+ * Absolute path, created on first use; undefined outside a session. A declared and granted
2873
+ * family-root owner receives the whole folder; other plugins receive `plugins/<plugin-id>/`.
2874
+ * Root access checks the live `family-folder.root` grant on every call.
2867
2875
  */
2868
2876
  path(): Promise<string | undefined>;
2869
2877
  }
@@ -5103,6 +5111,7 @@ declare const PluginCapabilityRefusalV1: z.ZodObject<{
5103
5111
  target: z.ZodEnum<{
5104
5112
  "kay.agent": "kay.agent";
5105
5113
  "kay.app": "kay.app";
5114
+ "kay.ui": "kay.ui";
5106
5115
  }>;
5107
5116
  slug: z.ZodLiteral<"endpoints.invoke">;
5108
5117
  envelope: z.ZodObject<{
@@ -5191,6 +5200,13 @@ declare const PluginCapabilityRefusalV1: z.ZodObject<{
5191
5200
  envelope: z.ZodObject<{
5192
5201
  contributor: z.ZodString;
5193
5202
  }, z.core.$strict>;
5203
+ }, z.core.$strict>, z.ZodObject<{
5204
+ target: z.ZodLiteral<"kay.ui">;
5205
+ slug: z.ZodLiteral<"app-data.read">;
5206
+ envelope: z.ZodObject<{
5207
+ pluginId: z.ZodString;
5208
+ sourceId: z.ZodString;
5209
+ }, z.core.$strict>;
5194
5210
  }, z.core.$strict>, z.ZodObject<{
5195
5211
  target: z.ZodLiteral<"kay.app">;
5196
5212
  slug: z.ZodLiteral<"app-data.register">;
@@ -5341,6 +5357,10 @@ declare const PluginCapabilityRefusalV1: z.ZodObject<{
5341
5357
  command: z.ZodString;
5342
5358
  args: z.ZodArray<z.ZodString>;
5343
5359
  }, z.core.$strict>], "channel">;
5360
+ }, z.core.$strict>, z.ZodObject<{
5361
+ target: z.ZodLiteral<"kay.agent">;
5362
+ slug: z.ZodLiteral<"family-folder.root">;
5363
+ envelope: z.ZodObject<{}, z.core.$strict>;
5344
5364
  }, z.core.$strict>, z.ZodObject<{
5345
5365
  target: z.ZodEnum<{
5346
5366
  "kay.agent": "kay.agent";
@@ -12072,8 +12092,8 @@ export declare const WhiteboardEntryInfo: z.ZodObject<{
12072
12092
  authorSessionId: z.ZodNullable<z.ZodString>;
12073
12093
  }, z.core.$strict>>;
12074
12094
  state: z.ZodEnum<{
12075
- unavailable: "unavailable";
12076
12095
  available: "available";
12096
+ unavailable: "unavailable";
12077
12097
  "unsupported-version": "unsupported-version";
12078
12098
  invalid: "invalid";
12079
12099
  }>;
@@ -12094,8 +12114,8 @@ export declare const WhiteboardEntryInspection: z.ZodObject<{
12094
12114
  authorSessionId: z.ZodNullable<z.ZodString>;
12095
12115
  }, z.core.$strict>>;
12096
12116
  state: z.ZodEnum<{
12097
- unavailable: "unavailable";
12098
12117
  available: "available";
12118
+ unavailable: "unavailable";
12099
12119
  "unsupported-version": "unsupported-version";
12100
12120
  invalid: "invalid";
12101
12121
  }>;
@@ -12146,6 +12166,9 @@ export declare const WhiteboardTypeInfo: z.ZodObject<{
12146
12166
  displayName: z.ZodString;
12147
12167
  schemaVersion: z.ZodNumber;
12148
12168
  available: z.ZodBoolean;
12169
+ reference: z.ZodOptional<z.ZodObject<{
12170
+ uriTemplate: z.ZodString;
12171
+ }, z.core.$strict>>;
12149
12172
  }, z.core.$strict>;
12150
12173
 
12151
12174
  export declare type WhiteboardTypeInfo = Readonly<z.infer<typeof WhiteboardTypeInfo>>;
package/dist/kay-agent.js CHANGED
@@ -192,6 +192,8 @@ function isLoneCapture(pattern) {
192
192
  return pattern.length === 1 && pattern[0].capture !== void 0 && pattern[0].rest !== true;
193
193
  }
194
194
  function matchParts(pattern, value, separator, captures, foldLiterals = false) {
195
+ if (pattern.length === 0)
196
+ return value === "";
195
197
  const parts = separator === void 0 ? [value] : value.split(separator);
196
198
  let partIndex = 0;
197
199
  for (let i = 0; i < pattern.length; i += 1) {
package/dist/kay-app.d.ts CHANGED
@@ -2907,8 +2907,16 @@ declare const KAY_PLUGIN_PROTOCOL_VERSION: "kay.plugin.v1";
2907
2907
  * contract remains served.
2908
2908
  *
2909
2909
  * 0.51.0 adds flag-dependent title, icon and panel presence on rail entries.
2910
+ *
2911
+ * 0.52.0 adds plugin-owned operational facts through existing manifests and registrations.
2912
+ *
2913
+ * 0.52.1 adds owner-qualified page feed and endpoint references and their kay.ui claims.
2914
+ *
2915
+ * 0.53.0 adds declared working-content layouts, family-root authority, draft projection discovery
2916
+ * and session-bound page references. Older customized Whiteboard copies must accept the plugin
2917
+ * update before using these interfaces.
2910
2918
  */
2911
- declare const KAY_PLUGIN_SDK_VERSION: "0.52.0";
2919
+ declare const KAY_PLUGIN_SDK_VERSION: "0.53.0";
2912
2920
 
2913
2921
  declare const KAY_PLUGIN_TARGET_NAMES: readonly ["kay.agent", "kay.app", "kay.ui"];
2914
2922
 
@@ -17297,8 +17305,8 @@ declare const WhiteboardEntryInfo: z.ZodObject<{
17297
17305
  authorSessionId: z.ZodNullable<z.ZodString>;
17298
17306
  }, z.core.$strict>>;
17299
17307
  state: z.ZodEnum<{
17300
- unavailable: "unavailable";
17301
17308
  available: "available";
17309
+ unavailable: "unavailable";
17302
17310
  "unsupported-version": "unsupported-version";
17303
17311
  invalid: "invalid";
17304
17312
  }>;
@@ -17319,8 +17327,8 @@ declare const WhiteboardEntryInspection: z.ZodObject<{
17319
17327
  authorSessionId: z.ZodNullable<z.ZodString>;
17320
17328
  }, z.core.$strict>>;
17321
17329
  state: z.ZodEnum<{
17322
- unavailable: "unavailable";
17323
17330
  available: "available";
17331
+ unavailable: "unavailable";
17324
17332
  "unsupported-version": "unsupported-version";
17325
17333
  invalid: "invalid";
17326
17334
  }>;
@@ -17371,6 +17379,9 @@ export declare const WhiteboardTypeInfo: z.ZodObject<{
17371
17379
  displayName: z.ZodString;
17372
17380
  schemaVersion: z.ZodNumber;
17373
17381
  available: z.ZodBoolean;
17382
+ reference: z.ZodOptional<z.ZodObject<{
17383
+ uriTemplate: z.ZodString;
17384
+ }, z.core.$strict>>;
17374
17385
  }, z.core.$strict>;
17375
17386
 
17376
17387
  export declare type WhiteboardTypeInfo = Readonly<z.infer<typeof WhiteboardTypeInfo>>;
@@ -263,6 +263,8 @@ function isLoneCapture(pattern) {
263
263
  return pattern.length === 1 && pattern[0].capture !== void 0 && pattern[0].rest !== true;
264
264
  }
265
265
  function matchParts(pattern, value, separator, captures, foldLiterals = false) {
266
+ if (pattern.length === 0)
267
+ return value === "";
266
268
  const parts = separator === void 0 ? [value] : value.split(separator);
267
269
  let partIndex = 0;
268
270
  for (let i = 0; i < pattern.length; i += 1) {
@@ -31,8 +31,8 @@ export declare const WhiteboardEntryInfo: z.ZodObject<{
31
31
  authorSessionId: z.ZodNullable<z.ZodString>;
32
32
  }, z.core.$strict>>;
33
33
  state: z.ZodEnum<{
34
- unavailable: "unavailable";
35
34
  available: "available";
35
+ unavailable: "unavailable";
36
36
  "unsupported-version": "unsupported-version";
37
37
  invalid: "invalid";
38
38
  }>;
@@ -53,8 +53,8 @@ export declare const WhiteboardEntryInspection: z.ZodObject<{
53
53
  authorSessionId: z.ZodNullable<z.ZodString>;
54
54
  }, z.core.$strict>>;
55
55
  state: z.ZodEnum<{
56
- unavailable: "unavailable";
57
56
  available: "available";
57
+ unavailable: "unavailable";
58
58
  "unsupported-version": "unsupported-version";
59
59
  invalid: "invalid";
60
60
  }>;
@@ -72,6 +72,9 @@ export declare const WhiteboardTypeInfo: z.ZodObject<{
72
72
  displayName: z.ZodString;
73
73
  schemaVersion: z.ZodNumber;
74
74
  available: z.ZodBoolean;
75
+ reference: z.ZodOptional<z.ZodObject<{
76
+ uriTemplate: z.ZodString;
77
+ }, z.core.$strict>>;
75
78
  }, z.core.$strict>;
76
79
 
77
80
  export declare type WhiteboardTypeInfo = Readonly<z.infer<typeof WhiteboardTypeInfo>>;
@@ -122,6 +122,9 @@ var { NonEmptyString, PluginId, PluginNamespace, LocalContributionId, GlobalCont
122
122
  var canonicalCommonSchemas = createCommonSchemas(true);
123
123
 
124
124
  // packages/plugin-protocol/dist/whiteboard.js
125
+ var WhiteboardEntryReference = z4.strictObject({
126
+ uriTemplate: z4.string().regex(/^[a-z][a-z0-9+.-]*:\/\/[^\s?#{}]+\/\{name\}$/u)
127
+ });
125
128
  var WhiteboardValue = JsonValue;
126
129
  var WhiteboardEntryEnvelope = z4.strictObject({
127
130
  id: NonEmptyString,
@@ -160,7 +163,8 @@ var WhiteboardTypeInfo = z4.strictObject({
160
163
  typeId: GlobalContributionId,
161
164
  displayName: NonEmptyString,
162
165
  schemaVersion: z4.number().int().positive(),
163
- available: z4.boolean()
166
+ available: z4.boolean(),
167
+ reference: WhiteboardEntryReference.optional()
164
168
  });
165
169
  export {
166
170
  JsonValue,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaklabs-ai/plugin-sdk",
3
- "version": "0.52.0",
3
+ "version": "0.53.0",
4
4
  "description": "The Kay plugin SDK — types and helpers for authoring a Kay directory plugin.",
5
5
  "author": "YakLabs",
6
6
  "type": "module",