@kiberon-labs/behave-graph-flow 1.0.0 → 3.0.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 (378) hide show
  1. package/.fallowrc.json +16 -0
  2. package/.storybook/main.ts +32 -0
  3. package/.storybook/manager.ts +6 -0
  4. package/.storybook/preview.ts +64 -0
  5. package/.storybook/styles.css +16 -0
  6. package/.turbo/turbo-build.log +7 -0
  7. package/CHANGELOG.md +368 -0
  8. package/LICENSE +6 -0
  9. package/README.md +2 -2
  10. package/data/Polynomial.json +510 -0
  11. package/data/sequence.json +337 -0
  12. package/data/trigger-event.json +241 -0
  13. package/data/variable-change.json +210 -0
  14. package/dist/AnyControlImpl-Ds-CShIB.js +20 -0
  15. package/dist/AnyControlImpl-Ds-CShIB.js.map +1 -0
  16. package/dist/DocumentationBrowserPanelImpl-deZNzFX8.js +166 -0
  17. package/dist/DocumentationBrowserPanelImpl-deZNzFX8.js.map +1 -0
  18. package/dist/entry.css +4 -0
  19. package/dist/index.css +42 -0
  20. package/dist/index.css.map +1 -0
  21. package/dist/index.d.ts +3597 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +18009 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/noteImpl-KkrrWgJd.js +242 -0
  26. package/dist/noteImpl-KkrrWgJd.js.map +1 -0
  27. package/dist/styles.module-CvmpDkZj.css +3 -0
  28. package/dist/styles.module-CvmpDkZj.css.map +1 -0
  29. package/dist/styles.module-DZxg8aW9.js +271 -0
  30. package/dist/styles.module-DZxg8aW9.js.map +1 -0
  31. package/dist/useChangeNodeData-ChQGK7AI.js +23 -0
  32. package/dist/useChangeNodeData-ChQGK7AI.js.map +1 -0
  33. package/docs/notifications.md +246 -0
  34. package/docs/protocol.md +702 -0
  35. package/docs/specifics.md +191 -0
  36. package/package.json +82 -22
  37. package/postcss.config.ts +3 -4
  38. package/src/annotations/index.ts +32 -0
  39. package/src/components/FloatingToolbar/index.module.css +37 -0
  40. package/src/components/FloatingToolbar/index.tsx +256 -0
  41. package/src/components/Flow.tsx +287 -75
  42. package/src/components/contextMenus/DynamicContextMenu.tsx +85 -0
  43. package/src/components/contextMenus/NodePicker.module.css +274 -0
  44. package/src/components/contextMenus/NodePicker.tsx +481 -0
  45. package/src/components/contextMenus/edge.tsx +22 -0
  46. package/src/components/contextMenus/node.tsx +15 -0
  47. package/src/components/contextMenus/selection.tsx +11 -0
  48. package/src/components/controls/any/AnyControlImpl.tsx +14 -0
  49. package/src/components/controls/any/index.tsx +19 -0
  50. package/src/components/controls/boolean/index.tsx +13 -0
  51. package/src/components/controls/colorPicker/InputPopover.module.css +100 -0
  52. package/src/components/controls/colorPicker/InputPopover.tsx +31 -0
  53. package/src/components/controls/colorPicker/index.module.css +18 -0
  54. package/src/components/controls/colorPicker/index.tsx +61 -0
  55. package/src/components/controls/number/index.tsx +35 -0
  56. package/src/components/controls/string/index.tsx +16 -0
  57. package/src/components/edges/index.tsx +475 -0
  58. package/src/components/edges/offsetBezier.ts +134 -0
  59. package/src/components/hotKeys.tsx +20 -0
  60. package/src/components/layoutController/index.module.css +13 -0
  61. package/src/components/layoutController/index.tsx +140 -0
  62. package/src/components/layoutController/utils.ts +248 -0
  63. package/src/components/menubar/defaults.tsx +516 -0
  64. package/src/components/menubar/index.tsx +49 -0
  65. package/src/components/menubar/menuItem.module.css +31 -0
  66. package/src/components/menubar/menuItem.tsx +65 -0
  67. package/src/components/nodes/behave/Node.module.css +23 -0
  68. package/src/components/nodes/behave/Node.tsx +176 -0
  69. package/src/components/nodes/behave/NodeContainer.module.css +88 -0
  70. package/src/components/nodes/behave/NodeContainer.tsx +46 -0
  71. package/src/components/nodes/behave/index.tsx +14 -0
  72. package/src/components/nodes/group/index.tsx +109 -0
  73. package/src/components/nodes/wrapper/index.tsx +73 -0
  74. package/src/components/nodes/wrapper/styles.module.css +87 -0
  75. package/src/components/notifications/NotificationProvider.tsx +81 -0
  76. package/src/components/notifications/index.ts +2 -0
  77. package/src/components/notifications/utils.ts +71 -0
  78. package/src/components/panels/alignment/index.module.css +10 -0
  79. package/src/components/panels/alignment/index.tsx +244 -0
  80. package/src/components/panels/base/index.tsx +5 -0
  81. package/src/components/panels/base/styles.module.css +12 -0
  82. package/src/components/panels/common/PanelHeader.module.css +24 -0
  83. package/src/components/panels/common/PanelHeader.tsx +22 -0
  84. package/src/components/panels/common/SectionTitle.module.css +13 -0
  85. package/src/components/panels/common/SectionTitle.tsx +10 -0
  86. package/src/components/panels/events/EditEventPanel.tsx +324 -0
  87. package/src/components/panels/events/ManageEventsPanel.tsx +101 -0
  88. package/src/components/panels/events/index.tsx +23 -0
  89. package/src/components/panels/events/styles.module.css +178 -0
  90. package/src/components/panels/graphProperties/index.tsx +125 -0
  91. package/src/components/panels/history/index.tsx +92 -0
  92. package/src/components/panels/history/styles.module.css +97 -0
  93. package/src/components/panels/keymaps/index.module.css +68 -0
  94. package/src/components/panels/keymaps/index.tsx +166 -0
  95. package/src/components/panels/layers/index.tsx +245 -0
  96. package/src/components/panels/layers/styles.module.css +107 -0
  97. package/src/components/panels/legend/index.module.css +6 -0
  98. package/src/components/panels/legend/index.tsx +76 -0
  99. package/src/components/panels/logs/index.module.css +218 -0
  100. package/src/components/panels/logs/index.tsx +288 -0
  101. package/src/components/panels/nodeInputs/InputControl.tsx +63 -0
  102. package/src/components/panels/nodeInputs/InputsGroup.tsx +65 -0
  103. package/src/components/panels/nodeInputs/MultipleNodesView.tsx +37 -0
  104. package/src/components/panels/nodeInputs/NodeSettings.tsx +92 -0
  105. package/src/components/panels/nodeInputs/NodeTitleEditor.tsx +125 -0
  106. package/src/components/panels/nodeInputs/OutputsGroup.tsx +55 -0
  107. package/src/components/panels/nodeInputs/SocketGenerators.tsx +32 -0
  108. package/src/components/panels/nodeInputs/index.module.css +308 -0
  109. package/src/components/panels/nodeInputs/index.tsx +349 -0
  110. package/src/components/panels/nodeInputs/useNodeHandlers.ts +76 -0
  111. package/src/components/panels/nodeInputs/useNodeInputsData.ts +153 -0
  112. package/src/components/panels/nodePicker/index.tsx +115 -0
  113. package/src/components/panels/panel/index.module.css +66 -0
  114. package/src/components/panels/panel/index.tsx +88 -0
  115. package/src/components/panels/search/index.module.css +16 -0
  116. package/src/components/panels/search/index.tsx +215 -0
  117. package/src/components/panels/systemSettings/ConversionsSettings.tsx +203 -0
  118. package/src/components/panels/systemSettings/index.tsx +251 -0
  119. package/src/components/panels/systemSettings/styles.module.css +138 -0
  120. package/src/components/panels/traces/GridLines.tsx +38 -0
  121. package/src/components/panels/traces/TimeGrid.tsx +48 -0
  122. package/src/components/panels/traces/TraceLane.tsx +62 -0
  123. package/src/components/panels/traces/TraceTooltip.tsx +22 -0
  124. package/src/components/panels/traces/TracesHeader.tsx +56 -0
  125. package/src/components/panels/traces/index.module.css +159 -0
  126. package/src/components/panels/traces/index.tsx +298 -0
  127. package/src/components/panels/traces/types.ts +48 -0
  128. package/src/components/panels/traces/useDerivedSpans.ts +307 -0
  129. package/src/components/panels/traces/utils.ts +33 -0
  130. package/src/components/panels/variables/CreateVariableScreen.tsx +162 -0
  131. package/src/components/panels/variables/ManageVariablesScreen.tsx +147 -0
  132. package/src/components/panels/variables/index.tsx +125 -0
  133. package/src/components/panels/variables/styles.module.css +149 -0
  134. package/src/components/primitives/icon.module.css +45 -0
  135. package/src/components/primitives/icon.tsx +38 -0
  136. package/src/components/sockets/input/index.tsx +83 -0
  137. package/src/components/sockets/input/styles.module.css +26 -0
  138. package/src/components/sockets/output/index.tsx +68 -0
  139. package/src/components/sockets/output/styles.module.css +22 -0
  140. package/src/css/notes.css +135 -0
  141. package/src/css/prosemirror.css +57 -0
  142. package/src/css/rc-dock.css +212 -0
  143. package/src/css/rc-menu.css +101 -0
  144. package/src/css/themes/kiberon.css +127 -0
  145. package/src/css/vars.css +198 -0
  146. package/src/css/vscode-elements.css +124 -0
  147. package/src/entry.css +4 -0
  148. package/src/generators/CallSubgraphGenerator.tsx +136 -0
  149. package/src/generators/CustomEventOnTriggeredGenerator.tsx +85 -0
  150. package/src/generators/GraphBoundaryGenerator.module.css +32 -0
  151. package/src/generators/GraphBoundaryGenerator.tsx +193 -0
  152. package/src/generators/SequenceGenerator.tsx +104 -0
  153. package/src/generators/SwitchOnIntegerGenerator.tsx +256 -0
  154. package/src/generators/SwitchOnStringGenerator.tsx +263 -0
  155. package/src/generators/callSubgraphSync.ts +126 -0
  156. package/src/generators/registerDefaultGenerators.ts +55 -0
  157. package/src/generators/registerDefaults.ts +26 -0
  158. package/src/hooks/useBehaveGraphFlow.ts +17 -16
  159. package/src/hooks/useFlowHandlers.ts +154 -30
  160. package/src/hooks/useWasdPan.ts +210 -0
  161. package/src/index.css +134 -0
  162. package/src/index.ts +53 -18
  163. package/src/manifest/contributionRegistry.ts +93 -0
  164. package/src/manifest/index.ts +4 -0
  165. package/src/manifest/loadManifest.ts +82 -0
  166. package/src/manifest/manifestPlugin.ts +29 -0
  167. package/src/manifest/passthroughValueType.ts +40 -0
  168. package/src/plugin/alignment/index.ts +91 -0
  169. package/src/plugin/autosave/controller.ts +366 -0
  170. package/src/plugin/autosave/index.tsx +114 -0
  171. package/src/plugin/autosave/panel/BackupPanel.tsx +141 -0
  172. package/src/plugin/autosave/panel/index.tsx +1 -0
  173. package/src/plugin/autosave/panel/styles.module.css +56 -0
  174. package/src/plugin/autosave/settings.ts +65 -0
  175. package/src/plugin/autosave/storage.ts +147 -0
  176. package/src/plugin/docs/index.tsx +297 -0
  177. package/src/plugin/docs/panel/DocumentationBrowserPanelImpl.tsx +200 -0
  178. package/src/plugin/docs/panel/index.tsx +21 -0
  179. package/src/plugin/docs/panel/styles.module.css +174 -0
  180. package/src/plugin/graphrunner/actions.ts +326 -0
  181. package/src/plugin/graphrunner/buttons.tsx +95 -0
  182. package/src/plugin/graphrunner/client.ts +707 -0
  183. package/src/plugin/graphrunner/index.tsx +184 -0
  184. package/src/plugin/graphrunner/panel.tsx +386 -0
  185. package/src/plugin/graphrunner/runController.ts +283 -0
  186. package/src/plugin/graphrunner/runner.ts +187 -0
  187. package/src/plugin/graphrunner/session.ts +243 -0
  188. package/src/plugin/graphrunner/store.ts +196 -0
  189. package/src/plugin/graphrunner/styles.module.css +171 -0
  190. package/src/plugin/graphrunner/transport.ts +250 -0
  191. package/src/plugin/graphrunner/types.ts +693 -0
  192. package/src/plugin/graphrunner-local/execution-utils.ts +637 -0
  193. package/src/plugin/graphrunner-local/index.tsx +172 -0
  194. package/src/plugin/graphrunner-local/panel.tsx +187 -0
  195. package/src/plugin/graphrunner-local/store.ts +41 -0
  196. package/src/plugin/graphrunner-local/styles.module.css +82 -0
  197. package/src/plugin/graphrunner-local/transport.ts +1339 -0
  198. package/src/plugin/graphrunner-local/types.ts +10 -0
  199. package/src/plugin/graphrunner-webworker/graph-executor.worker.ts +635 -0
  200. package/src/plugin/graphrunner-webworker/index.tsx +140 -0
  201. package/src/plugin/graphrunner-webworker/panel.tsx +173 -0
  202. package/src/plugin/graphrunner-webworker/store.ts +98 -0
  203. package/src/plugin/graphrunner-webworker/worker-transport.ts +123 -0
  204. package/src/plugin/kitchen-sink/index.ts +38 -0
  205. package/src/plugin/layout/dagre.ts +131 -0
  206. package/src/plugin/layout/elk.ts +216 -0
  207. package/src/plugin/layout/index.ts +80 -0
  208. package/src/plugin/notes/FormatToolbar.tsx +200 -0
  209. package/src/plugin/notes/index.tsx +191 -0
  210. package/src/plugin/notes/nodeActions.ts +100 -0
  211. package/src/plugin/notes/note.tsx +20 -0
  212. package/src/plugin/notes/noteImpl.tsx +89 -0
  213. package/src/plugin/realtime/realtimeRunner.ts +624 -0
  214. package/src/specifics/CustomEventOnTriggeredSpecific.tsx +92 -0
  215. package/src/specifics/CustomEventTriggerSpecific.tsx +141 -0
  216. package/src/specifics/VariableGetSpecific.tsx +110 -0
  217. package/src/specifics/VariableSetSpecific.tsx +110 -0
  218. package/src/store/actions.tsx +698 -0
  219. package/src/store/commands.ts +278 -0
  220. package/src/store/contextMenu.ts +192 -0
  221. package/src/store/controls.tsx +62 -0
  222. package/src/store/conversions.ts +47 -0
  223. package/src/store/documentation.tsx +69 -0
  224. package/src/store/events.tsx +116 -0
  225. package/src/store/flow.tsx +230 -0
  226. package/src/store/graphMeta.ts +39 -0
  227. package/src/store/hotKeys.tsx +364 -0
  228. package/src/store/layers.ts +259 -0
  229. package/src/store/legend.tsx +76 -0
  230. package/src/store/logs.ts +28 -0
  231. package/src/store/menubar.ts +41 -0
  232. package/src/store/refs.ts +84 -0
  233. package/src/store/registry.ts +51 -0
  234. package/src/store/selection.ts +22 -0
  235. package/src/store/settings.ts +99 -0
  236. package/src/store/settingsSchema.ts +210 -0
  237. package/src/store/socketGenerator.tsx +54 -0
  238. package/src/store/specific.tsx +75 -0
  239. package/src/store/specs.tsx +35 -0
  240. package/src/store/tabs.ts +282 -0
  241. package/src/store/toolbar.tsx +45 -0
  242. package/src/store/traces.ts +240 -0
  243. package/src/store/variables.ts +37 -0
  244. package/src/system/graph.ts +131 -0
  245. package/src/system/graphSession.ts +172 -0
  246. package/src/system/index.ts +6 -0
  247. package/src/system/notifications.ts +111 -0
  248. package/src/system/persistence.ts +82 -0
  249. package/src/system/plugin.ts +55 -0
  250. package/src/system/provider.tsx +86 -0
  251. package/src/system/pubsub.ts +323 -0
  252. package/src/system/system.ts +653 -0
  253. package/src/system/tabLoader.tsx +303 -0
  254. package/src/system/undoRedo.ts +103 -0
  255. package/src/transformers/Uigraph.ts +61 -0
  256. package/src/transformers/behaveToFlow.ts +16 -4
  257. package/src/transformers/contract.ts +87 -0
  258. package/src/transformers/flowToBehave.ts +40 -12
  259. package/src/types/NodeMetadata.ts +27 -0
  260. package/src/types/graph.ts +49 -0
  261. package/src/types/nodes.ts +50 -0
  262. package/src/types.ts +18 -0
  263. package/src/util/autoConvert.ts +200 -0
  264. package/src/util/colors.ts +1 -29
  265. package/src/util/downloadJson.ts +18 -0
  266. package/src/util/extractNodeMetadata.ts +16 -0
  267. package/src/util/getPickerFilters.ts +1 -1
  268. package/src/util/isBehaveNode.ts +6 -0
  269. package/src/util/isValidConnection.ts +51 -17
  270. package/src/util/mergeSockets.ts +29 -0
  271. package/src/util/serializeVariables.ts +66 -0
  272. package/src/util/sockets.ts +43 -0
  273. package/stories/apex/layoutController/example-graph.worker.ts +39 -0
  274. package/stories/apex/layoutController/index.stories.tsx +48 -0
  275. package/stories/apex/layoutController/webworker.stories.tsx +103 -0
  276. package/stories/apex/menubar/menubar.stories.tsx +19 -0
  277. package/stories/components/colorpicker/index.stories.tsx +20 -0
  278. package/stories/components/contextMenus/edge.stories.tsx +32 -0
  279. package/stories/components/contextMenus/node.stories.tsx +26 -0
  280. package/stories/components/contextMenus/nodePicker.stories.tsx +115 -0
  281. package/stories/components/controls/any/index.stories.tsx +19 -0
  282. package/stories/components/controls/boolean/index.stories.tsx +19 -0
  283. package/stories/components/controls/colorPicker/index.stories.tsx +49 -0
  284. package/stories/components/controls/number/index.stories.tsx +19 -0
  285. package/stories/components/controls/string/index.stories.tsx +19 -0
  286. package/stories/components/nodes/behaveNode.stories.tsx +108 -0
  287. package/stories/components/panels/alignment.stories.tsx +24 -0
  288. package/stories/components/panels/events.stories.tsx +38 -0
  289. package/stories/components/panels/graphRunner.stories.tsx +317 -0
  290. package/stories/components/panels/history.stories.tsx +37 -0
  291. package/stories/components/panels/keymaps.stories.tsx +21 -0
  292. package/stories/components/panels/legend.stories.tsx +37 -0
  293. package/stories/components/panels/logs.stories.tsx +24 -0
  294. package/stories/components/panels/nodeInputs.stories.tsx +21 -0
  295. package/stories/components/panels/nodePicker.stories.tsx +37 -0
  296. package/stories/components/panels/panel.stories.tsx +39 -0
  297. package/stories/components/panels/search.stories.tsx +24 -0
  298. package/stories/components/panels/systemSettings.stories.tsx +26 -0
  299. package/stories/components/panels/traces.stories.tsx +225 -0
  300. package/stories/components/panels/variables.stories.tsx +24 -0
  301. package/stories/defaults/defaultStoryProvider.tsx +170 -0
  302. package/stories/defaults/systemGenerator.ts +43 -0
  303. package/stories/plugins/notes.stories.tsx +100 -0
  304. package/tests/autoConvert.test.ts +329 -0
  305. package/tests/autosavePlugin.test.ts +204 -0
  306. package/tests/callSubgraphSync.test.ts +148 -0
  307. package/tests/commandRegistry.test.ts +137 -0
  308. package/tests/components/edges/offsetBezier.test.ts +51 -0
  309. package/tests/components/layoutController/utils.test.ts +68 -0
  310. package/tests/components/panels/traces/utils.test.ts +52 -0
  311. package/tests/contract.test.ts +51 -0
  312. package/tests/contractSerialize.test.ts +62 -0
  313. package/tests/deriveSpans.test.ts +71 -0
  314. package/tests/flowToBehave.test.ts +27 -4
  315. package/tests/hotkeys.test.ts +79 -0
  316. package/tests/keepAliveLifecycle.test.ts +167 -0
  317. package/tests/loadManifest.test.ts +113 -0
  318. package/tests/noteMarkdown.test.ts +65 -0
  319. package/tests/notesPlugin.test.ts +162 -0
  320. package/tests/notifications.test.ts +87 -0
  321. package/tests/persistence.test.ts +51 -0
  322. package/tests/saveLoad.test.ts +373 -0
  323. package/tests/settings.test.ts +178 -0
  324. package/tests/traceStore.test.ts +46 -0
  325. package/tests/util/calculateNewEdge.test.ts +98 -0
  326. package/tests/util/getSocketsByNodeTypeAndHandleType.test.ts +31 -0
  327. package/tests/util/hasPositionMetaData.test.ts +33 -0
  328. package/tests/util/isBehaveNode.test.ts +22 -0
  329. package/tests/util/isHandleConnected.test.ts +37 -0
  330. package/tests/util/mergeSockets.test.ts +43 -0
  331. package/tests/visual/README.md +64 -0
  332. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-alignment-chromium-win32.png +0 -0
  333. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-conversation-chromium-win32.png +0 -0
  334. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-events-chromium-win32.png +0 -0
  335. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-history-chromium-win32.png +0 -0
  336. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-keymaps-chromium-win32.png +0 -0
  337. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-layers-chromium-win32.png +0 -0
  338. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-legend-chromium-win32.png +0 -0
  339. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-localGraphRunner-chromium-win32.png +0 -0
  340. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-logs-chromium-win32.png +0 -0
  341. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-nodeInputs-chromium-win32.png +0 -0
  342. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-nodePicker-chromium-win32.png +0 -0
  343. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-panel-chromium-win32.png +0 -0
  344. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-search-chromium-win32.png +0 -0
  345. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-systemSettings-chromium-win32.png +0 -0
  346. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-traces-chromium-win32.png +0 -0
  347. package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-variables-chromium-win32.png +0 -0
  348. package/tests/visual/panels.visual.test.tsx +76 -0
  349. package/tests/wasdPan.test.ts +71 -0
  350. package/tsconfig.base.json +39 -0
  351. package/tsconfig.json +18 -59
  352. package/tsconfig.prod.json +23 -0
  353. package/tsdown.config.ts +15 -3
  354. package/typedoc.json +7 -7
  355. package/vite.config.js +7 -0
  356. package/vitest.config.ts +5 -2
  357. package/vitest.visual.config.ts +55 -0
  358. package/src/components/AutoSizeInput.tsx +0 -65
  359. package/src/components/Controls.tsx +0 -87
  360. package/src/components/InputSocket.tsx +0 -142
  361. package/src/components/Node.tsx +0 -68
  362. package/src/components/NodeContainer.tsx +0 -46
  363. package/src/components/NodePicker.tsx +0 -77
  364. package/src/components/OutputSocket.tsx +0 -58
  365. package/src/components/modals/ClearModal.tsx +0 -40
  366. package/src/components/modals/HelpModal.tsx +0 -36
  367. package/src/components/modals/LoadModal.tsx +0 -96
  368. package/src/components/modals/Modal.tsx +0 -64
  369. package/src/components/modals/SaveModal.tsx +0 -60
  370. package/src/hooks/useCustomNodeTypes.tsx +0 -31
  371. package/src/hooks/useGraphRunner.ts +0 -104
  372. package/src/hooks/useMergeMap.ts +0 -14
  373. package/src/hooks/useNodeSpecJson.ts +0 -20
  374. package/src/hooks/useQueriableDefinitions.ts +0 -22
  375. package/src/styles.css +0 -8
  376. package/tailwind.config.ts +0 -19
  377. package/tests/tsconfig.json +0 -10
  378. /package/src/{types.d.ts → types-declarations.d.ts} +0 -0
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Local graph runner plugin for in-browser graph execution
3
+ * Uses the local Engine instead of a remote server
4
+ */
5
+
6
+ import type { System } from '../../system/system.js';
7
+ import { plugin } from '../../system/plugin.js';
8
+ import type { IRegistry } from '@kiberon-labs/behave-graph';
9
+ import { buildUIGraphJSON } from '../../transformers/Uigraph.js';
10
+ import { GraphRunnerClient } from '../graphrunner/client.js';
11
+ import { LocalTransport } from './transport.js';
12
+ import {
13
+ graphRunnerClientPlugin,
14
+ type ServerEvent,
15
+ type ServerVariable,
16
+ type SessionFactory
17
+ } from '../graphrunner/index.js';
18
+ import { DefaultSessionFactory } from '../graphrunner/session.js';
19
+ import { localGraphRunnerStoreFactory } from './store.js';
20
+ import { LocalGraphRunnerPanel } from './panel.js';
21
+ import { MenuItemElement } from '../../components/menubar/menuItem.js';
22
+ import { ErrorBoundary } from 'react-error-boundary';
23
+
24
+ export * from './transport.js';
25
+ export * from './store.js';
26
+ export * from './panel.js';
27
+ export * from './types.js';
28
+
29
+ /**
30
+ * Options for the local graph runner plugin
31
+ */
32
+ export interface LocalGraphRunnerPluginOptions {
33
+ /**
34
+ * Node registry with registered nodes, values, and dependencies.
35
+ * Required for graph execution.
36
+ */
37
+ registry: IRegistry;
38
+ variables?: ServerVariable[];
39
+ events?: ServerEvent[];
40
+ sessionFactory?: SessionFactory;
41
+
42
+ /**
43
+ * Custom tick strategy hook for controlling timing between tick events.
44
+ * If not provided, defaults to requestAnimationFrame for smooth browser refresh sync.
45
+ */
46
+ tickStrategy?: () => Promise<void>;
47
+
48
+ /**
49
+ * Whether to skip automatic connection.
50
+ * Default: false (will attempt to connect immediately)
51
+ */
52
+ skipAutoConnect?: boolean;
53
+
54
+ /**
55
+ * Whether to add the menu item to the Window menu.
56
+ * Default: true
57
+ */
58
+ addMenuItem?: boolean;
59
+ }
60
+
61
+ /**
62
+ * Default RAF-based tick strategy for smooth browser animation frame sync
63
+ */
64
+ const defaultRafTickStrategy = (): Promise<void> => {
65
+ return new Promise((resolve) => {
66
+ requestAnimationFrame(() => resolve());
67
+ });
68
+ };
69
+
70
+ /**
71
+ * Plugin initialization function for local graph execution
72
+ * Registers a GraphRunnerClient with a local transport that executes graphs in-browser
73
+ */
74
+ export async function localGraphRunnerPluginLoader(
75
+ system: System,
76
+ options: LocalGraphRunnerPluginOptions
77
+ ): Promise<void> {
78
+ // Create local graph runner store
79
+ const localStore = localGraphRunnerStoreFactory();
80
+ system.decorate('localGraphRunnerStore', localStore);
81
+
82
+ // Create or use provided session factory with tick strategy
83
+ const tickStrategy = options.tickStrategy ?? defaultRafTickStrategy;
84
+ const sessionFactory =
85
+ options.sessionFactory ??
86
+ new DefaultSessionFactory({
87
+ tickStrategy
88
+ });
89
+
90
+ // Create local transport with access to the node registry and store.
91
+ // `resolveGraph` lets Call Subgraph nodes run other open graphs by id.
92
+ const transport = new LocalTransport(options.registry, {
93
+ ...options,
94
+ store: localStore,
95
+ sessionFactory,
96
+ resolveGraph: (id) => {
97
+ const target = system.activeGraph.getState().sessions[id];
98
+ return target ? buildUIGraphJSON(target).flow : undefined;
99
+ }
100
+ });
101
+
102
+ // Create client with the local transport and message activity tracking
103
+ const client = new GraphRunnerClient({
104
+ transport,
105
+ protocolVersion: '1.0.0',
106
+ auth: { type: 'none' },
107
+ onMessageActivity: (direction, message) => {
108
+ // Access the store from the system after it's registered
109
+ const graphRunnerStore = system.runner.store;
110
+ if (graphRunnerStore) {
111
+ graphRunnerStore.getState().addMessageActivity(direction, message);
112
+ }
113
+ }
114
+ });
115
+
116
+ // Register the graph runner client plugin
117
+ // This will create the graphRunnerClientStore and decorate it on the system
118
+ system.registerPlugin(graphRunnerClientPlugin, {
119
+ client
120
+ });
121
+
122
+ // Register the local graph runner panel
123
+ system.tabLoader.register('localGraphRunner', () => {
124
+ return {
125
+ id: 'localGraphRunner',
126
+ closable: true,
127
+ title: 'Local Graph Runner',
128
+ group: 'default',
129
+ content: () => (
130
+ <ErrorBoundary
131
+ fallback={<div>Error loading Local Graph Runner panel</div>}
132
+ >
133
+ <LocalGraphRunnerPanel />
134
+ </ErrorBoundary>
135
+ )
136
+ };
137
+ });
138
+
139
+ // Add menu item to Window menu (unless disabled)
140
+ if (options.addMenuItem !== false) {
141
+ const menuStore = system.menubarStore;
142
+ const currentItems = menuStore.getState().items;
143
+ const windowMenu = currentItems.find((menu) => menu.name === 'window');
144
+
145
+ if (windowMenu) {
146
+ // Add the Local Graph Runner menu item to the Window menu
147
+ const newMenuItem = {
148
+ name: 'localGraphRunner',
149
+ render: function LocalGraphRunnerMenuItem() {
150
+ return (
151
+ <MenuItemElement
152
+ onClick={() =>
153
+ system.tabStore.getState().openTab('localGraphRunner')
154
+ }
155
+ key="localGraphRunner"
156
+ >
157
+ Local Graph Runner
158
+ </MenuItemElement>
159
+ );
160
+ }
161
+ };
162
+
163
+ menuStore
164
+ .getState()
165
+ .setSubMenuItems('window', [...windowMenu.items, newMenuItem]);
166
+ }
167
+ }
168
+ }
169
+
170
+ export const localGraphRunnerPlugin = plugin(localGraphRunnerPluginLoader, {
171
+ name: 'graphrunner-local'
172
+ });
@@ -0,0 +1,187 @@
1
+ import { useState } from 'react';
2
+ import { useStore } from 'zustand';
3
+ import {
4
+ VscodeButton,
5
+ VscodeTextfield,
6
+ VscodeBadge,
7
+ VscodeDivider
8
+ } from '@vscode-elements/react-elements';
9
+
10
+ import styles from './styles.module.css';
11
+ import { useSystem } from '@/system/index.js';
12
+ import { BasePanel } from '@/components/panels/base';
13
+ import { SectionTitle } from '@/components/panels/common/SectionTitle';
14
+
15
+ /** A labelled numeric field with a hint, an Apply button, and the current value. */
16
+ const NumberControl = ({
17
+ label,
18
+ hint,
19
+ value,
20
+ current,
21
+ onChange,
22
+ onApply,
23
+ ...inputProps
24
+ }: {
25
+ label: string;
26
+ hint: string;
27
+ value: string;
28
+ current: string;
29
+ onChange: (value: string) => void;
30
+ onApply: () => void;
31
+ } & Record<string, unknown>) => (
32
+ <div className={styles.field}>
33
+ <span className={styles.label}>{label}</span>
34
+ <span className={styles.description}>{hint}</span>
35
+ <div className={styles.inputRow}>
36
+ <VscodeTextfield
37
+ className={styles.input}
38
+ type="number"
39
+ value={value}
40
+ onChange={(e: any) => onChange(e.target.value)}
41
+ {...inputProps}
42
+ />
43
+ <VscodeButton onClick={onApply}>Apply</VscodeButton>
44
+ </div>
45
+ <span className={styles.current}>Current: {current}</span>
46
+ </div>
47
+ );
48
+
49
+ export const LocalGraphRunnerPanel = () => {
50
+ const system = useSystem();
51
+ const store = system.localGraphRunnerStore;
52
+ const executionSpeed = useStore(store, (state) => state.executionSpeed);
53
+ const stepDelay = useStore(store, (state) => state.stepDelay);
54
+ const tickInterval = useStore(store, (state) => state.tickInterval);
55
+ const isExecuting = useStore(store, (state) => state.isExecuting);
56
+ const isPaused = useStore(store, (state) => state.isPaused);
57
+ const activeRuns = useStore(store, (state) => state.activeRuns);
58
+
59
+ const [speedInput, setSpeedInput] = useState(executionSpeed.toString());
60
+ const [delayInput, setDelayInput] = useState(stepDelay.toString());
61
+ const [tickIntervalInput, setTickIntervalInput] = useState(
62
+ tickInterval.toString()
63
+ );
64
+
65
+ const handleSetSpeed = () => {
66
+ const speed = parseFloat(speedInput);
67
+ if (!isNaN(speed) && speed > 0) {
68
+ store.getState().setExecutionSpeed(speed);
69
+ }
70
+ };
71
+
72
+ const handleSetDelay = () => {
73
+ const delay = parseInt(delayInput, 10);
74
+ if (!isNaN(delay) && delay >= 0) {
75
+ store.getState().setStepDelay(delay);
76
+ }
77
+ };
78
+
79
+ const handleSetTickInterval = () => {
80
+ const interval = parseInt(tickIntervalInput, 10);
81
+ if (!isNaN(interval) && interval >= 0) {
82
+ store.getState().setTickInterval(interval);
83
+ }
84
+ };
85
+
86
+ const applyPreset = (speed: number, delay: number, tick: number) => {
87
+ store.getState().setExecutionSpeed(speed);
88
+ store.getState().setStepDelay(delay);
89
+ store.getState().setTickInterval(tick);
90
+ setSpeedInput(speed.toString());
91
+ setDelayInput(delay.toString());
92
+ setTickIntervalInput(tick.toString());
93
+ };
94
+
95
+ const statusLabel = isExecuting ? (isPaused ? 'Paused' : 'Running') : 'Idle';
96
+
97
+ return (
98
+ <BasePanel>
99
+ <SectionTitle>Status</SectionTitle>
100
+ <div className={styles.statusRow}>
101
+ <span className={styles.label}>Status</span>
102
+ <VscodeBadge>{statusLabel}</VscodeBadge>
103
+ </div>
104
+ <div className={styles.statusRow}>
105
+ <span className={styles.label}>Active runs</span>
106
+ <span className={styles.statusValue}>{activeRuns}</span>
107
+ </div>
108
+
109
+ <VscodeDivider className={styles.divider} />
110
+ <SectionTitle>Execution Speed</SectionTitle>
111
+
112
+ <NumberControl
113
+ label="Speed Multiplier"
114
+ hint="0.1 = slow, 1.0 = normal, 10 = fast"
115
+ value={speedInput}
116
+ current={`${executionSpeed}x`}
117
+ onChange={setSpeedInput}
118
+ onApply={handleSetSpeed}
119
+ placeholder="1.0"
120
+ min={0.01}
121
+ max={10}
122
+ step={0.01}
123
+ />
124
+
125
+ <NumberControl
126
+ label="Step Delay (ms)"
127
+ hint="delay between execution steps"
128
+ value={delayInput}
129
+ current={`${stepDelay}ms`}
130
+ onChange={setDelayInput}
131
+ onApply={handleSetDelay}
132
+ placeholder="0"
133
+ min={0}
134
+ />
135
+
136
+ <NumberControl
137
+ label="Tick Interval (ms)"
138
+ hint="delay between tick events"
139
+ value={tickIntervalInput}
140
+ current={`${tickInterval}ms`}
141
+ onChange={setTickIntervalInput}
142
+ onApply={handleSetTickInterval}
143
+ placeholder="50"
144
+ min={0}
145
+ />
146
+
147
+ <div className={styles.field}>
148
+ <span className={styles.label}>Quick Presets</span>
149
+ <div className={styles.presets}>
150
+ <VscodeButton secondary onClick={() => applyPreset(0.1, 500, 1000)}>
151
+ Very Slow
152
+ </VscodeButton>
153
+ <VscodeButton secondary onClick={() => applyPreset(0.5, 100, 200)}>
154
+ Slow
155
+ </VscodeButton>
156
+ <VscodeButton secondary onClick={() => applyPreset(1.0, 0, 50)}>
157
+ Normal
158
+ </VscodeButton>
159
+ <VscodeButton secondary onClick={() => applyPreset(5.0, 0, 16)}>
160
+ Fast
161
+ </VscodeButton>
162
+ </div>
163
+ </div>
164
+
165
+ <VscodeDivider className={styles.divider} />
166
+ <SectionTitle>How to Use</SectionTitle>
167
+ <ul className={styles.helpList}>
168
+ <li>
169
+ <strong>Speed Multiplier:</strong> Controls how fast the engine
170
+ executes. Lower values = slower execution, good for debugging.
171
+ </li>
172
+ <li>
173
+ <strong>Step Delay:</strong> Adds a delay between each execution step.
174
+ Useful for visualizing graph execution flow.
175
+ </li>
176
+ <li>
177
+ <strong>Tick Interval:</strong> Controls the delay between tick events
178
+ (default 50ms). Lower values = faster ticks.
179
+ </li>
180
+ <li>
181
+ <strong>Pause/Step:</strong> Use the toolbar buttons to pause
182
+ execution and step through one node at a time.
183
+ </li>
184
+ </ul>
185
+ </BasePanel>
186
+ );
187
+ };
@@ -0,0 +1,41 @@
1
+ import { createStore } from 'zustand';
2
+
3
+ export interface LocalGraphRunnerStore {
4
+ // Execution settings
5
+ executionSpeed: number; // Multiplier for execution speed (1.0 = normal)
6
+ stepDelay: number; // Delay in milliseconds between steps
7
+ tickInterval: number; // Delay in milliseconds between tick events
8
+
9
+ // Runtime state
10
+ isExecuting: boolean;
11
+ isPaused: boolean;
12
+ activeRuns: number;
13
+
14
+ // Actions
15
+ setExecutionSpeed: (speed: number) => void;
16
+ setStepDelay: (delay: number) => void;
17
+ setTickInterval: (interval: number) => void;
18
+ setIsExecuting: (isExecuting: boolean) => void;
19
+ setIsPaused: (isPaused: boolean) => void;
20
+ setActiveRuns: (count: number) => void;
21
+ }
22
+
23
+ export const localGraphRunnerStoreFactory = () => {
24
+ return createStore<LocalGraphRunnerStore>((set) => ({
25
+ // Initial state
26
+ executionSpeed: 1.0,
27
+ stepDelay: 0,
28
+ tickInterval: 50,
29
+ isExecuting: false,
30
+ isPaused: false,
31
+ activeRuns: 0,
32
+
33
+ // Actions
34
+ setExecutionSpeed: (executionSpeed) => set({ executionSpeed }),
35
+ setStepDelay: (stepDelay) => set({ stepDelay }),
36
+ setTickInterval: (tickInterval) => set({ tickInterval }),
37
+ setIsExecuting: (isExecuting) => set({ isExecuting }),
38
+ setIsPaused: (isPaused) => set({ isPaused }),
39
+ setActiveRuns: (activeRuns) => set({ activeRuns })
40
+ }));
41
+ };
@@ -0,0 +1,82 @@
1
+ /* Local Graph Runner panel — follows the shared panel conventions: BasePanel
2
+ chrome, SectionTitle headers, VscodeDivider separators, and the design
3
+ system's spacing/type scale (no card backgrounds or bespoke pixel values). */
4
+
5
+ .divider {
6
+ margin: 0.4rem 0;
7
+ }
8
+
9
+ /* Status rows */
10
+ .statusRow {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: var(--space-2, 0.5rem);
14
+ padding: 0.1rem 0;
15
+ }
16
+
17
+ .statusValue {
18
+ font-size: var(--fs-label, 0.8rem);
19
+ font-variant-numeric: tabular-nums;
20
+ color: var(--ds-fg);
21
+ }
22
+
23
+ /* Labelled control rows (mirrors the Settings panel) */
24
+ .field {
25
+ display: flex;
26
+ flex-direction: column;
27
+ gap: 0.15rem;
28
+ padding: var(--space-1, 0.25rem) 0;
29
+ }
30
+
31
+ .label {
32
+ font-size: var(--fs-label, 0.8rem);
33
+ color: var(--ds-fg);
34
+ line-height: 1.3;
35
+ }
36
+
37
+ .description {
38
+ font-size: var(--fs-desc, 0.72rem);
39
+ color: var(--ds-fg-muted);
40
+ line-height: 1.35;
41
+ }
42
+
43
+ .inputRow {
44
+ display: flex;
45
+ gap: var(--space-2, 0.5rem);
46
+ align-items: center;
47
+ margin-top: 0.15rem;
48
+ }
49
+
50
+ .input {
51
+ flex: 1;
52
+ min-width: 0;
53
+ }
54
+
55
+ .current {
56
+ font-size: var(--fs-desc, 0.72rem);
57
+ color: var(--ds-fg-muted);
58
+ }
59
+
60
+ .presets {
61
+ display: flex;
62
+ gap: var(--space-2, 0.5rem);
63
+ flex-wrap: wrap;
64
+ margin-top: 0.15rem;
65
+ }
66
+
67
+ /* How-to-use list */
68
+ .helpList {
69
+ display: flex;
70
+ flex-direction: column;
71
+ gap: var(--space-2, 0.5rem);
72
+ margin: 0.25rem 0 0;
73
+ padding-left: 1.1rem;
74
+ font-size: var(--fs-desc, 0.72rem);
75
+ line-height: 1.5;
76
+ color: var(--ds-fg-muted);
77
+ }
78
+
79
+ .helpList strong {
80
+ color: var(--ds-fg);
81
+ font-weight: 600;
82
+ }