@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,302 @@
1
+ import { useEffect, useState } from 'react';
2
+ import { ListChecksIcon, Loader2Icon, ShieldIcon } from 'lucide-react';
3
+ import { cn } from '@/lib/utils';
4
+ import { useBuilderStore } from '../store/builderStore';
5
+ import { setupProgress } from '../store/setupClient';
6
+ import type { EnvironmentSummary } from '../store/serverRunner';
7
+ import type { WorkflowRun } from '../engine';
8
+
9
+ const statusDot: Record<string, string> = {
10
+ succeeded: 'bg-success',
11
+ failed: 'bg-destructive',
12
+ cancelled: 'bg-muted-foreground',
13
+ running: 'bg-highlight animate-pulse',
14
+ };
15
+
16
+ /** Live-ticking elapsed while running, frozen duration once finished. */
17
+ function useRunElapsed(run: WorkflowRun | null): string {
18
+ const finished = run !== null && run.status !== 'running';
19
+ const [nowTick, setNowTick] = useState(() => Date.now());
20
+ useEffect(() => {
21
+ if (finished) return;
22
+ const t = setInterval(() => setNowTick(Date.now()), 250);
23
+ return () => clearInterval(t);
24
+ }, [finished]);
25
+ const durationMs =
26
+ run?.completedAt && run.startedAt
27
+ ? new Date(run.completedAt).getTime() - new Date(run.startedAt).getTime()
28
+ : null;
29
+ const elapsedMs = finished
30
+ ? durationMs
31
+ : run?.startedAt
32
+ ? Math.max(0, nowTick - new Date(run.startedAt).getTime())
33
+ : null;
34
+ return elapsedMs === null
35
+ ? ''
36
+ : elapsedMs < 1000
37
+ ? `${elapsedMs}ms`
38
+ : `${(elapsedMs / 1000).toFixed(1)}s`;
39
+ }
40
+
41
+ const Divider = () => <span className="mx-0.5 h-3 w-px shrink-0 bg-border/70" />;
42
+
43
+ const segment = 'flex h-full min-w-0 items-center gap-1.5 px-2';
44
+ const interactive = 'cursor-pointer transition-colors hover:bg-secondary/50';
45
+
46
+ /**
47
+ * Login-auth affordance for a runner environment. Hidden entirely unless the
48
+ * environment declares `auth.configured` — no visual change for envs without
49
+ * it. Never renders a secret value, only the authenticated boolean.
50
+ */
51
+ function EnvAuthBadge({ env }: { env: EnvironmentSummary }) {
52
+ const loginEnvironment = useBuilderStore((s) => s.loginEnvironment);
53
+ const [pending, setPending] = useState(false);
54
+ const [error, setError] = useState<string | null>(null);
55
+
56
+ const authed = env.auth?.authenticated ?? false;
57
+
58
+ const onLogin = async () => {
59
+ setError(null);
60
+ setPending(true);
61
+ try {
62
+ await loginEnvironment(env.name);
63
+ } catch (err) {
64
+ setError(err instanceof Error ? err.message : 'Login failed');
65
+ } finally {
66
+ setPending(false);
67
+ }
68
+ };
69
+
70
+ if (authed) {
71
+ // Authenticated: calm filled dot. The whole segment is a quiet re-login
72
+ // control — hovering swaps the label so the affordance is discoverable
73
+ // without adding noise to the resting bar.
74
+ return (
75
+ <button
76
+ type="button"
77
+ onClick={() => void onLogin()}
78
+ disabled={pending}
79
+ title={error ?? 'Authenticated — click to log in again'}
80
+ className={cn(segment, 'group', interactive, 'disabled:cursor-wait disabled:opacity-60')}
81
+ >
82
+ <span className="size-1.5 shrink-0 rounded-full bg-success" />
83
+ {pending ? (
84
+ <span className="flex items-center gap-1 truncate">
85
+ <Loader2Icon className="size-3 shrink-0 animate-spin" />
86
+ Logging in…
87
+ </span>
88
+ ) : (
89
+ <>
90
+ <span className="truncate group-hover:hidden">authenticated</span>
91
+ <span className="hidden truncate text-foreground/80 group-hover:inline">Re-log in</span>
92
+ </>
93
+ )}
94
+ {error && <span className="truncate text-destructive">{error}</span>}
95
+ </button>
96
+ );
97
+ }
98
+
99
+ return (
100
+ <span className={segment} title={error ?? 'Not authenticated'}>
101
+ <span className="size-1.5 shrink-0 rounded-full border border-muted-foreground" />
102
+ <button
103
+ type="button"
104
+ onClick={() => void onLogin()}
105
+ disabled={pending}
106
+ className={cn(
107
+ 'flex items-center gap-1 truncate text-foreground/80 transition-colors hover:text-foreground disabled:cursor-wait disabled:opacity-60',
108
+ )}
109
+ >
110
+ {pending && <Loader2Icon className="size-3 shrink-0 animate-spin" />}
111
+ {pending ? 'Logging in…' : 'Log in'}
112
+ </button>
113
+ {error && <span className="truncate text-destructive">{error}</span>}
114
+ </span>
115
+ );
116
+ }
117
+
118
+ /**
119
+ * Bottom status bar: a calm, always-present readout of where a run points and
120
+ * what's happening. Left = environment / runner / workspace source (interactive
121
+ * where it's safe to be); right = selection, flow shape and the live run.
122
+ */
123
+ export function StatusBar() {
124
+ const environments = useBuilderStore((s) => s.environments);
125
+ const selectedEnvironment = useBuilderStore((s) => s.selectedEnvironment);
126
+ const safeMode = useBuilderStore((s) => s.safeMode);
127
+ const setSafeMode = useBuilderStore((s) => s.setSafeMode);
128
+ const runnerOnline = useBuilderStore((s) => s.runnerOnline);
129
+ const runnerMock = useBuilderStore((s) => s.runnerMock);
130
+ const checkRunner = useBuilderStore((s) => s.checkRunner);
131
+ const workspaceSource = useBuilderStore((s) => s.workspaceSource);
132
+ const register = useBuilderStore((s) => s.viewRegister);
133
+ const setRegister = useBuilderStore((s) => s.setViewRegister);
134
+ const selectedNodeId = useBuilderStore((s) => s.selectedNodeId);
135
+ const flow = useBuilderStore((s) => s.flow);
136
+ const run = useBuilderStore((s) => s.run);
137
+ const setupStatus = useBuilderStore((s) => s.setupStatus);
138
+ const setWelcomeOpen = useBuilderStore((s) => s.setWelcomeOpen);
139
+
140
+ // Setup entry point: a quiet progress chip while onboarding is unfinished.
141
+ // Complete setups drop the chip — the checklist auto-open and this chip are
142
+ // the only entry points, and a finished checklist has nothing left to do.
143
+ const progress = setupStatus ? setupProgress(setupStatus) : null;
144
+ const setupPending = progress !== null && progress.done < progress.total;
145
+
146
+ const current = environments.find((e) => e.name === selectedEnvironment);
147
+ const protectedEnv = current?.protected ?? false;
148
+ const envLabel = selectedEnvironment || 'browser';
149
+
150
+ const onEnvClick = () => {
151
+ if (!safeMode) {
152
+ // Off → always allowed back on.
153
+ setSafeMode(true);
154
+ return;
155
+ }
156
+ // Safe on: an unprotected env may be flipped off inline; protected must go
157
+ // through the environment picker's typed confirmation.
158
+ if (!protectedEnv) setSafeMode(false);
159
+ };
160
+ const envTitle = !safeMode
161
+ ? 'Safe mode off — click to re-enable'
162
+ : protectedEnv
163
+ ? 'Protected environment — use the environment picker to go live'
164
+ : 'Safe mode on — click to turn off';
165
+
166
+ const runnerDot =
167
+ runnerOnline === true ? 'bg-success' : runnerOnline === false ? 'bg-destructive' : 'bg-muted-foreground';
168
+ const runnerTitle =
169
+ runnerOnline === true
170
+ ? 'Runner online — click to re-check'
171
+ : runnerOnline === false
172
+ ? 'Runner offline — click to re-check'
173
+ : 'Runner status unknown — click to check';
174
+
175
+ const selectedNode = selectedNodeId
176
+ ? flow.nodes.find((n) => n.id === selectedNodeId)
177
+ : undefined;
178
+
179
+ const elapsed = useRunElapsed(run);
180
+
181
+ return (
182
+ <footer className="flex h-[24px] shrink-0 items-center overflow-hidden border-t border-border bg-tertiary text-[11px] text-muted-foreground select-none">
183
+ <button type="button" onClick={onEnvClick} title={envTitle} className={cn(segment, interactive)}>
184
+ <span
185
+ className={cn('size-1.5 shrink-0 rounded-full', protectedEnv ? 'bg-destructive' : 'bg-muted-foreground')}
186
+ />
187
+ <span className="truncate text-foreground/80">{envLabel}</span>
188
+ {safeMode && <ShieldIcon className="size-3 shrink-0" />}
189
+ </button>
190
+ {current?.auth?.configured && (
191
+ <>
192
+ <Divider />
193
+ <EnvAuthBadge key={current.name} env={current} />
194
+ </>
195
+ )}
196
+ {runnerMock && (
197
+ <>
198
+ <Divider />
199
+ <span
200
+ className={cn(segment, 'bg-warn/15 font-medium uppercase tracking-wide text-warn')}
201
+ title="The studio is in Mock mode — mounted endpoints answer with example responses from scenarios; nothing executes, no auth. Pick an environment in the toolbar dropdown to go live."
202
+ >
203
+ <span className="size-1.5 shrink-0 rounded-full bg-warn" />
204
+ mock
205
+ </span>
206
+ </>
207
+ )}
208
+ <Divider />
209
+ <button
210
+ type="button"
211
+ onClick={() => void checkRunner()}
212
+ title={runnerTitle}
213
+ className={cn(segment, interactive)}
214
+ >
215
+ <span className={cn('size-1.5 shrink-0 rounded-full', runnerDot)} />
216
+ <span className="truncate">runner</span>
217
+ </button>
218
+ {/* Workspace source only matters in the exception state: a browser-local
219
+ workspace means edits are NOT landing in the project's files. The
220
+ normal case (editing the runner's files) needs no chip. */}
221
+ {workspaceSource !== 'server' && (
222
+ <>
223
+ <Divider />
224
+ <span
225
+ className={cn(segment, 'bg-warn/15 font-medium text-warn')}
226
+ title="Editing a browser-local workspace — the runner is offline, so changes are not written to your project's files. They adopt into the project when the runner comes back."
227
+ >
228
+ local only
229
+ </span>
230
+ </>
231
+ )}
232
+ {setupPending && progress && (
233
+ <>
234
+ <Divider />
235
+ <button
236
+ type="button"
237
+ onClick={() => setWelcomeOpen(true)}
238
+ title="Setup — first-run checklist for this project"
239
+ className={cn(segment, interactive)}
240
+ >
241
+ <ListChecksIcon className="size-3 shrink-0" />
242
+ <span className="truncate text-foreground/80">setup</span>
243
+ <span className="shrink-0 font-mono tabular-nums text-muted-foreground/70">
244
+ {progress.done}/{progress.total}
245
+ </span>
246
+ </button>
247
+ </>
248
+ )}
249
+ <Divider />
250
+ <div
251
+ role="group"
252
+ aria-label="Runbook register"
253
+ title="Runbook register — Simple reads outcomes; Technical adds type names + trace badges"
254
+ className="flex h-full items-center gap-0.5 px-1"
255
+ >
256
+ {(['simple', 'technical'] as const).map((v) => (
257
+ <button
258
+ key={v}
259
+ type="button"
260
+ onClick={() => setRegister(v)}
261
+ aria-pressed={register === v}
262
+ className={cn(
263
+ 'rounded-[4px] px-1.5 py-0.5 text-[11px] capitalize transition-colors',
264
+ register === v ? 'bg-secondary text-foreground' : 'text-muted-foreground hover:text-foreground',
265
+ )}
266
+ >
267
+ {v}
268
+ </button>
269
+ ))}
270
+ </div>
271
+
272
+ <div className="ml-auto flex h-full min-w-0 items-center">
273
+ {selectedNode && (
274
+ <>
275
+ <span className={segment} title="Selected node">
276
+ <span className="truncate font-mono text-foreground/75">{selectedNode.label}</span>
277
+ </span>
278
+ <Divider />
279
+ </>
280
+ )}
281
+ <span className={segment} title="Active flow">
282
+ <span className="truncate">{flow.name}</span>
283
+ <span className="shrink-0 text-muted-foreground/70">
284
+ · {flow.nodes.length} {flow.nodes.length === 1 ? 'node' : 'nodes'}
285
+ </span>
286
+ </span>
287
+ {run && (
288
+ <>
289
+ <Divider />
290
+ <span className={segment} title="Latest run">
291
+ <span className={cn('size-1.5 shrink-0 rounded-full', statusDot[run.status] ?? 'bg-muted-foreground')} />
292
+ <span className="shrink-0 capitalize text-foreground/80">{run.status}</span>
293
+ {elapsed && (
294
+ <span className="shrink-0 font-mono tabular-nums text-muted-foreground/70">{elapsed}</span>
295
+ )}
296
+ </span>
297
+ </>
298
+ )}
299
+ </div>
300
+ </footer>
301
+ );
302
+ }