@inf-monkeys-tech/monkeys 1.0.68 → 1.0.70

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 (51) hide show
  1. package/lib/contracts/declarative-control-http.d.ts +1681 -369
  2. package/lib/contracts/declarative-control-http.d.ts.map +1 -1
  3. package/lib/contracts/declarative-control.d.ts +740 -23
  4. package/lib/contracts/declarative-control.d.ts.map +1 -1
  5. package/lib/contracts/declarative-control.js +22 -3
  6. package/lib/contracts/declarative-control.js.map +1 -1
  7. package/lib/contracts/index.d.ts +1 -0
  8. package/lib/contracts/index.d.ts.map +1 -1
  9. package/lib/contracts/index.js +1 -0
  10. package/lib/contracts/index.js.map +1 -1
  11. package/lib/contracts/workflow-column.d.ts +130 -0
  12. package/lib/contracts/workflow-column.d.ts.map +1 -0
  13. package/lib/contracts/workflow-column.js +72 -0
  14. package/lib/contracts/workflow-column.js.map +1 -0
  15. package/lib/esm/contracts/index.mjs +103 -25
  16. package/lib/esm/contracts/index.mjs.map +1 -1
  17. package/lib/esm/index.mjs +225 -25
  18. package/lib/esm/index.mjs.map +1 -1
  19. package/lib/esm/runtime/index.mjs +207 -15
  20. package/lib/esm/runtime/index.mjs.map +1 -1
  21. package/lib/esm/schemas/index.mjs +81 -3
  22. package/lib/esm/schemas/index.mjs.map +1 -1
  23. package/lib/json-schema/index.json +1 -0
  24. package/lib/json-schema/navigation-release.schema.json +582 -0
  25. package/lib/json-schema/navigation-runtime-bundle.schema.json +579 -0
  26. package/lib/json-schema/workflow-column-binding.schema.json +386 -0
  27. package/lib/runtime/declarative-control-compiler.d.ts.map +1 -1
  28. package/lib/runtime/declarative-control-compiler.js +26 -0
  29. package/lib/runtime/declarative-control-compiler.js.map +1 -1
  30. package/lib/runtime/index.d.ts +2 -0
  31. package/lib/runtime/index.d.ts.map +1 -1
  32. package/lib/runtime/index.js +2 -0
  33. package/lib/runtime/index.js.map +1 -1
  34. package/lib/runtime/menu-compiler.d.ts +19 -1
  35. package/lib/runtime/menu-compiler.d.ts.map +1 -1
  36. package/lib/runtime/menu-compiler.js +34 -0
  37. package/lib/runtime/menu-compiler.js.map +1 -1
  38. package/lib/runtime/navigation-availability.d.ts +6 -0
  39. package/lib/runtime/navigation-availability.d.ts.map +1 -0
  40. package/lib/runtime/navigation-availability.js +17 -0
  41. package/lib/runtime/navigation-availability.js.map +1 -0
  42. package/lib/runtime/workflow-column.d.ts +8 -0
  43. package/lib/runtime/workflow-column.d.ts.map +1 -0
  44. package/lib/runtime/workflow-column.js +57 -0
  45. package/lib/runtime/workflow-column.js.map +1 -0
  46. package/lib/schemas/index.d.ts +310 -1
  47. package/lib/schemas/index.d.ts.map +1 -1
  48. package/lib/schemas/index.js +13 -4
  49. package/lib/schemas/index.js.map +1 -1
  50. package/package.json +1 -1
  51. package/test/fixtures/navigation-three-roots-topology.json +275 -0
@@ -10076,6 +10076,12 @@ var ResolvedNavigationTargetSchema = z9.object({
10076
10076
  targetRevisionRef: RevisionRefSchema,
10077
10077
  releaseRevisionRef: RevisionRefSchema.optional()
10078
10078
  }).strict();
