@runcore-sh/runcore 0.4.0 → 0.5.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 (351) hide show
  1. package/dictionary.json +2 -2
  2. package/dist/activity/log.js +2 -2
  3. package/dist/activity/log.js.map +1 -1
  4. package/dist/agents/governed-spawn.d.ts.map +1 -1
  5. package/dist/cli.js +101 -11
  6. package/dist/cli.js.map +1 -1
  7. package/dist/extensions/cache.d.ts +57 -0
  8. package/dist/extensions/cache.d.ts.map +1 -0
  9. package/dist/extensions/cache.js +173 -0
  10. package/dist/extensions/cache.js.map +1 -0
  11. package/dist/extensions/client.d.ts +55 -0
  12. package/dist/extensions/client.d.ts.map +1 -0
  13. package/dist/extensions/client.js +120 -0
  14. package/dist/extensions/client.js.map +1 -0
  15. package/dist/extensions/index.d.ts +13 -0
  16. package/dist/extensions/index.d.ts.map +1 -0
  17. package/dist/extensions/index.js +12 -0
  18. package/dist/extensions/index.js.map +1 -0
  19. package/dist/extensions/loader.d.ts +50 -0
  20. package/dist/extensions/loader.d.ts.map +1 -0
  21. package/dist/extensions/loader.js +166 -0
  22. package/dist/extensions/loader.js.map +1 -0
  23. package/dist/extensions/manifest.d.ts +38 -0
  24. package/dist/extensions/manifest.d.ts.map +1 -0
  25. package/dist/extensions/manifest.js +17 -0
  26. package/dist/extensions/manifest.js.map +1 -0
  27. package/dist/extensions/stubs.d.ts +27 -0
  28. package/dist/extensions/stubs.d.ts.map +1 -0
  29. package/dist/extensions/stubs.js +45 -0
  30. package/dist/extensions/stubs.js.map +1 -0
  31. package/dist/lib/audit.js +2 -2
  32. package/dist/lib/audit.js.map +1 -1
  33. package/dist/lib/brain-migrate.d.ts +21 -0
  34. package/dist/lib/brain-migrate.d.ts.map +1 -0
  35. package/dist/lib/brain-migrate.js +137 -0
  36. package/dist/lib/brain-migrate.js.map +1 -0
  37. package/dist/lib/paths.d.ts +27 -0
  38. package/dist/lib/paths.d.ts.map +1 -1
  39. package/dist/lib/paths.js +65 -0
  40. package/dist/lib/paths.js.map +1 -1
  41. package/dist/llm/call-log.d.ts +40 -0
  42. package/dist/llm/call-log.d.ts.map +1 -0
  43. package/dist/llm/call-log.js +35 -0
  44. package/dist/llm/call-log.js.map +1 -0
  45. package/dist/llm/complete.d.ts +6 -0
  46. package/dist/llm/complete.d.ts.map +1 -1
  47. package/dist/llm/complete.js +27 -0
  48. package/dist/llm/complete.js.map +1 -1
  49. package/dist/mcp-server.js +118 -2
  50. package/dist/mcp-server.js.map +1 -1
  51. package/dist/memory/file-backed.d.ts +4 -0
  52. package/dist/memory/file-backed.d.ts.map +1 -1
  53. package/dist/memory/file-backed.js +4 -0
  54. package/dist/memory/file-backed.js.map +1 -1
  55. package/dist/memory/vector-index.d.ts +4 -12
  56. package/dist/memory/vector-index.d.ts.map +1 -1
  57. package/dist/memory/vector-index.js +11 -93
  58. package/dist/memory/vector-index.js.map +1 -1
  59. package/dist/search/brain-docs.d.ts +17 -7
  60. package/dist/search/brain-docs.d.ts.map +1 -1
  61. package/dist/search/brain-docs.js +170 -52
  62. package/dist/search/brain-docs.js.map +1 -1
  63. package/dist/search/brain-rag.d.ts +45 -0
  64. package/dist/search/brain-rag.d.ts.map +1 -0
  65. package/dist/search/brain-rag.js +275 -0
  66. package/dist/search/brain-rag.js.map +1 -0
  67. package/dist/search/chunker.d.ts +24 -0
  68. package/dist/search/chunker.d.ts.map +1 -0
  69. package/dist/search/chunker.js +95 -0
  70. package/dist/search/chunker.js.map +1 -0
  71. package/dist/search/embedder.d.ts +16 -0
  72. package/dist/search/embedder.d.ts.map +1 -0
  73. package/dist/search/embedder.js +108 -0
  74. package/dist/search/embedder.js.map +1 -0
  75. package/dist/search/file-watcher.d.ts +11 -0
  76. package/dist/search/file-watcher.d.ts.map +1 -0
  77. package/dist/search/file-watcher.js +86 -0
  78. package/dist/search/file-watcher.js.map +1 -0
  79. package/dist/server.d.ts.map +1 -1
  80. package/dist/server.js +814 -472
  81. package/dist/server.js.map +1 -1
  82. package/dist/sessions/store.d.ts +9 -0
  83. package/dist/sessions/store.d.ts.map +1 -1
  84. package/dist/sessions/store.js.map +1 -1
  85. package/dist/settings.d.ts +26 -0
  86. package/dist/settings.d.ts.map +1 -1
  87. package/dist/settings.js +78 -2
  88. package/dist/settings.js.map +1 -1
  89. package/dist/tracing/init.d.ts +1 -1
  90. package/dist/tracing/init.d.ts.map +1 -1
  91. package/dist/utils/logger.js +2 -2
  92. package/dist/utils/logger.js.map +1 -1
  93. package/module-tiers.json +164 -0
  94. package/package.json +9 -13
  95. package/public/avatar/cache/1184385ec5522b57.mp4 +0 -0
  96. package/public/avatar/cache/1f15f6a1ebd7e439.mp4 +0 -0
  97. package/public/avatar/cache/2c7e47ff0bdeb8d1.mp4 +0 -0
  98. package/public/avatar/cache/5f308566f7abb8f2.mp4 +0 -0
  99. package/public/avatar/cache/62f9cfba848d724e.mp4 +0 -0
  100. package/public/avatar/cache/6d64e657e6bf2aab.mp4 +0 -0
  101. package/public/avatar/cache/763ad0349e0b6f26.mp4 +0 -0
  102. package/public/avatar/cache/81a516cfd461b2b9.mp4 +0 -0
  103. package/public/avatar/cache/9366de15fd6910ca.mp4 +0 -0
  104. package/public/avatar/cache/ade41a846b283895.mp4 +0 -0
  105. package/public/avatar/cache/b6066e5c65383eec.mp4 +0 -0
  106. package/public/avatar/cache/edadb75d37891fc7.mp4 +0 -0
  107. package/public/avatar/cache/f0ae159640621dd9.mp4 +0 -0
  108. package/public/avatar/cache/fc2e5419adf29d96.mp4 +0 -0
  109. package/public/index.html +379 -59
  110. package/dist/agents/autonomous.js +0 -749
  111. package/dist/agents/autonomous.js.map +0 -1
  112. package/dist/agents/commit.js +0 -113
  113. package/dist/agents/commit.js.map +0 -1
  114. package/dist/agents/continue.js +0 -158
  115. package/dist/agents/continue.js.map +0 -1
  116. package/dist/agents/cooldown.js +0 -397
  117. package/dist/agents/cooldown.js.map +0 -1
  118. package/dist/agents/dedup-guard.js +0 -131
  119. package/dist/agents/dedup-guard.js.map +0 -1
  120. package/dist/agents/feed.js +0 -176
  121. package/dist/agents/feed.js.map +0 -1
  122. package/dist/agents/governance.js +0 -292
  123. package/dist/agents/governance.js.map +0 -1
  124. package/dist/agents/governed-spawn.js +0 -192
  125. package/dist/agents/governed-spawn.js.map +0 -1
  126. package/dist/agents/heartbeat.js +0 -324
  127. package/dist/agents/heartbeat.js.map +0 -1
  128. package/dist/agents/instance-manager.js +0 -850
  129. package/dist/agents/instance-manager.js.map +0 -1
  130. package/dist/agents/issue-reporter.js +0 -123
  131. package/dist/agents/issue-reporter.js.map +0 -1
  132. package/dist/agents/issues.js +0 -141
  133. package/dist/agents/issues.js.map +0 -1
  134. package/dist/agents/locks.js +0 -234
  135. package/dist/agents/locks.js.map +0 -1
  136. package/dist/agents/memory.js +0 -93
  137. package/dist/agents/memory.js.map +0 -1
  138. package/dist/agents/monitor.js +0 -235
  139. package/dist/agents/monitor.js.map +0 -1
  140. package/dist/agents/orchestration.js +0 -715
  141. package/dist/agents/orchestration.js.map +0 -1
  142. package/dist/agents/recover.js +0 -166
  143. package/dist/agents/recover.js.map +0 -1
  144. package/dist/agents/reflection.js +0 -199
  145. package/dist/agents/reflection.js.map +0 -1
  146. package/dist/agents/runtime/bus.js +0 -174
  147. package/dist/agents/runtime/bus.js.map +0 -1
  148. package/dist/agents/runtime/config.js +0 -101
  149. package/dist/agents/runtime/config.js.map +0 -1
  150. package/dist/agents/runtime/driver.js +0 -214
  151. package/dist/agents/runtime/driver.js.map +0 -1
  152. package/dist/agents/runtime/errors.js +0 -40
  153. package/dist/agents/runtime/errors.js.map +0 -1
  154. package/dist/agents/runtime/index.js +0 -54
  155. package/dist/agents/runtime/index.js.map +0 -1
  156. package/dist/agents/runtime/lifecycle.js +0 -116
  157. package/dist/agents/runtime/lifecycle.js.map +0 -1
  158. package/dist/agents/runtime/manager.js +0 -948
  159. package/dist/agents/runtime/manager.js.map +0 -1
  160. package/dist/agents/runtime/registry.js +0 -195
  161. package/dist/agents/runtime/registry.js.map +0 -1
  162. package/dist/agents/runtime/resources.js +0 -146
  163. package/dist/agents/runtime/resources.js.map +0 -1
  164. package/dist/agents/runtime/types.js +0 -24
  165. package/dist/agents/runtime/types.js.map +0 -1
  166. package/dist/agents/spawn-policy.js +0 -202
  167. package/dist/agents/spawn-policy.js.map +0 -1
  168. package/dist/agents/spawn.js +0 -970
  169. package/dist/agents/spawn.js.map +0 -1
  170. package/dist/agents/triage.js +0 -81
  171. package/dist/agents/triage.js.map +0 -1
  172. package/dist/agents/workflow.js +0 -543
  173. package/dist/agents/workflow.js.map +0 -1
  174. package/dist/avatar/client.js +0 -172
  175. package/dist/avatar/client.js.map +0 -1
  176. package/dist/avatar/sidecar.js +0 -125
  177. package/dist/avatar/sidecar.js.map +0 -1
  178. package/dist/browser/sessions.js +0 -122
  179. package/dist/browser/sessions.js.map +0 -1
  180. package/dist/capabilities/definitions/browser.js +0 -242
  181. package/dist/capabilities/definitions/browser.js.map +0 -1
  182. package/dist/channels/whatsapp.js +0 -200
  183. package/dist/channels/whatsapp.js.map +0 -1
  184. package/dist/credentials/store.js +0 -189
  185. package/dist/credentials/store.js.map +0 -1
  186. package/dist/files/deep-index.js +0 -337
  187. package/dist/files/deep-index.js.map +0 -1
  188. package/dist/files/extract.js +0 -33
  189. package/dist/files/extract.js.map +0 -1
  190. package/dist/files/gdrive.js +0 -246
  191. package/dist/files/gdrive.js.map +0 -1
  192. package/dist/github/client.js +0 -408
  193. package/dist/github/client.js.map +0 -1
  194. package/dist/github/commit-analysis.js +0 -276
  195. package/dist/github/commit-analysis.js.map +0 -1
  196. package/dist/github/contributor-stats.js +0 -119
  197. package/dist/github/contributor-stats.js.map +0 -1
  198. package/dist/github/issue-sla.js +0 -220
  199. package/dist/github/issue-sla.js.map +0 -1
  200. package/dist/github/issue-triage.js +0 -286
  201. package/dist/github/issue-triage.js.map +0 -1
  202. package/dist/github/pr-readiness.js +0 -197
  203. package/dist/github/pr-readiness.js.map +0 -1
  204. package/dist/github/pr-review.js +0 -410
  205. package/dist/github/pr-review.js.map +0 -1
  206. package/dist/github/release-notes.js +0 -227
  207. package/dist/github/release-notes.js.map +0 -1
  208. package/dist/github/repo-health.js +0 -303
  209. package/dist/github/repo-health.js.map +0 -1
  210. package/dist/github/retry.js +0 -117
  211. package/dist/github/retry.js.map +0 -1
  212. package/dist/github/types.js +0 -8
  213. package/dist/github/types.js.map +0 -1
  214. package/dist/github/webhooks.js +0 -153
  215. package/dist/github/webhooks.js.map +0 -1
  216. package/dist/google/auth.js +0 -325
  217. package/dist/google/auth.js.map +0 -1
  218. package/dist/google/calendar-timer.js +0 -91
  219. package/dist/google/calendar-timer.js.map +0 -1
  220. package/dist/google/calendar.js +0 -270
  221. package/dist/google/calendar.js.map +0 -1
  222. package/dist/google/docs.js +0 -309
  223. package/dist/google/docs.js.map +0 -1
  224. package/dist/google/gmail-send.js +0 -219
  225. package/dist/google/gmail-send.js.map +0 -1
  226. package/dist/google/gmail-timer.js +0 -223
  227. package/dist/google/gmail-timer.js.map +0 -1
  228. package/dist/google/gmail.js +0 -470
  229. package/dist/google/gmail.js.map +0 -1
  230. package/dist/google/plugin.js +0 -169
  231. package/dist/google/plugin.js.map +0 -1
  232. package/dist/google/tasks-timer.js +0 -107
  233. package/dist/google/tasks-timer.js.map +0 -1
  234. package/dist/google/tasks.js +0 -331
  235. package/dist/google/tasks.js.map +0 -1
  236. package/dist/google/temporal.js +0 -176
  237. package/dist/google/temporal.js.map +0 -1
  238. package/dist/integrations/gate.js +0 -100
  239. package/dist/integrations/gate.js.map +0 -1
  240. package/dist/integrations/github.js +0 -331
  241. package/dist/integrations/github.js.map +0 -1
  242. package/dist/integrations/google-tasks.js +0 -432
  243. package/dist/integrations/google-tasks.js.map +0 -1
  244. package/dist/mdns.js +0 -110
  245. package/dist/mdns.js.map +0 -1
  246. package/dist/notifications/channel.js +0 -83
  247. package/dist/notifications/channel.js.map +0 -1
  248. package/dist/notifications/channels/adapter.js +0 -55
  249. package/dist/notifications/channels/adapter.js.map +0 -1
  250. package/dist/notifications/channels/index.js +0 -6
  251. package/dist/notifications/channels/index.js.map +0 -1
  252. package/dist/notifications/channels/log.js +0 -29
  253. package/dist/notifications/channels/log.js.map +0 -1
  254. package/dist/notifications/email.js +0 -72
  255. package/dist/notifications/email.js.map +0 -1
  256. package/dist/notifications/engine.js +0 -198
  257. package/dist/notifications/engine.js.map +0 -1
  258. package/dist/notifications/index.js +0 -24
  259. package/dist/notifications/index.js.map +0 -1
  260. package/dist/notifications/phone.js +0 -48
  261. package/dist/notifications/phone.js.map +0 -1
  262. package/dist/notifications/sms.js +0 -65
  263. package/dist/notifications/sms.js.map +0 -1
  264. package/dist/notifications/types.js +0 -14
  265. package/dist/notifications/types.js.map +0 -1
  266. package/dist/notifications/webhook.js +0 -65
  267. package/dist/notifications/webhook.js.map +0 -1
  268. package/dist/resend/inbox.js +0 -199
  269. package/dist/resend/inbox.js.map +0 -1
  270. package/dist/resend/webhooks.js +0 -244
  271. package/dist/resend/webhooks.js.map +0 -1
  272. package/dist/search/browse.js +0 -225
  273. package/dist/search/browse.js.map +0 -1
  274. package/dist/search/perplexity.js +0 -41
  275. package/dist/search/perplexity.js.map +0 -1
  276. package/dist/slack/channels.js +0 -277
  277. package/dist/slack/channels.js.map +0 -1
  278. package/dist/slack/client.js +0 -468
  279. package/dist/slack/client.js.map +0 -1
  280. package/dist/slack/retry.js +0 -100
  281. package/dist/slack/retry.js.map +0 -1
  282. package/dist/slack/types.js +0 -52
  283. package/dist/slack/types.js.map +0 -1
  284. package/dist/slack/webhooks.js +0 -285
  285. package/dist/slack/webhooks.js.map +0 -1
  286. package/dist/stt/client.js +0 -66
  287. package/dist/stt/client.js.map +0 -1
  288. package/dist/stt/sidecar.js +0 -115
  289. package/dist/stt/sidecar.js.map +0 -1
  290. package/dist/tracing/bridge.js +0 -70
  291. package/dist/tracing/bridge.js.map +0 -1
  292. package/dist/tracing/correlation.js +0 -49
  293. package/dist/tracing/correlation.js.map +0 -1
  294. package/dist/tracing/index.js +0 -18
  295. package/dist/tracing/index.js.map +0 -1
  296. package/dist/tracing/init.js +0 -81
  297. package/dist/tracing/init.js.map +0 -1
  298. package/dist/tracing/instrument.js +0 -145
  299. package/dist/tracing/instrument.js.map +0 -1
  300. package/dist/tracing/middleware.js +0 -69
  301. package/dist/tracing/middleware.js.map +0 -1
  302. package/dist/tracing/tracer.js +0 -327
  303. package/dist/tracing/tracer.js.map +0 -1
  304. package/dist/tts/client.js +0 -48
  305. package/dist/tts/client.js.map +0 -1
  306. package/dist/tts/sidecar.js +0 -148
  307. package/dist/tts/sidecar.js.map +0 -1
  308. package/dist/twilio/call.js +0 -79
  309. package/dist/twilio/call.js.map +0 -1
  310. package/dist/vault/matcher.js +0 -197
  311. package/dist/vault/matcher.js.map +0 -1
  312. package/dist/vault/personal.js +0 -163
  313. package/dist/vault/personal.js.map +0 -1
  314. package/dist/vault/policy.js +0 -159
  315. package/dist/vault/policy.js.map +0 -1
  316. package/dist/vault/store.js +0 -122
  317. package/dist/vault/store.js.map +0 -1
  318. package/dist/vault/transfer.js +0 -188
  319. package/dist/vault/transfer.js.map +0 -1
  320. package/dist/volumes/index.js +0 -2
  321. package/dist/volumes/index.js.map +0 -1
  322. package/dist/volumes/manager.js +0 -462
  323. package/dist/volumes/manager.js.map +0 -1
  324. package/dist/volumes/types.js +0 -8
  325. package/dist/volumes/types.js.map +0 -1
  326. package/dist/webhooks/config.js +0 -214
  327. package/dist/webhooks/config.js.map +0 -1
  328. package/dist/webhooks/event-log.js +0 -132
  329. package/dist/webhooks/event-log.js.map +0 -1
  330. package/dist/webhooks/handler.js +0 -103
  331. package/dist/webhooks/handler.js.map +0 -1
  332. package/dist/webhooks/handlers.js +0 -231
  333. package/dist/webhooks/handlers.js.map +0 -1
  334. package/dist/webhooks/index.js +0 -33
  335. package/dist/webhooks/index.js.map +0 -1
  336. package/dist/webhooks/mount.js +0 -400
  337. package/dist/webhooks/mount.js.map +0 -1
  338. package/dist/webhooks/registry.js +0 -143
  339. package/dist/webhooks/registry.js.map +0 -1
  340. package/dist/webhooks/relay.js +0 -53
  341. package/dist/webhooks/relay.js.map +0 -1
  342. package/dist/webhooks/retry.js +0 -270
  343. package/dist/webhooks/retry.js.map +0 -1
  344. package/dist/webhooks/router.js +0 -290
  345. package/dist/webhooks/router.js.map +0 -1
  346. package/dist/webhooks/twilio.js +0 -129
  347. package/dist/webhooks/twilio.js.map +0 -1
  348. package/dist/webhooks/types.js +0 -8
  349. package/dist/webhooks/types.js.map +0 -1
  350. package/dist/webhooks/verify.js +0 -154
  351. package/dist/webhooks/verify.js.map +0 -1
