@blokjs/shared 2.0.1 → 2.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 (49) hide show
  1. package/dist/AgentSessionContracts.d.ts +316 -0
  2. package/dist/AgentSessionContracts.js +331 -0
  3. package/dist/BlokError.d.ts +55 -1
  4. package/dist/BlokError.js +99 -1
  5. package/dist/CapabilityContracts.d.ts +91 -0
  6. package/dist/CapabilityContracts.js +104 -0
  7. package/dist/CapabilityManifest.d.ts +67 -0
  8. package/dist/CapabilityManifest.js +172 -0
  9. package/dist/EnforcementContracts.d.ts +61 -0
  10. package/dist/EnforcementContracts.js +17 -0
  11. package/dist/EnforcementProfileContracts.d.ts +36 -0
  12. package/dist/EnforcementProfileContracts.js +55 -0
  13. package/dist/EvidenceContracts.d.ts +884 -0
  14. package/dist/EvidenceContracts.js +237 -0
  15. package/dist/GitCapabilityContracts.d.ts +103 -0
  16. package/dist/GitCapabilityContracts.js +222 -0
  17. package/dist/GlobalError.js +5 -1
  18. package/dist/GlobalLogger.d.ts +2 -0
  19. package/dist/GlobalLogger.js +4 -0
  20. package/dist/GraphContracts.d.ts +1643 -0
  21. package/dist/GraphContracts.js +333 -0
  22. package/dist/InteractionContracts.d.ts +76 -0
  23. package/dist/InteractionContracts.js +218 -0
  24. package/dist/JoinContracts.d.ts +593 -0
  25. package/dist/JoinContracts.js +329 -0
  26. package/dist/NodeBase.d.ts +20 -0
  27. package/dist/NodeBase.js +57 -6
  28. package/dist/PermissionAlgebra.d.ts +51 -0
  29. package/dist/PermissionAlgebra.js +125 -0
  30. package/dist/PolicyContracts.d.ts +184 -0
  31. package/dist/PolicyContracts.js +1 -0
  32. package/dist/ProcessCapabilityContracts.d.ts +146 -0
  33. package/dist/ProcessCapabilityContracts.js +263 -0
  34. package/dist/RuntimeContracts.d.ts +125 -0
  35. package/dist/RuntimeContracts.js +108 -0
  36. package/dist/SecretContracts.d.ts +43 -0
  37. package/dist/SecretContracts.js +1 -0
  38. package/dist/WasiComponentContracts.d.ts +582 -0
  39. package/dist/WasiComponentContracts.js +192 -0
  40. package/dist/WorkflowBindingContracts.d.ts +1062 -0
  41. package/dist/WorkflowBindingContracts.js +339 -0
  42. package/dist/index.d.ts +46 -15
  43. package/dist/index.js +26 -3
  44. package/dist/types/LoggerContext.d.ts +7 -0
  45. package/dist/utils/Mapper.d.ts +14 -0
  46. package/dist/utils/Mapper.js +32 -0
  47. package/dist/utils/lowerRefs.d.ts +25 -1
  48. package/dist/utils/lowerRefs.js +8 -3
  49. package/package.json +3 -2
