@yaklabs-ai/plugin-protocol 0.12.5 → 0.13.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
- "@kay/plugin-protocol": "npm:@yaklabs-ai/plugin-protocol@^0.12.5"
14
+ "@kay/plugin-protocol": "npm:@yaklabs-ai/plugin-protocol@^0.13.0"
15
15
  }
16
16
  }
17
17
  ```
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "package": "@yaklabs-ai/plugin-protocol",
4
- "version": "0.12.5",
4
+ "version": "0.13.0",
5
5
  "target": "npm",
6
6
  "firstPartyLicense": "MIT",
7
7
  "bundled": [],
package/dist/index.d.ts CHANGED
@@ -1973,7 +1973,7 @@ export declare const KAY_APP_DATA_SNAPSHOT_MAX_BYTES: number;
1973
1973
  export declare const KAY_EVENT_PUBLISHER_ID: "kay";
1974
1974
 
1975
1975
  /** Released SDK contracts still implemented by the host, alongside its current SDK. */
1976
- export declare const KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS: readonly ["0.8.0", "0.8.1", "0.8.2", "0.8.3", "0.8.4", "0.8.5", "0.9.0", "0.9.1", "0.10.0", "0.11.0", "0.11.1", "0.12.0", "0.12.1", "0.12.2", "0.12.3", "0.12.4"];
1976
+ export declare const KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS: readonly ["0.8.0", "0.8.1", "0.8.2", "0.8.3", "0.8.4", "0.8.5", "0.9.0", "0.9.1", "0.10.0", "0.11.0", "0.11.1", "0.12.0", "0.12.1", "0.12.2", "0.12.3", "0.12.4", "0.12.5"];
1977
1977
 
1978
1978
  export declare const KAY_PLUGIN_PROTOCOL_PACKAGE_NAME: "@kay/plugin-protocol";
1979
1979
 
@@ -2177,8 +2177,27 @@ export declare const KAY_PLUGIN_PROTOCOL_VERSION: "kay.plugin.v1";
2177
2177
  * ungated, like `app.paths`. Additive: a plugin compiled against 0.12.4 never reads it. A plugin
2178
2178
  * that calls it declares `^0.12.5`, so an older host refuses a directory or repository plugin at
2179
2179
  * load instead of the call failing.
2180
+ *
2181
+ * 0.13.0 adds `@kay/plugin-sdk/fs`, Kay's own `node:fs/promises`: the same functions, arguments,
2182
+ * return types and errors, with every call run on the host's user-files workers under a deadline
2183
+ * (`ERR_KAY_FS_DEADLINE` and siblings when the host gives up or does not try), plus
2184
+ * `writeFileAtomic` and `withTimeout`. With no host installed it is Node's own module. It adds
2185
+ * `api.familyFolder` (`KayAgentFamilyFolder`), whose `path()` answers the plugin's folder in its
2186
+ * session family's Whiteboard, and makes it a required member of `KayAgentPluginApi`. It removes
2187
+ * the `kay.agent` api's `filesystem` broker, the `filesystem.read` / `filesystem.write`
2188
+ * permissions it was gated by, the `{ root: "filesystem", selector }` URI backing and the URI
2189
+ * module `verbs` that went with it: plugins use `@kay/plugin-sdk/fs`, `userFiles` or
2190
+ * `familyFolder` instead. No plugin used them. Stored grants naming the retired permissions are
2191
+ * ignored, not refused. For the api surface this is a clean break with no shim and deliberately
2192
+ * NOT a load refusal, like 0.12.0: every earlier release stays in the retention list, so a
2193
+ * plugin compiled against 0.12.x that reads `api.filesystem` gets `undefined` at the call. The
2194
+ * manifest is different: a manifest that still declares URI-module `verbs` or
2195
+ * `filesystemBacking: { root: "filesystem" }` fails to parse and is refused at load (no plugin
2196
+ * declared either). A plugin that imports
2197
+ * `@kay/plugin-sdk/fs` or calls `familyFolder` declares `^0.13.0`, so an older host refuses a
2198
+ * directory or repository plugin at load.
2180
2199
  */
2181
- export declare const KAY_PLUGIN_SDK_VERSION: "0.12.5";
2200
+ export declare const KAY_PLUGIN_SDK_VERSION: "0.13.0";
2182
2201
 
2183
2202
  export declare const KAY_PLUGIN_TARGET_NAMES: readonly ["kay.agent", "kay.app", "kay.ui"];
2184
2203
 
@@ -2211,16 +2230,8 @@ export declare const KayAgentTargetManifest: z.ZodObject<{
2211
2230
  localId: z.ZodString;
2212
2231
  schemes: z.ZodArray<z.ZodString>;
2213
2232
  displayName: z.ZodOptional<z.ZodString>;
2214
- filesystemBacking: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
2233
+ filesystemBacking: z.ZodOptional<z.ZodObject<{
2215
2234
  root: z.ZodLiteral<"dataDir">;
2216
- }, z.core.$strict>, z.ZodObject<{
2217
- root: z.ZodLiteral<"filesystem">;
2218
- selector: z.ZodString;
2219
- }, z.core.$strict>], "root">>;
2220
- verbs: z.ZodOptional<z.ZodObject<{
2221
- writable: z.ZodOptional<z.ZodBoolean>;
2222
- editable: z.ZodOptional<z.ZodBoolean>;
2223
- deletable: z.ZodOptional<z.ZodBoolean>;
2224
2235
  }, z.core.$strict>>;
2225
2236
  authService: z.ZodOptional<z.ZodString>;
2226
2237
  knownResources: z.ZodOptional<z.ZodLiteral<true>>;
@@ -2559,16 +2570,8 @@ export declare const KayPluginManifestV1: z.ZodObject<{
2559
2570
  localId: z.ZodString;
2560
2571
  schemes: z.ZodArray<z.ZodString>;
2561
2572
  displayName: z.ZodOptional<z.ZodString>;
2562
- filesystemBacking: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
2573
+ filesystemBacking: z.ZodOptional<z.ZodObject<{
2563
2574
  root: z.ZodLiteral<"dataDir">;
2564
- }, z.core.$strict>, z.ZodObject<{
2565
- root: z.ZodLiteral<"filesystem">;
2566
- selector: z.ZodString;
2567
- }, z.core.$strict>], "root">>;
2568
- verbs: z.ZodOptional<z.ZodObject<{
2569
- writable: z.ZodOptional<z.ZodBoolean>;
2570
- editable: z.ZodOptional<z.ZodBoolean>;
2571
- deletable: z.ZodOptional<z.ZodBoolean>;
2572
2575
  }, z.core.$strict>>;
2573
2576
  authService: z.ZodOptional<z.ZodString>;
2574
2577
  knownResources: z.ZodOptional<z.ZodLiteral<true>>;
@@ -3720,7 +3723,7 @@ export declare function parseResolvedPluginContractV1(value: unknown): ResolvedP
3720
3723
  export declare function parseSemver(value: string): ParsedSemver | undefined;
3721
3724
 
3722
3725
  /** Every capability slug {@link PluginCapabilityClaimV1} can express, for exhaustive table checks. */
3723
- export declare const PLUGIN_CAPABILITY_SLUGS: readonly ["sessions.run", "network.connect", "web-session.request", "web-session.download", "filesystem.read", "filesystem.write", "process.spawn", "corpus.read", "signals.read", "skills.read", "workspace.command", "sessions.create", "sessions.update", "models.complete", "jev.use", "automations.write", "automations.run", "workflows.define", "session-events.subscribe", "agents.run", "dynamic-context.register", "app-data.register", "account.assert", "account.update", "agents.permissions", "tool-interception.register", "interaction.surface", "config.declare-section", "auth.own-service", "auth.shared-identity", "cli.bind", "whiteboard.discover", "whiteboard.read", "whiteboard.create", "whiteboard.update", "whiteboard.remove"];
3726
+ export declare const PLUGIN_CAPABILITY_SLUGS: readonly ["sessions.run", "network.connect", "web-session.request", "web-session.download", "process.spawn", "corpus.read", "signals.read", "skills.read", "workspace.command", "sessions.create", "sessions.update", "models.complete", "jev.use", "automations.write", "automations.run", "workflows.define", "session-events.subscribe", "agents.run", "dynamic-context.register", "app-data.register", "account.assert", "account.update", "agents.permissions", "tool-interception.register", "interaction.surface", "config.declare-section", "auth.own-service", "auth.shared-identity", "cli.bind", "whiteboard.discover", "whiteboard.read", "whiteboard.create", "whiteboard.update", "whiteboard.remove"];
3724
3727
 
3725
3728
  /** The root `<svg>` attribute a tile icon declares itself with. */
3726
3729
  export declare const PLUGIN_ICON_SHAPE_ATTRIBUTE = "data-icon-shape";
@@ -4129,18 +4132,6 @@ export declare const PluginCapabilityClaimV1: z.ZodDiscriminatedUnion<[z.ZodObje
4129
4132
  origin: z.ZodString;
4130
4133
  pathPrefix: z.ZodString;
4131
4134
  }, z.core.$strict>;
4132
- }, z.core.$strict>, z.ZodObject<{
4133
- target: z.ZodLiteral<"kay.agent">;
4134
- slug: z.ZodLiteral<"filesystem.read">;
4135
- envelope: z.ZodObject<{
4136
- root: z.ZodString;
4137
- }, z.core.$strict>;
4138
- }, z.core.$strict>, z.ZodObject<{
4139
- target: z.ZodLiteral<"kay.agent">;
4140
- slug: z.ZodLiteral<"filesystem.write">;
4141
- envelope: z.ZodObject<{
4142
- root: z.ZodString;
4143
- }, z.core.$strict>;
4144
4135
  }, z.core.$strict>, z.ZodObject<{
4145
4136
  target: z.ZodLiteral<"kay.agent">;
4146
4137
  slug: z.ZodLiteral<"process.spawn">;
@@ -4349,18 +4340,6 @@ export declare const PluginCapabilityDecisionV1: z.ZodDiscriminatedUnion<[z.ZodO
4349
4340
  origin: z.ZodString;
4350
4341
  pathPrefix: z.ZodString;
4351
4342
  }, z.core.$strict>;
4352
- }, z.core.$strict>, z.ZodObject<{
4353
- target: z.ZodLiteral<"kay.agent">;
4354
- slug: z.ZodLiteral<"filesystem.read">;
4355
- envelope: z.ZodObject<{
4356
- root: z.ZodString;
4357
- }, z.core.$strict>;
4358
- }, z.core.$strict>, z.ZodObject<{
4359
- target: z.ZodLiteral<"kay.agent">;
4360
- slug: z.ZodLiteral<"filesystem.write">;
4361
- envelope: z.ZodObject<{
4362
- root: z.ZodString;
4363
- }, z.core.$strict>;
4364
4343
  }, z.core.$strict>, z.ZodObject<{
4365
4344
  target: z.ZodLiteral<"kay.agent">;
4366
4345
  slug: z.ZodLiteral<"process.spawn">;
@@ -4564,18 +4543,6 @@ export declare const PluginCapabilityDecisionV1: z.ZodDiscriminatedUnion<[z.ZodO
4564
4543
  origin: z.ZodString;
4565
4544
  pathPrefix: z.ZodString;
4566
4545
  }, z.core.$strict>;
4567
- }, z.core.$strict>, z.ZodObject<{
4568
- target: z.ZodLiteral<"kay.agent">;
4569
- slug: z.ZodLiteral<"filesystem.read">;
4570
- envelope: z.ZodObject<{
4571
- root: z.ZodString;
4572
- }, z.core.$strict>;
4573
- }, z.core.$strict>, z.ZodObject<{
4574
- target: z.ZodLiteral<"kay.agent">;
4575
- slug: z.ZodLiteral<"filesystem.write">;
4576
- envelope: z.ZodObject<{
4577
- root: z.ZodString;
4578
- }, z.core.$strict>;
4579
4546
  }, z.core.$strict>, z.ZodObject<{
4580
4547
  target: z.ZodLiteral<"kay.agent">;
4581
4548
  slug: z.ZodLiteral<"process.spawn">;
@@ -4842,18 +4809,6 @@ export declare const PluginCapabilityRefusalV1: z.ZodObject<{
4842
4809
  origin: z.ZodString;
4843
4810
  pathPrefix: z.ZodString;
4844
4811
  }, z.core.$strict>;
4845
- }, z.core.$strict>, z.ZodObject<{
4846
- target: z.ZodLiteral<"kay.agent">;
4847
- slug: z.ZodLiteral<"filesystem.read">;
4848
- envelope: z.ZodObject<{
4849
- root: z.ZodString;
4850
- }, z.core.$strict>;
4851
- }, z.core.$strict>, z.ZodObject<{
4852
- target: z.ZodLiteral<"kay.agent">;
4853
- slug: z.ZodLiteral<"filesystem.write">;
4854
- envelope: z.ZodObject<{
4855
- root: z.ZodString;
4856
- }, z.core.$strict>;
4857
4812
  }, z.core.$strict>, z.ZodObject<{
4858
4813
  target: z.ZodLiteral<"kay.agent">;
4859
4814
  slug: z.ZodLiteral<"process.spawn">;
@@ -5951,16 +5906,8 @@ export declare const ResolvedKayAgentUriModule: z.ZodObject<{
5951
5906
  localId: z.ZodString;
5952
5907
  globalId: z.ZodString;
5953
5908
  schemes: z.ZodArray<z.ZodString>;
5954
- filesystemBacking: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
5909
+ filesystemBacking: z.ZodOptional<z.ZodObject<{
5955
5910
  root: z.ZodLiteral<"dataDir">;
5956
- }, z.core.$strict>, z.ZodObject<{
5957
- root: z.ZodLiteral<"filesystem">;
5958
- selector: z.ZodString;
5959
- }, z.core.$strict>], "root">>;
5960
- verbs: z.ZodOptional<z.ZodObject<{
5961
- writable: z.ZodOptional<z.ZodBoolean>;
5962
- editable: z.ZodOptional<z.ZodBoolean>;
5963
- deletable: z.ZodOptional<z.ZodBoolean>;
5964
5911
  }, z.core.$strict>>;
5965
5912
  knownResources: z.ZodOptional<z.ZodLiteral<true>>;
5966
5913
  }, z.core.$strict>;
@@ -6769,16 +6716,8 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
6769
6716
  localId: z.ZodString;
6770
6717
  globalId: z.ZodString;
6771
6718
  schemes: z.ZodArray<z.ZodString>;
6772
- filesystemBacking: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
6719
+ filesystemBacking: z.ZodOptional<z.ZodObject<{
6773
6720
  root: z.ZodLiteral<"dataDir">;
6774
- }, z.core.$strict>, z.ZodObject<{
6775
- root: z.ZodLiteral<"filesystem">;
6776
- selector: z.ZodString;
6777
- }, z.core.$strict>], "root">>;
6778
- verbs: z.ZodOptional<z.ZodObject<{
6779
- writable: z.ZodOptional<z.ZodBoolean>;
6780
- editable: z.ZodOptional<z.ZodBoolean>;
6781
- deletable: z.ZodOptional<z.ZodBoolean>;
6782
6721
  }, z.core.$strict>>;
6783
6722
  knownResources: z.ZodOptional<z.ZodLiteral<true>>;
6784
6723
  }, z.core.$strict>>>;
@@ -7519,6 +7458,9 @@ export declare const RETIRED_COMPATIBILITY_KEYS: readonly ["policy"];
7519
7458
  */
7520
7459
  export declare const RETIRED_PERMISSION_ASK_KEYS: readonly ["network", "process", "filesystem", "corpus", "paths", "workspace", "sessions", "automations", "hindsight", "agents", "dynamicContext", "appData", "toolInterception", "account", "device", "config", "workflows", "whiteboard"];
7521
7460
 
7461
+ /** Capability slugs retired in SDK 0.13.0; a stored grant naming one is ignored, never refused. */
7462
+ export declare const RETIRED_PLUGIN_CAPABILITY_SLUGS: readonly ["filesystem.read", "filesystem.write"];
7463
+
7522
7464
  /**
7523
7465
  * The one retired FIELD inside a surviving row: a `webSession` row's `operations` only ever fed the
7524
7466
  * deleted declaration check (the row itself stays, as routing).
@@ -8434,13 +8376,10 @@ export declare const UiSlotContribution: z.ZodObject<{
8434
8376
 
8435
8377
  export declare type UiSlotContribution = z.infer<typeof UiSlotContribution>;
8436
8378
 
8437
- /** A request for host-authorized filesystem projection; mutation needs separate verb authority. */
8438
- export declare const UriFilesystemBacking: z.ZodDiscriminatedUnion<[z.ZodObject<{
8379
+ /** A request for a read-only projection of the plugin's private data directory. */
8380
+ export declare const UriFilesystemBacking: z.ZodObject<{
8439
8381
  root: z.ZodLiteral<"dataDir">;
8440
- }, z.core.$strict>, z.ZodObject<{
8441
- root: z.ZodLiteral<"filesystem">;
8442
- selector: z.ZodString;
8443
- }, z.core.$strict>], "root">;
8382
+ }, z.core.$strict>;
8444
8383
 
8445
8384
  export declare type UriFilesystemBacking = z.infer<typeof UriFilesystemBacking>;
8446
8385
 
@@ -8448,16 +8387,8 @@ export declare const UriModuleContribution: z.ZodObject<{
8448
8387
  localId: z.ZodString;
8449
8388
  schemes: z.ZodArray<z.ZodString>;
8450
8389
  displayName: z.ZodOptional<z.ZodString>;
8451
- filesystemBacking: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
8390
+ filesystemBacking: z.ZodOptional<z.ZodObject<{
8452
8391
  root: z.ZodLiteral<"dataDir">;
8453
- }, z.core.$strict>, z.ZodObject<{
8454
- root: z.ZodLiteral<"filesystem">;
8455
- selector: z.ZodString;
8456
- }, z.core.$strict>], "root">>;
8457
- verbs: z.ZodOptional<z.ZodObject<{
8458
- writable: z.ZodOptional<z.ZodBoolean>;
8459
- editable: z.ZodOptional<z.ZodBoolean>;
8460
- deletable: z.ZodOptional<z.ZodBoolean>;
8461
8392
  }, z.core.$strict>>;
8462
8393
  authService: z.ZodOptional<z.ZodString>;
8463
8394
  knownResources: z.ZodOptional<z.ZodLiteral<true>>;
package/dist/index.js CHANGED
@@ -115,7 +115,7 @@ import { z as z2 } from "zod";
115
115
  import { z } from "zod";
116
116
  var KAY_PLUGIN_PROTOCOL_VERSION = "kay.plugin.v1";
117
117
  var KAY_PLUGIN_PROTOCOL_PACKAGE_NAME = "@kay/plugin-protocol";
118
- var KAY_PLUGIN_SDK_VERSION = "0.12.5";
118
+ var KAY_PLUGIN_SDK_VERSION = "0.13.0";
119
119
  var KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS = [
120
120
  "0.8.0",
121
121
  "0.8.1",
@@ -132,7 +132,8 @@ var KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS = [
132
132
  "0.12.1",
133
133
  "0.12.2",
134
134
  "0.12.3",
135
- "0.12.4"
135
+ "0.12.4",
136
+ "0.12.5"
136
137
  ];
137
138
  var KAY_PLUGIN_TARGET_NAMES = [
138
139
  "kay.agent",
@@ -1497,16 +1498,6 @@ var PluginCapabilityClaimV1 = z6.discriminatedUnion("slug", [
1497
1498
  pathPrefix: NonEmptyString
1498
1499
  })
1499
1500
  }),
1500
- z6.strictObject({
1501
- target: z6.literal("kay.agent"),
1502
- slug: z6.literal("filesystem.read"),
1503
- envelope: z6.strictObject({ root: NonEmptyString })
1504
- }),
1505
- z6.strictObject({
1506
- target: z6.literal("kay.agent"),
1507
- slug: z6.literal("filesystem.write"),
1508
- envelope: z6.strictObject({ root: NonEmptyString })
1509
- }),
1510
1501
  z6.strictObject({
1511
1502
  target: z6.literal("kay.agent"),
1512
1503
  slug: z6.literal("process.spawn"),
@@ -1666,13 +1657,15 @@ var PluginCapabilityClaimV1 = z6.discriminatedUnion("slug", [
1666
1657
  }),
1667
1658
  WhiteboardCapabilityClaimV1
1668
1659
  ]);
1660
+ var RETIRED_PLUGIN_CAPABILITY_SLUGS = [
1661
+ "filesystem.read",
1662
+ "filesystem.write"
1663
+ ];
1669
1664
  var PLUGIN_CAPABILITY_SLUGS = [
1670
1665
  "sessions.run",
1671
1666
  "network.connect",
1672
1667
  "web-session.request",
1673
1668
  "web-session.download",
1674
- "filesystem.read",
1675
- "filesystem.write",
1676
1669
  "process.spawn",
1677
1670
  "corpus.read",
1678
1671
  "signals.read",
@@ -1800,9 +1793,6 @@ function sameClaim(a, b) {
1800
1793
  case "web-session.request":
1801
1794
  case "web-session.download":
1802
1795
  return (b.slug === "web-session.request" || b.slug === "web-session.download") && a.envelope.origin === b.envelope.origin && a.envelope.pathPrefix === b.envelope.pathPrefix;
1803
- case "filesystem.read":
1804
- case "filesystem.write":
1805
- return (b.slug === "filesystem.read" || b.slug === "filesystem.write") && a.envelope.root === b.envelope.root;
1806
1796
  case "process.spawn":
1807
1797
  return b.slug === "process.spawn" && a.envelope.command === b.envelope.command && a.envelope.argvClass === b.envelope.argvClass;
1808
1798
  case "interaction.surface":
@@ -1870,9 +1860,6 @@ function envelopePairs(a, b) {
1870
1860
  [a.envelope.origin, b.envelope.origin],
1871
1861
  [a.envelope.pathPrefix, b.envelope.pathPrefix]
1872
1862
  ] : [];
1873
- case "filesystem.read":
1874
- case "filesystem.write":
1875
- return b.slug === "filesystem.read" || b.slug === "filesystem.write" ? [[a.envelope.root, b.envelope.root]] : [];
1876
1863
  case "process.spawn":
1877
1864
  return b.slug === "process.spawn" ? [
1878
1865
  [a.envelope.command, b.envelope.command],
@@ -2191,13 +2178,9 @@ function checkKayPluginHostCompatibility(compatibility, host) {
2191
2178
  // packages/plugin-protocol/dist/contributions.js
2192
2179
  import { z as z7 } from "zod";
2193
2180
  var OptionalDisplayName = NonEmptyString.optional();
2194
- var UriFilesystemBacking = z7.discriminatedUnion("root", [
2195
- z7.strictObject({ root: z7.literal("dataDir") }),
2196
- z7.strictObject({
2197
- root: z7.literal("filesystem"),
2198
- selector: NonEmptyString
2199
- })
2200
- ]);
2181
+ var UriFilesystemBacking = z7.strictObject({
2182
+ root: z7.literal("dataDir")
2183
+ });
2201
2184
  var ToolContribution = z7.strictObject({
2202
2185
  localId: LocalContributionId,
2203
2186
  toolName: PluginToolName,
@@ -2214,20 +2197,13 @@ var ConverterContribution = z7.strictObject({
2214
2197
  /** Extension fallbacks (no dot) used when a probe has no usable MIME type. */
2215
2198
  extensions: z7.array(FileExtensionToken).min(1).optional()
2216
2199
  });
2217
- var UriMutationVerbs = z7.strictObject({
2218
- writable: z7.boolean().optional(),
2219
- editable: z7.boolean().optional(),
2220
- deletable: z7.boolean().optional()
2221
- });
2222
- var UriModuleContributionBase = z7.strictObject({
2200
+ var UriModuleContribution = z7.strictObject({
2223
2201
  localId: LocalContributionId,
2224
2202
  schemes: z7.array(UriScheme).min(1),
2225
2203
  displayName: OptionalDisplayName,
2226
2204
  // The plugin only requests a projection. The daemon binds the effective root
2227
2205
  // and retains access control at finalization.
2228
2206
  filesystemBacking: UriFilesystemBacking.optional(),
2229
- /** Host-native mutation verbs requested for an external filesystem projection. */
2230
- verbs: UriMutationVerbs.optional(),
2231
2207
  // A local ref (no dot) must name an auth service declared in this same
2232
2208
  // manifest; a qualified ref (dotted, e.g. `google.account`) names another
2233
2209
  // plugin's already-minted global id and is recorded, not resolved, here (see
@@ -2244,19 +2220,9 @@ var UriModuleContributionBase = z7.strictObject({
2244
2220
  // `lab/user-plugins/decisions/014-known-resources-ledger.md`.
2245
2221
  knownResources: z7.literal(true).optional()
2246
2222
  });
2247
- var UriModuleContribution = UriModuleContributionBase.superRefine((module, ctx) => {
2248
- if (module.verbs !== void 0 && module.filesystemBacking?.root !== "filesystem") {
2249
- ctx.addIssue({
2250
- code: "custom",
2251
- path: ["verbs"],
2252
- message: "URI mutation verbs require external filesystem backing (root: 'filesystem')."
2253
- });
2254
- }
2255
- });
2256
- var AppUriModuleContribution = UriModuleContributionBase.omit({
2223
+ var AppUriModuleContribution = UriModuleContribution.omit({
2257
2224
  authService: true,
2258
2225
  filesystemBacking: true,
2259
- verbs: true,
2260
2226
  knownResources: true
2261
2227
  });
2262
2228
  var AppDataSourceContribution = z7.strictObject({
@@ -3866,21 +3832,8 @@ var ResolvedKayAgentUriModule = z9.strictObject({
3866
3832
  globalId: GlobalContributionId,
3867
3833
  schemes: z9.array(UriScheme).min(1),
3868
3834
  filesystemBacking: UriFilesystemBacking.optional(),
3869
- verbs: z9.strictObject({
3870
- writable: z9.boolean().optional(),
3871
- editable: z9.boolean().optional(),
3872
- deletable: z9.boolean().optional()
3873
- }).optional(),
3874
3835
  /** Mirrors `UriModuleContribution.knownResources` (host-side recording opt-in). */
3875
3836
  knownResources: z9.literal(true).optional()
3876
- }).superRefine((module, ctx) => {
3877
- if (module.verbs !== void 0 && module.filesystemBacking?.root !== "filesystem") {
3878
- ctx.addIssue({
3879
- code: "custom",
3880
- path: ["verbs"],
3881
- message: "Resolved URI mutation verbs require external filesystem backing (root: 'filesystem')."
3882
- });
3883
- }
3884
3837
  });
3885
3838
  var ResolvedKayAgentArtifactUriModule = z9.strictObject({
3886
3839
  localId: LocalContributionId,
@@ -4385,7 +4338,6 @@ function resolveKayPluginContractV1(manifest) {
4385
4338
  globalId: resolveGlobalContributionId(namespace, module.localId),
4386
4339
  schemes: [...module.schemes],
4387
4340
  ...module.filesystemBacking === void 0 ? {} : { filesystemBacking: module.filesystemBacking },
4388
- ...module.verbs === void 0 ? {} : { verbs: module.verbs },
4389
4341
  ...module.knownResources === void 0 ? {} : { knownResources: module.knownResources }
4390
4342
  }));
4391
4343
  const kayAgentArtifactUriModules = manifest.targets?.kay?.agent?.contributes?.artifactUriModules?.map((module) => ({
@@ -4802,6 +4754,7 @@ export {
4802
4754
  PluginWebSessionProbe,
4803
4755
  RETIRED_COMPATIBILITY_KEYS,
4804
4756
  RETIRED_PERMISSION_ASK_KEYS,
4757
+ RETIRED_PLUGIN_CAPABILITY_SLUGS,
4805
4758
  RETIRED_WEB_SESSION_ROW_KEYS,
4806
4759
  ReferenceOpenBehavior,
4807
4760
  ReferencePresentationContribution,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaklabs-ai/plugin-protocol",
3
- "version": "0.12.5",
3
+ "version": "0.13.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",