@kici-dev/engine 0.1.26 → 0.2.0

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 (157) hide show
  1. package/dist/approval/types.d.ts +11 -4
  2. package/dist/approval/types.js +11 -4
  3. package/dist/artifacts/name.d.ts +60 -0
  4. package/dist/artifacts/name.js +71 -0
  5. package/dist/audit/access-log-policy.d.ts +1 -1
  6. package/dist/audit/access-log-policy.js +20 -11
  7. package/dist/audit/activity.d.ts +12 -12
  8. package/dist/audit/retention-policy.js +40 -22
  9. package/dist/billing/plan-type.d.ts +53 -0
  10. package/dist/billing/plan-type.js +70 -0
  11. package/dist/bundler/rolldown-config.d.ts +3 -3
  12. package/dist/check-mode.d.ts +1 -1
  13. package/dist/context/concurrency-strategy.d.ts +34 -0
  14. package/dist/context/concurrency-strategy.js +35 -0
  15. package/dist/context/held-run-job-id.d.ts +45 -0
  16. package/dist/context/held-run-job-id.js +56 -0
  17. package/dist/context/held-run-status.d.ts +33 -0
  18. package/dist/context/held-run-status.js +37 -0
  19. package/dist/context/hold-expiry.d.ts +20 -0
  20. package/dist/context/hold-expiry.js +25 -0
  21. package/dist/context/hold-reason.d.ts +33 -0
  22. package/dist/context/hold-reason.js +23 -0
  23. package/dist/context/hold-type.d.ts +40 -0
  24. package/dist/context/hold-type.js +61 -0
  25. package/dist/{environment → context}/host-match.js +1 -1
  26. package/dist/context/index.d.ts +14 -0
  27. package/dist/context/index.js +12 -0
  28. package/dist/context/multi-context.d.ts +30 -0
  29. package/dist/context/multi-context.js +38 -0
  30. package/dist/context/scope-name.d.ts +29 -0
  31. package/dist/context/scope-name.js +49 -0
  32. package/dist/context/scope-resolver.d.ts +79 -0
  33. package/dist/{environment → context}/scope-resolver.js +47 -17
  34. package/dist/{environment → context}/scope-template.js +1 -1
  35. package/dist/{environment → context}/types.d.ts +25 -22
  36. package/dist/{environment → context}/types.js +3 -3
  37. package/dist/dev-ops/operations.d.ts +9 -1
  38. package/dist/dev-ops/operations.js +37 -20
  39. package/dist/diagnostics/infra-alert.d.ts +71 -0
  40. package/dist/diagnostics/infra-alert.js +60 -0
  41. package/dist/env/environment-allowlist.d.ts +26 -3
  42. package/dist/env/environment-allowlist.js +35 -1
  43. package/dist/fanout/materialize.d.ts +16 -0
  44. package/dist/fanout/materialize.js +34 -5
  45. package/dist/index.d.ts +16 -7
  46. package/dist/index.js +38 -23
  47. package/dist/inputs/descriptor.d.ts +9 -9
  48. package/dist/inventory.d.ts +4 -4
  49. package/dist/labels.d.ts +82 -2
  50. package/dist/labels.js +119 -1
  51. package/dist/matrix/expand.d.ts +49 -2
  52. package/dist/matrix/expand.js +102 -13
  53. package/dist/matrix/format.d.ts +6 -1
  54. package/dist/matrix/format.js +6 -1
  55. package/dist/mcp/held-run-resolve.d.ts +7 -10
  56. package/dist/mcp/held-run-resolve.js +33 -7
  57. package/dist/metrics/catalog-policy.js +4 -4
  58. package/dist/metrics/metric-catalog.generated.d.ts +954 -734
  59. package/dist/metrics/metric-catalog.generated.js +296 -32
  60. package/dist/metrics/metric-kind-compat.d.ts +26 -0
  61. package/dist/metrics/metric-kind-compat.js +33 -0
  62. package/dist/protocol/analytics-events.d.ts +6 -6
  63. package/dist/protocol/dashboard-api-errors.d.ts +13 -0
  64. package/dist/protocol/dashboard-api-errors.js +17 -0
  65. package/dist/protocol/dashboard-write-operations.d.ts +143 -86
  66. package/dist/protocol/dashboard-write-operations.js +143 -69
  67. package/dist/protocol/messages/access-log.d.ts +438 -388
  68. package/dist/protocol/messages/access-log.js +24 -14
  69. package/dist/protocol/messages/actor.d.ts +2 -2
  70. package/dist/protocol/messages/agent-dev-ops.d.ts +4 -2
  71. package/dist/protocol/messages/agent-dev-ops.js +2 -5
  72. package/dist/protocol/messages/agent-run-result.d.ts +74 -64
  73. package/dist/protocol/messages/agent-run-result.js +1 -1
  74. package/dist/protocol/messages/auth.d.ts +35 -23
  75. package/dist/protocol/messages/browser.d.ts +81 -5
  76. package/dist/protocol/messages/browser.js +53 -2
  77. package/dist/protocol/messages/capabilities.d.ts +106 -31
  78. package/dist/protocol/messages/capabilities.js +94 -10
  79. package/dist/protocol/messages/common.d.ts +45 -2
  80. package/dist/protocol/messages/common.js +64 -3
  81. package/dist/protocol/messages/dashboard-sealed-write.d.ts +52 -0
  82. package/dist/protocol/messages/dashboard-sealed-write.js +57 -0
  83. package/dist/protocol/messages/dashboard.d.ts +1232 -706
  84. package/dist/protocol/messages/dashboard.js +387 -220
  85. package/dist/protocol/messages/deployment-identity.d.ts +37 -10
  86. package/dist/protocol/messages/deployment-identity.js +30 -3
  87. package/dist/protocol/messages/event-log.d.ts +5 -5
  88. package/dist/protocol/messages/execution-status.d.ts +198 -62
  89. package/dist/protocol/messages/execution-status.js +114 -46
  90. package/dist/protocol/messages/heartbeat-health.d.ts +83 -0
  91. package/dist/protocol/messages/heartbeat-health.js +87 -0
  92. package/dist/protocol/messages/log-stream.d.ts +18 -0
  93. package/dist/protocol/messages/log-stream.js +19 -0
  94. package/dist/protocol/messages/oidc-mint.d.ts +7 -0
  95. package/dist/protocol/messages/oidc-mint.js +7 -0
  96. package/dist/protocol/messages/orchestrator-agent.d.ts +264 -67
  97. package/dist/protocol/messages/orchestrator-agent.js +170 -5
  98. package/dist/protocol/messages/pat-kind.d.ts +1 -1
  99. package/dist/protocol/messages/peer.d.ts +122 -58
  100. package/dist/protocol/messages/peer.js +37 -2
  101. package/dist/protocol/messages/platform-orchestrator.d.ts +603 -258
  102. package/dist/protocol/messages/platform-orchestrator.js +131 -21
  103. package/dist/protocol/messages/run-events.d.ts +5 -5
  104. package/dist/protocol/messages/scaler-event.d.ts +3 -3
  105. package/dist/protocol/messages/source-registration.d.ts +56 -13
  106. package/dist/protocol/messages/source-registration.js +49 -6
  107. package/dist/protocol/session-policy.d.ts +20 -0
  108. package/dist/protocol/session-policy.js +25 -0
  109. package/dist/protocol/source-origin.d.ts +1 -1
  110. package/dist/provenance/attestation-origin.d.ts +1 -1
  111. package/dist/provenance/schema.d.ts +11 -11
  112. package/dist/provenance/verify.js +2 -1
  113. package/dist/provider/changed-files-fetcher.d.ts +21 -2
  114. package/dist/provider/check-run-conclusion.d.ts +2 -2
  115. package/dist/provider/check-status-poster.d.ts +23 -0
  116. package/dist/provider/index.d.ts +2 -2
  117. package/dist/registration/registerable-trigger-type.d.ts +14 -13
  118. package/dist/registration/registerable-trigger-type.js +1 -0
  119. package/dist/sandbox/capabilities.d.ts +6 -0
  120. package/dist/sandbox/capabilities.js +57 -0
  121. package/dist/scaler/scaler-backend-type.d.ts +1 -1
  122. package/dist/status/presentation.d.ts +89 -0
  123. package/dist/status/presentation.js +163 -0
  124. package/dist/trigger/compiled-matchers.d.ts +13 -0
  125. package/dist/trigger/compiled-matchers.js +44 -0
  126. package/dist/trigger/event-buckets.d.ts +44 -0
  127. package/dist/trigger/event-buckets.js +93 -0
  128. package/dist/trigger/matcher.d.ts +7 -3
  129. package/dist/trigger/matcher.js +53 -15
  130. package/dist/trigger/schedule-key.d.ts +14 -0
  131. package/dist/trigger/schedule-key.js +21 -0
  132. package/dist/trigger/trigger-event-type.d.ts +1 -1
  133. package/dist/trigger/trigger-event-type.js +2 -0
  134. package/dist/trigger/types.d.ts +178 -47
  135. package/dist/trigger/types.js +82 -24
  136. package/dist/webhook/event-types.d.ts +56 -0
  137. package/dist/webhook/event-types.js +59 -0
  138. package/dist/ws/ws-like.d.ts +13 -0
  139. package/package.json +26 -10
  140. package/sbom.spdx.json +10 -10
  141. package/dist/environment/index.d.ts +0 -6
  142. package/dist/environment/index.js +0 -5
  143. package/dist/environment/multi-env.d.ts +0 -30
  144. package/dist/environment/multi-env.js +0 -38
  145. package/dist/environment/scope-resolver.d.ts +0 -46
  146. package/dist/package-manager.d.ts +0 -20
  147. package/dist/protocol/messages/observe.d.ts +0 -76
  148. package/dist/protocol/messages/saas-orchestrator.d.ts +0 -2179
  149. package/dist/protocol/messages/test-run.d.ts +0 -59
  150. package/dist/state-machine/index.d.ts +0 -2
  151. package/dist/state-machine/index.js +0 -3
  152. package/dist/state-machine/machine.d.ts +0 -34
  153. package/dist/state-machine/machine.js +0 -103
  154. package/dist/state-machine/types.d.ts +0 -34
  155. package/dist/state-machine/types.js +0 -15
  156. /package/dist/{environment → context}/host-match.d.ts +0 -0
  157. /package/dist/{environment → context}/scope-template.d.ts +0 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The metric-kind vocabulary shared by the orchestrator's push reporter, the
