@osolmaz/pi-workflows 0.12.0 → 0.13.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 (257) hide show
  1. package/README.md +56 -31
  2. package/dist/builtins/autodoc.workflow.d.ts +4 -4
  3. package/dist/builtins/autoimplement.workflow.d.ts +797 -142
  4. package/dist/builtins/autoimplement.workflow.js +17 -105
  5. package/dist/builtins/autoimplement.workflow.js.map +1 -1
  6. package/dist/builtins/autoplan.workflow.d.ts +126 -13
  7. package/dist/builtins/autoplan.workflow.js +200 -29
  8. package/dist/builtins/autoplan.workflow.js.map +1 -1
  9. package/dist/builtins/catalog.js +7 -5
  10. package/dist/builtins/catalog.js.map +1 -1
  11. package/dist/builtins/index.d.ts +4 -2
  12. package/dist/builtins/index.js +3 -1
  13. package/dist/builtins/index.js.map +1 -1
  14. package/dist/builtins/monitor.workflow.d.ts +56 -23
  15. package/dist/builtins/monitor.workflow.js +508 -329
  16. package/dist/builtins/monitor.workflow.js.map +1 -1
  17. package/dist/builtins/pi-agent-group.d.ts +72 -0
  18. package/dist/builtins/pi-agent-group.js +1087 -0
  19. package/dist/builtins/pi-agent-group.js.map +1 -0
  20. package/dist/builtins/plain-summary.workflow.d.ts +32 -0
  21. package/dist/builtins/plain-summary.workflow.js +134 -0
  22. package/dist/builtins/plain-summary.workflow.js.map +1 -0
  23. package/dist/builtins/plan-approval.workflow.d.ts +39 -5
  24. package/dist/builtins/plan-approval.workflow.js +92 -14
  25. package/dist/builtins/plan-approval.workflow.js.map +1 -1
  26. package/dist/builtins/plan-change.workflow.d.ts +449 -0
  27. package/dist/builtins/plan-change.workflow.js +256 -0
  28. package/dist/builtins/plan-change.workflow.js.map +1 -0
  29. package/dist/builtins/plan-presentation.js +2 -2
  30. package/dist/builtins/plan-presentation.js.map +1 -1
  31. package/dist/builtins/sanity-check.workflow.d.ts +50 -6
  32. package/dist/builtins/sanity-check.workflow.js +150 -28
  33. package/dist/builtins/sanity-check.workflow.js.map +1 -1
  34. package/dist/controllers/effects.d.ts +3 -2
  35. package/dist/controllers/effects.js +8 -1
  36. package/dist/controllers/effects.js.map +1 -1
  37. package/dist/controllers/index.d.ts +1 -1
  38. package/dist/controllers/index.js +1 -1
  39. package/dist/controllers/index.js.map +1 -1
  40. package/dist/controllers/manager.d.ts +1 -0
  41. package/dist/controllers/manager.js +41 -17
  42. package/dist/controllers/manager.js.map +1 -1
  43. package/dist/controllers/sqlite.d.ts +107 -85
  44. package/dist/controllers/sqlite.js +1611 -1486
  45. package/dist/controllers/sqlite.js.map +1 -1
  46. package/dist/controllers/store.d.ts +9 -8
  47. package/dist/controllers/store.js +1 -31
  48. package/dist/controllers/store.js.map +1 -1
  49. package/dist/controllers/types.d.ts +3 -0
  50. package/dist/controllers/workflow-engine-scheduler.d.ts +1 -1
  51. package/dist/controllers/workflow-engine-scheduler.js +3 -5
  52. package/dist/controllers/workflow-engine-scheduler.js.map +1 -1
  53. package/dist/controllers/workflows.d.ts +2 -2
  54. package/dist/controllers/workflows.js +11 -10
  55. package/dist/controllers/workflows.js.map +1 -1
  56. package/dist/extension/controller-host.js +2 -2
  57. package/dist/extension/controller-host.js.map +1 -1
  58. package/dist/extension/decision-channels.d.ts +4 -2
  59. package/dist/extension/decision-channels.js +333 -146
  60. package/dist/extension/decision-channels.js.map +1 -1
  61. package/dist/extension/executor.d.ts +9 -2
  62. package/dist/extension/executor.js +89 -2
  63. package/dist/extension/executor.js.map +1 -1
  64. package/dist/extension/herdr-viewer.d.ts +0 -1
  65. package/dist/extension/herdr-viewer.js +0 -4
  66. package/dist/extension/herdr-viewer.js.map +1 -1
  67. package/dist/extension/index.js +209 -127
  68. package/dist/extension/index.js.map +1 -1
  69. package/dist/extension/recorder.d.ts +3 -10
  70. package/dist/extension/recorder.js +13 -22
  71. package/dist/extension/recorder.js.map +1 -1
  72. package/dist/extension/session-events.d.ts +2 -2
  73. package/dist/extension/step-message.d.ts +7 -2
  74. package/dist/extension/step-message.js +94 -2
  75. package/dist/extension/step-message.js.map +1 -1
  76. package/dist/extension/widget.js +29 -3
  77. package/dist/extension/widget.js.map +1 -1
  78. package/dist/host/rpc-executor.d.ts +3 -0
  79. package/dist/host/rpc-executor.js +2 -0
  80. package/dist/host/rpc-executor.js.map +1 -1
  81. package/dist/host/runner.d.ts +3 -6
  82. package/dist/host/runner.js +83 -32
  83. package/dist/host/runner.js.map +1 -1
  84. package/dist/render/graph-render.js +15 -10
  85. package/dist/render/graph-render.js.map +1 -1
  86. package/dist/state/database.d.ts +35 -0
  87. package/dist/state/database.js +287 -0
  88. package/dist/state/database.js.map +1 -0
  89. package/dist/state/index.d.ts +4 -0
  90. package/dist/state/index.js +5 -0
  91. package/dist/state/index.js.map +1 -0
  92. package/dist/state/json.d.ts +6 -0
  93. package/dist/state/json.js +38 -0
  94. package/dist/state/json.js.map +1 -0
  95. package/dist/state/mutation.d.ts +57 -0
  96. package/dist/state/mutation.js +255 -0
  97. package/dist/state/mutation.js.map +1 -0
  98. package/dist/state/schema.d.ts +6 -0
  99. package/dist/state/schema.js +473 -0
  100. package/dist/state/schema.js.map +1 -0
  101. package/dist/viewer/cli.d.ts +2 -2
  102. package/dist/viewer/cli.js +142 -122
  103. package/dist/viewer/cli.js.map +1 -1
  104. package/dist/viewer/render.d.ts +4 -4
  105. package/dist/viewer/render.js +9 -23
  106. package/dist/viewer/render.js.map +1 -1
  107. package/dist/viewer/session-reducer.d.ts +1 -1
  108. package/dist/viewer/session-reducer.js +1 -1
  109. package/dist/viewer/tui.d.ts +3 -3
  110. package/dist/viewer/tui.js +15 -13
  111. package/dist/viewer/tui.js.map +1 -1
  112. package/dist/viewer/watch.d.ts +2 -5
  113. package/dist/viewer/watch.js +13 -13
  114. package/dist/viewer/watch.js.map +1 -1
  115. package/dist/workflows/catalog.js +7 -2
  116. package/dist/workflows/catalog.js.map +1 -1
  117. package/dist/workflows/composition.js +20 -2
  118. package/dist/workflows/composition.js.map +1 -1
  119. package/dist/workflows/decision-presentation.d.ts +1 -1
  120. package/dist/workflows/decision-presentation.js +51 -38
  121. package/dist/workflows/decision-presentation.js.map +1 -1
  122. package/dist/workflows/definition.d.ts +6 -2
  123. package/dist/workflows/definition.js +17 -0
  124. package/dist/workflows/definition.js.map +1 -1
  125. package/dist/workflows/engine.d.ts +7 -7
  126. package/dist/workflows/engine.js +196 -115
  127. package/dist/workflows/engine.js.map +1 -1
  128. package/dist/workflows/errors.d.ts +16 -3
  129. package/dist/workflows/errors.js +18 -3
  130. package/dist/workflows/errors.js.map +1 -1
  131. package/dist/workflows/human-decision.d.ts +45 -8
  132. package/dist/workflows/human-decision.js +641 -274
  133. package/dist/workflows/human-decision.js.map +1 -1
  134. package/dist/workflows/index.d.ts +5 -6
  135. package/dist/workflows/index.js +4 -5
  136. package/dist/workflows/index.js.map +1 -1
  137. package/dist/workflows/progress.d.ts +1 -0
  138. package/dist/workflows/progress.js +15 -3
  139. package/dist/workflows/progress.js.map +1 -1
  140. package/dist/workflows/schema.js +27 -1
  141. package/dist/workflows/schema.js.map +1 -1
  142. package/dist/workflows/store.d.ts +83 -103
  143. package/dist/workflows/store.js +907 -951
  144. package/dist/workflows/store.js.map +1 -1
  145. package/dist/workflows/types.d.ts +88 -126
  146. package/docs/CONTROLLERS.md +10 -8
  147. package/docs/DEFERRED_TURNS.md +2 -2
  148. package/docs/DESIGN_PHILOSOPHY.md +4 -2
  149. package/docs/HUMAN_DECISIONS.md +36 -47
  150. package/docs/HUMAN_DECISION_PRESENTATIONS.md +14 -24
  151. package/docs/MONITOR.md +179 -237
  152. package/docs/SQLITE_STATE.md +219 -0
  153. package/docs/WORKFLOW_COMPOSITION.md +27 -26
  154. package/docs/WORKFLOW_STEP_MESSAGES.md +20 -18
  155. package/docs/WORKFLOW_UPDATES.md +10 -9
  156. package/docs/development.md +9 -9
  157. package/docs/live-replay-protocol.md +28 -37
  158. package/docs/plans/2026-08-16-workflow-updates-plan.md +1 -1
  159. package/docs/plans/2026-08-19-human-decision-gates-plan.md +1 -1
  160. package/docs/plans/2026-08-21-autoimplement-timeout-fallback-plan.md +1 -1
  161. package/docs/plans/2026-08-21-plan-change-approval-policy-plan.md +322 -0
  162. package/docs/plans/2026-08-21-sanity-check-plan.md +217 -95
  163. package/docs/plans/2026-08-22-goal-finishing-monitor-plan.md +200 -0
  164. package/docs/plans/2026-08-23-assistant-agent-completion-plan.md +701 -0
  165. package/docs/plans/2026-08-23-sqlite-state-plan.md +970 -0
  166. package/docs/plans/replayable-run-bundles-implementation-plan.md +2 -2
  167. package/docs/plans/session-event-replay-implementation-plan.md +1 -1
  168. package/docs/plans/tui-viewer-implementation-plan.md +1 -1
  169. package/docs/session-event-journal.md +63 -434
  170. package/docs/tui-viewer.md +13 -15
  171. package/docs/workflows.md +127 -53
  172. package/examples/workflows/approved-plan.workflow.ts +19 -46
  173. package/examples/workflows/plain-summary.workflow.ts +1 -0
  174. package/herdr-plugin.toml +1 -1
  175. package/package.json +7 -7
  176. package/plugins/herdr/viewer.mjs +1 -11
  177. package/schemas/human-decision-accepted-v1.schema.json +15 -3
  178. package/schemas/human-decision-continuation-v1.schema.json +10 -1
  179. package/schemas/human-decision-delivery-v1.schema.json +8 -0
  180. package/schemas/human-decision-receipt-v1.schema.json +8 -0
  181. package/schemas/human-decision-request-v1.schema.json +24 -4
  182. package/skills/autoimplement/SKILL.md +27 -0
  183. package/skills/autoplan/SKILL.md +5 -4
  184. package/skills/monitor/SKILL.md +91 -135
  185. package/skills/pi-workflows/SKILL.md +9 -8
  186. package/skills/sanity-check/SKILL.md +44 -0
  187. package/src/builtins/autoimplement.workflow.ts +19 -118
  188. package/src/builtins/autoplan.workflow.ts +290 -40
  189. package/src/builtins/catalog.ts +7 -5
  190. package/src/builtins/index.ts +18 -1
  191. package/src/builtins/monitor.workflow.ts +673 -382
  192. package/src/builtins/pi-agent-group.ts +1407 -0
  193. package/src/builtins/plain-summary.workflow.ts +185 -0
  194. package/src/builtins/plan-approval.workflow.ts +157 -24
  195. package/src/builtins/plan-change.workflow.ts +321 -0
  196. package/src/builtins/plan-presentation.ts +2 -2
  197. package/src/builtins/sanity-check.workflow.ts +248 -48
  198. package/src/controllers/effects.ts +7 -0
  199. package/src/controllers/index.ts +0 -6
  200. package/src/controllers/manager.ts +72 -32
  201. package/src/controllers/sqlite.ts +2420 -1948
  202. package/src/controllers/store.ts +17 -38
  203. package/src/controllers/types.ts +3 -0
  204. package/src/controllers/workflow-engine-scheduler.ts +4 -8
  205. package/src/controllers/workflows.ts +45 -21
  206. package/src/extension/controller-host.ts +1 -2
  207. package/src/extension/decision-channels.ts +456 -203
  208. package/src/extension/executor.ts +105 -2
  209. package/src/extension/herdr-viewer.ts +0 -5
  210. package/src/extension/index.ts +251 -151
  211. package/src/extension/recorder.ts +13 -22
  212. package/src/extension/session-events.ts +2 -2
  213. package/src/extension/step-message.ts +106 -4
  214. package/src/extension/widget.ts +32 -5
  215. package/src/host/rpc-executor.ts +4 -0
  216. package/src/host/runner.ts +93 -41
  217. package/src/render/graph-render.ts +12 -6
  218. package/src/state/database.ts +375 -0
  219. package/src/state/index.ts +29 -0
  220. package/src/state/json.ts +42 -0
  221. package/src/state/mutation.ts +435 -0
  222. package/src/state/schema.ts +475 -0
  223. package/src/viewer/cli.ts +151 -144
  224. package/src/viewer/render.ts +19 -30
  225. package/src/viewer/session-reducer.ts +1 -1
  226. package/src/viewer/tui.ts +18 -17
  227. package/src/viewer/watch.ts +13 -17
  228. package/src/workflows/catalog.ts +7 -2
  229. package/src/workflows/composition.ts +21 -3
  230. package/src/workflows/decision-presentation.ts +56 -43
  231. package/src/workflows/definition.ts +36 -3
  232. package/src/workflows/engine.ts +228 -130
  233. package/src/workflows/errors.ts +27 -3
  234. package/src/workflows/human-decision.ts +921 -349
  235. package/src/workflows/index.ts +20 -30
  236. package/src/workflows/progress.ts +18 -3
  237. package/src/workflows/schema.ts +36 -1
  238. package/src/workflows/store.ts +1300 -1163
  239. package/src/workflows/types.ts +100 -137
  240. package/dist/builtins/sanity-check-session.d.ts +0 -17
  241. package/dist/builtins/sanity-check-session.js +0 -168
  242. package/dist/builtins/sanity-check-session.js.map +0 -1
  243. package/dist/workflows/artifacts.d.ts +0 -40
  244. package/dist/workflows/artifacts.js +0 -155
  245. package/dist/workflows/artifacts.js.map +0 -1
  246. package/dist/workflows/migrate-sources.d.ts +0 -42
  247. package/dist/workflows/migrate-sources.js +0 -133
  248. package/dist/workflows/migrate-sources.js.map +0 -1
  249. package/docs/run-bundles.md +0 -481
  250. package/schemas/human-decision-accepted-v2.schema.json +0 -50
  251. package/schemas/human-decision-delivery-v2.schema.json +0 -36
  252. package/schemas/human-decision-receipt-v2.schema.json +0 -39
  253. package/schemas/human-decision-request-v2.schema.json +0 -69
  254. package/schemas/human-decision-resolution-v2.schema.json +0 -27
  255. package/src/builtins/sanity-check-session.ts +0 -205
  256. package/src/workflows/artifacts.ts +0 -188
  257. package/src/workflows/migrate-sources.ts +0 -178
