im_wower
·
2026-03-21
state.ts
1import {
2 DEFAULT_RUN_LAYOUT_VERSION,
3 type RunMetadata,
4 type RunMetadataInput,
5 type RunStatePatch,
6 type RunStateSnapshot,
7 type RunStateSnapshotInput
8} from "./contracts";
9
10export function createRunMetadata(input: RunMetadataInput): RunMetadata {
11 return {
12 layoutVersion: DEFAULT_RUN_LAYOUT_VERSION,
13 taskId: input.taskId,
14 stepId: input.stepId,
15 stepName: input.stepName,
16 runId: input.runId,
17 workerKind: input.workerKind,
18 attempt: input.attempt,
19 repoRoot: input.repoRoot,
20 worktreePath: input.worktreePath,
21 createdAt: input.createdAt,
22 checkpointMode: input.checkpointMode,
23 promptSummary: input.promptSummary,
24 command: input.command
25 };
26}
27
28export function createRunStateSnapshot(input: RunStateSnapshotInput): RunStateSnapshot {
29 return {
30 status: "prepared",
31 attempt: input.attempt,
32 startedAt: input.startedAt,
33 updatedAt: input.startedAt,
34 lastEventSeq: 0,
35 checkpointSeq: input.checkpointSeq ?? 0,
36 summary: input.summary
37 };
38}
39
40export function updateRunState(
41 snapshot: RunStateSnapshot,
42 patch: RunStatePatch
43): RunStateSnapshot {
44 return {
45 ...snapshot,
46 status: patch.status ?? snapshot.status,
47 updatedAt: patch.updatedAt ?? snapshot.updatedAt,
48 finishedAt: patch.finishedAt ?? snapshot.finishedAt,
49 lastEventSeq: patch.lastEventSeq ?? snapshot.lastEventSeq,
50 checkpointSeq: patch.checkpointSeq ?? snapshot.checkpointSeq,
51 summary: patch.summary ?? snapshot.summary,
52 exitCode: patch.exitCode ?? snapshot.exitCode
53 };
54}