3
+ * Platform's admission filter, and the runtime-metrics drift guard.
4
+ *
5
+ * The catalog records the OTel instrument kind (`observableGauge`, …) while the
6
+ * wire carries a narrower set, so admission needs a compatibility relation
7
+ * rather than equality. Keeping one implementation is what stops the guard and
8
+ * the runtime path from disagreeing about which series are admissible.
9
+ */
10
+ /** Metric kinds that appear on the orchestrator → Platform wire. */
11
+ export type WireMetricKind = 'counter' | 'histogram' | 'gauge' | 'upDownCounter';
12
+ /**
13
+ * OTel `DataPointType` enum values, mirrored as plain numbers so this module
14
+ * stays dependency-free. `@opentelemetry/sdk-metrics` is not an engine
15
+ * dependency and must not become one.
16
+ */
17
+ export declare const OTEL_DATA_POINT_TYPE: {
18
+ readonly HISTOGRAM: 0;
19
+ readonly GAUGE: 2;
20
+ readonly SUM: 3;
21
+ };
22
+ /** Derive the wire kind from an OTel descriptor's data-point type. */
23
+ export declare function mapDataPointTypeToWireKind(dataPointType: number, isMonotonic?: boolean): WireMetricKind;
24
+ /** True when a wire kind may be admitted against a catalogued instrument kind. */
25
+ export declare function isCompatibleMetricKind(wire: WireMetricKind, catalog: string): boolean;
26
+ //# sourceMappingURL=metric-kind-compat.d.ts.map
@@ -0,0 +1,33 @@
1
+ import "../rolldown-runtime-ClRpJifh.js";
2
+ //#region src/metrics/metric-kind-compat.ts
3
+ /**
4
+ * OTel `DataPointType` enum values, mirrored as plain numbers so this module
5
+ * stays dependency-free. `@opentelemetry/sdk-metrics` is not an engine
6
+ * dependency and must not become one.
7
+ */
8
+ const OTEL_DATA_POINT_TYPE = {
9
+ HISTOGRAM: 0,
10
+ GAUGE: 2,
11
+ SUM: 3
12
+ };
13
+ /** Derive the wire kind from an OTel descriptor's data-point type. */
14
+ function mapDataPointTypeToWireKind(dataPointType, isMonotonic) {
15
+ switch (dataPointType) {
16
+ case OTEL_DATA_POINT_TYPE.HISTOGRAM: return "histogram";
17
+ case OTEL_DATA_POINT_TYPE.GAUGE: return "gauge";
18
+ case OTEL_DATA_POINT_TYPE.SUM: return isMonotonic === false ? "upDownCounter" : "counter";
19
+ default: return "gauge";
20
+ }
21
+ }
22
+ /** True when a wire kind may be admitted against a catalogued instrument kind. */
23
+ function isCompatibleMetricKind(wire, catalog) {
24
+ if (wire === catalog) return true;
25
+ if (wire === "gauge" && catalog === "observableGauge") return true;
26
+ if (wire === "counter" && catalog === "observableCounter") return true;
27
+ if (wire === "upDownCounter" && catalog === "observableUpDownCounter") return true;
28
+ return false;
29
+ }
30
+ //#endregion
31
+ export { OTEL_DATA_POINT_TYPE, isCompatibleMetricKind, mapDataPointTypeToWireKind };
32
+
33
+ //# sourceMappingURL=metric-kind-compat.js.map
@@ -1,16 +1,16 @@
1
1
  import { z } from 'zod';
