import type { WorkflowExpressionEvaluationContext } from '../evaluator/evaluate-workflow-expression.js'; import type { ExpressionType, ExpressionTypeEnvironment } from '../expression/workflow-expression.js'; import { type OutputDeclarations } from '../outputs/output-declarations.js'; export declare const workflowContextNames: readonly ['workflow', 'run', 'trigger', 'event', 'inputs', 'job', 'executions', 'execution', 'jobs', 'needs', 'steps', 'step', 'vars', 'secrets']; export type WorkflowContextName = (typeof workflowContextNames)[number]; export declare const availabilitySites: readonly ['ingest', 'run-creation', 'execution-creation', 'job-activation', 'step-dispatch', 'step-report', 'execution-resolution', 'job-resolution']; export type AvailabilitySite = (typeof availabilitySites)[number]; export declare const runnerFillTarget = "runner-fill"; export type FillTarget = AvailabilitySite | typeof runnerFillTarget; export declare const workflowContextSensitivities: readonly ['persistable', 'ephemeral']; export type WorkflowContextSensitivity = (typeof workflowContextSensitivities)[number]; export declare const workflowContextHosts: readonly ['server', 'runner']; export type WorkflowContextHost = (typeof workflowContextHosts)[number]; export type ReservedRootDefinition = { readonly host: 'server'; readonly availability: AvailabilitySite; } | { readonly host: 'runner'; }; export declare const workflowContextReservedRoots: { readonly matrix: { readonly host: 'server'; readonly availability: 'job-activation'; }; readonly runner: { readonly host: 'runner'; }; readonly result: { readonly host: 'server'; readonly availability: 'step-report'; }; }; export type WorkflowContextReservedRoot = keyof typeof workflowContextReservedRoots; export type WorkflowContextShape = 'known' | 'open'; export interface TypedWorkflowContextDefinition { readonly availability: AvailabilitySite; readonly sensitivity: WorkflowContextSensitivity; readonly host: 'server'; readonly shape: 'known'; readonly checkMode: 'typed'; readonly typeEnvironment: ExpressionTypeEnvironment; } export interface OpenWorkflowContextDefinition { readonly availability: AvailabilitySite; readonly sensitivity: WorkflowContextSensitivity; readonly host: 'server'; readonly shape: 'open'; readonly checkMode: 'syntax'; readonly literalKeyOnly?: boolean; } export interface RunnerWorkflowContextDefinition { readonly sensitivity: 'ephemeral'; readonly host: 'runner'; readonly shape: 'open'; readonly checkMode: 'syntax'; readonly literalKeyOnly?: boolean; } export type WorkflowContextDefinition = TypedWorkflowContextDefinition | OpenWorkflowContextDefinition | RunnerWorkflowContextDefinition; /** * Gate context for a tool step: `status` and `outputs`, with no `exit_code` * because a tool step never reports one. */ export declare const toolStepReportTypeEnvironment: { readonly step: { readonly kind: 'object'; readonly fields: { readonly status: 'string'; readonly outputs: { readonly kind: 'map'; }; }; }; }; export type WorkflowStepKind = 'run' | 'agent' | 'checkout' | 'tool'; export interface WorkflowStepTypeOverlay { readonly key: string; readonly kind?: WorkflowStepKind; readonly outputs?: OutputDeclarations; /** * Catalog output schema of a tool step. Types the implicit `result` output * that every tool step exposes, merged with the inferred mapped outputs. */ readonly outputSchema?: unknown; } export interface WorkflowJobTypeOverlay { readonly key: string; readonly outputs?: Readonly>; } export declare function buildTypedRootsEnvironment(params: { readonly steps?: readonly WorkflowStepTypeOverlay[]; readonly currentStep?: WorkflowStepTypeOverlay; readonly jobs?: readonly WorkflowJobTypeOverlay[]; readonly needs?: readonly WorkflowJobTypeOverlay[]; }): ExpressionTypeEnvironment; export declare const workflowContextDefinitions: { readonly workflow: { readonly availability: 'run-creation'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'known'; readonly checkMode: 'typed'; readonly typeEnvironment: { readonly workflow: { readonly kind: 'object'; readonly fields: { readonly id: 'string'; readonly name: 'string'; }; }; }; }; readonly run: { readonly availability: 'run-creation'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'known'; readonly checkMode: 'typed'; readonly typeEnvironment: { readonly run: { readonly kind: 'object'; readonly fields: { readonly id: 'string'; readonly number: 'int'; readonly attempt: 'int'; readonly name: 'string'; readonly project_id: 'string'; readonly workspace_id: 'string'; readonly created_at: 'timestamp'; }; }; }; }; readonly trigger: { readonly availability: 'ingest'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'known'; readonly checkMode: 'typed'; readonly typeEnvironment: { readonly trigger: { readonly kind: 'object'; readonly fields: { readonly project: { readonly kind: 'object'; readonly fields: { readonly id: 'string'; }; }; readonly repository: 'string'; readonly ref: 'string'; readonly commit: 'string'; readonly source: 'string'; readonly event: 'string'; }; }; }; }; readonly event: { readonly availability: 'ingest'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'open'; readonly checkMode: 'syntax'; }; readonly inputs: { readonly availability: 'run-creation'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'open'; readonly checkMode: 'syntax'; }; readonly job: { readonly availability: 'run-creation'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'known'; readonly checkMode: 'typed'; readonly typeEnvironment: { readonly job: { readonly kind: 'object'; readonly fields: { readonly key: 'string'; readonly name: 'string'; }; }; }; }; readonly executions: { readonly availability: 'execution-creation'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'known'; readonly checkMode: 'typed'; readonly typeEnvironment: { readonly executions: { readonly kind: 'list'; readonly element: { readonly kind: 'object'; readonly fields: { readonly index: 'int'; readonly name: 'string'; readonly status: 'string'; readonly started_at: 'timestamp'; readonly finished_at: 'timestamp'; readonly events: { readonly kind: 'list'; readonly element: { readonly kind: 'object'; readonly fields: { readonly project: { readonly kind: 'object'; readonly fields: { readonly id: 'string'; }; }; readonly repository: 'string'; readonly ref: 'string'; readonly commit: 'string'; readonly event_ref: 'string'; readonly source: 'string'; readonly event: 'string'; readonly delivery_id: 'string'; readonly received_at: 'timestamp'; readonly disposition: 'string'; readonly outcome: 'string'; readonly outcome_reason: 'string'; readonly stored_payload_bytes: 'int'; readonly normalized_event_bytes: 'int'; readonly data: { readonly kind: 'map'; }; }; }; }; readonly outputs: { readonly kind: 'map'; }; }; }; }; }; }; readonly execution: { readonly availability: 'execution-creation'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'known'; readonly checkMode: 'typed'; readonly typeEnvironment: { readonly execution: { readonly kind: 'object'; readonly fields: { readonly index: 'int'; readonly name: 'string'; readonly status: 'string'; readonly started_at: 'timestamp'; readonly finished_at: 'timestamp'; readonly events: { readonly kind: 'list'; readonly element: { readonly kind: 'object'; readonly fields: { readonly project: { readonly kind: 'object'; readonly fields: { readonly id: 'string'; }; }; readonly repository: 'string'; readonly ref: 'string'; readonly commit: 'string'; readonly event_ref: 'string'; readonly source: 'string'; readonly event: 'string'; readonly delivery_id: 'string'; readonly received_at: 'timestamp'; readonly disposition: 'string'; readonly outcome: 'string'; readonly outcome_reason: 'string'; readonly stored_payload_bytes: 'int'; readonly normalized_event_bytes: 'int'; readonly data: { readonly kind: 'map'; }; }; }; }; readonly outputs: { readonly kind: 'map'; }; readonly failed: 'bool'; }; }; }; }; readonly jobs: { readonly availability: 'job-activation'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'open'; readonly checkMode: 'syntax'; }; readonly needs: { readonly availability: 'job-activation'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'known'; readonly checkMode: 'typed'; readonly typeEnvironment: { readonly needs: { readonly kind: 'list'; readonly element: ExpressionType; }; }; }; readonly steps: { readonly availability: 'step-dispatch'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'open'; readonly checkMode: 'syntax'; }; readonly step: { readonly availability: 'step-dispatch'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'known'; readonly checkMode: 'typed'; readonly typeEnvironment: { readonly step: { readonly kind: 'object'; readonly fields: { readonly attempt: 'int'; readonly is_retry: 'bool'; readonly restart: { readonly kind: 'object'; readonly fields: { readonly from: { readonly kind: 'object'; readonly fields: { readonly status: 'string'; readonly exit_code: 'int'; readonly outputs: { readonly kind: 'map'; }; readonly response: 'string'; readonly gate: { readonly kind: 'object'; readonly fields: { readonly passed: 'bool'; readonly source: 'string'; readonly reason: 'string'; readonly exit_code: 'int'; }; }; readonly attempts: { readonly kind: 'list'; readonly element: { readonly kind: 'object'; readonly fields: { readonly status: 'string'; readonly exit_code: 'int'; readonly outputs: { readonly kind: 'map'; }; readonly response: 'string'; readonly gate: { readonly kind: 'object'; readonly fields: { readonly passed: 'bool'; readonly source: 'string'; readonly reason: 'string'; readonly exit_code: 'int'; }; }; }; }; }; readonly key: 'string'; }; }; readonly feedback: 'string'; }; }; readonly exit_code: 'int'; readonly status: 'string'; readonly outputs: { readonly kind: 'map'; }; }; }; }; }; readonly vars: { readonly availability: 'run-creation'; readonly sensitivity: 'persistable'; readonly host: 'server'; readonly shape: 'open'; readonly checkMode: 'syntax'; readonly literalKeyOnly: true; }; readonly secrets: { readonly sensitivity: 'ephemeral'; readonly host: 'runner'; readonly shape: 'open'; readonly checkMode: 'syntax'; readonly literalKeyOnly: true; }; }; export type WorkflowInterpolationField = 'run' | 'env.value' | 'agent.prompt' | 'agent.model' | 'agent.provider' | 'agent.thinking' | 'agent.session' | 'job.runner' | 'job.outputs' | 'workflow.run_name' | 'workflow.concurrency.group' | 'job.execution_name' | 'step.name' | 'step.working_directory' | 'step.feedback' | 'checkout.project' | 'checkout.connection' | 'checkout.repository' | 'checkout.ref' | 'checkout.path' | 'tool.with' | 'tool.outputs'; export declare const workflowFieldFailurePolicies: readonly ['fail', 'degrade', 'fail-closed']; export type WorkflowFieldFailurePolicy = (typeof workflowFieldFailurePolicies)[number]; export type WorkflowInterpolationFailurePolicy = Exclude; export interface WorkflowInterpolationFieldPolicy { readonly acceptedHosts: readonly WorkflowContextHost[]; readonly failurePolicy: WorkflowInterpolationFailurePolicy; readonly minimumFillTarget?: AvailabilitySite; readonly selfReference?: { readonly root: WorkflowContextName; readonly key: string; }; /** * Explicit root enumeration for fields whose references are not just * host-constrained, such as `tool.outputs` with its reserved `result` root. * When present, callers should use this instead of the accepted-hosts filter. */ readonly roots?: readonly (WorkflowContextName | WorkflowContextReservedRoot)[]; } export declare const workflowInterpolationFieldPolicies: Readonly>; export declare const workflowInterpolationFields: readonly WorkflowInterpolationField[]; export declare const workflowPredicateFields: readonly ['step.success', 'job.success', 'trigger.filter', 'listener.on', 'listener.until', 'job.if', 'step.if']; export type WorkflowPredicateField = (typeof workflowPredicateFields)[number]; /** * The roots that the runtime passes to each server-evaluated predicate. * * This is intentionally narrower than lifecycle availability. A root can * exist by the time a predicate runs and still not belong to that predicate's * evaluation context. */ export declare const workflowPredicateContextRoots: { readonly 'step.success': readonly ["step", "vars"]; readonly 'job.success': readonly ["executions", "jobs", "vars"]; readonly 'trigger.filter': readonly ["event", "trigger"]; readonly 'listener.on': readonly ["event", "workflow", "run", "trigger", "inputs", "vars", "job", "jobs"]; readonly 'listener.until': readonly ["event", "workflow", "run", "trigger", "inputs", "vars", "job", "jobs"]; readonly 'job.if': readonly ["workflow", "run", "trigger", "event", "inputs", "vars", "jobs", "needs"]; readonly 'step.if': readonly ["vars", "jobs", "execution", "step", "steps"]; }; export type WorkflowPredicateContextRoot = (typeof workflowPredicateContextRoots)[Field][number]; export declare const workflowPredicateFieldFailurePolicy: "fail-closed"; export declare function getWorkflowContextDefinition(name: WorkflowContextName): WorkflowContextDefinition; export declare function getWorkflowContextAvailability(name: WorkflowContextName): AvailabilitySite | undefined; export declare function getWorkflowContextHost(name: WorkflowContextName): WorkflowContextHost; export declare function resolveContextRootHost(root: string): WorkflowContextHost | undefined; export declare function resolveContextRootAvailability(root: string): AvailabilitySite | undefined; export declare function getWorkflowContextSensitivity(name: WorkflowContextName): WorkflowContextSensitivity; export declare function rootsAvailableAt(site: AvailabilitySite): readonly WorkflowContextName[]; export declare function unavailableRootsAt(roots: readonly (WorkflowContextName | WorkflowContextReservedRoot)[], site: AvailabilitySite): readonly (WorkflowContextName | WorkflowContextReservedRoot)[]; export declare function getWorkflowContextTypeEnvironment(name: WorkflowContextName): ExpressionTypeEnvironment | undefined; export declare function getWorkflowInterpolationFieldTypeEnvironment(field: WorkflowInterpolationField, root: WorkflowContextName | WorkflowContextReservedRoot): ExpressionTypeEnvironment | undefined; export declare function workflowInterpolationFieldAcceptsHost(field: WorkflowInterpolationField, host: WorkflowContextHost): boolean; export declare function workflowContextRootRequiresLiteralKey(root: string): boolean; export declare function getWorkflowInterpolationFieldFailurePolicy(field: WorkflowInterpolationField): WorkflowInterpolationFailurePolicy; export declare function getWorkflowInterpolationFieldSelfReference(field: WorkflowInterpolationField): WorkflowInterpolationFieldPolicy['selfReference']; export declare function getWorkflowInterpolationFieldMinimumFillTarget(field: WorkflowInterpolationField): AvailabilitySite | undefined; export declare function getWorkflowPredicateFieldMinimumFillTarget(field: WorkflowPredicateField): AvailabilitySite; export declare function getWorkflowPredicateFieldTypeEnvironment(field: WorkflowPredicateField, root: WorkflowContextName, stepKind?: WorkflowStepKind): ExpressionTypeEnvironment | undefined; export declare function getWorkflowPredicateContextRoots(field: Field): readonly WorkflowPredicateContextRoot[]; /** * The roots a field can read, whichever kind of field it is. * * A predicate has an enumerated contract because the runtime assembles one * context for it. A template has no single context: each reference is filled * where its data arrives, so its field-level constraint is which host can * resolve it, except for fields that declare an explicit root list (such as * `tool.outputs`, whose reserved `result` root is not a referenceable context * name). Callers that document or check fields should use this instead of * choosing a mechanism themselves. */ export declare function contextRootsForField(field: WorkflowPredicateField | WorkflowInterpolationField): readonly (WorkflowContextName | WorkflowContextReservedRoot)[]; export declare function isWorkflowPredicateField(field: string): field is WorkflowPredicateField; export declare function projectWorkflowPredicateContext(field: WorkflowPredicateField, context: WorkflowExpressionEvaluationContext): WorkflowExpressionEvaluationContext; export interface WorkflowContextAvailabilityReferenceEntry { readonly root: WorkflowContextName | WorkflowContextReservedRoot; readonly availability?: AvailabilitySite; readonly reserved: boolean; readonly availableAt: Readonly>; } export declare function workflowContextAvailabilityReference(): readonly WorkflowContextAvailabilityReferenceEntry[]; //# sourceMappingURL=workflow-context.d.ts.map