10079
+ var UnavailableNavigationTargetSchema = z9.object({
10080
+ nodeId: ContractIdentifierSchema,
10081
+ stableTargetRef: StableRefSchema.refine((reference) => reference.kind === "page", "Only missing Pages can be isolated."),
10082
+ reason: z9.literal("page-missing"),
10083
+ accessPolicy: AccessPolicySchema.nullable()
10084
+ }).strict();
10079
10085
  var NavigationReleaseSchema = z9.object({
10080
10086
  contract: z9.literal("NavigationRelease"),
10081
10087
  ...ReleaseBaseShape,
@@ -10085,13 +10091,17 @@ var NavigationReleaseSchema = z9.object({
10085
10091
  surface: ProductSurfaceSchema,
10086
10092
  placement: ContractIdentifierSchema
10087
10093
  }).strict(),
10088
- resolvedTargets: z9.array(ResolvedNavigationTargetSchema)
10094
+ resolvedTargets: z9.array(ResolvedNavigationTargetSchema),
10095
+ unavailableTargets: z9.array(UnavailableNavigationTargetSchema).optional()
10089
10096
  }).strict().superRefine((value, context) => {
10090
10097
  validateDependencySnapshot(value.dependencySnapshot, context);
10091
10098
  validateReleaseExpectedHead(value, "navigation-release", context);
10092
10099
  if (value.navigationRevisionRef.kind !== "navigation") context.addIssue({ code: "custom", path: ["navigationRevisionRef", "kind"], message: "Expected a navigation revision." });
10093
10100
  if (value.target.environmentRef.kind !== "environment") context.addIssue({ code: "custom", path: ["target", "environmentRef", "kind"], message: "Navigation release target requires an environment reference." });
10094
10101
  if (uniqueArray(value.resolvedTargets, (target) => target.nodeId)) context.addIssue({ code: "custom", path: ["resolvedTargets"], message: "Resolved Navigation node IDs must be unique." });
10102
+ if (uniqueArray([...value.resolvedTargets, ...value.unavailableTargets ?? []], (target) => target.nodeId)) {
10103
+ context.addIssue({ code: "custom", path: ["unavailableTargets"], message: "Navigation target resolutions must have unique node IDs." });
10104
+ }
10095
10105
  });
