@yaklabs-ai/plugin-protocol 0.55.2 → 0.55.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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.55.2"
14
+ "@bonsai/plugin-protocol": "npm:@yaklabs-ai/plugin-protocol@^0.55.4"
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.55.2",
4
+ "version": "0.55.4",
5
5
  "target": "npm",
6
6
  "firstPartyLicense": "MIT",
7
7
  "bundled": [
package/dist/index.d.ts CHANGED
@@ -4958,8 +4958,18 @@ export declare const KAY_PLUGIN_PROTOCOL_VERSION: "kay.plugin.v1";
4958
4958
  * artifact usage declarations. A plugin using these declares ^0.55.1.
4959
4959
  *
4960
4960
  * 0.55.2 adds opt-in query and connection-selector preservation during URI claim normalization.
4961
+ *
4962
+ * 0.55.3 lets a signal carry the item's own text. `PluginSignal` gains an optional `body`: plain
4963
+ * text, at most `PLUGIN_SIGNAL_BODY_MAX` (20,000) characters. Gmail puts a mail's text there, so
4964
+ * Flows can keep the messages a task came from. Additive: a plugin that publishes a body declares
4965
+ * ^0.55.3.
4966
+ *
4967
+ * 0.55.4 adds `app.plugins.listServices()` under the new `plugins.read` claim: every auth service
4968
+ * of the installed, enabled plugins, with the plugin's id and display name and whether the person
4969
+ * has connected it. No account, identity or scope. Built-ins hold the claim; any other plugin needs
4970
+ * a grant. Additive; plugins calling it declare ^0.55.4.
4961
4971
  */
4962
- export declare const KAY_PLUGIN_SDK_VERSION: "0.55.2";
4972
+ export declare const KAY_PLUGIN_SDK_VERSION: "0.55.4";
4963
4973
 
4964
4974
  export declare const KAY_PLUGIN_TARGET_NAMES: readonly ["kay.agent", "kay.app", "kay.ui"];
4965
4975
 
@@ -8781,7 +8791,7 @@ export declare function parseSemver(value: string): ParsedSemver | undefined;
8781
8791
  export declare function parseWhere(source: string, keyTypes?: WhereKeyTypes): WhereParseResult;
8782
8792
 
8783
8793
  /** Every capability slug {@link PluginCapabilityClaimV1} can express, for exhaustive table checks. */
8784
- export declare const PLUGIN_CAPABILITY_SLUGS: readonly ["sessions.run", "network.connect", "web-session.request", "web-session.download", "process.spawn", "sessions.read", "signals.read", "uri.call", "endpoints.invoke", "skills.read", "skills.write", "skills.share", "plugins.set-enabled", "sessions.assign-project", "artifacts.resolve-file", "process.run", "sessions.annotate", "sessions.compact", "soul.write", "tools.describe", "workspace.command", "sessions.create", "sessions.update", "models.complete", "systemOne.use", "automations.write", "automations.run", "workflows.define", "workflows.signals", "session-events.subscribe", "agents.run", "dynamic-context.register", "app-data.register", "app-data.read", "knowledge-source.register", "artifacts.read", "session-artifacts.read", "session-artifacts.create", "account.assert", "account.update", "agents.permissions", "tool-interception.register", "interaction.surface", "config.declare-section", "auth.own-service", "auth.shared-identity", "cli.bind", "mcp.host-server", "prompt.resident", "skills.declared-source", "family-folder.root", "whiteboard.discover", "whiteboard.read", "whiteboard.create", "whiteboard.update", "whiteboard.remove", "model-selection.register", "system-prompt.register"];
8794
+ export declare const PLUGIN_CAPABILITY_SLUGS: readonly ["sessions.run", "network.connect", "web-session.request", "web-session.download", "process.spawn", "sessions.read", "signals.read", "uri.call", "endpoints.invoke", "skills.read", "skills.write", "skills.share", "plugins.set-enabled", "plugins.read", "sessions.assign-project", "artifacts.resolve-file", "process.run", "sessions.annotate", "sessions.compact", "soul.write", "tools.describe", "workspace.command", "sessions.create", "sessions.update", "models.complete", "systemOne.use", "automations.write", "automations.run", "workflows.define", "workflows.signals", "session-events.subscribe", "agents.run", "dynamic-context.register", "app-data.register", "app-data.read", "knowledge-source.register", "artifacts.read", "session-artifacts.read", "session-artifacts.create", "account.assert", "account.update", "agents.permissions", "tool-interception.register", "interaction.surface", "config.declare-section", "auth.own-service", "auth.shared-identity", "cli.bind", "mcp.host-server", "prompt.resident", "skills.declared-source", "family-folder.root", "whiteboard.discover", "whiteboard.read", "whiteboard.create", "whiteboard.update", "whiteboard.remove", "model-selection.register", "system-prompt.register"];
8785
8795
 
8786
8796
  /** Diagnostic messages carry plugin-controlled text (parse errors, module errors); bound it so a
8787
8797
  * hostile or accidental multi-megabyte error can never blow up a log line or a render surface. */
@@ -8816,6 +8826,12 @@ export declare const PLUGIN_SIGNAL_ATTACHMENT_TYPE_MAX = 127;
8816
8826
  /** At most this many entries in a signal's `attachments`; a source lists the first ones. */
8817
8827
  export declare const PLUGIN_SIGNAL_ATTACHMENTS_MAX = 10;
8818
8828
 
8829
+ /**
8830
+ * A signal's `body`, the item's own text, at most this many characters: a source cuts longer text
8831
+ * and marks the cut. Enough for a long email with its quoted history.
8832
+ */
8833
+ export declare const PLUGIN_SIGNAL_BODY_MAX = 20000;
8834
+
8819
8835
  /** The `kind` values of `PluginSignal` v1. `status` is system state that clears itself. */
8820
8836
  export declare const PLUGIN_SIGNAL_KINDS: readonly ["message", "request", "mention", "invite", "status"];
8821
8837
 
@@ -9489,6 +9505,10 @@ export declare const PluginCapabilityClaimInputV1: z.ZodCustom<{
9489
9505
  target: "kay.app";
9490
9506
  slug: "plugins.set-enabled";
9491
9507
  envelope: Record<string, never>;
9508
+ } | {
9509
+ target: "kay.app";
9510
+ slug: "plugins.read";
9511
+ envelope: Record<string, never>;
9492
9512
  } | {
9493
9513
  target: "kay.app";
9494
9514
  slug: "sessions.assign-project";
@@ -9779,6 +9799,10 @@ export declare const PluginCapabilityClaimInputV1: z.ZodCustom<{
9779
9799
  target: "kay.app";
9780
9800
  slug: "plugins.set-enabled";
9781
9801
  envelope: Record<string, never>;
9802
+ } | {
9803
+ target: "kay.app";
9804
+ slug: "plugins.read";
9805
+ envelope: Record<string, never>;
9782
9806
  } | {
9783
9807
  target: "kay.app";
9784
9808
  slug: "sessions.assign-project";
@@ -10079,6 +10103,10 @@ export declare const PluginCapabilityClaimV1: z.ZodDiscriminatedUnion<[z.ZodObje
10079
10103
  target: z.ZodLiteral<"kay.app">;
10080
10104
  slug: z.ZodLiteral<"plugins.set-enabled">;
10081
10105
  envelope: z.ZodObject<{}, z.core.$strict>;
10106
+ }, z.core.$strict>, z.ZodObject<{
10107
+ target: z.ZodLiteral<"kay.app">;
10108
+ slug: z.ZodLiteral<"plugins.read">;
10109
+ envelope: z.ZodObject<{}, z.core.$strict>;
10082
10110
  }, z.core.$strict>, z.ZodObject<{
10083
10111
  target: z.ZodLiteral<"kay.app">;
10084
10112
  slug: z.ZodLiteral<"sessions.assign-project">;
@@ -10425,6 +10453,10 @@ export declare const PluginCapabilityDecisionV1: z.ZodDiscriminatedUnion<[z.ZodO
10425
10453
  target: z.ZodLiteral<"kay.app">;
10426
10454
  slug: z.ZodLiteral<"plugins.set-enabled">;
10427
10455
  envelope: z.ZodObject<{}, z.core.$strict>;
10456
+ }, z.core.$strict>, z.ZodObject<{
10457
+ target: z.ZodLiteral<"kay.app">;
10458
+ slug: z.ZodLiteral<"plugins.read">;
10459
+ envelope: z.ZodObject<{}, z.core.$strict>;
10428
10460
  }, z.core.$strict>, z.ZodObject<{
10429
10461
  target: z.ZodLiteral<"kay.app">;
10430
10462
  slug: z.ZodLiteral<"sessions.assign-project">;
@@ -10770,6 +10802,10 @@ export declare const PluginCapabilityDecisionV1: z.ZodDiscriminatedUnion<[z.ZodO
10770
10802
  target: z.ZodLiteral<"kay.app">;
10771
10803
  slug: z.ZodLiteral<"plugins.set-enabled">;
10772
10804
  envelope: z.ZodObject<{}, z.core.$strict>;
10805
+ }, z.core.$strict>, z.ZodObject<{
10806
+ target: z.ZodLiteral<"kay.app">;
10807
+ slug: z.ZodLiteral<"plugins.read">;
10808
+ envelope: z.ZodObject<{}, z.core.$strict>;
10773
10809
  }, z.core.$strict>, z.ZodObject<{
10774
10810
  target: z.ZodLiteral<"kay.app">;
10775
10811
  slug: z.ZodLiteral<"sessions.assign-project">;
@@ -11149,6 +11185,10 @@ export declare const PluginCapabilityRefusalV1: z.ZodObject<{
11149
11185
  target: z.ZodLiteral<"kay.app">;
11150
11186
  slug: z.ZodLiteral<"plugins.set-enabled">;
11151
11187
  envelope: z.ZodObject<{}, z.core.$strict>;
11188
+ }, z.core.$strict>, z.ZodObject<{
11189
+ target: z.ZodLiteral<"kay.app">;
11190
+ slug: z.ZodLiteral<"plugins.read">;
11191
+ envelope: z.ZodObject<{}, z.core.$strict>;
11152
11192
  }, z.core.$strict>, z.ZodObject<{
11153
11193
  target: z.ZodLiteral<"kay.app">;
11154
11194
  slug: z.ZodLiteral<"sessions.assign-project">;
@@ -12542,6 +12582,7 @@ export declare const PluginSignal: z.ZodObject<{
12542
12582
  }>>;
12543
12583
  title: z.ZodOptional<z.ZodString>;
12544
12584
  snippet: z.ZodOptional<z.ZodString>;
12585
+ body: z.ZodOptional<z.ZodString>;
12545
12586
  actor: z.ZodOptional<z.ZodObject<{
12546
12587
  name: z.ZodOptional<z.ZodString>;
12547
12588
  uri: z.ZodString;
@@ -12592,6 +12633,7 @@ export declare const PluginSignalPublish: z.ZodObject<{
12592
12633
  }>>;
12593
12634
  title: z.ZodOptional<z.ZodString>;
12594
12635
  snippet: z.ZodOptional<z.ZodString>;
12636
+ body: z.ZodOptional<z.ZodString>;
12595
12637
  actor: z.ZodOptional<z.ZodObject<{
12596
12638
  name: z.ZodOptional<z.ZodString>;
12597
12639
  uri: z.ZodString;
@@ -12743,7 +12785,7 @@ declare type PrereleaseIdentifier = string | number;
12743
12785
  * plugin is refused one with layer `release`, nothing offers a grant for it, and a stored grant
12744
12786
  * naming one confers nothing. Each entry backs one SDK method a built-in calls in place of a daemon
12745
12787
  * object it used to take at creation; making it public later means adding consent copy and moving
12746
- * it out of this list (`docs/plugin-host/private-api.md`).
12788
+ * it out of this list (`docs/plans/plugin-host/private-api.md`).
12747
12789
  */
12748
12790
  export declare const PRIVATE_PLUGIN_CAPABILITY_SLUGS: readonly PluginCapabilitySlug[];
12749
12791
 
package/dist/index.js CHANGED
@@ -260,8 +260,10 @@ 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.55.2";
263
+ var KAY_PLUGIN_SDK_VERSION = "0.55.4";
264
264
  var KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS = [
265
+ "0.55.3",
266
+ "0.55.2",
265
267
  "0.55.1",
266
268
  "0.55.0",
267
269
  "0.54.2",
@@ -1807,6 +1809,7 @@ var PLUGIN_CAPABILITY_SLUGS = [
1807
1809
  "skills.write",
1808
1810
  "skills.share",
1809
1811
  "plugins.set-enabled",
1812
+ "plugins.read",
1810
1813
  "sessions.assign-project",
1811
1814
  "artifacts.resolve-file",
1812
1815
  "process.run",
@@ -2014,6 +2017,13 @@ function createAuthoritySchemas(canonical) {
2014
2017
  slug: z11.literal("plugins.set-enabled"),
2015
2018
  envelope: z11.strictObject({})
2016
2019
  }),
2020
+ z11.strictObject({
2021
+ // See which installed, enabled plugins declare which auth services and whether each is
2022
+ // connected: ids, display names and a boolean, never an account, identity or scope.
2023
+ target: z11.literal("kay.app"),
2024
+ slug: z11.literal("plugins.read"),
2025
+ envelope: z11.strictObject({})
2026
+ }),
2017
2027
  z11.strictObject({
2018
2028
  // Set the project of sessions no current call or event is about (accepting a project
2019
2029
  // suggestion, undoing an automatic filing). Private (PRIVATE_PLUGIN_CAPABILITY_SLUGS): whether
@@ -2366,6 +2376,7 @@ function sameClaim(a, b) {
2366
2376
  case "skills.write":
2367
2377
  case "skills.share":
2368
2378
  case "plugins.set-enabled":
2379
+ case "plugins.read":
2369
2380
  case "sessions.assign-project":
2370
2381
  case "artifacts.resolve-file":
2371
2382
  case "process.run":
@@ -2461,6 +2472,7 @@ function envelopePairs(a, b) {
2461
2472
  case "skills.write":
2462
2473
  case "skills.share":
2463
2474
  case "plugins.set-enabled":
2475
+ case "plugins.read":
2464
2476
  case "sessions.assign-project":
2465
2477
  case "artifacts.resolve-file":
2466
2478
  case "process.run":
@@ -2953,6 +2965,7 @@ __export(plugin_events_exports, {
2953
2965
  PLUGIN_SIGNAL_ATTACHMENTS_MAX: () => PLUGIN_SIGNAL_ATTACHMENTS_MAX,
2954
2966
  PLUGIN_SIGNAL_ATTACHMENT_NAME_MAX: () => PLUGIN_SIGNAL_ATTACHMENT_NAME_MAX,
2955
2967
  PLUGIN_SIGNAL_ATTACHMENT_TYPE_MAX: () => PLUGIN_SIGNAL_ATTACHMENT_TYPE_MAX,
2968
+ PLUGIN_SIGNAL_BODY_MAX: () => PLUGIN_SIGNAL_BODY_MAX,
2956
2969
  PLUGIN_SIGNAL_KINDS: () => PLUGIN_SIGNAL_KINDS,
2957
2970
  PLUGIN_SIGNAL_LABELS_MAX: () => PLUGIN_SIGNAL_LABELS_MAX,
2958
2971
  PLUGIN_SIGNAL_LABEL_MAX: () => PLUGIN_SIGNAL_LABEL_MAX,
@@ -2986,6 +2999,7 @@ var PLUGIN_SIGNAL_KINDS = [
2986
2999
  ];
2987
3000
  var PLUGIN_SIGNAL_TITLE_MAX = 300;
2988
3001
  var PLUGIN_SIGNAL_SNIPPET_MAX = 500;
3002
+ var PLUGIN_SIGNAL_BODY_MAX = 2e4;
2989
3003
  var PLUGIN_SIGNAL_LABELS_MAX = 20;
2990
3004
  var PLUGIN_SIGNAL_LABEL_MAX = 64;
2991
3005
  var PLUGIN_SIGNAL_ATTACHMENTS_MAX = 10;
@@ -3055,6 +3069,13 @@ function createPluginEventsSchemas(canonical) {
3055
3069
  direction: z12.enum(["in", "out"]).optional(),
3056
3070
  title: z12.string().max(PLUGIN_SIGNAL_TITLE_MAX).optional(),
3057
3071
  snippet: z12.string().max(PLUGIN_SIGNAL_SNIPPET_MAX).optional(),
3072
+ /**
3073
+ * The item's own text as plain text (a mail's body with its quoted history, a chat
3074
+ * message, an invite's description), at most `PLUGIN_SIGNAL_BODY_MAX` characters. A
3075
+ * consumer may keep it as the record of what was said; a source that cannot read it leaves
3076
+ * it out.
3077
+ */
3078
+ body: z12.string().max(PLUGIN_SIGNAL_BODY_MAX).optional(),
3058
3079
  actor: z12.strictObject({
3059
3080
  name: z12.string().max(PLUGIN_SIGNAL_TITLE_MAX).optional(),
3060
3081
  uri: PluginEventUri2
@@ -5053,7 +5074,7 @@ function createManifestSchemas(canonical) {
5053
5074
  contextContributors: z18.array(ContextContributorContribution2).optional(),
5054
5075
  // Vendored MCP servers this plugin ships (see `McpServerContributions`). Each is hosted only
5055
5076
  // for a plugin holding `mcp.host-server` for its name and URL; that is decided at
5056
- // composition, not here (see ARCHITECTURE.md "Validation Law").
5077
+ // composition, not here (see AGENTS.md).
5057
5078
  mcpServers: McpServerContributions2.optional(),
5058
5079
  // Handler restricted to endpoint-only by the manifest-level refinement below.
5059
5080
  commands: z18.array(CommandContribution2).optional()
@@ -8610,6 +8631,7 @@ export {
8610
8631
  PLUGIN_SIGNAL_ATTACHMENTS_MAX,
8611
8632
  PLUGIN_SIGNAL_ATTACHMENT_NAME_MAX,
8612
8633
  PLUGIN_SIGNAL_ATTACHMENT_TYPE_MAX,
8634
+ PLUGIN_SIGNAL_BODY_MAX,
8613
8635
  PLUGIN_SIGNAL_KINDS,
8614
8636
  PLUGIN_SIGNAL_LABELS_MAX,
8615
8637
  PLUGIN_SIGNAL_LABEL_MAX,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaklabs-ai/plugin-protocol",
3
- "version": "0.55.2",
3
+ "version": "0.55.4",
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",