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 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../../src/workflows/definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,334 @@
1
+ /**
2
+ * WorkflowDefinition — canonical JSON shape for v0 workflows
3
+ * (see /tmp/wf-ui-v0.md §3 for the spec).
4
+ *
5
+ * Two node types:
6
+ * - subagent — runtime spawns the bot's worker, feeds `prompt`,
7
+ * collects `output` JSON.
8
+ * - hostExecutor — runtime calls the executor registered by `executor`.
9
+ *
10
+ * The schema enforces shape; cross-field invariants (deps reachability,
11
+ * no cycles) are checked by `parseWorkflowDefinition`. The `revisionId`
12
+ * helper computes a content hash over canonical JSON so semantically
13
+ * equal definitions get identical ids regardless of key ordering.
14
+ */
15
+ import { createHash } from 'node:crypto';
16
+ import { z } from 'zod';
17
+ // ─── Field schemas ─────────────────────────────────────────────────────────
18
+ export const ParamDefSchema = z.object({
19
+ type: z.enum(['string', 'number', 'boolean', 'object', 'array']),
20
+ format: z.string().optional(),
21
+ required: z.boolean().optional(),
22
+ default: z.unknown().optional(),
23
+ description: z.string().optional(),
24
+ });
25
+ export const RetryPolicySchema = z.object({
26
+ maxAttempts: z.number().int().positive(),
27
+ backoff: z.enum(['fixed', 'exponential']),
28
+ baseMs: z.number().int().positive(),
29
+ factor: z.number().positive().optional(),
30
+ jitter: z.boolean().optional(),
31
+ });
32
+ /**
33
+ * Output binding — `{ "$ref": "<nodeId>.output.<path>" }` references the
34
+ * `output` of another node's most recent successful work activity.
35
+ *
36
+ * Hard constraints (all enforced at parse time):
37
+ * - Object MUST be exactly one key (`$ref`), strict — no extra fields.
38
+ * Half-parsed mixed objects are a footgun: callers might forget the
39
+ * `$ref` key and silently get a literal object instead of resolved data.
40
+ * - `$ref` must be a non-empty string; runtime `resolveRef` then enforces
41
+ * the `.output.` separator + path-segment safety (no `__proto__` etc).
42
+ */
43
+ export const OutputRefSpecSchema = z.object({
44
+ $ref: z.string().min(1),
45
+ }).strict();
46
+ /** A string field that may either be a literal or a single `$ref`. */
47
+ export const BoundStringSchema = z.union([z.string(), OutputRefSpecSchema]);
48
+ /**
49
+ * Recursive JSON allowing `OutputRefSpec` to appear at any leaf or sub-tree.
50
+ *
51
+ * Refusal rule for non-strict `$ref`-bearing objects: an object that has a
52
+ * `$ref` key MUST be an exact strict `OutputRefSpec`. Mixing `$ref` with
53
+ * other keys is rejected at parse time to keep `$ref` a reserved form.
54
+ */
55
+ export const BoundJsonValueSchema = z.lazy(() => z.union([
56
+ z.string(),
57
+ z.number(),
58
+ z.boolean(),
59
+ z.null(),
60
+ OutputRefSpecSchema,
61
+ z.array(BoundJsonValueSchema),
62
+ z.record(BoundJsonValueSchema).refine((obj) => !Object.prototype.hasOwnProperty.call(obj, '$ref'), { message: '`$ref` must appear in an exact `{ "$ref": <string> }` object — no extra keys allowed' }),
63
+ ]));
64
+ export const HumanGateSchema = z.object({
65
+ // v0 only supports 'before'. after-step gate would need a different
66
+ // dispatch model (suspend post-success); deferred to v1+.
67
+ stage: z.literal('before'),
68
+ prompt: BoundStringSchema,
69
+ approvers: z.array(z.string()).optional(),
70
+ deadlineMs: z.number().int().positive().optional(),
71
+ onTimeout: z.enum(['fail', 'success']).optional(),
72
+ });
73
+ // JSON Schema is opaque to us — workflow author owns validation rules,
74
+ // runtime just feeds the schema to Ajv when validating output.
75
+ export const OutputSchemaSchema = z.record(z.unknown());
76
+ const NodeBaseShape = {
77
+ description: z.string().optional(),
78
+ depends: z.array(z.string()).optional(),
79
+ humanGate: HumanGateSchema.optional(),
80
+ retryPolicy: RetryPolicySchema.optional(),
81
+ timeoutMs: z.number().int().positive().optional(),
82
+ maxOutputBytes: z.number().int().positive().optional(),
83
+ outputSchema: OutputSchemaSchema.optional(),
84
+ /**
85
+ * Opt-in escape hatch for a side-effect hostExecutor node that *must* run
86
+ * without a humanGate (e.g. a system-internal cron tick, an explicitly
87
+ * batched send-all script). Default is unset / false → validator rejects
88
+ * ungated side-effect executors at parse time (`SIDE_EFFECT_EXECUTORS`).
89
+ *
90
+ * Setting this to `true` is the workflow author's audit-trail: "I know
91
+ * this node sends a message / writes to repo / schedules a cron with no
92
+ * human approval — accept the risk." Prefer `humanGate` whenever the
93
+ * intent is "let an operator confirm before this fires."
94
+ */
95
+ unsafeAllowUngated: z.boolean().optional(),
96
+ };
97
+ export const SubagentNodeSchema = z.object({
98
+ ...NodeBaseShape,
99
+ type: z.literal('subagent'),
100
+ bot: z.string().min(1),
101
+ prompt: BoundStringSchema,
102
+ workingDir: z.string().optional(),
103
+ modelOverrides: z
104
+ .object({
105
+ model: z.string().optional(),
106
+ reasoningEffort: z.string().optional(),
107
+ })
108
+ .optional(),
109
+ toolPolicy: z
110
+ .object({
111
+ allow: z.array(z.string()).optional(),
112
+ deny: z.array(z.string()).optional(),
113
+ })
114
+ .optional(),
115
+ });
116
+ export const HostExecutorNodeSchema = z.object({
117
+ ...NodeBaseShape,
118
+ type: z.literal('hostExecutor'),
119
+ executor: z.string().min(1),
120
+ input: BoundJsonValueSchema,
121
+ });
122
+ /**
123
+ * Executors that produce externally-visible side effects: sending a Feishu
124
+ * message, scheduling a botmux cron task, etc. Validator requires a
125
+ * `humanGate.stage='before'` on any node using one of these executors, or
126
+ * an explicit `unsafeAllowUngated: true` opt-in (see NodeBaseShape).
127
+ *
128
+ * Add new executors here as they're registered with the dispatch table —
129
+ * keep this list in lockstep with `runtime.ts`'s side-effect executor
130
+ * registrations. Read-only / pure-computation executors do NOT belong
131
+ * here; only ones whose execution is observable outside the workflow.
132
+ */
133
+ export const SIDE_EFFECT_EXECUTORS = new Set([
134
+ 'feishu-send',
135
+ 'feishu-reply',
136
+ 'botmux-schedule',
137
+ ]);
138
+ export function isSideEffectExecutor(executor) {
139
+ return SIDE_EFFECT_EXECUTORS.has(executor);
140
+ }
141
+ export const WorkflowNodeSchema = z.discriminatedUnion('type', [
142
+ SubagentNodeSchema,
143
+ HostExecutorNodeSchema,
144
+ ]);
145
+ /**
146
+ * Node id constraint: safe path segment for use in activityId and the
147
+ * artifact sidecar path (UI doc §A: `runs/<runId>/attempts/<activityId>/...`).
148
+ * Disallow `/`, `..`, whitespace, etc. so a maliciously authored or
149
+ * imported workflow cannot escape the run directory.
150
+ */
151
+ export const NODE_ID_PATTERN = /^[A-Za-z0-9_.-]+$/;
152
+ const NodeIdSchema = z.string().regex(NODE_ID_PATTERN, 'nodeId must match [A-Za-z0-9_.-]+ (no path separators or whitespace)');
153
+ export const WorkflowDefinitionSchema = z.object({
154
+ workflowId: z.string().min(1),
155
+ version: z.number().int().positive(),
156
+ params: z.record(ParamDefSchema).optional(),
157
+ defaults: z
158
+ .object({
159
+ retryPolicy: RetryPolicySchema.optional(),
160
+ timeoutMs: z.number().int().positive().optional(),
161
+ maxOutputBytes: z.number().int().positive().optional(),
162
+ /**
163
+ * Cap on concurrent dispatch actions (dispatchGate + dispatchWork)
164
+ * within a single runLoop tick. v0.1.3 first-cut parallelism defaults
165
+ * to 4 — small enough that a wide fan-out won't immediately exhaust
166
+ * worker / OOM headroom, large enough that ~typical 2-3 branch DAGs
167
+ * fully parallelize. Set higher on workflows that want more throughput.
168
+ *
169
+ * Per-bot serialization is independent of this cap; same-bot siblings
170
+ * still get dispatched one-per-tick regardless of the limit.
171
+ */
172
+ maxConcurrency: z.number().int().positive().optional(),
173
+ })
174
+ .optional(),
175
+ nodes: z.record(NodeIdSchema, WorkflowNodeSchema),
176
+ });
177
+ // ─── Canonical JSON stringify ──────────────────────────────────────────────
178
+ /**
179
+ * Canonical JSON: object keys sorted recursively, arrays preserved in
180
+ * order, compact (no extra whitespace). Defined this way so that any
181
+ * authoring-tool round-trip (YAML→JSON, TS builder→JSON) produces an
182
+ * identical string when the underlying data is the same.
183
+ *
184
+ * Numbers are emitted via JSON.stringify so NaN/Infinity (illegal in
185
+ * JSON) round-trip to errors — caller should reject those in schema.
186
+ */
187
+ export function canonicalJsonStringify(value) {
188
+ return JSON.stringify(canonicalize(value));
189
+ }
190
+ function canonicalize(value) {
191
+ if (value === null || typeof value !== 'object')
192
+ return value;
193
+ if (Array.isArray(value))
194
+ return value.map(canonicalize);
195
+ const obj = value;
196
+ const sorted = {};
197
+ for (const k of Object.keys(obj).sort())
198
+ sorted[k] = canonicalize(obj[k]);
199
+ return sorted;
200
+ }
201
+ // ─── revisionId ────────────────────────────────────────────────────────────
202
+ /**
203
+ * revisionId = sha256(canonicalJsonStringify(def)).
204
+ * Use the `version` field for human-readable semantic versions.
205
+ */
206
+ export function computeRevisionId(def) {
207
+ return ('sha256:' +
208
+ createHash('sha256').update(canonicalJsonStringify(def)).digest('hex'));
209
+ }
210
+ // ─── Validation ────────────────────────────────────────────────────────────
211
+ /**
212
+ * Schema parse + cross-field invariants:
213
+ * 1. every `depends` entry references an existing node
214
+ * 2. graph is acyclic
215
+ * 3. at least one root node (no deps)
216
+ *
217
+ * Throws on any failure. Use `WorkflowDefinitionSchema.safeParse(...)`
218
+ * directly if you only need shape checks (no graph validation).
219
+ */
220
+ export function parseWorkflowDefinition(raw) {
221
+ const def = WorkflowDefinitionSchema.parse(raw);
222
+ validateGraph(def);
223
+ return def;
224
+ }
225
+ function validateGraph(def) {
226
+ const ids = Object.keys(def.nodes);
227
+ if (ids.length === 0) {
228
+ throw new Error('Workflow must declare at least one node');
229
+ }
230
+ for (const nodeId of ids) {
231
+ // Defense-in-depth alongside NODE_ID_PATTERN: the regex permits `.`
232
+ // for compound names like `node.v2`, but standalone `.` or `..` —
233
+ // and any segment with `..` — must be banned to keep the artifact
234
+ // sidecar path (`runs/<runId>/attempts/<activityId>/...`) inside
235
+ // the run directory.
236
+ if (nodeId === '.' || nodeId === '..' || nodeId.includes('..')) {
237
+ throw new Error(`nodeId '${nodeId}' rejected: path-traversal style ids are not allowed`);
238
+ }
239
+ }
240
+ for (const [nodeId, node] of Object.entries(def.nodes)) {
241
+ for (const dep of node.depends ?? []) {
242
+ if (!def.nodes[dep]) {
243
+ throw new Error(`Node '${nodeId}' depends on unknown node '${dep}'`);
244
+ }
245
+ if (dep === nodeId) {
246
+ throw new Error(`Node '${nodeId}' depends on itself`);
247
+ }
248
+ }
249
+ // Safe-by-default: a hostExecutor node that runs a side-effect executor
250
+ // must either declare `humanGate.stage='before'` or opt into the audit
251
+ // trail via `unsafeAllowUngated: true`. Catches ungated `feishu-send`
252
+ // and friends at parse time instead of relying on author discipline.
253
+ if (node.type === 'hostExecutor' &&
254
+ isSideEffectExecutor(node.executor) &&
255
+ !node.humanGate &&
256
+ !node.unsafeAllowUngated) {
257
+ throw new Error(`Node '${nodeId}' runs side-effect executor '${node.executor}' without ` +
258
+ `a humanGate. Add humanGate.stage='before' for human approval, or set ` +
259
+ `unsafeAllowUngated: true to acknowledge the risk explicitly.`);
260
+ }
261
+ }
262
+ detectCycle(def);
263
+ const hasRoot = ids.some((id) => (def.nodes[id].depends ?? []).length === 0);
264
+ if (!hasRoot) {
265
+ throw new Error('Workflow has no root node (every node has dependencies)');
266
+ }
267
+ }
268
+ function detectCycle(def) {
269
+ const WHITE = 0;
270
+ const GRAY = 1;
271
+ const BLACK = 2;
272
+ const color = new Map();
273
+ const ids = Object.keys(def.nodes);
274
+ ids.forEach((id) => color.set(id, WHITE));
275
+ const path = [];
276
+ const visit = (id) => {
277
+ const c = color.get(id);
278
+ if (c === BLACK)
279
+ return;
280
+ if (c === GRAY) {
281
+ const start = path.indexOf(id);
282
+ const cycle = [...path.slice(start), id].join(' → ');
283
+ throw new Error(`Workflow has cycle: ${cycle}`);
284
+ }
285
+ color.set(id, GRAY);
286
+ path.push(id);
287
+ for (const dep of def.nodes[id].depends ?? [])
288
+ visit(dep);
289
+ path.pop();
290
+ color.set(id, BLACK);
291
+ };
292
+ for (const id of ids)
293
+ visit(id);
294
+ }
295
+ // ─── Topological order ────────────────────────────────────────────────────
296
+ /**
297
+ * Kahn's algorithm. Returns nodeIds in dispatch-safe order (deps before
298
+ * dependents). Ties broken by `Object.keys(nodes)` insertion order so
299
+ * the result is deterministic for a given workflow JSON.
300
+ *
301
+ * Assumes the graph is valid (no cycles); call `parseWorkflowDefinition`
302
+ * first or pass a definition that already came from there.
303
+ */
304
+ export function topologicalOrder(def) {
305
+ const ids = Object.keys(def.nodes);
306
+ const indeg = new Map();
307
+ const children = new Map();
308
+ ids.forEach((id) => {
309
+ indeg.set(id, 0);
310
+ children.set(id, []);
311
+ });
312
+ for (const [id, node] of Object.entries(def.nodes)) {
313
+ for (const dep of node.depends ?? []) {
314
+ indeg.set(id, (indeg.get(id) ?? 0) + 1);
315
+ children.get(dep).push(id);
316
+ }
317
+ }
318
+ const queue = [];
319
+ for (const id of ids)
320
+ if ((indeg.get(id) ?? 0) === 0)
321
+ queue.push(id);
322
+ const order = [];
323
+ while (queue.length > 0) {
324
+ const id = queue.shift();
325
+ order.push(id);
326
+ for (const child of children.get(id)) {
327
+ indeg.set(child, (indeg.get(child) ?? 0) - 1);
328
+ if ((indeg.get(child) ?? 0) === 0)
329
+ queue.push(child);
330
+ }
331
+ }
332
+ return order;
333
+ }
334
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/workflows/definition.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACxC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAGH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CACxB,CAAC,CAAC,MAAM,EAAE,CAAC;AAGZ,sEAAsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;AAG5E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAClE,CAAC,CAAC,KAAK,CAAC;IACN,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,MAAM,EAAE;IACV,CAAC,CAAC,OAAO,EAAE;IACX,CAAC,CAAC,IAAI,EAAE;IACR,mBAAmB;IACnB,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC;IAC7B,CAAC,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,MAAM,CACnC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAC3D,EAAE,OAAO,EAAE,sFAAsF,EAAE,CACpG;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,qEAAqE;IACrE,0DAA0D;IAC1D,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC1B,MAAM,EAAE,iBAAiB;IACzB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClD,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE;CAClD,CAAC,CAAC;AAGH,uEAAuE;AACvE,+DAA+D;AAC/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAExD,MAAM,aAAa,GAAG;IACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACvC,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE;IACrC,WAAW,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtD,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IAC3C;;;;;;;;;;OAUG;IACH,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,GAAG,aAAa;IAChB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtB,MAAM,EAAE,iBAAiB;IACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,cAAc,EAAE,CAAC;SACd,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC;SACD,QAAQ,EAAE;IACb,UAAU,EAAE,CAAC;SACV,MAAM,CAAC;QACN,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACrC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrC,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,GAAG,aAAa;IAChB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,KAAK,EAAE,oBAAoB;CAC5B,CAAC,CAAC;AAGH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAwB,IAAI,GAAG,CAAC;IAChE,aAAa;IACb,cAAc;IACd,iBAAiB;CAClB,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC7D,kBAAkB;IAClB,sBAAsB;CACvB,CAAC,CAAC;AAGH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,mBAAmB,CAAC;AACnD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CACnC,eAAe,EACf,sEAAsE,CACvE,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAC3C,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,WAAW,EAAE,iBAAiB,CAAC,QAAQ,EAAE;QACzC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACjD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QACtD;;;;;;;;;WASG;QACH,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;KACvD,CAAC;SACD,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;CAClD,CAAC,CAAC;AAGH,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,KAAgC,CAAC;IAC7C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAuB;IACvD,OAAO,CACL,SAAS;QACT,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvE,CAAC;AACJ,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAY;IAClD,MAAM,GAAG,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,aAAa,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,aAAa,CAAC,GAAuB;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,oEAAoE;QACpE,kEAAkE;QAClE,kEAAkE;QAClE,iEAAiE;QACjE,qBAAqB;QACrB,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CACb,WAAW,MAAM,sDAAsD,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,8BAA8B,GAAG,GAAG,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACnB,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,qBAAqB,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,wEAAwE;QACxE,uEAAuE;QACvE,uEAAuE;QACvE,qEAAqE;QACrE,IACE,IAAI,CAAC,IAAI,KAAK,cAAc;YAC5B,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnC,CAAC,IAAI,CAAC,SAAS;YACf,CAAC,IAAI,CAAC,kBAAkB,EACxB,CAAC;YACD,MAAM,IAAI,KAAK,CACb,SAAS,MAAM,gCAAgC,IAAI,CAAC,QAAQ,YAAY;gBACxE,uEAAuE;gBACvE,8DAA8D,CAC/D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,WAAW,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAC9E,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAuB;IAC1C,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,MAAM,IAAI,GAAG,CAAC,CAAC;IACf,MAAM,KAAK,GAAG,CAAC,CAAC;IAChB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,MAAM,KAAK,GAAG,CAAC,EAAU,EAAQ,EAAE;QACjC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,KAAK;YAAE,OAAO;QACxB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,EAAE,CAAE,CAAC,OAAO,IAAI,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,GAAG;QAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,6EAA6E;AAE7E;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAuB;IACtD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACjB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACjB,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACrC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,GAAG;QAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAE,EAAE,CAAC;YACtC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { EventLog } from './events/append.js';
2
+ export declare function writeEffectInputSidecar(log: EventLog, activityId: string, attemptId: string, input: unknown): Promise<string>;
3
+ export declare function loadEffectInputSidecar(log: EventLog, activityId: string, attemptId: string): Promise<unknown>;
4
+ //# sourceMappingURL=effect-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-input.d.ts","sourceRoot":"","sources":["../../src/workflows/effect-input.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,QAAQ,EACb,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAGlB"}
@@ -0,0 +1,18 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ export async function writeEffectInputSidecar(log, activityId, attemptId, input) {
4
+ const dir = await effectInputDir(log, activityId, attemptId);
5
+ const path = join(dir, 'effect-input.json');
6
+ await fs.writeFile(path, JSON.stringify(input, null, 2), 'utf-8');
7
+ return path;
8
+ }
9
+ export async function loadEffectInputSidecar(log, activityId, attemptId) {
10
+ const path = join(log.runDir, 'attempts', activityId, attemptId, 'effect-input.json');
11
+ return JSON.parse(await fs.readFile(path, 'utf-8'));
12
+ }
13
+ async function effectInputDir(log, activityId, attemptId) {
14
+ const dir = join(log.runDir, 'attempts', activityId, attemptId);
15
+ await fs.mkdir(dir, { recursive: true });
16
+ return dir;
17
+ }
18
+ //# sourceMappingURL=effect-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-input.js","sourceRoot":"","sources":["../../src/workflows/effect-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAa,EACb,UAAkB,EAClB,SAAiB,EACjB,KAAc;IAEd,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAC5C,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAa,EACb,UAAkB,EAClB,SAAiB;IAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACtF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,GAAa,EACb,UAAkB,EAClB,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,77 @@
1
+ import { INLINE_PAYLOAD_MAX_BYTES, PayloadRefSchema } from './schema.js';
2
+ import type { WorkflowEvent } from './schema.js';
3
+ /**
4
+ * What the runtime supplies to `append`. The append path fills in
5
+ * `eventId` and `schemaVersion`. Callers must supply `runId`, `type`,
6
+ * `actor`, `payload`, and may optionally pass `timestamp` (defaults to
7
+ * Date.now()) and/or `payloadHash` (only when payload is a ref — see
8
+ * events doc §1.1).
9
+ *
10
+ * The discriminated union over WorkflowEvent distributes through Omit, so
11
+ * each event type's payload shape is preserved at the call site.
12
+ */
13
+ export type EventDraft = Omit<WorkflowEvent, 'eventId' | 'schemaVersion' | 'timestamp'> & {
14
+ timestamp?: number;
15
+ };
16
+ export declare class EventLog {
17
+ readonly runId: string;
18
+ readonly runDir: string;
19
+ readonly eventsFile: string;
20
+ readonly blobDir: string;
21
+ private seq;
22
+ private seqLoaded;
23
+ private cachedMtimeMs;
24
+ private cachedSize;
25
+ constructor(runId: string, baseDir: string);
26
+ /**
27
+ * Append one event. Atomic across:
28
+ * 1. all EventLog instances for the same runId in this process
29
+ * (module-level mutex map), and
30
+ * 2. other OS processes touching the same events file
31
+ * (`withFileLock` over `events.ndjson.lock`).
32
+ *
33
+ * Codex round 4 finding 1: payload envelope MUST be inline. Large
34
+ * business data goes through `OutputRef`-shaped fields (e.g.
35
+ * `runCreated.inputRef`, `activitySucceeded.outputRef`); the caller is
36
+ * responsible for writing the blob and passing a fully-formed
37
+ * `OutputRef` inline. The append path no longer auto-spills payloads —
38
+ * doing so silently broke replay for any ref-payload event because the
39
+ * existing replay projection unconditionally skipped the ref branch.
40
+ *
41
+ * Payload-ref payloads (`{ ref, bytes, schemaVersion }`) are still
42
+ * supported for callers who genuinely need to ref-out the envelope
43
+ * payload (e.g. a custom dashboard projection), but the caller must
44
+ * supply both the blob and `payloadHash` upfront; this path is not
45
+ * exercised by the v0 runtime.
46
+ */
47
+ append(draft: EventDraft): Promise<WorkflowEvent>;
48
+ private appendLocked;
49
+ /**
50
+ * Read all events in append order. Used by replay (events doc §5.2)
51
+ * and seq recovery on restart. Returns [] if the log doesn't exist
52
+ * yet.
53
+ *
54
+ * Throws if any line fails schema validation — events doc treats the
55
+ * log as authoritative and corruption should fail loud, not silently
56
+ * skip lines.
57
+ */
58
+ readAll(): Promise<WorkflowEvent[]>;
59
+ /**
60
+ * Read the blob referenced by a ref-payload event. Used when a caller
61
+ * elected to spill their own OutputRef payload to disk; not used by
62
+ * envelope-payload paths since v0.1.2 round-4 disallows envelope spill.
63
+ */
64
+ readBlob(ref: string): Promise<Buffer>;
65
+ /** Current seq counter — exposed for tests / dashboard. */
66
+ currentSeq(): Promise<number>;
67
+ /**
68
+ * Refresh `this.seq` if the events file has changed since we last loaded.
69
+ * Stat is cheap; full re-scan only fires when the cached mtime/size differ
70
+ * from disk — protects against another process having appended since our
71
+ * last write.
72
+ */
73
+ private refreshSeqIfStale;
74
+ }
75
+ export { PayloadRefSchema, INLINE_PAYLOAD_MAX_BYTES };
76
+ export type { WorkflowEvent };
77
+ //# sourceMappingURL=append.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"append.d.ts","sourceRoot":"","sources":["../../../src/workflows/events/append.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAGjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AA6CjD;;;;;;;;;GASG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,eAAe,GAAG,WAAW,CAAC,GAAG;IACxF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,qBAAa,QAAQ;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAGzB,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,UAAU,CAAK;gBAEX,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAW1C;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;YAMzC,YAAY;IA+C1B;;;;;;;;OAQG;IACG,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAsBzC;;;;OAIG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5C,2DAA2D;IACrD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IASnC;;;;;OAKG;YACW,iBAAiB;CAgChC;AAID,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,CAAC"}