@yaklabs-ai/plugin-protocol 0.55.4 → 0.55.6
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 +1 -1
- package/THIRD-PARTY-INVENTORY.json +1 -1
- package/dist/index.d.ts +121 -2
- package/dist/index.js +437 -363
- package/package.json +1 -1
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.
|
|
263
|
+
var KAY_PLUGIN_SDK_VERSION = "0.55.6";
|
|
264
264
|
var KAY_PLUGIN_COMPATIBLE_SDK_VERSIONS = [
|
|
265
|
+
"0.55.5",
|
|
266
|
+
"0.55.4",
|
|
265
267
|
"0.55.3",
|
|
266
268
|
"0.55.2",
|
|
267
269
|
"0.55.1",
|
|
@@ -1815,6 +1817,8 @@ var PLUGIN_CAPABILITY_SLUGS = [
|
|
|
1815
1817
|
"process.run",
|
|
1816
1818
|
"sessions.annotate",
|
|
1817
1819
|
"sessions.compact",
|
|
1820
|
+
"sessions.state",
|
|
1821
|
+
"compaction.reset-text",
|
|
1818
1822
|
"soul.write",
|
|
1819
1823
|
"tools.describe",
|
|
1820
1824
|
"workspace.command",
|
|
@@ -1865,7 +1869,8 @@ var PRIVATE_PLUGIN_CAPABILITY_SLUGS = [
|
|
|
1865
1869
|
"workflows.signals",
|
|
1866
1870
|
"sessions.assign-project",
|
|
1867
1871
|
"artifacts.resolve-file",
|
|
1868
|
-
"process.run"
|
|
1872
|
+
"process.run",
|
|
1873
|
+
"compaction.reset-text"
|
|
1869
1874
|
];
|
|
1870
1875
|
function isPrivateCapabilityClaim(claim) {
|
|
1871
1876
|
return PRIVATE_PLUGIN_CAPABILITY_SLUGS.includes(claim.slug);
|
|
@@ -2063,6 +2068,23 @@ function createAuthoritySchemas(canonical) {
|
|
|
2063
2068
|
slug: z11.literal("sessions.compact"),
|
|
2064
2069
|
envelope: z11.strictObject({})
|
|
2065
2070
|
}),
|
|
2071
|
+
z11.strictObject({
|
|
2072
|
+
// Read and write this plugin's own state entries in a session's transcript
|
|
2073
|
+
// (`app.sessions.readState` / `writeState`): custom entries stored under the plugin's own
|
|
2074
|
+
// id, each write checked against the newest one. A write is bound like `sessions.annotate`
|
|
2075
|
+
// to the session whose event the calling handler is answering; a read is not bound.
|
|
2076
|
+
target: z11.literal("kay.app"),
|
|
2077
|
+
slug: z11.literal("sessions.state"),
|
|
2078
|
+
envelope: z11.strictObject({})
|
|
2079
|
+
}),
|
|
2080
|
+
z11.strictObject({
|
|
2081
|
+
// Supply the working state a conversation's reset uses in place of the summary: the text the
|
|
2082
|
+
// plugin's declared `contributes.resetText` entry holds, checked by herd before it is used.
|
|
2083
|
+
// Private (PRIVATE_PLUGIN_CAPABILITY_SLUGS): only a plugin the release carries may hold it.
|
|
2084
|
+
target: z11.literal("kay.app"),
|
|
2085
|
+
slug: z11.literal("compaction.reset-text"),
|
|
2086
|
+
envelope: z11.strictObject({})
|
|
2087
|
+
}),
|
|
2066
2088
|
z11.strictObject({
|
|
2067
2089
|
// Read and rewrite the soul file every new conversation is told. Private
|
|
2068
2090
|
// (PRIVATE_PLUGIN_CAPABILITY_SLUGS): only a plugin the release carries may hold it.
|
|
@@ -2382,6 +2404,8 @@ function sameClaim(a, b) {
|
|
|
2382
2404
|
case "process.run":
|
|
2383
2405
|
case "sessions.annotate":
|
|
2384
2406
|
case "sessions.compact":
|
|
2407
|
+
case "sessions.state":
|
|
2408
|
+
case "compaction.reset-text":
|
|
2385
2409
|
case "soul.write":
|
|
2386
2410
|
case "tools.describe":
|
|
2387
2411
|
case "workspace.command":
|
|
@@ -2478,6 +2502,8 @@ function envelopePairs(a, b) {
|
|
|
2478
2502
|
case "process.run":
|
|
2479
2503
|
case "sessions.annotate":
|
|
2480
2504
|
case "sessions.compact":
|
|
2505
|
+
case "sessions.state":
|
|
2506
|
+
case "compaction.reset-text":
|
|
2481
2507
|
case "soul.write":
|
|
2482
2508
|
case "tools.describe":
|
|
2483
2509
|
case "workspace.command":
|
|
@@ -4934,7 +4960,7 @@ var ShellCommandStep = z16.discriminatedUnion("kind", [
|
|
|
4934
4960
|
]);
|
|
4935
4961
|
|
|
4936
4962
|
// packages/plugin-protocol/dist/manifest.js
|
|
4937
|
-
import { z as
|
|
4963
|
+
import { z as z19 } from "zod";
|
|
4938
4964
|
|
|
4939
4965
|
// packages/plugin-protocol/dist/workload-purposes.js
|
|
4940
4966
|
import { z as z17 } from "zod";
|
|
@@ -4943,6 +4969,42 @@ var PluginWorkloadPurpose = z17.strictObject({
|
|
|
4943
4969
|
workloadClass: z17.enum(["dreaming", "hindsight"])
|
|
4944
4970
|
});
|
|
4945
4971
|
|
|
4972
|
+
// packages/plugin-protocol/dist/reset-text.js
|
|
4973
|
+
import { z as z18 } from "zod";
|
|
4974
|
+
|
|
4975
|
+
// packages/plugin-protocol/dist/session-state.js
|
|
4976
|
+
var PLUGIN_STATE_ENTRY_NAME_PATTERN = /^[a-z][a-z0-9-]{0,63}$/;
|
|
4977
|
+
var PLUGIN_STATE_ENTRY_MAX_BYTES = 256 * 1024;
|
|
4978
|
+
var PLUGIN_STATE_ENTRY_MAX_DEPTH = 64;
|
|
4979
|
+
var PLUGIN_STATE_ENTRY_TYPE_PREFIX = "plugin-state:";
|
|
4980
|
+
function pluginStateEntryCustomType(pluginId, name) {
|
|
4981
|
+
return PLUGIN_STATE_ENTRY_NAME_PATTERN.test(name) ? `${PLUGIN_STATE_ENTRY_TYPE_PREFIX}${pluginId}:${name}` : void 0;
|
|
4982
|
+
}
|
|
4983
|
+
function isPluginStateEntryCustomType(customType) {
|
|
4984
|
+
return customType.startsWith(PLUGIN_STATE_ENTRY_TYPE_PREFIX);
|
|
4985
|
+
}
|
|
4986
|
+
|
|
4987
|
+
// packages/plugin-protocol/dist/reset-text.js
|
|
4988
|
+
var RESET_TEXT_MAX_CHARS = 18e3;
|
|
4989
|
+
var EntryAddress = z18.strictObject({
|
|
4990
|
+
sessionId: z18.string().min(1),
|
|
4991
|
+
entryId: z18.string().min(1)
|
|
4992
|
+
});
|
|
4993
|
+
var ResetTextEntry = z18.strictObject({
|
|
4994
|
+
version: z18.literal(1),
|
|
4995
|
+
/**
|
|
4996
|
+
* The newest conversation entry the text accounts for: a message of the session's context, by the
|
|
4997
|
+
* transcript id the plugin reads it under. It names the session the text was written for, so a
|
|
4998
|
+
* fork's copy of its parent's entry covers nothing in the fork.
|
|
4999
|
+
*/
|
|
5000
|
+
coveredThrough: EntryAddress,
|
|
5001
|
+
/** The working state as Markdown, without the harness ledger. */
|
|
5002
|
+
text: z18.string().min(1).max(RESET_TEXT_MAX_CHARS)
|
|
5003
|
+
});
|
|
5004
|
+
var ResetTextContribution = z18.strictObject({
|
|
5005
|
+
entry: z18.string().regex(PLUGIN_STATE_ENTRY_NAME_PATTERN)
|
|
5006
|
+
});
|
|
5007
|
+
|
|
4946
5008
|
// packages/plugin-protocol/dist/synthetic-contributions.js
|
|
4947
5009
|
function resolveConfigSectionContributionLocalId(section) {
|
|
4948
5010
|
return `config-${toLocalContributionIdFragment(section)}`;
|
|
@@ -4966,34 +5028,34 @@ function createManifestSchemas(canonical) {
|
|
|
4966
5028
|
const { AgentRenderContribution: AgentRenderContribution2, ApprovalTypeContribution: ApprovalTypeContribution2, WorkflowContribution: WorkflowContribution2, PluginCardContribution: PluginCardContribution2, AppDataMaterializerContribution: AppDataMaterializerContribution2, AppDataSourceContribution: AppDataSourceContribution2, AppUriModuleContribution: AppUriModuleContribution2, AppEventSubscription: AppEventSubscription2, ArtifactUriModuleContribution: ArtifactUriModuleContribution2, CliBindingContribution: CliBindingContribution2, CommandContribution: CommandContribution2, ContextContributorContribution: ContextContributorContribution2, ConverterContribution: ConverterContribution2, SessionReaderContribution: SessionReaderContribution2, DeviceDelegationContribution: DeviceDelegationContribution2, EndpointContribution: EndpointContribution2, EntityResolverContribution: EntityResolverContribution2, GitHostContribution: GitHostContribution2, McpServerContributions: McpServerContributions2, PluginEventDefinitionContribution: PluginEventDefinitionContribution2, PluginNotificationRuleContribution: PluginNotificationRuleContribution2, PluginProductEventContribution: PluginProductEventContribution2, ResourceContribution: ResourceContribution2, ReferencePresentationContribution: ReferencePresentationContribution2, PluginSkillSourceDeclaration: PluginSkillSourceDeclaration2, InteractionDriverContribution: InteractionDriverContribution2, SearchProviderContribution: SearchProviderContribution2, SkillContribution: SkillContribution2, ThemeContribution: ThemeContribution2, AgentToolContribution: AgentToolContribution2, ToolContribution: ToolContribution2, UiCommandContribution: UiCommandContribution2, UiAppContribution: UiAppContribution2, UiRailEntryContribution: UiRailEntryContribution2, UiToastPreviewContribution: UiToastPreviewContribution2, UiPageContribution: UiPageContribution2, UiEventSubscriptionContribution: UiEventSubscriptionContribution2, UiSlotContribution: UiSlotContribution2, UriModuleContribution: UriModuleContribution2, WhiteboardTypeContribution: WhiteboardTypeContribution2, WorkingDocumentProviderContribution: WorkingDocumentProviderContribution2 } = canonical ? canonicalContributionSchemas : contributions_exports;
|
|
4967
5029
|
const { HttpsUrl: HttpsUrl2, LocalContributionId: LocalContributionId2, NonEmptyString: NonEmptyString3, PackageAssetPath: PackageAssetPath2, PluginId: PluginId2, PluginNamespace: PluginNamespace2, RegistrableDomain: RegistrableDomain2, SignedInStatusCode: SignedInStatusCode2, TargetEntrypoint: TargetEntrypoint2 } = canonical ? canonicalCommonSchemas : common_exports;
|
|
4968
5030
|
const { PluginPermissionManifest: PluginPermissionManifest2 } = canonical ? canonicalPermissionSchemas : permissions_exports;
|
|
4969
|
-
const KayAgentTargetManifest2 =
|
|
5031
|
+
const KayAgentTargetManifest2 = z19.strictObject({
|
|
4970
5032
|
entrypoint: TargetEntrypoint2,
|
|
4971
|
-
contributes:
|
|
4972
|
-
tools:
|
|
4973
|
-
converters:
|
|
4974
|
-
uriModules:
|
|
5033
|
+
contributes: z19.strictObject({
|
|
5034
|
+
tools: z19.array(AgentToolContribution2).optional(),
|
|
5035
|
+
converters: z19.array(ConverterContribution2).optional(),
|
|
5036
|
+
uriModules: z19.array(UriModuleContribution2).optional(),
|
|
4975
5037
|
// Host-composed artifact-backed schemes (see `ArtifactUriModuleContribution`): the plugin
|
|
4976
5038
|
// declares scheme + editability; the daemon binds each to the kernel's artifact lifecycle
|
|
4977
5039
|
// per session. Separate from `uriModules` (plugin-implemented backends) precisely because
|
|
4978
5040
|
// the plugin registers NOTHING for these at activation.
|
|
4979
|
-
artifactUriModules:
|
|
4980
|
-
cliBindings:
|
|
5041
|
+
artifactUriModules: z19.array(ArtifactUriModuleContribution2).optional(),
|
|
5042
|
+
cliBindings: z19.array(CliBindingContribution2).optional(),
|
|
4981
5043
|
// Which git hosts this plugin's credential serves (see `GitHostContribution`): a
|
|
4982
5044
|
// declaration, so a plugin for any git backend gets credentialed clones without
|
|
4983
5045
|
// the daemon learning its name. Sibling of `cliBindings` because both answer the
|
|
4984
5046
|
// same question - which of this plugin's auth services a host-side consumer
|
|
4985
5047
|
// resolves - for two different transports.
|
|
4986
|
-
gitHosts:
|
|
4987
|
-
resources:
|
|
4988
|
-
skills:
|
|
4989
|
-
searchProviders:
|
|
4990
|
-
interactionDrivers:
|
|
4991
|
-
entityResolvers:
|
|
4992
|
-
renderers:
|
|
5048
|
+
gitHosts: z19.array(GitHostContribution2).optional(),
|
|
5049
|
+
resources: z19.array(ResourceContribution2).optional(),
|
|
5050
|
+
skills: z19.array(SkillContribution2).optional(),
|
|
5051
|
+
searchProviders: z19.array(SearchProviderContribution2).optional(),
|
|
5052
|
+
interactionDrivers: z19.array(InteractionDriverContribution2).optional(),
|
|
5053
|
+
entityResolvers: z19.array(EntityResolverContribution2).optional(),
|
|
5054
|
+
renderers: z19.array(AgentRenderContribution2).optional(),
|
|
4993
5055
|
// Handler restricted to skill | tool by the manifest-level refinement below (see
|
|
4994
5056
|
// `CommandContribution`'s doc for why the restriction is not expressed in the type, and
|
|
4995
5057
|
// `CommandHandler`'s doc for why there is no promptTemplate variant to declare here).
|
|
4996
|
-
commands:
|
|
5058
|
+
commands: z19.array(CommandContribution2).optional()
|
|
4997
5059
|
}).optional(),
|
|
4998
5060
|
/**
|
|
4999
5061
|
* The plugin's primer skill - the `localId` of one of its own declared
|
|
@@ -5029,8 +5091,8 @@ function createManifestSchemas(canonical) {
|
|
|
5029
5091
|
* grant a person approved), and a body over 500 words is dropped.
|
|
5030
5092
|
*/
|
|
5031
5093
|
prompt: PackageAssetPath2.optional(),
|
|
5032
|
-
promptOrder:
|
|
5033
|
-
familyFolder:
|
|
5094
|
+
promptOrder: z19.number().finite().optional(),
|
|
5095
|
+
familyFolder: z19.strictObject({ scope: z19.literal("root") }).optional(),
|
|
5034
5096
|
/**
|
|
5035
5097
|
* External origins of skills this plugin claims as its own (see
|
|
5036
5098
|
* {@link PluginSkillSourceDeclaration}). Acquired by the daemon at boot and landed under the
|
|
@@ -5041,64 +5103,67 @@ function createManifestSchemas(canonical) {
|
|
|
5041
5103
|
* acquisition, not declared here, so there is nothing for the resolved contract to mint a
|
|
5042
5104
|
* `globalId` for at parse time.
|
|
5043
5105
|
*/
|
|
5044
|
-
skillSources:
|
|
5106
|
+
skillSources: z19.array(PluginSkillSourceDeclaration2).optional()
|
|
5045
5107
|
});
|
|
5046
|
-
const KayAppTargetManifest2 =
|
|
5108
|
+
const KayAppTargetManifest2 = z19.strictObject({
|
|
5047
5109
|
// Optional, like `kay.ui`'s: a target may carry only declarative `contributes` (e.g. a plugin
|
|
5048
5110
|
// that ships nothing but `mcpServers`) with no app-lifetime module for the host to load.
|
|
5049
5111
|
entrypoint: TargetEntrypoint2.optional(),
|
|
5050
|
-
artifacts:
|
|
5051
|
-
contributes:
|
|
5112
|
+
artifacts: z19.strictObject({ outputs: z19.literal(true) }).optional(),
|
|
5113
|
+
contributes: z19.strictObject({
|
|
5052
5114
|
// Session tools implemented by the app-lifetime activation (registered once, injected into
|
|
5053
5115
|
// every session with a host-stamped session context) - the tool counterpart of `uriModules`
|
|
5054
5116
|
// below. Same descriptor shape as kay.agent tools; `toolName` shares ONE flat session
|
|
5055
5117
|
// namespace with them (enforced by the manifest-level refinement below).
|
|
5056
|
-
tools:
|
|
5057
|
-
endpoints:
|
|
5058
|
-
cards:
|
|
5059
|
-
uriModules:
|
|
5060
|
-
dataSources:
|
|
5061
|
-
whiteboardTypes:
|
|
5118
|
+
tools: z19.array(ToolContribution2).optional(),
|
|
5119
|
+
endpoints: z19.array(EndpointContribution2).optional(),
|
|
5120
|
+
cards: z19.array(PluginCardContribution2).optional(),
|
|
5121
|
+
uriModules: z19.array(AppUriModuleContribution2).optional(),
|
|
5122
|
+
dataSources: z19.array(AppDataSourceContribution2).optional(),
|
|
5123
|
+
whiteboardTypes: z19.array(WhiteboardTypeContribution2).optional(),
|
|
5062
5124
|
// Document sources whose pull, push and revision check the app entrypoint registers.
|
|
5063
|
-
workingDocumentProviders:
|
|
5064
|
-
approvalTypes:
|
|
5065
|
-
workflows:
|
|
5066
|
-
eventDefinitions:
|
|
5125
|
+
workingDocumentProviders: z19.array(WorkingDocumentProviderContribution2).optional(),
|
|
5126
|
+
approvalTypes: z19.array(ApprovalTypeContribution2).optional(),
|
|
5127
|
+
workflows: z19.array(WorkflowContribution2).optional(),
|
|
5128
|
+
eventDefinitions: z19.array(PluginEventDefinitionContribution2).optional(),
|
|
5067
5129
|
// Default notification rules over this plugin's own `eventDefinitions`; seeded by the host
|
|
5068
5130
|
// (see `PluginNotificationRuleContribution`).
|
|
5069
|
-
notificationRules:
|
|
5070
|
-
productEvents:
|
|
5071
|
-
eventSubscriptions:
|
|
5072
|
-
deviceDelegations:
|
|
5073
|
-
sessionReaders:
|
|
5074
|
-
contextContributors:
|
|
5131
|
+
notificationRules: z19.array(PluginNotificationRuleContribution2).optional(),
|
|
5132
|
+
productEvents: z19.array(PluginProductEventContribution2).optional(),
|
|
5133
|
+
eventSubscriptions: z19.array(AppEventSubscription2).optional(),
|
|
5134
|
+
deviceDelegations: z19.array(DeviceDelegationContribution2).optional(),
|
|
5135
|
+
sessionReaders: z19.array(SessionReaderContribution2).optional(),
|
|
5136
|
+
contextContributors: z19.array(ContextContributorContribution2).optional(),
|
|
5137
|
+
// The state entry holding the working state a reset may use in place of the summary
|
|
5138
|
+
// (`reset-text.ts`). Honored only for a plugin holding `compaction.reset-text`.
|
|
5139
|
+
resetText: ResetTextContribution.optional(),
|
|
5075
5140
|
// Vendored MCP servers this plugin ships (see `McpServerContributions`). Each is hosted only
|
|
5076
5141
|
// for a plugin holding `mcp.host-server` for its name and URL; that is decided at
|
|
5077
5142
|
// composition, not here (see AGENTS.md).
|
|
5078
5143
|
mcpServers: McpServerContributions2.optional(),
|
|
5079
5144
|
// Handler restricted to endpoint-only by the manifest-level refinement below.
|
|
5080
|
-
commands:
|
|
5145
|
+
commands: z19.array(CommandContribution2).optional()
|
|
5081
5146
|
}).optional()
|
|
5082
5147
|
});
|
|
5083
|
-
const KayUiTargetManifest2 =
|
|
5148
|
+
const KayUiTargetManifest2 = z19.strictObject({
|
|
5084
5149
|
entrypoint: TargetEntrypoint2.extend({
|
|
5085
|
-
format:
|
|
5150
|
+
format: z19.literal("compiled-bundle").optional()
|
|
5086
5151
|
}).optional(),
|
|
5087
|
-
contributes:
|
|
5088
|
-
commands:
|
|
5089
|
-
slots:
|
|
5090
|
-
referencePresentations:
|
|
5091
|
-
apps:
|
|
5092
|
-
railEntries:
|
|
5093
|
-
toastPreviews:
|
|
5094
|
-
pages:
|
|
5095
|
-
themes:
|
|
5096
|
-
eventSubscriptions:
|
|
5097
|
-
dataMaterializers:
|
|
5152
|
+
contributes: z19.strictObject({
|
|
5153
|
+
commands: z19.array(UiCommandContribution2).optional(),
|
|
5154
|
+
slots: z19.array(UiSlotContribution2).optional(),
|
|
5155
|
+
referencePresentations: z19.array(ReferencePresentationContribution2).optional(),
|
|
5156
|
+
apps: z19.array(UiAppContribution2).optional(),
|
|
5157
|
+
railEntries: z19.array(UiRailEntryContribution2).optional(),
|
|
5158
|
+
toastPreviews: z19.array(UiToastPreviewContribution2).optional(),
|
|
5159
|
+
pages: z19.array(UiPageContribution2).optional(),
|
|
5160
|
+
themes: z19.array(ThemeContribution2).optional(),
|
|
5161
|
+
eventSubscriptions: z19.array(UiEventSubscriptionContribution2).optional(),
|
|
5162
|
+
dataMaterializers: z19.array(AppDataMaterializerContribution2).optional()
|
|
5098
5163
|
}).optional()
|
|
5099
5164
|
});
|
|
5100
|
-
const PluginConfigScope2 =
|
|
5101
|
-
const PluginConfigSectionManifest2 =
|
|
5165
|
+
const PluginConfigScope2 = z19.enum(["global", "project", "agent"]);
|
|
5166
|
+
const PluginConfigSectionManifest2 = z19.strictObject({
|
|
5102
5167
|
section: NonEmptyString3.optional(),
|
|
5103
5168
|
schema: JsonSchema,
|
|
5104
5169
|
/**
|
|
@@ -5116,23 +5181,23 @@ function createManifestSchemas(canonical) {
|
|
|
5116
5181
|
* is the baseline every section has; `agent` has no runtime mapping (the
|
|
5117
5182
|
* agent/entity fold is downstream of the document protocol).
|
|
5118
5183
|
*/
|
|
5119
|
-
scopes:
|
|
5184
|
+
scopes: z19.array(PluginConfigScope2).optional()
|
|
5120
5185
|
});
|
|
5121
|
-
const PluginConfigManifest2 =
|
|
5122
|
-
const PluginStorageManifest2 =
|
|
5123
|
-
sqlite:
|
|
5124
|
-
enabled:
|
|
5125
|
-
ownerTarget:
|
|
5186
|
+
const PluginConfigManifest2 = z19.array(PluginConfigSectionManifest2).min(1);
|
|
5187
|
+
const PluginStorageManifest2 = z19.strictObject({
|
|
5188
|
+
sqlite: z19.strictObject({
|
|
5189
|
+
enabled: z19.boolean(),
|
|
5190
|
+
ownerTarget: z19.literal("kay.app").optional(),
|
|
5126
5191
|
migrations: NonEmptyString3.optional()
|
|
5127
5192
|
}).optional(),
|
|
5128
|
-
dataDir:
|
|
5129
|
-
enabled:
|
|
5130
|
-
ownerTarget:
|
|
5193
|
+
dataDir: z19.strictObject({
|
|
5194
|
+
enabled: z19.boolean(),
|
|
5195
|
+
ownerTarget: z19.literal("kay.app").optional(),
|
|
5131
5196
|
sharedWith: PluginId2.optional()
|
|
5132
5197
|
}).optional()
|
|
5133
5198
|
});
|
|
5134
|
-
const PluginOAuthClientSupplier2 =
|
|
5135
|
-
const PluginProvisioningProbe2 =
|
|
5199
|
+
const PluginOAuthClientSupplier2 = z19.enum(["kay", "user"]);
|
|
5200
|
+
const PluginProvisioningProbe2 = z19.strictObject({
|
|
5136
5201
|
/**
|
|
5137
5202
|
* The API endpoint that answers the question. The host sends the service's OWN credential here,
|
|
5138
5203
|
* so this must belong to the provider that minted it - enforced by the daemon against the
|
|
@@ -5140,13 +5205,13 @@ function createManifestSchemas(canonical) {
|
|
|
5140
5205
|
*/
|
|
5141
5206
|
url: HttpsUrl2,
|
|
5142
5207
|
/** Absent => `GET`. */
|
|
5143
|
-
method:
|
|
5208
|
+
method: z19.enum(["GET"]).optional(),
|
|
5144
5209
|
/**
|
|
5145
5210
|
* The statuses that make the response a VERDICT at all. Anything else (a 401 from a stale
|
|
5146
5211
|
* token, a 5xx, a rate limit) means the probe learned nothing and reports `unknown` - never
|
|
5147
5212
|
* `unsatisfied`, which would tell a user to go fix setup that is fine.
|
|
5148
5213
|
*/
|
|
5149
|
-
verdictStatuses:
|
|
5214
|
+
verdictStatuses: z19.array(SignedInStatusCode2).min(1),
|
|
5150
5215
|
/**
|
|
5151
5216
|
* Dot-path to a JSON array in the response body that must be NON-EMPTY for the requirement to
|
|
5152
5217
|
* count as satisfied (e.g. `installations`). Absent means a verdict status alone is enough.
|
|
@@ -5155,7 +5220,7 @@ function createManifestSchemas(canonical) {
|
|
|
5155
5220
|
*/
|
|
5156
5221
|
nonEmptyArrayAt: NonEmptyString3.optional()
|
|
5157
5222
|
});
|
|
5158
|
-
const PluginProvisioningRequirement2 =
|
|
5223
|
+
const PluginProvisioningRequirement2 = z19.strictObject({
|
|
5159
5224
|
/** Stable id, unique within the scheme. */
|
|
5160
5225
|
id: LocalContributionId2,
|
|
5161
5226
|
/** Human-facing requirement name, e.g. "GitHub App installation". */
|
|
@@ -5172,7 +5237,7 @@ function createManifestSchemas(canonical) {
|
|
|
5172
5237
|
probe: PluginProvisioningProbe2
|
|
5173
5238
|
});
|
|
5174
5239
|
const PluginProvisioningField = {
|
|
5175
|
-
provisioning:
|
|
5240
|
+
provisioning: z19.array(PluginProvisioningRequirement2).optional()
|
|
5176
5241
|
};
|
|
5177
5242
|
const PluginAuthSchemeDescriptionFields = {
|
|
5178
5243
|
/** Human-facing flow name; absent, the service's name stands in. */
|
|
@@ -5189,20 +5254,20 @@ function createManifestSchemas(canonical) {
|
|
|
5189
5254
|
authorizationUrl: HttpsUrl2,
|
|
5190
5255
|
tokenUrl: HttpsUrl2,
|
|
5191
5256
|
/** Initial connect scopes; absent uses `scopes`, while an empty array requests none. */
|
|
5192
|
-
connectScopes:
|
|
5257
|
+
connectScopes: z19.array(NonEmptyString3).optional(),
|
|
5193
5258
|
/** Provider-specific query parameters added to the authorize URL. */
|
|
5194
|
-
extraAuthorizeParams:
|
|
5259
|
+
extraAuthorizeParams: z19.record(NonEmptyString3, z19.string()).optional(),
|
|
5195
5260
|
/** Additional authorization parameters when this service already holds an account. */
|
|
5196
|
-
extraAuthorizeParamsWhenAccountHeld:
|
|
5261
|
+
extraAuthorizeParamsWhenAccountHeld: z19.record(NonEmptyString3, z19.string()).optional()
|
|
5197
5262
|
};
|
|
5198
|
-
const PluginAuthSchemeAccountLookup =
|
|
5199
|
-
const PluginAuthSchemeOAuthPkce =
|
|
5263
|
+
const PluginAuthSchemeAccountLookup = z19.literal("lookup");
|
|
5264
|
+
const PluginAuthSchemeOAuthPkce = z19.strictObject({
|
|
5200
5265
|
...PluginProvisioningField,
|
|
5201
5266
|
...PluginAuthSchemeDescriptionFields,
|
|
5202
5267
|
...PluginAuthSchemeOAuthEndpointFields,
|
|
5203
5268
|
localId: LocalContributionId2,
|
|
5204
|
-
kind:
|
|
5205
|
-
exchange:
|
|
5269
|
+
kind: z19.literal("oauth2"),
|
|
5270
|
+
exchange: z19.literal("pkce"),
|
|
5206
5271
|
byoocProfile: PluginByoocProfile.optional(),
|
|
5207
5272
|
/**
|
|
5208
5273
|
* A public client id the plugin ships for its own sign-in. Only an installed plugin's is used:
|
|
@@ -5226,7 +5291,7 @@ function createManifestSchemas(canonical) {
|
|
|
5226
5291
|
* runs on an untrusted manifest, so a hand-built `["kay","kay"]` must be refused here, not
|
|
5227
5292
|
* silently normalized).
|
|
5228
5293
|
*/
|
|
5229
|
-
clientSuppliers:
|
|
5294
|
+
clientSuppliers: z19.array(PluginOAuthClientSupplier2).nonempty().superRefine((suppliers, ctx) => {
|
|
5230
5295
|
if (new Set(suppliers).size !== suppliers.length) {
|
|
5231
5296
|
ctx.addIssue({
|
|
5232
5297
|
code: "custom",
|
|
@@ -5234,7 +5299,7 @@ function createManifestSchemas(canonical) {
|
|
|
5234
5299
|
});
|
|
5235
5300
|
}
|
|
5236
5301
|
}),
|
|
5237
|
-
scopes:
|
|
5302
|
+
scopes: z19.array(NonEmptyString3).optional()
|
|
5238
5303
|
}).refine((scheme) => scheme.byoocProfile === void 0 || scheme.clientSuppliers.includes("user"), {
|
|
5239
5304
|
message: "An own-client profile requires the user client supplier.",
|
|
5240
5305
|
path: ["byoocProfile"]
|
|
@@ -5245,33 +5310,33 @@ function createManifestSchemas(canonical) {
|
|
|
5245
5310
|
message: "a scheme with its own clientId names where its account comes from (`account`)",
|
|
5246
5311
|
path: ["account"]
|
|
5247
5312
|
});
|
|
5248
|
-
const PluginAuthSchemeOAuthConfidential =
|
|
5313
|
+
const PluginAuthSchemeOAuthConfidential = z19.strictObject({
|
|
5249
5314
|
...PluginProvisioningField,
|
|
5250
5315
|
...PluginAuthSchemeDescriptionFields,
|
|
5251
5316
|
...PluginAuthSchemeOAuthEndpointFields,
|
|
5252
5317
|
localId: LocalContributionId2,
|
|
5253
|
-
kind:
|
|
5254
|
-
exchange:
|
|
5318
|
+
kind: z19.literal("oauth2"),
|
|
5319
|
+
exchange: z19.literal("confidential"),
|
|
5255
5320
|
/** Absent means `["kay"]` - a confidential exchange's secret may only ever be Bonsai's. */
|
|
5256
|
-
clientSuppliers:
|
|
5257
|
-
scopes:
|
|
5321
|
+
clientSuppliers: z19.tuple([z19.literal("kay")]).optional(),
|
|
5322
|
+
scopes: z19.array(NonEmptyString3).optional(),
|
|
5258
5323
|
/** Where the account comes from (see {@link PluginAuthSchemeAccountLookup}). */
|
|
5259
|
-
account:
|
|
5324
|
+
account: z19.union([PluginAuthSchemeAccountLookup, z19.literal("sign-in")])
|
|
5260
5325
|
});
|
|
5261
|
-
const PluginAuthSchemeOAuth2 =
|
|
5326
|
+
const PluginAuthSchemeOAuth2 = z19.discriminatedUnion("exchange", [
|
|
5262
5327
|
PluginAuthSchemeOAuthPkce,
|
|
5263
5328
|
PluginAuthSchemeOAuthConfidential
|
|
5264
5329
|
]);
|
|
5265
|
-
const PluginAuthSchemeApiKey =
|
|
5330
|
+
const PluginAuthSchemeApiKey = z19.strictObject({
|
|
5266
5331
|
...PluginProvisioningField,
|
|
5267
5332
|
...PluginAuthSchemeDescriptionFields,
|
|
5268
5333
|
localId: LocalContributionId2,
|
|
5269
|
-
kind:
|
|
5270
|
-
scopes:
|
|
5334
|
+
kind: z19.literal("api-key"),
|
|
5335
|
+
scopes: z19.array(NonEmptyString3).optional(),
|
|
5271
5336
|
/** The connect prompt's label for the key. Absent: "<service name> API key". */
|
|
5272
5337
|
inputLabel: NonEmptyString3.optional(),
|
|
5273
5338
|
/** Two or more labeled inputs for a secret that comes in parts; absent asks for one key. */
|
|
5274
|
-
fields:
|
|
5339
|
+
fields: z19.array(z19.strictObject({ id: LocalContributionId2, label: NonEmptyString3 })).min(2).superRefine((fields, ctx) => {
|
|
5275
5340
|
if (new Set(fields.map((field) => field.id)).size !== fields.length) {
|
|
5276
5341
|
ctx.addIssue({
|
|
5277
5342
|
code: "custom",
|
|
@@ -5280,7 +5345,7 @@ function createManifestSchemas(canonical) {
|
|
|
5280
5345
|
}
|
|
5281
5346
|
}).optional(),
|
|
5282
5347
|
/** Where and how the person creates the key outside Bonsai. */
|
|
5283
|
-
setup:
|
|
5348
|
+
setup: z19.strictObject({ instructions: NonEmptyString3, url: HttpsUrl2 }).optional(),
|
|
5284
5349
|
/**
|
|
5285
5350
|
* `"lookup"`: the plugin checks a key before it is saved and names its account, with the function
|
|
5286
5351
|
* it registers (`api.auth.registerAccountLookup`). Absent: the key is saved unchecked, under the
|
|
@@ -5288,27 +5353,27 @@ function createManifestSchemas(canonical) {
|
|
|
5288
5353
|
*/
|
|
5289
5354
|
account: PluginAuthSchemeAccountLookup.optional()
|
|
5290
5355
|
});
|
|
5291
|
-
const PluginAuthSchemeDelegated =
|
|
5356
|
+
const PluginAuthSchemeDelegated = z19.strictObject({
|
|
5292
5357
|
...PluginAuthSchemeDescriptionFields,
|
|
5293
5358
|
localId: LocalContributionId2,
|
|
5294
|
-
kind:
|
|
5295
|
-
scopes:
|
|
5359
|
+
kind: z19.literal("delegated"),
|
|
5360
|
+
scopes: z19.array(NonEmptyString3).optional()
|
|
5296
5361
|
});
|
|
5297
|
-
const ExternalCliArgument =
|
|
5362
|
+
const ExternalCliArgument = z19.string().min(1).max(16384).refine((value) => ![...value].some(isUnsafeArgumentCharacter), {
|
|
5298
5363
|
message: "an argument may hold tabs and line breaks, but no other control character, no invisible character and no bidirectional override"
|
|
5299
5364
|
});
|
|
5300
|
-
const ExternalCliCommand =
|
|
5365
|
+
const ExternalCliCommand = z19.string().max(128).regex(/^[A-Za-z0-9][A-Za-z0-9._+-]*$/, {
|
|
5301
5366
|
message: "a command is an executable's basename (letters, digits, '.', '_', '+', '-'), never a path"
|
|
5302
5367
|
});
|
|
5303
5368
|
const ExternalCliHint = NonEmptyString3.max(2048);
|
|
5304
|
-
const ExternalCliArguments =
|
|
5369
|
+
const ExternalCliArguments = z19.array(ExternalCliArgument).max(64);
|
|
5305
5370
|
const SignedOutMarker = ExternalCliArgument.refine((value) => value.trim() !== "", { message: "a signed-out marker needs text beyond whitespace" });
|
|
5306
|
-
const PluginExternalCliConnect2 =
|
|
5371
|
+
const PluginExternalCliConnect2 = z19.strictObject({
|
|
5307
5372
|
/** A basename the host finds on `PATH` (`osascript`, `wrangler`), never a path. */
|
|
5308
5373
|
binary: ExternalCliCommand,
|
|
5309
|
-
probe:
|
|
5374
|
+
probe: z19.strictObject({
|
|
5310
5375
|
args: ExternalCliArguments.min(1),
|
|
5311
|
-
timeoutMs:
|
|
5376
|
+
timeoutMs: z19.number().int().min(1).max(12e4).optional(),
|
|
5312
5377
|
/**
|
|
5313
5378
|
* The CLI's own signed-out marker: text a failed probe's output (stderr, else stdout) contains
|
|
5314
5379
|
* when the CLI is signed out. A failure that carries it is a sign-in problem, and only such a
|
|
@@ -5316,13 +5381,13 @@ function createManifestSchemas(canonical) {
|
|
|
5316
5381
|
* unavailable. Required when `login` is declared, so a timeout never starts a sign-in. A list
|
|
5317
5382
|
* is for a CLI with several signed-out messages; any one of them counts.
|
|
5318
5383
|
*/
|
|
5319
|
-
signedOutMarker:
|
|
5384
|
+
signedOutMarker: z19.union([SignedOutMarker, z19.array(SignedOutMarker).min(1)]).optional()
|
|
5320
5385
|
}),
|
|
5321
5386
|
/** The CLI's interactive sign-in. Absent: connect only probes and reports. */
|
|
5322
|
-
login:
|
|
5387
|
+
login: z19.strictObject({
|
|
5323
5388
|
args: ExternalCliArguments.min(1),
|
|
5324
|
-
timeoutMs:
|
|
5325
|
-
pasteCode:
|
|
5389
|
+
timeoutMs: z19.number().int().min(1).max(6e5).optional(),
|
|
5390
|
+
pasteCode: z19.strictObject({
|
|
5326
5391
|
/** The redeeming argv; the host appends the code as its last argument. */
|
|
5327
5392
|
args: ExternalCliArguments.min(1),
|
|
5328
5393
|
/** What the prompt says, for a person. */
|
|
@@ -5334,12 +5399,12 @@ function createManifestSchemas(canonical) {
|
|
|
5334
5399
|
* for display, or hands it to an agent session that runs it behind the ordinary bash approval.
|
|
5335
5400
|
* Absent for a binary the OS ships (`osascript`).
|
|
5336
5401
|
*/
|
|
5337
|
-
install:
|
|
5402
|
+
install: z19.strictObject({
|
|
5338
5403
|
command: ExternalCliCommand,
|
|
5339
5404
|
args: ExternalCliArguments
|
|
5340
5405
|
}).optional(),
|
|
5341
5406
|
/** Prose for a person: `install` when the binary is missing, `login` when the probe fails. */
|
|
5342
|
-
hints:
|
|
5407
|
+
hints: z19.strictObject({
|
|
5343
5408
|
install: ExternalCliHint,
|
|
5344
5409
|
login: ExternalCliHint
|
|
5345
5410
|
})
|
|
@@ -5352,50 +5417,50 @@ function createManifestSchemas(canonical) {
|
|
|
5352
5417
|
});
|
|
5353
5418
|
}
|
|
5354
5419
|
});
|
|
5355
|
-
const PluginAuthSchemeExternalCli =
|
|
5420
|
+
const PluginAuthSchemeExternalCli = z19.strictObject({
|
|
5356
5421
|
...PluginAuthSchemeDescriptionFields,
|
|
5357
5422
|
localId: LocalContributionId2,
|
|
5358
|
-
kind:
|
|
5359
|
-
scopes:
|
|
5423
|
+
kind: z19.literal("external-cli"),
|
|
5424
|
+
scopes: z19.array(NonEmptyString3).optional(),
|
|
5360
5425
|
cli: PluginExternalCliConnect2.optional()
|
|
5361
5426
|
});
|
|
5362
|
-
const PluginAuthScheme2 =
|
|
5427
|
+
const PluginAuthScheme2 = z19.discriminatedUnion("kind", [
|
|
5363
5428
|
PluginAuthSchemeOAuth2,
|
|
5364
5429
|
PluginAuthSchemeApiKey,
|
|
5365
5430
|
PluginAuthSchemeDelegated,
|
|
5366
5431
|
PluginAuthSchemeExternalCli
|
|
5367
5432
|
]);
|
|
5368
|
-
const PluginWebSessionProbe2 =
|
|
5433
|
+
const PluginWebSessionProbe2 = z19.strictObject({
|
|
5369
5434
|
url: HttpsUrl2,
|
|
5370
5435
|
/** Absent => `GET`. `POST` sends an empty JSON object body. */
|
|
5371
|
-
method:
|
|
5372
|
-
signedInStatuses:
|
|
5436
|
+
method: z19.enum(["GET", "POST"]).optional(),
|
|
5437
|
+
signedInStatuses: z19.array(SignedInStatusCode2).min(1)
|
|
5373
5438
|
});
|
|
5374
|
-
const PluginWebSessionDeclaration2 =
|
|
5439
|
+
const PluginWebSessionDeclaration2 = z19.strictObject({
|
|
5375
5440
|
/** `required`: capabilities degrade without the site login; `recommended`: it only smooths UX. */
|
|
5376
|
-
importance:
|
|
5441
|
+
importance: z19.enum(["required", "recommended"]),
|
|
5377
5442
|
loginUrl: HttpsUrl2,
|
|
5378
|
-
cookieDomains:
|
|
5443
|
+
cookieDomains: z19.array(RegistrableDomain2).min(1),
|
|
5379
5444
|
probe: PluginWebSessionProbe2,
|
|
5380
|
-
oauthVenue:
|
|
5445
|
+
oauthVenue: z19.enum(["embedded", "external"]),
|
|
5381
5446
|
/**
|
|
5382
5447
|
* Where a page goes first when it opens in one of Bonsai's browser panes and this site login
|
|
5383
5448
|
* is missing: a sign-in page that continues to the page. A template with `:email` and `:url`
|
|
5384
5449
|
* (see `UriClaimTemplate`), on a host within `cookieDomains`.
|
|
5385
5450
|
*/
|
|
5386
|
-
signInFirst:
|
|
5451
|
+
signInFirst: z19.string().optional()
|
|
5387
5452
|
}).superRefine(refineWebSessionScopeConfined);
|
|
5388
|
-
const PluginAuthService2 =
|
|
5453
|
+
const PluginAuthService2 = z19.strictObject({
|
|
5389
5454
|
localId: LocalContributionId2,
|
|
5390
5455
|
displayName: NonEmptyString3,
|
|
5391
5456
|
/** One plain sentence on what connecting this service gives Bonsai. */
|
|
5392
5457
|
summary: NonEmptyString3.optional(),
|
|
5393
|
-
schemes:
|
|
5394
|
-
purposes:
|
|
5458
|
+
schemes: z19.array(PluginAuthScheme2).min(1),
|
|
5459
|
+
purposes: z19.array(NonEmptyString3).min(1),
|
|
5395
5460
|
webSession: PluginWebSessionDeclaration2.optional()
|
|
5396
5461
|
});
|
|
5397
|
-
const PluginAuthManifest2 =
|
|
5398
|
-
services:
|
|
5462
|
+
const PluginAuthManifest2 = z19.strictObject({
|
|
5463
|
+
services: z19.array(PluginAuthService2).optional()
|
|
5399
5464
|
});
|
|
5400
5465
|
function stripRetiredCompatibilityKeys(value) {
|
|
5401
5466
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
@@ -5406,17 +5471,17 @@ function createManifestSchemas(canonical) {
|
|
|
5406
5471
|
delete remaining[key];
|
|
5407
5472
|
return remaining;
|
|
5408
5473
|
}
|
|
5409
|
-
const PluginCompatibilityFields =
|
|
5410
|
-
supportedProtocols:
|
|
5474
|
+
const PluginCompatibilityFields = z19.strictObject({
|
|
5475
|
+
supportedProtocols: z19.array(KayPluginProtocolVersion).optional(),
|
|
5411
5476
|
minKayVersion: NonEmptyString3.optional(),
|
|
5412
5477
|
sdk: NonEmptyString3.optional()
|
|
5413
5478
|
});
|
|
5414
|
-
const PluginCompatibilityManifest2 = canonical ? PluginCompatibilityFields :
|
|
5479
|
+
const PluginCompatibilityManifest2 = canonical ? PluginCompatibilityFields : z19.preprocess(stripRetiredCompatibilityKeys, PluginCompatibilityFields);
|
|
5415
5480
|
const KayVersionString2 = NonEmptyString3.regex(SEMVER_PATTERN, {
|
|
5416
5481
|
message: "version must be semver, for example 1.2.3"
|
|
5417
5482
|
});
|
|
5418
|
-
const KayPluginManifestV12 =
|
|
5419
|
-
protocol:
|
|
5483
|
+
const KayPluginManifestV12 = z19.strictObject({
|
|
5484
|
+
protocol: z19.literal(KAY_PLUGIN_PROTOCOL_VERSION),
|
|
5420
5485
|
id: PluginId2,
|
|
5421
5486
|
displayName: NonEmptyString3,
|
|
5422
5487
|
version: KayVersionString2,
|
|
@@ -5444,12 +5509,12 @@ function createManifestSchemas(canonical) {
|
|
|
5444
5509
|
icon: PackageAssetPath2.optional(),
|
|
5445
5510
|
iconDark: PackageAssetPath2.optional(),
|
|
5446
5511
|
namespace: PluginNamespace2.optional(),
|
|
5447
|
-
workers:
|
|
5512
|
+
workers: z19.array(z19.strictObject({
|
|
5448
5513
|
localId: LocalContributionId2,
|
|
5449
5514
|
module: PackageAssetPath2
|
|
5450
5515
|
})).optional(),
|
|
5451
|
-
targets:
|
|
5452
|
-
kay:
|
|
5516
|
+
targets: z19.strictObject({
|
|
5517
|
+
kay: z19.strictObject({
|
|
5453
5518
|
agent: KayAgentTargetManifest2.optional(),
|
|
5454
5519
|
app: KayAppTargetManifest2.optional(),
|
|
5455
5520
|
ui: KayUiTargetManifest2.optional()
|
|
@@ -5457,8 +5522,8 @@ function createManifestSchemas(canonical) {
|
|
|
5457
5522
|
}).optional(),
|
|
5458
5523
|
config: PluginConfigManifest2.optional(),
|
|
5459
5524
|
storage: PluginStorageManifest2.optional(),
|
|
5460
|
-
workloadPurposes:
|
|
5461
|
-
shellCommands:
|
|
5525
|
+
workloadPurposes: z19.array(PluginWorkloadPurpose).optional(),
|
|
5526
|
+
shellCommands: z19.array(PluginShellCommand).optional(),
|
|
5462
5527
|
projectDirectories: PluginProjectDirectories.optional(),
|
|
5463
5528
|
auth: PluginAuthManifest2.optional(),
|
|
5464
5529
|
permissions: PluginPermissionManifest2.optional(),
|
|
@@ -5469,15 +5534,15 @@ function createManifestSchemas(canonical) {
|
|
|
5469
5534
|
* schemes then report `ownedByBonsai`. Honoured only for a plugin that ships with Bonsai: the
|
|
5470
5535
|
* host reads any other plugin's flag as false. Absent => false.
|
|
5471
5536
|
*/
|
|
5472
|
-
ownedByBonsai:
|
|
5537
|
+
ownedByBonsai: z19.boolean().optional(),
|
|
5473
5538
|
/**
|
|
5474
5539
|
* Explicit plugin-level dependencies - other plugins this plugin requires to be present in the
|
|
5475
5540
|
* composed roster. At composition time the runtime checks each id against the accepted
|
|
5476
5541
|
* registration list and derives a provenance-complete dependency graph (together with implicit
|
|
5477
5542
|
* auth-service edges from `consumesAuthServices`). Absent => no explicit dependencies.
|
|
5478
5543
|
*/
|
|
5479
|
-
dependencies:
|
|
5480
|
-
plugins:
|
|
5544
|
+
dependencies: z19.strictObject({
|
|
5545
|
+
plugins: z19.array(PluginId2).optional()
|
|
5481
5546
|
}).optional()
|
|
5482
5547
|
}).superRefine((manifest, ctx) => {
|
|
5483
5548
|
reportDuplicateLocalIds(ctx, ["workers"], manifest.workers, "worker");
|
|
@@ -6729,7 +6794,7 @@ function pushContributionIds(output, path, items) {
|
|
|
6729
6794
|
}
|
|
6730
6795
|
|
|
6731
6796
|
// packages/plugin-protocol/dist/plugin-directory-verdict.js
|
|
6732
|
-
import { z as
|
|
6797
|
+
import { z as z21 } from "zod";
|
|
6733
6798
|
|
|
6734
6799
|
// packages/plugin-protocol/dist/plugin-load-diagnostic.js
|
|
6735
6800
|
var PLUGIN_DIAGNOSTIC_MESSAGE_CAP = 300;
|
|
@@ -6738,14 +6803,14 @@ function boundPluginDiagnosticMessage(message) {
|
|
|
6738
6803
|
}
|
|
6739
6804
|
|
|
6740
6805
|
// packages/plugin-protocol/dist/resolved-contract.js
|
|
6741
|
-
import { z as
|
|
6806
|
+
import { z as z20 } from "zod";
|
|
6742
6807
|
function createResolvedContractSchemas(canonical) {
|
|
6743
6808
|
const { PluginEventLocalId: PluginEventLocalId2 } = canonical ? canonicalPluginEventSchemas : plugin_events_exports;
|
|
6744
6809
|
const { ApprovalTypeContribution: ApprovalTypeContribution2, KayUiAppHostCapability: KayUiAppHostCapability2, McpServerAuthMode: McpServerAuthMode2, McpServerUrl: McpServerUrl2, PluginContributionKind: PluginContributionKindSchema, ReferenceOpenBehavior: ReferenceOpenBehavior2, ReferencePresentationUriPattern: ReferencePresentationUriPattern2, ReferencePresentationAccountLinks: ReferencePresentationAccountLinks2, ReferencePresentationAddress: ReferencePresentationAddress2, ReferencePresentationUrlClaim: ReferencePresentationUrlClaim2, ReferencePresentationVariants: ReferencePresentationVariants2, ReferencePresentationWords: ReferencePresentationWords2, UriModuleFacts: UriModuleFacts2, WhiteboardTypeContribution: WhiteboardTypeContribution2 } = canonical ? canonicalContributionSchemas : contributions_exports;
|
|
6745
6810
|
const { FileExtensionToken: FileExtensionToken2, GitBasicAuthUser: GitBasicAuthUser2, GitHostName: GitHostName2, GlobalContributionId: GlobalContributionId2, HttpsUrl: HttpsUrl2, LocalContributionId: LocalContributionId2, MimeTypeString: MimeTypeString2, NonEmptyString: NonEmptyString3, PackageAssetPath: PackageAssetPath2, PluginId: PluginId2, PluginNamespace: PluginNamespace2, PluginToolName: PluginToolName2, RegistrableDomain: RegistrableDomain2, SignedInStatusCode: SignedInStatusCode2, TargetEntrypoint: TargetEntrypoint2, UriScheme: UriScheme2 } = canonical ? canonicalCommonSchemas : common_exports;
|
|
6746
6811
|
const { PluginExternalCliConnect: PluginExternalCliConnect2, PluginOAuthClientSupplier: PluginOAuthClientSupplier2 } = canonical ? canonicalManifestSchemas : manifest_exports;
|
|
6747
6812
|
const { ResolvedPluginGrants: ResolvedPluginGrants2, ScopeRequirement: ScopeRequirement2 } = canonical ? canonicalPermissionSchemas : permissions_exports;
|
|
6748
|
-
const ResolvedPluginContributionId2 =
|
|
6813
|
+
const ResolvedPluginContributionId2 = z20.strictObject({
|
|
6749
6814
|
target: PluginTargetName,
|
|
6750
6815
|
kind: PluginContributionKindSchema,
|
|
6751
6816
|
localId: PluginEventLocalId2,
|
|
@@ -6759,20 +6824,20 @@ function createResolvedContractSchemas(canonical) {
|
|
|
6759
6824
|
});
|
|
6760
6825
|
}
|
|
6761
6826
|
});
|
|
6762
|
-
const ResolvedKayToolId =
|
|
6827
|
+
const ResolvedKayToolId = z20.strictObject({
|
|
6763
6828
|
localId: LocalContributionId2,
|
|
6764
6829
|
globalId: GlobalContributionId2,
|
|
6765
6830
|
toolName: PluginToolName2
|
|
6766
6831
|
});
|
|
6767
|
-
const ResolvedKayAgentTool2 =
|
|
6832
|
+
const ResolvedKayAgentTool2 = z20.strictObject({
|
|
6768
6833
|
...ResolvedKayToolId.shape,
|
|
6769
6834
|
displayName: NonEmptyString3.optional(),
|
|
6770
6835
|
description: NonEmptyString3.optional(),
|
|
6771
6836
|
parameters: JsonSchema.optional(),
|
|
6772
|
-
executionMode:
|
|
6837
|
+
executionMode: z20.enum(["sequential", "parallel"]).optional(),
|
|
6773
6838
|
promptSnippet: NonEmptyString3.optional(),
|
|
6774
|
-
promptGuidelines:
|
|
6775
|
-
requiresAuth:
|
|
6839
|
+
promptGuidelines: z20.array(NonEmptyString3).optional(),
|
|
6840
|
+
requiresAuth: z20.strictObject({
|
|
6776
6841
|
serviceId: GlobalContributionId2,
|
|
6777
6842
|
schemeId: GlobalContributionId2.optional()
|
|
6778
6843
|
}).optional(),
|
|
@@ -6781,37 +6846,37 @@ function createResolvedContractSchemas(canonical) {
|
|
|
6781
6846
|
const ResolvedKayAppTool2 = ResolvedKayAgentTool2.omit({
|
|
6782
6847
|
requiresAuth: true
|
|
6783
6848
|
}).extend({
|
|
6784
|
-
availability:
|
|
6849
|
+
availability: z20.strictObject({ scope: z20.literal("app") }).optional()
|
|
6785
6850
|
});
|
|
6786
|
-
const ResolvedKayAppDataSource2 =
|
|
6851
|
+
const ResolvedKayAppDataSource2 = z20.strictObject({
|
|
6787
6852
|
localId: LocalContributionId2,
|
|
6788
6853
|
globalId: GlobalContributionId2,
|
|
6789
|
-
scope:
|
|
6790
|
-
snapshot:
|
|
6791
|
-
version:
|
|
6792
|
-
schema:
|
|
6854
|
+
scope: z20.enum(["runtime", "account", "session"]),
|
|
6855
|
+
snapshot: z20.strictObject({
|
|
6856
|
+
version: z20.number().int().positive(),
|
|
6857
|
+
schema: z20.record(z20.string(), z20.unknown())
|
|
6793
6858
|
}),
|
|
6794
|
-
change:
|
|
6795
|
-
version:
|
|
6796
|
-
schema:
|
|
6797
|
-
semantics:
|
|
6798
|
-
|
|
6799
|
-
|
|
6800
|
-
kind:
|
|
6801
|
-
maxEncodedBytes:
|
|
6859
|
+
change: z20.strictObject({
|
|
6860
|
+
version: z20.number().int().positive(),
|
|
6861
|
+
schema: z20.record(z20.string(), z20.unknown()),
|
|
6862
|
+
semantics: z20.discriminatedUnion("kind", [
|
|
6863
|
+
z20.strictObject({ kind: z20.literal("incremental") }),
|
|
6864
|
+
z20.strictObject({
|
|
6865
|
+
kind: z20.literal("snapshot-replacement"),
|
|
6866
|
+
maxEncodedBytes: z20.number().int().positive(),
|
|
6802
6867
|
rationale: pluginString(canonical).min(1).max(1024)
|
|
6803
6868
|
})
|
|
6804
6869
|
]).optional()
|
|
6805
6870
|
}),
|
|
6806
6871
|
read: AppDataSourceRead.optional(),
|
|
6807
|
-
messageDraft:
|
|
6808
|
-
store:
|
|
6809
|
-
|
|
6810
|
-
shape:
|
|
6811
|
-
rowsField:
|
|
6812
|
-
key:
|
|
6872
|
+
messageDraft: z20.strictObject({ schemes: z20.array(UriScheme2).min(1) }).optional(),
|
|
6873
|
+
store: z20.discriminatedUnion("shape", [
|
|
6874
|
+
z20.strictObject({
|
|
6875
|
+
shape: z20.literal("rows"),
|
|
6876
|
+
rowsField: z20.string().min(1),
|
|
6877
|
+
key: z20.array(z20.string().min(1)).min(1)
|
|
6813
6878
|
}),
|
|
6814
|
-
|
|
6879
|
+
z20.strictObject({ shape: z20.literal("value") })
|
|
6815
6880
|
]).optional()
|
|
6816
6881
|
}).superRefine((source, ctx) => {
|
|
6817
6882
|
if (source.read !== void 0 && source.scope !== "session") {
|
|
@@ -6831,134 +6896,134 @@ function createResolvedContractSchemas(canonical) {
|
|
|
6831
6896
|
/** The auth service that module signs in through, whose accounts a card may send from. */
|
|
6832
6897
|
authService: GlobalContributionId2.optional()
|
|
6833
6898
|
});
|
|
6834
|
-
const ResolvedPluginCard2 =
|
|
6899
|
+
const ResolvedPluginCard2 = z20.strictObject({
|
|
6835
6900
|
localId: LocalContributionId2,
|
|
6836
6901
|
globalId: GlobalContributionId2,
|
|
6837
6902
|
pluginId: PluginId2,
|
|
6838
6903
|
description: NonEmptyString3,
|
|
6839
6904
|
inputs: JsonSchema,
|
|
6840
|
-
readEndpoint:
|
|
6905
|
+
readEndpoint: z20.strictObject({
|
|
6841
6906
|
localId: LocalContributionId2,
|
|
6842
6907
|
globalId: GlobalContributionId2
|
|
6843
6908
|
}),
|
|
6844
|
-
submitEndpoint:
|
|
6909
|
+
submitEndpoint: z20.strictObject({
|
|
6845
6910
|
localId: LocalContributionId2,
|
|
6846
6911
|
globalId: GlobalContributionId2
|
|
6847
6912
|
}),
|
|
6848
6913
|
authService: GlobalContributionId2.optional()
|
|
6849
6914
|
});
|
|
6850
|
-
const ResolvedKayAppWorkflow2 =
|
|
6915
|
+
const ResolvedKayAppWorkflow2 = z20.strictObject({
|
|
6851
6916
|
localId: LocalContributionId2,
|
|
6852
6917
|
globalId: GlobalContributionId2,
|
|
6853
6918
|
name: NonEmptyString3,
|
|
6854
6919
|
description: NonEmptyString3,
|
|
6855
|
-
everyMs:
|
|
6856
|
-
auth:
|
|
6920
|
+
everyMs: z20.number().int().positive(),
|
|
6921
|
+
auth: z20.strictObject({
|
|
6857
6922
|
serviceId: GlobalContributionId2,
|
|
6858
6923
|
schemeId: GlobalContributionId2,
|
|
6859
|
-
scopes:
|
|
6924
|
+
scopes: z20.array(NonEmptyString3).min(1).optional()
|
|
6860
6925
|
}).optional()
|
|
6861
6926
|
});
|
|
6862
6927
|
const ResolvedKayAppWhiteboardType2 = WhiteboardTypeContribution2.safeExtend({
|
|
6863
6928
|
globalId: GlobalContributionId2
|
|
6864
6929
|
});
|
|
6865
|
-
const ResolvedKayAppMcpServer2 =
|
|
6930
|
+
const ResolvedKayAppMcpServer2 = z20.strictObject({
|
|
6866
6931
|
name: LocalContributionId2,
|
|
6867
6932
|
pluginId: PluginId2,
|
|
6868
6933
|
url: McpServerUrl2,
|
|
6869
6934
|
auth: McpServerAuthMode2,
|
|
6870
6935
|
authServiceId: GlobalContributionId2.optional()
|
|
6871
6936
|
});
|
|
6872
|
-
const ResolvedKayAppWorkingDocumentProvider2 =
|
|
6937
|
+
const ResolvedKayAppWorkingDocumentProvider2 = z20.strictObject({
|
|
6873
6938
|
localId: LocalContributionId2,
|
|
6874
6939
|
globalId: GlobalContributionId2,
|
|
6875
6940
|
displayName: NonEmptyString3,
|
|
6876
|
-
schemes:
|
|
6877
|
-
hosts:
|
|
6941
|
+
schemes: z20.array(UriScheme2),
|
|
6942
|
+
hosts: z20.array(NonEmptyString3),
|
|
6878
6943
|
authServiceId: GlobalContributionId2.optional(),
|
|
6879
6944
|
authSchemeId: GlobalContributionId2.optional(),
|
|
6880
6945
|
scopeRequirement: ScopeRequirement2.optional()
|
|
6881
6946
|
});
|
|
6882
|
-
const ResolvedKayAgentUriModule2 =
|
|
6947
|
+
const ResolvedKayAgentUriModule2 = z20.strictObject({
|
|
6883
6948
|
localId: LocalContributionId2,
|
|
6884
|
-
adapterId:
|
|
6949
|
+
adapterId: z20.string().min(1).optional(),
|
|
6885
6950
|
globalId: GlobalContributionId2,
|
|
6886
|
-
schemes:
|
|
6951
|
+
schemes: z20.array(UriScheme2).min(1),
|
|
6887
6952
|
displayName: NonEmptyString3.optional(),
|
|
6888
6953
|
authServiceId: GlobalContributionId2.optional(),
|
|
6889
6954
|
/** Mirrors `UriModuleContribution.authScheme`; a local ref takes the plugin's namespace. */
|
|
6890
6955
|
authSchemeId: GlobalContributionId2.optional(),
|
|
6891
|
-
requiredScopes:
|
|
6956
|
+
requiredScopes: z20.array(NonEmptyString3).optional(),
|
|
6892
6957
|
/** Mirrors `UriModuleContribution.knownResources` (host-side recording opt-in). */
|
|
6893
|
-
knownResources:
|
|
6958
|
+
knownResources: z20.literal(true).optional(),
|
|
6894
6959
|
/** Mirrors `UriModuleContribution.describesOperations`. */
|
|
6895
|
-
describesOperations:
|
|
6960
|
+
describesOperations: z20.literal(true).optional(),
|
|
6896
6961
|
/** Mirrors `UriModuleContribution.looksUpWebLinks`. */
|
|
6897
|
-
looksUpWebLinks:
|
|
6962
|
+
looksUpWebLinks: z20.literal(true).optional(),
|
|
6898
6963
|
...UriModuleFacts2.shape
|
|
6899
6964
|
});
|
|
6900
|
-
const ResolvedKayAgentArtifactUriModule2 =
|
|
6965
|
+
const ResolvedKayAgentArtifactUriModule2 = z20.strictObject({
|
|
6901
6966
|
localId: LocalContributionId2,
|
|
6902
6967
|
globalId: GlobalContributionId2,
|
|
6903
6968
|
scheme: UriScheme2,
|
|
6904
|
-
editable:
|
|
6905
|
-
listable:
|
|
6906
|
-
deletable:
|
|
6907
|
-
appendable:
|
|
6908
|
-
storageScope:
|
|
6969
|
+
editable: z20.boolean(),
|
|
6970
|
+
listable: z20.boolean(),
|
|
6971
|
+
deletable: z20.boolean(),
|
|
6972
|
+
appendable: z20.boolean(),
|
|
6973
|
+
storageScope: z20.enum(["session", "family"])
|
|
6909
6974
|
});
|
|
6910
|
-
const ResolvedKayAgentEntityResolver2 =
|
|
6975
|
+
const ResolvedKayAgentEntityResolver2 = z20.strictObject({
|
|
6911
6976
|
localId: LocalContributionId2,
|
|
6912
6977
|
globalId: GlobalContributionId2,
|
|
6913
6978
|
displayName: NonEmptyString3.optional(),
|
|
6914
6979
|
uriModule: GlobalContributionId2,
|
|
6915
|
-
entityTypes:
|
|
6980
|
+
entityTypes: z20.array(NonEmptyString3).min(1),
|
|
6916
6981
|
uriHint: NonEmptyString3
|
|
6917
6982
|
});
|
|
6918
|
-
const ResolvedKayAgentGitHostClaim2 =
|
|
6983
|
+
const ResolvedKayAgentGitHostClaim2 = z20.strictObject({
|
|
6919
6984
|
host: GitHostName2,
|
|
6920
6985
|
authServiceId: GlobalContributionId2,
|
|
6921
6986
|
/** Manifest-declared order; the clone ladder tries them in sequence. */
|
|
6922
|
-
authSchemeIds:
|
|
6987
|
+
authSchemeIds: z20.array(GlobalContributionId2).min(1),
|
|
6923
6988
|
/** Non-secret display copy for the claiming service, for clone failure text. */
|
|
6924
|
-
authServiceDisplayName:
|
|
6989
|
+
authServiceDisplayName: z20.string(),
|
|
6925
6990
|
basicAuthUser: GitBasicAuthUser2
|
|
6926
6991
|
});
|
|
6927
|
-
const ResolvedKayAgentConverter2 =
|
|
6992
|
+
const ResolvedKayAgentConverter2 = z20.strictObject({
|
|
6928
6993
|
localId: LocalContributionId2,
|
|
6929
6994
|
globalId: GlobalContributionId2,
|
|
6930
6995
|
description: NonEmptyString3.optional(),
|
|
6931
|
-
mimeTypes:
|
|
6932
|
-
extensions:
|
|
6996
|
+
mimeTypes: z20.array(MimeTypeString2).min(1),
|
|
6997
|
+
extensions: z20.array(FileExtensionToken2).min(1).optional()
|
|
6933
6998
|
});
|
|
6934
6999
|
const ResolvedReferencePresentationUrlClaim = ReferencePresentationUrlClaim2.extend({
|
|
6935
|
-
brandIcon:
|
|
7000
|
+
brandIcon: z20.string().max(64 * 1024).optional()
|
|
6936
7001
|
});
|
|
6937
|
-
const ResolvedReferencePresentation2 =
|
|
7002
|
+
const ResolvedReferencePresentation2 = z20.strictObject({
|
|
6938
7003
|
localId: LocalContributionId2,
|
|
6939
7004
|
globalId: GlobalContributionId2,
|
|
6940
7005
|
uriModule: GlobalContributionId2.optional(),
|
|
6941
7006
|
/** The schemes this presentation is about: its `scheme`, or its module's. */
|
|
6942
|
-
schemes:
|
|
7007
|
+
schemes: z20.array(UriScheme2).min(1).optional(),
|
|
6943
7008
|
/** The module's `displayName`: the source's name in a row. */
|
|
6944
7009
|
displayName: NonEmptyString3.optional(),
|
|
6945
7010
|
/** The module's auth service, qualified: whose accounts `accountLinks` reads. */
|
|
6946
7011
|
authService: GlobalContributionId2.optional(),
|
|
6947
7012
|
accountLinks: ReferencePresentationAccountLinks2.optional(),
|
|
6948
|
-
addresses:
|
|
7013
|
+
addresses: z20.array(ReferencePresentationAddress2).min(1).optional(),
|
|
6949
7014
|
/** Comes with `open`. A presentation with neither only words its module's addresses. */
|
|
6950
7015
|
resourceKind: NonEmptyString3.optional(),
|
|
6951
7016
|
open: ReferenceOpenBehavior2.optional(),
|
|
6952
7017
|
/** MIME-specific resource kinds; absent keys use the base presentation. */
|
|
6953
7018
|
variants: ReferencePresentationVariants2.optional(),
|
|
6954
|
-
claims:
|
|
6955
|
-
tooltip:
|
|
7019
|
+
claims: z20.array(ResolvedReferencePresentationUrlClaim).optional(),
|
|
7020
|
+
tooltip: z20.strictObject({
|
|
6956
7021
|
app: GlobalContributionId2,
|
|
6957
7022
|
pattern: ReferencePresentationUriPattern2
|
|
6958
7023
|
}).optional(),
|
|
6959
7024
|
words: ReferencePresentationWords2.optional()
|
|
6960
7025
|
});
|
|
6961
|
-
const ResolvedPluginProvisioningRequirement2 =
|
|
7026
|
+
const ResolvedPluginProvisioningRequirement2 = z20.strictObject({
|
|
6962
7027
|
id: LocalContributionId2,
|
|
6963
7028
|
displayName: NonEmptyString3,
|
|
6964
7029
|
description: NonEmptyString3,
|
|
@@ -6968,15 +7033,15 @@ function createResolvedContractSchemas(canonical) {
|
|
|
6968
7033
|
* URL degrades to "Reconnect" in the UI instead of a broken link.
|
|
6969
7034
|
*/
|
|
6970
7035
|
remediationUrl: HttpsUrl2.optional(),
|
|
6971
|
-
probe:
|
|
7036
|
+
probe: z20.strictObject({
|
|
6972
7037
|
url: HttpsUrl2,
|
|
6973
|
-
method:
|
|
6974
|
-
verdictStatuses:
|
|
7038
|
+
method: z20.enum(["GET"]),
|
|
7039
|
+
verdictStatuses: z20.array(SignedInStatusCode2).min(1),
|
|
6975
7040
|
nonEmptyArrayAt: NonEmptyString3.optional()
|
|
6976
7041
|
})
|
|
6977
7042
|
});
|
|
6978
7043
|
const ResolvedProvisioningField = {
|
|
6979
|
-
provisioning:
|
|
7044
|
+
provisioning: z20.array(ResolvedPluginProvisioningRequirement2).optional()
|
|
6980
7045
|
};
|
|
6981
7046
|
const ResolvedPluginAuthSchemeDescriptionFields = {
|
|
6982
7047
|
displayName: NonEmptyString3.optional(),
|
|
@@ -6988,120 +7053,120 @@ function createResolvedContractSchemas(canonical) {
|
|
|
6988
7053
|
...ResolvedPluginAuthSchemeDescriptionFields,
|
|
6989
7054
|
localId: LocalContributionId2,
|
|
6990
7055
|
globalId: GlobalContributionId2,
|
|
6991
|
-
kind:
|
|
6992
|
-
scopes:
|
|
6993
|
-
connectScopes:
|
|
7056
|
+
kind: z20.literal("oauth2"),
|
|
7057
|
+
scopes: z20.array(z20.string()).optional(),
|
|
7058
|
+
connectScopes: z20.array(NonEmptyString3).optional(),
|
|
6994
7059
|
authorizationUrl: HttpsUrl2,
|
|
6995
7060
|
tokenUrl: HttpsUrl2,
|
|
6996
|
-
extraAuthorizeParams:
|
|
6997
|
-
extraAuthorizeParamsWhenAccountHeld:
|
|
7061
|
+
extraAuthorizeParams: z20.record(z20.string(), z20.string()).optional(),
|
|
7062
|
+
extraAuthorizeParamsWhenAccountHeld: z20.record(NonEmptyString3, z20.string()).optional()
|
|
6998
7063
|
};
|
|
6999
|
-
const ResolvedPluginAuthSchemeOAuthPkce =
|
|
7064
|
+
const ResolvedPluginAuthSchemeOAuthPkce = z20.strictObject({
|
|
7000
7065
|
...ResolvedPluginAuthSchemeOAuthBase,
|
|
7001
|
-
exchange:
|
|
7066
|
+
exchange: z20.literal("pkce"),
|
|
7002
7067
|
byoocProfile: PluginByoocProfile.optional(),
|
|
7003
|
-
clientSuppliers:
|
|
7068
|
+
clientSuppliers: z20.array(PluginOAuthClientSupplier2).nonempty(),
|
|
7004
7069
|
clientId: NonEmptyString3.optional(),
|
|
7005
7070
|
clientSecret: NonEmptyString3.optional(),
|
|
7006
|
-
account:
|
|
7071
|
+
account: z20.literal("lookup").optional()
|
|
7007
7072
|
});
|
|
7008
|
-
const ResolvedPluginAuthSchemeOAuthConfidential =
|
|
7073
|
+
const ResolvedPluginAuthSchemeOAuthConfidential = z20.strictObject({
|
|
7009
7074
|
...ResolvedPluginAuthSchemeOAuthBase,
|
|
7010
|
-
exchange:
|
|
7011
|
-
clientSuppliers:
|
|
7012
|
-
account:
|
|
7075
|
+
exchange: z20.literal("confidential"),
|
|
7076
|
+
clientSuppliers: z20.tuple([z20.literal("kay")]),
|
|
7077
|
+
account: z20.enum(["lookup", "sign-in"])
|
|
7013
7078
|
});
|
|
7014
|
-
const ResolvedPluginAuthSchemeOAuth2 =
|
|
7079
|
+
const ResolvedPluginAuthSchemeOAuth2 = z20.discriminatedUnion("exchange", [
|
|
7015
7080
|
ResolvedPluginAuthSchemeOAuthPkce,
|
|
7016
7081
|
ResolvedPluginAuthSchemeOAuthConfidential
|
|
7017
7082
|
]);
|
|
7018
|
-
const ResolvedPluginAuthSchemeApiKey =
|
|
7083
|
+
const ResolvedPluginAuthSchemeApiKey = z20.strictObject({
|
|
7019
7084
|
...ResolvedProvisioningField,
|
|
7020
7085
|
...ResolvedPluginAuthSchemeDescriptionFields,
|
|
7021
7086
|
localId: LocalContributionId2,
|
|
7022
7087
|
globalId: GlobalContributionId2,
|
|
7023
|
-
kind:
|
|
7024
|
-
scopes:
|
|
7088
|
+
kind: z20.literal("api-key"),
|
|
7089
|
+
scopes: z20.array(z20.string()).optional(),
|
|
7025
7090
|
/** Resolution applies the manifest's default, "<service name> API key". */
|
|
7026
7091
|
inputLabel: NonEmptyString3,
|
|
7027
|
-
fields:
|
|
7028
|
-
setup:
|
|
7029
|
-
account:
|
|
7092
|
+
fields: z20.array(z20.strictObject({ id: z20.string(), label: z20.string() })).optional(),
|
|
7093
|
+
setup: z20.strictObject({ instructions: z20.string(), url: HttpsUrl2 }).optional(),
|
|
7094
|
+
account: z20.literal("lookup").optional()
|
|
7030
7095
|
});
|
|
7031
|
-
const ResolvedPluginAuthSchemeDelegated =
|
|
7096
|
+
const ResolvedPluginAuthSchemeDelegated = z20.strictObject({
|
|
7032
7097
|
...ResolvedPluginAuthSchemeDescriptionFields,
|
|
7033
7098
|
localId: LocalContributionId2,
|
|
7034
7099
|
globalId: GlobalContributionId2,
|
|
7035
|
-
kind:
|
|
7036
|
-
scopes:
|
|
7100
|
+
kind: z20.literal("delegated"),
|
|
7101
|
+
scopes: z20.array(z20.string()).optional()
|
|
7037
7102
|
});
|
|
7038
|
-
const ResolvedPluginAuthSchemeExternalCli =
|
|
7103
|
+
const ResolvedPluginAuthSchemeExternalCli = z20.strictObject({
|
|
7039
7104
|
...ResolvedPluginAuthSchemeDescriptionFields,
|
|
7040
7105
|
localId: LocalContributionId2,
|
|
7041
7106
|
globalId: GlobalContributionId2,
|
|
7042
|
-
kind:
|
|
7043
|
-
scopes:
|
|
7107
|
+
kind: z20.literal("external-cli"),
|
|
7108
|
+
scopes: z20.array(z20.string()).optional(),
|
|
7044
7109
|
/** The manifest's connect facts, verbatim. */
|
|
7045
7110
|
cli: PluginExternalCliConnect2.optional()
|
|
7046
7111
|
});
|
|
7047
|
-
const ResolvedPluginAuthScheme2 =
|
|
7112
|
+
const ResolvedPluginAuthScheme2 = z20.discriminatedUnion("kind", [
|
|
7048
7113
|
ResolvedPluginAuthSchemeOAuth2,
|
|
7049
7114
|
ResolvedPluginAuthSchemeApiKey,
|
|
7050
7115
|
ResolvedPluginAuthSchemeDelegated,
|
|
7051
7116
|
ResolvedPluginAuthSchemeExternalCli
|
|
7052
7117
|
]);
|
|
7053
|
-
const ResolvedPluginWebSession2 =
|
|
7054
|
-
importance:
|
|
7118
|
+
const ResolvedPluginWebSession2 = z20.strictObject({
|
|
7119
|
+
importance: z20.enum(["required", "recommended"]),
|
|
7055
7120
|
loginUrl: HttpsUrl2,
|
|
7056
|
-
cookieDomains:
|
|
7057
|
-
probe:
|
|
7121
|
+
cookieDomains: z20.array(RegistrableDomain2).min(1),
|
|
7122
|
+
probe: z20.strictObject({
|
|
7058
7123
|
url: HttpsUrl2,
|
|
7059
|
-
method:
|
|
7060
|
-
signedInStatuses:
|
|
7124
|
+
method: z20.enum(["GET", "POST"]),
|
|
7125
|
+
signedInStatuses: z20.array(SignedInStatusCode2).min(1)
|
|
7061
7126
|
}),
|
|
7062
|
-
oauthVenue:
|
|
7063
|
-
signInFirst:
|
|
7127
|
+
oauthVenue: z20.enum(["embedded", "external"]),
|
|
7128
|
+
signInFirst: z20.string().optional()
|
|
7064
7129
|
}).superRefine(refineWebSessionScopeConfined);
|
|
7065
|
-
const ResolvedPluginAuthService2 =
|
|
7130
|
+
const ResolvedPluginAuthService2 = z20.strictObject({
|
|
7066
7131
|
localId: LocalContributionId2,
|
|
7067
7132
|
globalId: GlobalContributionId2,
|
|
7068
|
-
displayName:
|
|
7069
|
-
summary:
|
|
7070
|
-
schemes:
|
|
7071
|
-
purposes:
|
|
7133
|
+
displayName: z20.string(),
|
|
7134
|
+
summary: z20.string().optional(),
|
|
7135
|
+
schemes: z20.array(ResolvedPluginAuthScheme2).min(1),
|
|
7136
|
+
purposes: z20.array(z20.string()).min(1),
|
|
7072
7137
|
/** The service's browser half, when the manifest declares one. */
|
|
7073
7138
|
webSession: ResolvedPluginWebSession2.optional()
|
|
7074
7139
|
});
|
|
7075
|
-
const ResolvedKayUiAppEndpointCapability2 =
|
|
7076
|
-
|
|
7140
|
+
const ResolvedKayUiAppEndpointCapability2 = z20.union([
|
|
7141
|
+
z20.strictObject({
|
|
7077
7142
|
localId: LocalContributionId2,
|
|
7078
7143
|
globalId: GlobalContributionId2
|
|
7079
7144
|
}),
|
|
7080
|
-
|
|
7145
|
+
z20.strictObject({ pluginId: PluginId2, localId: LocalContributionId2 })
|
|
7081
7146
|
]);
|
|
7082
|
-
const ResolvedKayUiApp2 =
|
|
7147
|
+
const ResolvedKayUiApp2 = z20.strictObject({
|
|
7083
7148
|
localId: LocalContributionId2,
|
|
7084
7149
|
globalId: GlobalContributionId2,
|
|
7085
7150
|
displayName: NonEmptyString3,
|
|
7086
|
-
contextOnly:
|
|
7151
|
+
contextOnly: z20.literal(true).optional(),
|
|
7087
7152
|
description: NonEmptyString3.optional(),
|
|
7088
7153
|
icon: PackageAssetPath2.optional(),
|
|
7089
|
-
runtime:
|
|
7090
|
-
sdk:
|
|
7154
|
+
runtime: z20.literal("kay.react-app.v1"),
|
|
7155
|
+
sdk: z20.strictObject({ range: NonEmptyString3 }),
|
|
7091
7156
|
entrypoint: TargetEntrypoint2,
|
|
7092
|
-
styles:
|
|
7093
|
-
assets:
|
|
7094
|
-
capabilities:
|
|
7095
|
-
endpoints:
|
|
7096
|
-
host:
|
|
7097
|
-
feeds:
|
|
7157
|
+
styles: z20.array(PackageAssetPath2).optional(),
|
|
7158
|
+
assets: z20.array(PackageAssetPath2).optional(),
|
|
7159
|
+
capabilities: z20.strictObject({
|
|
7160
|
+
endpoints: z20.array(ResolvedKayUiAppEndpointCapability2).optional(),
|
|
7161
|
+
host: z20.array(KayUiAppHostCapability2).optional(),
|
|
7162
|
+
feeds: z20.array((canonical ? canonicalContributionSchemas : contributions_exports).UiAppCapabilityReference).optional()
|
|
7098
7163
|
}).optional()
|
|
7099
7164
|
});
|
|
7100
|
-
const ResolvedPluginContractV12 =
|
|
7101
|
-
protocol:
|
|
7165
|
+
const ResolvedPluginContractV12 = z20.strictObject({
|
|
7166
|
+
protocol: z20.literal("kay.plugin.v1"),
|
|
7102
7167
|
pluginId: PluginId2,
|
|
7103
7168
|
namespace: PluginNamespace2,
|
|
7104
|
-
contributions:
|
|
7169
|
+
contributions: z20.array(ResolvedPluginContributionId2),
|
|
7105
7170
|
// The deduplicated set of qualified (dotted) external auth-service ids this
|
|
7106
7171
|
// plugin references, from agent uriModule, tool and cliBinding
|
|
7107
7172
|
// `authService` refs, card sign-in refs, and auth-grant `service` refs. Always present - a plugin
|
|
@@ -7109,19 +7174,19 @@ function createResolvedContractSchemas(canonical) {
|
|
|
7109
7174
|
// is a recorded dependency, not a resolution: there is no runtime plugin
|
|
7110
7175
|
// loader in v1, so nothing here verifies the reference resolves within a
|
|
7111
7176
|
// composed roster (a composition-time concern owned elsewhere).
|
|
7112
|
-
consumesAuthServices:
|
|
7177
|
+
consumesAuthServices: z20.array(GlobalContributionId2),
|
|
7113
7178
|
// The explicit plugin-level dependency ids declared in `dependencies.plugins` on the manifest,
|
|
7114
7179
|
// deduped and validated at parse time. Always present; a plugin with no explicit dependencies
|
|
7115
7180
|
// carries an empty array. Composition checks each id against the accepted roster and derives the
|
|
7116
7181
|
// full dependency graph together with auth-inferred edges from `consumesAuthServices`.
|
|
7117
|
-
explicitDependencies:
|
|
7182
|
+
explicitDependencies: z20.array(PluginId2),
|
|
7118
7183
|
dataDirSharedWith: PluginId2.optional(),
|
|
7119
|
-
workers:
|
|
7184
|
+
workers: z20.array(z20.strictObject({
|
|
7120
7185
|
localId: LocalContributionId2,
|
|
7121
7186
|
module: PackageAssetPath2
|
|
7122
7187
|
})).optional(),
|
|
7123
|
-
workloadPurposes:
|
|
7124
|
-
shellCommands:
|
|
7188
|
+
workloadPurposes: z20.array(PluginWorkloadPurpose).optional(),
|
|
7189
|
+
shellCommands: z20.array(PluginShellCommand.omit({ endpoint: true }).extend({
|
|
7125
7190
|
endpointId: GlobalContributionId2
|
|
7126
7191
|
})).optional(),
|
|
7127
7192
|
projectDirectories: PluginProjectDirectories.omit({ endpoint: true }).extend({ endpointId: GlobalContributionId2 }).optional(),
|
|
@@ -7129,27 +7194,27 @@ function createResolvedContractSchemas(canonical) {
|
|
|
7129
7194
|
// target must register and the credential authority keys on. Always present;
|
|
7130
7195
|
// a plugin that declares no `auth.services` carries an empty array. The dual
|
|
7131
7196
|
// of `consumesAuthServices` (services it merely references).
|
|
7132
|
-
authServices:
|
|
7197
|
+
authServices: z20.array(ResolvedPluginAuthService2),
|
|
7133
7198
|
grants: ResolvedPluginGrants2.optional(),
|
|
7134
|
-
kayAgentFamilyFolder:
|
|
7135
|
-
kayAgentUriModules:
|
|
7136
|
-
kayAgentArtifactUriModules:
|
|
7137
|
-
kayAgentEntityResolvers:
|
|
7138
|
-
kayAgentGitHostClaims:
|
|
7139
|
-
kayAgentTools:
|
|
7140
|
-
kayAppArtifacts:
|
|
7141
|
-
kayAppUriModules:
|
|
7142
|
-
kayAppTools:
|
|
7143
|
-
kayAppApprovalTypes:
|
|
7144
|
-
kayAppWorkflows:
|
|
7145
|
-
kayAppCards:
|
|
7146
|
-
kayAppDataSources:
|
|
7147
|
-
kayAppWhiteboardTypes:
|
|
7148
|
-
kayAppWorkingDocumentProviders:
|
|
7149
|
-
kayAppMcpServers:
|
|
7150
|
-
kayAgentConverters:
|
|
7151
|
-
referencePresentations:
|
|
7152
|
-
kayUiApps:
|
|
7199
|
+
kayAgentFamilyFolder: z20.strictObject({ scope: z20.literal("root") }).optional(),
|
|
7200
|
+
kayAgentUriModules: z20.array(ResolvedKayAgentUriModule2).optional(),
|
|
7201
|
+
kayAgentArtifactUriModules: z20.array(ResolvedKayAgentArtifactUriModule2).optional(),
|
|
7202
|
+
kayAgentEntityResolvers: z20.array(ResolvedKayAgentEntityResolver2).optional(),
|
|
7203
|
+
kayAgentGitHostClaims: z20.array(ResolvedKayAgentGitHostClaim2).optional(),
|
|
7204
|
+
kayAgentTools: z20.array(ResolvedKayAgentTool2).optional(),
|
|
7205
|
+
kayAppArtifacts: z20.strictObject({ outputs: z20.literal(true) }).optional(),
|
|
7206
|
+
kayAppUriModules: z20.array(ResolvedKayAgentUriModule2).optional(),
|
|
7207
|
+
kayAppTools: z20.array(ResolvedKayAppTool2).optional(),
|
|
7208
|
+
kayAppApprovalTypes: z20.array(ResolvedKayAppApprovalType2).optional(),
|
|
7209
|
+
kayAppWorkflows: z20.array(ResolvedKayAppWorkflow2).optional(),
|
|
7210
|
+
kayAppCards: z20.array(ResolvedPluginCard2).optional(),
|
|
7211
|
+
kayAppDataSources: z20.array(ResolvedKayAppDataSource2).optional(),
|
|
7212
|
+
kayAppWhiteboardTypes: z20.array(ResolvedKayAppWhiteboardType2).optional(),
|
|
7213
|
+
kayAppWorkingDocumentProviders: z20.array(ResolvedKayAppWorkingDocumentProvider2).optional(),
|
|
7214
|
+
kayAppMcpServers: z20.array(ResolvedKayAppMcpServer2).optional(),
|
|
7215
|
+
kayAgentConverters: z20.array(ResolvedKayAgentConverter2).optional(),
|
|
7216
|
+
referencePresentations: z20.array(ResolvedReferencePresentation2).optional(),
|
|
7217
|
+
kayUiApps: z20.array(ResolvedKayUiApp2).optional()
|
|
7153
7218
|
});
|
|
7154
7219
|
return {
|
|
7155
7220
|
ResolvedPluginContributionId: ResolvedPluginContributionId2,
|
|
@@ -7929,14 +7994,14 @@ function kayPluginCompatibilityAdvisories(input) {
|
|
|
7929
7994
|
message: boundPluginDiagnosticMessage(`${manifest.displayName} (${manifest.id}) ${advisory.message}`)
|
|
7930
7995
|
}));
|
|
7931
7996
|
}
|
|
7932
|
-
var ReadableCompatibility =
|
|
7933
|
-
supportedProtocols:
|
|
7997
|
+
var ReadableCompatibility = z21.object({
|
|
7998
|
+
supportedProtocols: z21.array(z21.string()).optional().catch(void 0),
|
|
7934
7999
|
minKayVersion: NonEmptyString.optional().catch(void 0),
|
|
7935
8000
|
sdk: NonEmptyString.optional().catch(void 0)
|
|
7936
8001
|
});
|
|
7937
|
-
var ReadableManifestHead =
|
|
7938
|
-
id:
|
|
7939
|
-
displayName:
|
|
8002
|
+
var ReadableManifestHead = z21.object({
|
|
8003
|
+
id: z21.string().optional().catch(void 0),
|
|
8004
|
+
displayName: z21.string().optional().catch(void 0),
|
|
7940
8005
|
compatibility: ReadableCompatibility.optional().catch(void 0)
|
|
7941
8006
|
});
|
|
7942
8007
|
function keepNamespaceDerivedTools(contract, grandfathered) {
|
|
@@ -8043,28 +8108,28 @@ function errorText(error) {
|
|
|
8043
8108
|
}
|
|
8044
8109
|
|
|
8045
8110
|
// packages/plugin-protocol/dist/session-health.js
|
|
8046
|
-
import { z as
|
|
8111
|
+
import { z as z22 } from "zod";
|
|
8047
8112
|
var SESSION_HEALTH_EXTENSION_ID = "kay.session-health";
|
|
8048
8113
|
var SESSION_HEALTH_ENTRY_NAME = "session_health";
|
|
8049
8114
|
var SESSION_HEALTH_CUSTOM_TYPE = `ext:${SESSION_HEALTH_EXTENSION_ID}:${SESSION_HEALTH_ENTRY_NAME}`;
|
|
8050
8115
|
var SESSION_HEALTH_CLASSIFIER_IDS = ["jev"];
|
|
8051
|
-
var sessionHealthEntrySchema =
|
|
8052
|
-
v:
|
|
8053
|
-
verdict:
|
|
8116
|
+
var sessionHealthEntrySchema = z22.object({
|
|
8117
|
+
v: z22.literal(1),
|
|
8118
|
+
verdict: z22.enum(["well", "bad", "unknown"]),
|
|
8054
8119
|
/**
|
|
8055
8120
|
* The model's calibrated confidence in `well`, 0..1, or null when the
|
|
8056
8121
|
* classifier declined to produce one. Never exported raw: the telemetry
|
|
8057
8122
|
* event carries only the decile bucket.
|
|
8058
8123
|
*/
|
|
8059
|
-
p_well:
|
|
8060
|
-
classifier:
|
|
8061
|
-
classifier_version:
|
|
8062
|
-
judged_at:
|
|
8063
|
-
user_entry_id:
|
|
8064
|
-
through_entry_id:
|
|
8065
|
-
usage:
|
|
8066
|
-
input_tokens:
|
|
8067
|
-
output_tokens:
|
|
8124
|
+
p_well: z22.number().min(0).max(1).nullable(),
|
|
8125
|
+
classifier: z22.enum(SESSION_HEALTH_CLASSIFIER_IDS),
|
|
8126
|
+
classifier_version: z22.string().min(1).max(64),
|
|
8127
|
+
judged_at: z22.number().int().nonnegative(),
|
|
8128
|
+
user_entry_id: z22.string().min(1).max(256),
|
|
8129
|
+
through_entry_id: z22.string().min(1).max(256),
|
|
8130
|
+
usage: z22.strictObject({
|
|
8131
|
+
input_tokens: z22.number().int().nonnegative(),
|
|
8132
|
+
output_tokens: z22.number().int().nonnegative()
|
|
8068
8133
|
}).optional()
|
|
8069
8134
|
});
|
|
8070
8135
|
function sessionHealthPWellDecile(pWell) {
|
|
@@ -8074,28 +8139,28 @@ function sessionHealthPWellDecile(pWell) {
|
|
|
8074
8139
|
}
|
|
8075
8140
|
|
|
8076
8141
|
// packages/plugin-protocol/dist/resource-invocations.js
|
|
8077
|
-
import { z as
|
|
8142
|
+
import { z as z24 } from "zod";
|
|
8078
8143
|
|
|
8079
8144
|
// packages/plugin-protocol/dist/resource-invocation-cursor.js
|
|
8080
|
-
import { z as
|
|
8081
|
-
var CorpusResourceInvocationCursor =
|
|
8082
|
-
at:
|
|
8083
|
-
eventId:
|
|
8145
|
+
import { z as z23 } from "zod";
|
|
8146
|
+
var CorpusResourceInvocationCursor = z23.strictObject({
|
|
8147
|
+
at: z23.iso.datetime({ offset: true }),
|
|
8148
|
+
eventId: z23.string().min(1)
|
|
8084
8149
|
});
|
|
8085
8150
|
|
|
8086
8151
|
// packages/plugin-protocol/dist/resource-invocations.js
|
|
8087
|
-
var CorpusResourceKind =
|
|
8152
|
+
var CorpusResourceKind = z24.enum([
|
|
8088
8153
|
"skill",
|
|
8089
8154
|
"context-file",
|
|
8090
8155
|
"prompt-command"
|
|
8091
8156
|
]);
|
|
8092
|
-
var CorpusResourceInvocationQuery =
|
|
8157
|
+
var CorpusResourceInvocationQuery = z24.strictObject({
|
|
8093
8158
|
kind: CorpusResourceKind,
|
|
8094
|
-
since:
|
|
8095
|
-
until:
|
|
8159
|
+
since: z24.iso.datetime({ offset: true }),
|
|
8160
|
+
until: z24.iso.datetime({ offset: true }),
|
|
8096
8161
|
after: CorpusResourceInvocationCursor.optional(),
|
|
8097
|
-
limit:
|
|
8098
|
-
rootCreatedByKind:
|
|
8162
|
+
limit: z24.number().int().min(1).max(1e3).optional(),
|
|
8163
|
+
rootCreatedByKind: z24.enum(AGENT_RUNTIME_SESSION_CREATOR_KINDS).optional()
|
|
8099
8164
|
}).refine((value) => Date.parse(value.since) < Date.parse(value.until), {
|
|
8100
8165
|
message: "since must precede until"
|
|
8101
8166
|
});
|
|
@@ -8275,14 +8340,14 @@ function skillSuggestionEvidenceItems(evidence, options = {}) {
|
|
|
8275
8340
|
}
|
|
8276
8341
|
|
|
8277
8342
|
// packages/plugin-protocol/dist/ui-app-package.js
|
|
8278
|
-
import { z as
|
|
8343
|
+
import { z as z25 } from "zod";
|
|
8279
8344
|
var KAY_UI_APP_PACKAGE_PROTOCOL = "kay.ui.app-package.v1";
|
|
8280
8345
|
var KAY_UI_BUNDLE_INDEX_PROTOCOL = "kay.ui.bundle-index.v1";
|
|
8281
|
-
var KayUiBundleOutputPath =
|
|
8282
|
-
var KayUiBundleIndexV1 =
|
|
8283
|
-
protocol:
|
|
8346
|
+
var KayUiBundleOutputPath = z25.string().trim().min(1).refine((value) => !value.startsWith("/") && !value.startsWith("./") && !value.includes("\\") && !value.split("/").includes(".."), { message: "bundle output path must stay relative to the bundle root" });
|
|
8347
|
+
var KayUiBundleIndexV1 = z25.strictObject({
|
|
8348
|
+
protocol: z25.literal(KAY_UI_BUNDLE_INDEX_PROTOCOL),
|
|
8284
8349
|
entryPath: KayUiBundleOutputPath,
|
|
8285
|
-
files:
|
|
8350
|
+
files: z25.array(z25.strictObject({
|
|
8286
8351
|
path: KayUiBundleOutputPath,
|
|
8287
8352
|
mediaType: NonEmptyString
|
|
8288
8353
|
})).min(1)
|
|
@@ -8309,19 +8374,19 @@ var KayUiBundleIndexV1 = z24.strictObject({
|
|
|
8309
8374
|
function parseKayUiBundleIndexV1(input) {
|
|
8310
8375
|
return KayUiBundleIndexV1.parse(input);
|
|
8311
8376
|
}
|
|
8312
|
-
var KayUiAppPackageFile =
|
|
8377
|
+
var KayUiAppPackageFile = z25.strictObject({
|
|
8313
8378
|
path: PackageAssetPath,
|
|
8314
8379
|
mediaType: NonEmptyString,
|
|
8315
|
-
bytes:
|
|
8380
|
+
bytes: z25.instanceof(Uint8Array).refine((bytes) => bytes.byteLength > 0, {
|
|
8316
8381
|
message: "app package file bytes must not be empty"
|
|
8317
8382
|
})
|
|
8318
8383
|
});
|
|
8319
|
-
var KayUiAppPackageV1 =
|
|
8320
|
-
protocol:
|
|
8384
|
+
var KayUiAppPackageV1 = z25.strictObject({
|
|
8385
|
+
protocol: z25.literal(KAY_UI_APP_PACKAGE_PROTOCOL),
|
|
8321
8386
|
appLocalId: LocalContributionId,
|
|
8322
8387
|
entry: KayUiAppPackageFile,
|
|
8323
|
-
styles:
|
|
8324
|
-
assets:
|
|
8388
|
+
styles: z25.array(KayUiAppPackageFile).optional(),
|
|
8389
|
+
assets: z25.array(KayUiAppPackageFile).optional()
|
|
8325
8390
|
}).superRefine((appPackage, ctx) => {
|
|
8326
8391
|
if (appPackage.entry.mediaType !== "application/javascript") {
|
|
8327
8392
|
ctx.addIssue({
|
|
@@ -8358,28 +8423,28 @@ function parseKayUiAppPackageV1(input) {
|
|
|
8358
8423
|
}
|
|
8359
8424
|
|
|
8360
8425
|
// packages/plugin-protocol/dist/product-events.js
|
|
8361
|
-
import { z as
|
|
8426
|
+
import { z as z26 } from "zod";
|
|
8362
8427
|
var exportable = {
|
|
8363
|
-
class:
|
|
8364
|
-
optional:
|
|
8428
|
+
class: z26.literal("exportable"),
|
|
8429
|
+
optional: z26.boolean().optional()
|
|
8365
8430
|
};
|
|
8366
|
-
var PluginProductEventField =
|
|
8367
|
-
|
|
8368
|
-
|
|
8431
|
+
var PluginProductEventField = z26.union([
|
|
8432
|
+
z26.strictObject({ class: z26.literal("local") }),
|
|
8433
|
+
z26.strictObject({
|
|
8369
8434
|
...exportable,
|
|
8370
|
-
type:
|
|
8371
|
-
values:
|
|
8435
|
+
type: z26.literal("enum"),
|
|
8436
|
+
values: z26.array(z26.string())
|
|
8372
8437
|
}),
|
|
8373
|
-
|
|
8438
|
+
z26.strictObject({
|
|
8374
8439
|
...exportable,
|
|
8375
|
-
type:
|
|
8376
|
-
min:
|
|
8377
|
-
max:
|
|
8378
|
-
integer:
|
|
8440
|
+
type: z26.literal("number"),
|
|
8441
|
+
min: z26.number(),
|
|
8442
|
+
max: z26.number(),
|
|
8443
|
+
integer: z26.boolean().optional()
|
|
8379
8444
|
}),
|
|
8380
|
-
|
|
8445
|
+
z26.strictObject({
|
|
8381
8446
|
...exportable,
|
|
8382
|
-
type:
|
|
8447
|
+
type: z26.enum([
|
|
8383
8448
|
"boolean",
|
|
8384
8449
|
"id",
|
|
8385
8450
|
"identifier",
|
|
@@ -8395,9 +8460,9 @@ function isPluginProductEventName(name) {
|
|
|
8395
8460
|
}
|
|
8396
8461
|
|
|
8397
8462
|
// packages/plugin-protocol/dist/artifact-outputs.js
|
|
8398
|
-
import { z as
|
|
8463
|
+
import { z as z27 } from "zod";
|
|
8399
8464
|
var ARTIFACT_OUTPUT_PAGE_MAX = 200;
|
|
8400
|
-
var Segment =
|
|
8465
|
+
var Segment = z27.string().min(1).max(1024).refine((value) => !/[^A-Za-z0-9._-]/.test(value)).refine((value) => value !== "." && value !== "..");
|
|
8401
8466
|
function parseArtifactOutputUri(uri) {
|
|
8402
8467
|
const match = /^output:\/\/([^/]+)\/([^/]+)$/.exec(uri);
|
|
8403
8468
|
if (match === null || !Segment.safeParse(match[1]).success || !Segment.safeParse(match[2]).success)
|
|
@@ -8407,12 +8472,12 @@ function parseArtifactOutputUri(uri) {
|
|
|
8407
8472
|
function isCanonicalArtifactOutputUri(uri) {
|
|
8408
8473
|
return parseArtifactOutputUri(uri) !== void 0;
|
|
8409
8474
|
}
|
|
8410
|
-
var ArtifactOutputUri =
|
|
8411
|
-
var ArtifactOutputChange =
|
|
8412
|
-
|
|
8413
|
-
uris:
|
|
8475
|
+
var ArtifactOutputUri = z27.string().refine(isCanonicalArtifactOutputUri, "Expected a canonical output://session/name URI");
|
|
8476
|
+
var ArtifactOutputChange = z27.union([
|
|
8477
|
+
z27.strictObject({
|
|
8478
|
+
uris: z27.array(ArtifactOutputUri).min(1).max(ARTIFACT_OUTPUT_PAGE_MAX)
|
|
8414
8479
|
}),
|
|
8415
|
-
|
|
8480
|
+
z27.strictObject({ sessionId: Segment })
|
|
8416
8481
|
]);
|
|
8417
8482
|
|
|
8418
8483
|
// packages/plugin-protocol/dist/credential-text.js
|
|
@@ -8455,25 +8520,25 @@ function isCredentialShapedText(value) {
|
|
|
8455
8520
|
}
|
|
8456
8521
|
|
|
8457
8522
|
// packages/plugin-protocol/dist/ui-module-bundle.js
|
|
8458
|
-
import { z as
|
|
8523
|
+
import { z as z28 } from "zod";
|
|
8459
8524
|
var KAY_UI_MODULE_BUNDLE_PROTOCOL = "kay.ui.module-bundle.v1";
|
|
8460
8525
|
var KAY_UI_MODULE_FILE_MAX_BYTES = 8 * 1024 * 1024;
|
|
8461
8526
|
var KAY_UI_MODULE_BUNDLE_MAX_BYTES = 32 * 1024 * 1024;
|
|
8462
8527
|
var KAY_UI_MODULE_BUNDLE_MAX_FILES = 256;
|
|
8463
|
-
var OutputPath =
|
|
8528
|
+
var OutputPath = z28.string().min(1).max(1024).refine((value) => {
|
|
8464
8529
|
const parsed = KayUiBundleIndexV1.shape.entryPath.safeParse(value);
|
|
8465
8530
|
return parsed.success && parsed.data === value && value.split("/").every((part) => part !== "" && part !== ".") && // oxlint-disable-next-line eslint/no-control-regex -- Untrusted artifact paths must reject literal control characters.
|
|
8466
8531
|
!/[\u0000-\u001f?#:%]/.test(value);
|
|
8467
8532
|
}, { message: "bundle path must contain only unambiguous relative segments" });
|
|
8468
|
-
var Sha256 =
|
|
8469
|
-
var KayUiModuleBundleIndexV1 =
|
|
8470
|
-
protocol:
|
|
8533
|
+
var Sha256 = z28.string().regex(/^[a-f0-9]{64}$/);
|
|
8534
|
+
var KayUiModuleBundleIndexV1 = z28.strictObject({
|
|
8535
|
+
protocol: z28.literal(KAY_UI_MODULE_BUNDLE_PROTOCOL),
|
|
8471
8536
|
entryPath: OutputPath,
|
|
8472
|
-
stylePaths:
|
|
8473
|
-
files:
|
|
8537
|
+
stylePaths: z28.array(OutputPath).max(KAY_UI_MODULE_BUNDLE_MAX_FILES),
|
|
8538
|
+
files: z28.array(z28.strictObject({
|
|
8474
8539
|
path: OutputPath,
|
|
8475
|
-
mediaType:
|
|
8476
|
-
byteLength:
|
|
8540
|
+
mediaType: z28.string().min(1).max(128).regex(/^[a-zA-Z0-9!#$&^_.+-]+\/[a-zA-Z0-9!#$&^_.+-]+$/),
|
|
8541
|
+
byteLength: z28.number().int().min(1).max(KAY_UI_MODULE_FILE_MAX_BYTES),
|
|
8477
8542
|
sha256: Sha256
|
|
8478
8543
|
})).min(1).max(KAY_UI_MODULE_BUNDLE_MAX_FILES)
|
|
8479
8544
|
}).superRefine((index, ctx) => {
|
|
@@ -8503,9 +8568,9 @@ var KayUiModuleBundleIndexV1 = z27.strictObject({
|
|
|
8503
8568
|
message: "bundle exceeds byte cap"
|
|
8504
8569
|
});
|
|
8505
8570
|
});
|
|
8506
|
-
var KayUiModuleBundleReference =
|
|
8571
|
+
var KayUiModuleBundleReference = z28.strictObject({
|
|
8507
8572
|
generationId: Sha256,
|
|
8508
|
-
revision:
|
|
8573
|
+
revision: z28.string().min(1).max(4096).refine((value) => value.trim() === value),
|
|
8509
8574
|
index: KayUiModuleBundleIndexV1
|
|
8510
8575
|
});
|
|
8511
8576
|
export {
|
|
@@ -8638,6 +8703,10 @@ export {
|
|
|
8638
8703
|
PLUGIN_SIGNAL_RELATED_KEYS,
|
|
8639
8704
|
PLUGIN_SIGNAL_SNIPPET_MAX,
|
|
8640
8705
|
PLUGIN_SIGNAL_TITLE_MAX,
|
|
8706
|
+
PLUGIN_STATE_ENTRY_MAX_BYTES,
|
|
8707
|
+
PLUGIN_STATE_ENTRY_MAX_DEPTH,
|
|
8708
|
+
PLUGIN_STATE_ENTRY_NAME_PATTERN,
|
|
8709
|
+
PLUGIN_STATE_ENTRY_TYPE_PREFIX,
|
|
8641
8710
|
PRIVATE_PLUGIN_CAPABILITY_SLUGS,
|
|
8642
8711
|
PackageAssetPath,
|
|
8643
8712
|
PluginAgentDefinitionPermissionRule,
|
|
@@ -8695,6 +8764,7 @@ export {
|
|
|
8695
8764
|
ProjectDirectoryResponse,
|
|
8696
8765
|
RENAMED_PLUGIN_CAPABILITY_SLUGS,
|
|
8697
8766
|
RESERVED_DIRECTORY_PLUGIN_ID_PREFIXES,
|
|
8767
|
+
RESET_TEXT_MAX_CHARS,
|
|
8698
8768
|
RETIRED_COMPATIBILITY_KEYS,
|
|
8699
8769
|
RETIRED_PERMISSION_ASK_KEYS,
|
|
8700
8770
|
RETIRED_PLUGIN_CAPABILITY_SLUGS,
|
|
@@ -8710,6 +8780,8 @@ export {
|
|
|
8710
8780
|
ReferencePresentationVariants,
|
|
8711
8781
|
ReferencePresentationWords,
|
|
8712
8782
|
RegistrableDomain,
|
|
8783
|
+
ResetTextContribution,
|
|
8784
|
+
ResetTextEntry,
|
|
8713
8785
|
ResolvedAuthGrantRequest,
|
|
8714
8786
|
ResolvedEndpointGrantRequest,
|
|
8715
8787
|
ResolvedKayAgentArtifactUriModule,
|
|
@@ -8830,6 +8902,7 @@ export {
|
|
|
8830
8902
|
isDeclaredLocalAppLink,
|
|
8831
8903
|
isKayPluginCompatibilityRefusal,
|
|
8832
8904
|
isPluginProductEventName,
|
|
8905
|
+
isPluginStateEntryCustomType,
|
|
8833
8906
|
isPrivateCapabilityClaim,
|
|
8834
8907
|
isQualifiedAuthSchemeRef,
|
|
8835
8908
|
isQualifiedAuthServiceRef,
|
|
@@ -8854,6 +8927,7 @@ export {
|
|
|
8854
8927
|
parseWhere,
|
|
8855
8928
|
pluginIconShape,
|
|
8856
8929
|
pluginSignalPayloadJsonSchema,
|
|
8930
|
+
pluginStateEntryCustomType,
|
|
8857
8931
|
precedingPersonMessages,
|
|
8858
8932
|
readKayPluginDeclaredCompatibility,
|
|
8859
8933
|
refineWebSessionScopeConfined,
|