botmux 2.93.1 → 2.95.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 (290) hide show
  1. package/dist/adapters/backend/tmux-backend.d.ts +18 -2
  2. package/dist/adapters/backend/tmux-backend.d.ts.map +1 -1
  3. package/dist/adapters/backend/tmux-backend.js +45 -3
  4. package/dist/adapters/backend/tmux-backend.js.map +1 -1
  5. package/dist/adapters/backend/tmux-pipe-backend.js +1 -1
  6. package/dist/adapters/backend/tmux-pipe-backend.js.map +1 -1
  7. package/dist/adapters/backend/types.d.ts +8 -0
  8. package/dist/adapters/backend/types.d.ts.map +1 -1
  9. package/dist/adapters/backend/types.js.map +1 -1
  10. package/dist/adapters/backend/zellij-backend.js +1 -1
  11. package/dist/adapters/backend/zellij-backend.js.map +1 -1
  12. package/dist/adapters/cli/claude-code.d.ts.map +1 -1
  13. package/dist/adapters/cli/claude-code.js +6 -1
  14. package/dist/adapters/cli/claude-code.js.map +1 -1
  15. package/dist/bot-registry.d.ts +50 -1
  16. package/dist/bot-registry.d.ts.map +1 -1
  17. package/dist/bot-registry.js +30 -0
  18. package/dist/bot-registry.js.map +1 -1
  19. package/dist/cli/workflow.d.ts.map +1 -1
  20. package/dist/cli/workflow.js +11 -4
  21. package/dist/cli/workflow.js.map +1 -1
  22. package/dist/cli.d.ts.map +1 -1
  23. package/dist/cli.js +146 -1
  24. package/dist/cli.js.map +1 -1
  25. package/dist/core/command-handler.d.ts.map +1 -1
  26. package/dist/core/command-handler.js +28 -3
  27. package/dist/core/command-handler.js.map +1 -1
  28. package/dist/core/dashboard-ipc-server.d.ts.map +1 -1
  29. package/dist/core/dashboard-ipc-server.js +92 -0
  30. package/dist/core/dashboard-ipc-server.js.map +1 -1
  31. package/dist/core/inherit-peer.d.ts +5 -0
  32. package/dist/core/inherit-peer.d.ts.map +1 -1
  33. package/dist/core/inherit-peer.js +3 -0
  34. package/dist/core/inherit-peer.js.map +1 -1
  35. package/dist/core/session-discovery.d.ts +9 -0
  36. package/dist/core/session-discovery.d.ts.map +1 -1
  37. package/dist/core/session-discovery.js +24 -0
  38. package/dist/core/session-discovery.js.map +1 -1
  39. package/dist/core/session-manager.d.ts.map +1 -1
  40. package/dist/core/session-manager.js +7 -6
  41. package/dist/core/session-manager.js.map +1 -1
  42. package/dist/core/terminal-url.d.ts.map +1 -1
  43. package/dist/core/terminal-url.js +15 -0
  44. package/dist/core/terminal-url.js.map +1 -1
  45. package/dist/core/trigger-session.js +2 -2
  46. package/dist/core/trigger-session.js.map +1 -1
  47. package/dist/core/worker-pool.d.ts.map +1 -1
  48. package/dist/core/worker-pool.js +30 -0
  49. package/dist/core/worker-pool.js.map +1 -1
  50. package/dist/daemon.d.ts.map +1 -1
  51. package/dist/daemon.js +296 -23
  52. package/dist/daemon.js.map +1 -1
  53. package/dist/dashboard/aggregator.d.ts +5 -0
  54. package/dist/dashboard/aggregator.d.ts.map +1 -1
  55. package/dist/dashboard/aggregator.js +7 -0
  56. package/dist/dashboard/aggregator.js.map +1 -1
  57. package/dist/dashboard/auth.d.ts.map +1 -1
  58. package/dist/dashboard/auth.js +7 -1
  59. package/dist/dashboard/auth.js.map +1 -1
  60. package/dist/dashboard/bot-payload.d.ts +2 -0
  61. package/dist/dashboard/bot-payload.d.ts.map +1 -1
  62. package/dist/dashboard/bot-payload.js +2 -0
  63. package/dist/dashboard/bot-payload.js.map +1 -1
  64. package/dist/dashboard/connector-api.d.ts.map +1 -1
  65. package/dist/dashboard/connector-api.js +14 -3
  66. package/dist/dashboard/connector-api.js.map +1 -1
  67. package/dist/dashboard/settings-write-applier.d.ts +2 -1
  68. package/dist/dashboard/settings-write-applier.d.ts.map +1 -1
  69. package/dist/dashboard/settings-write-applier.js +7 -0
  70. package/dist/dashboard/settings-write-applier.js.map +1 -1
  71. package/dist/dashboard/v3-runs-api.d.ts +26 -0
  72. package/dist/dashboard/v3-runs-api.d.ts.map +1 -0
  73. package/dist/dashboard/v3-runs-api.js +67 -0
  74. package/dist/dashboard/v3-runs-api.js.map +1 -0
  75. package/dist/dashboard/web/app.js +21 -9
  76. package/dist/dashboard/web/app.js.map +1 -1
  77. package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
  78. package/dist/dashboard/web/bot-defaults.js +128 -33
  79. package/dist/dashboard/web/bot-defaults.js.map +1 -1
  80. package/dist/dashboard/web/i18n.d.ts.map +1 -1
  81. package/dist/dashboard/web/i18n.js +42 -6
  82. package/dist/dashboard/web/i18n.js.map +1 -1
  83. package/dist/dashboard/web/legacy-workflow-link.d.ts +2 -0
  84. package/dist/dashboard/web/legacy-workflow-link.d.ts.map +1 -0
  85. package/dist/dashboard/web/legacy-workflow-link.js +12 -0
  86. package/dist/dashboard/web/legacy-workflow-link.js.map +1 -0
  87. package/dist/dashboard/web/settings.d.ts.map +1 -1
  88. package/dist/dashboard/web/settings.js +11 -0
  89. package/dist/dashboard/web/settings.js.map +1 -1
  90. package/dist/dashboard/web/v3-terminal.d.ts +11 -0
  91. package/dist/dashboard/web/v3-terminal.d.ts.map +1 -0
  92. package/dist/dashboard/web/v3-terminal.js +143 -0
  93. package/dist/dashboard/web/v3-terminal.js.map +1 -0
  94. package/dist/dashboard/web/v3.d.ts +2 -0
  95. package/dist/dashboard/web/v3.d.ts.map +1 -0
  96. package/dist/dashboard/web/v3.js +564 -0
  97. package/dist/dashboard/web/v3.js.map +1 -0
  98. package/dist/dashboard/web/whiteboards.d.ts.map +1 -1
  99. package/dist/dashboard/web/whiteboards.js +14 -5
  100. package/dist/dashboard/web/whiteboards.js.map +1 -1
  101. package/dist/dashboard/web/workflows.d.ts.map +1 -1
  102. package/dist/dashboard/web/workflows.js +12 -8
  103. package/dist/dashboard/web/workflows.js.map +1 -1
  104. package/dist/dashboard-web/app.js +834 -724
  105. package/dist/dashboard-web/apple-touch-icon.png +0 -0
  106. package/dist/dashboard-web/favicon.png +0 -0
  107. package/dist/dashboard-web/index.html +3 -1
  108. package/dist/dashboard-web/style.css +223 -0
  109. package/dist/dashboard.js +170 -10
  110. package/dist/dashboard.js.map +1 -1
  111. package/dist/global-config.d.ts +10 -0
  112. package/dist/global-config.d.ts.map +1 -1
  113. package/dist/global-config.js +8 -0
  114. package/dist/global-config.js.map +1 -1
  115. package/dist/i18n/en.d.ts.map +1 -1
  116. package/dist/i18n/en.js +23 -3
  117. package/dist/i18n/en.js.map +1 -1
  118. package/dist/i18n/zh.d.ts.map +1 -1
  119. package/dist/i18n/zh.js +23 -3
  120. package/dist/i18n/zh.js.map +1 -1
  121. package/dist/im/lark/card-handler.d.ts +12 -0
  122. package/dist/im/lark/card-handler.d.ts.map +1 -1
  123. package/dist/im/lark/card-handler.js +28 -0
  124. package/dist/im/lark/card-handler.js.map +1 -1
  125. package/dist/im/lark/client.d.ts.map +1 -1
  126. package/dist/im/lark/client.js +3 -12
  127. package/dist/im/lark/client.js.map +1 -1
  128. package/dist/im/lark/event-dispatcher.d.ts +2 -1
  129. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  130. package/dist/im/lark/event-dispatcher.js +20 -6
  131. package/dist/im/lark/event-dispatcher.js.map +1 -1
  132. package/dist/im/lark/grant-command.js +4 -4
  133. package/dist/im/lark/grant-command.js.map +1 -1
  134. package/dist/im/lark/message-parser.d.ts +29 -1
  135. package/dist/im/lark/message-parser.d.ts.map +1 -1
  136. package/dist/im/lark/message-parser.js +35 -1
  137. package/dist/im/lark/message-parser.js.map +1 -1
  138. package/dist/im/lark/v3-blocked-card-handler.d.ts +28 -0
  139. package/dist/im/lark/v3-blocked-card-handler.d.ts.map +1 -0
  140. package/dist/im/lark/v3-blocked-card-handler.js +134 -0
  141. package/dist/im/lark/v3-blocked-card-handler.js.map +1 -0
  142. package/dist/im/lark/v3-blocked-card.d.ts +75 -0
  143. package/dist/im/lark/v3-blocked-card.d.ts.map +1 -0
  144. package/dist/im/lark/v3-blocked-card.js +206 -0
  145. package/dist/im/lark/v3-blocked-card.js.map +1 -0
  146. package/dist/im/lark/v3-gate-card-handler.d.ts +31 -0
  147. package/dist/im/lark/v3-gate-card-handler.d.ts.map +1 -0
  148. package/dist/im/lark/v3-gate-card-handler.js +110 -0
  149. package/dist/im/lark/v3-gate-card-handler.js.map +1 -0
  150. package/dist/im/lark/v3-gate-card.d.ts +47 -0
  151. package/dist/im/lark/v3-gate-card.d.ts.map +1 -0
  152. package/dist/im/lark/v3-gate-card.js +119 -0
  153. package/dist/im/lark/v3-gate-card.js.map +1 -0
  154. package/dist/im/lark/v3-loop-grant-card-handler.d.ts +28 -0
  155. package/dist/im/lark/v3-loop-grant-card-handler.d.ts.map +1 -0
  156. package/dist/im/lark/v3-loop-grant-card-handler.js +90 -0
  157. package/dist/im/lark/v3-loop-grant-card-handler.js.map +1 -0
  158. package/dist/im/lark/v3-loop-grant-card.d.ts +46 -0
  159. package/dist/im/lark/v3-loop-grant-card.d.ts.map +1 -0
  160. package/dist/im/lark/v3-loop-grant-card.js +119 -0
  161. package/dist/im/lark/v3-loop-grant-card.js.map +1 -0
  162. package/dist/im/lark/v3-revisit-grant-card-handler.d.ts +29 -0
  163. package/dist/im/lark/v3-revisit-grant-card-handler.d.ts.map +1 -0
  164. package/dist/im/lark/v3-revisit-grant-card-handler.js +96 -0
  165. package/dist/im/lark/v3-revisit-grant-card-handler.js.map +1 -0
  166. package/dist/im/lark/v3-revisit-grant-card.d.ts +52 -0
  167. package/dist/im/lark/v3-revisit-grant-card.d.ts.map +1 -0
  168. package/dist/im/lark/v3-revisit-grant-card.js +123 -0
  169. package/dist/im/lark/v3-revisit-grant-card.js.map +1 -0
  170. package/dist/im/lark/workflow-cards.d.ts.map +1 -1
  171. package/dist/im/lark/workflow-cards.js +5 -1
  172. package/dist/im/lark/workflow-cards.js.map +1 -1
  173. package/dist/im/lark/workflow-progress-card.d.ts +1 -1
  174. package/dist/im/lark/workflow-progress-card.js +1 -1
  175. package/dist/im/lark/workflow-slash-command.d.ts +28 -0
  176. package/dist/im/lark/workflow-slash-command.d.ts.map +1 -1
  177. package/dist/im/lark/workflow-slash-command.js +61 -5
  178. package/dist/im/lark/workflow-slash-command.js.map +1 -1
  179. package/dist/platform/binding.d.ts +6 -0
  180. package/dist/platform/binding.d.ts.map +1 -1
  181. package/dist/platform/binding.js +17 -0
  182. package/dist/platform/binding.js.map +1 -1
  183. package/dist/platform/tunnel-client.d.ts +2 -0
  184. package/dist/platform/tunnel-client.d.ts.map +1 -1
  185. package/dist/platform/tunnel-client.js.map +1 -1
  186. package/dist/services/bot-config-store.d.ts.map +1 -1
  187. package/dist/services/bot-config-store.js +1 -0
  188. package/dist/services/bot-config-store.js.map +1 -1
  189. package/dist/services/card-prefs-store.d.ts +4 -0
  190. package/dist/services/card-prefs-store.d.ts.map +1 -1
  191. package/dist/services/card-prefs-store.js +19 -0
  192. package/dist/services/card-prefs-store.js.map +1 -1
  193. package/dist/services/oncall-store.d.ts +25 -0
  194. package/dist/services/oncall-store.d.ts.map +1 -1
  195. package/dist/services/oncall-store.js +56 -0
  196. package/dist/services/oncall-store.js.map +1 -1
  197. package/dist/services/transcript-resolver.d.ts.map +1 -1
  198. package/dist/services/transcript-resolver.js +21 -4
  199. package/dist/services/transcript-resolver.js.map +1 -1
  200. package/dist/setup/bot-config-editor.d.ts +7 -0
  201. package/dist/setup/bot-config-editor.d.ts.map +1 -1
  202. package/dist/setup/bot-config-editor.js +33 -0
  203. package/dist/setup/bot-config-editor.js.map +1 -1
  204. package/dist/skills/definitions.d.ts.map +1 -1
  205. package/dist/skills/definitions.js +208 -4
  206. package/dist/skills/definitions.js.map +1 -1
  207. package/dist/types.d.ts +1 -0
  208. package/dist/types.d.ts.map +1 -1
  209. package/dist/utils/terminal-favicon.d.ts +2 -0
  210. package/dist/utils/terminal-favicon.d.ts.map +1 -0
  211. package/dist/utils/terminal-favicon.js +5 -0
  212. package/dist/utils/terminal-favicon.js.map +1 -0
  213. package/dist/worker.js +152 -8
  214. package/dist/worker.js.map +1 -1
  215. package/dist/workflows/definition.d.ts +80 -80
  216. package/dist/workflows/events/payloads.d.ts +4 -4
  217. package/dist/workflows/events/schema.d.ts +16 -16
  218. package/dist/workflows/v3/architect.d.ts +37 -0
  219. package/dist/workflows/v3/architect.d.ts.map +1 -0
  220. package/dist/workflows/v3/architect.js +226 -0
  221. package/dist/workflows/v3/architect.js.map +1 -0
  222. package/dist/workflows/v3/bot-resolve.d.ts +21 -0
  223. package/dist/workflows/v3/bot-resolve.d.ts.map +1 -0
  224. package/dist/workflows/v3/bot-resolve.js +48 -0
  225. package/dist/workflows/v3/bot-resolve.js.map +1 -0
  226. package/dist/workflows/v3/cli-run.d.ts +24 -0
  227. package/dist/workflows/v3/cli-run.d.ts.map +1 -0
  228. package/dist/workflows/v3/cli-run.js +265 -0
  229. package/dist/workflows/v3/cli-run.js.map +1 -0
  230. package/dist/workflows/v3/contract.d.ts +302 -0
  231. package/dist/workflows/v3/contract.d.ts.map +1 -0
  232. package/dist/workflows/v3/contract.js +91 -0
  233. package/dist/workflows/v3/contract.js.map +1 -0
  234. package/dist/workflows/v3/daemon-run.d.ts +311 -0
  235. package/dist/workflows/v3/daemon-run.d.ts.map +1 -0
  236. package/dist/workflows/v3/daemon-run.js +775 -0
  237. package/dist/workflows/v3/daemon-run.js.map +1 -0
  238. package/dist/workflows/v3/dag.d.ts +332 -0
  239. package/dist/workflows/v3/dag.d.ts.map +1 -0
  240. package/dist/workflows/v3/dag.js +1040 -0
  241. package/dist/workflows/v3/dag.js.map +1 -0
  242. package/dist/workflows/v3/ephemeral-pool.d.ts +29 -0
  243. package/dist/workflows/v3/ephemeral-pool.d.ts.map +1 -0
  244. package/dist/workflows/v3/ephemeral-pool.js +331 -0
  245. package/dist/workflows/v3/ephemeral-pool.js.map +1 -0
  246. package/dist/workflows/v3/grill-state.d.ts +92 -0
  247. package/dist/workflows/v3/grill-state.d.ts.map +1 -0
  248. package/dist/workflows/v3/grill-state.js +151 -0
  249. package/dist/workflows/v3/grill-state.js.map +1 -0
  250. package/dist/workflows/v3/host.d.ts +88 -0
  251. package/dist/workflows/v3/host.d.ts.map +1 -0
  252. package/dist/workflows/v3/host.js +349 -0
  253. package/dist/workflows/v3/host.js.map +1 -0
  254. package/dist/workflows/v3/human-gate.d.ts +85 -0
  255. package/dist/workflows/v3/human-gate.d.ts.map +1 -0
  256. package/dist/workflows/v3/human-gate.js +153 -0
  257. package/dist/workflows/v3/human-gate.js.map +1 -0
  258. package/dist/workflows/v3/journal.d.ts +207 -0
  259. package/dist/workflows/v3/journal.d.ts.map +1 -0
  260. package/dist/workflows/v3/journal.js +74 -0
  261. package/dist/workflows/v3/journal.js.map +1 -0
  262. package/dist/workflows/v3/manifest.d.ts +17 -0
  263. package/dist/workflows/v3/manifest.d.ts.map +1 -0
  264. package/dist/workflows/v3/manifest.js +266 -0
  265. package/dist/workflows/v3/manifest.js.map +1 -0
  266. package/dist/workflows/v3/ops-projection.d.ts +110 -0
  267. package/dist/workflows/v3/ops-projection.d.ts.map +1 -0
  268. package/dist/workflows/v3/ops-projection.js +0 -0
  269. package/dist/workflows/v3/ops-projection.js.map +1 -0
  270. package/dist/workflows/v3/orchestrator.d.ts +168 -0
  271. package/dist/workflows/v3/orchestrator.d.ts.map +1 -0
  272. package/dist/workflows/v3/orchestrator.js +417 -0
  273. package/dist/workflows/v3/orchestrator.js.map +1 -0
  274. package/dist/workflows/v3/runtime.d.ts +193 -0
  275. package/dist/workflows/v3/runtime.d.ts.map +1 -0
  276. package/dist/workflows/v3/runtime.js +1284 -0
  277. package/dist/workflows/v3/runtime.js.map +1 -0
  278. package/dist/workflows/v3/spec.d.ts +32 -0
  279. package/dist/workflows/v3/spec.d.ts.map +1 -0
  280. package/dist/workflows/v3/spec.js +173 -0
  281. package/dist/workflows/v3/spec.js.map +1 -0
  282. package/dist/workflows/v3/state.d.ts +74 -0
  283. package/dist/workflows/v3/state.d.ts.map +1 -0
  284. package/dist/workflows/v3/state.js +353 -0
  285. package/dist/workflows/v3/state.js.map +1 -0
  286. package/package.json +2 -2
  287. package/dist/dashboard/web/workflow-catalog.d.ts +0 -2
  288. package/dist/dashboard/web/workflow-catalog.d.ts.map +0 -1
  289. package/dist/dashboard/web/workflow-catalog.js +0 -323
  290. package/dist/dashboard/web/workflow-catalog.js.map +0 -1
