@yaklabs-ai/plugin-protocol 0.11.0 → 0.12.2

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.11.0"
14
+ "@kay/plugin-protocol": "npm:@yaklabs-ai/plugin-protocol@^0.12.2"
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.11.0",
4
+ "version": "0.12.2",
5
5
  "target": "npm",
6
6
  "firstPartyLicense": "MIT",
7
7
  "bundled": [],
@@ -12,12 +12,6 @@
12
12
  "source": "https://github.com/colinhacks/zod",
13
13
  "note": "Installed as a consumer dependency; it is not bundled into the staged artifacts.",
14
14
  "versionRange": "^4.0.0"
15
- },
16
- {
17
- "name": "@typesafe-ai/sdk",
18
- "license": "MIT",
19
- "source": "https://github.com/typesafe-ai/typesafe-sdk-js",
20
- "note": "Types-only: the SDK re-exports the vendor's Jev client types, and the vendor's nominal class must stay a single declaration across entrypoints. Installed as a consumer dependency; a plugin never declares it itself."
21
15
  }
22
16
  ]
23
17
  }
package/dist/index.d.ts CHANGED
@@ -263,6 +263,7 @@ export declare const ArtifactProvenanceCaptureContextSchema: z.ZodObject<{
263
263
  "turn-settled": "turn-settled";
264
264
  "phase-shift": "phase-shift";
265
265
  "human-message": "human-message";
266
+ "ui-action": "ui-action";
266
267
  }>;
267
268
  entryId: z.ZodString;
268
269
  runId: z.ZodOptional<z.ZodString>;
@@ -355,6 +356,7 @@ export declare const ArtifactProvenanceCaptureContextSchema: z.ZodObject<{
355
356
  "turn-settled": "turn-settled";
356
357
  "phase-shift": "phase-shift";
357
358
  "human-message": "human-message";
359
+ "ui-action": "ui-action";
358
360
  }>;
359
361
  entryId: z.ZodString;
360
362
  runId: z.ZodOptional<z.ZodString>;
@@ -451,6 +453,7 @@ export declare const ArtifactProvenanceCause: z.ZodDiscriminatedUnion<[z.ZodObje
451
453
  "turn-settled": "turn-settled";
452
454
  "phase-shift": "phase-shift";
453
455
  "human-message": "human-message";
456
+ "ui-action": "ui-action";
454
457
  }>;
455
458
  entryId: z.ZodString;
456
459
  runId: z.ZodOptional<z.ZodString>;
@@ -528,6 +531,7 @@ export declare const ArtifactProvenanceEnvelopeV1: z.ZodPipe<z.ZodUnknown, z.Zod
528
531
  "turn-settled": "turn-settled";
529
532
  "phase-shift": "phase-shift";
530
533
  "human-message": "human-message";
534
+ "ui-action": "ui-action";
531
535
  }>;
532
536
  entryId: z.ZodString;
533
537
  runId: z.ZodOptional<z.ZodString>;
@@ -619,6 +623,7 @@ export declare const ArtifactProvenanceEnvelopeV1: z.ZodPipe<z.ZodUnknown, z.Zod
619
623
  "turn-settled": "turn-settled";
620
624
  "phase-shift": "phase-shift";
621
625
  "human-message": "human-message";
626
+ "ui-action": "ui-action";
622
627
  }>;
623
628
  entryId: z.ZodString;
624
629
  runId: z.ZodOptional<z.ZodString>;
@@ -735,6 +740,7 @@ export declare const ArtifactProvenanceEnvelopeV1: z.ZodPipe<z.ZodUnknown, z.Zod
735
740
  "turn-settled": "turn-settled";
736
741
  "phase-shift": "phase-shift";
737
742
  "human-message": "human-message";
743
+ "ui-action": "ui-action";
738
744
  }>;
739
745
  entryId: z.ZodString;
740
746
  runId: z.ZodOptional<z.ZodString>;
@@ -906,6 +912,7 @@ export declare const ArtifactProvenanceMutation: z.ZodObject<{
906
912
  "turn-settled": "turn-settled";
907
913
  "phase-shift": "phase-shift";
908
914
  "human-message": "human-message";
915
+ "ui-action": "ui-action";
909
916
  }>;
910
917
  entryId: z.ZodString;
911
918
  runId: z.ZodOptional<z.ZodString>;
@@ -1001,6 +1008,7 @@ export declare const ArtifactProvenanceOperation: z.ZodObject<{
1001
1008
  "turn-settled": "turn-settled";
1002
1009
  "phase-shift": "phase-shift";
1003
1010
  "human-message": "human-message";
1011
+ "ui-action": "ui-action";
1004
1012
  }>;
1005
1013
  entryId: z.ZodString;
1006
1014
  runId: z.ZodOptional<z.ZodString>;
@@ -1141,6 +1149,7 @@ export declare const ArtifactProvenanceSession: z.ZodObject<{
1141
1149
  "turn-settled": "turn-settled";
1142
1150
  "phase-shift": "phase-shift";
1143
1151
  "human-message": "human-message";
1152
+ "ui-action": "ui-action";
1144
1153
  }>;
1145
1154
  entryId: z.ZodString;
1146
1155
  runId: z.ZodOptional<z.ZodString>;