10096
10106
  var RuntimeDiagnosticSchema = z9.object({
10097
10107
  code: ContractIdentifierSchema,
@@ -10179,7 +10189,8 @@ var CompiledNavigationDomainCommandTargetSchema = ResolvedNavigationTargetSchema
10179
10189
  var CompiledNavigationResolvedTargetSchema = z9.discriminatedUnion("kind", [
10180
10190
  CompiledNavigationTargetSchema,
10181
10191
  CompiledNavigationRegisteredMenuActionTargetSchema,
10182
- CompiledNavigationDomainCommandTargetSchema
10192
+ CompiledNavigationDomainCommandTargetSchema,
10193
+ UnavailableNavigationTargetSchema.omit({ reason: true }).extend({ kind: z9.literal("unavailable") }).strict()
10183
10194
  ]);
10184
10195
  var CompiledNavigationGroupNodeSchema = NavigationGroupNodeSchema.extend({
10185
10196
  ancestorAccessPolicies: z9.array(AccessPolicySchema)
@@ -10187,7 +10198,14 @@ var CompiledNavigationGroupNodeSchema = NavigationGroupNodeSchema.extend({
10187
10198
  var CompiledNavigationTargetNodeSchema = NavigationTargetNodeSchema.extend({
10188
10199
  ancestorAccessPolicies: z9.array(AccessPolicySchema),
10189
10200
  resolvedTarget: CompiledNavigationResolvedTargetSchema
10190
- }).strict();
10201
+ }).strict().superRefine((node, context) => {
10202
+ if (node.resolvedTarget.nodeId !== node.nodeId || stableRefIdentity(node.resolvedTarget.stableTargetRef) !== stableRefIdentity(node.targetRef)) {
10203
+ context.addIssue({ code: "custom", path: ["resolvedTarget"], message: "Resolved target identity must match the source node." });
10204
+ }
10205
+ if (node.resolvedTarget.kind === "unavailable" && (node.disabled !== true || Object.keys(node.parameterMapping).length > 0)) {
10206
+ context.addIssue({ code: "custom", path: ["resolvedTarget"], message: "Unavailable targets must be disabled and contain no executable input." });
10207
+ }
10208
+ });
10191
10209
  var CompiledNavigationSeparatorNodeSchema = NavigationSeparatorNodeSchema.extend({
10192
10210
  ancestorAccessPolicies: z9.array(AccessPolicySchema)
10193
10211
  }).strict();
@@ -11407,7 +11425,14 @@ var compileNavigationRuntimeBundle = (input) => {
11407
11425
  assertUniqueRegistryKeys(targetRegistry.map((registration) => stableRefKey(registration.stableTargetRef)), "targetRegistry");
11408
11426
  const targetsByStableRef = new Map(targetRegistry.map((registration) => [stableRefKey(registration.stableTargetRef), registration]));
11409
11427
  const releasedByNodeId = new Map(release.resolvedTargets.map((target) => [target.nodeId, target]));
11428
+ const unavailableByNodeId = new Map((release.unavailableTargets ?? []).map((target) => [target.nodeId, target]));
11410
11429
  const nodesById = new Map(navigation.nodes.map((node) => [node.nodeId, node]));
11430
+ for (const target of release.unavailableTargets ?? []) {
11431
+ const node = nodesById.get(target.nodeId);
11432
+ if (node?.kind !== "target" || !sameStableRef(node.targetRef, target.stableTargetRef)) {
11433
+ throw new DeclarativeControlCompilationError("NAV_TARGET_UNRELEASED", "release.unavailableTargets", "An unavailable target must identify its source Page node exactly.");
11434
+ }
11435
+ }
11411
11436
  const nodes = orderedNavigationNodes(navigation).map((node, index) => {
11412
11437
  const ancestors = [];
11413
11438
  let parentId = node.parentNodeId;
@@ -11422,6 +11447,25 @@ var compileNavigationRuntimeBundle = (input) => {
11422
11447
  }
11423
11448
  const registration = targetsByStableRef.get(stableRefKey(node.targetRef));
11424
11449
  const released = releasedByNodeId.get(node.nodeId);
11450
+ const unavailable = unavailableByNodeId.get(node.nodeId);
11451
+ if (!registration && unavailable && node.targetRef.kind === "page" && sameStableRef(unavailable.stableTargetRef, node.targetRef)) {
11452
+ assertTenantCompatible(node.targetRef, scope, `nodes[${index}].targetRef`);
11453
+ if (unavailable.accessPolicy && !accessPolicyChainImplies([...ancestors, node.audience], unavailable.accessPolicy)) {
11454
+ throw new DeclarativeControlCompilationError("AUDIENCE_WIDER_THAN_TARGET", `nodes[${index}].audience`, "Effective Navigation audience is wider than the last verified target audience.");
11455
+ }
11456
+ return {
11457
+ ...node,
11458
+ disabled: true,
11459
+ parameterMapping: {},
11460
+ ancestorAccessPolicies: ancestors,
11461
+ resolvedTarget: {
11462
+ kind: "unavailable",
11463
+ nodeId: node.nodeId,
11464
+ stableTargetRef: node.targetRef,
11465
+ accessPolicy: unavailable.accessPolicy
11466
+ }
11467
+ };
11468
+ }
11425
11469
  if (!registration || !released || !sameStableRef(registration.stableTargetRef, stableFromRevision(registration.targetRevisionRef)) || !sameStableRef(registration.stableTargetRef, released.stableTargetRef) || !sameRevisionRef(registration.targetRevisionRef, released.targetRevisionRef) || registration.kind === "route" && (Boolean(registration.releaseRevisionRef) !== Boolean(released.releaseRevisionRef) || registration.releaseRevisionRef && released.releaseRevisionRef && !sameRevisionRef(registration.releaseRevisionRef, released.releaseRevisionRef))) {
11426
11470
  throw new DeclarativeControlCompilationError("NAV_TARGET_UNRELEASED", `nodes[${index}].targetRef`, "Navigation target is not resolved to the exact active release recorded by NavigationRelease.");
11427
11471
  }
@@ -11551,6 +11595,16 @@ var resolveWorkbenchEntry = (input) => {
11551
11595
  return { status: "forbidden", workbenchId: "" };
11552
11596
  };
11553
11597
 
11598
+ // src/runtime/navigation-availability.ts
11599
+ var NAVIGATION_UNAVAILABLE_CAPABILITY_HEADER = "x-monkeys-navigation-capabilities";
11600
+ var NAVIGATION_UNAVAILABLE_CAPABILITY = "unavailable-pages-v1";
11601
+ function projectNavigationCompatibility(bundle, supportsUnavailable) {
11602
+ if (supportsUnavailable || !bundle.nodes.some((node) => node.kind === "target" && node.resolvedTarget.kind === "unavailable")) return bundle;
11603
+ const { contentHash: _hash, ...unsigned } = bundle;
11604
+ const nodes = bundle.nodes.filter((node) => node.kind !== "target" || node.resolvedTarget.kind !== "unavailable");
11605
+ return NavigationRuntimeBundleSchema.parse({ ...unsigned, nodes, contentHash: canonicalContentHash({ ...unsigned, nodes }) });
11606
+ }
11607
+
11554
11608
  // src/runtime/menu-compiler.ts
11555
11609
  var MenuCompilationError = class extends Error {
11556
11610
  constructor(code, path, message) {
@@ -11823,6 +11877,13 @@ var compileMenuRuntimeBundle = (input) => {
11823
11877
  const contributionProviders = input.contributionProviders.map((registration) => MenuContributionProviderRegistrationSchema.parse(registration));
11824
11878
  const inputValidators = input.inputValidators ?? /* @__PURE__ */ new Map();
11825
11879
  const knownPermissions = new Set(input.permissionCodes.map((permission) => ContractIdentifierSchema.parse(permission)));
11880
+ const completeApplications = new Set(input.missingPagePolicy?.completeApplicationIds.map((id) => ContractIdentifierSchema.parse(id)) ?? []);
11881
+ const unavailableAccess = input.missingPagePolicy ? MenuAccessRequirementSchema.parse(input.missingPagePolicy.unavailableAccess) : void 0;
11882
+ if (unavailableAccess) {
11883
+ validatePermissionCodes(unavailableAccess.permissionAllOf, knownPermissions, "missingPagePolicy.unavailableAccess.permissionAllOf");
11884
+ validatePermissionCodes(unavailableAccess.permissionAnyOf, knownPermissions, "missingPagePolicy.unavailableAccess.permissionAnyOf");
11885
+ }
11886
+ const diagnostics = [];
11826
11887
  pages.forEach((registration, index) => {
11827
11888
  if (!registration.page.visibility.productContexts.some((context) => context === registration.applicationId)) {
11828
11889
  throw new MenuCompilationError(
@@ -11887,6 +11948,35 @@ var compileMenuRuntimeBundle = (input) => {
11887
11948
  if (node.behavior.kind === "navigate") {
11888
11949
  const registration = pagesByKey.get(pageKey(node.behavior.page));
11889
11950
  if (!registration) {
11951
+ if (unavailableAccess && completeApplications.has(node.behavior.page.applicationId)) {
11952
+ const activationId2 = resolveMenuActivationId(node.behavior.page, node.behavior.activationId);
11953
+ const identity2 = targetKey(node.behavior.page, activationId2);
11954
+ const signature2 = stableSerialize2({ ...node.behavior, activationId: activationId2 });
11955
+ const previous = targetSourceSignatures.get(identity2);
11956
+ if (previous !== void 0 && previous !== signature2) {
11957
+ throw new MenuCompilationError("conflicting-navigation-target", `${nodePath}.behavior`, "Missing navigation target has conflicting behavior or input.");
11958
+ }
11959
+ targetSourceSignatures.set(identity2, signature2);
11960
+ if (definition.applicationId === applicationId) {
11961
+ diagnostics.push({
11962
+ code: "missing-page",
11963
+ severity: "warning",
11964
+ applicationId: definition.applicationId,
11965
+ surface: definition.surface,
11966
+ menuId: definition.menuId,
11967
+ nodeId: node.nodeId,
11968
+ page: node.behavior.page,
11969
+ path: `${nodePath}.behavior.page`
11970
+ });
11971
+ }
11972
+ const { requiredPermission: requiredPermission3, behavior: _behavior3, ...presentation3 } = node;
11973
+ return CompiledMenuItemNodeSchema.parse({
11974
+ ...presentation3,
11975
+ disabled: true,
11976
+ behavior: { kind: "navigate", page: node.behavior.page, activationId: activationId2 },
11977
+ access: { ...unavailableAccess, requiredPermission: requiredPermission3 }
11978
+ });
11979
+ }
11890
11980
  throw new MenuCompilationError(
11891
11981
  "unknown-page",
11892
11982
  `${nodePath}.behavior.page`,
@@ -12049,6 +12139,7 @@ var compileMenuRuntimeBundle = (input) => {
12049
12139
  };
12050
12140
  return Object.freeze({
12051
12141
  document: deepFreeze2(document),
12142
+ diagnostics: deepFreeze2(diagnostics),
12052
12143
  menusByKey,
12053
12144
  navigationTargetsByKey: documentTargetsByKey,
12054
12145
  serverInputByTargetKey,
@@ -15756,9 +15847,105 @@ var compileWorkflowPersistenceProjection = (input) => {
15756
15847
  });
15757
15848
  };
15758
15849
 
15759
- // src/contracts/access.ts
15850
+ // src/contracts/workflow-column.ts
15760
15851
  import { z as z13 } from "zod";
15761
- var PermissionDefinitionSchema = z13.object({
15852
+ var WorkflowColumnFieldRefSchema = z13.object({
15853
+ ontologyId: ContractIdentifierSchema,
15854
+ fieldKey: ContractIdentifierSchema
15855
+ }).strict();
15856
+ var WorkflowColumnInputSchema = z13.discriminatedUnion("kind", [
15857
+ z13.object({ kind: z13.literal("default") }).strict(),
15858
+ z13.object({ kind: z13.literal("constant"), value: JsonValueSchema }).strict(),
15859
+ z13.object({ kind: z13.literal("field"), field: WorkflowColumnFieldRefSchema }).strict(),
15860
+ z13.object({
15861
+ kind: z13.literal("context"),
15862
+ field: z13.enum(["assetId", "teamId", "ontologyId", "columnId"])
15863
+ }).strict()
15864
+ ]);
15865
+ var WorkflowColumnDependencySchema = z13.discriminatedUnion("kind", [
15866
+ z13.object({ kind: z13.literal("field"), field: WorkflowColumnFieldRefSchema }).strict(),
15867
+ z13.object({
15868
+ kind: z13.literal("relation"),
15869
+ relation: WorkflowColumnFieldRefSchema,
15870
+ direction: z13.enum(["incoming", "outgoing"]),
15871
+ fields: z13.array(WorkflowColumnFieldRefSchema).max(100)
15872
+ }).strict()
15873
+ ]);
15874
+ var WorkflowColumnOutputPathSchema = z13.array(z13.string().min(1).max(256)).max(20);
15875
+ var WorkflowColumnOutputSchema = z13.object({
15876
+ type: z13.enum(["number", "text", "json"]),
15877
+ path: WorkflowColumnOutputPathSchema,
15878
+ nullable: z13.boolean().default(false)
15879
+ }).strict();
15880
+ var WorkflowColumnBindingSchema = z13.object({
15881
+ contract: z13.literal("WorkflowColumnBinding"),
15882
+ version: z13.literal(1),
15883
+ enabled: z13.boolean(),
15884
+ paused: z13.boolean().default(false),
15885
+ workflow: z13.object({
15886
+ id: ContractIdentifierSchema,
15887
+ version: z13.number().int().positive(),
15888
+ inputSchemaHash: Sha256Schema
15889
+ }).strict(),
15890
+ inputs: z13.record(z13.string().min(1).max(128), WorkflowColumnInputSchema),
15891
+ dependencies: z13.array(WorkflowColumnDependencySchema).max(100).default([]),
15892
+ output: WorkflowColumnOutputSchema,
15893
+ policy: z13.object({
15894
+ debounceMs: z13.number().int().min(0).max(3e4).default(5e3),
15895
+ maxDelayMs: z13.number().int().min(0).max(3e4).default(3e4),
15896
+ concurrency: z13.number().int().min(1).max(32).default(2)
15897
+ }).strict().default({ debounceMs: 5e3, maxDelayMs: 3e4, concurrency: 2 }),
15898
+ // The workflow supplies an ISO datetime with offset for one future expiry.
15899
+ // Scheduling infrastructure needs no knowledge of months or business periods.
15900
+ expiry: z13.object({ path: WorkflowColumnOutputPathSchema }).strict().optional()
15901
+ }).strict();
15902
+
15903
+ // src/runtime/workflow-column.ts
15904
+ function parseWorkflowColumnBinding(value) {
15905
+ const binding = WorkflowColumnBindingSchema.parse(value);
15906
+ if (Object.keys(binding.inputs).length > 100)
15907
+ throw new Error("Workflow column supports at most 100 input bindings.");
15908
+ if (binding.policy.maxDelayMs < binding.policy.debounceMs)
15909
+ throw new Error("Workflow column maxDelayMs must be at least debounceMs.");
15910
+ for (const name of Object.keys(binding.inputs)) {
15911
+ if (name !== name.trim() || name.startsWith("__") || name === "constructor" || name === "prototype") {
15912
+ throw new Error(`Invalid Workflow input name: ${name}`);
15913
+ }
15914
+ }
15915
+ return binding;
15916
+ }
15917
+ function selectOwnValue(payload, path) {
15918
+ let value = payload;
15919
+ for (const key of path) {
15920
+ if (value === null || typeof value !== "object" || !Object.prototype.hasOwnProperty.call(value, key)) {
15921
+ throw new Error(`Workflow output is missing the configured path: ${JSON.stringify(path)}`);
15922
+ }
15923
+ value = value[key];
15924
+ }
15925
+ if (value === void 0) throw new Error("Workflow output is absent.");
15926
+ return value;
15927
+ }
15928
+ function resolveWorkflowColumnResult(binding, payload, nowMs = Date.now()) {
15929
+ const selected = selectOwnValue(payload, binding.output.path);
15930
+ if (selected === null && !binding.output.nullable)
15931
+ throw new Error("Workflow output is null but this column does not allow null results.");
15932
+ if (selected !== null) {
15933
+ if (binding.output.type === "number" && (typeof selected !== "number" || !Number.isFinite(selected)))
15934
+ throw new Error("Workflow output must be a finite number.");
15935
+ if (binding.output.type === "text" && typeof selected !== "string")
15936
+ throw new Error("Workflow output must be text.");
15937
+ }
15938
+ const value = JsonValueSchema.parse(selected);
15939
+ if (!binding.expiry) return { value };
15940
+ const expiresAt = IsoDateTimeSchema.parse(selectOwnValue(payload, binding.expiry.path));
15941
+ if (!Number.isFinite(nowMs) || Date.parse(expiresAt) <= nowMs)
15942
+ throw new Error("Workflow expiry must be a future datetime.");
15943
+ return { value, expiresAt };
15944
+ }
15945
+
15946
+ // src/contracts/access.ts
15947
+ import { z as z14 } from "zod";
15948
+ var PermissionDefinitionSchema = z14.object({
15762
15949
  code: ContractIdentifierSchema,
15763
15950
  name: LocalizedTextSchema,
15764
15951
  description: LocalizedTextSchema.optional(),
@@ -15766,29 +15953,29 @@ var PermissionDefinitionSchema = z13.object({
15766
15953
  action: ContractIdentifierSchema,
15767
15954
  domain: ContractIdentifierSchema.optional()
15768
15955
  }).strict();
15769
- var PermissionBundleSchema = z13.object({
15956
+ var PermissionBundleSchema = z14.object({
15770
15957
  bundleId: ContractIdentifierSchema,
15771
15958
  name: LocalizedTextSchema,
15772
- permissionCodes: z13.array(ContractIdentifierSchema).default([])
15959
+ permissionCodes: z14.array(ContractIdentifierSchema).default([])
15773
15960
  }).strict();
15774
- var SystemGroupDefinitionSchema = z13.object({
15961
+ var SystemGroupDefinitionSchema = z14.object({
15775
15962
  groupCode: ContractIdentifierSchema,
15776
15963
  name: LocalizedTextSchema,
15777
15964
  description: LocalizedTextSchema.optional(),
15778
- permissionPolicy: z13.enum(["bundles", "studio_current", "all_current"]).default("bundles"),
15779
- permissionBundleIds: z13.array(ContractIdentifierSchema).default([])
15965
+ permissionPolicy: z14.enum(["bundles", "studio_current", "all_current"]).default("bundles"),
15966
+ permissionBundleIds: z14.array(ContractIdentifierSchema).default([])
15780
15967
  }).strict().refine((value) => value.permissionPolicy !== "bundles" || value.permissionBundleIds.length > 0, {
15781
15968
  message: "A bundles permission policy requires at least one permission bundle.",
15782
15969
  path: ["permissionBundleIds"]
15783
15970
  });
15784
- var ProductAccessDeclarationSchema = z13.object({
15785
- contract: z13.literal("ProductAccessDeclaration"),
15971
+ var ProductAccessDeclarationSchema = z14.object({
15972
+ contract: z14.literal("ProductAccessDeclaration"),
15786
15973
  declarationId: ContractIdentifierSchema,
15787
15974
  version: ContractVersionSchema,
15788
15975
  ownerRepo: ContractIdentifierSchema,
15789
- permissions: z13.array(PermissionDefinitionSchema).default([]),
15790
- permissionBundles: z13.array(PermissionBundleSchema).default([]),
15791
- systemGroups: z13.array(SystemGroupDefinitionSchema).min(1)
15976
+ permissions: z14.array(PermissionDefinitionSchema).default([]),
15977
+ permissionBundles: z14.array(PermissionBundleSchema).default([]),
15978
+ systemGroups: z14.array(SystemGroupDefinitionSchema).min(1)
15792
15979
  }).strict();
15793
15980
 
15794
15981
  // src/runtime/access-compiler.ts
@@ -15852,6 +16039,8 @@ export {
15852
16039
  DeclarativeControlCompilationError,
15853
16040
  MONKEYS_REQUIRED_THEME_TOKEN_PATHS,
15854
16041
  MenuCompilationError,
16042
+ NAVIGATION_UNAVAILABLE_CAPABILITY,
16043
+ NAVIGATION_UNAVAILABLE_CAPABILITY_HEADER,
15855
16044
  ThemeTokenValidationError,
15856
16045
  accessPolicyChainImplies,
15857
16046
  applyViewRuntimeBindings,
@@ -15895,13 +16084,16 @@ export {
15895
16084
  materializeRouteSpacePath,
15896
16085
  mergeThemeTokenDocuments,
15897
16086
  parseApplicationHandoff,
16087
+ parseWorkflowColumnBinding,
15898
16088
  projectAgentSessionEvents,
16089
+ projectNavigationCompatibility,
15899
16090
  publishOpenApiToolCapabilityManifests,
15900
16091
  readApplicationHandoffFromUrl,
15901
16092
  readMenuActivationFromSearch,
15902
16093
  resolveMenuActivationId,
15903
16094
  resolveThemeTokens,
15904
16095
  resolveWorkbenchEntry,
16096
+ resolveWorkflowColumnResult,
15905
16097
  revisionRefKey,
15906
16098
  sameRevisionRef,
15907
16099
  sameStableRef,