@@ -1,105 +1,30 @@
1
- import type { WorkflowDefinition, WorkflowDefinitionSnapshot, WorkflowRunManifest, WorkflowRunState, WorkflowSessionBinding, WorkflowSessionCapture, WorkflowSessionEntryRecord, WorkflowSessionEventRecord, WorkflowTraceEvent, WorkflowTraceEventDraft, WorkflowUpdateInput, WorkflowUpdateRecord } from "./types.js";
2
- export declare const RUN_BUNDLE_SCHEMA: "pi-workflows.run-bundle.v1";
1
+ import { StateDatabase } from "../state/database.js";
2
+ import { type MutationActor, type OwnerType } from "../state/mutation.js";
3
+ import type { WorkflowDefinition, WorkflowDefinitionSnapshot, WorkflowRunState, WorkflowSessionBinding, WorkflowSessionCapture, WorkflowSessionEntryRecord, WorkflowSessionEventRecord, WorkflowTraceEvent, WorkflowTraceEventDraft, WorkflowUpdateInput, WorkflowUpdateRecord } from "./types.js";
3
4
  export declare const RUN_STATE_SCHEMA: "pi-workflows.run-state.v1";
4
- export declare const TRACE_EVENT_SCHEMA: "pi-workflows.trace-event.v1";
5
5
  export declare const DEFINITION_SNAPSHOT_SCHEMA: "pi-workflows.definition-snapshot.v1";