@@ -0,0 +1,339 @@
1
+ import { z } from "zod";
2
+ import { ENFORCEMENT_PROFILES, EnforcementProfileSchema } from "./EnforcementProfileContracts.js";
3
+ /** Version of the language-neutral workflow binding contract. */
4
+ export const WORKFLOW_BINDING_CONTRACT_VERSION = "1";
5
+ export const WORKFLOW_RUN_CONTRACT_VERSION = "1";
6
+ export const ENFORCEMENT_OVERRIDE_EVENT_VERSION = "1";
7
+ export const WORKFLOW_BINDING_MAX_RULES = 128;
8
+ export const WORKFLOW_BINDING_MAX_LABELS = 128;
9
+ export const WORKFLOW_BINDING_MAX_PATHS = 128;
10
+ export const WORKFLOW_BINDING_MAX_ATTRIBUTES = 64;
11
+ export const WORKFLOW_BINDING_MAX_NODES = 512;
12
+ export const WORKFLOW_BINDING_MAX_RUNTIMES = 32;
13
+ export const WORKFLOW_BINDING_MAX_SCOPE_ITEMS = 128;
14
+ export const WORKFLOW_BINDING_MAX_STRING_LENGTH = 256;
15
+ export const WORKFLOW_BINDING_MAX_CONTRACT_BYTES = 512 * 1024;
16
+ export const WORKFLOW_SOURCE_KINDS = ["registry", "repository", "workspace"];
17
+ export const WORKFLOW_RUNTIME_KINDS = [
18
+ "nodejs",
19
+ "bun",
20
+ "python3",
21
+ "go",
22
+ "java",
23
+ "kotlin",
24
+ "rust",
25
+ "php",
26
+ "csharp",
27
+ "ruby",
28
+ "swift",
29
+ "dart",
30
+ "elixir",
31
+ "docker",
32
+ "wasm",
33
+ "wasi",
34
+ ];
35
+ const IDENTIFIER = /^[A-Za-z][A-Za-z0-9._:/-]{0,127}$/;
36
+ const DIGEST = /^(sha256):[0-9a-f]{64}$|^(sha512):[0-9a-f]{128}$/i;
37
+ const PATH = /^[^\0]{1,256}$/;
38
+ const identifier = z.string().min(1).max(128).regex(IDENTIFIER, "must be a bounded identifier");
39
+ const boundedString = z.string().min(1).max(WORKFLOW_BINDING_MAX_STRING_LENGTH);
40
+ const digest = z
41
+ .string()
42
+ .max(140)
43
+ .regex(DIGEST, "must be a sha256: or sha512: digest with the complete hexadecimal length")
44
+ .transform((value) => value.toLowerCase());
45
+ const version = boundedString;
46
+ const finiteNumber = z.number().finite();
47
+ const bindingScalar = z.union([boundedString, finiteNumber, z.boolean()]);
48
+ const stringList = (limit, valueSchema = identifier) => z.array(valueSchema).min(1).max(limit);
49
+ const scalarRecord = z
50
+ .record(identifier, bindingScalar)
51
+ .refine((value) => Object.keys(value).length <= WORKFLOW_BINDING_MAX_ATTRIBUTES, `must contain at most ${WORKFLOW_BINDING_MAX_ATTRIBUTES} attributes`);
52
+ const repositoryIdentitySchema = z.object({
53
+ provider: identifier,
54
+ id: identifier,
55
+ revision: boundedString.optional(),
56
+ });
57
+ const actorIdentitySchema = z.object({
58
+ id: identifier,
59
+ kind: identifier,
60
+ });
61
+ const pathList = stringList(WORKFLOW_BINDING_MAX_PATHS, z.string().regex(PATH, "must be a bounded path"));
62
+ const labels = stringList(WORKFLOW_BINDING_MAX_LABELS);
63
+ export const WorkflowBindingInputsSchema = z.object({
64
+ repository: repositoryIdentitySchema.optional(),
65
+ taskType: boundedString.optional(),
66
+ labels: labels.optional(),
67
+ paths: pathList.optional(),
68
+ tenant: boundedString.optional(),
69
+ actor: actorIdentitySchema.optional(),
70
+ environment: boundedString.optional(),
71
+ attributes: scalarRecord.optional(),
72
+ });
73
+ export const WorkflowBindingSelectorSchema = z.object({
74
+ repository: repositoryIdentitySchema.optional(),
75
+ taskTypes: stringList(WORKFLOW_BINDING_MAX_LABELS, boundedString).optional(),
76
+ labels: labels.optional(),
77
+ paths: pathList.optional(),
78
+ tenant: boundedString.optional(),
79
+ actors: stringList(WORKFLOW_BINDING_MAX_LABELS).optional(),
80
+ environments: stringList(WORKFLOW_BINDING_MAX_LABELS, boundedString).optional(),
81
+ attributes: scalarRecord.optional(),
82
+ });
83
+ const trustedSourceSchema = z.object({
84
+ kind: z.enum(WORKFLOW_SOURCE_KINDS),
85
+ id: identifier,
86
+ digest,
87
+ trusted: z.literal(true),
88
+ });
89
+ const workflowReferenceSchema = z.object({
90
+ name: identifier,
91
+ version,
92
+ source: trustedSourceSchema,
93
+ irDigest: digest,
94
+ });
95
+ export const WorkflowBindingRuleSchema = z.object({
96
+ version: z.literal(WORKFLOW_BINDING_CONTRACT_VERSION),
97
+ id: identifier,
98
+ priority: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER),
99
+ selector: WorkflowBindingSelectorSchema,
100
+ workflow: workflowReferenceSchema,
101
+ profile: EnforcementProfileSchema,
102
+ });
103
+ export const WorkflowBindingRulesSchema = z
104
+ .array(WorkflowBindingRuleSchema)
105
+ .min(1)
106
+ .max(WORKFLOW_BINDING_MAX_RULES)
107
+ .superRefine((value, context) => {
108
+ const ids = new Set();
109
+ for (const [index, rule] of value.entries()) {
110
+ if (ids.has(rule.id)) {
111
+ context.addIssue({
112
+ code: z.ZodIssueCode.custom,
113
+ path: [index, "id"],
114
+ message: "rule ids must be unique",
115
+ });
116
+ }
117
+ ids.add(rule.id);
118
+ }
119
+ });
120
+ const pinnedNodeSchema = z.object({ id: identifier, version, digest: digest.optional() });
121
+ const pinnedRuntimeSchema = z.object({ kind: z.enum(WORKFLOW_RUNTIME_KINDS), version });
122
+ const pinnedCapabilityManifestSchema = z.object({ version, digest });
123
+ const pinnedPolicySchema = z.object({ id: identifier, version, digest: digest.optional() });
124
+ const pinnedModelSchema = z.object({ provider: identifier, id: identifier, version, configDigest: digest });
125
+ export const PinnedWorkflowRunContractSchema = z
126
+ .object({
127
+ version: z.literal(WORKFLOW_RUN_CONTRACT_VERSION),
128
+ runId: identifier,
129
+ profile: EnforcementProfileSchema,
130
+ bindingRuleId: identifier,
131
+ boundAt: boundedString,
132
+ workflow: workflowReferenceSchema,
133
+ nodes: z.array(pinnedNodeSchema).min(1).max(WORKFLOW_BINDING_MAX_NODES),
134
+ runtimes: z.array(pinnedRuntimeSchema).min(1).max(WORKFLOW_BINDING_MAX_RUNTIMES),
135
+ capabilityManifest: pinnedCapabilityManifestSchema,
136
+ policy: pinnedPolicySchema,
137
+ model: pinnedModelSchema,
138
+ })
139
+ .superRefine((value, context) => {
140
+ const nodeIds = new Set();
141
+ for (const [index, node] of value.nodes.entries()) {
142
+ if (nodeIds.has(node.id)) {
143
+ context.addIssue({
144
+ code: z.ZodIssueCode.custom,
145
+ path: ["nodes", index, "id"],
146
+ message: "node ids must be unique",
147
+ });
148
+ }
149
+ nodeIds.add(node.id);
150
+ }
151
+ const runtimeKinds = new Set();
152
+ for (const [index, runtime] of value.runtimes.entries()) {
153
+ if (runtimeKinds.has(runtime.kind)) {
154
+ context.addIssue({
155
+ code: z.ZodIssueCode.custom,
156
+ path: ["runtimes", index, "kind"],
157
+ message: "runtime kinds must be unique",
158
+ });
159
+ }
160
+ runtimeKinds.add(runtime.kind);
161
+ }
162
+ });
163
+ const scopeList = z.array(identifier).min(1).max(WORKFLOW_BINDING_MAX_SCOPE_ITEMS);
164
+ export const EnforcementOverrideScopeSchema = z
165
+ .object({
166
+ stepIds: scopeList.optional(),
167
+ transitionIds: scopeList.optional(),
168
+ capabilityIds: scopeList.optional(),
169
+ })
170
+ .superRefine((value, context) => {
171
+ if (value.stepIds === undefined && value.transitionIds === undefined && value.capabilityIds === undefined) {
172
+ context.addIssue({
173
+ code: z.ZodIssueCode.custom,
174
+ message: "scope must name at least one step, transition, or capability",
175
+ });
176
+ }
177
+ });
178
+ const overrideAuthorizationSchema = z.object({
179
+ method: z.literal("durable-interaction"),
180
+ interactionId: identifier,
181
+ decisionId: identifier,
182
+ status: z.literal("answered"),
183
+ });
184
+ export const EnforcementOverrideEventSchema = z.object({
185
+ version: z.literal(ENFORCEMENT_OVERRIDE_EVENT_VERSION),
186
+ eventType: z.literal("enforcement.override"),
187
+ eventId: identifier,
188
+ timestamp: boundedString,
189
+ runId: identifier,
190
+ profile: z.literal("guided"),
191
+ bindingRuleId: identifier,
192
+ requestedBy: actorIdentitySchema.optional(),
193
+ authorizedBy: actorIdentitySchema,
194
+ authorization: overrideAuthorizationSchema,
195
+ reasonCode: identifier,
196
+ reason: boundedString.optional(),
197
+ scope: EnforcementOverrideScopeSchema,
198
+ expiresAt: boundedString.optional(),
199
+ });
200
+ export class WorkflowBindingContractError extends Error {
201
+ issues;
202
+ constructor(issues) {
203
+ super(`Invalid workflow binding contract: ${issues.join("; ")}`);
204
+ this.name = "WorkflowBindingContractError";
205
+ this.issues = [...issues];
206
+ }
207
+ }
208
+ function sortUnique(values) {
209
+ return [...new Set(values)].sort((left, right) => (left < right ? -1 : left > right ? 1 : 0));
210
+ }
211
+ function normalizeAttributes(value) {
212
+ const result = {};
213
+ for (const key of Object.keys(value).sort((left, right) => (left < right ? -1 : left > right ? 1 : 0))) {
214
+ result[key] = value[key];
215
+ }
216
+ return result;
217
+ }
218
+ function normalizeRepository(value) {
219
+ return {
220
+ provider: value.provider,
221
+ id: value.id,
222
+ ...(value.revision === undefined ? {} : { revision: value.revision }),
223
+ };
224
+ }
225
+ function normalizeInputs(value) {
226
+ return {
227
+ ...(value.repository ? { repository: normalizeRepository(value.repository) } : {}),
228
+ ...(value.taskType === undefined ? {} : { taskType: value.taskType }),
229
+ ...(value.labels ? { labels: sortUnique(value.labels) } : {}),
230
+ ...(value.paths ? { paths: sortUnique(value.paths) } : {}),
231
+ ...(value.tenant === undefined ? {} : { tenant: value.tenant }),
232
+ ...(value.actor ? { actor: { ...value.actor } } : {}),
233
+ ...(value.environment === undefined ? {} : { environment: value.environment }),
234
+ ...(value.attributes ? { attributes: normalizeAttributes(value.attributes) } : {}),
235
+ };
236
+ }
237
+ function normalizeSelector(value) {
238
+ return {
239
+ ...(value.repository ? { repository: normalizeRepository(value.repository) } : {}),
240
+ ...(value.taskTypes ? { taskTypes: sortUnique(value.taskTypes) } : {}),
241
+ ...(value.labels ? { labels: sortUnique(value.labels) } : {}),
242
+ ...(value.paths ? { paths: sortUnique(value.paths) } : {}),
243
+ ...(value.tenant === undefined ? {} : { tenant: value.tenant }),
244
+ ...(value.actors ? { actors: sortUnique(value.actors) } : {}),
245
+ ...(value.environments ? { environments: sortUnique(value.environments) } : {}),
246
+ ...(value.attributes ? { attributes: normalizeAttributes(value.attributes) } : {}),
247
+ };
248
+ }
249
+ function parseSchema(schema, value, label) {
250
+ const result = schema.safeParse(value);
251
+ if (!result.success) {
252
+ throw new WorkflowBindingContractError(result.error.issues.map((issue) => `${label}${issue.path.length > 0 ? `.${issue.path.join(".")}` : ""} ${issue.message}`));
253
+ }
254
+ return result.data;
255
+ }
256
+ function normalizeScope(value) {
257
+ return {
258
+ ...(value.stepIds ? { stepIds: sortUnique(value.stepIds) } : {}),
259
+ ...(value.transitionIds ? { transitionIds: sortUnique(value.transitionIds) } : {}),
260
+ ...(value.capabilityIds ? { capabilityIds: sortUnique(value.capabilityIds) } : {}),
261
+ };
262
+ }
263
+ function assertContractSize(value, label) {
264
+ const serialized = JSON.stringify(value);
265
+ if (new TextEncoder().encode(serialized).byteLength > WORKFLOW_BINDING_MAX_CONTRACT_BYTES) {
266
+ throw new WorkflowBindingContractError([`${label} exceeds ${WORKFLOW_BINDING_MAX_CONTRACT_BYTES} bytes`]);
267
+ }
268
+ return value;
269
+ }
270
+ function immutable(value) {
271
+ const snapshot = structuredClone(value);
272
+ const freeze = (item) => {
273
+ if (item === null || typeof item !== "object" || Object.isFrozen(item))
274
+ return;
275
+ for (const child of Object.values(item))
276
+ freeze(child);
277
+ Object.freeze(item);
278
+ };
279
+ freeze(snapshot);
280
+ return snapshot;
281
+ }
282
+ /** Parse and canonicalize caller-controlled binding facts. */
283
+ export function parseWorkflowBindingInputs(value) {
284
+ return immutable(normalizeInputs(parseSchema(WorkflowBindingInputsSchema, value, "workflow binding inputs")));
285
+ }
286
+ export function parseWorkflowBindingSelector(value) {
287
+ return immutable(normalizeSelector(parseSchema(WorkflowBindingSelectorSchema, value, "workflow binding selector")));
288
+ }
289
+ export function parseWorkflowBindingRule(value) {
290
+ const parsed = parseSchema(WorkflowBindingRuleSchema, value, "workflow binding rule");
291
+ return immutable(assertContractSize({
292
+ ...parsed,
293
+ selector: normalizeSelector(parsed.selector),
294
+ }, "workflow binding rule"));
295
+ }
296
+ export function parseWorkflowBindingRules(value) {
297
+ const parsed = parseSchema(WorkflowBindingRulesSchema, value, "workflow binding rules");
298
+ return immutable(assertContractSize(parsed
299
+ .map((rule) => ({ ...rule, selector: normalizeSelector(rule.selector) }))
300
+ .sort((left, right) => left.priority !== right.priority
301
+ ? right.priority - left.priority
302
+ : left.id < right.id
303
+ ? -1
304
+ : left.id > right.id
305
+ ? 1
306
+ : 0), "workflow binding rules"));
307
+ }
308
+ /** Parse a complete run contract; the returned value is safe to persist as a pin. */
309
+ export function parsePinnedWorkflowRunContract(value) {
310
+ const parsed = parseSchema(PinnedWorkflowRunContractSchema, value, "pinned workflow run contract");
311
+ return immutable(assertContractSize({
312
+ ...parsed,
313
+ nodes: [...parsed.nodes].sort((left, right) => (left.id < right.id ? -1 : left.id > right.id ? 1 : 0)),
314
+ runtimes: [...parsed.runtimes].sort((left, right) => left.kind < right.kind ? -1 : left.kind > right.kind ? 1 : 0),
315
+ }, "pinned workflow run contract"));
316
+ }
317
+ /** Parse a guided authorization event; strict/advisory bypass events are invalid. */
318
+ export function parseEnforcementOverrideEvent(value) {
319
+ const parsed = parseSchema(EnforcementOverrideEventSchema, value, "enforcement override event");
320
+ return immutable(assertContractSize({ ...parsed, scope: normalizeScope(parsed.scope) }, "enforcement override event"));
321
+ }
322
+ export function serializeWorkflowBindingInputs(value) {
323
+ return JSON.stringify(parseWorkflowBindingInputs(value));
324
+ }
325
+ export function serializeWorkflowBindingRule(value) {
326
+ return JSON.stringify(parseWorkflowBindingRule(value));
327
+ }
328
+ export function serializeWorkflowBindingRules(value) {
329
+ return JSON.stringify(parseWorkflowBindingRules(value));
330
+ }
331
+ export function serializePinnedWorkflowRunContract(value) {
332
+ return JSON.stringify(parsePinnedWorkflowRunContract(value));
333
+ }
334
+ export function serializeEnforcementOverrideEvent(value) {
335
+ return JSON.stringify(parseEnforcementOverrideEvent(value));
336
+ }
337
+ export function isEnforcementProfile(value) {
338
+ return typeof value === "string" && ENFORCEMENT_PROFILES.includes(value);
339
+ }
package/dist/index.d.ts CHANGED
@@ -6,30 +6,61 @@
6
6
  * published as a back-compat alias — existing imports keep working unchanged —
