botmux 2.33.0 → 2.33.1

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 (281) hide show
  1. package/README.en.md +12 -1
  2. package/README.md +45 -1
  3. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  4. package/dist/adapters/cli/claude-code.js +11 -0
  5. package/dist/adapters/cli/claude-code.js.map +1 -1
  6. package/dist/cli/bots-list-output.d.ts +21 -0
  7. package/dist/cli/bots-list-output.d.ts.map +1 -0
  8. package/dist/cli/bots-list-output.js +23 -0
  9. package/dist/cli/bots-list-output.js.map +1 -0
  10. package/dist/cli/workflow.d.ts +13 -0
  11. package/dist/cli/workflow.d.ts.map +1 -0
  12. package/dist/cli/workflow.js +781 -0
  13. package/dist/cli/workflow.js.map +1 -0
  14. package/dist/cli.js +69 -14
  15. package/dist/cli.js.map +1 -1
  16. package/dist/core/command-handler.d.ts.map +1 -1
  17. package/dist/core/command-handler.js +211 -4
  18. package/dist/core/command-handler.js.map +1 -1
  19. package/dist/core/session-manager.d.ts +6 -1
  20. package/dist/core/session-manager.d.ts.map +1 -1
  21. package/dist/core/session-manager.js +22 -12
  22. package/dist/core/session-manager.js.map +1 -1
  23. package/dist/core/worker-pool.d.ts +13 -0
  24. package/dist/core/worker-pool.d.ts.map +1 -1
  25. package/dist/core/worker-pool.js +100 -6
  26. package/dist/core/worker-pool.js.map +1 -1
  27. package/dist/daemon.d.ts +3 -0
  28. package/dist/daemon.d.ts.map +1 -1
  29. package/dist/daemon.js +884 -3
  30. package/dist/daemon.js.map +1 -1
  31. package/dist/dashboard/auth.d.ts +36 -0
  32. package/dist/dashboard/auth.d.ts.map +1 -1
  33. package/dist/dashboard/auth.js +22 -0
  34. package/dist/dashboard/auth.js.map +1 -1
  35. package/dist/dashboard/web/app.js +20 -1
  36. package/dist/dashboard/web/app.js.map +1 -1
  37. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  38. package/dist/dashboard/web/i18n.js +356 -0
  39. package/dist/dashboard/web/i18n.js.map +1 -1
  40. package/dist/dashboard/web/workflow-catalog.d.ts +2 -0
  41. package/dist/dashboard/web/workflow-catalog.d.ts.map +1 -0
  42. package/dist/dashboard/web/workflow-catalog.js +323 -0
  43. package/dist/dashboard/web/workflow-catalog.js.map +1 -0
  44. package/dist/dashboard/web/workflows.d.ts +2 -0
  45. package/dist/dashboard/web/workflows.d.ts.map +1 -0
  46. package/dist/dashboard/web/workflows.js +1618 -0
  47. package/dist/dashboard/web/workflows.js.map +1 -0
  48. package/dist/dashboard/workflow-api.d.ts +23 -0
  49. package/dist/dashboard/workflow-api.d.ts.map +1 -0
  50. package/dist/dashboard/workflow-api.js +463 -0
  51. package/dist/dashboard/workflow-api.js.map +1 -0
  52. package/dist/dashboard-web/app.js +494 -199
  53. package/dist/dashboard-web/index.html +1 -0
  54. package/dist/dashboard-web/style.css +160 -6
  55. package/dist/dashboard-web/terminal-replay.html +227 -0
  56. package/dist/dashboard.js +29 -12
  57. package/dist/dashboard.js.map +1 -1
  58. package/dist/i18n/en.d.ts.map +1 -1
  59. package/dist/i18n/en.js +12 -0
  60. package/dist/i18n/en.js.map +1 -1
  61. package/dist/i18n/zh.d.ts.map +1 -1
  62. package/dist/i18n/zh.js +12 -0
  63. package/dist/i18n/zh.js.map +1 -1
  64. package/dist/im/lark/card-handler.d.ts +3 -0
  65. package/dist/im/lark/card-handler.d.ts.map +1 -1
  66. package/dist/im/lark/card-handler.js +27 -1
  67. package/dist/im/lark/card-handler.js.map +1 -1
  68. package/dist/im/lark/client.d.ts +19 -2
  69. package/dist/im/lark/client.d.ts.map +1 -1
  70. package/dist/im/lark/client.js +21 -2
  71. package/dist/im/lark/client.js.map +1 -1
  72. package/dist/im/lark/workflow-card-handler.d.ts +50 -0
  73. package/dist/im/lark/workflow-card-handler.d.ts.map +1 -0
  74. package/dist/im/lark/workflow-card-handler.js +152 -0
  75. package/dist/im/lark/workflow-card-handler.js.map +1 -0
  76. package/dist/im/lark/workflow-cards.d.ts +46 -0
  77. package/dist/im/lark/workflow-cards.d.ts.map +1 -0
  78. package/dist/im/lark/workflow-cards.js +226 -0
  79. package/dist/im/lark/workflow-cards.js.map +1 -0
  80. package/dist/im/lark/workflow-progress-card.d.ts +76 -0
  81. package/dist/im/lark/workflow-progress-card.d.ts.map +1 -0
  82. package/dist/im/lark/workflow-progress-card.js +279 -0
  83. package/dist/im/lark/workflow-progress-card.js.map +1 -0
  84. package/dist/im/lark/workflow-slash-command.d.ts +92 -0
  85. package/dist/im/lark/workflow-slash-command.d.ts.map +1 -0
  86. package/dist/im/lark/workflow-slash-command.js +185 -0
  87. package/dist/im/lark/workflow-slash-command.js.map +1 -0
  88. package/dist/services/group-creator.d.ts.map +1 -1
  89. package/dist/services/group-creator.js +17 -4
  90. package/dist/services/group-creator.js.map +1 -1
  91. package/dist/services/groups-store.d.ts +11 -0
  92. package/dist/services/groups-store.d.ts.map +1 -1
  93. package/dist/services/groups-store.js +26 -0
  94. package/dist/services/groups-store.js.map +1 -1
  95. package/dist/services/jsonl-cursor.d.ts +12 -0
  96. package/dist/services/jsonl-cursor.d.ts.map +1 -0
  97. package/dist/services/jsonl-cursor.js +45 -0
  98. package/dist/services/jsonl-cursor.js.map +1 -0
  99. package/dist/services/schedule-store.d.ts +35 -0
  100. package/dist/services/schedule-store.d.ts.map +1 -1
  101. package/dist/services/schedule-store.js +108 -1
  102. package/dist/services/schedule-store.js.map +1 -1
  103. package/dist/skills/definitions.d.ts.map +1 -1
  104. package/dist/skills/definitions.js +399 -0
  105. package/dist/skills/definitions.js.map +1 -1
  106. package/dist/types.d.ts +4 -0
  107. package/dist/types.d.ts.map +1 -1
  108. package/dist/utils/cli-usage-limit.d.ts.map +1 -1
  109. package/dist/utils/cli-usage-limit.js +4 -0
  110. package/dist/utils/cli-usage-limit.js.map +1 -1
  111. package/dist/worker.js +118 -14
  112. package/dist/worker.js.map +1 -1
  113. package/dist/workflows/attempt-resume.d.ts +114 -0
  114. package/dist/workflows/attempt-resume.d.ts.map +1 -0
  115. package/dist/workflows/attempt-resume.js +385 -0
  116. package/dist/workflows/attempt-resume.js.map +1 -0
  117. package/dist/workflows/attempt-terminal.d.ts +21 -0
  118. package/dist/workflows/attempt-terminal.d.ts.map +1 -0
  119. package/dist/workflows/attempt-terminal.js +7 -0
  120. package/dist/workflows/attempt-terminal.js.map +1 -0
  121. package/dist/workflows/blob.d.ts +27 -0
  122. package/dist/workflows/blob.d.ts.map +1 -0
  123. package/dist/workflows/blob.js +39 -0
  124. package/dist/workflows/blob.js.map +1 -0
  125. package/dist/workflows/cancel-run.d.ts +45 -0
  126. package/dist/workflows/cancel-run.d.ts.map +1 -0
  127. package/dist/workflows/cancel-run.js +99 -0
  128. package/dist/workflows/cancel-run.js.map +1 -0
  129. package/dist/workflows/cancel.d.ts +111 -0
  130. package/dist/workflows/cancel.d.ts.map +1 -0
  131. package/dist/workflows/cancel.js +120 -0
  132. package/dist/workflows/cancel.js.map +1 -0
  133. package/dist/workflows/catalog.d.ts +60 -0
  134. package/dist/workflows/catalog.d.ts.map +1 -0
  135. package/dist/workflows/catalog.js +119 -0
  136. package/dist/workflows/catalog.js.map +1 -0
  137. package/dist/workflows/cold-attach.d.ts +30 -0
  138. package/dist/workflows/cold-attach.d.ts.map +1 -0
  139. package/dist/workflows/cold-attach.js +40 -0
  140. package/dist/workflows/cold-attach.js.map +1 -0
  141. package/dist/workflows/cold-scan.d.ts +21 -0
  142. package/dist/workflows/cold-scan.d.ts.map +1 -0
  143. package/dist/workflows/cold-scan.js +70 -0
  144. package/dist/workflows/cold-scan.js.map +1 -0
  145. package/dist/workflows/daemon-spawn.d.ts +117 -0
  146. package/dist/workflows/daemon-spawn.d.ts.map +1 -0
  147. package/dist/workflows/daemon-spawn.js +551 -0
  148. package/dist/workflows/daemon-spawn.js.map +1 -0
  149. package/dist/workflows/definition.d.ts +1309 -0
  150. package/dist/workflows/definition.d.ts.map +1 -0
  151. package/dist/workflows/definition.js +334 -0
  152. package/dist/workflows/definition.js.map +1 -0
  153. package/dist/workflows/effect-input.d.ts +4 -0
  154. package/dist/workflows/effect-input.d.ts.map +1 -0
  155. package/dist/workflows/effect-input.js +18 -0
  156. package/dist/workflows/effect-input.js.map +1 -0
  157. package/dist/workflows/events/append.d.ts +77 -0
  158. package/dist/workflows/events/append.d.ts.map +1 -0
  159. package/dist/workflows/events/append.js +214 -0
  160. package/dist/workflows/events/append.js.map +1 -0
  161. package/dist/workflows/events/idempotency.d.ts +77 -0
  162. package/dist/workflows/events/idempotency.d.ts.map +1 -0
  163. package/dist/workflows/events/idempotency.js +116 -0
  164. package/dist/workflows/events/idempotency.js.map +1 -0
  165. package/dist/workflows/events/index.d.ts +7 -0
  166. package/dist/workflows/events/index.d.ts.map +1 -0
  167. package/dist/workflows/events/index.js +7 -0
  168. package/dist/workflows/events/index.js.map +1 -0
  169. package/dist/workflows/events/payloads.d.ts +917 -0
  170. package/dist/workflows/events/payloads.d.ts.map +1 -0
  171. package/dist/workflows/events/payloads.js +337 -0
  172. package/dist/workflows/events/payloads.js.map +1 -0
  173. package/dist/workflows/events/replay.d.ts +238 -0
  174. package/dist/workflows/events/replay.d.ts.map +1 -0
  175. package/dist/workflows/events/replay.js +608 -0
  176. package/dist/workflows/events/replay.js.map +1 -0
  177. package/dist/workflows/events/schema.d.ts +5242 -0
  178. package/dist/workflows/events/schema.d.ts.map +1 -0
  179. package/dist/workflows/events/schema.js +295 -0
  180. package/dist/workflows/events/schema.js.map +1 -0
  181. package/dist/workflows/events/types.d.ts +34 -0
  182. package/dist/workflows/events/types.d.ts.map +1 -0
  183. package/dist/workflows/events/types.js +2 -0
  184. package/dist/workflows/events/types.js.map +1 -0
  185. package/dist/workflows/fanout.d.ts +36 -0
  186. package/dist/workflows/fanout.d.ts.map +1 -0
  187. package/dist/workflows/fanout.js +114 -0
  188. package/dist/workflows/fanout.js.map +1 -0
  189. package/dist/workflows/hostExecutors/botmux-schedule.d.ts +41 -0
  190. package/dist/workflows/hostExecutors/botmux-schedule.d.ts.map +1 -0
  191. package/dist/workflows/hostExecutors/botmux-schedule.js +121 -0
  192. package/dist/workflows/hostExecutors/botmux-schedule.js.map +1 -0
  193. package/dist/workflows/hostExecutors/feishu-im.d.ts +12 -0
  194. package/dist/workflows/hostExecutors/feishu-im.d.ts.map +1 -0
  195. package/dist/workflows/hostExecutors/feishu-im.js +49 -0
  196. package/dist/workflows/hostExecutors/feishu-im.js.map +1 -0
  197. package/dist/workflows/hostExecutors/feishu-reply.d.ts +24 -0
  198. package/dist/workflows/hostExecutors/feishu-reply.d.ts.map +1 -0
  199. package/dist/workflows/hostExecutors/feishu-reply.js +88 -0
  200. package/dist/workflows/hostExecutors/feishu-reply.js.map +1 -0
  201. package/dist/workflows/hostExecutors/feishu-send.d.ts +23 -0
  202. package/dist/workflows/hostExecutors/feishu-send.d.ts.map +1 -0
  203. package/dist/workflows/hostExecutors/feishu-send.js +124 -0
  204. package/dist/workflows/hostExecutors/feishu-send.js.map +1 -0
  205. package/dist/workflows/hostExecutors/index.d.ts +8 -0
  206. package/dist/workflows/hostExecutors/index.d.ts.map +1 -0
  207. package/dist/workflows/hostExecutors/index.js +8 -0
  208. package/dist/workflows/hostExecutors/index.js.map +1 -0
  209. package/dist/workflows/hostExecutors/protocol.d.ts +42 -0
  210. package/dist/workflows/hostExecutors/protocol.d.ts.map +1 -0
  211. package/dist/workflows/hostExecutors/protocol.js +181 -0
  212. package/dist/workflows/hostExecutors/protocol.js.map +1 -0
  213. package/dist/workflows/hostExecutors/registry.d.ts +10 -0
  214. package/dist/workflows/hostExecutors/registry.d.ts.map +1 -0
  215. package/dist/workflows/hostExecutors/registry.js +36 -0
  216. package/dist/workflows/hostExecutors/registry.js.map +1 -0
  217. package/dist/workflows/hostExecutors/types.d.ts +78 -0
  218. package/dist/workflows/hostExecutors/types.d.ts.map +1 -0
  219. package/dist/workflows/hostExecutors/types.js +2 -0
  220. package/dist/workflows/hostExecutors/types.js.map +1 -0
  221. package/dist/workflows/loader.d.ts +16 -0
  222. package/dist/workflows/loader.d.ts.map +1 -0
  223. package/dist/workflows/loader.js +56 -0
  224. package/dist/workflows/loader.js.map +1 -0
  225. package/dist/workflows/loop.d.ts +50 -0
  226. package/dist/workflows/loop.d.ts.map +1 -0
  227. package/dist/workflows/loop.js +350 -0
  228. package/dist/workflows/loop.js.map +1 -0
  229. package/dist/workflows/ops-projection.d.ts +168 -0
  230. package/dist/workflows/ops-projection.d.ts.map +1 -0
  231. package/dist/workflows/ops-projection.js +707 -0
  232. package/dist/workflows/ops-projection.js.map +1 -0
  233. package/dist/workflows/orchestrator.d.ts +107 -0
  234. package/dist/workflows/orchestrator.d.ts.map +1 -0
  235. package/dist/workflows/orchestrator.js +197 -0
  236. package/dist/workflows/orchestrator.js.map +1 -0
  237. package/dist/workflows/output-binding.d.ts +70 -0
  238. package/dist/workflows/output-binding.d.ts.map +1 -0
  239. package/dist/workflows/output-binding.js +265 -0
  240. package/dist/workflows/output-binding.js.map +1 -0
  241. package/dist/workflows/params.d.ts +61 -0
  242. package/dist/workflows/params.d.ts.map +1 -0
  243. package/dist/workflows/params.js +195 -0
  244. package/dist/workflows/params.js.map +1 -0
  245. package/dist/workflows/resume.d.ts +263 -0
  246. package/dist/workflows/resume.d.ts.map +1 -0
  247. package/dist/workflows/resume.js +808 -0
  248. package/dist/workflows/resume.js.map +1 -0
  249. package/dist/workflows/run-id.d.ts +2 -0
  250. package/dist/workflows/run-id.d.ts.map +1 -0
  251. package/dist/workflows/run-id.js +7 -0
  252. package/dist/workflows/run-id.js.map +1 -0
  253. package/dist/workflows/run-init.d.ts +48 -0
  254. package/dist/workflows/run-init.d.ts.map +1 -0
  255. package/dist/workflows/run-init.js +99 -0
  256. package/dist/workflows/run-init.js.map +1 -0
  257. package/dist/workflows/runs-dir.d.ts +4 -0
  258. package/dist/workflows/runs-dir.d.ts.map +1 -0
  259. package/dist/workflows/runs-dir.js +15 -0
  260. package/dist/workflows/runs-dir.js.map +1 -0
  261. package/dist/workflows/runtime.d.ts +211 -0
  262. package/dist/workflows/runtime.d.ts.map +1 -0
  263. package/dist/workflows/runtime.js +594 -0
  264. package/dist/workflows/runtime.js.map +1 -0
  265. package/dist/workflows/spawn-bot.d.ts +165 -0
  266. package/dist/workflows/spawn-bot.d.ts.map +1 -0
  267. package/dist/workflows/spawn-bot.js +215 -0
  268. package/dist/workflows/spawn-bot.js.map +1 -0
  269. package/dist/workflows/system.d.ts +49 -0
  270. package/dist/workflows/system.d.ts.map +1 -0
  271. package/dist/workflows/system.js +48 -0
  272. package/dist/workflows/system.js.map +1 -0
  273. package/dist/workflows/trigger-run.d.ts +70 -0
  274. package/dist/workflows/trigger-run.d.ts.map +1 -0
  275. package/dist/workflows/trigger-run.js +88 -0
  276. package/dist/workflows/trigger-run.js.map +1 -0
  277. package/dist/workflows/wait.d.ts +120 -0
  278. package/dist/workflows/wait.d.ts.map +1 -0
  279. package/dist/workflows/wait.js +181 -0
  280. package/dist/workflows/wait.js.map +1 -0
  281. package/package.json +3 -3