2
2
  export declare const AnalyticsEvent: z.ZodEnum<{
3
+ billing_plan_selected: "billing_plan_selected";
4
+ code_copy: "code_copy";
5
+ cta_dashboard: "cta_dashboard";
6
+ docs_search: "docs_search";
3
7
  login: "login";
4
8
  org_created: "org_created";
9
+ run_viewed: "run_viewed";
5
10
  secret_created: "secret_created";
6
11
  workflow_run_triggered: "workflow_run_triggered";
7
- run_viewed: "run_viewed";
8
- billing_plan_selected: "billing_plan_selected";
9
- code_copy: "code_copy";
10
- docs_search: "docs_search";
11
- cta_dashboard: "cta_dashboard";
12
12
  }>;
13
13
  export type AnalyticsEvent = z.infer<typeof AnalyticsEvent>;
14
14
  /** The catalogue as a plain array (for build-time mirroring + tests). */
15
- export declare const ANALYTICS_EVENTS: ("login" | "org_created" | "secret_created" | "workflow_run_triggered" | "run_viewed" | "billing_plan_selected" | "code_copy" | "docs_search" | "cta_dashboard")[];
15
+ export declare const ANALYTICS_EVENTS: ("billing_plan_selected" | "code_copy" | "cta_dashboard" | "docs_search" | "login" | "org_created" | "run_viewed" | "secret_created" | "workflow_run_triggered")[];
16
16
  //# sourceMappingURL=analytics-events.d.ts.map