@@ -0,0 +1,266 @@
1
+ /**
2
+ * v3 node manifest validator.
3
+ *
4
+ * Goal-mode workers write `manifest.json` at BOTMUX_GOAL_MANIFEST_PATH.
5
+ * The runtime treats that file as untrusted agent output: this module checks
6
+ * the shape, status invariants, path containment, file metadata, and hashes
7
+ * before downstream nodes receive any file paths.
8
+ */
9
+ import { createHash } from 'node:crypto';
10
+ import { promises as fs } from 'node:fs';
11
+ import { isAbsolute, resolve } from 'node:path';
12
+ import { MANIFEST_FILE_KINDS, MANIFEST_PREVIEW_MAX_BYTES, MANIFEST_SCHEMA_VERSION, MANIFEST_SUMMARY_MAX_BYTES, MANIFEST_STATUSES, } from './contract.js';
13
+ export class ManifestValidationError extends Error {
14
+ problems;
15
+ constructor(problems) {
16
+ super(`Invalid v3 manifest:\n - ${problems.join('\n - ')}`);
17
+ this.problems = problems;
18
+ this.name = 'ManifestValidationError';
19
+ }
20
+ }
21
+ export async function readAndValidateManifest(manifestPath, outputDir) {
22
+ let raw;
23
+ try {
24
+ raw = await fs.readFile(manifestPath, 'utf-8');
25
+ }
26
+ catch (err) {
27
+ throw new ManifestValidationError([
28
+ `manifest not readable at ${manifestPath}: ${err instanceof Error ? err.message : String(err)}`,
29
+ ]);
30
+ }
31
+ let parsed;
32
+ try {
33
+ parsed = JSON.parse(raw);
34
+ }
35
+ catch (err) {
36
+ throw new ManifestValidationError([
37
+ `manifest is not valid JSON: ${err instanceof Error ? err.message : String(err)}`,
38
+ ]);
39
+ }
40
+ return validateManifest(parsed, outputDir);
41
+ }
42
+ export async function validateManifest(value, outputDir) {
43
+ const problems = [];
44
+ const outputRoot = await canonicalDir(outputDir, problems, 'outputDir');
45
+ if (!isRecord(value)) {
46
+ throw new ManifestValidationError(['manifest root must be an object']);
47
+ }
48
+ const schemaVersion = value.schemaVersion;
49
+ if (schemaVersion !== MANIFEST_SCHEMA_VERSION) {
50
+ problems.push(`schemaVersion must be ${MANIFEST_SCHEMA_VERSION} (got ${JSON.stringify(schemaVersion)})`);
51
+ }
52
+ const status = value.status;
53
+ if (typeof status !== 'string' || !isManifestStatus(status)) {
54
+ problems.push(`status must be one of ${MANIFEST_STATUSES.join(' | ')} (got ${JSON.stringify(status)})`);
55
+ }
56
+ const summary = normalizeString(value.summary, 'summary', MANIFEST_SUMMARY_MAX_BYTES, problems);
57
+ const filesRaw = value.files;
58
+ if (!Array.isArray(filesRaw)) {
59
+ problems.push('files must be an array');
60
+ }
61
+ const error = normalizeError(value.error, problems);
62
+ const files = [];
63
+ if (Array.isArray(filesRaw)) {
64
+ for (let i = 0; i < filesRaw.length; i++) {
65
+ const file = await normalizeFile(filesRaw[i], i, outputRoot, problems);
66
+ if (file)
67
+ files.push(file);
68
+ }
69
+ }
70
+ if (status === 'ok') {
71
+ if (files.length < 1)
72
+ problems.push('status "ok" requires at least one file');
73
+ if (value.error !== undefined)
74
+ problems.push('status "ok" must not include error');
75
+ }
76
+ else if (status === 'fail') {
77
+ if (!error)
78
+ problems.push('status "fail" requires error');
79
+ }
80
+ if (problems.length > 0)
81
+ throw new ManifestValidationError(problems);
82
+ return {
83
+ schemaVersion: MANIFEST_SCHEMA_VERSION,
84
+ status: status,
85
+ summary,
86
+ ...(error ? { error } : {}),
87
+ files,
88
+ };
89
+ }
90
+ export function resolveManifestFilePath(outputDir, relativePath) {
91
+ return resolve(outputDir, relativePath);
92
+ }
93
+ function isRecord(value) {
94
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
95
+ }
96
+ async function canonicalDir(path, problems, label) {
97
+ try {
98
+ const st = await fs.stat(path);
99
+ if (!st.isDirectory()) {
100
+ problems.push(`${label} is not a directory: ${path}`);
101
+ return resolve(path);
102
+ }
103
+ return await fs.realpath(path);
104
+ }
105
+ catch (err) {
106
+ problems.push(`${label} is not accessible at ${path}: ${err instanceof Error ? err.message : String(err)}`);
107
+ return resolve(path);
108
+ }
109
+ }
110
+ function normalizeString(value, field, maxBytes, problems) {
111
+ if (typeof value !== 'string') {
112
+ problems.push(`${field} must be a string`);
113
+ return '';
114
+ }
115
+ return truncateUtf8(value, maxBytes);
116
+ }
117
+ function normalizeError(value, problems) {
118
+ if (value === undefined)
119
+ return undefined;
120
+ if (!isRecord(value)) {
121
+ problems.push('error must be an object when present');
122
+ return undefined;
123
+ }
124
+ const code = value.code;
125
+ const message = value.message;
126
+ const retryable = value.retryable;
127
+ if (typeof code !== 'string' || code.trim() === '')
128
+ problems.push('error.code must be a non-empty string');
129
+ if (typeof message !== 'string' || message.trim() === '')
130
+ problems.push('error.message must be a non-empty string');
131
+ if (retryable !== undefined && typeof retryable !== 'boolean')
132
+ problems.push('error.retryable must be boolean when present');
133
+ if (typeof code !== 'string' || typeof message !== 'string')
134
+ return undefined;
135
+ return {
136
+ code,
137
+ message,
138
+ ...(typeof retryable === 'boolean' ? { retryable } : {}),
139
+ };
140
+ }
141
+ async function normalizeFile(value, index, outputRoot, problems) {
142
+ const prefix = `files[${index}]`;
143
+ if (!isRecord(value)) {
144
+ problems.push(`${prefix} must be an object`);
145
+ return undefined;
146
+ }
147
+ const name = value.name;
148
+ const path = value.path;
149
+ const kind = value.kind;
150
+ const bytes = value.bytes;
151
+ const sha256 = value.sha256;
152
+ const mime = value.mime;
153
+ if (typeof name !== 'string' || name.trim() === '')
154
+ problems.push(`${prefix}.name must be a non-empty string`);
155
+ if (typeof path !== 'string' || path.trim() === '')
156
+ problems.push(`${prefix}.path must be a non-empty relative string`);
157
+ if (typeof kind !== 'string' || !isManifestFileKind(kind)) {
158
+ problems.push(`${prefix}.kind must be one of ${MANIFEST_FILE_KINDS.join(' | ')}`);
159
+ }
160
+ if (typeof bytes !== 'number' || !Number.isInteger(bytes) || bytes < 0) {
161
+ problems.push(`${prefix}.bytes must be a non-negative integer`);
162
+ }
163
+ if (typeof sha256 !== 'string')
164
+ problems.push(`${prefix}.sha256 must be a string`);
165
+ if (typeof mime !== 'string' || mime.trim() === '')
166
+ problems.push(`${prefix}.mime must be a non-empty string`);
167
+ const preview = value.preview === undefined
168
+ ? undefined
169
+ : normalizeString(value.preview, `${prefix}.preview`, MANIFEST_PREVIEW_MAX_BYTES, problems);
170
+ if (typeof path === 'string') {
171
+ await validateFileOnDisk(prefix, outputRoot, path, kind, bytes, sha256, problems);
172
+ }
173
+ if (typeof name !== 'string' ||
174
+ typeof path !== 'string' ||
175
+ typeof kind !== 'string' ||
176
+ !isManifestFileKind(kind) ||
177
+ typeof bytes !== 'number' ||
178
+ typeof sha256 !== 'string' ||
179
+ typeof mime !== 'string') {
180
+ return undefined;
181
+ }
182
+ return {
183
+ name,
184
+ path,
185
+ kind,
186
+ bytes,
187
+ sha256,
188
+ mime,
189
+ ...(preview !== undefined ? { preview } : {}),
190
+ };
191
+ }
192
+ async function validateFileOnDisk(prefix, outputRoot, relativePath, kind, bytes, sha256, problems) {
193
+ if (isAbsolute(relativePath)) {
194
+ problems.push(`${prefix}.path must be relative to outputDir`);
195
+ return;
196
+ }
197
+ if (relativePath.includes('\0')) {
198
+ problems.push(`${prefix}.path must not contain NUL bytes`);
199
+ return;
200
+ }
201
+ const candidate = resolveManifestFilePath(outputRoot, relativePath);
202
+ let real;
203
+ try {
204
+ real = await fs.realpath(candidate);
205
+ }
206
+ catch (err) {
207
+ problems.push(`${prefix}.path does not exist under outputDir: ${relativePath} (${err instanceof Error ? err.message : String(err)})`);
208
+ return;
209
+ }
210
+ if (!isPathInside(outputRoot, real)) {
211
+ problems.push(`${prefix}.path escapes outputDir: ${relativePath}`);
212
+ return;
213
+ }
214
+ let st;
215
+ try {
216
+ st = await fs.stat(real);
217
+ }
218
+ catch (err) {
219
+ problems.push(`${prefix}.path is not stat-able: ${relativePath} (${err instanceof Error ? err.message : String(err)})`);
220
+ return;
221
+ }
222
+ if (kind === 'directory') {
223
+ if (!st.isDirectory())
224
+ problems.push(`${prefix}.kind is directory but path is not a directory`);
225
+ if (sha256 !== '')
226
+ problems.push(`${prefix}.sha256 must be "" for directory entries`);
227
+ return;
228
+ }
229
+ if (st.isDirectory()) {
230
+ problems.push(`${prefix}.path is a directory but kind is ${JSON.stringify(kind)}`);
231
+ return;
232
+ }
233
+ if (!st.isFile()) {
234
+ problems.push(`${prefix}.path must be a regular file or directory`);
235
+ return;
236
+ }
237
+ if (typeof bytes === 'number' && st.size !== bytes) {
238
+ problems.push(`${prefix}.bytes mismatch: manifest=${bytes}, actual=${st.size}`);
239
+ }
240
+ if (typeof sha256 === 'string') {
241
+ const actual = await sha256File(real);
242
+ if (actual !== sha256)
243
+ problems.push(`${prefix}.sha256 mismatch`);
244
+ }
245
+ }
246
+ function isManifestFileKind(value) {
247
+ return MANIFEST_FILE_KINDS.includes(value);
248
+ }
249
+ function isManifestStatus(value) {
250
+ return MANIFEST_STATUSES.includes(value);
251
+ }
252
+ function isPathInside(parentReal, childReal) {
253
+ const parent = parentReal.endsWith('/') ? parentReal : `${parentReal}/`;
254
+ return childReal === parentReal || childReal.startsWith(parent);
255
+ }
256
+ async function sha256File(path) {
257
+ const buf = await fs.readFile(path);
258
+ return createHash('sha256').update(buf).digest('hex');
259
+ }
260
+ function truncateUtf8(value, maxBytes) {
261
+ const buf = Buffer.from(value, 'utf-8');
262
+ if (buf.length <= maxBytes)
263
+ return value;
264
+ return buf.subarray(0, maxBytes).toString('utf-8').replace(/\uFFFD+$/g, '');
265
+ }
266
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/workflows/v3/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EACL,mBAAmB,EACnB,0BAA0B,EAC1B,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,GAKlB,MAAM,eAAe,CAAC;AAEvB,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACpB;IAA5B,YAA4B,QAAkB;QAC5C,KAAK,CAAC,6BAA6B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QADpC,aAAQ,GAAR,QAAQ,CAAU;QAE5C,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,YAAoB,EACpB,SAAiB;IAEjB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,uBAAuB,CAAC;YAChC,4BAA4B,YAAY,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAChG,CAAC,CAAC;IACL,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,uBAAuB,CAAC;YAChC,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAClF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAc,EAAE,SAAiB;IACtE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAExE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,uBAAuB,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAC1C,IAAI,aAAa,KAAK,uBAAuB,EAAE,CAAC;QAC9C,QAAQ,CAAC,IAAI,CAAC,yBAAyB,uBAAuB,SAAS,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,QAAQ,CAAC,IAAI,CAAC,yBAAyB,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1G,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,QAAQ,CAAC,CAAC;IAChG,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YACvE,IAAI,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IACrF,CAAC;SAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAErE,OAAO;QACL,aAAa,EAAE,uBAAuB;QACtC,MAAM,EAAE,MAAwB;QAChC,OAAO;QACP,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,KAAK;KACN,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAiB,EAAE,YAAoB;IAC7E,OAAO,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,QAAkB,EAAE,KAAa;IACzE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,wBAAwB,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,yBAAyB,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5G,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,KAAc,EACd,KAAa,EACb,QAAgB,EAChB,QAAkB;IAElB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,mBAAmB,CAAC,CAAC;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,cAAc,CACrB,KAAc,EACd,QAAkB;IAElB,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACtD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAClC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC3G,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACpH,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,SAAS,KAAK,SAAS;QAAE,QAAQ,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC7H,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC9E,OAAO;QACL,IAAI;QACJ,OAAO;QACP,GAAG,CAAC,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,KAAc,EACd,KAAa,EACb,UAAkB,EAClB,QAAkB;IAElB,MAAM,MAAM,GAAG,SAAS,KAAK,GAAG,CAAC;IACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,oBAAoB,CAAC,CAAC;QAC7C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IAExB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,kCAAkC,CAAC,CAAC;IAC/G,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,2CAA2C,CAAC,CAAC;IACxH,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1D,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,wBAAwB,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACvE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,uCAAuC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,0BAA0B,CAAC,CAAC;IACnF,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,kCAAkC,CAAC,CAAC;IAE/G,MAAM,OAAO,GACX,KAAK,CAAC,OAAO,KAAK,SAAS;QACzB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,MAAM,UAAU,EAAE,0BAA0B,EAAE,QAAQ,CAAC,CAAC;IAEhG,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACpF,CAAC;IAED,IACE,OAAO,IAAI,KAAK,QAAQ;QACxB,OAAO,IAAI,KAAK,QAAQ;QACxB,OAAO,IAAI,KAAK,QAAQ;QACxB,CAAC,kBAAkB,CAAC,IAAI,CAAC;QACzB,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,MAAM,KAAK,QAAQ;QAC1B,OAAO,IAAI,KAAK,QAAQ,EACxB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,MAAM;QACN,IAAI;QACJ,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAc,EACd,UAAkB,EAClB,YAAoB,EACpB,IAAa,EACb,KAAc,EACd,MAAe,EACf,QAAkB;IAElB,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,qCAAqC,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,kCAAkC,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,uBAAuB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IACpE,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,yCAAyC,YAAY,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtI,OAAO;IACT,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,4BAA4B,YAAY,EAAE,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,IAAI,EAAE,CAAC;IACP,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,2BAA2B,YAAY,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxH,OAAO;IACT,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,gDAAgD,CAAC,CAAC;QAChG,IAAI,MAAM,KAAK,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,0CAA0C,CAAC,CAAC;QACtF,OAAO;IACT,CAAC;IAED,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,oCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO;IACT,CAAC;IACD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,2CAA2C,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACnD,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,6BAA6B,KAAK,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,MAAM,KAAK,MAAM;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,kBAAkB,CAAC,CAAC;IACpE,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAQ,mBAAyC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAQ,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,YAAY,CAAC,UAAkB,EAAE,SAAiB;IACzD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC;IACxE,OAAO,SAAS,KAAK,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAClE,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,QAAgB;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACxC,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { type V3RunStatus } from './state.js';
2
+ import type { V3NodeStatus } from './orchestrator.js';
3
+ export declare function isValidRunId(runId: string): boolean;
4
+ export declare function isValidWaitId(waitId: string): boolean;
5
+ /** Default run root, aligned with cli-run.ts / grill-state.ts. */
6
+ export declare function defaultRunsDir(): string;
7
+ export interface WebTerminalView {
8
+ sessionId: string;
9
+ webPort?: number;
10
+ /** `live` while the node's work worker is in flight; `closed` once the node
11
+ * reached a terminal verdict (then replay via the pty-log endpoint). */
12
+ status: 'live' | 'closed';
13
+ }
14
+ export interface RunNodeView {
15
+ id: string;
16
+ status: V3NodeStatus;
17
+ /** Upstream node ids (graph edges) — from the persisted dag.json. */
18
+ depends: string[];
19
+ goal?: string;
20
+ attemptId?: string;
21
+ /** Present once the node's worker reported `nodeSessionReady`. */
22
+ webTerminal?: WebTerminalView;
23
+ /** Whether a raw PTY log exists for replay. The absolute path is NOT exposed
24
+ * to the frontend (codex review) — a replay endpoint locates it server-side
25
+ * via `ptyLogPathFor(runsDir, runId, nodeId)`. */
26
+ hasPtyLog: boolean;
27
+ /** Whether the node produced a manifest (i.e. succeeded with a recorded
28
+ * manifest). The raw fs path is NOT exposed — same rationale as `hasPtyLog`:
29
+ * `GET /api/v3/runs/:id` is link-shareable public-read, so a public reader
30
+ * must never see absolute `/root/.botmux/...` paths (codex security review
31
+ * 2026-06-02). A download, if ever needed, goes through a cookie-auth
32
+ * endpoint that locates the file server-side via runId/nodeId. */
33
+ hasManifest: boolean;
34
+ /** For blocked/failed nodes: the coarse error class + the node's
35
+ * self-reported `manifest.error.code` (e.g. AUTH_REQUIRED). The free-text
36
+ * `message` is deliberately NOT projected — it can quote validator problems
37
+ * containing absolute paths, and this view is link-shareable public-read. */
38
+ errorClass?: string;
39
+ errorCode?: string;
40
+ /** True for composite loop nodes (from dag.json). */
41
+ isLoop?: boolean;
42
+ /** Composite loop progress (loop nodes only, once started). `lastDecision`
43
+ * is the coarse enum; the free-text decision `detail` is deliberately NOT
44
+ * projected (it can quote agent-written result strings) — same public-read
45
+ * rationale as `message`. */
46
+ loopState?: {
47
+ iteration: number;
48
+ maxIterations?: number;
49
+ granted: number;
50
+ lastDecision?: 'exit' | 'continue' | 'exhausted';
51
+ /** Per-iteration verdict history (enum ONLY — same no-detail rationale).
52
+ * Lets the dashboard draw an honest round timeline instead of guessing
53
+ * past verdicts from `lastDecision`. */
54
+ decisions: Array<{
55
+ iteration: number;
56
+ decision: 'exit' | 'continue' | 'exhausted';
57
+ }>;
58
+ /** Body template shape (authored ids + body-internal depends) — the
59
+ * dashboard lays every round's mini-dag on this skeleton, so a round
60
+ * whose later nodes have not dispatched yet still shows its full shape
61
+ * (undispatched slots render as pending ghosts). */
62
+ bodyTemplate: Array<{
63
+ id: string;
64
+ depends: string[];
65
+ }>;
66
+ };
67
+ /** For loop BODY INSTANCE nodes (`repairLoop.i001.code`): the structured
68
+ * membership ref from the dispatch event. The id stays opaque — group by
69
+ * THIS, never parse the id string. */
70
+ loop?: {
71
+ loopId: string;
72
+ iteration: number;
73
+ bodyNodeId: string;
74
+ };
75
+ }
76
+ export interface RunView {
77
+ runId: string;
78
+ runStatus: V3RunStatus;
79
+ failedNodeId?: string;
80
+ blockedNodeId?: string;
81
+ nodes: RunNodeView[];
82
+ }
83
+ /**
84
+ * Project an already-resolved run dir into a `RunView`. Read-only + defensive:
85
+ * a missing journal / dag still yields a (possibly sparse) view rather than
86
+ * throwing — the dashboard polls this while a run is mid-flight.
87
+ */
88
+ export declare function projectRun(runId: string, runDir: string): RunView;
89
+ /**
90
+ * Validate a caller-supplied `runId`, resolve it under `runsDir` (re-checking
91
+ * the join stays inside runsDir — defense in depth), and project. Returns
92
+ * `undefined` for an invalid id / traversal attempt / missing run.
93
+ */
94
+ export declare function projectRunById(runsDir: string, runId: string): RunView | undefined;
95
+ /**
96
+ * Server-side resolver for a node's raw PTY log path (for the replay endpoint).
97
+ * The absolute path is NEVER in the public RunView — callers locate it here by
98
+ * runId/nodeId, and it's re-validated to be inside the run dir (defense in
99
+ * depth) before any read. Returns undefined for invalid id / traversal / no log.
100
+ */
101
+ export declare function ptyLogPathFor(runsDir: string, runId: string, nodeId: string): string | undefined;
102
+ export interface RunSummary {
103
+ runId: string;
104
+ runStatus: V3RunStatus;
105
+ nodeCount: number;
106
+ }
107
+ /** List runs under `runsDir` (dirs that have a journal.ndjson), newest-first by
108
+ * name (runIds carry a `<slug>-<yymmdd-hhmm>` stamp so name sort ≈ time sort). */
109
+ export declare function listRuns(runsDir: string): RunSummary[];
110
+ //# sourceMappingURL=ops-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops-projection.d.ts","sourceRoot":"","sources":["../../../src/workflows/v3/ops-projection.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAQD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,kEAAkE;AAClE,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IAIjB;6EACyE;IACzE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;uDAEmD;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;uEAKmE;IACnE,WAAW,EAAE,OAAO,CAAC;IACrB;;;kFAG8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;kCAG8B;IAC9B,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;QACjD;;iDAEyC;QACzC,SAAS,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,CAAA;SAAE,CAAC,CAAC;QACrF;;;6DAGqD;QACrD,YAAY,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;KACxD,CAAC;IACF;;2CAEuC;IACvC,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAClE;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AA+DD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAuHjE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAOlF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAyBhG;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;mFACmF;AACnF,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAUtD"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops-projection.js","sourceRoot":"","sources":["../../../src/workflows/v3/ops-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * v3 orchestrator — pure decision layer.
3
+ *
4
+ * Mirrors v0.2's `orchestrator.ts` pattern: a pure function maps the current
5
+ * run state + DAG to a list of action descriptors. The runtime (`runtime.ts`)
6
+ * owns every side effect — journal/STATE writes, ephemeral-worker dispatch via
7
+ * `runNode`, humanGate card posting — and the per-bot/per-CLI/global
8
+ * concurrency caps. Keeping the decision pure makes the critical-path
9
+ * semantics testable without spawning workers or touching the filesystem.
10
+ *
11
+ * MVP scope: static DAG, fail-fast. No loops / decisions / dynamic expand
12
+ * (those are deferred — design Q3/§7). Gate set is frozen at authoring time;
13
+ * the orchestrator never invents or skips a gate (design Q10).
14
+ */
15
+ import { type V3Dag } from './dag.js';
16
+ import type { V3RunFailureReason } from './journal.js';
17
+ import type { V3LoopRef } from './journal.js';
18
+ export type V3NodeStatus = 'pending' | 'gateWaiting' | 'running' | 'done' | 'skipped' | 'cancelled' | 'blocked' | 'superseded' | 'failed';
19
+ export interface V3NodeState {
20
+ status: V3NodeStatus;
21
+ /** True once an approved humanGate cleared this node — so after approval the
22
+ * next tick dispatches work instead of re-dispatching the gate. A rejected
23
+ * gate transitions the node straight to `failed` (set by the runtime), so
24
+ * this flag only ever records the approved case. */
25
+ gateCleared?: boolean;
26
+ /** The current live runtime instance of this DEFINITION node (`A#002`).
27
+ * Set on dispatch; cleared when a revisit supersedes it (the node then
28
+ * re-dispatches a fresh instance). Absent on the pre-instance-layer path
29
+ * (plain nodeId-keyed events) and loop body expansions. */
30
+ effectiveInstanceId?: string;
31
+ }
32
+ /** nodeId → state. A node absent from the map is treated as `pending`. */
33
+ export type V3RunState = Map<string, V3NodeState>;
34
+ /**
35
+ * Per-loop composite state, folded from the loop lifecycle events. A loop
36
+ * absent from the map has not started. The loop's coarse status (running /
37
+ * blocked / done) lives in the regular node-state map under the loop's id;
38
+ * this struct carries what that one enum can't: where the iteration cursor is
39
+ * and what the last decision said.
40
+ */
41
+ export interface V3LoopState {
42
+ /** Current iteration, 1-based; 0 between loopStarted and the first
43
+ * loopIterationStarted. */
44
+ iteration: number;
45
+ /** True once the CURRENT iteration's decision event is recorded (reset by
46
+ * the next loopIterationStarted). */
47
+ decided: boolean;
48
+ /** The latest decision — drives what the orchestrator does next. */
49
+ lastDecision?: 'exit' | 'continue' | 'exhausted';
50
+ /** Extra iterations granted (each loopIterationGranted adds one); the
51
+ * effective budget is maxIterations + granted. */
52
+ granted: number;
53
+ /** An appended-but-unconsumed grant (cleared by the next
54
+ * loopIterationStarted) — the idempotency key for "already granted". */
55
+ pendingGrant: boolean;
56
+ }
57
+ /** loopId → loop state. */
58
+ export type V3LoopRunState = Map<string, V3LoopState>;
59
+ export interface V3EdgeState {
60
+ active: boolean;
61
+ sourceAttemptId: string;
62
+ }
63
+ /** `${from}->${to}` → conditional edge state. */
64
+ export type V3EdgeRunState = Map<string, V3EdgeState>;
65
+ export interface V3OmittedInput {
66
+ from: string;
67
+ reason: 'edgeInactive' | 'sourceSkipped' | 'sourceCancelled' | 'earlyRelease';
68
+ }
69
+ export type V3Action =
70
+ /** Read one source result.json once and append edgeResolved. */
71
+ {
72
+ kind: 'resolveEdge';
73
+ from: string;
74
+ to: string;
75
+ }
76
+ /** Mark a node skipped because its triggerRule cannot be satisfied. */
77
+ | {
78
+ kind: 'skipNode';
79
+ nodeId: string;
80
+ detail?: string;
81
+ }
82
+ /** Abort an early-release loser whose remaining products are no longer used. */
83
+ | {
84
+ kind: 'cancelNode';
85
+ nodeId: string;
86
+ byNodeId: string;
87
+ detail?: string;
88
+ }
89
+ /** Post the humanGate approval card + persist a `waits/<id>.json` (Q10). */
90
+ | {
91
+ kind: 'dispatchGate';
92
+ nodeId: string;
93
+ instanceId?: string;
94
+ }
95
+ /** Spawn an ephemeral worker via `runNode` for this node's goal. `loop` is
96
+ * set for body-instance dispatches (the runtime synthesizes the instance
97
+ * node from the loop's body definition). `instanceId` is set when this is a
98
+ * cross-node-revisit RE-DISPATCH (`A#002`): the prior instance was
99
+ * superseded, so decideNext computes the next instance number deterministically
100
+ * from `state.instances` (constraint 4 — the action carries it, the runtime
101
+ * does not guess). Absent on a first dispatch / loop body (those keep the
102
+ * pre-instance-layer path until the runtime brick threads instances through). */
103
+ | {
104
+ kind: 'dispatchWork';
105
+ nodeId: string;
106
+ instanceId?: string;
107
+ loop?: V3LoopRef;
108
+ omitted?: V3OmittedInput[];
109
+ }
110
+ /** Outer deps of a loop are done → append loopStarted. */
111
+ | {
112
+ kind: 'startLoop';
113
+ loopId: string;
114
+ }
115
+ /** Begin iteration N (first, after a continue-decision, or after a grant). */
116
+ | {
117
+ kind: 'startLoopIteration';
118
+ loopId: string;
119
+ iteration: number;
120
+ }
121
+ /** Current iteration's body is fully done and undecided → the runtime reads
122
+ * the exit node's result.json, evaluates exit.when, appends the decision. */
123
+ | {
124
+ kind: 'evaluateLoopIteration';
125
+ loopId: string;
126
+ iteration: number;
127
+ }
128
+ /** Decision was 'exit' → seal the loop with a nodeSucceeded on the LOOP id
129
+ * carrying the output projection's manifest (downstream inputs/deps then
130
+ * treat the loop like any done node — zero special-casing). */
131
+ | {
132
+ kind: 'completeLoop';
133
+ loopId: string;
134
+ iteration: number;
135
+ }
136
+ /** Terminal: every node done; the run's product is the sink set. */
137
+ | {
138
+ kind: 'completeRunSucceeded';
139
+ }
140
+ /** Terminal (fail-fast): a node failed, so the run cannot proceed. */
141
+ | {
142
+ kind: 'completeRunFailed';
143
+ failedNodeId?: string;
144
+ reason?: V3RunFailureReason;
145
+ detail?: string;
146
+ }
147
+ /** Terminal-for-now: a node is blocked (contract failure, recoverable).
148
+ * Halts dispatch like failed, but the run can resume via a retry event. */
149
+ | {
150
+ kind: 'completeRunBlocked';
151
+ blockedNodeId: string;
152
+ };
153
+ /**
154
+ * Pure decision: given the current `state`, return every action that can be
155
+ * taken *now*. The runtime applies concurrency caps by acting on a prefix of
156
+ * the returned dispatch actions and re-invoking on the next tick — this
157
+ * function intentionally returns ALL ready dispatches (it does not throttle).
158
+ *
159
+ * Ordering follows topological order so callers see deps-ready nodes first.
160
+ * Fail-fast: the moment any node is `failed`, the only action is
161
+ * `completeRunFailed` (in-flight peers are torn down by the runtime / cancel).
162
+ * When no dispatch is possible and nothing is pending, the run is complete.
163
+ */
164
+ export declare function decideNext(dag: V3Dag, state: V3RunState, loops?: V3LoopRunState, edges?: V3EdgeRunState, instances?: V3RunState): V3Action[];
165
+ /** Sink nodes — no other node depends on them. Their products are the run's
166
+ * output. Pure helper for the runtime's success path. */
167
+ export declare function findSinks(dag: V3Dag): string[];
168
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/workflows/v3/orchestrator.ts"],"names":[],"mappings":"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"}