Minor Changes
-
ccda5c6: Add
engine.retry(runId)— replay afailedrun from the step that failed. Memoizedokstep results are preserved; thefailed_terminalstep row is deleted, the run is reset topendingwithattempts=0, aresumedevent is recorded, and the run is re-enqueued atomically. Returns aRetryResultdiscriminated bykind:"queued","missing", or"not_failed"(with the current status).This is replay, not restart: a fresh
handle.start(input)is a brand-new run and re-executes every step.engine.retry(runId)resumes the samerunIdand skips work already done.
Patch Changes
-
d0fcf0d: Fix
engine.status()andengine.listRuns()rows showing every column asunknownon the consumer side. The root cause:RunRow(and friends) weretypeof runs.$inferSelect, which carries drizzle's column brand into the bundled.d.ts. The bundle re-renders drizzle under a vendored namespace, so a consumer's drizzle copy can't dereference the brand — every per-column inference collapses tounknown.RunRow,StepRow,TimerRow,SignalRow,EventRoware now hand-written interfaces with concrete field types (id: string,status: RunStatus,createdAt: Date,error: FlowError | null,tags: string[] | null, jsonb columns asunknown, etc.). A compile-time equivalence check pins each interface to drizzle's$inferSelectof the runtime table, so a column rename or type change here fails the build instead of drifting.No runtime change; structurally identical shapes — consumers just get usable types in
engine.status().run.nameetc. without casts.