Documentation Index
Fetch the complete documentation index at: https://smithers.sh/llms.txt
Use this file to discover all available pages before exploring further.
import { ApprovalGate } from "smithers-orchestrator";
type ApprovalGateProps = {
id: string;
output: z.ZodObject | Table | string;
request: { title: string; summary?: string; metadata?: Record<string, unknown> };
when: boolean; // true => require human; false => auto-approve immediately
onDeny?: "fail" | "continue" | "skip"; // default "fail"
skipIf?: boolean;
timeoutMs?: number;
retries?: number;
retryPolicy?: { backoff?: "fixed" | "linear" | "exponential"; initialDelayMs?: number };
continueOnFail?: boolean;
};
const risk = ctx.output(outputs.riskScore, { nodeId: "risk" });
<Workflow name="deploy-pipeline">
<Sequence>
<Task id="risk" output={outputs.riskScore} agent={riskAgent}>
Assess deploy risk.
</Task>
<ApprovalGate
id="deploy-approval"
output={outputs.deployDecision}
when={risk.level === "high"}
request={{
title: "Approve high-risk deploy?",
summary: `Risk score: ${risk.score}/100`,
}}
onDeny="fail"
/>
<Task id="deploy" output={outputs.deploy}>
{{ deployed: true }}
</Task>
</Sequence>
</Workflow>
Notes
- Auto-approve emits a valid
ApprovalDecision ({ approved: true, note: "auto-approved", ... }); downstream branching stays uniform.
onDeny applies only to the human path; auto-approve always succeeds.