@monoes/monomindcli 1.14.7 → 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,3 @@
1
+ import type { NodeHandler } from './engine.js';
2
+ export declare function createBuiltinHandlers(): Map<string, NodeHandler>;
3
+ //# sourceMappingURL=builtin-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-handlers.d.ts","sourceRoot":"","sources":["../../../../src/browser/workflow/builtin-handlers.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAuN/C,wBAAgB,qBAAqB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CA8IhE"}
@@ -0,0 +1,343 @@
1
+ // Built-in node handlers registered for every `browse workflow run` invocation.
2
+ //
3
+ // action.http — fetch a URL (GET/POST/etc.) and put the response in item.data
4
+ // action.save_file — write item data or binaryBase64 to a file on disk
5
+ // action.log — console.log each item (useful for debugging workflows)
6
+ // action.gemini_image — generate image via Gemini web app (browser automation + session store)
7
+ // or Imagen REST API (GEMINI_API_KEY), or mock mode
8
+ import { writeFile, readFile, mkdir, chmod } from 'node:fs/promises';
9
+ import { existsSync } from 'node:fs';
10
+ import { dirname, join, resolve } from 'node:path';
11
+ import { homedir } from 'node:os';
12
+ /** Resolve a user-supplied path and assert it stays within the working directory. */
13
+ function safeResolvePath(rawPath) {
14
+ const cwd = process.cwd();
15
+ const safePath = resolve(cwd, rawPath);
16
+ if (safePath !== cwd && !safePath.startsWith(cwd + '/')) {
17
+ throw new Error(`Path traversal blocked: "${rawPath}" resolves outside working directory`);
18
+ }
19
+ return safePath;
20
+ }
21
+ // ---------------------------------------------------------------------------
22
+ // Session persistence (shared format with browse-platform.ts)
23
+ // ---------------------------------------------------------------------------
24
+ const SESSIONS_FILE = join(homedir(), '.monomind', 'sessions.json');
25
+ async function loadStoredSession(platform) {
26
+ if (!existsSync(SESSIONS_FILE))
27
+ return null;
28
+ try {
29
+ const sessions = JSON.parse(await readFile(SESSIONS_FILE, 'utf-8'));
30
+ return sessions.find(s => s.platform === platform) ?? null;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ async function saveStoredSession(platform, cookies, userAgent, username) {
37
+ let sessions = [];
38
+ if (existsSync(SESSIONS_FILE)) {
39
+ try {
40
+ sessions = JSON.parse(await readFile(SESSIONS_FILE, 'utf-8'));
41
+ }
42
+ catch { /* start fresh */ }
43
+ }
44
+ const id = `${platform}:${username}`;
45
+ const now = Date.now();
46
+ const existing = sessions.findIndex(s => s.platform === platform);
47
+ const entry = {
48
+ id, platform, username, userAgent,
49
+ cookies: JSON.stringify(cookies),
50
+ createdAt: existing >= 0 ? sessions[existing].createdAt : now,
51
+ lastUsedAt: now,
52
+ };
53
+ if (existing >= 0)
54
+ sessions[existing] = entry;
55
+ else
56
+ sessions.push(entry);
57
+ await mkdir(join(homedir(), '.monomind'), { recursive: true });
58
+ await writeFile(SESSIONS_FILE, JSON.stringify(sessions, null, 2));
59
+ await chmod(SESSIONS_FILE, 0o600);
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // Gemini browser automation
63
+ // ---------------------------------------------------------------------------
64
+ const GEMINI_IMAGE_CHECK = `
65
+ (() => {
66
+ const imgs = Array.from(document.querySelectorAll('img'));
67
+ return imgs.some(img =>
68
+ img.complete && img.naturalWidth > 200 && img.naturalHeight > 200 &&
69
+ img.src && !img.src.includes('icon') && !img.src.includes('avatar') &&
70
+ !img.src.includes('logo') && !img.src.includes('profile')
71
+ );
72
+ })()
73
+ `;
74
+ const GEMINI_IMAGE_SRC = `
75
+ (() => {
76
+ const imgs = Array.from(document.querySelectorAll('img'));
77
+ const c = imgs.filter(img =>
78
+ img.complete && img.naturalWidth > 200 && img.naturalHeight > 200 &&
79
+ img.src && !img.src.includes('icon') && !img.src.includes('avatar') &&
80
+ !img.src.includes('logo') && !img.src.includes('profile')
81
+ );
82
+ return c.length ? c[c.length - 1].src : '';
83
+ })()
84
+ `;
85
+ // Generate an image via the Gemini web app, with session management.
86
+ // Flow: connect → restore saved session → if not logged in, wait for user login → generate.
87
+ // Returns the saved file path, or null if Chrome is not available.
88
+ async function generateViaGeminiBrowser(prompt, outputPath, cdpPort) {
89
+ let browser;
90
+ try {
91
+ browser = await import('../index.js');
92
+ }
93
+ catch {
94
+ return null;
95
+ }
96
+ let conn;
97
+ try {
98
+ conn = await browser.connectToTarget(cdpPort);
99
+ }
100
+ catch {
101
+ return null;
102
+ }
103
+ const { client, sessionId } = conn;
104
+ const refs = new Map();
105
+ try {
106
+ // Restore stored Gemini session cookies before navigating
107
+ const stored = await loadStoredSession('gemini');
108
+ if (stored?.cookies) {
109
+ try {
110
+ const cookies = JSON.parse(stored.cookies);
111
+ if (cookies.length > 0) {
112
+ await browser.setCookies(client, sessionId, cookies);
113
+ }
114
+ }
115
+ catch { /* ignore malformed cookies */ }
116
+ }
117
+ // Navigate to Gemini
118
+ await browser.openUrl(client, sessionId, 'https://gemini.google.com/app');
119
+ // Dismiss cookie consent if present
120
+ const refs2 = new Map();
121
+ const consentBtn = await browser.findByRole(client, sessionId, refs2, 'button', { name: 'Accept all' }).catch(() => null);
122
+ if (consentBtn) {
123
+ await browser.clickElement(client, sessionId, consentBtn);
124
+ await new Promise(r => setTimeout(r, 1500));
125
+ }
126
+ // Check if logged in — .ql-editor only appears when authenticated
127
+ let inputRef = await browser.findBySelector(client, sessionId, refs, '.ql-editor').catch(() => null);
128
+ if (!inputRef) {
129
+ // Not logged in — ask the user to authenticate
130
+ console.log('');
131
+ console.log('┌─────────────────────────────────────────────────────────┐');
132
+ console.log('│ Gemini login required │');
133
+ console.log('│ │');
134
+ console.log('│ A browser window has been opened to Gemini. │');
135
+ console.log('│ Please sign in with your Google account. │');
136
+ console.log('│ │');
137
+ console.log('│ The workflow will resume automatically after login. │');
138
+ console.log('│ Waiting up to 5 minutes… │');
139
+ console.log('└─────────────────────────────────────────────────────────┘');
140
+ console.log('');
141
+ // Navigate to Google sign-in
142
+ await browser.openUrl(client, sessionId, 'https://accounts.google.com/signin/v2/identifier');
143
+ // Wait up to 5 min for the user to complete login and land back on Gemini
144
+ const loginDeadline = Date.now() + 5 * 60 * 1000;
145
+ let loggedIn = false;
146
+ while (Date.now() < loginDeadline) {
147
+ await new Promise(r => setTimeout(r, 2000));
148
+ const url = await browser.getCurrentUrl(client, sessionId).catch(() => '');
149
+ if (url.includes('gemini.google.com')) {
150
+ inputRef = await browser.findBySelector(client, sessionId, refs, '.ql-editor').catch(() => null);
151
+ if (inputRef) {
152
+ loggedIn = true;
153
+ break;
154
+ }
155
+ }
156
+ }
157
+ if (!loggedIn) {
158
+ console.log('[action.gemini_image] Login timeout. Run: monomind browse platform connect gemini');
159
+ return null;
160
+ }
161
+ console.log('[action.gemini_image] Login detected! Saving session...');
162
+ }
163
+ // Save/refresh cookies after confirming login
164
+ const liveCookies = await browser.getCookies(client, sessionId).catch(() => []);
165
+ const userAgent = await browser.evaluateJs(client, sessionId, 'navigator.userAgent').catch(() => 'unknown');
166
+ const username = await browser.evaluateJs(client, sessionId, "document.querySelector('.gb_A.gb_Sa')?.textContent?.trim() ?? 'gemini-user'").catch(() => 'gemini-user');
167
+ await saveStoredSession('gemini', liveCookies, String(userAgent), String(username));
168
+ // Ensure we're on the app page with the input visible
169
+ if (!inputRef) {
170
+ await browser.openUrl(client, sessionId, 'https://gemini.google.com/app');
171
+ inputRef = await browser.findBySelector(client, sessionId, refs, '.ql-editor').catch(() => null);
172
+ }
173
+ if (!inputRef)
174
+ return null;
175
+ // Fill and submit the prompt
176
+ await browser.fillElement(client, sessionId, inputRef, prompt);
177
+ await new Promise(r => setTimeout(r, 300));
178
+ await browser.pressKey(client, sessionId, 'Return');
179
+ console.log('[action.gemini_image] Prompt submitted to Gemini, waiting for image...');
180
+ // Poll up to 90s for generated image
181
+ const deadline = Date.now() + 90_000;
182
+ while (Date.now() < deadline) {
183
+ const found = await browser.evaluateJs(client, sessionId, GEMINI_IMAGE_CHECK).catch(() => false);
184
+ if (found)
185
+ break;
186
+ await new Promise(r => setTimeout(r, 500));
187
+ }
188
+ await mkdir(dirname(outputPath), { recursive: true });
189
+ // Extract image URL and download
190
+ const imgSrc = (await browser.evaluateJs(client, sessionId, GEMINI_IMAGE_SRC).catch(() => ''));
191
+ if (imgSrc && (imgSrc.startsWith('https://') || imgSrc.startsWith('http://'))) {
192
+ try {
193
+ const resp = await fetch(imgSrc);
194
+ if (resp.ok) {
195
+ await writeFile(outputPath, Buffer.from(await resp.arrayBuffer()));
196
+ console.log(`[action.gemini_image] Image saved → ${outputPath}`);
197
+ return outputPath;
198
+ }
199
+ }
200
+ catch { /* fall through to screenshot */ }
201
+ }
202
+ // Fallback: screenshot the response
203
+ const screenshotPath = outputPath.replace(/\.(png|jpe?g|webp)$/i, '') + '-screenshot.png';
204
+ const ss = await browser.captureScreenshot(client, sessionId, { path: screenshotPath, fullPage: true }).catch(() => null);
205
+ if (ss) {
206
+ console.log(`[action.gemini_image] Screenshot saved → ${ss.path}`);
207
+ return ss.path;
208
+ }
209
+ return null;
210
+ }
211
+ finally {
212
+ client.close();
213
+ }
214
+ }
215
+ export function createBuiltinHandlers() {
216
+ const handlers = new Map();
217
+ // action.http
218
+ // config: { url, method?, headers?, body?, responseField? }
219
+ // Puts { statusCode, body, json? } into item.data[responseField ?? 'response']
220
+ handlers.set('action.http', async (items, config) => {
221
+ const url = String(config['url'] ?? '');
222
+ const method = String(config['method'] ?? 'GET').toUpperCase();
223
+ const headers = config['headers'] ?? {};
224
+ const body = config['body'] !== undefined ? JSON.stringify(config['body']) : undefined;
225
+ const responseField = String(config['responseField'] ?? 'response');
226
+ const res = await fetch(url, {
227
+ method,
228
+ headers: { 'Content-Type': 'application/json', ...headers },
229
+ body: method !== 'GET' && method !== 'HEAD' ? body : undefined,
230
+ });
231
+ const text = await res.text();
232
+ let json;
233
+ try {
234
+ json = JSON.parse(text);
235
+ }
236
+ catch { /* not JSON */ }
237
+ return items.map(item => ({
238
+ ...item,
239
+ data: {
240
+ ...item.data,
241
+ [responseField]: { statusCode: res.status, body: text, json },
242
+ },
243
+ }));
244
+ });
245
+ // action.save_file
246
+ // config: { path, content?, field?, encoding? }
247
+ // Writes item.data[field] (or binaryBase64 decoded) to disk
248
+ handlers.set('action.save_file', async (items, config) => {
249
+ const results = [];
250
+ for (const item of items) {
251
+ const outPath = safeResolvePath(String(config['path'] ?? './output.txt'));
252
+ const field = config['field'];
253
+ const encoding = String(config['encoding'] ?? 'utf8');
254
+ await mkdir(dirname(outPath), { recursive: true });
255
+ if (item.binaryBase64) {
256
+ await writeFile(outPath, Buffer.from(item.binaryBase64, 'base64'));
257
+ }
258
+ else {
259
+ const content = field
260
+ ? JSON.stringify(item.data[field] ?? '', null, 2)
261
+ : (config['content'] ?? JSON.stringify(item.data, null, 2));
262
+ await writeFile(outPath, content, encoding);
263
+ }
264
+ results.push({ ...item, data: { ...item.data, savedPath: outPath } });
265
+ }
266
+ return results;
267
+ });
268
+ // action.log
269
+ // config: { label? }
270
+ handlers.set('action.log', async (items, config) => {
271
+ const label = String(config['label'] ?? 'action.log');
272
+ for (const item of items) {
273
+ console.log(`[${label}]`, JSON.stringify(item.data, null, 2));
274
+ }
275
+ return items;
276
+ });
277
+ // action.gemini_image
278
+ // config: { prompt, cdpPort?, outputPath?, apiKey?, model?, aspectRatio? }
279
+ // Priority: (1) Gemini web browser via CDP port 9222, (2) Imagen REST API, (3) mock
280
+ handlers.set('action.gemini_image', async (items, config) => {
281
+ const cdpPort = Number(config['cdpPort'] ?? process.env['GEMINI_CDP_PORT'] ?? 9222);
282
+ const apiKey = String(config['apiKey'] ?? process.env['GEMINI_API_KEY'] ?? process.env['GOOGLE_API_KEY'] ?? '');
283
+ const model = String(config['model'] ?? 'imagen-3.0-generate-001');
284
+ const aspectRatio = String(config['aspectRatio'] ?? '1:1');
285
+ const outputPath = config['outputPath'];
286
+ const results = [];
287
+ for (const item of items) {
288
+ const prompt = String(config['prompt'] ?? item.data['prompt'] ?? '');
289
+ const filePath = safeResolvePath(outputPath ?? `./output/gemini-image-${Date.now()}.png`);
290
+ // Priority 1: Browser automation via authenticated Chrome session
291
+ const browserPath = await generateViaGeminiBrowser(prompt, filePath, cdpPort);
292
+ if (browserPath) {
293
+ results.push({
294
+ ...item,
295
+ data: { ...item.data, prompt, generatedImagePath: browserPath, source: 'gemini-browser' },
296
+ });
297
+ continue;
298
+ }
299
+ // Priority 2: Gemini Imagen REST API
300
+ if (apiKey) {
301
+ console.log(`[action.gemini_image] Browser unavailable — trying Imagen REST API`);
302
+ const url = `https://generativelanguage.googleapis.com/v1beta/models/${model}:predict?key=${apiKey}`;
303
+ const res = await fetch(url, {
304
+ method: 'POST',
305
+ headers: { 'Content-Type': 'application/json' },
306
+ body: JSON.stringify({
307
+ instances: [{ prompt }],
308
+ parameters: { sampleCount: 1, aspectRatio },
309
+ }),
310
+ });
311
+ if (!res.ok)
312
+ throw new Error(`Gemini Imagen API error ${res.status}: ${await res.text()}`);
313
+ const data = await res.json();
314
+ const prediction = data.predictions?.[0];
315
+ if (!prediction?.bytesBase64Encoded)
316
+ throw new Error('No image data in Gemini response');
317
+ await mkdir(dirname(filePath), { recursive: true });
318
+ await writeFile(filePath, Buffer.from(prediction.bytesBase64Encoded, 'base64'));
319
+ results.push({
320
+ ...item,
321
+ data: { ...item.data, prompt, generatedImagePath: filePath, mimeType: prediction.mimeType ?? 'image/png', source: 'gemini-api' },
322
+ binaryBase64: prediction.bytesBase64Encoded,
323
+ });
324
+ continue;
325
+ }
326
+ // Priority 3: Mock mode — no browser on port 9222 and no API key
327
+ console.log(`[action.gemini_image] No browser on port ${cdpPort} and no API key — mock mode.`);
328
+ console.log(` Prompt: "${prompt}"`);
329
+ results.push({
330
+ ...item,
331
+ data: {
332
+ ...item.data,
333
+ prompt,
334
+ mockMode: true,
335
+ note: `Set GEMINI_CDP_PORT env var (default: 9222) for browser mode, or GEMINI_API_KEY for REST API`,
336
+ },
337
+ });
338
+ }
339
+ return results;
340
+ });
341
+ return handlers;
342
+ }
343
+ //# sourceMappingURL=builtin-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-handlers.js","sourceRoot":"","sources":["../../../../src/browser/workflow/builtin-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { WorkflowDef, NodeDef, Item, RunRecord, StepEvent } from './types.js';
2
+ export declare class DagError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare function buildDag(wf: WorkflowDef): string[];
6
+ export interface RunOptions {
7
+ items?: Item[];
8
+ params?: Record<string, string>;
9
+ signal?: AbortSignal;
10
+ onEvent?: (event: StepEvent) => void;
11
+ executeNode?: NodeExecutor;
12
+ }
13
+ export type NodeExecutor = (node: NodeDef, items: Item[], nodeOutputs: Record<string, Item[]>, params: Record<string, string>, signal?: AbortSignal) => Promise<Item[]>;
14
+ export declare function runWorkflow(wf: WorkflowDef, options?: RunOptions): Promise<RunRecord>;
15
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../../src/browser/workflow/engine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAInF,qBAAa,QAAS,SAAQ,KAAK;gBACrB,OAAO,EAAE,MAAM;CAC5B;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,EAAE,CA4BlD;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,IAAI,EAAE,EACb,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAErB,wBAAsB,WAAW,CAC/B,EAAE,EAAE,WAAW,EACf,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,SAAS,CAAC,CAuEpB"}
@@ -0,0 +1,127 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { resolveConfig } from './expression.js';
3
+ import { writeRunRecord } from './store.js';
4
+ export class DagError extends Error {
5
+ constructor(message) { super(message); this.name = 'DagError'; }
6
+ }
7
+ export function buildDag(wf) {
8
+ const nodeIds = new Set(wf.nodes.map(n => n.id));
9
+ for (const conn of wf.connections) {
10
+ if (!nodeIds.has(conn.from))
11
+ throw new DagError(`Connection references unknown node: ${conn.from}`);
12
+ if (!nodeIds.has(conn.to))
13
+ throw new DagError(`Connection references unknown node: ${conn.to}`);
14
+ }
15
+ const inDegree = new Map();
16
+ const adjacency = new Map();
17
+ for (const n of wf.nodes) {
18
+ inDegree.set(n.id, 0);
19
+ adjacency.set(n.id, []);
20
+ }
21
+ for (const conn of wf.connections) {
22
+ adjacency.get(conn.from).push(conn.to);
23
+ inDegree.set(conn.to, (inDegree.get(conn.to) ?? 0) + 1);
24
+ }
25
+ const queue = wf.nodes.filter(n => inDegree.get(n.id) === 0).map(n => n.id);
26
+ const order = [];
27
+ while (queue.length > 0) {
28
+ const nodeId = queue.shift();
29
+ order.push(nodeId);
30
+ for (const next of adjacency.get(nodeId) ?? []) {
31
+ const deg = (inDegree.get(next) ?? 1) - 1;
32
+ inDegree.set(next, deg);
33
+ if (deg === 0)
34
+ queue.push(next);
35
+ }
36
+ }
37
+ if (order.length !== wf.nodes.length)
38
+ throw new DagError('Workflow contains a cycle');
39
+ return order;
40
+ }
41
+ export async function runWorkflow(wf, options = {}) {
42
+ const runId = randomUUID();
43
+ const startedAt = Date.now();
44
+ const items = options.items ?? [{ data: {} }];
45
+ const params = options.params ?? {};
46
+ const emit = options.onEvent ?? (() => { });
47
+ const execute = options.executeNode ?? defaultNodeExecutor;
48
+ const record = {
49
+ id: runId,
50
+ workflowId: wf.id,
51
+ workflowName: wf.name,
52
+ status: 'running',
53
+ startedAt,
54
+ itemsProcessed: 0,
55
+ itemsTotal: items.length,
56
+ };
57
+ emit({ runId, workflowId: wf.id, workflowName: wf.name, nodeId: '', nodeName: '',
58
+ eventType: 'run_started', itemTotal: items.length, timestamp: Date.now() });
59
+ const order = buildDag(wf);
60
+ const nodeMap = new Map(wf.nodes.map(n => [n.id, n]));
61
+ const nodeOutputs = {};
62
+ let currentItems = items;
63
+ try {
64
+ for (const nodeId of order) {
65
+ if (options.signal?.aborted) {
66
+ record.status = 'stopped';
67
+ record.completedAt = Date.now();
68
+ emit({ runId, workflowId: wf.id, workflowName: wf.name, nodeId, nodeName: nodeId,
69
+ eventType: 'run_stopped', timestamp: Date.now() });
70
+ await writeRunRecord(record);
71
+ return record;
72
+ }
73
+ const node = nodeMap.get(nodeId);
74
+ const stepStart = Date.now();
75
+ emit({ runId, workflowId: wf.id, workflowName: wf.name, nodeId, nodeName: node.name ?? nodeId,
76
+ eventType: 'step_started', itemTotal: currentItems.length, timestamp: stepStart });
77
+ try {
78
+ const output = await execute(node, currentItems, nodeOutputs, params, options.signal);
79
+ nodeOutputs[nodeId] = output;
80
+ record.itemsProcessed = output.length;
81
+ emit({ runId, workflowId: wf.id, workflowName: wf.name, nodeId, nodeName: node.name ?? nodeId,
82
+ eventType: 'step_completed', durationMs: Date.now() - stepStart,
83
+ itemTotal: output.length, timestamp: Date.now() });
84
+ if (!node.type.startsWith('trigger.'))
85
+ currentItems = output;
86
+ }
87
+ catch (err) {
88
+ emit({ runId, workflowId: wf.id, workflowName: wf.name, nodeId, nodeName: node.name ?? nodeId,
89
+ eventType: 'step_failed', error: err.message,
90
+ durationMs: Date.now() - stepStart, timestamp: Date.now() });
91
+ if (node.onError === 'skip')
92
+ continue;
93
+ throw err;
94
+ }
95
+ }
96
+ record.status = 'completed';
97
+ record.completedAt = Date.now();
98
+ emit({ runId, workflowId: wf.id, workflowName: wf.name, nodeId: '', nodeName: '',
99
+ eventType: 'run_completed', timestamp: Date.now() });
100
+ }
101
+ catch (err) {
102
+ record.status = 'failed';
103
+ record.error = err.message;
104
+ record.completedAt = Date.now();
105
+ }
106
+ await writeRunRecord(record);
107
+ return record;
108
+ }
109
+ async function defaultNodeExecutor(node, items, nodeOutputs, params) {
110
+ if (node.type.startsWith('trigger.'))
111
+ return items;
112
+ if (node.type === 'core.filter') {
113
+ const field = node.config['field'];
114
+ const value = node.config['value'];
115
+ return items.filter(item => item.data[field] === value);
116
+ }
117
+ if (node.type === 'core.set') {
118
+ const assignments = node.config['fields'];
119
+ return items.map(item => {
120
+ const resolved = resolveConfig(assignments, item, nodeOutputs, params);
121
+ return { ...item, data: { ...item.data, ...resolved } };
122
+ });
123
+ }
124
+ // action.* nodes — resolved by caller who passes a real executeNode
125
+ return items;
126
+ }
127
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../../src/browser/workflow/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,OAAe,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC;CACzE;AAED,MAAM,UAAU,QAAQ,CAAC,EAAe;IACtC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,uCAAuC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,QAAQ,CAAC,uCAAuC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IAC7E,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAClC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC/C,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1C,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YACxB,IAAI,GAAG,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,2BAA2B,CAAC,CAAC;IACtF,OAAO,KAAK,CAAC;AACf,CAAC;AAkBD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAe,EACf,UAAsB,EAAE;IAExB,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,IAAI,mBAAmB,CAAC;IAE3D,MAAM,MAAM,GAAc;QACxB,EAAE,EAAE,KAAK;QACT,UAAU,EAAE,EAAE,CAAC,EAAE;QACjB,YAAY,EAAE,EAAE,CAAC,IAAI;QACrB,MAAM,EAAE,SAAS;QACjB,SAAS;QACT,cAAc,EAAE,CAAC;QACjB,UAAU,EAAE,KAAK,CAAC,MAAM;KACzB,CAAC;IAEF,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;QAC9E,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAE9E,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,WAAW,GAA2B,EAAE,CAAC;IAC/C,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,IAAI,CAAC;QACH,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC1B,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;oBAC9E,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACrD,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC7B,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM;gBAC3F,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAErF,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBACtF,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;gBAC7B,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;gBACtC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM;oBAC3F,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAC/D,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACrD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;oBAAE,YAAY,GAAG,MAAM,CAAC;YAC/D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM;oBAC3F,SAAS,EAAE,aAAa,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO;oBACvD,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBAC/D,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;oBAAE,SAAS;gBACtC,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;QAED,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC;QAC5B,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;YAC9E,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;QACzB,MAAM,CAAC,KAAK,GAAI,GAAa,CAAC,OAAO,CAAC;QACtC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,IAAa,EACb,KAAa,EACb,WAAmC,EACnC,MAA8B;IAE9B,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAW,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAA4B,CAAC;QACrE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACtB,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;YACvE,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,EAAE,EAAE,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oEAAoE;IACpE,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Item } from './types.js';
2
+ export declare function resolveExpression(template: string, item: Item, nodeOutputs: Record<string, Item[]>, params: Record<string, string>): string;
3
+ export declare function resolveConfig(config: Record<string, unknown>, item: Item, nodeOutputs: Record<string, Item[]>, params: Record<string, string>): Record<string, unknown>;
4
+ //# sourceMappingURL=expression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../../../src/browser/workflow/expression.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYvC,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAWR;AAsCD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB"}
@@ -0,0 +1,64 @@
1
+ const TEMPLATE_RE = /\{\{([^}]+)\}\}/g;
2
+ const cache = new Map();
3
+ function extractTemplates(template) {
4
+ if (cache.has(template))
5
+ return cache.get(template);
6
+ const matches = [...template.matchAll(new RegExp(TEMPLATE_RE.source, 'g'))];
7
+ cache.set(template, matches);
8
+ return matches;
9
+ }
10
+ export function resolveExpression(template, item, nodeOutputs, params) {
11
+ const matches = extractTemplates(template);
12
+ if (matches.length === 0)
13
+ return template;
14
+ let result = template;
15
+ for (const match of matches) {
16
+ const expr = match[1].trim();
17
+ const value = resolveToken(expr, item, nodeOutputs, params);
18
+ result = result.replace(match[0], String(value));
19
+ }
20
+ return result;
21
+ }
22
+ function resolveToken(expr, item, nodeOutputs, params) {
23
+ if (expr.startsWith('$json.')) {
24
+ const key = expr.slice(6);
25
+ if (!(key in item.data))
26
+ throw new Error(`Unresolved: $json.${key} not found in item data`);
27
+ return item.data[key];
28
+ }
29
+ if (expr.startsWith('$env.')) {
30
+ const key = expr.slice(5);
31
+ const val = process.env[key];
32
+ if (val === undefined)
33
+ throw new Error(`Unresolved: $env.${key} not set`);
34
+ return val;
35
+ }
36
+ if (expr.startsWith('params.')) {
37
+ const key = expr.slice(7);
38
+ if (!(key in params))
39
+ throw new Error(`Unresolved: params.${key} not provided`);
40
+ return params[key];
41
+ }
42
+ if (expr.startsWith('$node.')) {
43
+ const parts = expr.slice(6).split('.');
44
+ const nodeId = parts[0];
45
+ const field = parts.slice(1).join('.');
46
+ const items = nodeOutputs[nodeId];
47
+ if (!items || items.length === 0)
48
+ throw new Error(`Unresolved: $node.${nodeId} has no output`);
49
+ const val = items[0].data[field];
50
+ if (val === undefined)
51
+ throw new Error(`Unresolved: $node.${nodeId}.${field} not found`);
52
+ return val;
53
+ }
54
+ // Named ref (from find step) — caller resolves these at execution time
55
+ return `{{${expr}}}`;
56
+ }
57
+ export function resolveConfig(config, item, nodeOutputs, params) {
58
+ const result = {};
59
+ for (const [k, v] of Object.entries(config)) {
60
+ result[k] = typeof v === 'string' ? resolveExpression(v, item, nodeOutputs, params) : v;
61
+ }
62
+ return result;
63
+ }
64
+ //# sourceMappingURL=expression.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression.js","sourceRoot":"","sources":["../../../../src/browser/workflow/expression.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { WorkflowDef, RunRecord } from './types.js';
2
+ export declare class WorkflowStoreError extends Error {
3
+ readonly cause?: unknown | undefined;
4
+ constructor(message: string, cause?: unknown | undefined);
5
+ }
6
+ export declare function readWorkflow(filePath: string): Promise<WorkflowDef>;
7
+ export declare function writeRunRecord(record: RunRecord): Promise<void>;
8
+ export declare function listRuns(workflowId?: string): Promise<RunRecord[]>;
9
+ export declare function saveSession(session: {
10
+ id: string;
11
+ platform: string;
12
+ username: string;
13
+ cookies: string;
14
+ userAgent?: string;
15
+ }): Promise<void>;
16
+ export declare function listSessions(): Promise<Array<{
17
+ id: string;
18
+ platform: string;
19
+ username: string;
20
+ lastUsedAt: number;
21
+ }>>;
22
+ export declare function deleteSession(id: string): Promise<void>;
23
+ export declare function getSessionCookies(platform: string, username: string): Promise<string | null>;
24
+ //# sourceMappingURL=store.d.ts.map