6
6
  export declare const SESSION_BINDING_SCHEMA: "pi-workflows.session-binding.v1";
7
7
  export declare const SESSION_EVENT_SCHEMA: "pi-workflows.session-event.v1";
8
8
  export declare const SESSION_CAPTURE_SCHEMA: "pi-workflows.session-capture.v1";
9
9
  export declare const SESSION_EVENT_MAX_BYTES: number;
10
- /** Runs directory: `$PI_WORKFLOWS_RUNS_DIR` or `~/.pi/agent/workflows/runs`. */
11
- export declare function workflowRunsBaseDir(homeDir?: string): string;
10
+ export declare function workflowStateDatabasePath(homeDir?: string): string;
12
11
  export declare function createRunId(workflowName: string, now?: Date): string;
13
- /**
14
- * Persists run bundles (see docs/run-bundles.md). `trace.ndjson` is the
15
- * append-only source of truth; every transition appends the trace event
16
- * first, then atomically replaces `state.json` (carrying `traceSeq`) and
17
- * `manifest.json`. Large string leaves in persisted values are externalized
18
- * into content-addressed `artifacts/`. Bundles are private: directories are
19
- * 0700 and files 0600.
20
- */
21
- /**
22
- * A fence proves the writer still owns the run. It is checked before every
23
- * locked write; it throws (ClaimLostError) when the queue claim was lost, so
24
- * a stalled runner can never interleave writes with the new claim holder.
25
- */
26
- export type RunFence = () => void;
12
+ export type RunWriteAuthority = {
13
+ actor: MutationActor;
14
+ ownerType: OwnerType;
15
+ ownerId: string;
16
+ token: string;
17
+ generation: number;
18
+ };
27
19
  export type WorkflowRunStoreOptions = {
28
- fenceProvider?: (runDir: string) => RunFence | undefined;
20
+ authorityProvider?: (runId: string) => RunWriteAuthority | undefined;
21
+ state?: StateDatabase;
22
+ readOnly?: boolean;
29
23
  };