7
7
  * but new code should import from `@blokjs/core`.
8
8
  */
9
- import BlokError, { type BlokErrorOpts, DEFAULT_HTTP_STATUS, DEFAULT_RETRYABLE, ErrorCategory, ErrorSeverity, isNonRetryableValidationError, type NodeErrorPayload, WORKFLOW_INPUT_VALIDATION } from "./BlokError.js";
9
+ import BlokError, { type BlokErrorOpts, DEFAULT_HTTP_STATUS, DEFAULT_RETRYABLE, ErrorCategory, ErrorSeverity, isNonRetryableError, isNonRetryableStepError, isNonRetryableValidationError, markNonRetryableStepError, type NodeErrorPayload, WORKFLOW_INPUT_VALIDATION, WorkflowInputValidationError, type WorkflowInputValidationInfo, type WorkflowInputValidationIssue } from "./BlokError.js";
10
+ import { CAPABILITY_CLASSIFICATIONS, CAPABILITY_DETERMINISM, CAPABILITY_EFFECTS, CAPABILITY_IDEMPOTENCY, CAPABILITY_MANIFEST_VERSION, CAPABILITY_MATURITY, type CapabilityClassification, type CapabilityDeterminism, type CapabilityEffect, type CapabilityIdempotency, type CapabilityManifestAssessment, CapabilityManifestError, type CapabilityManifestStatus, type CapabilityManifestV1, type CapabilityMaturity, type CapabilityResourceBounds, assessCapabilityManifest, parseCapabilityManifest, requireAgentEligibleManifest, serializeCapabilityManifest } from "./CapabilityManifest.js";
11
+ export { WASI_COMPONENT_CAPABILITIES, WASI_COMPONENT_CONTRACT_VERSION, WASI_COMPONENT_MANIFEST_VERSION, WASI_COMPONENT_MEDIA_TYPE, WASI_COMPONENT_WASI_VERSION, WASI_COMPONENT_WIT_PACKAGE, WASI_COMPONENT_WIT_VERSION, WASI_COMPONENT_WIT_WORLD, WasiComponentArtifactSchema, WasiComponentErrorSchema, WasiComponentExecutionRequestSchema, WasiComponentExecutionResponseSchema, WasiComponentLimitsSchema, WasiComponentManifestSchema, WasiComponentNodeSchema, WasiComponentWorldSchema, parseWasiComponentManifest, serializeWasiComponentManifest, } from "./WasiComponentContracts.js";
12
+ export type { WasiComponentArtifact, WasiComponentExecutionRequest, WasiComponentExecutionResponse, WasiComponentLimits, WasiComponentManifestV1, WasiComponentNode, WasiComponentReadiness, WasiComponentWorld, } from "./WasiComponentContracts.js";
10
13
  import GlobalError from "./GlobalError.js";
11
14
  import GlobalLogger from "./GlobalLogger.js";
12
15
  import { Metrics, type MetricsType } from "./Metrics.js";
13
16
  import NodeBase from "./NodeBase.js";
17
+ export { JAVASCRIPT_RUNTIMES, JavaScriptRuntimeSchema, JavaScriptRuntimeSelectionSchema, PackageManagerSchema, PACKAGE_MANAGERS, RUNTIME_KINDS, RuntimeCapabilityManifestSchema, RuntimeKindInputSchema, RuntimeKindSchema, normalizeJavaScriptRuntime, normalizeRuntimeKind, runtimeKindForJavaScriptRuntime, } from "./RuntimeContracts.js";
18
+ export type { JavaScriptRuntime, JavaScriptRuntimeSelection, PackageManager, RuntimeCapabilityManifest, RuntimeDiagnostic, RuntimeKind, RuntimeKindInput, RuntimeNormalization, } from "./RuntimeContracts.js";
19
+ export { CapabilityAuthorityError, CapabilityAuthoritySchema, CapabilityFragmentValueSchema, assertCapabilityAuthoritySubset, intersectCapabilityAuthorities, isCapabilityAuthoritySubset, parseCapabilityAuthority, } from "./PermissionAlgebra.js";
20
+ export type { CapabilityAuthority } from "./PermissionAlgebra.js";
14
21
  import Trigger from "./Trigger.js";
15
- import ConfigContext from "./types/ConfigContext.js";
22
+ import type ConfigContext from "./types/ConfigContext.js";
16
23
  import type ConnectionContext from "./types/ConnectionContext.js";