@@ -1,543 +0,0 @@
1
- /**
2
- * Workflow Engine — File-based multi-step agent workflow definitions.
3
- *
4
- * Bridges the gap between declarative JSON workflow files in
5
- * `brain/agents/workflows/` and the in-memory Orchestrator.
6
- *
7
- * Adds on top of the Orchestrator:
8
- * 1. Loading/validating workflow definitions from JSON files
9
- * 2. Template interpolation ({{input.x}}, {{steps.y.output}})
10
- * 3. Conditional step gating (stepStatus, inputEquals, allOf/anyOf/not)
11
- * 4. Error recovery policies (stop, continue, fallback)
12
- * 5. Retry logic with per-step retry counts
13
- * 6. Workflow-level input parameters and output mapping
14
- */
15
- import { readdir } from "node:fs/promises";
16
- import { join } from "node:path";
17
- import { createLogger } from "../utils/logger.js";
18
- import { readBrainFile } from "../lib/brain-io.js";
19
- import { Orchestrator } from "./orchestration.js";
20
- import { BRAIN_DIR } from "../lib/paths.js";
21
- const log = createLogger("workflow");
22
- const WORKFLOWS_DIR = join(BRAIN_DIR, "agents", "workflows");
23
- // ---------------------------------------------------------------------------
24
- // WorkflowEngine
25
- // ---------------------------------------------------------------------------
26
- export class WorkflowEngine {
27
- orchestrator;
28
- definitionCache = new Map();
29
- runs = new Map();
30
- runCounter = 0;
31
- constructor(pool) {
32
- this.orchestrator = new Orchestrator(pool, { maxActiveWorkflows: 5 });
33
- }
34
- /** Access the underlying orchestrator for advanced use. */
35
- getOrchestrator() {
36
- return this.orchestrator;
37
- }
38
- // -------------------------------------------------------------------------
39
- // Loading definitions
40
- // -------------------------------------------------------------------------
41
- /** Load a workflow definition from a JSON file path. */
42
- async loadDefinition(filePath) {
43
- const raw = await readBrainFile(filePath);
44
- const def = JSON.parse(raw);
45
- this.validateDefinition(def);
46
- this.definitionCache.set(def.name, def);
47
- log.info("Workflow definition loaded", { name: def.name, version: def.version, steps: def.steps.length });
48
- return def;
49
- }
50
- /** Load all workflow definitions from the workflows directory. */
51
- async loadAllDefinitions() {
52
- const loaded = [];
53
- let entries;
54
- try {
55
- entries = await readdir(WORKFLOWS_DIR);
56
- }
57
- catch {
58
- log.warn("Workflows directory not found", { dir: WORKFLOWS_DIR });
59
- return [];
60
- }
61
- for (const entry of entries) {
62
- if (!entry.endsWith(".json") || entry === "schema.json")
63
- continue;
64
- try {
65
- const def = await this.loadDefinition(join(WORKFLOWS_DIR, entry));
66
- loaded.push(def);
67
- }
68
- catch (err) {
69
- log.warn("Failed to load workflow definition", {
70
- file: entry,
71
- error: err instanceof Error ? err.message : String(err),
72
- });
73
- }
74
- }
75
- return loaded;
76
- }
77
- /** Get a cached definition by name. */
78
- getDefinition(name) {
79
- return this.definitionCache.get(name);
80
- }
81
- /** List all cached definition names. */
82
- listDefinitions() {
83
- return [...this.definitionCache.keys()];
84
- }
85
- // -------------------------------------------------------------------------
86
- // Execution
87
- // -------------------------------------------------------------------------
88
- /**
89
- * Execute a workflow by name.
90
- *
91
- * Resolves inputs, evaluates conditions, interpolates templates,
92
- * then delegates to the Orchestrator for agent coordination.
93
- */
94
- async execute(name, inputs = {}) {
95
- const def = this.definitionCache.get(name);
96
- if (!def) {
97
- throw new Error(`Workflow definition not found: "${name}". Load it first.`);
98
- }
99
- // Resolve inputs with defaults
100
- const resolvedInputs = this.resolveInputs(def, inputs);
101
- // Create run tracking
102
- const run = this.createRun(def, resolvedInputs);
103
- this.runs.set(run.id, run);
104
- run.status = "running";
105
- run.startedAt = new Date().toISOString();
106
- log.info("Workflow execution started", {
107
- runId: run.id,
108
- workflow: def.name,
109
- stepCount: def.steps.length,
110
- });
111
- try {
112
- if (def.mode === "sequential") {
113
- await this.executeSequential(def, run);
114
- }
115
- else {
116
- // For parallel and dependency modes, delegate to orchestrator
117
- await this.executeViaOrchestrator(def, run);
118
- }
119
- }
120
- catch (err) {
121
- log.error("Workflow execution error", {
122
- runId: run.id,
123
- error: err instanceof Error ? err.message : String(err),
124
- });
125
- }
126
- // Compute final status
127
- run.status = this.computeRunStatus(run);
128
- run.finishedAt = new Date().toISOString();
129
- // Map outputs
130
- run.outputs = this.mapOutputs(def, run);
131
- log.info("Workflow execution finished", {
132
- runId: run.id,
133
- workflow: def.name,
134
- status: run.status,
135
- });
136
- return run;
137
- }
138
- /** Get a run by ID. */
139
- getRun(runId) {
140
- return this.runs.get(runId);
141
- }
142
- // -------------------------------------------------------------------------
143
- // Sequential execution (handles conditions + retries inline)
144
- // -------------------------------------------------------------------------
145
- async executeSequential(def, run) {
146
- for (const stepDef of def.steps) {
147
- if (run.status === "cancelled")
148
- break;
149
- const result = run.stepResults.get(stepDef.key);
150
- // Evaluate condition
151
- if (stepDef.condition && !this.evaluateCondition(stepDef.condition, run)) {
152
- result.status = "skipped";
153
- log.info("Step skipped (condition false)", { runId: run.id, step: stepDef.key });
154
- continue;
155
- }
156
- // Execute with retries
157
- await this.executeStepWithRetries(def, run, stepDef, result);
158
- // Handle failure
159
- if (result.status === "failed") {
160
- const policy = stepDef.onFailure ?? def.onFailure ?? { action: "stop" };
161
- if (policy.action === "stop") {
162
- log.info("Workflow stopping due to step failure", { runId: run.id, step: stepDef.key });
163
- break;
164
- }
165
- if (policy.action === "fallback" && policy.fallbackStep) {
166
- const fbDef = def.steps.find((s) => s.key === policy.fallbackStep);
167
- if (fbDef) {
168
- const fbResult = { key: fbDef.key, status: "pending", retriesUsed: 0 };
169
- run.stepResults.set(fbDef.key, fbResult);
170
- await this.executeStepWithRetries(def, run, fbDef, fbResult);
171
- }
172
- }
173
- // "continue" just proceeds to next step
174
- }
175
- }
176
- }
177
- // -------------------------------------------------------------------------
178
- // Orchestrator-delegated execution (parallel/dependency)
179
- // -------------------------------------------------------------------------
180
- async executeViaOrchestrator(def, run) {
181
- // Build task list, filtering by conditions
182
- const tasks = [];
183
- for (const stepDef of def.steps) {
184
- // For dependency/parallel mode, evaluate conditions that can be checked upfront
185
- // (input-based conditions). Step-status conditions can't be pre-evaluated.
186
- if (stepDef.condition && this.isStaticCondition(stepDef.condition)) {
187
- if (!this.evaluateCondition(stepDef.condition, run)) {
188
- const result = run.stepResults.get(stepDef.key);
189
- result.status = "skipped";
190
- continue;
191
- }
192
- }
193
- const interpolatedPrompt = this.interpolateTemplate(stepDef.prompt, run);
194
- tasks.push({
195
- key: stepDef.key,
196
- label: stepDef.label,
197
- prompt: interpolatedPrompt,
198
- cwd: stepDef.cwd,
199
- dependsOn: stepDef.dependsOn,
200
- priority: stepDef.priority,
201
- tags: stepDef.tags,
202
- config: stepDef.timeoutMs ? { timeoutMs: stepDef.timeoutMs } : undefined,
203
- });
204
- }
205
- if (tasks.length === 0) {
206
- log.info("No steps to execute after condition filtering", { runId: run.id });
207
- return;
208
- }
209
- const workflowInput = {
210
- name: `${def.name} (run ${run.id})`,
211
- description: def.description,
212
- tasks,
213
- mode: def.mode ?? "dependency",
214
- maxConcurrent: def.maxConcurrent,
215
- origin: "system",
216
- };
217
- const orcWorkflow = this.orchestrator.createWorkflow(workflowInput);
218
- const result = await this.orchestrator.execute(orcWorkflow.id);
219
- run.orchestratorResult = result;
220
- // Sync results back to our step tracking
221
- for (const taskResult of result.tasks) {
222
- const stepResult = run.stepResults.get(taskResult.key);
223
- if (stepResult) {
224
- stepResult.status = taskResult.status === "completed" ? "completed" : "failed";
225
- stepResult.output = taskResult.output;
226
- stepResult.error = taskResult.error;
227
- stepResult.durationMs = taskResult.durationMs;
228
- }
229
- }
230
- }
231
- // -------------------------------------------------------------------------
232
- // Step execution with retries
233
- // -------------------------------------------------------------------------
234
- async executeStepWithRetries(def, run, stepDef, result) {
235
- const maxRetries = stepDef.retries ?? 0;
236
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
237
- result.status = "running";
238
- const startTime = Date.now();
239
- try {
240
- const interpolatedPrompt = this.interpolateTemplate(stepDef.prompt, run);
241
- // Create a single-task workflow via the orchestrator
242
- const taskDef = {
243
- key: stepDef.key,
244
- label: stepDef.label,
245
- prompt: interpolatedPrompt,
246
- cwd: stepDef.cwd,
247
- priority: stepDef.priority,
248
- tags: stepDef.tags,
249
- config: stepDef.timeoutMs ? { timeoutMs: stepDef.timeoutMs } : undefined,
250
- };
251
- const wfInput = {
252
- name: `${def.name}/${stepDef.key}${attempt > 0 ? ` (retry ${attempt})` : ""}`,
253
- tasks: [taskDef],
254
- mode: "sequential",
255
- origin: "system",
256
- };
257
- const orcWorkflow = this.orchestrator.createWorkflow(wfInput);
258
- const orchResult = await this.orchestrator.execute(orcWorkflow.id);
259
- const taskResult = orchResult.tasks[0];
260
- result.durationMs = Date.now() - startTime;
261
- if (taskResult && taskResult.status === "completed") {
262
- result.status = "completed";
263
- result.output = taskResult.output;
264
- result.retriesUsed = attempt;
265
- return;
266
- }
267
- // Task failed
268
- result.error = taskResult?.error ?? "Unknown error";
269
- result.retriesUsed = attempt;
270
- if (attempt < maxRetries) {
271
- log.info("Step failed, retrying", {
272
- runId: run.id,
273
- step: stepDef.key,
274
- attempt: attempt + 1,
275
- maxRetries,
276
- });
277
- }
278
- }
279
- catch (err) {
280
- result.durationMs = Date.now() - startTime;
281
- result.error = err instanceof Error ? err.message : String(err);
282
- result.retriesUsed = attempt;
283
- if (attempt < maxRetries) {
284
- log.info("Step threw, retrying", {
285
- runId: run.id,
286
- step: stepDef.key,
287
- attempt: attempt + 1,
288
- });
289
- }
290
- }
291
- }
292
- result.status = "failed";
293
- }
294
- // -------------------------------------------------------------------------
295
- // Template interpolation
296
- // -------------------------------------------------------------------------
297
- /**
298
- * Replace {{input.paramName}} and {{steps.stepKey.output}} placeholders.
299
- */
300
- interpolateTemplate(template, run) {
301
- return template.replace(/\{\{(\w+(?:\.\w+)*)\}\}/g, (_match, expr) => {
302
- const parts = expr.split(".");
303
- // {{input.paramName}}
304
- if (parts[0] === "input" && parts.length === 2) {
305
- const val = run.inputs[parts[1]];
306
- return val !== undefined ? String(val) : "";
307
- }
308
- // {{steps.stepKey.output}} or {{steps.stepKey.status}}
309
- if (parts[0] === "steps" && parts.length === 3) {
310
- const stepResult = run.stepResults.get(parts[1]);
311
- if (!stepResult)
312
- return "";
313
- if (parts[2] === "output")
314
- return stepResult.output ?? "";
315
- if (parts[2] === "status")
316
- return stepResult.status;
317
- if (parts[2] === "error")
318
- return stepResult.error ?? "";
319
- }
320
- return "";
321
- });
322
- }
323
- // -------------------------------------------------------------------------
324
- // Condition evaluation
325
- // -------------------------------------------------------------------------
326
- evaluateCondition(condition, run) {
327
- if (condition.stepStatus) {
328
- const result = run.stepResults.get(condition.stepStatus.step);
329
- return result?.status === condition.stepStatus.equals;
330
- }
331
- if (condition.inputEquals) {
332
- const val = run.inputs[condition.inputEquals.input];
333
- return val === condition.inputEquals.value;
334
- }
335
- if (condition.allOf) {
336
- return condition.allOf.every((c) => this.evaluateCondition(c, run));
337
- }
338
- if (condition.anyOf) {
339
- return condition.anyOf.some((c) => this.evaluateCondition(c, run));
340
- }
341
- if (condition.not) {
342
- return !this.evaluateCondition(condition.not, run);
343
- }
344
- // No operator set — treat as true (unconditional)
345
- return true;
346
- }
347
- /** Check if a condition only references inputs (can be evaluated before steps run). */
348
- isStaticCondition(condition) {
349
- if (condition.stepStatus)
350
- return false;
351
- if (condition.inputEquals)
352
- return true;
353
- if (condition.allOf)
354
- return condition.allOf.every((c) => this.isStaticCondition(c));
355
- if (condition.anyOf)
356
- return condition.anyOf.every((c) => this.isStaticCondition(c));
357
- if (condition.not)
358
- return this.isStaticCondition(condition.not);
359
- return true;
360
- }
361
- // -------------------------------------------------------------------------
362
- // Validation
363
- // -------------------------------------------------------------------------
364
- validateDefinition(def) {
365
- if (!def.name || typeof def.name !== "string") {
366
- throw new Error("Workflow definition must have a 'name' string.");
367
- }
368
- if (!def.version || !/^\d+\.\d+\.\d+$/.test(def.version)) {
369
- throw new Error("Workflow definition must have a valid semver 'version'.");
370
- }
371
- if (!Array.isArray(def.steps) || def.steps.length === 0) {
372
- throw new Error("Workflow definition must have at least one step.");
373
- }
374
- const keys = new Set();
375
- for (const step of def.steps) {
376
- if (!step.key || !step.label || !step.prompt) {
377
- throw new Error(`Step "${step.key ?? "(unnamed)"}" must have key, label, and prompt.`);
378
- }
379
- if (keys.has(step.key)) {
380
- throw new Error(`Duplicate step key: "${step.key}".`);
381
- }
382
- keys.add(step.key);
383
- }
384
- // Validate dependency references
385
- for (const step of def.steps) {
386
- if (step.dependsOn) {
387
- for (const dep of step.dependsOn) {
388
- if (!keys.has(dep)) {
389
- throw new Error(`Step "${step.key}" depends on unknown step "${dep}".`);
390
- }
391
- }
392
- }
393
- }
394
- // Validate fallback references
395
- const defaultPolicy = def.onFailure;
396
- if (defaultPolicy?.action === "fallback" && defaultPolicy.fallbackStep) {
397
- if (!keys.has(defaultPolicy.fallbackStep)) {
398
- throw new Error(`Default fallback step "${defaultPolicy.fallbackStep}" not found.`);
399
- }
400
- }
401
- for (const step of def.steps) {
402
- if (step.onFailure?.action === "fallback" && step.onFailure.fallbackStep) {
403
- if (!keys.has(step.onFailure.fallbackStep)) {
404
- throw new Error(`Step "${step.key}" fallback step "${step.onFailure.fallbackStep}" not found.`);
405
- }
406
- }
407
- }
408
- // Cycle detection for dependency mode
409
- if (def.mode === "dependency" || !def.mode) {
410
- this.detectCycles(def.steps);
411
- }
412
- }
413
- detectCycles(steps) {
414
- const adj = new Map();
415
- for (const step of steps) {
416
- adj.set(step.key, step.dependsOn ?? []);
417
- }
418
- const visited = new Set();
419
- const inStack = new Set();
420
- const visit = (key, path) => {
421
- if (inStack.has(key)) {
422
- const cycle = [...path.slice(path.indexOf(key)), key];
423
- throw new Error(`Dependency cycle detected: ${cycle.join(" → ")}`);
424
- }
425
- if (visited.has(key))
426
- return;
427
- visited.add(key);
428
- inStack.add(key);
429
- for (const dep of adj.get(key) ?? []) {
430
- visit(dep, [...path, key]);
431
- }
432
- inStack.delete(key);
433
- };
434
- for (const key of adj.keys()) {
435
- visit(key, []);
436
- }
437
- }
438
- // -------------------------------------------------------------------------
439
- // Input resolution
440
- // -------------------------------------------------------------------------
441
- resolveInputs(def, provided) {
442
- const resolved = {};
443
- if (!def.inputs)
444
- return provided;
445
- for (const [name, paramDef] of Object.entries(def.inputs)) {
446
- if (name in provided) {
447
- resolved[name] = provided[name];
448
- }
449
- else if (paramDef.default !== undefined) {
450
- resolved[name] = paramDef.default;
451
- }
452
- else if (paramDef.required) {
453
- throw new Error(`Required workflow input "${name}" not provided.`);
454
- }
455
- }
456
- // Pass through any extra inputs not in the schema
457
- for (const [name, value] of Object.entries(provided)) {
458
- if (!(name in resolved)) {
459
- resolved[name] = value;
460
- }
461
- }
462
- return resolved;
463
- }
464
- // -------------------------------------------------------------------------
465
- // Output mapping
466
- // -------------------------------------------------------------------------
467
- mapOutputs(def, run) {
468
- const outputs = {};
469
- if (!def.outputs)
470
- return outputs;
471
- for (const [name, mapping] of Object.entries(def.outputs)) {
472
- const stepResult = run.stepResults.get(mapping.fromStep);
473
- if (!stepResult)
474
- continue;
475
- switch (mapping.value) {
476
- case "output":
477
- outputs[name] = stepResult.output;
478
- break;
479
- case "status":
480
- outputs[name] = stepResult.status;
481
- break;
482
- case "error":
483
- outputs[name] = stepResult.error;
484
- break;
485
- default:
486
- outputs[name] = stepResult.output;
487
- }
488
- }
489
- return outputs;
490
- }
491
- // -------------------------------------------------------------------------
492
- // Helpers
493
- // -------------------------------------------------------------------------
494
- createRun(def, inputs) {
495
- this.runCounter++;
496
- const id = `wr_${Date.now()}_${this.runCounter}`;
497
- const stepResults = new Map();
498
- for (const step of def.steps) {
499
- stepResults.set(step.key, {
500
- key: step.key,
501
- status: "pending",
502
- retriesUsed: 0,
503
- });
504
- }
505
- return {
506
- id,
507
- definitionName: def.name,
508
- definitionVersion: def.version,
509
- status: "pending",
510
- inputs,
511
- stepResults,
512
- outputs: {},
513
- };
514
- }
515
- computeRunStatus(run) {
516
- const results = [...run.stepResults.values()];
517
- const allCompleted = results.every((r) => r.status === "completed" || r.status === "skipped");
518
- const anyFailed = results.some((r) => r.status === "failed");
519
- const anyCompleted = results.some((r) => r.status === "completed");
520
- if (allCompleted)
521
- return "completed";
522
- if (anyFailed && anyCompleted)
523
- return "partial";
524
- if (anyFailed)
525
- return "failed";
526
- return "completed";
527
- }
528
- // -------------------------------------------------------------------------
529
- // Cleanup
530
- // -------------------------------------------------------------------------
531
- async shutdown() {
532
- await this.orchestrator.shutdown();
533
- log.info("Workflow engine shut down");
534
- }
535
- }
536
- // ---------------------------------------------------------------------------
537
- // Convenience: load and parse a single workflow file
538
- // ---------------------------------------------------------------------------
539
- export async function parseWorkflowFile(filePath) {
540
- const raw = await readBrainFile(filePath);
541
- return JSON.parse(raw);
542
- }
543
- //# sourceMappingURL=workflow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/agents/workflow.ts"],"names":[],"mappings":"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"}