30
- export declare class WorkflowRunStore {
31
- readonly outputRoot: string;
32
- private readonly fenceProvider;
33
- private readonly contexts;
34
- constructor(outputRoot?: string, options?: WorkflowRunStoreOptions);
35
- runDirFor(runId: string): string;
36
- quarantineIncompleteRun(runId: string): Promise<string | undefined>;
37
- private contextFor;
38
- private streamFor;
39
- /**
40
- * Run `task` exclusively for this bundle. Sequence numbers are assigned
41
- * inside the lock, so physical file order always matches logical order.
42
- */
43
- private withRunLock;
44
- private withSessionEventLock;
45
- initializeRunBundle(workflow: WorkflowDefinition, state: WorkflowRunState): Promise<string>;
46
- /**
47
- * Prepare an interrupted bundle for resume. Repairs a torn trace tail,
48
- * drops trace events the state projection never recorded, and seeds the
49
- * in-process context so new events continue the sequence. The caller must
50
- * hold the run's queue claim; the fence is verified before any write.
51
- */
52
- prepareRunResume(runId: string): Promise<LoadedRunBundle>;
53
- /**
54
- * Finalize captures left "recording" by a session that is gone, so they
55
- * report failed with the reason instead of dangling forever.
56
- */
57
- private finalizeRecordingCaptures;
58
- /** Mark a nonterminal bundle failed and append an interruption event. */
59
- markRunInterrupted(runId: string, reason?: string): Promise<LoadedRunBundle | null>;
60
- /** Publish one durable update under the run's serialized claim-fenced writer. */
61
- publishUpdate(runDir: string, state: WorkflowRunState, nodeId: string, attemptId: string, update: WorkflowUpdateInput, options?: {
62
- signal?: AbortSignal;
63
- }): Promise<{
64
- event: WorkflowTraceEvent;
65
- record: WorkflowUpdateRecord;
66
- }>;
67
- /**
68
- * Persist one transition: append the trace event, then rewrite the
69
- * projections reflecting it.
70
- */
71
- writeSnapshot(runDir: string, state: WorkflowRunState, event: WorkflowTraceEventDraft): Promise<WorkflowTraceEvent>;
72
- /**
73
- * Bind the run to a Pi conversation: write `session/binding.json` once and
74
- * append a `session_bound` trace event. Projections catch up on the next
75
- * snapshot.
76
- */
77
- /** True when a session binding already exists for this bundle. */
78
- hasSessionBinding(runDir: string): Promise<boolean>;
79
- /** List capture segment attempt ids under `session/segments/`. */
80
- listSessionSegments(runDir: string): Promise<string[]>;
81
- writeSessionBinding(runDir: string, binding: WorkflowSessionBinding, attemptId?: string): Promise<void>;
82
- /** Append one verbatim Pi session entry to `session/entries.ndjson`. */
83
- appendSessionEntry(runDir: string, entry: Record<string, unknown>, attemptId?: string): Promise<number>;
84
- /** Append a fully stamped ordered batch to `session/events.ndjson`. */
85
- appendSessionEventBatch(runDir: string, records: WorkflowSessionEventRecord[], attemptId?: string): Promise<void>;
86
- /** Atomically replace the temporal capture integrity projection. */
87
- writeSessionCapture(runDir: string, capture: WorkflowSessionCapture, attemptId?: string): Promise<void>;
88
- /** Count complete durable session records after both writers have drained. */
89
- sessionCounts(runDir: string, attemptId?: string): Promise<{
90
- eventCount: number;
91
- entryCount: number;
92
- lastEventSeq: number;
93
- }>;
94
- private appendTraceEvent;
95
- private writeProjections;
96
- private writeLoadedProjections;
97
- }
98
24
  export type SessionCaptureIntegrity = {
99
25
  status: "unavailable" | "recording" | "complete" | "failed" | "invalid";
100
26
  diagnostics: string[];
101
27
  };
