@monoes/monomindcli 1.14.6 → 1.15.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 (329) hide show
  1. package/.claude/agents/reengineer-squad/boss.md +113 -0
  2. package/.claude/agents/reengineer-squad/critic-architect.md +132 -0
  3. package/.claude/agents/reengineer-squad/git-manager.md +145 -0
  4. package/.claude/agents/reengineer-squad/idea-generator.md +95 -0
  5. package/.claude/agents/reengineer-squad/implementer.md +112 -0
  6. package/.claude/agents/reengineer-squad/integration-planner.md +112 -0
  7. package/.claude/agents/reengineer-squad/source-analyst.md +103 -0
  8. package/.claude/agents/reengineer-squad/target-analyst.md +118 -0
  9. package/.claude/agents/reengineer-squad/tester.md +105 -0
  10. package/.claude/commands/mastermind/master.md +35 -14
  11. package/.claude/helpers/handlers/capture-handler.cjs +155 -18
  12. package/.claude/helpers/monolean-activate.cjs +20 -0
  13. package/.claude/helpers/monolean-config.cjs +76 -0
  14. package/.claude/helpers/monolean-instructions.cjs +109 -0
  15. package/.claude/helpers/monolean-propagate.cjs +9 -0
  16. package/.claude/helpers/monolean-tracker.cjs +18 -0
  17. package/.claude/helpers/skill-registry.json +2 -2
  18. package/.claude/skills/agent-browser-testing/SKILL.md +301 -18
  19. package/.claude/skills/mastermind/runorg.md +69 -23
  20. package/.claude/skills/monodesign/SKILL.md +32 -1
  21. package/.claude/skills/monodesign/adapt.md +53 -0
  22. package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +100 -0
  23. package/.claude/skills/monodesign/animate.md +65 -0
  24. package/.claude/skills/monodesign/audit.md +89 -0
  25. package/.claude/skills/monodesign/bolder.md +50 -0
  26. package/.claude/skills/monodesign/clarify.md +64 -0
  27. package/.claude/skills/monodesign/colorize.md +68 -0
  28. package/.claude/skills/monodesign/craft.md +51 -0
  29. package/.claude/skills/monodesign/critique.md +66 -0
  30. package/.claude/skills/monodesign/delight.md +47 -0
  31. package/.claude/skills/monodesign/distill.md +56 -0
  32. package/.claude/skills/monodesign/document.md +80 -0
  33. package/.claude/skills/monodesign/extract.md +74 -0
  34. package/.claude/skills/monodesign/harden.md +65 -0
  35. package/.claude/skills/monodesign/live.md +59 -0
  36. package/.claude/skills/monodesign/onboard.md +50 -0
  37. package/.claude/skills/monodesign/optimize.md +64 -0
  38. package/.claude/skills/monodesign/overdrive.md +56 -0
  39. package/.claude/skills/monodesign/polish.md +68 -0
  40. package/.claude/skills/monodesign/quieter.md +57 -0
  41. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +248 -76
  42. package/.claude/skills/monodesign/reference/codex.md +107 -0
  43. package/.claude/skills/monodesign/reference/craft.md +3 -0
  44. package/.claude/skills/monodesign/reference/hooks.md +99 -0
  45. package/.claude/skills/monodesign/reference/image-prompts.md +12 -0
  46. package/.claude/skills/monodesign/shape.md +71 -0
  47. package/.claude/skills/monodesign/teach.md +69 -0
  48. package/.claude/skills/monodesign/typeset.md +59 -0
  49. package/.claude/skills/monolean/SKILL.md +118 -0
  50. package/.claude/skills/monolean-audit/SKILL.md +41 -0
  51. package/.claude/skills/monolean-debt/SKILL.md +46 -0
  52. package/.claude/skills/monolean-help/SKILL.md +60 -0
  53. package/.claude/skills/monolean-review/SKILL.md +57 -0
  54. package/bin/cli.js +3 -1
  55. package/dist/dashboard/server.js +137 -0
  56. package/dist/src/__tests__/browse-adapters.test.d.ts +2 -0
  57. package/dist/src/__tests__/browse-adapters.test.d.ts.map +1 -0
  58. package/dist/src/__tests__/browse-adapters.test.js +51 -0
  59. package/dist/src/__tests__/browse-adapters.test.js.map +1 -0
  60. package/dist/src/__tests__/browse-analyzer.test.d.ts +2 -0
  61. package/dist/src/__tests__/browse-analyzer.test.d.ts.map +1 -0
  62. package/dist/src/__tests__/browse-analyzer.test.js +68 -0
  63. package/dist/src/__tests__/browse-analyzer.test.js.map +1 -0
  64. package/dist/src/__tests__/browse-builtin-handlers.test.d.ts +2 -0
  65. package/dist/src/__tests__/browse-builtin-handlers.test.d.ts.map +1 -0
  66. package/dist/src/__tests__/browse-builtin-handlers.test.js +139 -0
  67. package/dist/src/__tests__/browse-builtin-handlers.test.js.map +1 -0
  68. package/dist/src/__tests__/browse-cdp.test.d.ts +2 -0
  69. package/dist/src/__tests__/browse-cdp.test.d.ts.map +1 -0
  70. package/dist/src/__tests__/browse-cdp.test.js +169 -0
  71. package/dist/src/__tests__/browse-cdp.test.js.map +1 -0
  72. package/dist/src/__tests__/browse-dashboard.test.d.ts +2 -0
  73. package/dist/src/__tests__/browse-dashboard.test.d.ts.map +1 -0
  74. package/dist/src/__tests__/browse-dashboard.test.js +179 -0
  75. package/dist/src/__tests__/browse-dashboard.test.js.map +1 -0
  76. package/dist/src/__tests__/browse-engine.test.d.ts +2 -0
  77. package/dist/src/__tests__/browse-engine.test.d.ts.map +1 -0
  78. package/dist/src/__tests__/browse-engine.test.js +122 -0
  79. package/dist/src/__tests__/browse-engine.test.js.map +1 -0
  80. package/dist/src/__tests__/browse-expression.test.d.ts +2 -0
  81. package/dist/src/__tests__/browse-expression.test.d.ts.map +1 -0
  82. package/dist/src/__tests__/browse-expression.test.js +54 -0
  83. package/dist/src/__tests__/browse-expression.test.js.map +1 -0
  84. package/dist/src/__tests__/browse-store.test.d.ts +2 -0
  85. package/dist/src/__tests__/browse-store.test.d.ts.map +1 -0
  86. package/dist/src/__tests__/browse-store.test.js +99 -0
  87. package/dist/src/__tests__/browse-store.test.js.map +1 -0
  88. package/dist/src/__tests__/browse-workflow-types.test.d.ts +2 -0
  89. package/dist/src/__tests__/browse-workflow-types.test.d.ts.map +1 -0
  90. package/dist/src/__tests__/browse-workflow-types.test.js +33 -0
  91. package/dist/src/__tests__/browse-workflow-types.test.js.map +1 -0
  92. package/dist/src/browser/action-builder/analyzer.d.ts +11 -0
  93. package/dist/src/browser/action-builder/analyzer.d.ts.map +1 -0
  94. package/dist/src/browser/action-builder/analyzer.js +71 -0
  95. package/dist/src/browser/action-builder/analyzer.js.map +1 -0
  96. package/dist/src/browser/action-builder/types.d.ts +47 -0
  97. package/dist/src/browser/action-builder/types.d.ts.map +1 -0
  98. package/dist/src/browser/action-builder/types.js +2 -0
  99. package/dist/src/browser/action-builder/types.js.map +1 -0
  100. package/dist/src/browser/adapters/gemini.d.ts +3 -0
  101. package/dist/src/browser/adapters/gemini.d.ts.map +1 -0
  102. package/dist/src/browser/adapters/gemini.js +16 -0
  103. package/dist/src/browser/adapters/gemini.js.map +1 -0
  104. package/dist/src/browser/adapters/google.d.ts +3 -0
  105. package/dist/src/browser/adapters/google.d.ts.map +1 -0
  106. package/dist/src/browser/adapters/google.js +17 -0
  107. package/dist/src/browser/adapters/google.js.map +1 -0
  108. package/dist/src/browser/adapters/index.d.ts +19 -0
  109. package/dist/src/browser/adapters/index.d.ts.map +1 -0
  110. package/dist/src/browser/adapters/index.js +23 -0
  111. package/dist/src/browser/adapters/index.js.map +1 -0
  112. package/dist/src/browser/adapters/instagram.d.ts +3 -0
  113. package/dist/src/browser/adapters/instagram.d.ts.map +1 -0
  114. package/dist/src/browser/adapters/instagram.js +17 -0
  115. package/dist/src/browser/adapters/instagram.js.map +1 -0
  116. package/dist/src/browser/adapters/linkedin.d.ts +3 -0
  117. package/dist/src/browser/adapters/linkedin.d.ts.map +1 -0
  118. package/dist/src/browser/adapters/linkedin.js +19 -0
  119. package/dist/src/browser/adapters/linkedin.js.map +1 -0
  120. package/dist/src/browser/adapters/microsoft.d.ts +3 -0
  121. package/dist/src/browser/adapters/microsoft.d.ts.map +1 -0
  122. package/dist/src/browser/adapters/microsoft.js +16 -0
  123. package/dist/src/browser/adapters/microsoft.js.map +1 -0
  124. package/dist/src/browser/adapters/x.d.ts +3 -0
  125. package/dist/src/browser/adapters/x.d.ts.map +1 -0
  126. package/dist/src/browser/adapters/x.js +19 -0
  127. package/dist/src/browser/adapters/x.js.map +1 -0
  128. package/dist/src/browser/dashboard/api-types.d.ts +50 -0
  129. package/dist/src/browser/dashboard/api-types.d.ts.map +1 -0
  130. package/dist/src/browser/dashboard/api-types.js +14 -0
  131. package/dist/src/browser/dashboard/api-types.js.map +1 -0
  132. package/dist/src/browser/dashboard/server.d.ts +9 -0
  133. package/dist/src/browser/dashboard/server.d.ts.map +1 -0
  134. package/dist/src/browser/dashboard/server.js +62 -0
  135. package/dist/src/browser/dashboard/server.js.map +1 -0
  136. package/dist/src/browser/dashboard/ui.html +1811 -0
  137. package/dist/src/browser/workflow/builtin-handlers.d.ts +3 -0
  138. package/dist/src/browser/workflow/builtin-handlers.d.ts.map +1 -0
  139. package/dist/src/browser/workflow/builtin-handlers.js +343 -0
  140. package/dist/src/browser/workflow/builtin-handlers.js.map +1 -0
  141. package/dist/src/browser/workflow/engine.d.ts +15 -0
  142. package/dist/src/browser/workflow/engine.d.ts.map +1 -0
  143. package/dist/src/browser/workflow/engine.js +127 -0
  144. package/dist/src/browser/workflow/engine.js.map +1 -0
  145. package/dist/src/browser/workflow/expression.d.ts +4 -0
  146. package/dist/src/browser/workflow/expression.d.ts.map +1 -0
  147. package/dist/src/browser/workflow/expression.js +64 -0
  148. package/dist/src/browser/workflow/expression.js.map +1 -0
  149. package/dist/src/browser/workflow/store.d.ts +24 -0
  150. package/dist/src/browser/workflow/store.d.ts.map +1 -0
  151. package/dist/src/browser/workflow/store.js +145 -0
  152. package/dist/src/browser/workflow/store.js.map +1 -0
  153. package/dist/src/browser/workflow/types.d.ts +48 -0
  154. package/dist/src/browser/workflow/types.d.ts.map +1 -0
  155. package/dist/src/browser/workflow/types.js +2 -0
  156. package/dist/src/browser/workflow/types.js.map +1 -0
  157. package/dist/src/commands/browse-action.d.ts +4 -0
  158. package/dist/src/commands/browse-action.d.ts.map +1 -0
  159. package/dist/src/commands/browse-action.js +151 -0
  160. package/dist/src/commands/browse-action.js.map +1 -0
  161. package/dist/src/commands/browse-platform.d.ts +4 -0
  162. package/dist/src/commands/browse-platform.d.ts.map +1 -0
  163. package/dist/src/commands/browse-platform.js +117 -0
  164. package/dist/src/commands/browse-platform.js.map +1 -0
  165. package/dist/src/commands/browse-workflow.d.ts +4 -0
  166. package/dist/src/commands/browse-workflow.d.ts.map +1 -0
  167. package/dist/src/commands/browse-workflow.js +153 -0
  168. package/dist/src/commands/browse-workflow.js.map +1 -0
  169. package/dist/src/commands/browse.d.ts +10 -6
  170. package/dist/src/commands/browse.d.ts.map +1 -1
  171. package/dist/src/commands/browse.js +11 -2154
  172. package/dist/src/commands/browse.js.map +1 -1
  173. package/dist/src/commands/design-detect.d.ts +21 -0
  174. package/dist/src/commands/design-detect.d.ts.map +1 -0
  175. package/dist/src/commands/design-detect.js +127 -0
  176. package/dist/src/commands/design-detect.js.map +1 -0
  177. package/dist/src/commands/design-palette.d.ts +22 -0
  178. package/dist/src/commands/design-palette.d.ts.map +1 -0
  179. package/dist/src/commands/design-palette.js +539 -0
  180. package/dist/src/commands/design-palette.js.map +1 -0
  181. package/dist/src/commands/hooks-core-commands.d.ts +10 -0
  182. package/dist/src/commands/hooks-core-commands.d.ts.map +1 -0
  183. package/dist/src/commands/hooks-core-commands.js +377 -0
  184. package/dist/src/commands/hooks-core-commands.js.map +1 -0
  185. package/dist/src/commands/hooks-coverage-commands.d.ts +12 -0
  186. package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -0
  187. package/dist/src/commands/hooks-coverage-commands.js +1217 -0
  188. package/dist/src/commands/hooks-coverage-commands.js.map +1 -0
  189. package/dist/src/commands/hooks-coverage-utils.d.ts +42 -0
  190. package/dist/src/commands/hooks-coverage-utils.d.ts.map +1 -0
  191. package/dist/src/commands/hooks-coverage-utils.js +220 -0
  192. package/dist/src/commands/hooks-coverage-utils.js.map +1 -0
  193. package/dist/src/commands/hooks-extended-commands.d.ts +14 -0
  194. package/dist/src/commands/hooks-extended-commands.d.ts.map +1 -0
  195. package/dist/src/commands/hooks-extended-commands.js +579 -0
  196. package/dist/src/commands/hooks-extended-commands.js.map +1 -0
  197. package/dist/src/commands/hooks-formatting.d.ts +13 -0
  198. package/dist/src/commands/hooks-formatting.d.ts.map +1 -0
  199. package/dist/src/commands/hooks-formatting.js +42 -0
  200. package/dist/src/commands/hooks-formatting.js.map +1 -0
  201. package/dist/src/commands/hooks-routing-commands.d.ts +15 -0
  202. package/dist/src/commands/hooks-routing-commands.d.ts.map +1 -0
  203. package/dist/src/commands/hooks-routing-commands.js +723 -0
  204. package/dist/src/commands/hooks-routing-commands.js.map +1 -0
  205. package/dist/src/commands/hooks-workers.d.ts +9 -0
  206. package/dist/src/commands/hooks-workers.d.ts.map +1 -0
  207. package/dist/src/commands/hooks-workers.js +782 -0
  208. package/dist/src/commands/hooks-workers.js.map +1 -0
  209. package/dist/src/commands/hooks.d.ts +8 -0
  210. package/dist/src/commands/hooks.d.ts.map +1 -1
  211. package/dist/src/commands/hooks.js +179 -4103
  212. package/dist/src/commands/hooks.js.map +1 -1
  213. package/dist/src/commands/index.d.ts +1 -0
  214. package/dist/src/commands/index.d.ts.map +1 -1
  215. package/dist/src/commands/index.js +6 -0
  216. package/dist/src/commands/index.js.map +1 -1
  217. package/dist/src/commands/org.d.ts.map +1 -1
  218. package/dist/src/commands/org.js +14 -15
  219. package/dist/src/commands/org.js.map +1 -1
  220. package/dist/src/commands/tokens.d.ts.map +1 -1
  221. package/dist/src/commands/tokens.js +77 -1
  222. package/dist/src/commands/tokens.js.map +1 -1
  223. package/dist/src/init/executor.d.ts.map +1 -1
  224. package/dist/src/init/executor.js +18 -8
  225. package/dist/src/init/executor.js.map +1 -1
  226. package/dist/src/init/settings-generator.d.ts.map +1 -1
  227. package/dist/src/init/settings-generator.js +39 -5
  228. package/dist/src/init/settings-generator.js.map +1 -1
  229. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  230. package/dist/src/init/statusline-generator.js +25 -5
  231. package/dist/src/init/statusline-generator.js.map +1 -1
  232. package/dist/src/mcp-tools/browser-tools.d.ts +3 -5
  233. package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
  234. package/dist/src/mcp-tools/browser-tools.js +619 -326
  235. package/dist/src/mcp-tools/browser-tools.js.map +1 -1
  236. package/dist/src/mcp-tools/hooks-embedding.d.ts +161 -0
  237. package/dist/src/mcp-tools/hooks-embedding.d.ts.map +1 -0
  238. package/dist/src/mcp-tools/hooks-embedding.js +506 -0
  239. package/dist/src/mcp-tools/hooks-embedding.js.map +1 -0
  240. package/dist/src/mcp-tools/hooks-intelligence.d.ts +26 -0
  241. package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -0
  242. package/dist/src/mcp-tools/hooks-intelligence.js +1328 -0
  243. package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -0
  244. package/dist/src/mcp-tools/hooks-routing.d.ts +27 -0
  245. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -0
  246. package/dist/src/mcp-tools/hooks-routing.js +1591 -0
  247. package/dist/src/mcp-tools/hooks-routing.js.map +1 -0
  248. package/dist/src/mcp-tools/hooks-tools.d.ts +3 -38
  249. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  250. package/dist/src/mcp-tools/hooks-tools.js +5 -3393
  251. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  252. package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
  253. package/dist/src/mcp-tools/monograph-tools.js +24 -14
  254. package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
  255. package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
  256. package/dist/src/mcp-tools/workflow-tools.js +54 -1
  257. package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
  258. package/dist/src/memory/embedding-operations.d.ts +58 -0
  259. package/dist/src/memory/embedding-operations.d.ts.map +1 -0
  260. package/dist/src/memory/embedding-operations.js +299 -0
  261. package/dist/src/memory/embedding-operations.js.map +1 -0
  262. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
  263. package/dist/src/memory/ewc-consolidation.js +37 -3
  264. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  265. package/dist/src/memory/hnsw-operations.d.ts +130 -0
  266. package/dist/src/memory/hnsw-operations.d.ts.map +1 -0
  267. package/dist/src/memory/hnsw-operations.js +400 -0
  268. package/dist/src/memory/hnsw-operations.js.map +1 -0
  269. package/dist/src/memory/intelligence.d.ts.map +1 -1
  270. package/dist/src/memory/intelligence.js +42 -23
  271. package/dist/src/memory/intelligence.js.map +1 -1
  272. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  273. package/dist/src/memory/memory-bridge.js +52 -8
  274. package/dist/src/memory/memory-bridge.js.map +1 -1
  275. package/dist/src/memory/memory-crud.d.ts +67 -0
  276. package/dist/src/memory/memory-crud.d.ts.map +1 -0
  277. package/dist/src/memory/memory-crud.js +415 -0
  278. package/dist/src/memory/memory-crud.js.map +1 -0
  279. package/dist/src/memory/memory-initializer.d.ts +9 -322
  280. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  281. package/dist/src/memory/memory-initializer.js +17 -1794
  282. package/dist/src/memory/memory-initializer.js.map +1 -1
  283. package/dist/src/memory/memory-migrations.d.ts +30 -0
  284. package/dist/src/memory/memory-migrations.d.ts.map +1 -0
  285. package/dist/src/memory/memory-migrations.js +134 -0
  286. package/dist/src/memory/memory-migrations.js.map +1 -0
  287. package/dist/src/memory/memory-read.d.ts +78 -0
  288. package/dist/src/memory/memory-read.d.ts.map +1 -0
  289. package/dist/src/memory/memory-read.js +331 -0
  290. package/dist/src/memory/memory-read.js.map +1 -0
  291. package/dist/src/memory/memory-schema.d.ts +13 -0
  292. package/dist/src/memory/memory-schema.d.ts.map +1 -0
  293. package/dist/src/memory/memory-schema.js +167 -0
  294. package/dist/src/memory/memory-schema.js.map +1 -0
  295. package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
  296. package/dist/src/memory/sona-optimizer.js +37 -4
  297. package/dist/src/memory/sona-optimizer.js.map +1 -1
  298. package/dist/src/monovector/route-outcomes.d.ts.map +1 -1
  299. package/dist/src/monovector/route-outcomes.js +16 -6
  300. package/dist/src/monovector/route-outcomes.js.map +1 -1
  301. package/dist/src/pricing/model-pricing.d.ts +41 -0
  302. package/dist/src/pricing/model-pricing.d.ts.map +1 -0
  303. package/dist/src/pricing/model-pricing.js +61 -0
  304. package/dist/src/pricing/model-pricing.js.map +1 -0
  305. package/dist/src/ui/.monomind/capture/active-run.json +1 -0
  306. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.convs.jsonl +3 -0
  307. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.jsonl +11 -0
  308. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/rigid-qa-restart-1782288201.jsonl +540 -0
  309. package/dist/src/ui/.monomind/orgs/system-trial-qa-threads.jsonl +3 -0
  310. package/dist/src/ui/.monomind/orgs/test-event-fix/runs/rigid-qa-restart-1782288201.jsonl +2 -0
  311. package/dist/src/ui/MODULARIZATION_PLAN.md +79 -0
  312. package/dist/src/ui/collector.mjs +23 -13
  313. package/dist/src/ui/dashboard.html +1652 -13
  314. package/dist/src/ui/data/known-projects.json +1 -0
  315. package/dist/src/ui/data/mastermind-events.jsonl +553 -0
  316. package/dist/src/ui/data/sessions/_index.json +1 -0
  317. package/dist/src/ui/data/sessions/final-sess-001.jsonl +542 -0
  318. package/dist/src/ui/data/unknown-events.jsonl +1 -0
  319. package/dist/src/ui/orgs.html +154 -10
  320. package/dist/src/ui/server.mjs +1131 -168
  321. package/dist/src/ui/sse-manager.mjs +119 -0
  322. package/dist/src/update/checker.js +1 -1
  323. package/dist/src/update/checker.js.map +1 -1
  324. package/dist/tsconfig.tsbuildinfo +1 -1
  325. package/dist/workflow/builtin-handlers.js +321 -0
  326. package/dist/workflow/engine.js +253 -0
  327. package/dist/workflow/expression.js +98 -0
  328. package/dist/workflow/types.js +2 -0
  329. package/package.json +8 -5