@@ -0,0 +1,13 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Structured `error` codes the Platform dashboard API returns in a JSON body,
4
+ * which the dashboard SPA special-cases when rendering. Shared so the emit
5
+ * sites (Platform) and the match site (dashboard) never drift on the literal.
6
+ */
7
+ export declare const DashboardApiErrorCode: z.ZodEnum<{
8
+ orchestrator_not_found: "orchestrator_not_found";
9
+ run_outside_retention: "run_outside_retention";
10
+ session_max_age_exceeded: "session_max_age_exceeded";
11
+ }>;
12
+ export type DashboardApiErrorCode = z.infer<typeof DashboardApiErrorCode>;
13
+ //# sourceMappingURL=dashboard-api-errors.d.ts.map
@@ -0,0 +1,17 @@
1
+ import "../rolldown-runtime-ClRpJifh.js";
2
+ import { z } from "zod";
3
+ //#region src/protocol/dashboard-api-errors.ts
4
+ /**
5
+ * Structured `error` codes the Platform dashboard API returns in a JSON body,
6
+ * which the dashboard SPA special-cases when rendering. Shared so the emit
7
+ * sites (Platform) and the match site (dashboard) never drift on the literal.
8
+ */
9
+ const DashboardApiErrorCode = z.enum([
10
+ "orchestrator_not_found",
11
+ "session_max_age_exceeded",
12
+ "run_outside_retention"
13
+ ]);
14
+ //#endregion
15
+ export { DashboardApiErrorCode };
16
+
17
+ //# sourceMappingURL=dashboard-api-errors.js.map
@@ -20,54 +20,54 @@
20
20
  */
21
21
  import { z } from 'zod';