17
- import Context from "./types/Context.js";
18
- import EnvContext from "./types/EnvContext.js";
19
- import ErrorContext from "./types/ErrorContext.js";
20
- import FunctionContext from "./types/FunctionContext.js";
21
- import LoggerContext from "./types/LoggerContext.js";
22
- import NodeConfigContext from "./types/NodeConfigContext.js";
23
- import RequestContext from "./types/RequestContext.js";
24
+ import type Context from "./types/Context.js";
25
+ import type EnvContext from "./types/EnvContext.js";
26
+ import type ErrorContext from "./types/ErrorContext.js";
27
+ import type FunctionContext from "./types/FunctionContext.js";
28
+ import type LoggerContext from "./types/LoggerContext.js";
29
+ import type NodeConfigContext from "./types/NodeConfigContext.js";
30
+ import type RequestContext from "./types/RequestContext.js";
24
31
  import { RESPOND_BRAND, type RespondEnvelope, isRespondEnvelope } from "./types/RespondEnvelope.js";
25
- import ResponseContext from "./types/ResponseContext.js";
26
- import StateContext from "./types/StateContext.js";
27
- import Step from "./types/Step.js";
32
+ import type ResponseContext from "./types/ResponseContext.js";
33
+ import type StateContext from "./types/StateContext.js";
34
+ import type Step from "./types/Step.js";
28
35
  import type StreamContext from "./types/StreamContext.js";
29
- import VarsContext from "./types/VarsContext.js";
36
+ import type VarsContext from "./types/VarsContext.js";
30
37
  import mapper from "./utils/Mapper.js";
31
38
  import { MapperResolutionError } from "./utils/MapperResolutionError.js";
32
39
  import MemoryUsage from "./utils/MemoryUsage.js";
33
40
  import { NamedMissingStateError } from "./utils/NamedMissingStateError.js";