@@ -0,0 +1,321 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
+ if (ar || !(i in from)) {
52
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
+ ar[i] = from[i];
54
+ }
55
+ }
56
+ return to.concat(ar || Array.prototype.slice.call(from));
57
+ };
58
+ Object.defineProperty(exports, "__esModule", { value: true });
59
+ exports.createBuiltinHandlers = createBuiltinHandlers;
60
+ // Built-in node handlers registered for every `browse workflow run` invocation.
61
+ //
62
+ // action.http — fetch a URL (GET/POST/etc.) and put the response in item.data
63
+ // action.save_file — write item data or binaryBase64 to a file on disk
64
+ // action.log — console.log each item (useful for debugging workflows)
65
+ // action.gemini_image — generate image via Gemini web app (browser automation on port 9222)
66
+ // or Imagen REST API (GEMINI_API_KEY), or mock mode
67
+ var promises_1 = require("node:fs/promises");
68
+ var node_path_1 = require("node:path");
69
+ var node_child_process_1 = require("node:child_process");
70
+ // Call npx monomind browse <args> and return stdout. Never throws.
71
+ function browseCmd(args, timeoutMs) {
72
+ if (timeoutMs === void 0) { timeoutMs = 30000; }
73
+ try {
74
+ return (0, node_child_process_1.execFileSync)('npx', __spreadArray(['monomind', 'browse'], args, true), {
75
+ encoding: 'utf8',
76
+ timeout: timeoutMs,
77
+ env: __assign({}, process.env),
78
+ stdio: ['ignore', 'pipe', 'pipe'],
79
+ });
80
+ }
81
+ catch (_a) {
82
+ return '';
83
+ }
84
+ }
85
+ // Generate an image using the Gemini web app on the user's authenticated Chrome (CDP port 9222).
86
+ // Returns the saved file path on success, null if not available.
87
+ function generateViaGeminiBrowser(prompt, outputPath, cdpPort) {
88
+ return __awaiter(this, void 0, void 0, function () {
89
+ var connectOut, snap, waitOut, imgSrcRaw, resp, buf, _a, _b, _c, screenshotPath;
90
+ return __generator(this, function (_d) {
91
+ switch (_d.label) {
92
+ case 0:
93
+ connectOut = browseCmd(['connect', '--port', String(cdpPort)], 8000);
94
+ if (!connectOut.includes('[OK]'))
95
+ return [2 /*return*/, null];
96
+ // Navigate to Gemini image generation UI
97
+ browseCmd(['open', 'https://gemini.google.com/app'], 15000);
98
+ browseCmd(['wait', '--load', 'domcontentloaded', '--timeout', '10000'], 12000);
99
+ snap = browseCmd(['snapshot', '-i'], 10000);
100
+ if (snap.includes('Accept all')) {
101
+ browseCmd(['find', 'role', 'button', '--name', 'Accept all', 'click'], 5000);
102
+ browseCmd(['wait', '--ms', '1500'], 5000);
103
+ }
104
+ // Type the prompt into the Gemini rich-text editor (.ql-editor)
105
+ browseCmd(['find', 'selector', '.ql-editor', 'click'], 5000);
106
+ browseCmd(['press', 'Control+a'], 3000);
107
+ // fill args are passed directly (no shell escaping needed)
108
+ browseCmd(['find', 'selector', '.ql-editor', 'fill', prompt], 10000);
109
+ browseCmd(['wait', '--ms', '300'], 2000);
110
+ browseCmd(['press', 'Enter'], 3000);
111
+ console.log("[action.gemini_image] Submitted prompt to Gemini, waiting for image generation...");
112
+ waitOut = browseCmd(['wait', '--fn', "\n (() => {\n const imgs = Array.from(document.querySelectorAll('img'));\n return imgs.some(img =>\n img.complete && img.naturalWidth > 200 && img.naturalHeight > 200 &&\n img.src && !img.src.includes('icon') && !img.src.includes('avatar') &&\n !img.src.includes('logo') && !img.src.includes('profile')\n );\n })()\n ", '--timeout', '90000'], 95000);
113
+ return [4 /*yield*/, (0, promises_1.mkdir)((0, node_path_1.dirname)(outputPath), { recursive: true })];
114
+ case 1:
115
+ _d.sent();
116
+ imgSrcRaw = browseCmd(['eval', "\n (() => {\n const imgs = Array.from(document.querySelectorAll('img'));\n const c = imgs.filter(img =>\n img.complete && img.naturalWidth > 200 && img.naturalHeight > 200 &&\n img.src && !img.src.includes('icon') && !img.src.includes('avatar') &&\n !img.src.includes('logo') && !img.src.includes('profile')\n );\n return c.length ? c[c.length - 1].src : '';\n })()\n "], 10000).trim();
117
+ if (!(imgSrcRaw && (imgSrcRaw.startsWith('https://') || imgSrcRaw.startsWith('http://')))) return [3 /*break*/, 8];
118
+ _d.label = 2;
119
+ case 2:
120
+ _d.trys.push([2, 7, , 8]);
121
+ return [4 /*yield*/, fetch(imgSrcRaw)];
122
+ case 3:
123
+ resp = _d.sent();
124
+ if (!resp.ok) return [3 /*break*/, 6];
125
+ _b = (_a = Buffer).from;
126
+ return [4 /*yield*/, resp.arrayBuffer()];
127
+ case 4:
128
+ buf = _b.apply(_a, [_d.sent()]);
129
+ return [4 /*yield*/, (0, promises_1.writeFile)(outputPath, buf)];
130
+ case 5:
131
+ _d.sent();
132
+ console.log("[action.gemini_image] Image downloaded from Gemini \u2192 ".concat(outputPath));
133
+ return [2 /*return*/, outputPath];
134
+ case 6: return [3 /*break*/, 8];
135
+ case 7:
136
+ _c = _d.sent();
137
+ return [3 /*break*/, 8];
138
+ case 8:
139
+ screenshotPath = outputPath.replace(/\.(png|jpe?g|webp)$/i, '') + '-screenshot.png';
140
+ browseCmd(['screenshot', '--full', screenshotPath], 10000);
141
+ if (waitOut.includes('[OK]') || imgSrcRaw) {
142
+ console.log("[action.gemini_image] Saved Gemini screenshot \u2192 ".concat(screenshotPath));
143
+ return [2 /*return*/, screenshotPath];
144
+ }
145
+ return [2 /*return*/, null];
146
+ }
147
+ });
148
+ });
149
+ }
150
+ function createBuiltinHandlers() {
151
+ var _this = this;
152
+ var handlers = new Map();
153
+ // action.http
154
+ // config: { url, method?, headers?, body?, responseField? }
155
+ // Puts { statusCode, body, json? } into item.data[responseField ?? 'response']
156
+ handlers.set('action.http', function (items, config) { return __awaiter(_this, void 0, void 0, function () {
157
+ var url, method, headers, body, responseField, res, text, json;
158
+ var _a, _b, _c, _d;
159
+ return __generator(this, function (_e) {
160
+ switch (_e.label) {
161
+ case 0:
162
+ url = String((_a = config['url']) !== null && _a !== void 0 ? _a : '');
163
+ method = String((_b = config['method']) !== null && _b !== void 0 ? _b : 'GET').toUpperCase();
164
+ headers = (_c = config['headers']) !== null && _c !== void 0 ? _c : {};
165
+ body = config['body'] !== undefined ? JSON.stringify(config['body']) : undefined;
166
+ responseField = String((_d = config['responseField']) !== null && _d !== void 0 ? _d : 'response');
167
+ return [4 /*yield*/, fetch(url, {
168
+ method: method,
169
+ headers: __assign({ 'Content-Type': 'application/json' }, headers),
170
+ body: method !== 'GET' && method !== 'HEAD' ? body : undefined,
171
+ })];
172
+ case 1:
173
+ res = _e.sent();
174
+ return [4 /*yield*/, res.text()];
175
+ case 2:
176
+ text = _e.sent();
177
+ try {
178
+ json = JSON.parse(text);
179
+ }
180
+ catch ( /* not JSON */_f) { /* not JSON */ }
181
+ return [2 /*return*/, items.map(function (item) {
182
+ var _a;
183
+ return (__assign(__assign({}, item), { data: __assign(__assign({}, item.data), (_a = {}, _a[responseField] = { statusCode: res.status, body: text, json: json }, _a)) }));
184
+ })];
185
+ }
186
+ });
187
+ }); });
188
+ // action.save_file
189
+ // config: { path, content?, field?, encoding? }
190
+ // Writes item.data[field] (or binaryBase64 decoded) to disk
191
+ handlers.set('action.save_file', function (items, config) { return __awaiter(_this, void 0, void 0, function () {
192
+ var results, _i, items_1, item, outPath, field, encoding, content;
193
+ var _a, _b, _c, _d;
194
+ return __generator(this, function (_e) {
195
+ switch (_e.label) {
196
+ case 0:
197
+ results = [];
198
+ _i = 0, items_1 = items;
199
+ _e.label = 1;
200
+ case 1:
201
+ if (!(_i < items_1.length)) return [3 /*break*/, 8];
202
+ item = items_1[_i];
203
+ outPath = String((_a = config['path']) !== null && _a !== void 0 ? _a : './output.txt');
204
+ field = config['field'];
205
+ encoding = String((_b = config['encoding']) !== null && _b !== void 0 ? _b : 'utf8');
206
+ return [4 /*yield*/, (0, promises_1.mkdir)((0, node_path_1.dirname)(outPath), { recursive: true })];
207
+ case 2:
208
+ _e.sent();
209
+ if (!item.binaryBase64) return [3 /*break*/, 4];
210
+ return [4 /*yield*/, (0, promises_1.writeFile)(outPath, Buffer.from(item.binaryBase64, 'base64'))];
211
+ case 3:
212
+ _e.sent();
213
+ return [3 /*break*/, 6];
214
+ case 4:
215
+ content = field
216
+ ? JSON.stringify((_c = item.data[field]) !== null && _c !== void 0 ? _c : '', null, 2)
217
+ : ((_d = config['content']) !== null && _d !== void 0 ? _d : JSON.stringify(item.data, null, 2));
218
+ return [4 /*yield*/, (0, promises_1.writeFile)(outPath, content, encoding)];
219
+ case 5:
220
+ _e.sent();
221
+ _e.label = 6;
222
+ case 6:
223
+ results.push(__assign(__assign({}, item), { data: __assign(__assign({}, item.data), { savedPath: outPath }) }));
224
+ _e.label = 7;
225
+ case 7:
226
+ _i++;
227
+ return [3 /*break*/, 1];
228
+ case 8: return [2 /*return*/, results];
229
+ }
230
+ });
231
+ }); });
232
+ // action.log
233
+ // config: { label? }
234
+ handlers.set('action.log', function (items, config) { return __awaiter(_this, void 0, void 0, function () {
235
+ var label, _i, items_2, item;
236
+ var _a;
237
+ return __generator(this, function (_b) {
238
+ label = String((_a = config['label']) !== null && _a !== void 0 ? _a : 'action.log');
239
+ for (_i = 0, items_2 = items; _i < items_2.length; _i++) {
240
+ item = items_2[_i];
241
+ console.log("[".concat(label, "]"), JSON.stringify(item.data, null, 2));
242
+ }
243
+ return [2 /*return*/, items];
244
+ });
245
+ }); });
246
+ // action.gemini_image
247
+ // config: { prompt, cdpPort?, outputPath?, apiKey?, model?, aspectRatio? }
248
+ // Priority: (1) Gemini web browser via CDP port 9222, (2) Imagen REST API, (3) mock
249
+ handlers.set('action.gemini_image', function (items, config) { return __awaiter(_this, void 0, void 0, function () {
250
+ var cdpPort, apiKey, model, aspectRatio, outputPath, results, _i, items_3, item, prompt_1, filePath, browserPath, url, res, _a, _b, _c, data, prediction;
251
+ var _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
252
+ return __generator(this, function (_q) {
253
+ switch (_q.label) {
254
+ case 0:
255
+ cdpPort = Number((_e = (_d = config['cdpPort']) !== null && _d !== void 0 ? _d : process.env['GEMINI_CDP_PORT']) !== null && _e !== void 0 ? _e : 9222);
256
+ apiKey = String((_h = (_g = (_f = config['apiKey']) !== null && _f !== void 0 ? _f : process.env['GEMINI_API_KEY']) !== null && _g !== void 0 ? _g : process.env['GOOGLE_API_KEY']) !== null && _h !== void 0 ? _h : '');
257
+ model = String((_j = config['model']) !== null && _j !== void 0 ? _j : 'imagen-3.0-generate-001');
258
+ aspectRatio = String((_k = config['aspectRatio']) !== null && _k !== void 0 ? _k : '1:1');
259
+ outputPath = config['outputPath'];
260
+ results = [];
261
+ _i = 0, items_3 = items;
262
+ _q.label = 1;
263
+ case 1:
264
+ if (!(_i < items_3.length)) return [3 /*break*/, 11];
265
+ item = items_3[_i];
266
+ prompt_1 = String((_m = (_l = config['prompt']) !== null && _l !== void 0 ? _l : item.data['prompt']) !== null && _m !== void 0 ? _m : '');
267
+ filePath = outputPath !== null && outputPath !== void 0 ? outputPath : "./output/gemini-image-".concat(Date.now(), ".png");
268
+ return [4 /*yield*/, generateViaGeminiBrowser(prompt_1, filePath, cdpPort)];
269
+ case 2:
270
+ browserPath = _q.sent();
271
+ if (browserPath) {
272
+ results.push(__assign(__assign({}, item), { data: __assign(__assign({}, item.data), { prompt: prompt_1, generatedImagePath: browserPath, source: 'gemini-browser' }) }));
273
+ return [3 /*break*/, 10];
274
+ }
275
+ if (!apiKey) return [3 /*break*/, 9];
276
+ console.log("[action.gemini_image] Browser unavailable \u2014 trying Imagen REST API");
277
+ url = "https://generativelanguage.googleapis.com/v1beta/models/".concat(model, ":predict?key=").concat(apiKey);
278
+ return [4 /*yield*/, fetch(url, {
279
+ method: 'POST',
280
+ headers: { 'Content-Type': 'application/json' },
281
+ body: JSON.stringify({
282
+ instances: [{ prompt: prompt_1 }],
283
+ parameters: { sampleCount: 1, aspectRatio: aspectRatio },
284
+ }),
285
+ })];
286
+ case 3:
287
+ res = _q.sent();
288
+ if (!!res.ok) return [3 /*break*/, 5];
289
+ _a = Error.bind;
290
+ _c = (_b = "Gemini Imagen API error ".concat(res.status, ": ")).concat;
291
+ return [4 /*yield*/, res.text()];
292
+ case 4: throw new (_a.apply(Error, [void 0, _c.apply(_b, [_q.sent()])]))();
293
+ case 5: return [4 /*yield*/, res.json()];
294
+ case 6:
295
+ data = _q.sent();
296
+ prediction = (_o = data.predictions) === null || _o === void 0 ? void 0 : _o[0];
297
+ if (!(prediction === null || prediction === void 0 ? void 0 : prediction.bytesBase64Encoded))
298
+ throw new Error('No image data in Gemini response');
299
+ return [4 /*yield*/, (0, promises_1.mkdir)((0, node_path_1.dirname)(filePath), { recursive: true })];
300
+ case 7:
301
+ _q.sent();
302
+ return [4 /*yield*/, (0, promises_1.writeFile)(filePath, Buffer.from(prediction.bytesBase64Encoded, 'base64'))];
303
+ case 8:
304
+ _q.sent();
305
+ results.push(__assign(__assign({}, item), { data: __assign(__assign({}, item.data), { prompt: prompt_1, generatedImagePath: filePath, mimeType: (_p = prediction.mimeType) !== null && _p !== void 0 ? _p : 'image/png', source: 'gemini-api' }), binaryBase64: prediction.bytesBase64Encoded }));
306
+ return [3 /*break*/, 10];
307
+ case 9:
308
+ // Priority 3: Mock mode — no browser on port 9222 and no API key
309
+ console.log("[action.gemini_image] No browser on port ".concat(cdpPort, " and no API key \u2014 mock mode."));
310
+ console.log(" Prompt: \"".concat(prompt_1, "\""));
311
+ results.push(__assign(__assign({}, item), { data: __assign(__assign({}, item.data), { prompt: prompt_1, mockMode: true, note: "Set GEMINI_CDP_PORT env var (default: 9222) for browser mode, or GEMINI_API_KEY for REST API" }) }));
312
+ _q.label = 10;
313
+ case 10:
314
+ _i++;
315
+ return [3 /*break*/, 1];
316
+ case 11: return [2 /*return*/, results];
317
+ }
318
+ });
319
+ }); });
320
+ return handlers;
321
+ }
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.runWorkflow = runWorkflow;
51
+ var node_crypto_1 = require("node:crypto");
52
+ var expression_js_1 = require("./expression.js");
53
+ var server_js_1 = require("../dashboard/server.js");
54
+ function runWorkflow(def_1) {
55
+ return __awaiter(this, arguments, void 0, function (def, options) {
56
+ var _a, handlers, _b, onEvent, signal, _c, params, runId, startedAt, controller, dashboard, stopPollTimer, emit, nodeMap, inDegree, outEdges, toEdges, _i, _d, conn, edges, toList, queue, sorted, _e, inDegree_1, _f, id, deg, id, _g, _h, edge, newDeg, nodeOutputs, itemsProcessed, runStatus, runError, _j, sorted_1, nodeId, node, nodeName, t0, inputItems, outputs, err_1, error, completedAt, record;
57
+ var _k, _l, _m, _o, _p, _q, _r;
58
+ if (options === void 0) { options = {}; }
59
+ return __generator(this, function (_s) {
60
+ switch (_s.label) {
61
+ case 0:
62
+ _a = options.handlers, handlers = _a === void 0 ? new Map() : _a, _b = options.onEvent, onEvent = _b === void 0 ? function () { } : _b, signal = options.signal, _c = options.params, params = _c === void 0 ? {} : _c;
63
+ runId = (0, node_crypto_1.randomUUID)();
64
+ startedAt = Date.now();
65
+ controller = new AbortController();
66
+ if (signal) {
67
+ if (signal.aborted) {
68
+ controller.abort();
69
+ }
70
+ else {
71
+ signal.addEventListener('abort', function () { return controller.abort(); }, { once: true });
72
+ }
73
+ }
74
+ dashboard = (0, server_js_1.getDashboard)();
75
+ if (dashboard) {
76
+ stopPollTimer = setInterval(function () {
77
+ if (dashboard.isStopRequested(runId))
78
+ controller.abort();
79
+ }, 500);
80
+ // Avoid keeping Node.js event loop alive if nothing else is running
81
+ (_k = stopPollTimer.unref) === null || _k === void 0 ? void 0 : _k.call(stopPollTimer);
82
+ }
83
+ emit = function (partial) {
84
+ return onEvent(__assign({ runId: runId, workflowId: def.id, workflowName: def.name, timestamp: Date.now() }, partial));
85
+ };
86
+ emit({ nodeId: '', nodeName: '', eventType: 'run_started' });
87
+ nodeMap = new Map(def.nodes.map(function (n) { return [n.id, n]; }));
88
+ inDegree = new Map(def.nodes.map(function (n) { return [n.id, 0]; }));
89
+ outEdges = new Map();
90
+ toEdges = new Map();
91
+ for (_i = 0, _d = def.connections; _i < _d.length; _i++) {
92
+ conn = _d[_i];
93
+ inDegree.set(conn.to, ((_l = inDegree.get(conn.to)) !== null && _l !== void 0 ? _l : 0) + 1);
94
+ edges = (_m = outEdges.get(conn.from)) !== null && _m !== void 0 ? _m : [];
95
+ edges.push({ to: conn.to, handle: conn.handle });
96
+ outEdges.set(conn.from, edges);
97
+ toList = (_o = toEdges.get(conn.to)) !== null && _o !== void 0 ? _o : [];
98
+ toList.push({ from: conn.from, handle: conn.handle });
99
+ toEdges.set(conn.to, toList);
100
+ }
101
+ queue = [];
102
+ sorted = [];
103
+ for (_e = 0, inDegree_1 = inDegree; _e < inDegree_1.length; _e++) {
104
+ _f = inDegree_1[_e], id = _f[0], deg = _f[1];
105
+ if (deg === 0)
106
+ queue.push(id);
107
+ }
108
+ while (queue.length > 0) {
109
+ id = queue.shift();
110
+ sorted.push(id);
111
+ for (_g = 0, _h = (_p = outEdges.get(id)) !== null && _p !== void 0 ? _p : []; _g < _h.length; _g++) {
112
+ edge = _h[_g];
113
+ newDeg = ((_q = inDegree.get(edge.to)) !== null && _q !== void 0 ? _q : 0) - 1;
114
+ inDegree.set(edge.to, newDeg);
115
+ if (newDeg === 0)
116
+ queue.push(edge.to);
117
+ }
118
+ }
119
+ if (sorted.length !== def.nodes.length) {
120
+ throw new Error('Workflow contains a cycle');
121
+ }
122
+ nodeOutputs = new Map();
123
+ itemsProcessed = 0;
124
+ runStatus = 'completed';
125
+ _s.label = 1;
126
+ case 1:
127
+ _s.trys.push([1, , 8, 9]);
128
+ _j = 0, sorted_1 = sorted;
129
+ _s.label = 2;
130
+ case 2:
131
+ if (!(_j < sorted_1.length)) return [3 /*break*/, 7];
132
+ nodeId = sorted_1[_j];
133
+ if (controller.signal.aborted) {
134
+ runStatus = 'stopped';
135
+ emit({ nodeId: nodeId, nodeName: nodeId, eventType: 'run_stopped' });
136
+ return [3 /*break*/, 7];
137
+ }
138
+ node = nodeMap.get(nodeId);
139
+ nodeName = (_r = node.name) !== null && _r !== void 0 ? _r : node.id;
140
+ t0 = Date.now();
141
+ inputItems = collectInputs(nodeId, nodeOutputs, toEdges);
142
+ emit({ nodeId: nodeId, nodeName: nodeName, eventType: 'step_started', itemTotal: inputItems.length });
143
+ _s.label = 3;
144
+ case 3:
145
+ _s.trys.push([3, 5, , 6]);
146
+ return [4 /*yield*/, executeNode(node, inputItems, handlers, nodeOutputs, params)];
147
+ case 4:
148
+ outputs = _s.sent();
149
+ nodeOutputs.set(nodeId, outputs);
150
+ itemsProcessed += outputs.length;
151
+ emit({ nodeId: nodeId, nodeName: nodeName, eventType: 'step_completed', durationMs: Date.now() - t0, itemTotal: outputs.length });
152
+ return [3 /*break*/, 6];
153
+ case 5:
154
+ err_1 = _s.sent();
155
+ error = err_1 instanceof Error ? err_1.message : String(err_1);
156
+ emit({ nodeId: nodeId, nodeName: nodeName, eventType: 'step_failed', error: error, durationMs: Date.now() - t0 });
157
+ if (node.onError === 'skip') {
158
+ nodeOutputs.set(nodeId, []);
159
+ }
160
+ else {
161
+ runStatus = 'failed';
162
+ runError = error;
163
+ return [3 /*break*/, 7];
164
+ }
165
+ return [3 /*break*/, 6];
166
+ case 6:
167
+ _j++;
168
+ return [3 /*break*/, 2];
169
+ case 7: return [3 /*break*/, 9];
170
+ case 8:
171
+ if (stopPollTimer !== undefined)
172
+ clearInterval(stopPollTimer);
173
+ return [7 /*endfinally*/];
174
+ case 9:
175
+ completedAt = Date.now();
176
+ record = {
177
+ id: runId,
178
+ workflowId: def.id,
179
+ workflowName: def.name,
180
+ status: runStatus,
181
+ startedAt: startedAt,
182
+ completedAt: completedAt,
183
+ itemsProcessed: itemsProcessed,
184
+ itemsTotal: itemsProcessed,
185
+ error: runError,
186
+ };
187
+ emit({ nodeId: '', nodeName: '', eventType: runStatus === 'completed' ? 'run_completed' : 'run_stopped', error: runError });
188
+ return [2 /*return*/, record];
189
+ }
190
+ });
191
+ });
192
+ }
193
+ function collectInputs(nodeId, nodeOutputs, toEdges) {
194
+ var _a;
195
+ var predecessors = (_a = toEdges.get(nodeId)) !== null && _a !== void 0 ? _a : [];
196
+ if (predecessors.length === 0)
197
+ return [{ data: {} }];
198
+ return predecessors.flatMap(function (_a) {
199
+ var _b;
200
+ var from = _a.from, handle = _a.handle;
201
+ var items = (_b = nodeOutputs.get(from)) !== null && _b !== void 0 ? _b : [];
202
+ if (handle === 'true')
203
+ return items.filter(function (item) { return item.data['__ifResult'] === true; });
204
+ if (handle === 'false')
205
+ return items.filter(function (item) { return item.data['__ifResult'] === false; });
206
+ return items;
207
+ });
208
+ }
209
+ function executeNode(node, inputs, handlers, nodeOutputs, params) {
210
+ return __awaiter(this, void 0, void 0, function () {
211
+ var allOutputs, type, config, items, predicate_1, predicate_2, handler, resolvedConfig;
212
+ var _a;
213
+ return __generator(this, function (_b) {
214
+ allOutputs = Object.fromEntries(nodeOutputs);
215
+ type = node.type, config = node.config;
216
+ if (type === 'trigger.manual') {
217
+ items = config['items'];
218
+ if (Array.isArray(items))
219
+ return [2 /*return*/, items];
220
+ return [2 /*return*/, inputs];
221
+ }
222
+ if (type === 'core.set') {
223
+ return [2 /*return*/, inputs.map(function (item) {
224
+ var resolved = (0, expression_js_1.resolveConfig)(config, item, allOutputs, params);
225
+ return __assign(__assign({}, item), { data: __assign(__assign({}, item.data), resolved) });
226
+ })];
227
+ }
228
+ if (type === 'core.filter') {
229
+ predicate_1 = config['expression'];
230
+ return [2 /*return*/, inputs.filter(function (item) {
231
+ try {
232
+ return Boolean((0, expression_js_1.resolveExpression)(predicate_1, item, allOutputs, params));
233
+ }
234
+ catch (_a) {
235
+ return false;
236
+ }
237
+ })];
238
+ }
239
+ if (type === 'core.if') {
240
+ predicate_2 = config['expression'];
241
+ return [2 /*return*/, inputs.map(function (item) {
242
+ var result = Boolean((0, expression_js_1.resolveExpression)(predicate_2, item, allOutputs, params));
243
+ return __assign(__assign({}, item), { data: __assign(__assign({}, item.data), { __ifResult: result }) });
244
+ })];
245
+ }
246
+ handler = handlers.get(type);
247
+ if (!handler)
248
+ throw new Error("No handler registered for node type: ".concat(type));
249
+ resolvedConfig = (0, expression_js_1.resolveConfig)(config, (_a = inputs[0]) !== null && _a !== void 0 ? _a : { data: {} }, allOutputs, params);
250
+ return [2 /*return*/, handler(inputs, resolvedConfig)];
251
+ });
252
+ });
253
+ }