@@ -1869,6 +1878,23 @@ export declare const HttpsUrl: z.ZodURL;
1869
1878
 
1870
1879
  export declare type HttpsUrl = z.infer<typeof HttpsUrl>;
1871
1880
 
1881
+ /**
1882
+ * An Interaction driver (a backend behind the harness-owned `interaction_*` tools) the plugin's
1883
+ * `kay.agent` entrypoint registers with `api.registerInteractionDriver`. The driver's `id` must be
1884
+ * this `localId`; `kind` says whether it drives web pages ("browser", Browser Interaction) or
1885
+ * native apps ("computer-use", Computer Use Interaction).
1886
+ */
1887
+ export declare const InteractionDriverContribution: z.ZodObject<{
1888
+ localId: z.ZodString;
1889
+ displayName: z.ZodOptional<z.ZodString>;
1890
+ kind: z.ZodEnum<{
1891
+ browser: "browser";
1892
+ "computer-use": "computer-use";
1893
+ }>;
1894
+ }, z.core.$strict>;
1895
+
1896
+ export declare type InteractionDriverContribution = z.infer<typeof InteractionDriverContribution>;
1897
+
1872
1898
  /** Whether the report permits the plugin to load. */
1873
1899
  export declare function isCompatible(report: KayPluginCompatibilityReport): boolean;
1874
1900
 
@@ -1935,7 +1961,7 @@ export declare const KAY_APP_DATA_SNAPSHOT_MAX_BYTES: number;
1935
1961
  export declare const KAY_EVENT_PUBLISHER_ID: "kay";
1936
1962
 
1937
1963
  /** Released SDK contracts still implemented by the host, alongside its current SDK. */
1938
- 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"];
1964
+ 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"];
1939
1965
 
1940
1966
  export declare const KAY_PLUGIN_PROTOCOL_PACKAGE_NAME: "@kay/plugin-protocol";
1941
1967
 
@@ -2069,8 +2095,55 @@ export declare const KAY_PLUGIN_PROTOCOL_VERSION: "kay.plugin.v1";
2069
2095
  * new list, and an exhaustive switch over gap codes must handle the new one.
2070
2096
  * 0.10.0 stays in the runtime-contract retention list below, because a plugin
2071
2097
  * compiled against it reads the same run detail and simply ignores the list.
2098
+ *
2099
+ * 0.11.1 adds read-only skill metadata (`app.skills`: `list`, `read`, `history`),
2100
+ * checked per call against the new `skills.read` claim. Additive: a plugin
2101
+ * compiled against 0.11.0 never reads the member. A plugin that calls it
2102
+ * declares `^0.11.1`, so an older host refuses it at load instead of the call
2103
+ * failing.
2104
+ *
2105
+ * 0.12.0 replaces the vendor client `api.withJev` hands its callback. `use`
2106
+ * now receives Kay's own `JevClient` (`@kay/plugin-sdk/jev`): one method,
2107
+ * `classify({state, questions})`, in Kay's question and answer vocabulary
2108
+ * (yes/no is `bool` answering `probability`; instructions and criteria are
2109
+ * text; the state is a JSON object), rejecting with a classified
2110
+ * `JevCallError`. TypeSafe's `TypeSafeClient`, `SystemOneRequest`,
2111
+ * `SystemOneResult`, `Questions`, and the `NoulResponse`/`ChoiceResponse`/
2112
+ * `ScoreResponse` re-exports are gone, and the SDK no longer depends on
2113
+ * `@typesafe-ai/sdk`. `app.signals.observe` takes the same questions, answers
2114
+ * `invalid` for a state that is not a JSON object, and its reads type stored
2115
+ * answers as `KayAppSignalAnswer` (a `JevAnswer`, or a yes/no answer recorded
2116
+ * before 0.12.0 as `{type: "noul", noul}`).
2117
+ *
2118
+ * A clean break with no shim, and deliberately NOT a load refusal: every
2119
+ * earlier release stays in the retention list below. `withJev`'s contract was
2120
+ * always that `use` may fail and the fallback then runs, so a plugin compiled
2121
+ * against 0.11 that calls `jev.systemOne` throws inside `use` and runs its
2122
+ * fallback on this host. This fallback guarantee does not cover `signals.observe`:
2123
+ * old text/array states now return `invalid`; old object states with `noul`
2124
+ * questions can classify but receive `bool` answers, so reading `.noul` yields
2125
+ * undefined. Stored pre-0.12 answers retain `noul`. Retention allows activation,
2126
+ * not vocabulary compatibility: old plugins must migrate both surfaces.
2127
+ *
2128
+ * 0.12.1 adds `app.time` (`KayAppTime`): `snapshot()` returns the daemon's clock and the time
2129
+ * zone the user is in, as `{ nowMs, zone, zoneSource }`, where `zoneSource: "utc-fallback"` marks a
2130
+ * zone the host does not know. The member is always present and ungated, like `app.paths`.
2131
+ * Additive: a plugin compiled against 0.12.0 never reads it. A plugin that calls it declares
2132
+ * `^0.12.1`, so an older host refuses a directory or repository plugin at load instead of the
2133
+ * call failing. That check needs a host that knows its own version, and it never runs for a
2134
+ * bundled plugin, which ships with the SDK it calls.
2135
+ *
2136
+ * 0.12.2 adds the `ui-action` session event (`KayAppUiActionSessionEvent`), a fourth member of the
2137
+ * `KayAppSessionEvent` union: the daemon publishes it once per accepted answer to a card the agent
2138
+ * drew with `ui_render` (pressing Send on a drafted message, submitting a form), carrying the
2139
+ * projected entry's id and the answered call's id and no payload. A typed message still publishes
2140
+ * only `human-message`. Additive: a plugin compiled against 0.12.1 never subscribes to it, and
2141
+ * code that narrows the union by `type` meets one more member, as it must for any future one. A
2142
+ * plugin that subscribes to it declares `^0.12.2`, so an older host refuses a directory or
2143
+ * repository plugin at load instead of the subscription never firing. That check never runs for a
2144
+ * bundled plugin, which ships with the SDK it calls.
2072
2145
  */