22
22
  export declare const DashboardWriteOperation: z.ZodEnum<{
23
- "secrets.set": "secrets.set";
24
- "secrets.delete": "secrets.delete";
25
- "secrets.scope.create": "secrets.scope.create";
26
- "secrets.scope.rename": "secrets.scope.rename";
27
- "secrets.scope.delete": "secrets.scope.delete";
28
- "variables.set": "variables.set";
29
- "variables.delete": "variables.delete";
30
- "environments.create": "environments.create";
31
- "environments.update": "environments.update";
32
- "environments.test_access.set": "environments.test_access.set";
33
- "environments.delete": "environments.delete";
34
- "environments.bindings.set": "environments.bindings.set";
35
- "environments.source_overrides.set": "environments.source_overrides.set";
36
- "environments.source_overrides.delete": "environments.source_overrides.delete";
37
- "held_runs.approve": "held_runs.approve";
38
- "held_runs.reject": "held_runs.reject";
39
- "event_dlq.retry": "event_dlq.retry";
40
- "event_dlq.discard": "event_dlq.discard";
41
23
  "attestations.retry": "attestations.retry";
42
- "registration.disable": "registration.disable";
43
- "registration.delete": "registration.delete";
44
- "global_workflows.update": "global_workflows.update";
45
24
  "backends.sync": "backends.sync";
46
25
  "backends.sync_one": "backends.sync_one";
47
26
  "backends.test": "backends.test";
27
+ "contexts.bindings.set": "contexts.bindings.set";
28
+ "contexts.create": "contexts.create";
29
+ "contexts.delete": "contexts.delete";
30
+ "contexts.source_overrides.delete": "contexts.source_overrides.delete";
31
+ "contexts.source_overrides.set": "contexts.source_overrides.set";
32
+ "contexts.test_access.set": "contexts.test_access.set";
33
+ "contexts.update": "contexts.update";
34
+ "event_dlq.discard": "event_dlq.discard";
35
+ "event_dlq.retry": "event_dlq.retry";
48
36
  "fleet.host.declare": "fleet.host.declare";
49
37
  "fleet.host.remove": "fleet.host.remove";
38
+ "global_workflows.update": "global_workflows.update";
39
+ "held_runs.approve": "held_runs.approve";
40
+ "held_runs.reject": "held_runs.reject";
41
+ "registration.delete": "registration.delete";
42
+ "registration.disable": "registration.disable";
43
+ "secrets.delete": "secrets.delete";
44
+ "secrets.scope.create": "secrets.scope.create";
45
+ "secrets.scope.delete": "secrets.scope.delete";
46
+ "secrets.scope.rename": "secrets.scope.rename";
47
+ "secrets.set": "secrets.set";
48
+ "variables.delete": "variables.delete";
49
+ "variables.set": "variables.set";
50
50
  }>;
51
51
  export type DashboardWriteOperation = z.infer<typeof DashboardWriteOperation>;
52
52
  /** Stable list of every operation in enum-declaration order. */
53
53
  export declare const DASHBOARD_WRITE_OPERATION_VALUES: readonly DashboardWriteOperation[];
54
54
  export declare const DashboardWriteCategory: z.ZodEnum<{
55
- Secrets: "Secrets";
56
- Variables: "Variables";
57
- Environments: "Environments";
55
+ Attestations: "Attestations";
58
56
  Bindings: "Bindings";
59
- "Held runs": "Held runs";
57
+ Contexts: "Contexts";
60
58
  DLQ: "DLQ";
61
- Attestations: "Attestations";
59
+ Fleet: "Fleet";
60
+ "Held runs": "Held runs";
62
61
  Registrations: "Registrations";
62
+ Secrets: "Secrets";
63
63
  Topology: "Topology";
64
- Fleet: "Fleet";
64
+ Variables: "Variables";
65
65
  }>;
66
66
  export type DashboardWriteCategory = z.infer<typeof DashboardWriteCategory>;
67
67
  export declare const DashboardWriteSensitivity: z.ZodEnum<{
68
- plaintext: "plaintext";
69
68
  authority: "authority";
70
69
  dispatch: "dispatch";
70
+ plaintext: "plaintext";
71
71
  }>;
72
72
  export type DashboardWriteSensitivity = z.infer<typeof DashboardWriteSensitivity>;
73
73
  /**
@@ -98,87 +98,144 @@ export declare function getDashboardWriteOperationDescriptor(op: DashboardWriteO
98
98
  export declare function getDashboardWriteOperationsByCategory(category: DashboardWriteCategory): readonly DashboardWriteOperationDescriptor[];
99
99
  export declare function getDashboardWriteOperationsBySensitivity(sensitivity: DashboardWriteSensitivity): readonly DashboardWriteOperationDescriptor[];
100
100
  /**
101
- * Map of operation enabled flag. Omitted operations default to true
102
- * (permissive). The orch persists this shape verbatim as JSONB; the
103
- * Platform mirrors it in its per-org cache.
101
+ * Per-operation dashboard-write posture.
102
+ *
103
+ * - `permissive` the write is accepted and its plaintext value transits
104
+ * the hosted Platform process (today's default; the absent-key default).
105
+ * - `encrypted` — the write is accepted but the value is sealed in the
106
+ * browser to the orchestrator's published X25519 key, so the Platform
107
+ * relays only opaque ciphertext. Valid ONLY for `plaintext`-sensitivity
108
+ * operations (`secrets.set`, `variables.set`) — an operation with no
109
+ * plaintext payload has nothing to seal.
110
+ * - `disabled` — the write is refused; the operator must use the CLI.
111
+ *
112
+ * Absent from the sparse map ⇒ `permissive`.
104
113
  */