34
- import { type StructuralRef, lowerRefs } from "./utils/lowerRefs.js";
35
- export { NodeBase, Context, RequestContext, ResponseContext, RESPOND_BRAND, type RespondEnvelope, isRespondEnvelope, EnvContext, ErrorContext, LoggerContext, ConfigContext, type ConnectionContext, type StreamContext, Trigger, NodeConfigContext, FunctionContext, StateContext, VarsContext, Step, GlobalLogger, GlobalError, BlokError, type BlokErrorOpts, type NodeErrorPayload, ErrorCategory, ErrorSeverity, DEFAULT_HTTP_STATUS, DEFAULT_RETRYABLE, isNonRetryableValidationError, WORKFLOW_INPUT_VALIDATION, Metrics, MemoryUsage, type MetricsType, mapper, MapperResolutionError, NamedMissingStateError, lowerRefs, type StructuralRef, };
41
+ import { type StructuralRef, type StructuralTpl, isStructuralRef, isStructuralTpl, lowerRefs } from "./utils/lowerRefs.js";
42
+ export { AGENT_CAPABILITY_CONTRACT_VERSION, CAPABILITY_MAX_ID_LENGTH, CAPABILITY_MAX_LIST_ITEMS, CAPABILITY_MAX_OUTPUT_CHUNK_BYTES, CAPABILITY_MAX_PATH_LENGTH, CapabilityContractError, CapabilityOwnerSchema, WorkspacePathRefSchema, assertAuthorized, assertOwned, capabilityScope, parseCapabilityAuthorization, parseCapabilityOwner, parseWorkspacePathRef, } from "./CapabilityContracts.js";
43
+ export type { CapabilityAuthorizationPort, CapabilityOwner, CapabilityRequestContext, WorkspacePathRef, } from "./CapabilityContracts.js";
44
+ export { GIT_CAPABILITY_CONTRACT_VERSION, GIT_DESTRUCTIVE_OPERATIONS, GIT_OPERATIONS, GIT_MAX_BRANCH_NAME_LENGTH, GIT_MAX_CHANGED_FILES, assertGitOperationAllowed, assertGitOwner, assertGitPolicyAllowed, gitCapabilityScope, parseGitDiffEvidence, parseGitDirtyState, parseGitOperation, parseGitRepositoryIdentity, parseGitWorktreeCreateRequest, parseGitWorktreeIdentity, workspacePathForGit, } from "./GitCapabilityContracts.js";
45
+ export type { GitCapability, GitCapabilityRequest, GitChangeStatus, GitDiffEvidence, GitDiffFile, GitDirtyState, GitDestructiveOperation, GitOperation, GitRepositoryIdentity, GitRevisionIdentity, GitWorktreeCreateRequest, GitWorktreeCleanupRequest, GitWorktreeIdentity, } from "./GitCapabilityContracts.js";
46
+ export { PROCESS_CAPABILITY_CONTRACT_VERSION, PROCESS_CAPABILITY_IDS, PROCESS_DEFAULT_LIMITS, assertBoundedOutputChunk, assertProcessOwner, assertProcessPolicyAllowed, assertProcessStartResult, parseProcessCancellationRequest, parseProcessHandle, parseProcessOutput, parseProcessOutputChunk, parseProcessOrphanCleanupRequest, parseProcessResult, parseProcessSpec, processCapabilityId, processCapabilityScope, processWorkspaceCwd, } from "./ProcessCapabilityContracts.js";
47
+ export type { ExecutableProcessSpec, NetworkDestination, ProcessCapability, ProcessCapabilityId, ProcessCancellationRequest, ProcessEnvironmentBinding, ProcessHandle, ProcessHandleRequest, ProcessLifecycleStatus, ProcessNetworkPolicy, ProcessOrphanCleanupRequest, ProcessOutputChunk, ProcessOutputSnapshot, ProcessResourceLimits, ProcessResult, ProcessStartResult, ProcessSpec, ProcessSpecBase, ProcessStartRequest, ShellStringProcessSpec, } from "./ProcessCapabilityContracts.js";
48
+ export type { AuditEventBase, AuditRedactionState, AuditSink, ExecutionOrigin, InteractionAttribution, InteractionRequest, InteractionSuspension, InteractionSuspensionPort, PolicyContext, PolicyDecision, PolicyDecisionKind, PolicyEvaluationResult, PolicyLayer, PolicyLayerName, PolicyProvider, PolicyRequest, PolicyRuleMatch, PostExecutionAuditEvent, PreExecutionAuditEvent, PrincipalIdentity, RequestedCapabilityScope, SandboxAttestation, SessionIdentity, StepIdentity, TurnIdentity, WorkflowIdentity, } from "./PolicyContracts.js";
49
+ export type { AgentCompletionContract, AgentStepContract, ApprovalContract, AssertionGateContract, EvidenceGateContract, EvidenceGateRequirement, OutputTrust, TrustedEvidence, } from "./EnforcementContracts.js";
50
+ export { ENFORCEMENT_CONTRACT_VERSION, EnforcementViolationError, } from "./EnforcementContracts.js";
51
+ export type { EnforcementProfile, EnforcementProfileContract, EnforcementProfileSemantics, } from "./EnforcementProfileContracts.js";
52
+ export { ENFORCEMENT_PROFILE_CONTRACT_VERSION, ENFORCEMENT_PROFILE_SEMANTICS, ENFORCEMENT_PROFILES, EnforcementProfileContractError, EnforcementProfileContractSchema, EnforcementProfileSchema, enforcementProfileSemantics, parseEnforcementProfile, parseEnforcementProfileContract, serializeEnforcementProfileContract, } from "./EnforcementProfileContracts.js";
53
+ export type { BindingActorIdentity, BindingScalar, EnforcementOverrideAuthorization, EnforcementOverrideEvent, EnforcementOverrideScope, PinnedCapabilityManifestIdentity, PinnedModelConfigurationIdentity, PinnedNodeIdentity, PinnedPolicyIdentity, PinnedRuntimeIdentity, PinnedWorkflowRunContract, RepositoryIdentity, TrustedWorkflowSource, WorkflowBindingInputs, WorkflowBindingRule, WorkflowBindingRules, WorkflowBindingSelector, WorkflowReference, WorkflowRuntimeKind, WorkflowSourceKind, } from "./WorkflowBindingContracts.js";
54
+ export { ENFORCEMENT_OVERRIDE_EVENT_VERSION, WORKFLOW_BINDING_CONTRACT_VERSION, WORKFLOW_BINDING_MAX_ATTRIBUTES, WORKFLOW_BINDING_MAX_CONTRACT_BYTES, WORKFLOW_BINDING_MAX_LABELS, WORKFLOW_BINDING_MAX_NODES, WORKFLOW_BINDING_MAX_PATHS, WORKFLOW_BINDING_MAX_RULES, WORKFLOW_BINDING_MAX_SCOPE_ITEMS, WORKFLOW_BINDING_MAX_STRING_LENGTH, WORKFLOW_BINDING_MAX_RUNTIMES, WORKFLOW_RUN_CONTRACT_VERSION, EnforcementOverrideEventSchema, EnforcementOverrideScopeSchema, PinnedWorkflowRunContractSchema, WorkflowBindingContractError, WorkflowBindingInputsSchema, WorkflowBindingRuleSchema, WorkflowBindingRulesSchema, WorkflowBindingSelectorSchema, isEnforcementProfile, parseEnforcementOverrideEvent, parsePinnedWorkflowRunContract, parseWorkflowBindingInputs, parseWorkflowBindingRule, parseWorkflowBindingRules, parseWorkflowBindingSelector, serializeEnforcementOverrideEvent, serializePinnedWorkflowRunContract, serializeWorkflowBindingInputs, serializeWorkflowBindingRule, serializeWorkflowBindingRules, WORKFLOW_RUNTIME_KINDS, WORKFLOW_SOURCE_KINDS, } from "./WorkflowBindingContracts.js";
55
+ export type { SecretLease, SecretRef, SecretRequest, SecretResolutionAuditEvent, SecretResolutionFailure, SecretResolver, } from "./SecretContracts.js";
56
+ export type { InteractionPayload, InteractionAnswer, InteractionRecord, InteractionStatus, InteractionStore, } from "./InteractionContracts.js";
57
+ export type { ApprovalRequirement, ArtifactIdentity, ArtifactVersionIdentity, CompletionContract, CompletionRequirement, EvidenceArtifactIdentity, EvidenceCheck, EvidenceCheckOutcome, EvidenceKind, EvidencePayload, EvidenceProducerIdentity, EvidenceProducerKind, EvidenceProvenanceIdentity, EvidenceRecord, EvidenceRequirement, EvidenceVerificationMethod, EvidenceVerificationResult, EvidenceVerificationStatus, EvidenceVerifierIdentity, EvidenceVerifierKind, } from "./EvidenceContracts.js";
58
+ export { ApprovalRequirementSchema, ArtifactIdentitySchema, ArtifactVersionIdentitySchema, CompletionContractSchema, CompletionRequirementSchema, EvidenceCheckSchema, EvidenceContractError, EvidenceProducerIdentitySchema, EvidenceProvenanceIdentitySchema, EvidenceRecordSchema, EvidenceRequirementSchema, EvidencePayloadSchema, EvidenceTraceIdentitySchema, EvidenceVerificationResultSchema, EvidenceVerifierIdentitySchema, EVIDENCE_CHECK_OUTCOMES, EVIDENCE_CONTRACT_VERSION, EVIDENCE_MAX_CHECKS, EVIDENCE_MAX_PAYLOAD_DEPTH, EVIDENCE_MAX_PAYLOAD_ITEMS, EVIDENCE_MAX_RECORD_BYTES, EVIDENCE_MAX_REQUIREMENTS, EVIDENCE_MAX_STRING_LENGTH, EVIDENCE_PRODUCER_KINDS, EVIDENCE_VERIFICATION_METHODS, EVIDENCE_VERIFICATION_STATUSES, EVIDENCE_VERIFIER_KINDS, parseCompletionContract, parseEvidencePayload, parseEvidenceRecord, rejectModelEvidence, serializeCompletionContract, serializeEvidenceRecord, } from "./EvidenceContracts.js";
59
+ export type { EffectRetryEvidence, EffectRetryEvidenceOutcome, JoinBranchObligation, JoinBranchResult, JoinBranchStatus, JoinContract, JoinJsonSchema, JoinOutputDeclaration, JoinResult, RetryResumeEffect, RetryResumeIdempotencyContract, RetryResumeIdempotencyMode, } from "./JoinContracts.js";
60
+ export { EffectRetryEvidenceSchema, JOIN_CONTRACT_VERSION, JOIN_MAX_BRANCHES, JOIN_MAX_CONTRACT_BYTES, JOIN_MAX_OUTPUTS, JOIN_MAX_SCHEMA_DEPTH, JoinBranchObligationSchema, JoinContractError, JoinContractSchema, JoinOutputDeclarationSchema, RETRY_RESUME_IDEMPOTENCY_CONTRACT_VERSION, RETRY_RESUME_MAX_ATTEMPTS, RETRY_RESUME_MAX_EVIDENCE, RETRY_RESUME_MAX_RESUMES, RetryResumeContractError, RetryResumeIdempotencyContractSchema, assertEffectRetryEvidence, assertJoinSatisfied, parseEffectRetryEvidence, parseJoinContract, parseRetryResumeIdempotencyContract, serializeJoinContract, } from "./JoinContracts.js";
61
+ export { INTERACTION_MAX_LINEAGE_DEPTH, INTERACTION_MAX_LINEAGE_PATH, INTERACTION_MAX_PAYLOAD_BYTES, INTERACTION_MAX_PAYLOAD_DEPTH, INTERACTION_MAX_PAYLOAD_ITEMS, INTERACTION_MAX_STRING_LENGTH, INTERACTION_REDACTED_VALUE, INTERACTION_VERSION, InteractionContractError, fingerprintInteractionPayload, immutableInteractionSnapshot, parseInteractionAnswer, parseInteractionPayload, redactInteractionDecision, redactInteractionPayload, redactInteractionRequest, redactInteractionString, } from "./InteractionContracts.js";
62
+ export type { AuthoritativeSourceReadRequest, AuthoritativeSourceReader, AuthoritativeSourceSnapshot, GraphError, GraphErrorCategory, GraphFreshness, GraphFreshnessState, GraphFreshnessRequest, GraphImpactRequest, GraphIndexFile, GraphIndexRequest, GraphIndexResponse, GraphIndexSource, GraphLocation, GraphProvenance, GraphProvider, GraphQueryOptions, GraphQueryResponse, GraphRange, GraphRelation, GraphRelationDirection, GraphRelationKind, GraphRelationRequest, GraphRepositoryIdentity, GraphResultState, GraphResultStatus, GraphScope, GraphSearchHit, GraphSearchKind, GraphSearchRequest, GraphSymbol, GraphSymbolKind, GraphSymbolRequest, GraphWorktreeIdentity, } from "./GraphContracts.js";
63
+ export { GRAPH_CONTRACT_VERSION, GRAPH_FRESHNESS_STATES, GRAPH_INDEX_SOURCES, GRAPH_MAX_DEPTH, GRAPH_MAX_FILES_PER_INDEX, GRAPH_MAX_INDEX_BYTES, GRAPH_MAX_ITEMS, GRAPH_MAX_PATH_LENGTH, GRAPH_MAX_RESPONSE_BYTES, GRAPH_MAX_STRING_LENGTH, GRAPH_RELATION_DIRECTIONS, GRAPH_RELATION_KINDS, GRAPH_RESULT_STATES, GRAPH_SEARCH_KINDS, GRAPH_SYMBOL_KINDS, AuthoritativeSourceReadRequestSchema, AuthoritativeSourceSnapshotSchema, GraphContractError, GraphErrorSchema, GraphFreshnessSchema, GraphFreshnessRequestSchema, GraphImpactRequestSchema, GraphIndexFileSchema, GraphIndexRequestSchema, GraphLocationSchema, GraphProvenanceSchema, GraphRangeSchema, GraphRelationSchema, GraphRelationRequestSchema, GraphRepositoryIdentitySchema, GraphResultStatusSchema, GraphScopeSchema, GraphSearchHitSchema, GraphSearchRequestSchema, GraphSymbolSchema, GraphSymbolRequestSchema, GraphWorktreeIdentitySchema, parseAuthoritativeSourceReadRequest, parseGraphImpactRequest, parseGraphFreshnessRequest, parseGraphIndexRequest, parseGraphIndexResponse, parseGraphQueryResponse, parseGraphRelationRequest, parseGraphScope, parseGraphSearchRequest, parseGraphSymbolRequest, serializeGraphContract, } from "./GraphContracts.js";
64
+ export type { AgentSessionActorKind, AgentSessionEvent, AgentSessionEventKind, AgentSessionEventVisibility, SessionEvent, AgentSessionEventKind as SessionEventKind, AgentSessionEventVisibility as SessionEventVisibility, AgentSessionActorKind as SessionActorKind, SessionActor, SessionJsonValue, SessionEventInput, SessionCursor, SessionEventPage, CorruptSessionTail, SessionSnapshot, SessionFork, SessionMessage, SessionState, SessionFoldOptions, AppendSessionEventsInput, AppendSessionEventsResult, SessionRetentionOptions, SessionStore, ArtifactReference, } from "./AgentSessionContracts.js";
65
+ export { AGENT_SESSION_CONTRACT_VERSION, AGENT_SESSION_SCHEMA_VERSION, AGENT_SESSION_MAX_EVENT_BYTES, AGENT_SESSION_MAX_PAYLOAD_DEPTH, AGENT_SESSION_MAX_PAYLOAD_ITEMS, AGENT_SESSION_MAX_STRING_LENGTH, AGENT_SESSION_MAX_EVENTS_PER_APPEND, AGENT_SESSION_MAX_PAGE_SIZE, AGENT_SESSION_MAX_SNAPSHOT_BYTES, AGENT_SESSION_EVENT_KINDS, AgentSessionContractError, SessionConcurrencyError, SessionCorruptTailError, ArtifactReferenceSchema, SessionJsonValueSchema, SessionActorSchema, SessionEventSchema, SessionEventInputSchema, parseArtifactReference, parseSessionEvent, parseSessionEventInput, serializeSessionEvent, parseSessionCursor, cursorForSequence, immutableSessionSnapshot, fingerprintSessionEvent, foldSessionEvents, } from "./AgentSessionContracts.js";
66
+ export { CAPABILITY_MANIFEST_VERSION, CAPABILITY_EFFECTS, CAPABILITY_CLASSIFICATIONS, CAPABILITY_DETERMINISM, CAPABILITY_IDEMPOTENCY, CAPABILITY_MATURITY, CapabilityManifestError, parseCapabilityManifest, serializeCapabilityManifest, assessCapabilityManifest, requireAgentEligibleManifest, type CapabilityEffect, type CapabilityClassification, type CapabilityDeterminism, type CapabilityIdempotency, type CapabilityMaturity, type CapabilityResourceBounds, type CapabilityManifestV1, type CapabilityManifestStatus, type CapabilityManifestAssessment, NodeBase, type Context, type RequestContext, type ResponseContext, RESPOND_BRAND, type RespondEnvelope, isRespondEnvelope, type EnvContext, type ErrorContext, type LoggerContext, type ConfigContext, type ConnectionContext, type StreamContext, Trigger, type NodeConfigContext, type FunctionContext, type StateContext, type VarsContext, type Step, GlobalLogger, GlobalError, BlokError, type BlokErrorOpts, type NodeErrorPayload, ErrorCategory, ErrorSeverity, DEFAULT_HTTP_STATUS, DEFAULT_RETRYABLE, isNonRetryableValidationError, isNonRetryableError, markNonRetryableStepError, isNonRetryableStepError, WORKFLOW_INPUT_VALIDATION, WorkflowInputValidationError, type WorkflowInputValidationInfo, type WorkflowInputValidationIssue, Metrics, MemoryUsage, type MetricsType, mapper, MapperResolutionError, NamedMissingStateError, lowerRefs, isStructuralRef, isStructuralTpl, type StructuralRef, type StructuralTpl, };
package/dist/index.js CHANGED
@@ -6,16 +6,39 @@
6
6
  * published as a back-compat alias — existing imports keep working unchanged —