102
- /** One capture attempt: the session data a single recorder wrote. */
103
28
  export type SessionCaptureSegment = {
104
29
  attemptId: string;
105
30
  binding: WorkflowSessionBinding | null;
@@ -108,29 +33,84 @@ export type SessionCaptureSegment = {
108
33
  capture: WorkflowSessionCapture | null;
109
34
  integrity: SessionCaptureIntegrity;
110
35
  };
111
- export type LoadedRunBundle = {
112
- runDir: string;
113
- manifest: WorkflowRunManifest;
36
+ export type LoadedWorkflowRun = {
37
+ runId: string;
114
38
  state: WorkflowRunState;
115
- snapshot: WorkflowDefinitionSnapshot | null;
116
- /** Full durable trace when loaded by the current reader. */
39
+ snapshot: WorkflowDefinitionSnapshot;
117
40
  traceEvents?: WorkflowTraceEvent[];
118
41
  sessionBinding: WorkflowSessionBinding | null;
119
42
  sessionEntries: WorkflowSessionEntryRecord[];
120
43
  sessionEvents: WorkflowSessionEventRecord[];
121
44
  sessionCapture: WorkflowSessionCapture | null;
122
45
  sessionIntegrity: SessionCaptureIntegrity;
123
- /** Per-attempt captures written after a handoff or resume. */
124
46
  sessionSegments: SessionCaptureSegment[];
125
47
  };
126
- /** Read the final trace record without loading the rest of a run bundle. */
127
- export declare function readLastTraceEvent(runDir: string, tracePath?: string): Promise<WorkflowTraceEvent | null>;
128
- export type ReadRunBundleOptions = {
129
- /** Load the full append-only trace. Detail views need it; run lists do not. */
48
+ export type ReadWorkflowRunOptions = {
130
49
  includeTrace?: boolean;
131
50
  };
132
- /** Read a run bundle from disk. Returns null when the bundle is unreadable. */
133
- export declare function readRunBundle(runDir: string, options?: ReadRunBundleOptions): Promise<LoadedRunBundle | null>;
134
- /** List run bundles under `outputRoot`, most recently started first. */
135
- export declare function listRunBundles(outputRoot: string): Promise<LoadedRunBundle[]>;
51
+ export declare class WorkflowRunStore {
52
+ readonly databasePath: string;
53
+ readonly state: StateDatabase;
54
+ private readonly authorityProvider;
55
+ private readonly contexts;
56
+ private readonly ownsState;
57
+ constructor(databasePath?: string, options?: WorkflowRunStoreOptions);
58
+ close(): void;
59
+ initializeRun(workflow: WorkflowDefinition, state: WorkflowRunState): Promise<string>;
60
+ prepareRunResume(runId: string): Promise<LoadedWorkflowRun>;
61
+ markRunInterrupted(runId: string, reason?: string): Promise<LoadedWorkflowRun | null>;
62
+ publishUpdate(runId: string, state: WorkflowRunState, nodeId: string, attemptId: string, update: WorkflowUpdateInput, options?: {
63
+ signal?: AbortSignal;
64
+ }): Promise<{
65
+ event: WorkflowTraceEvent;
66
+ record: WorkflowUpdateRecord;
67
+ }>;
68
+ writeSnapshot(runId: string, state: WorkflowRunState, event: WorkflowTraceEventDraft): Promise<WorkflowTraceEvent>;
69
+ hasSessionBinding(runId: string): Promise<boolean>;
70
+ listSessionSegments(runId: string): Promise<string[]>;
71
+ writeSessionBinding(runId: string, binding: WorkflowSessionBinding, attemptId?: string): Promise<void>;
72
+ appendSessionEntry(runId: string, entry: Record<string, unknown>, attemptId?: string): Promise<number>;
73
+ appendSessionEventBatch(runId: string, records: WorkflowSessionEventRecord[], attemptId?: string): Promise<void>;
74
+ writeSessionCapture(runId: string, capture: WorkflowSessionCapture, attemptId?: string): Promise<void>;
75
+ sessionCounts(runId: string, attemptId?: string): Promise<{
76
+ eventCount: number;
77
+ entryCount: number;
78
+ lastEventSeq: number;
79
+ }>;
80
+ readRun(runId: string, options?: ReadWorkflowRunOptions): LoadedWorkflowRun | null;
81
+ listRuns(options?: ReadWorkflowRunOptions): LoadedWorkflowRun[];
82
+ readLastTraceEvent(runId: string): WorkflowTraceEvent | null;
83
+ private contextFor;
84
+ private withRunLock;
85
+ private assertSessionWriteAuthority;
86
+ private resourceRevision;
87
+ private requireResourceRevision;
88
+ private bumpResource;
89
+ private assertWriteAuthority;
90
+ private persistRunState;
91
+ private enqueueRunSettlementEffect;
92
+ private syncNodeAttempts;
93
+ private ensureAttempt;
94
+ private nextAttemptNumber;
95
+ private nextUpdateSequence;
96
+ private readRunRow;
97
+ private requireRunRow;
98
+ private readState;
99
+ private readDefinition;
100
+ private traceEvents;
101
+ private segmentRows;
102
+ private segmentRow;
103
+ private requireSegment;
104
+ private loadSegment;
105
+ private finalizeRecordingCaptures;
106
+ }
107
+ export declare function readWorkflowRun(runId: string, options?: ReadWorkflowRunOptions & {
108
+ databasePath?: string;
109
+ }): LoadedWorkflowRun | null;
110
+ export declare function listWorkflowRuns(options?: ReadWorkflowRunOptions & {
111
+ databasePath?: string;
112
+ }): LoadedWorkflowRun[];
113
+ export declare function readLastTraceEvent(runId: string, options?: {
114
+ databasePath?: string;
115
+ }): WorkflowTraceEvent | null;
136
116
  export declare function createDefinitionSnapshot(workflow: WorkflowDefinition): WorkflowDefinitionSnapshot;