@inf-monkeys-tech/monkeys 1.0.65 → 1.0.66

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.
Files changed (61) hide show
  1. package/README.md +6 -0
  2. package/lib/contracts/capability.d.ts +4 -0
  3. package/lib/contracts/capability.d.ts.map +1 -1
  4. package/lib/contracts/capability.js +1 -0
  5. package/lib/contracts/capability.js.map +1 -1
  6. package/lib/contracts/declarative-control-http.d.ts +81284 -0
  7. package/lib/contracts/declarative-control-http.d.ts.map +1 -0
  8. package/lib/contracts/declarative-control-http.js +926 -0
  9. package/lib/contracts/declarative-control-http.js.map +1 -0
  10. package/lib/contracts/declarative-control.d.ts +17709 -0
  11. package/lib/contracts/declarative-control.d.ts.map +1 -0
  12. package/lib/contracts/declarative-control.js +1075 -0
  13. package/lib/contracts/declarative-control.js.map +1 -0
  14. package/lib/contracts/index.d.ts +2 -0
  15. package/lib/contracts/index.d.ts.map +1 -1
  16. package/lib/contracts/index.js +2 -0
  17. package/lib/contracts/index.js.map +1 -1
  18. package/lib/contracts/menu.d.ts +1 -1
  19. package/lib/contracts/page.d.ts +3 -3
  20. package/lib/contracts/semantic.d.ts +78 -1
  21. package/lib/contracts/semantic.d.ts.map +1 -1
  22. package/lib/contracts/semantic.js +27 -1
  23. package/lib/contracts/semantic.js.map +1 -1
  24. package/lib/contracts/tenant.d.ts +12 -12
  25. package/lib/contracts/trend.d.ts +4 -4
  26. package/lib/esm/contracts/index.mjs +2868 -1028
  27. package/lib/esm/contracts/index.mjs.map +1 -1
  28. package/lib/esm/index.mjs +5746 -3027
  29. package/lib/esm/index.mjs.map +1 -1
  30. package/lib/esm/runtime/index.mjs +2415 -594
  31. package/lib/esm/runtime/index.mjs.map +1 -1
  32. package/lib/esm/schemas/index.mjs +1986 -962
  33. package/lib/esm/schemas/index.mjs.map +1 -1
  34. package/lib/json-schema/capability-registry.schema.json +2 -1
  35. package/lib/json-schema/declarative-control-ontology-definition.schema.json +130 -0
  36. package/lib/json-schema/index.json +13 -0
  37. package/lib/json-schema/navigation-release.schema.json +2037 -0
  38. package/lib/json-schema/navigation-runtime-bundle.schema.json +7497 -0
  39. package/lib/json-schema/navigation.schema.json +4649 -0
  40. package/lib/json-schema/page-release.schema.json +2457 -0
  41. package/lib/json-schema/page-runtime-bundle.schema.json +5705 -0
  42. package/lib/json-schema/page.schema.json +7944 -0
  43. package/lib/json-schema/publication-plan.schema.json +1286 -0
  44. package/lib/json-schema/route-space.schema.json +93 -0
  45. package/lib/json-schema/stable-ref-alias-map.schema.json +535 -0
  46. package/lib/json-schema/workbench-release.schema.json +2473 -0
  47. package/lib/json-schema/workbench-runtime-bundle.schema.json +5274 -0
  48. package/lib/json-schema/workbench.schema.json +6698 -0
  49. package/lib/runtime/declarative-control-compiler.d.ts +141 -0
  50. package/lib/runtime/declarative-control-compiler.d.ts.map +1 -0
  51. package/lib/runtime/declarative-control-compiler.js +874 -0
  52. package/lib/runtime/declarative-control-compiler.js.map +1 -0
  53. package/lib/runtime/index.d.ts +1 -0
  54. package/lib/runtime/index.d.ts.map +1 -1
  55. package/lib/runtime/index.js +1 -0
  56. package/lib/runtime/index.js.map +1 -1
  57. package/lib/schemas/index.d.ts +14116 -3955
  58. package/lib/schemas/index.d.ts.map +1 -1
  59. package/lib/schemas/index.js +76 -4
  60. package/lib/schemas/index.js.map +1 -1
  61. package/package.json +1 -1