7
7
  * but new code should import from `@blokjs/core`.
8
8
  */
9
- import BlokError, { DEFAULT_HTTP_STATUS, DEFAULT_RETRYABLE, ErrorCategory, ErrorSeverity, isNonRetryableValidationError, WORKFLOW_INPUT_VALIDATION, } from "./BlokError.js";
9
+ import BlokError, { DEFAULT_HTTP_STATUS, DEFAULT_RETRYABLE, ErrorCategory, ErrorSeverity, isNonRetryableError, isNonRetryableStepError, isNonRetryableValidationError, markNonRetryableStepError, WORKFLOW_INPUT_VALIDATION, WorkflowInputValidationError, } from "./BlokError.js";
10
+ import { CAPABILITY_CLASSIFICATIONS, CAPABILITY_DETERMINISM, CAPABILITY_EFFECTS, CAPABILITY_IDEMPOTENCY, CAPABILITY_MANIFEST_VERSION, CAPABILITY_MATURITY, CapabilityManifestError, assessCapabilityManifest, parseCapabilityManifest, requireAgentEligibleManifest, serializeCapabilityManifest, } from "./CapabilityManifest.js";
11
+ export { WASI_COMPONENT_CAPABILITIES, WASI_COMPONENT_CONTRACT_VERSION, WASI_COMPONENT_MANIFEST_VERSION, WASI_COMPONENT_MEDIA_TYPE, WASI_COMPONENT_WASI_VERSION, WASI_COMPONENT_WIT_PACKAGE, WASI_COMPONENT_WIT_VERSION, WASI_COMPONENT_WIT_WORLD, WasiComponentArtifactSchema, WasiComponentErrorSchema, WasiComponentExecutionRequestSchema, WasiComponentExecutionResponseSchema, WasiComponentLimitsSchema, WasiComponentManifestSchema, WasiComponentNodeSchema, WasiComponentWorldSchema, parseWasiComponentManifest, serializeWasiComponentManifest, } from "./WasiComponentContracts.js";
10
12
  import GlobalError from "./GlobalError.js";
11
13
  import GlobalLogger from "./GlobalLogger.js";
12
14
  import { Metrics } from "./Metrics.js";
13
15
  import NodeBase from "./NodeBase.js";
16
+ export { JAVASCRIPT_RUNTIMES, JavaScriptRuntimeSchema, JavaScriptRuntimeSelectionSchema, PackageManagerSchema, PACKAGE_MANAGERS, RUNTIME_KINDS, RuntimeCapabilityManifestSchema, RuntimeKindInputSchema, RuntimeKindSchema, normalizeJavaScriptRuntime, normalizeRuntimeKind, runtimeKindForJavaScriptRuntime, } from "./RuntimeContracts.js";
17
+ export { CapabilityAuthorityError, CapabilityAuthoritySchema, CapabilityFragmentValueSchema, assertCapabilityAuthoritySubset, intersectCapabilityAuthorities, isCapabilityAuthoritySubset, parseCapabilityAuthority, } from "./PermissionAlgebra.js";
14
18
  import Trigger from "./Trigger.js";
15
19
  import { RESPOND_BRAND, isRespondEnvelope } from "./types/RespondEnvelope.js";
16
20
  import mapper from "./utils/Mapper.js";
17
21
  import { MapperResolutionError } from "./utils/MapperResolutionError.js";
18
22
  import MemoryUsage from "./utils/MemoryUsage.js";
19
23
  import { NamedMissingStateError } from "./utils/NamedMissingStateError.js";