105
- export type DashboardWritePolicyMap = Partial<Record<DashboardWriteOperation, boolean>>;
114
+ export declare const DashboardWritePolicyState: z.ZodEnum<{
115
+ disabled: "disabled";
116
+ encrypted: "encrypted";
117
+ permissive: "permissive";
118
+ }>;
119
+ export type DashboardWritePolicyState = z.infer<typeof DashboardWritePolicyState>;
106
120
  /**
107
- * Validates a sparse policy map. Use this where the value is required
108
- * but may be empty (e.g. the JSONB column on the orch). For optional
109
- * fields on outer schemas, embed `dashboardWritePolicyMap` directly
110
- * with `.optional()` so omission stays as `undefined` rather than being
111
- * coerced to `{}`.
121
+ * Coerce a single stored / on-the-wire policy value to a
122
+ * {@link DashboardWritePolicyState}. Older orchestrators (and pre-migration
123
+ * JSONB rows) carry the legacy boolean shape: `true` (enabled/permissive) and
124
+ * `false` (disabled). New peers carry the enum string directly. This keeps the
125
+ * protected wire + storage surfaces backward-compatible during the deprecation
126
+ * window — a boolean is never rejected, it is translated.
112
127
  */
113
- export declare const dashboardWritePolicyMap: z.ZodRecord<z.ZodEnum<{
114
- "secrets.set": "secrets.set";
115
- "secrets.delete": "secrets.delete";
116
- "secrets.scope.create": "secrets.scope.create";
117
- "secrets.scope.rename": "secrets.scope.rename";
118
- "secrets.scope.delete": "secrets.scope.delete";
119
- "variables.set": "variables.set";
120
- "variables.delete": "variables.delete";
121
- "environments.create": "environments.create";
122
- "environments.update": "environments.update";
123
- "environments.test_access.set": "environments.test_access.set";
124
- "environments.delete": "environments.delete";
125
- "environments.bindings.set": "environments.bindings.set";
126
- "environments.source_overrides.set": "environments.source_overrides.set";
127
- "environments.source_overrides.delete": "environments.source_overrides.delete";
128
- "held_runs.approve": "held_runs.approve";
129
- "held_runs.reject": "held_runs.reject";
130
- "event_dlq.retry": "event_dlq.retry";
131
- "event_dlq.discard": "event_dlq.discard";
128
+ export declare function coerceDashboardWritePolicyValue(value: unknown): DashboardWritePolicyState;
129
+ /**
130
+ * Map of operation → posture. Omitted operations default to `permissive`.
131
+ * The orch persists this shape verbatim as JSONB; the Platform mirrors it in
132
+ * its per-org cache.
133
+ */
134
+ export type DashboardWritePolicyMap = Partial<Record<DashboardWriteOperation, DashboardWritePolicyState>>;
135
+ /**
136
+ * Validates a sparse policy map. Accepts BOTH the enum-string shape and the
137
+ * legacy boolean shape (coerced), so an older orchestrator's boolean map and a
138
+ * pre-migration JSONB row both parse. `encrypted` is rejected for any operation
139
+ * whose sensitivity is not `plaintext` (nothing to seal without a plaintext
140
+ * payload; the signing half that would cover authority/dispatch ops is a
141
+ * separate feature). Use this where the value is required but may be empty
142
+ * (e.g. the JSONB column on the orch). For optional fields on outer schemas,
143
+ * embed `dashboardWritePolicyMap` directly with `.optional()` so omission stays
144
+ * as `undefined` rather than being coerced to `{}`.
145
+ */
146
+ export declare const dashboardWritePolicyMap: z.ZodPipe<z.ZodRecord<z.ZodEnum<{
132
147
  "attestations.retry": "attestations.retry";
133
- "registration.disable": "registration.disable";
134
- "registration.delete": "registration.delete";
135
- "global_workflows.update": "global_workflows.update";
136
148
  "backends.sync": "backends.sync";
137
149
  "backends.sync_one": "backends.sync_one";
138
150
  "backends.test": "backends.test";
151
+ "contexts.bindings.set": "contexts.bindings.set";
152
+ "contexts.create": "contexts.create";
153
+ "contexts.delete": "contexts.delete";
154
+ "contexts.source_overrides.delete": "contexts.source_overrides.delete";
155
+ "contexts.source_overrides.set": "contexts.source_overrides.set";
156
+ "contexts.test_access.set": "contexts.test_access.set";
157
+ "contexts.update": "contexts.update";
158
+ "event_dlq.discard": "event_dlq.discard";
159
+ "event_dlq.retry": "event_dlq.retry";
139
160
  "fleet.host.declare": "fleet.host.declare";
140
161
  "fleet.host.remove": "fleet.host.remove";
141
- }> & z.core.$partial, z.ZodBoolean>;
142
- export declare const dashboardWritePolicyMapSchema: z.ZodDefault<z.ZodRecord<z.ZodEnum<{
143
- "secrets.set": "secrets.set";
162
+ "global_workflows.update": "global_workflows.update";
163
+ "held_runs.approve": "held_runs.approve";
164
+ "held_runs.reject": "held_runs.reject";
165
+ "registration.delete": "registration.delete";
166
+ "registration.disable": "registration.disable";
144
167
  "secrets.delete": "secrets.delete";
145
168
  "secrets.scope.create": "secrets.scope.create";
146
- "secrets.scope.rename": "secrets.scope.rename";
147
169
  "secrets.scope.delete": "secrets.scope.delete";
148
- "variables.set": "variables.set";
170
+ "secrets.scope.rename": "secrets.scope.rename";
171
+ "secrets.set": "secrets.set";
149
172
  "variables.delete": "variables.delete";
150
- "environments.create": "environments.create";
151
- "environments.update": "environments.update";
152
- "environments.test_access.set": "environments.test_access.set";
153
- "environments.delete": "environments.delete";
154
- "environments.bindings.set": "environments.bindings.set";
155
- "environments.source_overrides.set": "environments.source_overrides.set";
156
- "environments.source_overrides.delete": "environments.source_overrides.delete";
157
- "held_runs.approve": "held_runs.approve";
158
- "held_runs.reject": "held_runs.reject";
159
- "event_dlq.retry": "event_dlq.retry";
160
- "event_dlq.discard": "event_dlq.discard";
173
+ "variables.set": "variables.set";
174
+ }> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
175
+ disabled: "disabled";
176
+ encrypted: "encrypted";
177
+ permissive: "permissive";
178
+ }>]>>, z.ZodTransform<Partial<Record<"attestations.retry" | "backends.sync" | "backends.sync_one" | "backends.test" | "contexts.bindings.set" | "contexts.create" | "contexts.delete" | "contexts.source_overrides.delete" | "contexts.source_overrides.set" | "contexts.test_access.set" | "contexts.update" | "event_dlq.discard" | "event_dlq.retry" | "fleet.host.declare" | "fleet.host.remove" | "global_workflows.update" | "held_runs.approve" | "held_runs.reject" | "registration.delete" | "registration.disable" | "secrets.delete" | "secrets.scope.create" | "secrets.scope.delete" | "secrets.scope.rename" | "secrets.set" | "variables.delete" | "variables.set", "disabled" | "encrypted" | "permissive">>, Partial<Record<"attestations.retry" | "backends.sync" | "backends.sync_one" | "backends.test" | "contexts.bindings.set" | "contexts.create" | "contexts.delete" | "contexts.source_overrides.delete" | "contexts.source_overrides.set" | "contexts.test_access.set" | "contexts.update" | "event_dlq.discard" | "event_dlq.retry" | "fleet.host.declare" | "fleet.host.remove" | "global_workflows.update" | "held_runs.approve" | "held_runs.reject" | "registration.delete" | "registration.disable" | "secrets.delete" | "secrets.scope.create" | "secrets.scope.delete" | "secrets.scope.rename" | "secrets.set" | "variables.delete" | "variables.set", "disabled" | "encrypted" | "permissive" | boolean>>>>;
179
+ export declare const dashboardWritePolicyMapSchema: z.ZodDefault<z.ZodPipe<z.ZodRecord<z.ZodEnum<{
161
180
  "attestations.retry": "attestations.retry";
162
- "registration.disable": "registration.disable";
163
- "registration.delete": "registration.delete";
164
- "global_workflows.update": "global_workflows.update";
165
181
  "backends.sync": "backends.sync";
166
182
  "backends.sync_one": "backends.sync_one";
167
183
  "backends.test": "backends.test";
184
+ "contexts.bindings.set": "contexts.bindings.set";
185
+ "contexts.create": "contexts.create";
186
+ "contexts.delete": "contexts.delete";
187
+ "contexts.source_overrides.delete": "contexts.source_overrides.delete";
188
+ "contexts.source_overrides.set": "contexts.source_overrides.set";
189
+ "contexts.test_access.set": "contexts.test_access.set";
190
+ "contexts.update": "contexts.update";
191
+ "event_dlq.discard": "event_dlq.discard";
192
+ "event_dlq.retry": "event_dlq.retry";
168
193
  "fleet.host.declare": "fleet.host.declare";
169
194
  "fleet.host.remove": "fleet.host.remove";
170
- }> & z.core.$partial, z.ZodBoolean>>;
195
+ "global_workflows.update": "global_workflows.update";
196
+ "held_runs.approve": "held_runs.approve";
197
+ "held_runs.reject": "held_runs.reject";
198
+ "registration.delete": "registration.delete";
199
+ "registration.disable": "registration.disable";
200
+ "secrets.delete": "secrets.delete";
201
+ "secrets.scope.create": "secrets.scope.create";
202
+ "secrets.scope.delete": "secrets.scope.delete";
203
+ "secrets.scope.rename": "secrets.scope.rename";
204
+ "secrets.set": "secrets.set";
205
+ "variables.delete": "variables.delete";
206
+ "variables.set": "variables.set";
207
+ }> & z.core.$partial, z.ZodUnion<readonly [z.ZodBoolean, z.ZodEnum<{
208
+ disabled: "disabled";
209
+ encrypted: "encrypted";
210
+ permissive: "permissive";
211
+ }>]>>, z.ZodTransform<Partial<Record<"attestations.retry" | "backends.sync" | "backends.sync_one" | "backends.test" | "contexts.bindings.set" | "contexts.create" | "contexts.delete" | "contexts.source_overrides.delete" | "contexts.source_overrides.set" | "contexts.test_access.set" | "contexts.update" | "event_dlq.discard" | "event_dlq.retry" | "fleet.host.declare" | "fleet.host.remove" | "global_workflows.update" | "held_runs.approve" | "held_runs.reject" | "registration.delete" | "registration.disable" | "secrets.delete" | "secrets.scope.create" | "secrets.scope.delete" | "secrets.scope.rename" | "secrets.set" | "variables.delete" | "variables.set", "disabled" | "encrypted" | "permissive">>, Partial<Record<"attestations.retry" | "backends.sync" | "backends.sync_one" | "backends.test" | "contexts.bindings.set" | "contexts.create" | "contexts.delete" | "contexts.source_overrides.delete" | "contexts.source_overrides.set" | "contexts.test_access.set" | "contexts.update" | "event_dlq.discard" | "event_dlq.retry" | "fleet.host.declare" | "fleet.host.remove" | "global_workflows.update" | "held_runs.approve" | "held_runs.reject" | "registration.delete" | "registration.disable" | "secrets.delete" | "secrets.scope.create" | "secrets.scope.delete" | "secrets.scope.rename" | "secrets.set" | "variables.delete" | "variables.set", "disabled" | "encrypted" | "permissive" | boolean>>>>>;
212
+ /**
213
+ * Resolve the effective posture of an operation given a (possibly sparse)
214
+ * policy map. Treats `undefined` as the permissive default.
215
+ */
216
+ export declare function resolvePolicyState(policy: DashboardWritePolicyMap | null | undefined, op: DashboardWriteOperation): DashboardWritePolicyState;
171
217
  /**
172
- * Resolve the effective state of an operation given a (possibly sparse)
173
- * policy map. Treats `undefined` as enabled by the permissive default.
218
+ * Resolve the effective enabled state of an operation. `true` unless the
219
+ * posture is `disabled`. Convenience for the many read-only "may this write
220
+ * proceed at all?" call sites.
174
221
  */
