@xdelivered/emberflow 0.2.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 (414) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +153 -0
  3. package/bin/commands.test.ts +185 -0
  4. package/bin/commands.ts +306 -0
  5. package/bin/emberflow.mjs +38 -0
  6. package/bin/init.test.ts +165 -0
  7. package/bin/init.ts +297 -0
  8. package/bin/runtime.mjs +105 -0
  9. package/bin/runtime.test.ts +167 -0
  10. package/bin/skillTargets.test.ts +108 -0
  11. package/bin/skillTargets.ts +36 -0
  12. package/bin/skillTemplates.test.ts +37 -0
  13. package/bin/tsconfig.json +23 -0
  14. package/dist/bin/commands.d.ts +24 -0
  15. package/dist/bin/commands.js +252 -0
  16. package/dist/bin/init.d.ts +17 -0
  17. package/dist/bin/init.js +241 -0
  18. package/dist/bin/runtime.d.mts +39 -0
  19. package/dist/bin/runtime.mjs +96 -0
  20. package/dist/bin/skillTargets.d.ts +13 -0
  21. package/dist/bin/skillTargets.js +22 -0
  22. package/dist/server/agents/claudeAdapter.d.ts +8 -0
  23. package/dist/server/agents/claudeAdapter.js +190 -0
  24. package/dist/server/agents/claudeParse.d.ts +2 -0
  25. package/dist/server/agents/claudeParse.js +162 -0
  26. package/dist/server/agents/codexAdapter.d.ts +13 -0
  27. package/dist/server/agents/codexAdapter.js +174 -0
  28. package/dist/server/agents/codexParse.d.ts +2 -0
  29. package/dist/server/agents/codexParse.js +74 -0
  30. package/dist/server/agents/detect.d.ts +23 -0
  31. package/dist/server/agents/detect.js +35 -0
  32. package/dist/server/agents/gitScope.d.ts +24 -0
  33. package/dist/server/agents/gitScope.js +95 -0
  34. package/dist/server/agents/modelRejectionHint.d.ts +8 -0
  35. package/dist/server/agents/modelRejectionHint.js +12 -0
  36. package/dist/server/agents/prompt.d.ts +79 -0
  37. package/dist/server/agents/prompt.js +364 -0
  38. package/dist/server/agents/runManager.d.ts +90 -0
  39. package/dist/server/agents/runManager.js +259 -0
  40. package/dist/server/agents/types.d.ts +15 -0
  41. package/dist/server/agents/types.js +1 -0
  42. package/dist/server/apiStore.d.ts +60 -0
  43. package/dist/server/apiStore.js +249 -0
  44. package/dist/server/auth/enforce.d.ts +1 -0
  45. package/dist/server/auth/enforce.js +6 -0
  46. package/dist/server/auth/types.d.ts +1 -0
  47. package/dist/server/auth/types.js +1 -0
  48. package/dist/server/auth/verifiers.d.ts +1 -0
  49. package/dist/server/auth/verifiers.js +4 -0
  50. package/dist/server/authAttach.d.ts +19 -0
  51. package/dist/server/authAttach.js +79 -0
  52. package/dist/server/cli.d.ts +7 -0
  53. package/dist/server/cli.js +804 -0
  54. package/dist/server/client.d.ts +130 -0
  55. package/dist/server/client.js +247 -0
  56. package/dist/server/environments.d.ts +103 -0
  57. package/dist/server/environments.js +486 -0
  58. package/dist/server/flowStore.d.ts +37 -0
  59. package/dist/server/flowStore.js +117 -0
  60. package/dist/server/httpOperations.d.ts +32 -0
  61. package/dist/server/httpOperations.js +62 -0
  62. package/dist/server/index.d.ts +1 -0
  63. package/dist/server/index.js +1022 -0
  64. package/dist/server/infrastructure.d.ts +51 -0
  65. package/dist/server/infrastructure.js +116 -0
  66. package/dist/server/login.d.ts +21 -0
  67. package/dist/server/login.js +44 -0
  68. package/dist/server/mcp.d.ts +1 -0
  69. package/dist/server/mcp.js +182 -0
  70. package/dist/server/migrateFlows.d.ts +8 -0
  71. package/dist/server/migrateFlows.js +25 -0
  72. package/dist/server/mockHandler.d.ts +15 -0
  73. package/dist/server/mockHandler.js +35 -0
  74. package/dist/server/nodesPayload.d.ts +14 -0
  75. package/dist/server/nodesPayload.js +14 -0
  76. package/dist/server/normalizeFlow.d.ts +21 -0
  77. package/dist/server/normalizeFlow.js +48 -0
  78. package/dist/server/openBrowser.d.ts +8 -0
  79. package/dist/server/openBrowser.js +16 -0
  80. package/dist/server/operationResult.d.ts +12 -0
  81. package/dist/server/operationResult.js +26 -0
  82. package/dist/server/pathGuard.d.ts +1 -0
  83. package/dist/server/pathGuard.js +16 -0
  84. package/dist/server/pathSafety.d.ts +20 -0
  85. package/dist/server/pathSafety.js +35 -0
  86. package/dist/server/projectConfig.d.ts +47 -0
  87. package/dist/server/projectConfig.js +61 -0
  88. package/dist/server/projectMode.d.ts +26 -0
  89. package/dist/server/projectMode.js +44 -0
  90. package/dist/server/redact.d.ts +6 -0
  91. package/dist/server/redact.js +37 -0
  92. package/dist/server/runRegistry.d.ts +84 -0
  93. package/dist/server/runRegistry.js +200 -0
  94. package/dist/server/runtime/RuntimeAdapter.d.ts +22 -0
  95. package/dist/server/runtime/RuntimeAdapter.js +1 -0
  96. package/dist/server/runtime/expressAdapter.d.ts +19 -0
  97. package/dist/server/runtime/expressAdapter.js +56 -0
  98. package/dist/server/scenarioTest.d.ts +14 -0
  99. package/dist/server/scenarioTest.js +66 -0
  100. package/dist/server/subflowRunner.d.ts +32 -0
  101. package/dist/server/subflowRunner.js +72 -0
  102. package/dist/server/testRunner.d.ts +70 -0
  103. package/dist/server/testRunner.js +151 -0
  104. package/dist/src/config.d.ts +3 -0
  105. package/dist/src/config.js +2 -0
  106. package/dist/src/engine/authVerify.d.ts +33 -0
  107. package/dist/src/engine/authVerify.js +63 -0
  108. package/dist/src/engine/diagnostics.d.ts +62 -0
  109. package/dist/src/engine/diagnostics.js +148 -0
  110. package/dist/src/engine/executor.d.ts +151 -0
  111. package/dist/src/engine/executor.js +684 -0
  112. package/dist/src/engine/httpError.d.ts +7 -0
  113. package/dist/src/engine/httpError.js +14 -0
  114. package/dist/src/engine/index.d.ts +11 -0
  115. package/dist/src/engine/index.js +11 -0
  116. package/dist/src/engine/output.d.ts +11 -0
  117. package/dist/src/engine/output.js +20 -0
  118. package/dist/src/engine/publish.d.ts +30 -0
  119. package/dist/src/engine/publish.js +95 -0
  120. package/dist/src/engine/registry.d.ts +34 -0
  121. package/dist/src/engine/registry.js +67 -0
  122. package/dist/src/engine/scenarios.d.ts +12 -0
  123. package/dist/src/engine/scenarios.js +19 -0
  124. package/dist/src/engine/schemaCheck.d.ts +4 -0
  125. package/dist/src/engine/schemaCheck.js +34 -0
  126. package/dist/src/engine/trace.d.ts +12 -0
  127. package/dist/src/engine/trace.js +12 -0
  128. package/dist/src/engine/types.d.ts +308 -0
  129. package/dist/src/engine/types.js +1 -0
  130. package/dist/src/engine/validation.d.ts +26 -0
  131. package/dist/src/engine/validation.js +318 -0
  132. package/dist/src/flows/anomaly-flows.d.ts +23 -0
  133. package/dist/src/flows/anomaly-flows.js +151 -0
  134. package/dist/src/flows/city-sweep-flow.d.ts +10 -0
  135. package/dist/src/flows/city-sweep-flow.js +127 -0
  136. package/dist/src/flows/login-flow.d.ts +13 -0
  137. package/dist/src/flows/login-flow.js +145 -0
  138. package/dist/src/flows/pradar-flows.d.ts +5 -0
  139. package/dist/src/flows/pradar-flows.js +375 -0
  140. package/dist/src/flows/weather-flow.d.ts +12 -0
  141. package/dist/src/flows/weather-flow.js +150 -0
  142. package/dist/src/lib/pathParams.d.ts +3 -0
  143. package/dist/src/lib/pathParams.js +6 -0
  144. package/dist/src/nodes/anomaly.d.ts +2 -0
  145. package/dist/src/nodes/anomaly.js +556 -0
  146. package/dist/src/nodes/flow-control.d.ts +7 -0
  147. package/dist/src/nodes/flow-control.js +270 -0
  148. package/dist/src/nodes/index.d.ts +3 -0
  149. package/dist/src/nodes/index.js +20 -0
  150. package/dist/src/nodes/login.d.ts +7 -0
  151. package/dist/src/nodes/login.js +158 -0
  152. package/dist/src/nodes/loops.d.ts +11 -0
  153. package/dist/src/nodes/loops.js +60 -0
  154. package/dist/src/nodes/pradar/index.d.ts +7 -0
  155. package/dist/src/nodes/pradar/index.js +9 -0
  156. package/dist/src/nodes/pradar/logic.d.ts +189 -0
  157. package/dist/src/nodes/pradar/logic.js +370 -0
  158. package/dist/src/nodes/pradar/nodes.d.ts +42 -0
  159. package/dist/src/nodes/pradar/nodes.js +801 -0
  160. package/dist/src/nodes/requireAuth.d.ts +20 -0
  161. package/dist/src/nodes/requireAuth.js +48 -0
  162. package/dist/src/nodes/response.d.ts +8 -0
  163. package/dist/src/nodes/response.js +33 -0
  164. package/dist/src/nodes/weather.d.ts +33 -0
  165. package/dist/src/nodes/weather.js +260 -0
  166. package/package.json +92 -0
  167. package/server/agentRoute.test.ts +157 -0
  168. package/server/agents/__fixtures__/fake-claude-writer.mjs +23 -0
  169. package/server/agents/__fixtures__/fake-claude.mjs +55 -0
  170. package/server/agents/__fixtures__/fake-codex-writer.mjs +27 -0
  171. package/server/agents/__fixtures__/fake-codex.mjs +52 -0
  172. package/server/agents/__fixtures__/fake-version-empty.mjs +3 -0
  173. package/server/agents/__fixtures__/fake-version-fail.mjs +4 -0
  174. package/server/agents/__fixtures__/fake-version-garbage.mjs +4 -0
  175. package/server/agents/__fixtures__/fake-version-good.mjs +4 -0
  176. package/server/agents/__fixtures__/fake-version-hang.mjs +3 -0
  177. package/server/agents/claudeAdapter.test.ts +127 -0
  178. package/server/agents/claudeAdapter.ts +212 -0
  179. package/server/agents/claudeParse.ts +193 -0
  180. package/server/agents/codexAdapter.test.ts +125 -0
  181. package/server/agents/codexAdapter.ts +198 -0
  182. package/server/agents/codexParse.test.ts +58 -0
  183. package/server/agents/codexParse.ts +126 -0
  184. package/server/agents/detect.test.ts +65 -0
  185. package/server/agents/detect.ts +43 -0
  186. package/server/agents/gitScope.test.ts +129 -0
  187. package/server/agents/gitScope.ts +110 -0
  188. package/server/agents/modelRejectionHint.test.ts +30 -0
  189. package/server/agents/modelRejectionHint.ts +14 -0
  190. package/server/agents/prompt.test.ts +613 -0
  191. package/server/agents/prompt.ts +527 -0
  192. package/server/agents/runManager.test.ts +251 -0
  193. package/server/agents/runManager.ts +286 -0
  194. package/server/agents/types.ts +17 -0
  195. package/server/apiMount.test.ts +591 -0
  196. package/server/apiStore.test.ts +324 -0
  197. package/server/apiStore.ts +241 -0
  198. package/server/auth/enforce.test.ts +61 -0
  199. package/server/auth/enforce.ts +6 -0
  200. package/server/auth/types.ts +5 -0
  201. package/server/auth/verifiers.test.ts +37 -0
  202. package/server/auth/verifiers.ts +9 -0
  203. package/server/authAttach.test.ts +175 -0
  204. package/server/authAttach.ts +99 -0
  205. package/server/cli.ts +847 -0
  206. package/server/cliAuth.test.ts +229 -0
  207. package/server/cliCreate.test.ts +131 -0
  208. package/server/cliDoctor.test.ts +326 -0
  209. package/server/cliTest.test.ts +735 -0
  210. package/server/client.ts +314 -0
  211. package/server/demoProject.test.ts +29 -0
  212. package/server/diagnosticsRoute.test.ts +169 -0
  213. package/server/environments.test.ts +620 -0
  214. package/server/environments.ts +603 -0
  215. package/server/environmentsRoute.test.ts +385 -0
  216. package/server/errorWorkflow.test.ts +205 -0
  217. package/server/flowStore.test.ts +84 -0
  218. package/server/flowStore.ts +125 -0
  219. package/server/httpOperations.test.ts +377 -0
  220. package/server/httpOperations.ts +96 -0
  221. package/server/index.ts +1111 -0
  222. package/server/infrastructure.test.ts +154 -0
  223. package/server/infrastructure.ts +161 -0
  224. package/server/infrastructureRoute.test.ts +105 -0
  225. package/server/login.test.ts +153 -0
  226. package/server/login.ts +67 -0
  227. package/server/mcp.ts +278 -0
  228. package/server/migrateFlows.test.ts +55 -0
  229. package/server/migrateFlows.ts +23 -0
  230. package/server/mockHandler.test.ts +138 -0
  231. package/server/mockHandler.ts +52 -0
  232. package/server/mockRun.test.ts +367 -0
  233. package/server/mockServe.test.ts +467 -0
  234. package/server/nodesPayload.test.ts +29 -0
  235. package/server/nodesPayload.ts +26 -0
  236. package/server/normalizeFlow.test.ts +80 -0
  237. package/server/normalizeFlow.ts +59 -0
  238. package/server/openBrowser.test.ts +20 -0
  239. package/server/openBrowser.ts +22 -0
  240. package/server/operationResult.test.ts +67 -0
  241. package/server/operationResult.ts +27 -0
  242. package/server/pathGuard.test.ts +19 -0
  243. package/server/pathGuard.ts +12 -0
  244. package/server/pathSafety.test.ts +38 -0
  245. package/server/pathSafety.ts +33 -0
  246. package/server/projectConfig.test.ts +67 -0
  247. package/server/projectConfig.ts +101 -0
  248. package/server/projectMode.test.ts +106 -0
  249. package/server/projectMode.ts +59 -0
  250. package/server/redact.test.ts +88 -0
  251. package/server/redact.ts +35 -0
  252. package/server/redactEgress.test.ts +281 -0
  253. package/server/runRegistry.ts +270 -0
  254. package/server/runsAuth.test.ts +119 -0
  255. package/server/runtime/RuntimeAdapter.ts +24 -0
  256. package/server/runtime/expressAdapter.test.ts +38 -0
  257. package/server/runtime/expressAdapter.ts +70 -0
  258. package/server/scenarioTest.test.ts +148 -0
  259. package/server/scenarioTest.ts +88 -0
  260. package/server/setupStatus.test.ts +127 -0
  261. package/server/subflowRunner.ts +104 -0
  262. package/server/testRunner.ts +216 -0
  263. package/server/tsconfig.json +20 -0
  264. package/server/workflowTestRoute.test.ts +297 -0
  265. package/src/App.tsx +233 -0
  266. package/src/components/AgentConsole.tsx +461 -0
  267. package/src/components/BranchRulesEditor.tsx +156 -0
  268. package/src/components/CreateModal.tsx +275 -0
  269. package/src/components/Dock.tsx +487 -0
  270. package/src/components/EnvironmentDialog.tsx +569 -0
  271. package/src/components/EnvironmentPicker.tsx +357 -0
  272. package/src/components/EnvironmentsDialog.tsx +144 -0
  273. package/src/components/ExecutionPager.tsx +67 -0
  274. package/src/components/InfraPanel.test.tsx +103 -0
  275. package/src/components/InfraPanel.tsx +171 -0
  276. package/src/components/Inspector.tsx +1182 -0
  277. package/src/components/Json.tsx +50 -0
  278. package/src/components/JsonModal.tsx +52 -0
  279. package/src/components/LogMessage.tsx +61 -0
  280. package/src/components/NodeRunModal.tsx +213 -0
  281. package/src/components/RunLogPanel.tsx +397 -0
  282. package/src/components/RunbookView.tsx +1085 -0
  283. package/src/components/Scenarios.tsx +476 -0
  284. package/src/components/SettingsDialog.tsx +229 -0
  285. package/src/components/Sidebar.tsx +436 -0
  286. package/src/components/StatusBar.tsx +302 -0
  287. package/src/components/Toolbar.tsx +663 -0
  288. package/src/components/WelcomeDialog.test.tsx +107 -0
  289. package/src/components/WelcomeDialog.tsx +412 -0
  290. package/src/components/agentMarkdown.test.tsx +91 -0
  291. package/src/components/agentMarkdown.tsx +158 -0
  292. package/src/components/ui/badge.tsx +31 -0
  293. package/src/components/ui/button.tsx +46 -0
  294. package/src/components/ui/combobox.tsx +114 -0
  295. package/src/components/ui/command.tsx +82 -0
  296. package/src/components/ui/dialog.tsx +73 -0
  297. package/src/components/ui/input.tsx +20 -0
  298. package/src/components/ui/popover.tsx +32 -0
  299. package/src/components/ui/resizable.tsx +44 -0
  300. package/src/components/ui/tabs.tsx +36 -0
  301. package/src/config.ts +4 -0
  302. package/src/engine/authVerify.ts +81 -0
  303. package/src/engine/diagnostics.test.ts +437 -0
  304. package/src/engine/diagnostics.ts +211 -0
  305. package/src/engine/executor.test.ts +1339 -0
  306. package/src/engine/executor.ts +840 -0
  307. package/src/engine/httpError.test.ts +12 -0
  308. package/src/engine/httpError.ts +16 -0
  309. package/src/engine/index.ts +11 -0
  310. package/src/engine/output.ts +21 -0
  311. package/src/engine/publish.test.ts +176 -0
  312. package/src/engine/publish.ts +127 -0
  313. package/src/engine/registry.test.ts +64 -0
  314. package/src/engine/registry.ts +80 -0
  315. package/src/engine/scenarios.test.ts +55 -0
  316. package/src/engine/scenarios.ts +29 -0
  317. package/src/engine/schemaCheck.test.ts +21 -0
  318. package/src/engine/schemaCheck.ts +35 -0
  319. package/src/engine/trace.test.ts +19 -0
  320. package/src/engine/trace.ts +23 -0
  321. package/src/engine/types.test.ts +22 -0
  322. package/src/engine/types.ts +316 -0
  323. package/src/engine/validation.test.ts +314 -0
  324. package/src/engine/validation.ts +354 -0
  325. package/src/flows/anomaly-flows.test.ts +81 -0
  326. package/src/flows/anomaly-flows.ts +202 -0
  327. package/src/flows/city-sweep-flow.ts +131 -0
  328. package/src/flows/flows.test.ts +30 -0
  329. package/src/flows/login-flow.ts +150 -0
  330. package/src/flows/pradar-flows.test.ts +204 -0
  331. package/src/flows/pradar-flows.ts +419 -0
  332. package/src/flows/weather-flow.ts +154 -0
  333. package/src/globals.css +147 -0
  334. package/src/lib/pathParams.test.ts +24 -0
  335. package/src/lib/pathParams.ts +6 -0
  336. package/src/lib/registerLens.test.ts +79 -0
  337. package/src/lib/registerLens.ts +59 -0
  338. package/src/lib/runbookModel.test.ts +61 -0
  339. package/src/lib/runbookModel.ts +290 -0
  340. package/src/lib/runbookProjection.test.ts +417 -0
  341. package/src/lib/runbookProjection.ts +254 -0
  342. package/src/lib/useTailAnchor.ts +53 -0
  343. package/src/lib/utils.ts +7 -0
  344. package/src/main.tsx +13 -0
  345. package/src/nodes/anomaly.test.ts +98 -0
  346. package/src/nodes/anomaly.ts +637 -0
  347. package/src/nodes/effects-scan.test.ts +44 -0
  348. package/src/nodes/flow-control.test.ts +280 -0
  349. package/src/nodes/flow-control.ts +305 -0
  350. package/src/nodes/index.ts +22 -0
  351. package/src/nodes/login.test.ts +81 -0
  352. package/src/nodes/login.ts +186 -0
  353. package/src/nodes/loops.ts +69 -0
  354. package/src/nodes/pradar/index.ts +11 -0
  355. package/src/nodes/pradar/logic.test.ts +288 -0
  356. package/src/nodes/pradar/logic.ts +582 -0
  357. package/src/nodes/pradar/nodes.test.ts +146 -0
  358. package/src/nodes/pradar/nodes.ts +955 -0
  359. package/src/nodes/requireAuth.test.ts +75 -0
  360. package/src/nodes/requireAuth.ts +55 -0
  361. package/src/nodes/response.test.ts +33 -0
  362. package/src/nodes/response.ts +39 -0
  363. package/src/nodes/traceDetail.test.ts +39 -0
  364. package/src/nodes/weather.test.ts +65 -0
  365. package/src/nodes/weather.ts +306 -0
  366. package/src/store/agentClient.test.ts +103 -0
  367. package/src/store/agentClient.ts +131 -0
  368. package/src/store/apiTree.test.ts +17 -0
  369. package/src/store/apiTree.ts +73 -0
  370. package/src/store/builderStore.test.ts +1234 -0
  371. package/src/store/builderStore.ts +1879 -0
  372. package/src/store/infraClient.ts +63 -0
  373. package/src/store/nodeMeta.test.ts +24 -0
  374. package/src/store/nodeMeta.ts +21 -0
  375. package/src/store/persistence.test.ts +15 -0
  376. package/src/store/persistence.ts +54 -0
  377. package/src/store/serverRunner.ts +381 -0
  378. package/src/store/setupClient.ts +57 -0
  379. package/studio-dist/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  380. package/studio-dist/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  381. package/studio-dist/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff +0 -0
  382. package/studio-dist/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2 +0 -0
  383. package/studio-dist/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  384. package/studio-dist/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  385. package/studio-dist/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff +0 -0
  386. package/studio-dist/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2 +0 -0
  387. package/studio-dist/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  388. package/studio-dist/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  389. package/studio-dist/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  390. package/studio-dist/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  391. package/studio-dist/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  392. package/studio-dist/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  393. package/studio-dist/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2 +0 -0
  394. package/studio-dist/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff +0 -0
  395. package/studio-dist/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  396. package/studio-dist/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  397. package/studio-dist/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff +0 -0
  398. package/studio-dist/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2 +0 -0
  399. package/studio-dist/assets/index-DNJwW-hM.css +1 -0
  400. package/studio-dist/assets/index-O26dKRjW.js +65 -0
  401. package/studio-dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  402. package/studio-dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  403. package/studio-dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  404. package/studio-dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  405. package/studio-dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  406. package/studio-dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  407. package/studio-dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  408. package/studio-dist/favicon.svg +1 -0
  409. package/studio-dist/icons.svg +24 -0
  410. package/studio-dist/index.html +14 -0
  411. package/templates/skills/emberflow-basics/SKILL.md +316 -0
  412. package/templates/skills/emberflow-model-process/SKILL.md +209 -0
  413. package/templates/skills/emberflow-new-workflow/SKILL.md +211 -0
  414. package/templates/skills/emberflow-review-workflow/SKILL.md +148 -0