2073
- export declare const KAY_PLUGIN_SDK_VERSION: "0.11.0";
2146
+ export declare const KAY_PLUGIN_SDK_VERSION: "0.12.2";
2074
2147
 
2075
2148
  export declare const KAY_PLUGIN_TARGET_NAMES: readonly ["kay.agent", "kay.app", "kay.ui"];
2076
2149
 
@@ -2163,6 +2236,14 @@ export declare const KayAgentTargetManifest: z.ZodObject<{
2163
2236
  displayName: z.ZodOptional<z.ZodString>;
2164
2237
  schemes: z.ZodOptional<z.ZodArray<z.ZodString>>;
2165
2238
  }, z.core.$strict>>>;
2239
+ interactionDrivers: z.ZodOptional<z.ZodArray<z.ZodObject<{
2240
+ localId: z.ZodString;
2241
+ displayName: z.ZodOptional<z.ZodString>;
2242
+ kind: z.ZodEnum<{
2243
+ browser: "browser";
2244
+ "computer-use": "computer-use";
2245
+ }>;
2246
+ }, z.core.$strict>>>;
2166
2247
  entityResolvers: z.ZodOptional<z.ZodArray<z.ZodObject<{
2167
2248
  localId: z.ZodString;
2168
2249
  displayName: z.ZodOptional<z.ZodString>;
@@ -2503,6 +2584,14 @@ export declare const KayPluginManifestV1: z.ZodObject<{
2503
2584
  displayName: z.ZodOptional<z.ZodString>;
2504
2585
  schemes: z.ZodOptional<z.ZodArray<z.ZodString>>;
2505
2586
  }, z.core.$strict>>>;
2587
+ interactionDrivers: z.ZodOptional<z.ZodArray<z.ZodObject<{
2588
+ localId: z.ZodString;
2589
+ displayName: z.ZodOptional<z.ZodString>;
2590
+ kind: z.ZodEnum<{
2591
+ browser: "browser";
2592
+ "computer-use": "computer-use";
2593
+ }>;
2594
+ }, z.core.$strict>>>;
2506
2595
  entityResolvers: z.ZodOptional<z.ZodArray<z.ZodObject<{
2507
2596
  localId: z.ZodString;
2508
2597
  displayName: z.ZodOptional<z.ZodString>;
@@ -2767,12 +2856,12 @@ export declare const KayPluginManifestV1: z.ZodObject<{
2767
2856
  capabilities: z.ZodOptional<z.ZodObject<{
2768
2857
  endpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
2769
2858
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
2859
+ "skills.read": "skills.read";
2770
2860
  "automations.run": "automations.run";
2771
2861
  "navigation.open-session": "navigation.open-session";
2772
2862
  "cost.read": "cost.read";
2773
2863
  "billing.read": "billing.read";
2774
2864
  "context.read": "context.read";
2775
- "skills.read": "skills.read";
2776
2865
  "memory.read": "memory.read";
2777
2866
  "usage.read": "usage.read";
2778
2867
  "self-improvement.read": "self-improvement.read";
@@ -3203,12 +3292,12 @@ export declare const KayPluginProtocolVersion: z.ZodLiteral<"kay.plugin.v1">;
3203
3292
  export declare type KayPluginProtocolVersion = z.infer<typeof KayPluginProtocolVersion>;
3204
3293
 
3205
3294
  export declare const KayUiAppHostCapability: z.ZodEnum<{
3295
+ "skills.read": "skills.read";
3206
3296
  "automations.run": "automations.run";
3207
3297
  "navigation.open-session": "navigation.open-session";
3208
3298
  "cost.read": "cost.read";
3209
3299
  "billing.read": "billing.read";
3210
3300
  "context.read": "context.read";
3211
- "skills.read": "skills.read";
3212
3301
  "memory.read": "memory.read";
3213
3302
  "usage.read": "usage.read";
3214
3303
  "self-improvement.read": "self-improvement.read";
@@ -3349,12 +3438,12 @@ export declare const KayUiTargetManifest: z.ZodObject<{
3349
3438
  capabilities: z.ZodOptional<z.ZodObject<{
3350
3439
  endpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
3351
3440
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
3441
+ "skills.read": "skills.read";
3352
3442
  "automations.run": "automations.run";
3353
3443
  "navigation.open-session": "navigation.open-session";
3354
3444
  "cost.read": "cost.read";
3355
3445
  "billing.read": "billing.read";
3356
3446
  "context.read": "context.read";
3357
- "skills.read": "skills.read";
3358
3447
  "memory.read": "memory.read";
3359
3448
  "usage.read": "usage.read";
3360
3449
  "self-improvement.read": "self-improvement.read";
@@ -3590,7 +3679,7 @@ export declare function parseResolvedPluginContractV1(value: unknown): ResolvedP
3590
3679
  export declare function parseSemver(value: string): ParsedSemver | undefined;
3591
3680
 
3592
3681
  /** Every capability slug {@link PluginCapabilityClaimV1} can express, for exhaustive table checks. */
3593
- 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", "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", "config.declare-section", "auth.own-service", "auth.shared-identity", "cli.bind", "whiteboard.discover", "whiteboard.read", "whiteboard.create", "whiteboard.update", "whiteboard.remove"];
3682
+ 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"];
3594
3683
 
3595
3684
  /** The root `<svg>` attribute a tile icon declares itself with. */
3596
3685
  export declare const PLUGIN_ICON_SHAPE_ATTRIBUTE = "data-icon-shape";
@@ -4026,6 +4115,10 @@ export declare const PluginCapabilityClaimV1: z.ZodDiscriminatedUnion<[z.ZodObje
4026
4115
  target: z.ZodLiteral<"kay.app">;
4027
4116
  slug: z.ZodLiteral<"signals.read">;
4028
4117
  envelope: z.ZodObject<{}, z.core.$strict>;
4118
+ }, z.core.$strict>, z.ZodObject<{
4119
+ target: z.ZodLiteral<"kay.app">;
4120
+ slug: z.ZodLiteral<"skills.read">;
4121
+ envelope: z.ZodObject<{}, z.core.$strict>;
4029
4122
  }, z.core.$strict>, z.ZodObject<{
4030
4123
  target: z.ZodLiteral<"kay.app">;
4031
4124
  slug: z.ZodLiteral<"workspace.command">;
@@ -4130,6 +4223,15 @@ export declare const PluginCapabilityClaimV1: z.ZodDiscriminatedUnion<[z.ZodObje
4130
4223
  target: z.ZodLiteral<"kay.agent">;
4131
4224
  slug: z.ZodLiteral<"tool-interception.register">;
4132
4225
  envelope: z.ZodObject<{}, z.core.$strict>;
4226
+ }, z.core.$strict>, z.ZodObject<{
4227
+ target: z.ZodLiteral<"kay.agent">;
4228
+ slug: z.ZodLiteral<"interaction.surface">;
4229
+ envelope: z.ZodObject<{
4230
+ surface: z.ZodEnum<{
4231
+ "browser-pane": "browser-pane";
4232
+ desktop: "desktop";
4233
+ }>;
4234
+ }, z.core.$strict>;
4133
4235
  }, z.core.$strict>, z.ZodObject<{
4134
4236
  target: z.ZodLiteral<"plugin">;
4135
4237
  slug: z.ZodLiteral<"config.declare-section">;
@@ -4233,6 +4335,10 @@ export declare const PluginCapabilityDecisionV1: z.ZodDiscriminatedUnion<[z.ZodO
4233
4335
  target: z.ZodLiteral<"kay.app">;
4234
4336
  slug: z.ZodLiteral<"signals.read">;
4235
4337
  envelope: z.ZodObject<{}, z.core.$strict>;
4338
+ }, z.core.$strict>, z.ZodObject<{
4339
+ target: z.ZodLiteral<"kay.app">;
4340
+ slug: z.ZodLiteral<"skills.read">;
4341
+ envelope: z.ZodObject<{}, z.core.$strict>;
4236
4342
  }, z.core.$strict>, z.ZodObject<{
4237
4343
  target: z.ZodLiteral<"kay.app">;
4238
4344
  slug: z.ZodLiteral<"workspace.command">;
@@ -4337,6 +4443,15 @@ export declare const PluginCapabilityDecisionV1: z.ZodDiscriminatedUnion<[z.ZodO
4337
4443
  target: z.ZodLiteral<"kay.agent">;
4338
4444
  slug: z.ZodLiteral<"tool-interception.register">;
4339
4445
  envelope: z.ZodObject<{}, z.core.$strict>;
4446
+ }, z.core.$strict>, z.ZodObject<{
4447
+ target: z.ZodLiteral<"kay.agent">;
4448
+ slug: z.ZodLiteral<"interaction.surface">;
4449
+ envelope: z.ZodObject<{
4450
+ surface: z.ZodEnum<{
4451
+ "browser-pane": "browser-pane";
4452
+ desktop: "desktop";
4453
+ }>;
4454
+ }, z.core.$strict>;
4340
4455
  }, z.core.$strict>, z.ZodObject<{
4341
4456
  target: z.ZodLiteral<"plugin">;
4342
4457
  slug: z.ZodLiteral<"config.declare-section">;
@@ -4435,6 +4550,10 @@ export declare const PluginCapabilityDecisionV1: z.ZodDiscriminatedUnion<[z.ZodO
4435
4550
  target: z.ZodLiteral<"kay.app">;
4436
4551
  slug: z.ZodLiteral<"signals.read">;
4437
4552
  envelope: z.ZodObject<{}, z.core.$strict>;
4553
+ }, z.core.$strict>, z.ZodObject<{
4554
+ target: z.ZodLiteral<"kay.app">;
4555
+ slug: z.ZodLiteral<"skills.read">;
4556
+ envelope: z.ZodObject<{}, z.core.$strict>;
4438
4557
  }, z.core.$strict>, z.ZodObject<{
4439
4558
  target: z.ZodLiteral<"kay.app">;
4440
4559
  slug: z.ZodLiteral<"workspace.command">;
@@ -4539,6 +4658,15 @@ export declare const PluginCapabilityDecisionV1: z.ZodDiscriminatedUnion<[z.ZodO
4539
4658
  target: z.ZodLiteral<"kay.agent">;
4540
4659
  slug: z.ZodLiteral<"tool-interception.register">;
4541
4660
  envelope: z.ZodObject<{}, z.core.$strict>;
4661
+ }, z.core.$strict>, z.ZodObject<{
4662
+ target: z.ZodLiteral<"kay.agent">;
4663
+ slug: z.ZodLiteral<"interaction.surface">;
4664
+ envelope: z.ZodObject<{
4665
+ surface: z.ZodEnum<{
4666
+ "browser-pane": "browser-pane";
4667
+ desktop: "desktop";
4668
+ }>;
4669
+ }, z.core.$strict>;
4542
4670
  }, z.core.$strict>, z.ZodObject<{
4543
4671
  target: z.ZodLiteral<"plugin">;
4544
4672
  slug: z.ZodLiteral<"config.declare-section">;
@@ -4700,6 +4828,10 @@ export declare const PluginCapabilityRefusalV1: z.ZodObject<{
4700
4828
  target: z.ZodLiteral<"kay.app">;
4701
4829
  slug: z.ZodLiteral<"signals.read">;
4702
4830
  envelope: z.ZodObject<{}, z.core.$strict>;
4831
+ }, z.core.$strict>, z.ZodObject<{
4832
+ target: z.ZodLiteral<"kay.app">;
4833
+ slug: z.ZodLiteral<"skills.read">;
4834
+ envelope: z.ZodObject<{}, z.core.$strict>;
4703
4835
  }, z.core.$strict>, z.ZodObject<{
4704
4836
  target: z.ZodLiteral<"kay.app">;
4705
4837
  slug: z.ZodLiteral<"workspace.command">;
@@ -4804,6 +4936,15 @@ export declare const PluginCapabilityRefusalV1: z.ZodObject<{
4804
4936
  target: z.ZodLiteral<"kay.agent">;
4805
4937
  slug: z.ZodLiteral<"tool-interception.register">;
4806
4938
  envelope: z.ZodObject<{}, z.core.$strict>;
4939
+ }, z.core.$strict>, z.ZodObject<{
4940
+ target: z.ZodLiteral<"kay.agent">;
4941
+ slug: z.ZodLiteral<"interaction.surface">;
4942
+ envelope: z.ZodObject<{
4943
+ surface: z.ZodEnum<{
4944
+ "browser-pane": "browser-pane";
4945
+ desktop: "desktop";
4946
+ }>;
4947
+ }, z.core.$strict>;
4807
4948
  }, z.core.$strict>, z.ZodObject<{
4808
4949
  target: z.ZodLiteral<"plugin">;
4809
4950
  slug: z.ZodLiteral<"config.declare-section">;
@@ -4922,6 +5063,7 @@ export declare const PluginContributionKind: z.ZodEnum<{
4922
5063
  artifactUriModule: "artifactUriModule";
4923
5064
  cliBinding: "cliBinding";
4924
5065
  searchProvider: "searchProvider";
5066
+ interactionDriver: "interactionDriver";
4925
5067
  entityResolver: "entityResolver";
4926
5068
  agentRenderer: "agentRenderer";
4927
5069
  eventDefinition: "eventDefinition";
@@ -5899,12 +6041,12 @@ export declare const ResolvedKayUiApp: z.ZodObject<{
5899
6041
  globalId: z.ZodString;
5900
6042
  }, z.core.$strict>>>;
5901
6043
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6044
+ "skills.read": "skills.read";
5902
6045
  "automations.run": "automations.run";
5903
6046
  "navigation.open-session": "navigation.open-session";
5904
6047
  "cost.read": "cost.read";
5905
6048
  "billing.read": "billing.read";
5906
6049
  "context.read": "context.read";
5907
- "skills.read": "skills.read";
5908
6050
  "memory.read": "memory.read";
5909
6051
  "usage.read": "usage.read";
5910
6052
  "self-improvement.read": "self-improvement.read";
@@ -6185,6 +6327,7 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
6185
6327
  artifactUriModule: "artifactUriModule";
6186
6328
  cliBinding: "cliBinding";
6187
6329
  searchProvider: "searchProvider";
6330
+ interactionDriver: "interactionDriver";
6188
6331
  entityResolver: "entityResolver";
6189
6332
  agentRenderer: "agentRenderer";
6190
6333
  eventDefinition: "eventDefinition";
@@ -6748,12 +6891,12 @@ export declare const ResolvedPluginContractV1: z.ZodObject<{
6748
6891
  globalId: z.ZodString;
6749
6892
  }, z.core.$strict>>>;
6750
6893
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
6894
+ "skills.read": "skills.read";
6751
6895
  "automations.run": "automations.run";
6752
6896
  "navigation.open-session": "navigation.open-session";
6753
6897
  "cost.read": "cost.read";
6754
6898
  "billing.read": "billing.read";
6755
6899
  "context.read": "context.read";
6756
- "skills.read": "skills.read";
6757
6900
  "memory.read": "memory.read";
6758
6901
  "usage.read": "usage.read";
6759
6902
  "self-improvement.read": "self-improvement.read";
@@ -6789,6 +6932,7 @@ export declare const ResolvedPluginContributionId: z.ZodObject<{
6789
6932
  artifactUriModule: "artifactUriModule";
6790
6933
  cliBinding: "cliBinding";
6791
6934
  searchProvider: "searchProvider";
6935
+ interactionDriver: "interactionDriver";
6792
6936
  entityResolver: "entityResolver";
6793
6937
  agentRenderer: "agentRenderer";
6794
6938
  eventDefinition: "eventDefinition";
@@ -7524,6 +7668,7 @@ export declare const SessionCausedByEvent: z.ZodObject<{
7524
7668
  "turn-settled": "turn-settled";
7525
7669
  "phase-shift": "phase-shift";
7526
7670
  "human-message": "human-message";
7671
+ "ui-action": "ui-action";
7527
7672
  }>;
7528
7673
  entryId: z.ZodString;
7529
7674
  runId: z.ZodOptional<z.ZodString>;
@@ -7747,6 +7892,7 @@ export declare const SessionProvenanceRecord: z.ZodObject<{
7747
7892
  "turn-settled": "turn-settled";
7748
7893
  "phase-shift": "phase-shift";
7749
7894
  "human-message": "human-message";
7895
+ "ui-action": "ui-action";
7750
7896
  }>;
7751
7897
  entryId: z.ZodString;
7752
7898
  runId: z.ZodOptional<z.ZodString>;
@@ -8089,6 +8235,13 @@ export declare type TurnMessageOrigin =
8089
8235
  /** Neither the session nor the message establishes human authorship. */
8090
8236
  | "unknown";
8091
8237
 
8238
+ /**
8239
+ * Who wrote one message, read from what the transcript carries: `clientIntentId` AND
8240
+ * `details.deliveryId` mean a person typed it. The one definition the turn packet and every other
8241
+ * reader of a message's authorship share.
8242
+ */
8243
+ export declare function turnMessageOrigin(entry: Pick<TurnPacketEntry, "message">): TurnMessageOrigin;
8244
+
8092
8245
  export declare interface TurnPacket {
8093
8246
  /** The message that opened the turn. */
8094
8247
  readonly personMessage: TurnPacketMessage;
@@ -8149,12 +8302,12 @@ export declare interface TurnPacketMessage {
8149
8302
  export declare const UiAppCapabilities: z.ZodObject<{
8150
8303
  endpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
8151
8304
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
8305
+ "skills.read": "skills.read";
8152
8306
  "automations.run": "automations.run";
8153
8307
  "navigation.open-session": "navigation.open-session";
8154
8308
  "cost.read": "cost.read";
8155
8309
  "billing.read": "billing.read";
8156
8310
  "context.read": "context.read";
8157
- "skills.read": "skills.read";
8158
8311
  "memory.read": "memory.read";
8159
8312
  "usage.read": "usage.read";
8160
8313
  "self-improvement.read": "self-improvement.read";
@@ -8185,12 +8338,12 @@ export declare const UiAppContribution: z.ZodObject<{
8185
8338
  capabilities: z.ZodOptional<z.ZodObject<{
8186
8339
  endpoints: z.ZodOptional<z.ZodArray<z.ZodString>>;
8187
8340
  host: z.ZodOptional<z.ZodArray<z.ZodEnum<{
8341
+ "skills.read": "skills.read";
8188
8342
  "automations.run": "automations.run";
8189
8343
  "navigation.open-session": "navigation.open-session";
8190
8344
  "cost.read": "cost.read";
8191
8345
  "billing.read": "billing.read";
8192
8346
  "context.read": "context.read";
8193
- "skills.read": "skills.read";
8194
8347
  "memory.read": "memory.read";
8195
8348
  "usage.read": "usage.read";
8196
8349
  "self-improvement.read": "self-improvement.read";
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ function textOf(entry) {
30
30
  return "";
31
31
  return content.map((part) => typeof part === "object" && part !== null && part.type === "text" && typeof part.text === "string" ? part.text : "").join("");
32
32
  }
33
- function originOf(entry) {
33
+ function turnMessageOrigin(entry) {
34
34
  const m = entry.message;
35
35
  if (m === void 0 || typeof m.clientIntentId !== "string")
36
36
  return "unknown";
@@ -71,7 +71,7 @@ function turnPacket(entries, settleEntryId, options = {}) {
71
71
  entryId: entry.id,
72
72
  timestamp: entry.timestamp,
73
73
  text: textOf(entry),
74
- origin: originOf(entry)
74
+ origin: turnMessageOrigin(entry)
75
75
  });
76
76
  return {
77
77
  personMessage: toPacket(opener),
@@ -96,7 +96,7 @@ function precedingPersonMessages(entries, packet, count) {
96
96
  continue;
97
97
  if (e.type !== "message" || e.message?.role !== "user")
98
98
  continue;
99
- if (originOf(e) !== "human-verified")
99
+ if (turnMessageOrigin(e) !== "human-verified")
100
100
  continue;
101
101
  found.push({
102
102
  entryId: e.id,
@@ -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.11.0";
118
+ var KAY_PLUGIN_SDK_VERSION = "0.12.2";
119
119
  var KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS = [
120
120
  "0.8.0",
121
121
  "0.8.1",
@@ -125,7 +125,11 @@ var KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS = [
125
125
  "0.8.5",
126
126
  "0.9.0",
127
127
  "0.9.1",
128
- "0.10.0"
128
+ "0.10.0",
129
+ "0.11.0",
130
+ "0.11.1",
131
+ "0.12.0",
132
+ "0.12.1"
129
133
  ];
130
134
  var KAY_PLUGIN_TARGET_NAMES = [
131
135
  "kay.agent",
@@ -344,7 +348,12 @@ var SessionCausedByEventShape = z3.strictObject({
344
348
  /** Required when `kind` is `"session-event"` or absent; must be omitted when `kind` is `"backfill"`. */
345
349
  event: z3.strictObject({
346
350
  /** {@link KayAppSessionEventType} in `@kay/plugin-sdk`, mirrored: a closed, extensible union. */
347
- type: z3.enum(["turn-settled", "phase-shift", "human-message"]),
351
+ type: z3.enum([
352
+ "turn-settled",
353
+ "phase-shift",
354
+ "human-message",
355
+ "ui-action"
356
+ ]),
348
357
  entryId: NonEmptyString2,
349
358
  /** The source run captured at the event boundary; absence remains unresolved. */
350
359
  runId: NonEmptyString2.optional(),
@@ -1516,6 +1525,14 @@ var PluginCapabilityClaimV1 = z6.discriminatedUnion("slug", [
1516
1525
  slug: z6.literal("signals.read"),
1517
1526
  envelope: z6.strictObject({})
1518
1527
  }),
1528
+ z6.strictObject({
1529
+ // Read-only metadata about every managed skill: identity, versions, history, suggestions.
1530
+ // Never a skill's bytes (an agent reads those through `skill://`) and never a write. An
1531
+ // empty envelope because the grant itself is the visibility decision, as with `signals.read`.
1532
+ target: z6.literal("kay.app"),
1533
+ slug: z6.literal("skills.read"),
1534
+ envelope: z6.strictObject({})
1535
+ }),
1519
1536
  z6.strictObject({
1520
1537
  target: z6.literal("kay.app"),
1521
1538
  slug: z6.literal("workspace.command"),
@@ -1614,6 +1631,12 @@ var PluginCapabilityClaimV1 = z6.discriminatedUnion("slug", [
1614
1631
  slug: z6.literal("tool-interception.register"),
1615
1632
  envelope: z6.strictObject({})
1616
1633
  }),
1634
+ z6.strictObject({
1635
+ target: z6.literal("kay.agent"),
1636
+ slug: z6.literal("interaction.surface"),
1637
+ /** The one Kay-shipped interaction surface this plugin may drive; one claim per surface. */
1638
+ envelope: z6.strictObject({ surface: z6.enum(["browser-pane", "desktop"]) })
1639
+ }),
1617
1640
  z6.strictObject({
1618
1641
  target: z6.literal("plugin"),
1619
1642
  slug: z6.literal("config.declare-section"),
@@ -1650,6 +1673,7 @@ var PLUGIN_CAPABILITY_SLUGS = [
1650
1673
  "process.spawn",
1651
1674
  "corpus.read",
1652
1675
  "signals.read",
1676
+ "skills.read",
1653
1677
  "workspace.command",
1654
1678
  "sessions.create",
1655
1679
  "sessions.update",
@@ -1666,6 +1690,7 @@ var PLUGIN_CAPABILITY_SLUGS = [
1666
1690
  "account.update",
1667
1691
  "agents.permissions",
1668
1692
  "tool-interception.register",
1693
+ "interaction.surface",
1669
1694
  "config.declare-section",
1670
1695
  "auth.own-service",
1671
1696
  "auth.shared-identity",
@@ -1754,6 +1779,7 @@ function sameClaim(a, b) {
1754
1779
  case "sessions.update":
1755
1780
  case "corpus.read":
1756
1781
  case "signals.read":
1782
+ case "skills.read":
1757
1783
  case "workspace.command":
1758
1784
  case "models.complete":
1759
1785
  case "jev.use":
@@ -1776,6 +1802,8 @@ function sameClaim(a, b) {
1776
1802
  return (b.slug === "filesystem.read" || b.slug === "filesystem.write") && a.envelope.root === b.envelope.root;
1777
1803
  case "process.spawn":
1778
1804
  return b.slug === "process.spawn" && a.envelope.command === b.envelope.command && a.envelope.argvClass === b.envelope.argvClass;
1805
+ case "interaction.surface":
1806
+ return b.slug === "interaction.surface" && a.envelope.surface === b.envelope.surface;
1779
1807
  case "dynamic-context.register":
1780
1808
  return b.slug === "dynamic-context.register" && a.envelope.contributor === b.envelope.contributor;
1781
1809
  case "app-data.register":
@@ -1818,6 +1846,7 @@ function envelopePairs(a, b) {
1818
1846
  case "sessions.update":
1819
1847
  case "corpus.read":
1820
1848
  case "signals.read":
1849
+ case "skills.read":
1821
1850
  case "workspace.command":
1822
1851
  case "models.complete":
1823
1852
  case "jev.use":
@@ -1846,6 +1875,8 @@ function envelopePairs(a, b) {
1846
1875
  [a.envelope.command, b.envelope.command],
1847
1876
  [a.envelope.argvClass, b.envelope.argvClass]
1848
1877
  ] : [];
1878
+ case "interaction.surface":
1879
+ return b.slug === "interaction.surface" ? [[a.envelope.surface, b.envelope.surface]] : [];
1849
1880
  case "dynamic-context.register":
1850
1881
  return b.slug === "dynamic-context.register" ? [[a.envelope.contributor, b.envelope.contributor]] : [];
1851
1882
  case "app-data.register":
@@ -2387,6 +2418,11 @@ var SearchProviderContribution = z7.strictObject({
2387
2418
  displayName: OptionalDisplayName,
2388
2419
  schemes: z7.array(UriScheme).optional()
2389
2420
  });
2421
+ var InteractionDriverContribution = z7.strictObject({
2422
+ localId: LocalContributionId,
2423
+ displayName: OptionalDisplayName,
2424
+ kind: z7.enum(["browser", "computer-use"])
2425
+ });
2390
2426
  var EntityResolverContribution = z7.strictObject({
2391
2427
  localId: LocalContributionId,
2392
2428
  displayName: OptionalDisplayName,
@@ -2643,6 +2679,7 @@ var PluginContributionKind = z7.enum([
2643
2679
  "resource",
2644
2680
  "skill",
2645
2681
  "searchProvider",
2682
+ "interactionDriver",
2646
2683
  "entityResolver",
2647
2684
  "agentRenderer",
2648
2685
  "endpoint",
@@ -2749,6 +2786,7 @@ var KayAgentTargetManifest = z8.strictObject({
2749
2786
  resources: z8.array(ResourceContribution).optional(),
2750
2787
  skills: z8.array(SkillContribution).optional(),
2751
2788
  searchProviders: z8.array(SearchProviderContribution).optional(),
2789
+ interactionDrivers: z8.array(InteractionDriverContribution).optional(),
2752
2790
  entityResolvers: z8.array(EntityResolverContribution).optional(),
2753
2791
  renderers: z8.array(AgentRenderContribution).optional(),
2754
2792
  // Handler restricted to skill | tool by the manifest-level refinement below (see
@@ -3712,6 +3750,7 @@ function collectDeclaredContributionIds(manifest) {
3712
3750
  pushContributionIds(output, ["targets", "kay", "agent", "contributes", "resources"], agent?.resources);
3713
3751
  pushContributionIds(output, ["targets", "kay", "agent", "contributes", "skills"], agent?.skills);
3714
3752
  pushContributionIds(output, ["targets", "kay", "agent", "contributes", "searchProviders"], agent?.searchProviders);
3753
+ pushContributionIds(output, ["targets", "kay", "agent", "contributes", "interactionDrivers"], agent?.interactionDrivers);
3715
3754
  pushContributionIds(output, ["targets", "kay", "agent", "contributes", "entityResolvers"], agent?.entityResolvers);
3716
3755
  pushContributionIds(output, ["targets", "kay", "agent", "contributes", "renderers"], agent?.renderers);
3717
3756
  pushContributionIds(output, ["targets", "kay", "agent", "contributes", "commands"], agent?.commands);
@@ -4053,6 +4092,7 @@ function collectContributionSources(manifest) {
4053
4092
  pushAll(output, "kay.agent", "resource", agent?.resources);
4054
4093
  pushAll(output, "kay.agent", "skill", agent?.skills);
4055
4094
  pushAll(output, "kay.agent", "searchProvider", agent?.searchProviders);
4095
+ pushAll(output, "kay.agent", "interactionDriver", agent?.interactionDrivers);
4056
4096
  pushAll(output, "kay.agent", "entityResolver", agent?.entityResolvers);
4057
4097
  pushAll(output, "kay.agent", "agentRenderer", agent?.renderers);
4058
4098
  pushAll(output, "kay.agent", "command", agent?.commands);
@@ -4677,6 +4717,7 @@ export {
4677
4717
  GlobalContributionId,
4678
4718
  HttpStatusCode,
4679
4719
  HttpsUrl,
4720
+ InteractionDriverContribution,
4680
4721
  JsonObject,
4681
4722
  JsonPointer,
4682
4723
  JsonSchema,
@@ -4872,6 +4913,7 @@ export {
4872
4913
  satisfiesSemverRange,
4873
4914
  sessionHealthEntrySchema,
4874
4915
  sessionHealthPWellDecile,
4916
+ turnMessageOrigin,
4875
4917
  turnPacket,
4876
4918
  urlHostWithinDomain,
4877
4919
  validateKayUiEventSubscription,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yaklabs-ai/plugin-protocol",
3
- "version": "0.11.0",
3
+ "version": "0.12.2",
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",