20
- import { lowerRefs } from "./utils/lowerRefs.js";
21
- export { NodeBase, RESPOND_BRAND, isRespondEnvelope, Trigger, GlobalLogger, GlobalError, BlokError, ErrorCategory, ErrorSeverity, DEFAULT_HTTP_STATUS, DEFAULT_RETRYABLE, isNonRetryableValidationError, WORKFLOW_INPUT_VALIDATION, Metrics, MemoryUsage, mapper, MapperResolutionError, NamedMissingStateError, lowerRefs, };
24
+ import { isStructuralRef, isStructuralTpl, lowerRefs } from "./utils/lowerRefs.js";
25
+ export { AGENT_CAPABILITY_CONTRACT_VERSION, CAPABILITY_MAX_ID_LENGTH, CAPABILITY_MAX_LIST_ITEMS, CAPABILITY_MAX_OUTPUT_CHUNK_BYTES, CAPABILITY_MAX_PATH_LENGTH, CapabilityContractError, CapabilityOwnerSchema, WorkspacePathRefSchema, assertAuthorized, assertOwned, capabilityScope, parseCapabilityAuthorization, parseCapabilityOwner, parseWorkspacePathRef, } from "./CapabilityContracts.js";
26
+ export { GIT_CAPABILITY_CONTRACT_VERSION, GIT_DESTRUCTIVE_OPERATIONS, GIT_OPERATIONS, GIT_MAX_BRANCH_NAME_LENGTH, GIT_MAX_CHANGED_FILES, assertGitOperationAllowed, assertGitOwner, assertGitPolicyAllowed, gitCapabilityScope, parseGitDiffEvidence, parseGitDirtyState, parseGitOperation, parseGitRepositoryIdentity, parseGitWorktreeCreateRequest, parseGitWorktreeIdentity, workspacePathForGit, } from "./GitCapabilityContracts.js";
27
+ export { PROCESS_CAPABILITY_CONTRACT_VERSION, PROCESS_CAPABILITY_IDS, PROCESS_DEFAULT_LIMITS, assertBoundedOutputChunk, assertProcessOwner, assertProcessPolicyAllowed, assertProcessStartResult, parseProcessCancellationRequest, parseProcessHandle, parseProcessOutput, parseProcessOutputChunk, parseProcessOrphanCleanupRequest, parseProcessResult, parseProcessSpec, processCapabilityId, processCapabilityScope, processWorkspaceCwd, } from "./ProcessCapabilityContracts.js";
28
+ export { ENFORCEMENT_CONTRACT_VERSION, EnforcementViolationError, } from "./EnforcementContracts.js";
29
+ export { ENFORCEMENT_PROFILE_CONTRACT_VERSION, ENFORCEMENT_PROFILE_SEMANTICS, ENFORCEMENT_PROFILES, EnforcementProfileContractError, EnforcementProfileContractSchema, EnforcementProfileSchema, enforcementProfileSemantics, parseEnforcementProfile, parseEnforcementProfileContract, serializeEnforcementProfileContract, } from "./EnforcementProfileContracts.js";
30
+ export { ENFORCEMENT_OVERRIDE_EVENT_VERSION, WORKFLOW_BINDING_CONTRACT_VERSION, WORKFLOW_BINDING_MAX_ATTRIBUTES, WORKFLOW_BINDING_MAX_CONTRACT_BYTES, WORKFLOW_BINDING_MAX_LABELS, WORKFLOW_BINDING_MAX_NODES, WORKFLOW_BINDING_MAX_PATHS, WORKFLOW_BINDING_MAX_RULES, WORKFLOW_BINDING_MAX_SCOPE_ITEMS, WORKFLOW_BINDING_MAX_STRING_LENGTH, WORKFLOW_BINDING_MAX_RUNTIMES, WORKFLOW_RUN_CONTRACT_VERSION, EnforcementOverrideEventSchema, EnforcementOverrideScopeSchema, PinnedWorkflowRunContractSchema, WorkflowBindingContractError, WorkflowBindingInputsSchema, WorkflowBindingRuleSchema, WorkflowBindingRulesSchema, WorkflowBindingSelectorSchema, isEnforcementProfile, parseEnforcementOverrideEvent, parsePinnedWorkflowRunContract, parseWorkflowBindingInputs, parseWorkflowBindingRule, parseWorkflowBindingRules, parseWorkflowBindingSelector, serializeEnforcementOverrideEvent, serializePinnedWorkflowRunContract, serializeWorkflowBindingInputs, serializeWorkflowBindingRule, serializeWorkflowBindingRules, WORKFLOW_RUNTIME_KINDS, WORKFLOW_SOURCE_KINDS, } from "./WorkflowBindingContracts.js";
31
+ export { ApprovalRequirementSchema, ArtifactIdentitySchema, ArtifactVersionIdentitySchema, CompletionContractSchema, CompletionRequirementSchema, EvidenceCheckSchema, EvidenceContractError, EvidenceProducerIdentitySchema, EvidenceProvenanceIdentitySchema, EvidenceRecordSchema, EvidenceRequirementSchema, EvidencePayloadSchema, EvidenceTraceIdentitySchema, EvidenceVerificationResultSchema, EvidenceVerifierIdentitySchema, EVIDENCE_CHECK_OUTCOMES, EVIDENCE_CONTRACT_VERSION, EVIDENCE_MAX_CHECKS, EVIDENCE_MAX_PAYLOAD_DEPTH, EVIDENCE_MAX_PAYLOAD_ITEMS, EVIDENCE_MAX_RECORD_BYTES, EVIDENCE_MAX_REQUIREMENTS, EVIDENCE_MAX_STRING_LENGTH, EVIDENCE_PRODUCER_KINDS, EVIDENCE_VERIFICATION_METHODS, EVIDENCE_VERIFICATION_STATUSES, EVIDENCE_VERIFIER_KINDS, parseCompletionContract, parseEvidencePayload, parseEvidenceRecord, rejectModelEvidence, serializeCompletionContract, serializeEvidenceRecord, } from "./EvidenceContracts.js";
32
+ export { EffectRetryEvidenceSchema, JOIN_CONTRACT_VERSION, JOIN_MAX_BRANCHES, JOIN_MAX_CONTRACT_BYTES, JOIN_MAX_OUTPUTS, JOIN_MAX_SCHEMA_DEPTH, JoinBranchObligationSchema, JoinContractError, JoinContractSchema, JoinOutputDeclarationSchema, RETRY_RESUME_IDEMPOTENCY_CONTRACT_VERSION, RETRY_RESUME_MAX_ATTEMPTS, RETRY_RESUME_MAX_EVIDENCE, RETRY_RESUME_MAX_RESUMES, RetryResumeContractError, RetryResumeIdempotencyContractSchema, assertEffectRetryEvidence, assertJoinSatisfied, parseEffectRetryEvidence, parseJoinContract, parseRetryResumeIdempotencyContract, serializeJoinContract, } from "./JoinContracts.js";
33
+ export { INTERACTION_MAX_LINEAGE_DEPTH, INTERACTION_MAX_LINEAGE_PATH, INTERACTION_MAX_PAYLOAD_BYTES, INTERACTION_MAX_PAYLOAD_DEPTH, INTERACTION_MAX_PAYLOAD_ITEMS, INTERACTION_MAX_STRING_LENGTH, INTERACTION_REDACTED_VALUE, INTERACTION_VERSION, InteractionContractError, fingerprintInteractionPayload, immutableInteractionSnapshot, parseInteractionAnswer, parseInteractionPayload, redactInteractionDecision, redactInteractionPayload, redactInteractionRequest, redactInteractionString, } from "./InteractionContracts.js";
34
+ export { GRAPH_CONTRACT_VERSION, GRAPH_FRESHNESS_STATES, GRAPH_INDEX_SOURCES, GRAPH_MAX_DEPTH, GRAPH_MAX_FILES_PER_INDEX, GRAPH_MAX_INDEX_BYTES, GRAPH_MAX_ITEMS, GRAPH_MAX_PATH_LENGTH, GRAPH_MAX_RESPONSE_BYTES, GRAPH_MAX_STRING_LENGTH, GRAPH_RELATION_DIRECTIONS, GRAPH_RELATION_KINDS, GRAPH_RESULT_STATES, GRAPH_SEARCH_KINDS, GRAPH_SYMBOL_KINDS, AuthoritativeSourceReadRequestSchema, AuthoritativeSourceSnapshotSchema, GraphContractError, GraphErrorSchema, GraphFreshnessSchema, GraphFreshnessRequestSchema, GraphImpactRequestSchema, GraphIndexFileSchema, GraphIndexRequestSchema, GraphLocationSchema, GraphProvenanceSchema, GraphRangeSchema, GraphRelationSchema, GraphRelationRequestSchema, GraphRepositoryIdentitySchema, GraphResultStatusSchema, GraphScopeSchema, GraphSearchHitSchema, GraphSearchRequestSchema, GraphSymbolSchema, GraphSymbolRequestSchema, GraphWorktreeIdentitySchema, parseAuthoritativeSourceReadRequest, parseGraphImpactRequest, parseGraphFreshnessRequest, parseGraphIndexRequest, parseGraphIndexResponse, parseGraphQueryResponse, parseGraphRelationRequest, parseGraphScope, parseGraphSearchRequest, parseGraphSymbolRequest, serializeGraphContract, } from "./GraphContracts.js";
35
+ export { AGENT_SESSION_CONTRACT_VERSION, AGENT_SESSION_SCHEMA_VERSION, AGENT_SESSION_MAX_EVENT_BYTES, AGENT_SESSION_MAX_PAYLOAD_DEPTH, AGENT_SESSION_MAX_PAYLOAD_ITEMS, AGENT_SESSION_MAX_STRING_LENGTH, AGENT_SESSION_MAX_EVENTS_PER_APPEND, AGENT_SESSION_MAX_PAGE_SIZE, AGENT_SESSION_MAX_SNAPSHOT_BYTES, AGENT_SESSION_EVENT_KINDS, AgentSessionContractError, SessionConcurrencyError, SessionCorruptTailError, ArtifactReferenceSchema, SessionJsonValueSchema, SessionActorSchema, SessionEventSchema, SessionEventInputSchema, parseArtifactReference, parseSessionEvent, parseSessionEventInput, serializeSessionEvent, parseSessionCursor, cursorForSequence, immutableSessionSnapshot, fingerprintSessionEvent, foldSessionEvents, } from "./AgentSessionContracts.js";
36
+ export { CAPABILITY_MANIFEST_VERSION, CAPABILITY_EFFECTS, CAPABILITY_CLASSIFICATIONS, CAPABILITY_DETERMINISM, CAPABILITY_IDEMPOTENCY, CAPABILITY_MATURITY, CapabilityManifestError, parseCapabilityManifest, serializeCapabilityManifest, assessCapabilityManifest, requireAgentEligibleManifest, NodeBase, RESPOND_BRAND, isRespondEnvelope, Trigger, GlobalLogger, GlobalError, BlokError, ErrorCategory, ErrorSeverity, DEFAULT_HTTP_STATUS, DEFAULT_RETRYABLE, isNonRetryableValidationError,
37
+ // #679 — the ONE non-retryable matcher plus the marker the runner uses to
38
+ // hand its verdict to the transports, so step-level and job-level retry can
39
+ // never disagree.
40
+ isNonRetryableError, markNonRetryableStepError, isNonRetryableStepError, WORKFLOW_INPUT_VALIDATION, WorkflowInputValidationError, Metrics, MemoryUsage, mapper, MapperResolutionError, NamedMissingStateError, lowerRefs,
41
+ // The lowering pass's OWN predicates — exported so the normalizer's
42
+ // post-lowering total invariant (#707) tests the identical rule instead of
43
+ // a second hand-written copy that could drift from what `lowerRefs` lowers.
44
+ isStructuralRef, isStructuralTpl, };
@@ -5,5 +5,12 @@ type LoggerContext = {
5
5
  getLogsAsBase64(): string;
6
6
  logLevel(level: string, message: string): void;
7
7
  error(message: string, stack: string): void;
8
+ /**
9
+ * Would a message at `level` (default `"info"`) actually be emitted? Lets a
10
+ * caller skip building an expensive message — the per-node config JSON in
11
+ * `BlokService.run` — that the logger would only drop. Optional: a logger
12
+ * that doesn't implement it is treated as always emitting.
13
+ */
14
+ isLevelEnabled?(level?: string): boolean;
8
15
  };