@@ -0,0 +1,608 @@
1
+ // ─── Replay ─────────────────────────────────────────────────────────────────
2
+ /**
3
+ * Fold an event log into a state snapshot. Read-only — never executes
4
+ * activity logic, never calls providers, never writes to the log. Events
5
+ * doc §5.2.
6
+ *
7
+ * Throws on:
8
+ * - empty event list (caller must supply at least the runCreated event
9
+ * to derive runId)
10
+ * - first event is not runCreated (state machine forbids — events doc §2.1)
11
+ * - event.runId mismatch (cross-contamination)
12
+ *
13
+ * Does NOT validate state-machine transitions semantically — the log is
14
+ * authoritative. If transitions look wrong (e.g. activitySucceeded without
15
+ * attemptCreated), the resulting snapshot will simply have weird state;
16
+ * verification is the producer's job.
17
+ */
18
+ export function replay(events) {
19
+ if (events.length === 0) {
20
+ throw new Error('replay: cannot replay empty event log');
21
+ }
22
+ const first = events[0];
23
+ if (first.type !== 'runCreated') {
24
+ throw new Error(`replay: first event must be runCreated, got ${first.type}`);
25
+ }
26
+ const runId = first.runId;
27
+ const run = { runId, status: 'pending' };
28
+ const nodes = new Map();
29
+ const activities = new Map();
30
+ const outputs = new Map();
31
+ // Wait tracking: activityId -> resolved (true if waitResolved/Deadline seen)
32
+ const waitsOpen = new Set();
33
+ // Step 9 finding 3: cancel intents — first request wins.
34
+ let runCancelIntent;
35
+ const nodeCancelIntents = new Map();
36
+ let lastSeq = 0;
37
+ function getNode(id) {
38
+ let n = nodes.get(id);
39
+ if (!n) {
40
+ n = { nodeId: id, status: 'idle', retryCount: 0 };
41
+ nodes.set(id, n);
42
+ }
43
+ return n;
44
+ }
45
+ function getActivity(id) {
46
+ let a = activities.get(id);
47
+ if (!a) {
48
+ a = { activityId: id, attempts: [], status: 'pending' };
49
+ activities.set(id, a);
50
+ }
51
+ return a;
52
+ }
53
+ function currentAttempt(a) {
54
+ return a.attempts.find((at) => at.attemptId === a.currentAttemptId);
55
+ }
56
+ for (const e of events) {
57
+ if (e.runId !== runId) {
58
+ throw new Error(`replay: runId mismatch at ${e.eventId} — log is ${runId}, event has ${e.runId}`);
59
+ }
60
+ const seqMatch = e.eventId.match(/-(\d+)$/);
61
+ if (seqMatch) {
62
+ const s = parseInt(seqMatch[1], 10);
63
+ if (s > lastSeq)
64
+ lastSeq = s;
65
+ }
66
+ switch (e.type) {
67
+ // ─── Run lifecycle ──────────────────────────────────────────────
68
+ case 'runCreated': {
69
+ const p = e.payload;
70
+ if (!('ref' in p)) {
71
+ run.workflowId = p.workflowId;
72
+ run.revisionId = p.revisionId;
73
+ run.initiator = p.initiator;
74
+ run.input = p.inputRef;
75
+ if (p.botSnapshots)
76
+ run.botSnapshots = p.botSnapshots;
77
+ }
78
+ break;
79
+ }
80
+ case 'runStarted': {
81
+ run.status = 'running';
82
+ break;
83
+ }
84
+ case 'runSucceeded': {
85
+ const p = e.payload;
86
+ run.status = 'succeeded';
87
+ if (!('ref' in p))
88
+ run.output = p.outputRef;
89
+ break;
90
+ }
91
+ case 'runFailed': {
92
+ const p = e.payload;
93
+ run.status = 'failed';
94
+ if (!('ref' in p)) {
95
+ run.failedNodeId = p.failedNodeId;
96
+ run.rootCauseEventId = p.rootCauseEventId;
97
+ }
98
+ break;
99
+ }
100
+ case 'runCanceled': {
101
+ const p = e.payload;
102
+ run.status = 'cancelled';
103
+ if (!('ref' in p))
104
+ run.cancelOriginEventId = p.cancelOriginEventId;
105
+ break;
106
+ }
107
+ // ─── Node lifecycle ─────────────────────────────────────────────
108
+ case 'nodeWaiting': {
109
+ const p = e.payload;
110
+ if (!('ref' in p))
111
+ getNode(p.nodeId).status = 'waiting';
112
+ break;
113
+ }
114
+ case 'nodeRetrying': {
115
+ const p = e.payload;
116
+ if (!('ref' in p)) {
117
+ const n = getNode(p.nodeId);
118
+ n.status = 'retrying';
119
+ n.retryCount += 1;
120
+ }
121
+ break;
122
+ }
123
+ case 'nodeSucceeded': {
124
+ const p = e.payload;
125
+ if (!('ref' in p)) {
126
+ const n = getNode(p.nodeId);
127
+ n.status = 'succeeded';
128
+ n.activityId = p.lastActivityId;
129
+ }
130
+ break;
131
+ }
132
+ case 'nodeFailed': {
133
+ const p = e.payload;
134
+ if (!('ref' in p)) {
135
+ const n = getNode(p.nodeId);
136
+ n.status = 'failed';
137
+ n.activityId = p.lastActivityId;
138
+ n.errorClass = p.errorClass;
139
+ }
140
+ break;
141
+ }
142
+ case 'nodeSkipped': {
143
+ const p = e.payload;
144
+ if (!('ref' in p)) {
145
+ const n = getNode(p.nodeId);
146
+ n.status = 'skipped';
147
+ n.conditionEventId = p.conditionEventId;
148
+ }
149
+ break;
150
+ }
151
+ case 'nodeCanceled': {
152
+ const p = e.payload;
153
+ if (!('ref' in p)) {
154
+ const n = getNode(p.nodeId);
155
+ n.status = 'cancelled';
156
+ n.cancelOriginEventId = p.cancelOriginEventId;
157
+ }
158
+ break;
159
+ }
160
+ // ─── Scheduling ─────────────────────────────────────────────────
161
+ case 'conditionEvaluated': {
162
+ const p = e.payload;
163
+ if (!('ref' in p)) {
164
+ const n = getNode(p.nodeId);
165
+ n.conditionEventId = e.eventId;
166
+ // resultTrue=true: node is on its way to triggered (attemptCreated/leaseSigned will follow).
167
+ // resultTrue=false: nodeSkipped will follow shortly. Either way we don't
168
+ // mutate node.status here — wait for the explicit follow-up event.
169
+ }
170
+ break;
171
+ }
172
+ case 'attemptCreated': {
173
+ const p = e.payload;
174
+ if (!('ref' in p)) {
175
+ const a = getActivity(p.activityId);
176
+ a.attempts.push({
177
+ attemptId: p.attemptId,
178
+ attemptNumber: p.attemptNumber,
179
+ inputRef: p.inputRef,
180
+ status: 'pending',
181
+ });
182
+ a.currentAttemptId = p.attemptId;
183
+ a.status = 'pending';
184
+ // Codex round 4 fix: capture activity→node ownership so we can
185
+ // project node.status on later activity-level events.
186
+ a.ownerNodeId = p.nodeId;
187
+ // First attempt creates the "this node is now triggered" signal:
188
+ // before attemptCreated the node has no activity to point at.
189
+ // For retries (attemptNumber > 1) we DON'T overwrite — by then
190
+ // the node has typically already been routed through
191
+ // `nodeRetrying` and we should let `nodeRetrying`'s explicit
192
+ // event own the status.
193
+ const n = getNode(p.nodeId);
194
+ n.activityId = p.activityId;
195
+ if (p.attemptNumber === 1 && n.status === 'idle') {
196
+ n.status = 'triggered';
197
+ }
198
+ }
199
+ break;
200
+ }
201
+ case 'leaseSigned': {
202
+ const p = e.payload;
203
+ if (!('ref' in p)) {
204
+ const a = getActivity(p.activityId);
205
+ const at = a.attempts.find((x) => x.attemptId === p.attemptId);
206
+ if (at) {
207
+ at.leaseId = p.leaseId;
208
+ at.timeoutMs = p.timeoutMs;
209
+ at.maxOutputBytes = p.maxOutputBytes;
210
+ }
211
+ // After both attemptCreated + leaseSigned for the first attempt, node
212
+ // transitions idle→triggered (per state machine 4.2). We mark the
213
+ // node here unambiguously: leaseSigned implies the attempt exists.
214
+ // Find the owning node: walk all nodes whose activityId === p.activityId
215
+ // — but Node knows its activityId only after nodeSucceeded/nodeFailed.
216
+ // For replay we don't have explicit node↔activity mapping events; the
217
+ // producer's intent is that conditionEvaluated{true} + leaseSigned for
218
+ // the FIRST attempt = node triggered. v0 leaves this as advisory: we
219
+ // don't synthesize node.status from leaseSigned, only from explicit
220
+ // node* events. This keeps replay deterministic given the event log.
221
+ }
222
+ break;
223
+ }
224
+ case 'backoffScheduled': {
225
+ const p = e.payload;
226
+ if (!('ref' in p)) {
227
+ const n = getNode(p.nodeId);
228
+ n.nextAttemptAt = p.nextAttemptAt;
229
+ }
230
+ break;
231
+ }
232
+ case 'backoffElapsed': {
233
+ const p = e.payload;
234
+ if (!('ref' in p)) {
235
+ const n = getNode(p.nodeId);
236
+ n.nextAttemptAt = undefined;
237
+ }
238
+ break;
239
+ }
240
+ // ─── Side effect ────────────────────────────────────────────────
241
+ case 'effectAttempted': {
242
+ const p = e.payload;
243
+ if (!('ref' in p)) {
244
+ const a = getActivity(p.activityId);
245
+ const at = a.attempts.find((x) => x.attemptId === p.attemptId);
246
+ if (at) {
247
+ at.effectAttempted = {
248
+ idempotencyKey: p.idempotencyKey,
249
+ inputHash: p.inputHash,
250
+ idempotencyTtlMs: p.idempotencyTtlMs,
251
+ provider: p.provider,
252
+ attemptedAtEventId: e.eventId,
253
+ attemptedAtMs: e.timestamp,
254
+ };
255
+ at.status = 'effectAttempting';
256
+ a.status = 'effectAttempting';
257
+ }
258
+ }
259
+ break;
260
+ }
261
+ case 'activitySucceeded': {
262
+ const p = e.payload;
263
+ if (!('ref' in p)) {
264
+ const a = getActivity(p.activityId);
265
+ const at = a.attempts.find((x) => x.attemptId === p.attemptId);
266
+ if (at) {
267
+ at.status = 'succeeded';
268
+ at.output = p.outputRef;
269
+ at.externalRefs = p.externalRefs;
270
+ a.status = 'succeeded';
271
+ outputs.set(p.activityId, p.outputRef);
272
+ waitsOpen.delete(p.activityId);
273
+ }
274
+ }
275
+ break;
276
+ }
277
+ case 'activityFailed': {
278
+ const p = e.payload;
279
+ if (!('ref' in p)) {
280
+ const a = getActivity(p.activityId);
281
+ const at = a.attempts.find((x) => x.attemptId === p.attemptId);
282
+ if (at) {
283
+ at.status = 'failed';
284
+ at.error = p.error;
285
+ a.status = 'failed';
286
+ waitsOpen.delete(p.activityId);
287
+ }
288
+ }
289
+ break;
290
+ }
291
+ case 'activityTimedOut': {
292
+ const p = e.payload;
293
+ if (!('ref' in p)) {
294
+ const a = getActivity(p.activityId);
295
+ const at = a.attempts.find((x) => x.attemptId === p.attemptId);
296
+ if (at) {
297
+ at.status = 'timedOut';
298
+ at.runningMs = p.runningMs;
299
+ a.status = 'timedOut';
300
+ waitsOpen.delete(p.activityId);
301
+ }
302
+ }
303
+ break;
304
+ }
305
+ case 'activityRunning': {
306
+ const p = e.payload;
307
+ if (!('ref' in p)) {
308
+ const a = getActivity(p.activityId);
309
+ const at = a.attempts.find((x) => x.attemptId === p.attemptId);
310
+ if (at) {
311
+ at.status = 'running';
312
+ a.status = 'running';
313
+ }
314
+ // Project node.status from triggered/retrying → running when
315
+ // the activity's worker actually starts work. Skip if the
316
+ // node has already reached waiting/terminal — those are owned
317
+ // by explicit node-level events.
318
+ if (a.ownerNodeId) {
319
+ const n = getNode(a.ownerNodeId);
320
+ if (n.status === 'triggered' || n.status === 'retrying') {
321
+ n.status = 'running';
322
+ }
323
+ }
324
+ }
325
+ break;
326
+ }
327
+ case 'activityWaiting': {
328
+ const p = e.payload;
329
+ if (!('ref' in p)) {
330
+ const a = getActivity(p.activityId);
331
+ const at = currentAttempt(a);
332
+ if (at) {
333
+ at.status = 'waiting';
334
+ a.status = 'waiting';
335
+ }
336
+ }
337
+ break;
338
+ }
339
+ case 'activityCanceled': {
340
+ const p = e.payload;
341
+ if (!('ref' in p)) {
342
+ const a = getActivity(p.activityId);
343
+ const at = a.attempts.find((x) => x.attemptId === p.attemptId);
344
+ if (at) {
345
+ at.status = 'cancelled';
346
+ at.cancelOriginEventId = p.cancelOriginEventId;
347
+ a.status = 'cancelled';
348
+ waitsOpen.delete(p.activityId);
349
+ }
350
+ }
351
+ break;
352
+ }
353
+ // ─── Wait ───────────────────────────────────────────────────────
354
+ case 'waitCreated': {
355
+ const p = e.payload;
356
+ if (!('ref' in p)) {
357
+ waitsOpen.add(p.activityId);
358
+ const act = getActivity(p.activityId);
359
+ const at = currentAttempt(act);
360
+ if (at) {
361
+ at.wait = {
362
+ waitKind: p.waitKind,
363
+ deadlineAt: p.deadlineAt,
364
+ prompt: p.prompt,
365
+ promptRef: p.promptRef,
366
+ promptPreview: p.promptPreview,
367
+ onTimeout: p.onTimeout,
368
+ };
369
+ }
370
+ }
371
+ break;
372
+ }
373
+ case 'waitResolved': {
374
+ const p = e.payload;
375
+ if (!('ref' in p)) {
376
+ waitsOpen.delete(p.activityId);
377
+ const act = getActivity(p.activityId);
378
+ const at = currentAttempt(act);
379
+ if (at && at.wait) {
380
+ at.wait.resolution = {
381
+ kind: 'resolved',
382
+ resolution: p.resolution,
383
+ by: p.by,
384
+ comment: p.comment,
385
+ eventId: e.eventId,
386
+ };
387
+ }
388
+ }
389
+ break;
390
+ }
391
+ case 'waitDeadlineExceeded': {
392
+ const p = e.payload;
393
+ if (!('ref' in p)) {
394
+ waitsOpen.delete(p.activityId);
395
+ const act = getActivity(p.activityId);
396
+ const at = currentAttempt(act);
397
+ if (at && at.wait) {
398
+ at.wait.resolution = {
399
+ kind: 'deadlineExceeded',
400
+ deadlineAt: p.deadlineAt,
401
+ exceededAtMs: p.exceededAtMs,
402
+ eventId: e.eventId,
403
+ };
404
+ }
405
+ }
406
+ break;
407
+ }
408
+ // ─── Control ────────────────────────────────────────────────────
409
+ case 'cancelRequested': {
410
+ // Step 9 + Step 10: project the request onto the targeted
411
+ // entity. Spec §2.5 cancel chain expects scheduler to "broadcast
412
+ // to all non-terminal nodes, send cancel to each running activity"
413
+ // — replay treats this as a deterministic semantic projection
414
+ // (no need to materialize per-activity events): a node-level
415
+ // cancel marks every in-flight activity linked to that node;
416
+ // a run-level cancel marks every in-flight activity.
417
+ //
418
+ // Activities created AFTER the cancelRequested are intentionally
419
+ // NOT auto-marked here — the scheduler should refuse to spawn
420
+ // new attempts under a cancelled run/node. If it does anyway,
421
+ // those activities go through the regular WorkerCrashed/reconcile
422
+ // recovery paths.
423
+ const p = e.payload;
424
+ if (!('ref' in p)) {
425
+ const markActivity = (act) => {
426
+ const at = currentAttempt(act);
427
+ if (!at)
428
+ return;
429
+ const isTerminal = at.status === 'succeeded' ||
430
+ at.status === 'failed' ||
431
+ at.status === 'timedOut' ||
432
+ at.status === 'cancelled';
433
+ if (isTerminal)
434
+ return; // cancel doesn't override terminals
435
+ // First cancel wins — later overlapping cancels don't rewrite
436
+ // the cancelOriginEventId so the audit chain stays pointing
437
+ // at the originating event.
438
+ if (at.cancelRequest)
439
+ return;
440
+ at.cancelRequest = {
441
+ cancelOriginEventId: e.eventId,
442
+ requestedBy: p.by,
443
+ reason: p.reason,
444
+ delivered: false,
445
+ };
446
+ };
447
+ switch (p.target.kind) {
448
+ case 'activity': {
449
+ markActivity(getActivity(p.target.activityId));
450
+ break;
451
+ }
452
+ case 'node': {
453
+ const nodeId = p.target.nodeId;
454
+ // Record node intent (first cancel wins) regardless of
455
+ // whether any activities are currently mapped to the node
456
+ // — the intent stands even if fan-out finds nothing yet.
457
+ if (!nodeCancelIntents.has(nodeId)) {
458
+ nodeCancelIntents.set(nodeId, {
459
+ cancelOriginEventId: e.eventId,
460
+ requestedBy: p.by,
461
+ reason: p.reason,
462
+ });
463
+ }
464
+ for (const act of activities.values()) {
465
+ if (act.ownerNodeId === nodeId)
466
+ markActivity(act);
467
+ }
468
+ break;
469
+ }
470
+ case 'run': {
471
+ // Record run intent (first cancel wins).
472
+ if (!runCancelIntent) {
473
+ runCancelIntent = {
474
+ cancelOriginEventId: e.eventId,
475
+ requestedBy: p.by,
476
+ reason: p.reason,
477
+ };
478
+ }
479
+ for (const act of activities.values())
480
+ markActivity(act);
481
+ break;
482
+ }
483
+ }
484
+ }
485
+ break;
486
+ }
487
+ case 'cancelDelivered': {
488
+ const p = e.payload;
489
+ if (!('ref' in p)) {
490
+ const act = getActivity(p.activityId);
491
+ const at = currentAttempt(act);
492
+ if (at?.cancelRequest) {
493
+ at.cancelRequest.delivered = true;
494
+ }
495
+ }
496
+ break;
497
+ }
498
+ // ─── System / Recovery ──────────────────────────────────────────
499
+ case 'workerLost':
500
+ case 'resumeStarted': {
501
+ // No state projection: these are audit-only.
502
+ // - `workerLost` (Step 10) is informational — the runtime emits
503
+ // it when a worker disappears with in-flight activityIds, and
504
+ // the lost activities surface through the normal dangling
505
+ // paths (no terminals, so they show up in danglingActivities
506
+ // and feed reconcile / WorkerCrashed recovery). Replay
507
+ // doesn't need to mutate state to make that work.
508
+ // - `resumeStarted` (Step 7) is written BY resume itself as the
509
+ // first event of a recovery cycle; downstream consumers may
510
+ // read it for audit/forensics, but replay just preserves it
511
+ // in the event order.
512
+ void e;
513
+ break;
514
+ }
515
+ case 'reconcileResult': {
516
+ // Project the latest reconcileResult onto the matching attempt
517
+ // (by idempotencyKey). Resume uses this to recover from a
518
+ // crash that landed between reconcileResult and the terminal
519
+ // event — without this projection the next resume would re-run
520
+ // the decision tree and risk a different (possibly wrong)
521
+ // outcome (codex Step 7 round 1 finding 1).
522
+ const p = e.payload;
523
+ if (!('ref' in p)) {
524
+ // Linear scan: workflows have small attempt counts, no need
525
+ // to index by idempotencyKey.
526
+ for (const act of activities.values()) {
527
+ const at = act.attempts.find((x) => x.effectAttempted?.idempotencyKey === p.idempotencyKey);
528
+ if (at) {
529
+ at.latestReconcileResult = {
530
+ decision: p.decision,
531
+ capability: p.capability,
532
+ evidence: p.evidence,
533
+ eventId: e.eventId,
534
+ };
535
+ break;
536
+ }
537
+ }
538
+ }
539
+ break;
540
+ }
541
+ default: {
542
+ // Exhaustiveness — every event type above must have a case.
543
+ const _exhaustive = e;
544
+ void _exhaustive;
545
+ }
546
+ }
547
+ }
548
+ // ─── Compute dangling sets ────────────────────────────────────────────
549
+ const danglingActivities = [];
550
+ const danglingEffectAttempted = [];
551
+ const danglingWaitResolutions = [];
552
+ const danglingCancels = [];
553
+ for (const a of activities.values()) {
554
+ const latest = a.attempts.length > 0 ? a.attempts[a.attempts.length - 1] : undefined;
555
+ if (!latest)
556
+ continue;
557
+ const isTerminal = latest.status === 'succeeded' ||
558
+ latest.status === 'failed' ||
559
+ latest.status === 'timedOut' ||
560
+ latest.status === 'cancelled';
561
+ if (!isTerminal) {
562
+ danglingActivities.push(a.activityId);
563
+ if (latest.effectAttempted) {
564
+ danglingEffectAttempted.push(a.activityId);
565
+ }
566
+ // A wait that has a recorded resolution (resolved or
567
+ // deadlineExceeded) but no terminal event is recoverable: write
568
+ // the matching activity-terminal during resume.
569
+ if (latest.wait?.resolution) {
570
+ danglingWaitResolutions.push(a.activityId);
571
+ }
572
+ // Cancel requested but no terminal yet — resume completes by
573
+ // writing activityCanceled. Cancel takes precedence over other
574
+ // recovery paths (see resume routing).
575
+ if (latest.cancelRequest) {
576
+ danglingCancels.push(a.activityId);
577
+ }
578
+ }
579
+ }
580
+ const danglingWaits = Array.from(waitsOpen);
581
+ // Drop intents that already reached their terminal. Spec §2.5:
582
+ // run/nodeCanceled writes the cancel terminal; once present the intent
583
+ // is no longer in-flight. The intent stays set when the terminal
584
+ // hasn't been written (caller / scheduler still needs to complete it).
585
+ const cancelledRunIntent = run.status === 'cancelled' ? undefined : runCancelIntent;
586
+ const cancelledNodeIntents = new Map();
587
+ for (const [nodeId, intent] of nodeCancelIntents) {
588
+ const node = nodes.get(nodeId);
589
+ if (node?.status === 'cancelled')
590
+ continue;
591
+ cancelledNodeIntents.set(nodeId, intent);
592
+ }
593
+ return {
594
+ run,
595
+ nodes,
596
+ activities,
597
+ outputs,
598
+ lastSeq,
599
+ danglingActivities,
600
+ danglingEffectAttempted,
601
+ danglingWaitResolutions,
602
+ danglingCancels,
603
+ danglingWaits,
604
+ cancelledRunIntent,
605
+ cancelledNodeIntents,
606
+ };
607
+ }
608
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../src/workflows/events/replay.ts"],"names":[],"mappings":"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"}