@@ -0,0 +1,151 @@
1
+ const FOLDER = 'Anomaly API';
2
+ const CREATED = '2026-07-02T00:00:00Z';
3
+ function makeFlow(id, name, specs, edges, scenarios) {
4
+ const nodes = specs.map((spec, i) => ({
5
+ id: spec.id,
6
+ type: spec.type,
7
+ label: spec.label,
8
+ position: spec.position ?? { x: 60 + 250 * i, y: 200 },
9
+ config: spec.config ?? {},
10
+ inputMap: spec.inputMap,
11
+ }));
12
+ return {
13
+ id,
14
+ name,
15
+ version: 1,
16
+ folder: FOLDER,
17
+ nodes,
18
+ edges,
19
+ ...(scenarios ? { scenarios } : {}),
20
+ createdAt: CREATED,
21
+ updatedAt: CREATED,
22
+ };
23
+ }
24
+ const from = (sourceNodeId, sourceField) => ({ sourceNodeId, sourceField });
25
+ /**
26
+ * Live call: whole-series detection, then branch on severity.
27
+ * build → detect → summarize → cond(anomalyCount > 0?)
28
+ * ├─ anomalous → composeIncident → incidentResult
29
+ * └─ clean → cleanResult
30
+ *
31
+ * Deviation from spec: the spec's Conditional has two rules (`gt 3 → P1`,
32
+ * `gt 0 → P2`) feeding three downstream paths, but this flow only ever had
33
+ * two downstream branches (anomalous/clean). Kept the original two-branch
34
+ * shape as a single rule `gt 0 → anomalous`, fallback `clean`, rather than
35
+ * inventing a third P1/P2 branch nothing here consumes.
36
+ */
37
+ export function createDetectEntireFlow() {
38
+ return makeFlow('anomaly-detect-entire', 'Detect · Entire Series', [
39
+ { id: 'input', type: 'Input', label: 'Series Request', config: { fields: [{ name: 'points', type: 'number', required: true }, { name: 'spikeIndex', type: 'number' }], defaults: { points: 24, spikeIndex: 20 } }, position: { x: -180, y: 240 } },
40
+ { id: 'build', type: 'BuildSeries', label: 'Build Series', config: { points: 24, baseValue: 100, spikeIndex: 20, spikeFactor: 3 }, inputMap: { points: from('input', 'points'), spikeIndex: from('input', 'spikeIndex') }, position: { x: 60, y: 240 } },
41
+ { id: 'detect', type: 'DetectEntireSeries', label: 'Detect Entire Series', config: { apiKey: 'dev-emberflow', sensitivity: 80 }, inputMap: { series: from('build', 'series') }, position: { x: 300, y: 240 } },
42
+ { id: 'summarize', type: 'SummarizeAnomalies', label: 'Summarize Anomalies', inputMap: { isAnomaly: from('detect', 'isAnomaly'), series: from('build', 'series') }, position: { x: 540, y: 240 } },
43
+ { id: 'cond', type: 'Conditional', label: 'Severity?', config: { branches: [{ name: 'anomalous', op: 'gt', value: 0 }], fallback: 'clean' }, inputMap: { value: from('summarize', 'anomalyCount') }, position: { x: 1020, y: 240 } },
44
+ { id: 'composeIncident', type: 'ComposeIncident', label: 'Compose Incident', inputMap: { headline: from('summarize', 'headline'), anomalyCount: from('summarize', 'anomalyCount') }, position: { x: 1260, y: 120 } },
45
+ { id: 'incidentResult', type: 'Result', label: 'Incident', inputMap: { data: from('composeIncident', '$') }, position: { x: 1500, y: 120 } },
46
+ { id: 'cleanResult', type: 'Result', label: 'All Clear', inputMap: { data: from('summarize', '$') }, position: { x: 1260, y: 360 } },
47
+ ], [
48
+ { id: 'e0', source: 'input', target: 'build', targetHandle: 'points' },
49
+ { id: 'e1', source: 'build', target: 'detect', targetHandle: 'series' },
50
+ { id: 'e2', source: 'detect', target: 'summarize', targetHandle: 'isAnomaly' },
51
+ { id: 'e3', source: 'build', target: 'summarize', targetHandle: 'series' },
52
+ { id: 'e4', source: 'summarize', target: 'cond', targetHandle: 'value' },
53
+ { id: 'e6', source: 'cond', target: 'composeIncident', sourceHandle: 'anomalous' },
54
+ { id: 'e7', source: 'cond', target: 'cleanResult', sourceHandle: 'clean' },
55
+ { id: 'e8', source: 'composeIncident', target: 'incidentResult', targetHandle: 'data' },
56
+ ], [
57
+ {
58
+ id: 'scn-spike',
59
+ name: 'spike at 20',
60
+ description: '×3 spike — detector flags it, incident branch fires',
61
+ input: { points: 24, spikeIndex: 20 },
62
+ },
63
+ {
64
+ id: 'scn-flat',
65
+ name: 'flat series',
66
+ description: 'no spike (spikeIndex −1) — clean branch, all clear',
67
+ input: { points: 24, spikeIndex: -1 },
68
+ },
69
+ ]);
70
+ }
71
+ /** Live call: streaming-style last-point verdict. */
72
+ export function createDetectLastFlow() {
73
+ return makeFlow('anomaly-detect-last', 'Detect · Last Point', [
74
+ { id: 'build', type: 'BuildSeries', label: 'Build Series (spike at end)', config: { points: 14, baseValue: 50, spikeIndex: 13, spikeFactor: 4 } },
75
+ { id: 'detect', type: 'DetectLastPoint', label: 'Detect Last Point', config: { apiKey: 'dev-emberflow', sensitivity: 80 }, inputMap: { series: from('build', 'series') } },
76
+ { id: 'result', type: 'Result', label: 'Verdict', inputMap: { data: from('detect', '$') } },
77
+ ], [
78
+ { id: 'e1', source: 'build', target: 'detect', targetHandle: 'series' },
79
+ { id: 'e2', source: 'detect', target: 'result', targetHandle: 'data' },
80
+ ]);
81
+ }
82
+ /** Live call: detection + Adtributor root-cause analysis. */
83
+ export function createRootCauseFlow() {
84
+ return makeFlow('anomaly-root-cause', 'Detect · Root Cause', [
85
+ { id: 'build', type: 'BuildDimensionalSeries', label: 'Build Dimensional Series', config: { points: 14, baseValue: 100, spikeIndex: 12, culpritSlice: 'paid' } },
86
+ { id: 'detect', type: 'DetectAttributed', label: 'Detect + Attribute', config: { apiKey: 'dev-emberflow', sensitivity: 80, topK: 3 }, inputMap: { series: from('build', 'series') } },
87
+ { id: 'extract', type: 'ExtractRootCause', label: 'Extract Root Cause', inputMap: { rca: from('detect', 'rca') } },
88
+ { id: 'result', type: 'Result', label: 'Root Cause', inputMap: { data: from('extract', '$') } },
89
+ ], [
90
+ { id: 'e1', source: 'build', target: 'detect', targetHandle: 'series' },
91
+ { id: 'e2', source: 'detect', target: 'extract', targetHandle: 'rca' },
92
+ { id: 'e3', source: 'extract', target: 'result', targetHandle: 'data' },
93
+ ]);
94
+ }
95
+ /** Replica of today's quota/email business logic (Clerk-gated server-side). */
96
+ export function createQuotaFlow() {
97
+ return makeFlow('anomaly-quota-emails', 'Quota · Usage & Emails', [
98
+ { id: 'input', type: 'Input', label: 'Usage Snapshot', config: { fields: [{ name: 'calls', type: 'number', required: true }], defaults: { calls: 850 } } },
99
+ { id: 'plan', type: 'PlanCatalog', label: 'Plan Catalog', config: { planCode: 'anomaly_free' } },
100
+ { id: 'usage', type: 'UsageState', label: 'Usage State', config: { calls: 850 }, inputMap: { calls: from('input', 'calls'), quota: from('plan', 'quota') } },
101
+ { id: 'classify', type: 'ClassifyQuotaEmail', label: 'Classify Quota Email', config: { alreadyWarned: false, alreadyNotifiedExceeded: false }, inputMap: { warn80: from('usage', 'warn80'), overQuota: from('usage', 'overQuota') } },
102
+ { id: 'result', type: 'Result', label: 'Sweep Decision', inputMap: { data: from('classify', '$') } },
103
+ ], [
104
+ { id: 'e0', source: 'input', target: 'usage', targetHandle: 'calls' },
105
+ { id: 'e1', source: 'plan', target: 'usage', targetHandle: 'quota' },
106
+ { id: 'e2', source: 'usage', target: 'classify', targetHandle: 'warn80' },
107
+ { id: 'e3', source: 'classify', target: 'result', targetHandle: 'data' },
108
+ ],
109
+ // Free plan quota is 1,000 calls: the three scenarios straddle the
110
+ // warn-at-80% and exceeded thresholds in classifyUsageRow().
111
+ [
112
+ {
113
+ id: 'scn-quiet',
114
+ name: 'quiet month',
115
+ description: '400/1000 calls — no email',
116
+ input: { calls: 400 },
117
+ },
118
+ {
119
+ id: 'scn-warn',
120
+ name: 'approaching limit',
121
+ description: '850/1000 calls — 80% warning email',
122
+ input: { calls: 850 },
123
+ },
124
+ {
125
+ id: 'scn-over',
126
+ name: 'over quota',
127
+ description: '1200/1000 calls — exceeded email',
128
+ input: { calls: 1200 },
129
+ },
130
+ ]);
131
+ }
132
+ /** Replica of today's key issuance + 5-key limit guard. */
133
+ export function createKeyLifecycleFlow() {
134
+ return makeFlow('anomaly-key-lifecycle', 'Keys · Issue & Limit', [
135
+ { id: 'generate', type: 'GenerateApiKey', label: 'Generate API Key', config: { label: 'production' } },
136
+ { id: 'enforce', type: 'EnforceKeyLimit', label: 'Enforce Key Limit', config: { activeKeyCount: 3 }, inputMap: { keyPrefix: from('generate', 'keyPrefix') } },
137
+ { id: 'result', type: 'Result', label: 'Issued Key', inputMap: { data: from('enforce', '$') } },
138
+ ], [
139
+ { id: 'e1', source: 'generate', target: 'enforce', targetHandle: 'keyPrefix' },
140
+ { id: 'e2', source: 'enforce', target: 'result', targetHandle: 'data' },
141
+ ]);
142
+ }
143
+ export function createAnomalyFlows() {
144
+ return [
145
+ createDetectEntireFlow(),
146
+ createDetectLastFlow(),
147
+ createRootCauseFlow(),
148
+ createQuotaFlow(),
149
+ createKeyLifecycleFlow(),
150
+ ];
151
+ }
@@ -0,0 +1,10 @@
1
+ import type { WorkflowDefinition } from '../engine/index.js';
2
+ /**
3
+ * ForEach/Collect loop over a list of cities:
4
+ * input(cities) → fe(ForEach) → geocode → forecast → classify → col(Collect) → result
5
+ *
6
+ * Each iteration resolves one city, fetches its forecast, and grades it
7
+ * severe/mild; Collect gathers every iteration's classification into a
8
+ * single array that the Result node surfaces as the sweep report.
9
+ */
10
+ export declare function createCitySweepFlow(): WorkflowDefinition;
@@ -0,0 +1,127 @@
1
+ /**
2
+ * ForEach/Collect loop over a list of cities:
3
+ * input(cities) → fe(ForEach) → geocode → forecast → classify → col(Collect) → result
4
+ *
5
+ * Each iteration resolves one city, fetches its forecast, and grades it
6
+ * severe/mild; Collect gathers every iteration's classification into a
7
+ * single array that the Result node surfaces as the sweep report.
8
+ */
9
+ export function createCitySweepFlow() {
10
+ const nodes = [
11
+ {
12
+ id: 'input',
13
+ type: 'Input',
14
+ label: 'Sweep Request',
15
+ position: { x: -180, y: 240 },
16
+ config: {
17
+ fields: [{ name: 'cities', type: 'array', required: true }],
18
+ defaults: { cities: ['Belfast', 'Valencia', 'Reykjavik'] },
19
+ },
20
+ },
21
+ {
22
+ id: 'fe',
23
+ type: 'ForEach',
24
+ label: 'Each City',
25
+ position: { x: 60, y: 240 },
26
+ config: {},
27
+ inputMap: {
28
+ items: { sourceNodeId: 'input', sourceField: 'cities' },
29
+ },
30
+ },
31
+ {
32
+ id: 'geocode',
33
+ type: 'GeocodeCity',
34
+ label: 'Geocode City',
35
+ position: { x: 300, y: 240 },
36
+ config: {},
37
+ inputMap: {
38
+ city: { sourceNodeId: 'fe', sourceField: 'item' },
39
+ },
40
+ },
41
+ {
42
+ id: 'forecast',
43
+ type: 'FetchForecast',
44
+ label: 'Fetch Forecast',
45
+ position: { x: 540, y: 240 },
46
+ config: {},
47
+ inputMap: {
48
+ latitude: { sourceNodeId: 'geocode', sourceField: 'latitude' },
49
+ longitude: { sourceNodeId: 'geocode', sourceField: 'longitude' },
50
+ },
51
+ },
52
+ {
53
+ id: 'classify',
54
+ type: 'ClassifyWeather',
55
+ label: 'Classify Weather',
56
+ position: { x: 780, y: 240 },
57
+ config: {},
58
+ inputMap: {
59
+ windKmh: { sourceNodeId: 'forecast', sourceField: 'windKmh' },
60
+ rainChancePct: { sourceNodeId: 'forecast', sourceField: 'rainChancePct' },
61
+ place: { sourceNodeId: 'geocode', sourceField: 'place' },
62
+ },
63
+ },
64
+ {
65
+ id: 'col',
66
+ type: 'Collect',
67
+ label: 'Verdicts',
68
+ position: { x: 1020, y: 240 },
69
+ config: {},
70
+ inputMap: {
71
+ value: { sourceNodeId: 'classify', sourceField: '$' },
72
+ },
73
+ },
74
+ {
75
+ id: 'result',
76
+ type: 'Result',
77
+ label: 'Sweep Report',
78
+ position: { x: 1260, y: 240 },
79
+ config: {},
80
+ inputMap: {
81
+ data: { sourceNodeId: 'col', sourceField: '$' },
82
+ },
83
+ },
84
+ ];
85
+ const edges = [
86
+ { id: 'e0', source: 'input', target: 'fe', targetHandle: 'items' },
87
+ { id: 'e1', source: 'fe', target: 'geocode', targetHandle: 'city' },
88
+ { id: 'e2', source: 'geocode', target: 'forecast', targetHandle: 'latitude' },
89
+ { id: 'e3', source: 'geocode', target: 'forecast', targetHandle: 'longitude' },
90
+ { id: 'e4', source: 'forecast', target: 'classify', targetHandle: 'windKmh' },
91
+ { id: 'e5', source: 'forecast', target: 'classify', targetHandle: 'rainChancePct' },
92
+ { id: 'e6', source: 'classify', target: 'col', targetHandle: 'value' },
93
+ { id: 'e7', source: 'col', target: 'result', targetHandle: 'data' },
94
+ ];
95
+ return {
96
+ id: 'city-sweep',
97
+ name: 'City Sweep',
98
+ version: 1,
99
+ nodes,
100
+ edges,
101
+ // Live-weather flow: results depend on real conditions, so scenarios
102
+ // mainly exercise loop shape (batch count, empty list) rather than a
103
+ // specific branch outcome.
104
+ scenarios: [
105
+ {
106
+ id: 'scn-two',
107
+ name: 'two cities',
108
+ description: 'Two iterations through the loop body',
109
+ input: { cities: ['Belfast', 'Valencia'] },
110
+ },
111
+ {
112
+ id: 'scn-five',
113
+ name: 'five cities',
114
+ description: 'Five iterations — GeocodeCity takes one city at a time, so batchSize stays 1',
115
+ input: { cities: ['Belfast', 'Valencia', 'Reykjavik', 'Tokyo', 'Nairobi'] },
116
+ },
117
+ {
118
+ id: 'scn-empty',
119
+ name: 'empty list',
120
+ description: 'No cities — ForEach/Collect run zero iterations',
121
+ input: { cities: [] },
122
+ },
123
+ ],
124
+ createdAt: '2026-07-02T00:00:00Z',
125
+ updatedAt: '2026-07-02T00:00:00Z',
126
+ };
127
+ }
@@ -0,0 +1,13 @@
1
+ import type { WorkflowDefinition } from '../engine/index.js';
2
+ /**
3
+ * Branching login flow:
4
+ * input → validate → fetch → route(isNew?)
5
+ * ├─ new → welcome ─┐
6
+ * └─ existing → checkPlan ┴→ issueToken → result
7
+ *
8
+ * Route reads `isNew` off the fetched user: `true` takes the welcome branch,
9
+ * anything else falls back to `existing` and runs the plan check. Both branches
10
+ * converge on issueToken; on the new-user path checkPlan is skipped, so its
11
+ * `plan` input resolves undefined and IssueToken falls back to 'free'.
12
+ */
13
+ export declare function createLoginFlow(): WorkflowDefinition;
@@ -0,0 +1,145 @@
1
+ const from = (sourceNodeId, sourceField) => ({ sourceNodeId, sourceField });
2
+ /**
3
+ * Branching login flow:
4
+ * input → validate → fetch → route(isNew?)
5
+ * ├─ new → welcome ─┐
6
+ * └─ existing → checkPlan ┴→ issueToken → result
7
+ *
8
+ * Route reads `isNew` off the fetched user: `true` takes the welcome branch,
9
+ * anything else falls back to `existing` and runs the plan check. Both branches
10
+ * converge on issueToken; on the new-user path checkPlan is skipped, so its
11
+ * `plan` input resolves undefined and IssueToken falls back to 'free'.
12
+ */
13
+ export function createLoginFlow() {
14
+ const nodes = [
15
+ {
16
+ id: 'input',
17
+ type: 'Input',
18
+ label: 'Login Request',
19
+ position: { x: 60, y: 220 },
20
+ config: {
21
+ fields: [
22
+ { name: 'username', type: 'string', required: true },
23
+ { name: 'password', type: 'string', required: true },
24
+ ],
25
+ defaults: { username: 'ada', password: 'lovelace' },
26
+ },
27
+ },
28
+ {
29
+ id: 'validate',
30
+ type: 'ValidateCredentials',
31
+ label: 'Validate Credentials',
32
+ position: { x: 300, y: 220 },
33
+ config: {},
34
+ inputMap: {
35
+ username: from('input', 'username'),
36
+ password: from('input', 'password'),
37
+ },
38
+ },
39
+ {
40
+ id: 'fetch',
41
+ type: 'FetchUser',
42
+ label: 'Fetch User',
43
+ position: { x: 540, y: 220 },
44
+ config: {},
45
+ inputMap: {
46
+ userId: { sourceNodeId: 'validate', sourceField: 'userId' },
47
+ },
48
+ },
49
+ {
50
+ id: 'route',
51
+ type: 'Route',
52
+ label: 'New user?',
53
+ position: { x: 780, y: 220 },
54
+ config: { field: 'isNew', branches: ['true'], fallback: 'existing' },
55
+ inputMap: {
56
+ value: { sourceNodeId: 'fetch', sourceField: '$' },
57
+ },
58
+ },
59
+ {
60
+ id: 'welcome',
61
+ type: 'WelcomeUser',
62
+ label: 'Welcome User',
63
+ position: { x: 1020, y: 100 },
64
+ config: {},
65
+ inputMap: {
66
+ user: { sourceNodeId: 'fetch', sourceField: '$' },
67
+ },
68
+ },
69
+ {
70
+ id: 'checkPlan',
71
+ type: 'CheckPlan',
72
+ label: 'Check Plan',
73
+ position: { x: 1020, y: 340 },
74
+ config: {},
75
+ inputMap: {
76
+ user: { sourceNodeId: 'fetch', sourceField: '$' },
77
+ },
78
+ },
79
+ {
80
+ id: 'issueToken',
81
+ type: 'IssueToken',
82
+ label: 'Issue Token',
83
+ position: { x: 1260, y: 220 },
84
+ config: {},
85
+ inputMap: {
86
+ userId: { sourceNodeId: 'fetch', sourceField: 'id' },
87
+ plan: { sourceNodeId: 'checkPlan', sourceField: 'plan' },
88
+ },
89
+ },
90
+ {
91
+ id: 'result',
92
+ type: 'Result',
93
+ label: 'Result',
94
+ position: { x: 1500, y: 220 },
95
+ config: {},
96
+ inputMap: {
97
+ data: { sourceNodeId: 'issueToken', sourceField: '$' },
98
+ },
99
+ },
100
+ ];
101
+ // Branch handles live on the Route's outgoing edges (sourceHandle = branch
102
+ // name). welcome→issueToken carries no targetHandle: it is a structural join,
103
+ // not a data mapping (issueToken's inputs come from fetch and checkPlan).
104
+ const edges = [
105
+ { id: 'e0', source: 'input', target: 'validate', targetHandle: 'username' },
106
+ { id: 'e1', source: 'validate', target: 'fetch', targetHandle: 'userId' },
107
+ { id: 'e2', source: 'fetch', target: 'route', targetHandle: 'value' },
108
+ { id: 'e3', source: 'route', target: 'welcome', sourceHandle: 'true' },
109
+ { id: 'e4', source: 'route', target: 'checkPlan', sourceHandle: 'existing' },
110
+ { id: 'e5', source: 'welcome', target: 'issueToken' },
111
+ { id: 'e6', source: 'checkPlan', target: 'issueToken', targetHandle: 'plan' },
112
+ { id: 'e7', source: 'issueToken', target: 'result', targetHandle: 'data' },
113
+ ];
114
+ return {
115
+ id: 'login-example',
116
+ name: 'Login Example',
117
+ version: 1,
118
+ nodes,
119
+ edges,
120
+ // FetchUser derives isNew from a `new` name prefix and plan from a `pro`
121
+ // substring, so the username alone steers every branch.
122
+ scenarios: [
123
+ {
124
+ id: 'scn-new-user',
125
+ name: 'new user',
126
+ description: 'newton is new — welcome branch, checkPlan skipped',
127
+ input: { username: 'newton', password: 'apple123' },
128
+ },
129
+ {
130
+ id: 'scn-existing-pro',
131
+ name: 'existing pro',
132
+ description: 'ada-pro exists on the pro plan — plan-check branch',
133
+ input: { username: 'ada-pro', password: 'lovelace' },
134
+ },
135
+ {
136
+ id: 'scn-bad-password',
137
+ name: 'bad password',
138
+ description: 'password under 4 chars — validation fails the run',
139
+ input: { username: 'ada', password: 'abc' },
140
+ },
141
+ ],
142
+ createdAt: '2026-07-02T00:00:00Z',
143
+ updatedAt: '2026-07-02T00:00:00Z',
144
+ };
145
+ }
@@ -0,0 +1,5 @@
1
+ import type { WorkflowDefinition } from '../engine/index.js';
2
+ export declare function createEvaluateCycleFlow(): WorkflowDefinition;
3
+ export declare function createThresholdIntelligenceFlow(): WorkflowDefinition;
4
+ export declare function createNightChargeFlow(): WorkflowDefinition;
5
+ export declare function createPradarFlows(): WorkflowDefinition[];