9
16
  export default LoggerContext;
@@ -58,6 +58,20 @@ import type ParamsDictionary from "../types/ParamsDictionary.js";
58
58
  * tests can flip the mode between cases.
59
59
  */
60
60
  export type MapperMode = "warn" | "strict" | "silent";
61
+ /**
62
+ * Copy exactly what {@link Mapper.replaceObjectStrings} can mutate — the plain
63
+ * objects and arrays it recurses into — and SHARE everything else by reference.
64
+ * Resolving a copy leaves the caller's object pristine, which is what lets a
65
+ * step's config slice be resolved per execution (per forEach iteration, per
66
+ * retry) from the same unresolved source (#874).
67
+ *
68
+ * Deliberately not `_.cloneDeep`: this runs on every node execution, and a full
69
+ * deep clone would also walk the framework instances hanging off a flow step's
70
+ * slice (`steps: RunnerNode[]`) — expensive, and the mapper never touches them.
71
+ * Same `isPlainContainer` rule as the walker, so "cloned" and "mutable" are the
72
+ * same set by construction.
73
+ */
74
+ export declare function cloneResolvable<T>(value: T): T;
61
75
  declare class Mapper {
62
76
  /**
63
77
  * Walk an object recursively, resolving every string value via
@@ -253,6 +253,38 @@ function isPlainContainer(value) {
253
253
  const proto = Object.getPrototypeOf(value);
254
254
  return proto === Object.prototype || proto === null;
255
255
  }
256
+ /**
257
+ * Copy exactly what {@link Mapper.replaceObjectStrings} can mutate — the plain
258
+ * objects and arrays it recurses into — and SHARE everything else by reference.
259
+ * Resolving a copy leaves the caller's object pristine, which is what lets a
260
+ * step's config slice be resolved per execution (per forEach iteration, per
261
+ * retry) from the same unresolved source (#874).
262
+ *
263
+ * Deliberately not `_.cloneDeep`: this runs on every node execution, and a full
264
+ * deep clone would also walk the framework instances hanging off a flow step's
265
+ * slice (`steps: RunnerNode[]`) — expensive, and the mapper never touches them.
266
+ * Same `isPlainContainer` rule as the walker, so "cloned" and "mutable" are the
267
+ * same set by construction.
268
+ */
269
+ export function cloneResolvable(value) {
270
+ if (value === null || typeof value !== "object")
271
+ return value;
272
+ if (Array.isArray(value)) {
273
+ const out = new Array(value.length);
274
+ for (let i = 0; i < value.length; i++)
275
+ out[i] = cloneResolvable(value[i]);
276
+ return out;
277
+ }
278
+ if (!isPlainContainer(value))
279
+ return value;
280
+ const out = {};
281
+ for (const key in value) {
282
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
283
+ out[key] = cloneResolvable(value[key]);
284
+ }
285
+ }
286
+ return out;
287
+ }
256
288
  // =============================================================================
257
289
  // Mapper
258
290
  // =============================================================================
@@ -14,7 +14,12 @@
14
14
  * BEFORE the Mapper, and compiles every structural `{$ref}` into EXACTLY the
15
15
  * wire string today's engine already resolves. The Mapper stays untouched.
16
16
  *
17
- * Scope: the STEP-INPUTS, TRIGGER-ROOT, and TPL positions.
17
+ * Scope: the STEP-INPUTS, TRIGGER-ROOT, and TPL positions — plus, since #707,
18
+ * the three RESOLVED-KEY positions (step `idempotencyKey`, trigger
19
+ * `concurrencyKey`, trigger `debounce.key`), which the normalizer feeds through
20
+ * this same encoder. The caller picks the positions; this pass is unaware of
21
+ * them, which is why control positions (`branch.when`, `forEach.in`,
22
+ * `switch.on`) are simply never handed to it.
18
23
  * - step input value: `"js/ctx.state.<root>" + path`
19
24
  * - `path` mapping: string segment → `.seg`, numeric → `[n]`,
20
25
  * empty `path: []` (whole-output ref) → `"js/ctx.state.<root>"`.
@@ -36,6 +41,25 @@ export interface StructuralRef {
36
41
  path?: (string | number)[];
37
42
  };
38
43
  }
44
+ /**
45
+ * Is `value` the reserved `{$ref}` sentinel — a single-key object whose only
46
+ * key is `$ref` and whose `$ref.step` is a string?
47
+ *
48
+ * The single-key + string-step guard is what makes `$ref` safe to reserve:
49
+ * a step-inputs object that legitimately carries unrelated data (even data
50
+ * with the literal keys `step`/`path`) is NOT a ref and passes through
51
+ * untouched. ADR 0001 confirmed no current workflow uses `$ref` as user data.
52
+ */
53
+ export declare function isStructuralRef(value: object): value is StructuralRef;
54
+ /**
55
+ * The structural template sentinel (#425) — a single-key `{$tpl: [...]}` whose
56
+ * segments alternate raw strings and `{$ref}` nodes (plus the occasional literal
57
+ * non-string interpolation). Mirrors `tpl\`...\`` in `core/runner/src/stepBuilder.ts`.
58
+ */
59
+ export interface StructuralTpl {
60
+ $tpl: unknown[];
61
+ }
62
+ export declare function isStructuralTpl(value: object): value is StructuralTpl;
39
63
  /**
40
64
  * Recursively lower every structural `{$ref}` inside `value` to its wire
41
65
  * string. Pure — returns a NEW value, never mutates the input. Plain
@@ -14,7 +14,12 @@
14
14
  * BEFORE the Mapper, and compiles every structural `{$ref}` into EXACTLY the
15
15
  * wire string today's engine already resolves. The Mapper stays untouched.
16
16
  *
17
- * Scope: the STEP-INPUTS, TRIGGER-ROOT, and TPL positions.
17
+ * Scope: the STEP-INPUTS, TRIGGER-ROOT, and TPL positions — plus, since #707,
18
+ * the three RESOLVED-KEY positions (step `idempotencyKey`, trigger
19
+ * `concurrencyKey`, trigger `debounce.key`), which the normalizer feeds through
20
+ * this same encoder. The caller picks the positions; this pass is unaware of
21
+ * them, which is why control positions (`branch.when`, `forEach.in`,
22
+ * `switch.on`) are simply never handed to it.
18
23
  * - step input value: `"js/ctx.state.<root>" + path`
19
24
  * - `path` mapping: string segment → `.seg`, numeric → `[n]`,
20
25
  * empty `path: []` (whole-output ref) → `"js/ctx.state.<root>"`.
@@ -38,7 +43,7 @@
38
43
  * with the literal keys `step`/`path`) is NOT a ref and passes through
39
44
  * untouched. ADR 0001 confirmed no current workflow uses `$ref` as user data.
40
45
  */
41
- function isStructuralRef(value) {
46
+ export function isStructuralRef(value) {
42
47
  const keys = Object.keys(value);
43
48
  if (keys.length !== 1 || keys[0] !== "$ref")
44
49
  return false;
@@ -126,7 +131,7 @@ function refExpr(ref) {
126
131
  function lowerRef(ref) {
127
132
  return `js/${refExpr(ref)}`;
128
133
  }
129
- function isStructuralTpl(value) {
134
+ export function isStructuralTpl(value) {
130
135
  const keys = Object.keys(value);
131
136
  return keys.length === 1 && keys[0] === "$tpl" && Array.isArray(value.$tpl);
132
137
  }