175
222
  export declare function isDashboardWriteOperationEnabled(policy: DashboardWritePolicyMap | null | undefined, op: DashboardWriteOperation): boolean;
223
+ /** True only when the operation's posture is `encrypted`. */
224
+ export declare function isEncryptedState(policy: DashboardWritePolicyMap | null | undefined, op: DashboardWriteOperation): boolean;
176
225
  /**
177
- * Expand a (possibly sparse) policy map into the full effective state
178
- * for all 27 operations. Operations the policy doesn't mention come
179
- * back as `true` (permissive). Used by the orch HTTP admin response,
180
- * the WS `orch.capabilities` broadcast, and the dashboard's policy
181
- * page so consumers see the full picture, not the sparse storage shape.
226
+ * Expand a (possibly sparse) policy map into the full effective enabled
227
+ * boolean for all 27 operations. Operations the policy doesn't mention come
228
+ * back as `true` (permissive). Retained for existing consumers that only need
229
+ * the enabled/disabled bit; {@link resolveFullPolicyStateView} exposes the
230
+ * richer tri-state.
182
231
  */
183
232
  export declare function resolveFullPolicyView(policy: DashboardWritePolicyMap | null | undefined): Record<DashboardWriteOperation, boolean>;
233
+ /**
234
+ * Expand a (possibly sparse) policy map into the full tri-state posture for
235
+ * all 27 operations. Used by the orch HTTP admin response, the WS
236
+ * `orch.capabilities` broadcast, and the dashboard's policy page so consumers
237
+ * see the full picture (including which plaintext ops are `encrypted`), not the
238
+ * sparse storage shape.
239
+ */
240
+ export declare function resolveFullPolicyStateView(policy: DashboardWritePolicyMap | null | undefined): Record<DashboardWriteOperation, DashboardWritePolicyState>;
184
241
  //# sourceMappingURL=dashboard-write-operations.d.ts.map