@@ -0,0 +1,1075 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CompiledNavigationRegisteredMenuActionTargetSchema = exports.WorkbenchRuntimeBundleSchema = exports.ResolvedWorkbenchAppInstanceSchema = exports.PageRuntimeBundleSchema = exports.NavigationReleaseSchema = exports.ResolvedNavigationTargetSchema = exports.NavigationSchema = exports.NavigationNodeSchema = exports.NavigationSeparatorNodeSchema = exports.NavigationTargetNodeSchema = exports.NavigationGroupNodeSchema = exports.WorkbenchReleaseSchema = exports.WorkbenchSchema = exports.WorkbenchAppInstanceSchema = exports.WorkbenchGroupSchema = exports.PageReleaseSchema = exports.PageSchema = exports.ActionBindingSchema = exports.OntologyBindingSchema = exports.CapabilityInstanceSchema = exports.BindingSourceSchema = exports.WorkbenchIdentitySchema = exports.PublicationPlanSchema = exports.PublicationPlanOperationSchema = exports.ReleaseEvidenceSchema = exports.ReleaseValidationSchema = exports.ReleaseDependencySchema = exports.ReleaseDependencyRoleSchema = exports.ReleaseOperationSchema = exports.CompiledRouteClaimSchema = exports.CompiledRouteMatcherSchema = exports.DeclarativeRouteClaimSchema = exports.RouteClaimSchema = exports.LegacyRouteClaimSchema = exports.RouteSpaceSchema = exports.RouteSpaceParameterSchema = exports.RoutePathTemplateSchema = exports.ManagementAccessSchema = exports.AccessPolicySchema = exports.ProductSurfaceSchema = exports.DeclarativeLifecycleSchema = exports.StableRefAliasMapSchema = exports.StableRefAliasSchema = exports.RevisionRefSchema = exports.StableRefSchema = exports.ReferenceVisibilitySchema = exports.TenantScopeSchema = exports.ScopedIdentityRefSchema = exports.I18nTextSchema = exports.DECLARATIVE_CONTROL_SCHEMA_VERSION = void 0;
4
+ exports.DECLARATIVE_CONTROL_ONTOLOGY_DEFINITIONS = exports.DeclarativeControlOntologyDefinitionSchema = exports.NavigationRuntimeBundleSchema = exports.CompiledNavigationNodeSchema = exports.CompiledNavigationSeparatorNodeSchema = exports.CompiledNavigationTargetNodeSchema = exports.CompiledNavigationGroupNodeSchema = exports.CompiledNavigationResolvedTargetSchema = exports.CompiledNavigationDomainCommandTargetSchema = void 0;
5
+ const zod_1 = require("zod");
6
+ const common_1 = require("./common");
7
+ const data_1 = require("./data");
8
+ const render_1 = require("./render");
9
+ exports.DECLARATIVE_CONTROL_SCHEMA_VERSION = 1;
10
+ const uniqueArray = (values, identity) => {
11
+ const seen = new Set();
12
+ for (const value of values) {
13
+ const key = identity(value);
14
+ if (seen.has(key))
15
+ return key;
16
+ seen.add(key);
17
+ }
18
+ return undefined;
19
+ };
20
+ exports.I18nTextSchema = zod_1.z
21
+ .object({
22
+ defaultLocale: common_1.LocaleIdentifierSchema,
23
+ values: zod_1.z.record(common_1.LocaleIdentifierSchema, zod_1.z.string().trim().min(1)),
24
+ })
25
+ .strict()
26
+ .superRefine((value, context) => {
27
+ if (!Object.prototype.hasOwnProperty.call(value.values, value.defaultLocale)) {
28
+ context.addIssue({
29
+ code: 'custom',
30
+ path: ['values', value.defaultLocale],
31
+ message: 'I18nText values must contain the default locale.',
32
+ });
33
+ }
34
+ });
35
+ exports.ScopedIdentityRefSchema = zod_1.z
36
+ .object({
37
+ kind: common_1.ContractIdentifierSchema,
38
+ id: common_1.ContractIdentifierSchema,
39
+ ownerRepo: common_1.ContractIdentifierSchema,
40
+ })
41
+ .strict();
42
+ exports.TenantScopeSchema = zod_1.z
43
+ .object({
44
+ tenantRef: exports.ScopedIdentityRefSchema,
45
+ dataSpaceRef: exports.ScopedIdentityRefSchema,
46
+ teamRef: exports.ScopedIdentityRefSchema.optional(),
47
+ })
48
+ .strict()
49
+ .superRefine((value, context) => {
50
+ const expectedKinds = [
51
+ ['tenantRef', value.tenantRef, 'tenant'],
52
+ ['dataSpaceRef', value.dataSpaceRef, 'data-space'],
53
+ ['teamRef', value.teamRef, 'team'],
54
+ ];
55
+ expectedKinds.forEach(([field, reference, expectedKind]) => {
56
+ if (reference && reference.kind !== expectedKind) {
57
+ context.addIssue({ code: 'custom', path: [field, 'kind'], message: `${field} must reference ${expectedKind}.` });
58
+ }
59
+ });
60
+ });
61
+ exports.ReferenceVisibilitySchema = zod_1.z.enum(['tenant', 'global', 'public']);
62
+ const StableRefShape = {
63
+ kind: common_1.ContractIdentifierSchema,
64
+ id: common_1.ContractIdentifierSchema,
65
+ ownerRepo: common_1.ContractIdentifierSchema,
66
+ visibility: exports.ReferenceVisibilitySchema,
67
+ tenantScope: exports.TenantScopeSchema.optional(),
68
+ };
69
+ const validateReferenceScope = (value, context) => {
70
+ if (value.visibility === 'tenant' && !value.tenantScope) {
71
+ context.addIssue({ code: 'custom', path: ['tenantScope'], message: 'Tenant references require an explicit tenant scope.' });
72
+ }
73
+ if (value.visibility !== 'tenant' && value.tenantScope) {
74
+ context.addIssue({ code: 'custom', path: ['tenantScope'], message: 'Global and public references cannot carry a tenant scope.' });
75
+ }
76
+ };
77
+ exports.StableRefSchema = zod_1.z
78
+ .object(StableRefShape)
79
+ .strict()
80
+ .superRefine(validateReferenceScope);
81
+ exports.RevisionRefSchema = zod_1.z
82
+ .object({
83
+ ...StableRefShape,
84
+ revision: zod_1.z.number().int().positive(),
85
+ schemaVersion: common_1.ContractVersionSchema,
86
+ contentHash: common_1.Sha256Schema,
87
+ })
88
+ .strict()
89
+ .superRefine(validateReferenceScope);
90
+ const scopedIdentityKey = (reference) => `${reference.kind}:${reference.id}:${reference.ownerRepo}`;
91
+ const tenantScopeKey = (scope) => `${scopedIdentityKey(scope.tenantRef)}:${scopedIdentityKey(scope.dataSpaceRef)}:${scope.teamRef ? scopedIdentityKey(scope.teamRef) : ''}`;
92
+ const stableRefIdentity = (reference) => `${reference.visibility}:${reference.tenantScope ? tenantScopeKey(reference.tenantScope) : ''}:${reference.kind}:${reference.id}:${reference.ownerRepo}`;
93
+ const exactRevisionRef = (left, right) => stableRefIdentity(left) === stableRefIdentity(right)
94
+ && left.revision === right.revision
95
+ && left.schemaVersion === right.schemaVersion
96
+ && left.contentHash === right.contentHash;
97
+ exports.StableRefAliasSchema = zod_1.z
98
+ .object({
99
+ aliasRef: exports.StableRefSchema,
100
+ canonicalRef: exports.StableRefSchema,
101
+ validFrom: common_1.IsoDateTimeSchema,
102
+ validUntil: common_1.IsoDateTimeSchema.nullable(),
103
+ evidenceRef: exports.RevisionRefSchema,
104
+ })
105
+ .strict()
106
+ .superRefine((value, context) => {
107
+ if (value.aliasRef.kind !== value.canonicalRef.kind) {
108
+ context.addIssue({ code: 'custom', path: ['canonicalRef', 'kind'], message: 'Alias and canonical references must have the same kind.' });
109
+ }
110
+ if (value.validUntil && value.validUntil <= value.validFrom) {
111
+ context.addIssue({ code: 'custom', path: ['validUntil'], message: 'Alias validUntil must be later than validFrom.' });
112
+ }
113
+ });
114
+ exports.StableRefAliasMapSchema = zod_1.z
115
+ .object({
116
+ contract: zod_1.z.literal('StableRefAliasMap'),
117
+ schemaVersion: zod_1.z.literal(exports.DECLARATIVE_CONTROL_SCHEMA_VERSION),
118
+ tenantScope: exports.TenantScopeSchema,
119
+ aliases: zod_1.z.array(exports.StableRefAliasSchema),
120
+ contentHash: common_1.Sha256Schema,
121
+ })
122
+ .strict()
123
+ .superRefine((value, context) => {
124
+ const duplicate = uniqueArray(value.aliases, (entry) => stableRefIdentity(entry.aliasRef));
125
+ if (duplicate)
126
+ context.addIssue({ code: 'custom', path: ['aliases'], message: `Duplicate alias reference: ${duplicate}` });
127
+ });
128
+ exports.DeclarativeLifecycleSchema = zod_1.z.enum(['active', 'deprecated', 'retired']);
129
+ exports.ProductSurfaceSchema = zod_1.z.enum(['studio', 'kernel']);
130
+ const GroupRefSchema = exports.StableRefSchema.superRefine((value, context) => {
131
+ if (value.kind !== 'group')
132
+ context.addIssue({ code: 'custom', path: ['kind'], message: 'Access group references must use kind group.' });
133
+ });
134
+ const AccessConditionRefSchema = exports.RevisionRefSchema.superRefine((value, context) => {
135
+ if (value.kind !== 'access-condition') {
136
+ context.addIssue({ code: 'custom', path: ['kind'], message: 'Access condition references must use kind access-condition.' });
137
+ }
138
+ });
139
+ exports.AccessPolicySchema = zod_1.z
140
+ .object({
141
+ authenticated: zod_1.z.boolean(),
142
+ groupAllOf: zod_1.z.array(GroupRefSchema),
143
+ groupAnyOf: zod_1.z.array(GroupRefSchema),
144
+ permissionAllOf: zod_1.z.array(common_1.ContractIdentifierSchema),
145
+ permissionAnyOf: zod_1.z.array(common_1.ContractIdentifierSchema),
146
+ conditionAllOf: zod_1.z.array(AccessConditionRefSchema),
147
+ })
148
+ .strict()
149
+ .superRefine((value, context) => {
150
+ const checks = [
151
+ ['groupAllOf', value.groupAllOf, (candidate) => stableRefIdentity(candidate)],
152
+ ['groupAnyOf', value.groupAnyOf, (candidate) => stableRefIdentity(candidate)],
153
+ ['permissionAllOf', value.permissionAllOf, String],
154
+ ['permissionAnyOf', value.permissionAnyOf, String],
155
+ ['conditionAllOf', value.conditionAllOf, (candidate) => `${stableRefIdentity(candidate)}@${candidate.revision}`],
156
+ ];
157
+ checks.forEach(([field, values, identity]) => {
158
+ if (uniqueArray(values, identity))
159
+ context.addIssue({ code: 'custom', path: [field], message: `${field} entries must be unique.` });
160
+ });
161
+ });
162
+ exports.ManagementAccessSchema = zod_1.z
163
+ .object({
164
+ edit: exports.AccessPolicySchema,
165
+ preview: exports.AccessPolicySchema,
166
+ publish: exports.AccessPolicySchema,
167
+ deactivate: exports.AccessPolicySchema,
168
+ rollback: exports.AccessPolicySchema,
169
+ retire: exports.AccessPolicySchema,
170
+ })
171
+ .strict();
172
+ exports.RoutePathTemplateSchema = zod_1.z
173
+ .string()
174
+ .trim()
175
+ .regex(/^\/(?!\/)/, 'Expected an application-relative path.')
176
+ .superRefine((value, context) => {
177
+ if (value.includes('?') || value.includes('#') || value.includes('\\')) {
178
+ context.addIssue({ code: 'custom', message: 'Route paths cannot contain query strings, fragments, or backslashes.' });
179
+ }
180
+ if (value.split('/').some((segment) => segment === '.' || segment === '..')) {
181
+ context.addIssue({ code: 'custom', message: 'Route paths cannot contain traversal segments.' });
182
+ }
183
+ if (/^[a-z][a-z0-9+.-]*:/i.test(value) || value.includes('://')) {
184
+ context.addIssue({ code: 'custom', message: 'Route paths cannot contain a scheme or host.' });
185
+ }
186
+ });
187
+ exports.RouteSpaceParameterSchema = zod_1.z
188
+ .object({
189
+ name: common_1.ContractIdentifierSchema,
190
+ type: zod_1.z.enum(['identifier', 'integer', 'slug', 'uuid']),
191
+ required: zod_1.z.boolean(),
192
+ })
193
+ .strict();
194
+ exports.RouteSpaceSchema = zod_1.z
195
+ .object({
196
+ contract: zod_1.z.literal('RouteSpace'),
197
+ schemaVersion: zod_1.z.literal(exports.DECLARATIVE_CONTROL_SCHEMA_VERSION),
198
+ routeSpaceId: common_1.ContractIdentifierSchema,
199
+ supportedSurface: exports.ProductSurfaceSchema,
200
+ basePath: exports.RoutePathTemplateSchema,
201
+ caseSensitive: zod_1.z.boolean(),
202
+ trailingSlash: zod_1.z.enum(['preserve', 'remove', 'require']),
203
+ reservedPaths: zod_1.z.array(exports.RoutePathTemplateSchema),
204
+ parameters: zod_1.z.array(exports.RouteSpaceParameterSchema),
205
+ })
206
+ .strict()
207
+ .superRefine((value, context) => {
208
+ if (uniqueArray(value.parameters, (parameter) => parameter.name)) {
209
+ context.addIssue({ code: 'custom', path: ['parameters'], message: 'RouteSpace parameter names must be unique.' });
210
+ }
211
+ if (uniqueArray(value.reservedPaths, (path) => path)) {
212
+ context.addIssue({ code: 'custom', path: ['reservedPaths'], message: 'RouteSpace reserved paths must be unique.' });
213
+ }
214
+ });
215
+ const RouteClaimBaseSchema = zod_1.z
216
+ .object({
217
+ kind: zod_1.z.enum(['canonical', 'alias', 'redirect']),
218
+ routeSpaceRevisionRef: exports.RevisionRefSchema,
219
+ pathTemplate: exports.RoutePathTemplateSchema,
220
+ redirectTargetRef: exports.StableRefSchema.optional(),
221
+ })
222
+ .strict()
223
+ .superRefine((value, context) => {
224
+ if (value.routeSpaceRevisionRef.kind !== 'route-space') {
225
+ context.addIssue({ code: 'custom', path: ['routeSpaceRevisionRef', 'kind'], message: 'Route claims must reference a route-space revision.' });
226
+ }
227
+ if (value.kind === 'redirect' && !value.redirectTargetRef) {
228
+ context.addIssue({ code: 'custom', path: ['redirectTargetRef'], message: 'Redirect claims require a governed target reference.' });
229
+ }
230
+ if (value.kind !== 'redirect' && value.redirectTargetRef) {
231
+ context.addIssue({ code: 'custom', path: ['redirectTargetRef'], message: 'Only redirect claims may declare redirectTargetRef.' });
232
+ }
233
+ });
234
+ /**
235
+ * Read compatibility for schemaVersion 1 Page and Workbench records written
236
+ * before route claims carried their owning product surface. New declarations
237
+ * must use RouteClaimSchema; compilers infer this legacy form only from the
238
+ * exact pinned RouteSpace.
239
+ */
240
+ exports.LegacyRouteClaimSchema = RouteClaimBaseSchema;
241
+ exports.RouteClaimSchema = RouteClaimBaseSchema.safeExtend({
242
+ surface: exports.ProductSurfaceSchema,
243
+ }).strict();
244
+ exports.DeclarativeRouteClaimSchema = exports.RouteClaimSchema;
245
+ const LegacyDeclarativeRouteClaimSchema = exports.LegacyRouteClaimSchema;
246
+ exports.CompiledRouteMatcherSchema = zod_1.z
247
+ .object({
248
+ caseSensitive: zod_1.z.boolean(),
249
+ trailingSlash: zod_1.z.enum(['preserve', 'remove', 'require']),
250
+ parameters: zod_1.z.array(exports.RouteSpaceParameterSchema),
251
+ })
252
+ .strict();
253
+ exports.CompiledRouteClaimSchema = exports.RouteClaimSchema.safeExtend({
254
+ normalizedPath: exports.RoutePathTemplateSchema,
255
+ matcher: exports.CompiledRouteMatcherSchema,
256
+ }).strict();
257
+ const LegacyCompiledRouteClaimSchema = exports.LegacyRouteClaimSchema.safeExtend({
258
+ normalizedPath: exports.RoutePathTemplateSchema,
259
+ matcher: exports.CompiledRouteMatcherSchema,
260
+ }).strict();
261
+ const validateDeclaredRouteSurfaces = (supportedSurfaces, routeClaims, context) => {
262
+ if (uniqueArray(supportedSurfaces, (surface) => surface)) {
263
+ context.addIssue({ code: 'custom', path: ['supportedSurfaces'], message: 'Supported surfaces must be unique.' });
264
+ }
265
+ const explicitClaims = routeClaims.filter((claim) => 'surface' in claim);
266
+ if (explicitClaims.length > 0 && explicitClaims.length < routeClaims.length) {
267
+ context.addIssue({ code: 'custom', path: ['routeClaims'], message: 'Route claims must either all declare surface or all omit it for legacy compatibility.' });
268
+ return;
269
+ }
270
+ routeClaims.forEach((claim, index) => {
271
+ if ('surface' in claim && !supportedSurfaces.includes(claim.surface)) {
272
+ context.addIssue({ code: 'custom', path: ['routeClaims', index, 'surface'], message: 'Route claim surface must be declared by supportedSurfaces.' });
273
+ }
274
+ });
275
+ if (explicitClaims.length !== routeClaims.length)
276
+ return;
277
+ supportedSurfaces.forEach((surface) => {
278
+ const canonicalCount = explicitClaims.filter((claim) => claim.surface === surface && claim.kind === 'canonical').length;
279
+ if (canonicalCount !== 1) {
280
+ context.addIssue({ code: 'custom', path: ['routeClaims'], message: `Surface ${surface} requires exactly one canonical route claim.` });
281
+ }
282
+ });
283
+ };
284
+ exports.ReleaseOperationSchema = zod_1.z.enum(['activate', 'deactivate', 'rollback']);
285
+ exports.ReleaseDependencyRoleSchema = zod_1.z.enum([
286
+ 'route-space',
287
+ 'shell',
288
+ 'page',
289
+ 'page-release',
290
+ 'workbench',
291
+ 'workbench-release',
292
+ 'navigation',
293
+ 'navigation-release',
294
+ 'menu-action',
295
+ 'application-menu-catalog',
296
+ 'capability',
297
+ 'provider',
298
+ 'ontology-definition',
299
+ 'view',
300
+ 'projection',
301
+ 'action',
302
+ 'token',
303
+ 'schema',
304
+ 'compiler',
305
+ 'workflow',
306
+ 'agent',
307
+ 'built-in-application',
308
+ 'design',
309
+ 'layout-policy',
310
+ 'performance-budget',
311
+ 'observation-policy',
312
+ ]);
313
+ const DependencyKindByRole = {
314
+ 'route-space': 'route-space',
315
+ shell: 'shell',
316
+ page: 'page',
317
+ 'page-release': 'page-release',
318
+ workbench: 'workbench',
319
+ 'workbench-release': 'workbench-release',
320
+ navigation: 'navigation',
321
+ 'navigation-release': 'navigation-release',
322
+ 'menu-action': 'menu-action',
323
+ 'application-menu-catalog': 'application-menu-catalog',
324
+ capability: 'capability',
325
+ provider: 'view-provider',
326
+ 'ontology-definition': 'ontology-definition',
327
+ view: 'view',
328
+ projection: 'projection',
329
+ action: 'domain-command',
330
+ token: 'design-token',
331
+ schema: 'schema',
332
+ compiler: 'compiler',
333
+ workflow: 'workflow',
334
+ agent: 'agent',
335
+ 'built-in-application': 'built-in-application',
336
+ design: 'design',
337
+ 'layout-policy': 'layout-policy',
338
+ 'performance-budget': 'performance-budget',
339
+ 'observation-policy': 'observation-policy',
340
+ };
341
+ exports.ReleaseDependencySchema = zod_1.z
342
+ .object({
343
+ role: exports.ReleaseDependencyRoleSchema,
344
+ revisionRef: exports.RevisionRefSchema,
345
+ })
346
+ .strict()
347
+ .superRefine((value, context) => {
348
+ const expectedKind = DependencyKindByRole[value.role];
349
+ if (value.revisionRef.kind !== expectedKind) {
350
+ context.addIssue({
351
+ code: 'custom',
352
+ path: ['revisionRef', 'kind'],
353
+ message: `Dependency role ${value.role} requires reference kind ${expectedKind}.`,
354
+ });
355
+ }
356
+ });
357
+ exports.ReleaseValidationSchema = zod_1.z
358
+ .object({
359
+ result: zod_1.z.enum(['pass', 'fail']),
360
+ inputHash: common_1.Sha256Schema,
361
+ diagnosticRefs: zod_1.z.array(exports.RevisionRefSchema),
362
+ })
363
+ .strict();
364
+ exports.ReleaseEvidenceSchema = zod_1.z
365
+ .object({
366
+ publicationPlanRef: exports.StableRefSchema,
367
+ expectedHeadRevisionRef: exports.RevisionRefSchema.nullable(),
368
+ validation: exports.ReleaseValidationSchema,
369
+ approvalPolicyRevisionRef: exports.RevisionRefSchema,
370
+ approvalDecisionRevisionRef: exports.RevisionRefSchema,
371
+ actorRef: exports.StableRefSchema,
372
+ reason: zod_1.z.string().trim().min(1).max(4096),
373
+ idempotencyKey: common_1.ContractIdentifierSchema,
374
+ occurredAt: common_1.IsoDateTimeSchema,
375
+ evidenceRefs: zod_1.z.array(exports.RevisionRefSchema).min(1),
376
+ })
377
+ .strict()
378
+ .superRefine((value, context) => {
379
+ const expectedKinds = [
380
+ ['publicationPlanRef', value.publicationPlanRef, 'publication-plan'],
381
+ ['approvalPolicyRevisionRef', value.approvalPolicyRevisionRef, 'approval-policy'],
382
+ ['approvalDecisionRevisionRef', value.approvalDecisionRevisionRef, 'approval-decision'],
383
+ ['actorRef', value.actorRef, 'actor'],
384
+ ];
385
+ expectedKinds.forEach(([field, reference, expectedKind]) => {
386
+ if (reference.kind !== expectedKind) {
387
+ context.addIssue({ code: 'custom', path: [field, 'kind'], message: `${field} must reference ${expectedKind}.` });
388
+ }
389
+ });
390
+ value.evidenceRefs.forEach((reference, index) => {
391
+ if (reference.kind !== 'evidence')
392
+ context.addIssue({ code: 'custom', path: ['evidenceRefs', index, 'kind'], message: 'Release evidenceRefs must reference evidence revisions.' });
393
+ });
394
+ });
395
+ exports.PublicationPlanOperationSchema = zod_1.z
396
+ .object({
397
+ releaseKind: zod_1.z.enum(['page-release', 'workbench-release', 'navigation-release']),
398
+ releaseSlotId: common_1.ContractIdentifierSchema,
399
+ releaseRevisionRef: exports.RevisionRefSchema,
400
+ expectedHeadRevisionRef: exports.RevisionRefSchema.nullable(),
401
+ })
402
+ .strict()
403
+ .superRefine((value, context) => {
404
+ if (value.releaseRevisionRef.kind !== value.releaseKind || value.releaseRevisionRef.id !== value.releaseSlotId) {
405
+ context.addIssue({ code: 'custom', path: ['releaseRevisionRef'], message: 'Publication Plan operation must pin the exact release slot revision.' });
406
+ }
407
+ if (value.expectedHeadRevisionRef
408
+ && (value.expectedHeadRevisionRef.kind !== value.releaseKind || value.expectedHeadRevisionRef.id !== value.releaseSlotId)) {
409
+ context.addIssue({ code: 'custom', path: ['expectedHeadRevisionRef'], message: 'Expected head must identify the same release slot.' });
410
+ }
411
+ });
412
+ exports.PublicationPlanSchema = zod_1.z
413
+ .object({
414
+ contract: zod_1.z.literal('PublicationPlan'),
415
+ schemaVersion: zod_1.z.literal(exports.DECLARATIVE_CONTROL_SCHEMA_VERSION),
416
+ planId: common_1.ContractIdentifierSchema,
417
+ tenantScope: exports.TenantScopeSchema,
418
+ environmentRef: exports.StableRefSchema,
419
+ operations: zod_1.z.array(exports.PublicationPlanOperationSchema).min(1),
420
+ validation: exports.ReleaseValidationSchema,
421
+ approvalPolicyRevisionRef: exports.RevisionRefSchema,
422
+ approvalDecisionRevisionRef: exports.RevisionRefSchema,
423
+ actorRef: exports.StableRefSchema,
424
+ idempotencyKey: common_1.ContractIdentifierSchema,
425
+ evidenceRefs: zod_1.z.array(exports.RevisionRefSchema).min(1),
426
+ createdAt: common_1.IsoDateTimeSchema,
427
+ })
428
+ .strict()
429
+ .superRefine((value, context) => {
430
+ if (value.environmentRef.kind !== 'environment')
431
+ context.addIssue({ code: 'custom', path: ['environmentRef', 'kind'], message: 'Publication Plan requires an environment reference.' });
432
+ const governedRefs = [
433
+ ['approvalPolicyRevisionRef', value.approvalPolicyRevisionRef, 'approval-policy'],
434
+ ['approvalDecisionRevisionRef', value.approvalDecisionRevisionRef, 'approval-decision'],
435
+ ['actorRef', value.actorRef, 'actor'],
436
+ ];
437
+ governedRefs.forEach(([field, reference, expectedKind]) => {
438
+ if (reference.kind !== expectedKind)
439
+ context.addIssue({ code: 'custom', path: [field, 'kind'], message: `${field} must reference ${expectedKind}.` });
440
+ });
441
+ value.operations.forEach((operation, index) => {
442
+ [operation.releaseRevisionRef, operation.expectedHeadRevisionRef].forEach((reference, referenceIndex) => {
443
+ if (reference?.tenantScope && tenantScopeKey(reference.tenantScope) !== tenantScopeKey(value.tenantScope)) {
444
+ const field = referenceIndex === 0 ? 'releaseRevisionRef' : 'expectedHeadRevisionRef';
445
+ context.addIssue({ code: 'custom', path: ['operations', index, field, 'tenantScope'], message: 'Publication Plan operation belongs to another tenant scope.' });
446
+ }
447
+ });
448
+ });
449
+ value.evidenceRefs.forEach((reference, index) => {
450
+ if (reference.kind !== 'evidence')
451
+ context.addIssue({ code: 'custom', path: ['evidenceRefs', index, 'kind'], message: 'Publication Plan evidenceRefs must reference evidence revisions.' });
452
+ });
453
+ if (uniqueArray(value.operations, (operation) => `${operation.releaseKind}:${operation.releaseSlotId}`)) {
454
+ context.addIssue({ code: 'custom', path: ['operations'], message: 'Publication Plan release slots must be unique.' });
455
+ }
456
+ });
457
+ const IdentitySchema = zod_1.z
458
+ .object({
459
+ name: exports.I18nTextSchema,
460
+ description: exports.I18nTextSchema.optional(),
461
+ tags: zod_1.z.array(common_1.ContractIdentifierSchema).default([]),
462
+ })
463
+ .strict();
464
+ exports.WorkbenchIdentitySchema = IdentitySchema.extend({ iconRef: exports.StableRefSchema.optional() }).strict();
465
+ const ReleaseBaseShape = {
466
+ schemaVersion: zod_1.z.literal(exports.DECLARATIVE_CONTROL_SCHEMA_VERSION),
467
+ releaseSlotId: common_1.ContractIdentifierSchema,
468
+ tenantScope: exports.TenantScopeSchema,
469
+ operation: exports.ReleaseOperationSchema,
470
+ dependencySnapshot: zod_1.z.array(exports.ReleaseDependencySchema),
471
+ evidence: exports.ReleaseEvidenceSchema,
472
+ };
473
+ const validateDependencySnapshot = (snapshot, context) => {
474
+ const duplicate = uniqueArray(snapshot, (dependency) => `${dependency.role}:${stableRefIdentity(dependency.revisionRef)}@${dependency.revisionRef.revision}`);
475
+ if (duplicate)
476
+ context.addIssue({ code: 'custom', path: ['dependencySnapshot'], message: `Duplicate dependency: ${duplicate}` });
477
+ };
478
+ const validateReleaseExpectedHead = (value, expectedKind, context) => {
479
+ const expectedHead = value.evidence.expectedHeadRevisionRef;
480
+ if (expectedHead && (expectedHead.kind !== expectedKind || expectedHead.id !== value.releaseSlotId)) {
481
+ context.addIssue({ code: 'custom', path: ['evidence', 'expectedHeadRevisionRef'], message: 'Expected head must identify the same release slot.' });
482
+ }
483
+ if (expectedHead?.tenantScope && tenantScopeKey(expectedHead.tenantScope) !== tenantScopeKey(value.tenantScope)) {
484
+ context.addIssue({ code: 'custom', path: ['evidence', 'expectedHeadRevisionRef', 'tenantScope'], message: 'Expected head belongs to another tenant scope.' });
485
+ }
486
+ };
487
+ exports.BindingSourceSchema = zod_1.z.discriminatedUnion('kind', [
488
+ zod_1.z.object({ kind: zod_1.z.literal('constant'), value: zod_1.z.union([zod_1.z.string(), zod_1.z.number().finite(), zod_1.z.boolean(), zod_1.z.null()]) }).strict(),
489
+ zod_1.z.object({ kind: zod_1.z.literal('route-parameter'), name: common_1.ContractIdentifierSchema }).strict(),
490
+ zod_1.z.object({ kind: zod_1.z.literal('query-parameter'), name: common_1.ContractIdentifierSchema }).strict(),
491
+ zod_1.z.object({ kind: zod_1.z.literal('identity'), name: zod_1.z.enum(['tenantId', 'teamId', 'userId']) }).strict(),
492
+ zod_1.z.object({ kind: zod_1.z.literal('intent-field'), path: zod_1.z.string().trim().regex(/^[A-Za-z0-9_.-]+$/) }).strict(),
493
+ zod_1.z.object({ kind: zod_1.z.literal('binding-field'), bindingId: common_1.ContractIdentifierSchema, path: zod_1.z.string().trim().regex(/^[A-Za-z0-9_.-]+$/) }).strict(),
494
+ ]);
495
+ exports.CapabilityInstanceSchema = zod_1.z
496
+ .object({
497
+ instanceId: common_1.ContractIdentifierSchema,
498
+ nodeId: common_1.ContractIdentifierSchema,
499
+ capabilityRevisionRef: exports.RevisionRefSchema,
500
+ providerRevisionRef: exports.RevisionRefSchema,
501
+ propertySchemaRevisionRef: exports.RevisionRefSchema,
502
+ properties: common_1.JsonObjectSchema,
503
+ allowedSideEffects: zod_1.z.array(zod_1.z.enum(['network', 'storage', 'navigation', 'worker', 'websocket'])),
504
+ })
505
+ .strict();
506
+ exports.OntologyBindingSchema = zod_1.z
507
+ .object({
508
+ bindingId: common_1.ContractIdentifierSchema,
509
+ ontologyDefinitionRevisionRef: exports.RevisionRefSchema,
510
+ viewRevisionRef: exports.RevisionRefSchema.optional(),
511
+ projectionRevisionRef: exports.RevisionRefSchema.optional(),
512
+ parameters: zod_1.z.record(common_1.ContractIdentifierSchema, exports.BindingSourceSchema),
513
+ target: zod_1.z.object({ capabilityInstanceId: common_1.ContractIdentifierSchema, port: common_1.ContractIdentifierSchema }).strict(),
514
+ renderModelSchemaRevisionRef: exports.RevisionRefSchema,
515
+ pagination: zod_1.z.enum(['none', 'cursor', 'offset']),
516
+ cache: zod_1.z.enum(['none', 'identity-scoped', 'tenant-scoped']),
517
+ cancelOnChange: zod_1.z.boolean(),
518
+ })
519
+ .strict()
520
+ .superRefine((value, context) => {
521
+ if ((value.viewRevisionRef ? 1 : 0) + (value.projectionRevisionRef ? 1 : 0) !== 1) {
522
+ context.addIssue({ code: 'custom', path: ['viewRevisionRef'], message: 'Ontology bindings require exactly one View or Projection revision.' });
523
+ }
524
+ if (value.ontologyDefinitionRevisionRef.kind !== 'ontology-definition') {
525
+ context.addIssue({ code: 'custom', path: ['ontologyDefinitionRevisionRef', 'kind'], message: 'Expected an ontology-definition revision.' });
526
+ }
527
+ });
528
+ exports.ActionBindingSchema = zod_1.z
529
+ .object({
530
+ bindingId: common_1.ContractIdentifierSchema,
531
+ commandRevisionRef: exports.RevisionRefSchema,
532
+ source: zod_1.z.object({ capabilityInstanceId: common_1.ContractIdentifierSchema, port: common_1.ContractIdentifierSchema }).strict(),
533
+ sourceIntentSchemaRevisionRef: exports.RevisionRefSchema,
534
+ inputSchemaRevisionRef: exports.RevisionRefSchema,
535
+ inputMapping: zod_1.z.record(common_1.ContractIdentifierSchema, exports.BindingSourceSchema),
536
+ accessPolicy: exports.AccessPolicySchema,
537
+ confirmation: exports.I18nTextSchema.optional(),
538
+ idempotencyKeySource: zod_1.z.enum(['interaction', 'record-and-interaction', 'caller-provided']),
539
+ compensationCommandRevisionRef: exports.RevisionRefSchema.optional(),
540
+ resultSchemaRevisionRef: exports.RevisionRefSchema,
541
+ success: zod_1.z.object({
542
+ refreshBindingIds: zod_1.z.array(common_1.ContractIdentifierSchema),
543
+ navigationTargetRef: exports.StableRefSchema.optional(),
544
+ }).strict(),
545
+ recovery: zod_1.z.enum(['retry-safe', 'compensating-command', 'manual-review']),
546
+ lineageRequired: zod_1.z.literal(true),
547
+ })
548
+ .strict()
549
+ .superRefine((value, context) => {
550
+ if (value.commandRevisionRef.kind !== 'domain-command') {
551
+ context.addIssue({ code: 'custom', path: ['commandRevisionRef', 'kind'], message: 'Action bindings must reference a domain-command revision.' });
552
+ }
553
+ if (value.sourceIntentSchemaRevisionRef.kind !== 'schema') {
554
+ context.addIssue({ code: 'custom', path: ['sourceIntentSchemaRevisionRef', 'kind'], message: 'Action source intents must pin a schema revision.' });
555
+ }
556
+ if (value.inputSchemaRevisionRef.kind !== 'schema') {
557
+ context.addIssue({ code: 'custom', path: ['inputSchemaRevisionRef', 'kind'], message: 'Action command inputs must pin a schema revision.' });
558
+ }
559
+ if (value.recovery === 'compensating-command' && !value.compensationCommandRevisionRef) {
560
+ context.addIssue({ code: 'custom', path: ['compensationCommandRevisionRef'], message: 'Compensating recovery requires a compensation command.' });
561
+ }
562
+ });
563
+ exports.PageSchema = zod_1.z
564
+ .object({
565
+ contract: zod_1.z.literal('Page'),
566
+ schemaVersion: zod_1.z.literal(exports.DECLARATIVE_CONTROL_SCHEMA_VERSION),
567
+ pageId: common_1.ContractIdentifierSchema,
568
+ tenantScope: exports.TenantScopeSchema,
569
+ identity: IdentitySchema,
570
+ supportedSurfaces: zod_1.z.array(exports.ProductSurfaceSchema).min(1),
571
+ lifecycle: exports.DeclarativeLifecycleSchema,
572
+ routeClaims: zod_1.z.array(zod_1.z.union([exports.DeclarativeRouteClaimSchema, LegacyDeclarativeRouteClaimSchema])).min(1),
573
+ shellRevisionRef: exports.RevisionRefSchema,
574
+ renderTree: render_1.RenderTreeSchema,
575
+ capabilityInstances: zod_1.z.array(exports.CapabilityInstanceSchema).min(1),
576
+ ontologyBindings: zod_1.z.array(exports.OntologyBindingSchema),
577
+ actionBindings: zod_1.z.array(exports.ActionBindingSchema),
578
+ pageAccessPolicy: exports.AccessPolicySchema,
579
+ managementAccess: exports.ManagementAccessSchema,
580
+ tokenRevisionRefs: zod_1.z.array(exports.RevisionRefSchema).min(1),
581
+ performanceBudgetRef: exports.RevisionRefSchema,
582
+ observationPolicyRevisionRef: exports.RevisionRefSchema,
583
+ privacyClassification: zod_1.z.enum(['public', 'internal', 'confidential', 'restricted']),
584
+ })
585
+ .strict()
586
+ .superRefine((value, context) => {
587
+ validateDeclaredRouteSurfaces(value.supportedSurfaces, value.routeClaims, context);
588
+ const uniqueness = [
589
+ ['capabilityInstances', value.capabilityInstances, (candidate) => String(candidate.instanceId)],
590
+ ['ontologyBindings', value.ontologyBindings, (candidate) => String(candidate.bindingId)],
591
+ ['actionBindings', value.actionBindings, (candidate) => String(candidate.bindingId)],
592
+ ];
593
+ uniqueness.forEach(([field, values, identity]) => {
594
+ if (uniqueArray(values, identity))
595
+ context.addIssue({ code: 'custom', path: [field], message: `${field} identities must be unique.` });
596
+ });
597
+ const instanceIds = new Set(value.capabilityInstances.map((instance) => instance.instanceId));
598
+ value.ontologyBindings.forEach((binding, index) => {
599
+ if (!instanceIds.has(binding.target.capabilityInstanceId)) {
600
+ context.addIssue({ code: 'custom', path: ['ontologyBindings', index, 'target', 'capabilityInstanceId'], message: 'Ontology binding targets an unknown capability instance.' });
601
+ }
602
+ });
603
+ value.actionBindings.forEach((binding, index) => {
604
+ if (!instanceIds.has(binding.source.capabilityInstanceId)) {
605
+ context.addIssue({ code: 'custom', path: ['actionBindings', index, 'source', 'capabilityInstanceId'], message: 'Action binding sources an unknown capability instance.' });
606
+ }
607
+ binding.success.refreshBindingIds.forEach((bindingId) => {
608
+ if (!value.ontologyBindings.some((candidate) => candidate.bindingId === bindingId)) {
609
+ context.addIssue({ code: 'custom', path: ['actionBindings', index, 'success', 'refreshBindingIds'], message: `Unknown refresh binding: ${bindingId}` });
610
+ }
611
+ });
612
+ });
613
+ if (value.shellRevisionRef.kind !== 'shell')
614
+ context.addIssue({ code: 'custom', path: ['shellRevisionRef', 'kind'], message: 'Page shellRevisionRef must reference a shell.' });
615
+ value.capabilityInstances.forEach((instance, index) => {
616
+ const refs = [
617
+ ['capabilityRevisionRef', instance.capabilityRevisionRef, 'capability'],
618
+ ['providerRevisionRef', instance.providerRevisionRef, 'view-provider'],
619
+ ['propertySchemaRevisionRef', instance.propertySchemaRevisionRef, 'schema'],
620
+ ];
621
+ refs.forEach(([field, reference, expectedKind]) => {
622
+ if (reference.kind !== expectedKind)
623
+ context.addIssue({ code: 'custom', path: ['capabilityInstances', index, field, 'kind'], message: `${field} must reference ${expectedKind}.` });
624
+ });
625
+ });
626
+ value.tokenRevisionRefs.forEach((reference, index) => {
627
+ if (reference.kind !== 'design-token')
628
+ context.addIssue({ code: 'custom', path: ['tokenRevisionRefs', index, 'kind'], message: 'Page token references must use kind design-token.' });
629
+ });
630
+ if (value.performanceBudgetRef.kind !== 'performance-budget')
631
+ context.addIssue({ code: 'custom', path: ['performanceBudgetRef', 'kind'], message: 'Page requires a performance-budget revision.' });
632
+ if (value.observationPolicyRevisionRef.kind !== 'observation-policy')
633
+ context.addIssue({ code: 'custom', path: ['observationPolicyRevisionRef', 'kind'], message: 'Page requires an observation-policy revision.' });
634
+ });
635
+ exports.PageReleaseSchema = zod_1.z
636
+ .object({
637
+ contract: zod_1.z.literal('PageRelease'),
638
+ ...ReleaseBaseShape,
639
+ pageRevisionRef: exports.RevisionRefSchema,
640
+ target: zod_1.z.object({
641
+ environmentRef: exports.StableRefSchema,
642
+ surface: exports.ProductSurfaceSchema,
643
+ routeSpaceRevisionRef: exports.RevisionRefSchema,
644
+ normalizedPath: exports.RoutePathTemplateSchema,
645
+ routeClaim: zod_1.z.union([exports.CompiledRouteClaimSchema, LegacyCompiledRouteClaimSchema]),
646
+ }).strict(),
647
+ })
648
+ .strict()
649
+ .superRefine((value, context) => {
650
+ validateDependencySnapshot(value.dependencySnapshot, context);
651
+ validateReleaseExpectedHead(value, 'page-release', context);
652
+ if (value.pageRevisionRef.kind !== 'page')
653
+ context.addIssue({ code: 'custom', path: ['pageRevisionRef', 'kind'], message: 'Expected a page revision.' });
654
+ if (value.target.environmentRef.kind !== 'environment')
655
+ context.addIssue({ code: 'custom', path: ['target', 'environmentRef', 'kind'], message: 'Page release target requires an environment reference.' });
656
+ if (value.target.routeSpaceRevisionRef.kind !== 'route-space')
657
+ context.addIssue({ code: 'custom', path: ['target', 'routeSpaceRevisionRef', 'kind'], message: 'Page release target requires a route-space revision.' });
658
+ if (value.target.normalizedPath !== value.target.routeClaim.normalizedPath || !exactRevisionRef(value.target.routeSpaceRevisionRef, value.target.routeClaim.routeSpaceRevisionRef)) {
659
+ context.addIssue({ code: 'custom', path: ['target', 'routeClaim'], message: 'Page Release route authority must pin the exact compiled claim and normalized path.' });
660
+ }
661
+ if ('surface' in value.target.routeClaim && value.target.routeClaim.surface !== value.target.surface) {
662
+ context.addIssue({ code: 'custom', path: ['target', 'routeClaim', 'surface'], message: 'Page Release route claim must match the target surface.' });
663
+ }
664
+ });
665
+ exports.WorkbenchGroupSchema = zod_1.z
666
+ .object({
667
+ groupId: common_1.ContractIdentifierSchema,
668
+ label: exports.I18nTextSchema,
669
+ iconRef: exports.StableRefSchema.optional(),
670
+ order: zod_1.z.number().int(),
671
+ collapsedByDefault: zod_1.z.boolean(),
672
+ accessPolicy: exports.AccessPolicySchema.optional(),
673
+ })
674
+ .strict();
675
+ exports.WorkbenchAppInstanceSchema = zod_1.z
676
+ .object({
677
+ instanceId: common_1.ContractIdentifierSchema,
678
+ kind: zod_1.z.enum(['built-in-application', 'workflow-form', 'workflow', 'agent', 'design', 'capability']),
679
+ targetRevisionRef: exports.RevisionRefSchema,
680
+ providerRevisionRef: exports.RevisionRefSchema,
681
+ inputSchemaRevisionRef: exports.RevisionRefSchema,
682
+ input: common_1.JsonObjectSchema,
683
+ groupId: common_1.ContractIdentifierSchema,
684
+ order: zod_1.z.number().int(),
685
+ display: zod_1.z.object({ name: exports.I18nTextSchema.optional(), iconRef: exports.StableRefSchema.optional() }).strict(),
686
+ accessPolicy: exports.AccessPolicySchema,
687
+ })
688
+ .strict();
689
+ exports.WorkbenchSchema = zod_1.z
690
+ .object({
691
+ contract: zod_1.z.literal('Workbench'),
692
+ schemaVersion: zod_1.z.literal(exports.DECLARATIVE_CONTROL_SCHEMA_VERSION),
693
+ workbenchId: common_1.ContractIdentifierSchema,
694
+ tenantScope: exports.TenantScopeSchema,
695
+ purpose: zod_1.z.enum(['instance', 'template']),
696
+ sourceTemplateRevisionRef: exports.RevisionRefSchema.optional(),
697
+ identity: exports.WorkbenchIdentitySchema,
698
+ supportedSurfaces: zod_1.z.array(exports.ProductSurfaceSchema).min(1),
699
+ lifecycle: exports.DeclarativeLifecycleSchema,
700
+ routeClaims: zod_1.z.array(zod_1.z.union([exports.DeclarativeRouteClaimSchema, LegacyDeclarativeRouteClaimSchema])).min(1),
701
+ groups: zod_1.z.array(exports.WorkbenchGroupSchema).min(1),
702
+ appInstances: zod_1.z.array(exports.WorkbenchAppInstanceSchema).min(1),
703
+ defaultEntry: zod_1.z.object({ groupId: common_1.ContractIdentifierSchema, instanceId: common_1.ContractIdentifierSchema, showDefaultGroup: zod_1.z.boolean() }).strict(),
704
+ layout: zod_1.z.object({
705
+ hostCapabilityRevisionRef: exports.RevisionRefSchema,
706
+ hostProviderRevisionRef: exports.RevisionRefSchema,
707
+ layoutPolicyRevisionRef: exports.RevisionRefSchema,
708
+ tokenRevisionRefs: zod_1.z.array(exports.RevisionRefSchema).min(1),
709
+ }).strict(),
710
+ workbenchAccessPolicy: exports.AccessPolicySchema,
711
+ managementAccess: exports.ManagementAccessSchema,
712
+ personalPreferencesPolicy: zod_1.z.object({
713
+ allowed: zod_1.z.array(zod_1.z.enum(['collapsed-groups', 'recent-entry', 'layout-density'])),
714
+ authority: zod_1.z.literal('identity-overlay'),
715
+ }).strict(),
716
+ performanceBudgetRef: exports.RevisionRefSchema,
717
+ observationPolicyRevisionRef: exports.RevisionRefSchema,
718
+ privacyClassification: zod_1.z.enum(['public', 'internal', 'confidential', 'restricted']),
719
+ })
720
+ .strict()
721
+ .superRefine((value, context) => {
722
+ validateDeclaredRouteSurfaces(value.supportedSurfaces, value.routeClaims, context);
723
+ if (value.purpose === 'template' && value.sourceTemplateRevisionRef) {
724
+ context.addIssue({ code: 'custom', path: ['sourceTemplateRevisionRef'], message: 'Templates cannot derive from another template at runtime.' });
725
+ }
726
+ const duplicateGroup = uniqueArray(value.groups, (group) => group.groupId);
727
+ if (duplicateGroup)
728
+ context.addIssue({ code: 'custom', path: ['groups'], message: `Duplicate Workbench group: ${duplicateGroup}` });
729
+ const duplicateInstance = uniqueArray(value.appInstances, (instance) => instance.instanceId);
730
+ if (duplicateInstance)
731
+ context.addIssue({ code: 'custom', path: ['appInstances'], message: `Duplicate Workbench instance: ${duplicateInstance}` });
732
+ const groupIds = new Set(value.groups.map((group) => group.groupId));
733
+ value.appInstances.forEach((instance, index) => {
734
+ if (!groupIds.has(instance.groupId))
735
+ context.addIssue({ code: 'custom', path: ['appInstances', index, 'groupId'], message: 'Workbench app references an unknown group.' });
736
+ });
737
+ const defaultInstance = value.appInstances.find((instance) => instance.instanceId === value.defaultEntry.instanceId);
738
+ if (!defaultInstance || defaultInstance.groupId !== value.defaultEntry.groupId) {
739
+ context.addIssue({ code: 'custom', path: ['defaultEntry'], message: 'Workbench default entry must reference an app in the declared group.' });
740
+ }
741
+ const targetKindByInstanceKind = {
742
+ 'built-in-application': 'built-in-application',
743
+ 'workflow-form': 'workflow',
744
+ workflow: 'workflow',
745
+ agent: 'agent',
746
+ design: 'design',
747
+ capability: 'capability',
748
+ };
749
+ value.appInstances.forEach((instance, index) => {
750
+ if (instance.targetRevisionRef.kind !== targetKindByInstanceKind[instance.kind])
751
+ context.addIssue({ code: 'custom', path: ['appInstances', index, 'targetRevisionRef', 'kind'], message: `Workbench ${instance.kind} target has an incompatible reference kind.` });
752
+ if (instance.providerRevisionRef.kind !== 'view-provider')
753
+ context.addIssue({ code: 'custom', path: ['appInstances', index, 'providerRevisionRef', 'kind'], message: 'Workbench app provider must use kind view-provider.' });
754
+ if (instance.inputSchemaRevisionRef.kind !== 'schema')
755
+ context.addIssue({ code: 'custom', path: ['appInstances', index, 'inputSchemaRevisionRef', 'kind'], message: 'Workbench app input must pin a schema revision.' });
756
+ });
757
+ const layoutRefs = [
758
+ ['hostCapabilityRevisionRef', value.layout.hostCapabilityRevisionRef, 'capability'],
759
+ ['hostProviderRevisionRef', value.layout.hostProviderRevisionRef, 'view-provider'],
760
+ ['layoutPolicyRevisionRef', value.layout.layoutPolicyRevisionRef, 'layout-policy'],
761
+ ];
762
+ layoutRefs.forEach(([field, reference, expectedKind]) => {
763
+ if (reference.kind !== expectedKind)
764
+ context.addIssue({ code: 'custom', path: ['layout', field, 'kind'], message: `${field} must reference ${expectedKind}.` });
765
+ });
766
+ value.layout.tokenRevisionRefs.forEach((reference, index) => {
767
+ if (reference.kind !== 'design-token')
768
+ context.addIssue({ code: 'custom', path: ['layout', 'tokenRevisionRefs', index, 'kind'], message: 'Workbench token references must use kind design-token.' });
769
+ });
770
+ });
771
+ exports.WorkbenchReleaseSchema = zod_1.z
772
+ .object({
773
+ contract: zod_1.z.literal('WorkbenchRelease'),
774
+ ...ReleaseBaseShape,
775
+ workbenchRevisionRef: exports.RevisionRefSchema,
776
+ target: zod_1.z.object({
777
+ environmentRef: exports.StableRefSchema,
778
+ surface: exports.ProductSurfaceSchema,
779
+ workbenchId: common_1.ContractIdentifierSchema,
780
+ routeSpaceRevisionRef: exports.RevisionRefSchema,
781
+ normalizedPath: exports.RoutePathTemplateSchema,
782
+ routeClaim: zod_1.z.union([exports.CompiledRouteClaimSchema, LegacyCompiledRouteClaimSchema]),
783
+ order: zod_1.z.number().int(),
784
+ isDefaultCandidate: zod_1.z.boolean(),
785
+ }).strict(),
786
+ })
787
+ .strict()
788
+ .superRefine((value, context) => {
789
+ validateDependencySnapshot(value.dependencySnapshot, context);
790
+ validateReleaseExpectedHead(value, 'workbench-release', context);
791
+ if (value.workbenchRevisionRef.kind !== 'workbench')
792
+ context.addIssue({ code: 'custom', path: ['workbenchRevisionRef', 'kind'], message: 'Expected a workbench revision.' });
793
+ if (value.target.environmentRef.kind !== 'environment')
794
+ context.addIssue({ code: 'custom', path: ['target', 'environmentRef', 'kind'], message: 'Workbench release target requires an environment reference.' });
795
+ if (value.target.routeSpaceRevisionRef.kind !== 'route-space')
796
+ context.addIssue({ code: 'custom', path: ['target', 'routeSpaceRevisionRef', 'kind'], message: 'Workbench release target requires a route-space revision.' });
797
+ if (value.target.normalizedPath !== value.target.routeClaim.normalizedPath || !exactRevisionRef(value.target.routeSpaceRevisionRef, value.target.routeClaim.routeSpaceRevisionRef)) {
798
+ context.addIssue({ code: 'custom', path: ['target', 'routeClaim'], message: 'Workbench Release route authority must pin the exact compiled claim and normalized path.' });
799
+ }
800
+ if ('surface' in value.target.routeClaim && value.target.routeClaim.surface !== value.target.surface) {
801
+ context.addIssue({ code: 'custom', path: ['target', 'routeClaim', 'surface'], message: 'Workbench Release route claim must match the target surface.' });
802
+ }
803
+ });
804
+ const NavigationNodeBaseShape = {
805
+ nodeId: common_1.ContractIdentifierSchema,
806
+ parentNodeId: common_1.ContractIdentifierSchema.nullable(),
807
+ order: zod_1.z.number().int(),
808
+ disabled: zod_1.z.boolean().optional(),
809
+ };
810
+ exports.NavigationGroupNodeSchema = zod_1.z.object({
811
+ ...NavigationNodeBaseShape,
812
+ kind: zod_1.z.literal('group'),
813
+ label: exports.I18nTextSchema,
814
+ iconRef: exports.StableRefSchema.optional(),
815
+ collapsedByDefault: zod_1.z.boolean(),
816
+ audience: exports.AccessPolicySchema,
817
+ }).strict();
818
+ exports.NavigationTargetNodeSchema = zod_1.z.object({
819
+ ...NavigationNodeBaseShape,
820
+ kind: zod_1.z.literal('target'),
821
+ label: exports.I18nTextSchema,
822
+ iconRef: exports.StableRefSchema.optional(),
823
+ tone: zod_1.z.enum(['default', 'danger']).optional(),
824
+ targetRef: exports.StableRefSchema,
825
+ parameterMapping: zod_1.z.record(common_1.ContractIdentifierSchema, exports.BindingSourceSchema),
826
+ audience: exports.AccessPolicySchema,
827
+ }).strict();
828
+ exports.NavigationSeparatorNodeSchema = zod_1.z.object({
829
+ ...NavigationNodeBaseShape,
830
+ kind: zod_1.z.literal('separator'),
831
+ }).strict();
832
+ exports.NavigationNodeSchema = zod_1.z.discriminatedUnion('kind', [
833
+ exports.NavigationGroupNodeSchema,
834
+ exports.NavigationTargetNodeSchema,
835
+ exports.NavigationSeparatorNodeSchema,
836
+ ]);
837
+ const validateNavigationTree = (nodes, context) => {
838
+ const byId = new Map();
839
+ nodes.forEach((node, index) => {
840
+ if (byId.has(node.nodeId))
841
+ context.addIssue({ code: 'custom', path: ['nodes', index, 'nodeId'], message: `Duplicate Navigation node: ${node.nodeId}` });
842
+ else
843
+ byId.set(node.nodeId, { node, index });
844
+ });
845
+ const siblingOrders = new Set();
846
+ nodes.forEach((node, index) => {
847
+ const orderKey = `${node.parentNodeId ?? ''}:${node.order}`;
848
+ if (siblingOrders.has(orderKey))
849
+ context.addIssue({ code: 'custom', path: ['nodes', index, 'order'], message: 'Sibling Navigation order values must be unique.' });
850
+ siblingOrders.add(orderKey);
851
+ if (node.parentNodeId) {
852
+ const parent = byId.get(node.parentNodeId)?.node;
853
+ if (!parent)
854
+ context.addIssue({ code: 'custom', path: ['nodes', index, 'parentNodeId'], message: 'Navigation node has an unknown parent.' });
855
+ else if (parent.kind !== 'group')
856
+ context.addIssue({ code: 'custom', path: ['nodes', index, 'parentNodeId'], message: 'Navigation parents must be groups.' });
857
+ }
858
+ const ancestors = new Set([node.nodeId]);
859
+ let parentId = node.parentNodeId;
860
+ while (parentId) {
861
+ if (ancestors.has(parentId)) {
862
+ context.addIssue({ code: 'custom', path: ['nodes', index, 'parentNodeId'], message: `Navigation cycle contains ${node.nodeId}.` });
863
+ break;
864
+ }
865
+ ancestors.add(parentId);
866
+ parentId = byId.get(parentId)?.node.parentNodeId ?? null;
867
+ }
868
+ });
869
+ };
870
+ exports.NavigationSchema = zod_1.z
871
+ .object({
872
+ contract: zod_1.z.literal('Navigation'),
873
+ schemaVersion: zod_1.z.literal(exports.DECLARATIVE_CONTROL_SCHEMA_VERSION),
874
+ navigationId: common_1.ContractIdentifierSchema,
875
+ tenantScope: exports.TenantScopeSchema,
876
+ identity: IdentitySchema,
877
+ supportedSurfaces: zod_1.z.array(exports.ProductSurfaceSchema).min(1),
878
+ placements: zod_1.z.array(common_1.ContractIdentifierSchema).min(1),
879
+ lifecycle: exports.DeclarativeLifecycleSchema,
880
+ nodes: zod_1.z.array(exports.NavigationNodeSchema),
881
+ managementAccess: exports.ManagementAccessSchema,
882
+ performanceBudgetRef: exports.RevisionRefSchema,
883
+ observationPolicyRevisionRef: exports.RevisionRefSchema,
884
+ })
885
+ .strict()
886
+ .superRefine((value, context) => {
887
+ validateNavigationTree(value.nodes, context);
888
+ value.nodes.forEach((node, index) => {
889
+ if (node.kind === 'target' && !['page', 'workbench', 'menu-action', 'domain-command'].includes(node.targetRef.kind)) {
890
+ context.addIssue({ code: 'custom', path: ['nodes', index, 'targetRef', 'kind'], message: 'Navigation targets must reference Page, Workbench, registered Menu Action, or DomainCommand identities.' });
891
+ }
892
+ });
893
+ });
894
+ exports.ResolvedNavigationTargetSchema = zod_1.z
895
+ .object({
896
+ nodeId: common_1.ContractIdentifierSchema,
897
+ stableTargetRef: exports.StableRefSchema,
898
+ targetRevisionRef: exports.RevisionRefSchema,
899
+ releaseRevisionRef: exports.RevisionRefSchema.optional(),
900
+ })
901
+ .strict();
902
+ exports.NavigationReleaseSchema = zod_1.z
903
+ .object({
904
+ contract: zod_1.z.literal('NavigationRelease'),
905
+ ...ReleaseBaseShape,
906
+ navigationRevisionRef: exports.RevisionRefSchema,
907
+ target: zod_1.z.object({
908
+ environmentRef: exports.StableRefSchema,
909
+ surface: exports.ProductSurfaceSchema,
910
+ placement: common_1.ContractIdentifierSchema,
911
+ }).strict(),
912
+ resolvedTargets: zod_1.z.array(exports.ResolvedNavigationTargetSchema),
913
+ })
914
+ .strict()
915
+ .superRefine((value, context) => {
916
+ validateDependencySnapshot(value.dependencySnapshot, context);
917
+ validateReleaseExpectedHead(value, 'navigation-release', context);
918
+ if (value.navigationRevisionRef.kind !== 'navigation')
919
+ context.addIssue({ code: 'custom', path: ['navigationRevisionRef', 'kind'], message: 'Expected a navigation revision.' });
920
+ if (value.target.environmentRef.kind !== 'environment')
921
+ context.addIssue({ code: 'custom', path: ['target', 'environmentRef', 'kind'], message: 'Navigation release target requires an environment reference.' });
922
+ if (uniqueArray(value.resolvedTargets, (target) => target.nodeId))
923
+ context.addIssue({ code: 'custom', path: ['resolvedTargets'], message: 'Resolved Navigation node IDs must be unique.' });
924
+ });
925
+ const RuntimeDiagnosticSchema = zod_1.z.object({
926
+ code: common_1.ContractIdentifierSchema,
927
+ severity: zod_1.z.enum(['info', 'warning', 'error']),
928
+ path: zod_1.z.string().trim().min(1),
929
+ message: zod_1.z.string().trim().min(1),
930
+ }).strict();
931
+ const RuntimeBundleBaseShape = {
932
+ schemaVersion: zod_1.z.literal(exports.DECLARATIVE_CONTROL_SCHEMA_VERSION),
933
+ tenantScope: exports.TenantScopeSchema,
934
+ releaseRevisionRef: exports.RevisionRefSchema,
935
+ compilerRevisionRef: exports.RevisionRefSchema,
936
+ generation: zod_1.z.number().int().nonnegative(),
937
+ dependencySnapshot: zod_1.z.array(exports.ReleaseDependencySchema),
938
+ contentHash: common_1.Sha256Schema,
939
+ rebuildable: zod_1.z.literal(true),
940
+ diagnostics: zod_1.z.array(RuntimeDiagnosticSchema),
941
+ };
942
+ exports.PageRuntimeBundleSchema = zod_1.z.object({
943
+ contract: zod_1.z.literal('PageRuntimeBundle'),
944
+ ...RuntimeBundleBaseShape,
945
+ pageId: common_1.ContractIdentifierSchema,
946
+ pageRevisionRef: exports.RevisionRefSchema,
947
+ surface: exports.ProductSurfaceSchema,
948
+ routeClaims: zod_1.z.array(exports.CompiledRouteClaimSchema),
949
+ shellRevisionRef: exports.RevisionRefSchema,
950
+ renderTree: render_1.RenderTreeSchema,
951
+ capabilityInstances: zod_1.z.array(exports.CapabilityInstanceSchema),
952
+ ontologyBindings: zod_1.z.array(exports.OntologyBindingSchema),
953
+ actionBindings: zod_1.z.array(exports.ActionBindingSchema),
954
+ pageAccessPolicy: exports.AccessPolicySchema,
955
+ tokenRevisionRefs: zod_1.z.array(exports.RevisionRefSchema),
956
+ performanceBudgetRef: exports.RevisionRefSchema,
957
+ observationPolicyRevisionRef: exports.RevisionRefSchema,
958
+ privacyClassification: zod_1.z.enum(['public', 'internal', 'confidential', 'restricted']),
959
+ }).strict();
960
+ exports.ResolvedWorkbenchAppInstanceSchema = exports.WorkbenchAppInstanceSchema.extend({
961
+ targetAccessPolicy: exports.AccessPolicySchema,
962
+ }).strict();
963
+ const WorkbenchRuntimeTargetSchema = exports.WorkbenchReleaseSchema.shape.target.safeExtend({
964
+ routeClaim: exports.CompiledRouteClaimSchema,
965
+ }).strict();
966
+ exports.WorkbenchRuntimeBundleSchema = zod_1.z.object({
967
+ contract: zod_1.z.literal('WorkbenchRuntimeBundle'),
968
+ ...RuntimeBundleBaseShape,
969
+ workbenchId: common_1.ContractIdentifierSchema,
970
+ workbenchRevisionRef: exports.RevisionRefSchema,
971
+ surface: exports.ProductSurfaceSchema,
972
+ routeClaims: zod_1.z.array(exports.CompiledRouteClaimSchema),
973
+ groups: zod_1.z.array(exports.WorkbenchGroupSchema),
974
+ appInstances: zod_1.z.array(exports.ResolvedWorkbenchAppInstanceSchema),
975
+ defaultEntry: exports.WorkbenchSchema.shape.defaultEntry,
976
+ layout: exports.WorkbenchSchema.shape.layout,
977
+ workbenchAccessPolicy: exports.AccessPolicySchema,
978
+ personalPreferencesPolicy: exports.WorkbenchSchema.shape.personalPreferencesPolicy,
979
+ target: WorkbenchRuntimeTargetSchema,
980
+ performanceBudgetRef: exports.RevisionRefSchema,
981
+ observationPolicyRevisionRef: exports.RevisionRefSchema,
982
+ privacyClassification: zod_1.z.enum(['public', 'internal', 'confidential', 'restricted']),
983
+ }).strict();
984
+ const CompiledNavigationTargetSchema = exports.ResolvedNavigationTargetSchema.extend({
985
+ kind: zod_1.z.literal('route'),
986
+ accessPolicy: exports.AccessPolicySchema,
987
+ routeClaim: exports.CompiledRouteClaimSchema,
988
+ }).strict();
989
+ exports.CompiledNavigationRegisteredMenuActionTargetSchema = exports.ResolvedNavigationTargetSchema.extend({
990
+ kind: zod_1.z.literal('registered-menu-action'),
991
+ accessPolicy: exports.AccessPolicySchema,
992
+ execution: zod_1.z.literal('client'),
993
+ applicationId: common_1.ContractIdentifierSchema,
994
+ actionRef: common_1.ContractIdentifierSchema,
995
+ inputSchemaRef: common_1.ContractIdentifierSchema.optional(),
996
+ input: common_1.JsonObjectSchema,
997
+ sourceCatalogRevisionRef: exports.RevisionRefSchema,
998
+ }).strict();
999
+ exports.CompiledNavigationDomainCommandTargetSchema = exports.ResolvedNavigationTargetSchema.extend({
1000
+ kind: zod_1.z.literal('governed-domain-command'),
1001
+ accessPolicy: exports.AccessPolicySchema,
1002
+ execution: zod_1.z.literal('server'),
1003
+ commandRevisionRef: exports.RevisionRefSchema,
1004
+ inputSchemaRevisionRef: exports.RevisionRefSchema,
1005
+ resultSchemaRevisionRef: exports.RevisionRefSchema.optional(),
1006
+ input: common_1.JsonObjectSchema,
1007
+ }).strict();
1008
+ exports.CompiledNavigationResolvedTargetSchema = zod_1.z.discriminatedUnion('kind', [
1009
+ CompiledNavigationTargetSchema,
1010
+ exports.CompiledNavigationRegisteredMenuActionTargetSchema,
1011
+ exports.CompiledNavigationDomainCommandTargetSchema,
1012
+ ]);
1013
+ exports.CompiledNavigationGroupNodeSchema = exports.NavigationGroupNodeSchema.extend({
1014
+ ancestorAccessPolicies: zod_1.z.array(exports.AccessPolicySchema),
1015
+ }).strict();
1016
+ exports.CompiledNavigationTargetNodeSchema = exports.NavigationTargetNodeSchema.extend({
1017
+ ancestorAccessPolicies: zod_1.z.array(exports.AccessPolicySchema),
1018
+ resolvedTarget: exports.CompiledNavigationResolvedTargetSchema,
1019
+ }).strict();
1020
+ exports.CompiledNavigationSeparatorNodeSchema = exports.NavigationSeparatorNodeSchema.extend({
1021
+ ancestorAccessPolicies: zod_1.z.array(exports.AccessPolicySchema),
1022
+ }).strict();
1023
+ exports.CompiledNavigationNodeSchema = zod_1.z.discriminatedUnion('kind', [
1024
+ exports.CompiledNavigationGroupNodeSchema,
1025
+ exports.CompiledNavigationTargetNodeSchema,
1026
+ exports.CompiledNavigationSeparatorNodeSchema,
1027
+ ]);
1028
+ exports.NavigationRuntimeBundleSchema = zod_1.z.object({
1029
+ contract: zod_1.z.literal('NavigationRuntimeBundle'),
1030
+ ...RuntimeBundleBaseShape,
1031
+ navigationId: common_1.ContractIdentifierSchema,
1032
+ navigationRevisionRef: exports.RevisionRefSchema,
1033
+ surface: exports.ProductSurfaceSchema,
1034
+ placement: common_1.ContractIdentifierSchema,
1035
+ nodes: zod_1.z.array(exports.CompiledNavigationNodeSchema),
1036
+ performanceBudgetRef: exports.RevisionRefSchema,
1037
+ observationPolicyRevisionRef: exports.RevisionRefSchema,
1038
+ }).strict();
1039
+ exports.DeclarativeControlOntologyDefinitionSchema = data_1.OntologyDefinitionSchema.extend({
1040
+ classification: zod_1.z.literal('control'),
1041
+ discovery: zod_1.z.object({
1042
+ ordinaryDataBrowser: zod_1.z.literal(false),
1043
+ businessSearch: zod_1.z.literal(false),
1044
+ businessStatistics: zod_1.z.literal(false),
1045
+ ordinaryExport: zod_1.z.literal(false),
1046
+ genericWrite: zod_1.z.literal(false),
1047
+ }).strict(),
1048
+ }).strict();
1049
+ const controlDefinition = (ontologyId, bodySchemaRef) => exports.DeclarativeControlOntologyDefinitionSchema.parse({
1050
+ contract: 'OntologyDefinition',
1051
+ ontologyId,
1052
+ dataSpaceId: 'monkeys.control',
1053
+ ownerRepo: 'monkeys-js-sdk',
1054
+ bodySchemaRef,
1055
+ authority: { service: 'monkeys-data-server', storage: 'domain-record', scope: 'tenant' },
1056
+ relationKinds: [],
1057
+ metricKinds: [],
1058
+ classification: 'control',
1059
+ discovery: {
1060
+ ordinaryDataBrowser: false,
1061
+ businessSearch: false,
1062
+ businessStatistics: false,
1063
+ ordinaryExport: false,
1064
+ genericWrite: false,
1065
+ },
1066
+ });
1067
+ exports.DECLARATIVE_CONTROL_ONTOLOGY_DEFINITIONS = Object.freeze([
1068
+ controlDefinition('monkeys.system.page', 'monkeys.system.page/v1'),
1069
+ controlDefinition('monkeys.system.page-release', 'monkeys.system.page-release/v1'),
1070
+ controlDefinition('monkeys.system.workbench', 'monkeys.system.workbench/v1'),
1071
+ controlDefinition('monkeys.system.workbench-release', 'monkeys.system.workbench-release/v1'),
1072
+ controlDefinition('monkeys.system.navigation', 'monkeys.system.navigation/v1'),
1073
+ controlDefinition('monkeys.system.navigation-release', 'monkeys.system.navigation-release/v1'),
1074
+ ]);
1075
+ //# sourceMappingURL=declarative-control.js.map