@invect/ui 0.0.1

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 (419) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -0
  3. package/dist/Invect-CWpIwZ5F.js +92738 -0
  4. package/dist/Invect.d.ts +25 -0
  5. package/dist/InvectShell.d.ts +14 -0
  6. package/dist/api/agent-tools.api.d.ts +1 -0
  7. package/dist/api/client.d.ts +207 -0
  8. package/dist/api/credentials.api.d.ts +47 -0
  9. package/dist/api/executions.api.d.ts +43 -0
  10. package/dist/api/flows.api.d.ts +100 -0
  11. package/dist/api/index.d.ts +9 -0
  12. package/dist/api/node-data.api.d.ts +66 -0
  13. package/dist/api/query-keys.d.ts +22 -0
  14. package/dist/api/triggers.api.d.ts +44 -0
  15. package/dist/api/types.d.ts +147 -0
  16. package/dist/api/use-flow-run-stream.d.ts +12 -0
  17. package/dist/assets/invect-branding.d.ts +4 -0
  18. package/dist/assets/provider-icons/index.d.ts +8 -0
  19. package/dist/babel-C9OtljFZ.js +9721 -0
  20. package/dist/components/PageLayout.d.ts +17 -0
  21. package/dist/components/chat/ChatInput.d.ts +17 -0
  22. package/dist/components/chat/ChatMessageList.d.ts +14 -0
  23. package/dist/components/chat/ChatModelSelector.d.ts +11 -0
  24. package/dist/components/chat/ChatPanel.d.ts +19 -0
  25. package/dist/components/chat/ChatPromptOverlay.d.ts +13 -0
  26. package/dist/components/chat/ChatProviderSelector.d.ts +9 -0
  27. package/dist/components/chat/ChatSettingsPanel.d.ts +11 -0
  28. package/dist/components/chat/InlineCredentialSetup.d.ts +9 -0
  29. package/dist/components/chat/MarkdownRenderer.d.ts +7 -0
  30. package/dist/components/chat/chat-memory.d.ts +21 -0
  31. package/dist/components/chat/chat.store.d.ts +416 -0
  32. package/dist/components/chat/index.d.ts +5 -0
  33. package/dist/components/chat/use-chat.d.ts +28 -0
  34. package/dist/components/credentials/CreateCredentialModal.d.ts +13 -0
  35. package/dist/components/credentials/CredentialDetailDialog.d.ts +17 -0
  36. package/dist/components/credentials/EditCredentialModal.d.ts +11 -0
  37. package/dist/components/credentials/OAuth2ConnectButton.d.ts +38 -0
  38. package/dist/components/credentials/OAuth2ProviderSelector.d.ts +15 -0
  39. package/dist/components/credentials/credential-utils.d.ts +12 -0
  40. package/dist/components/credentials/index.d.ts +9 -0
  41. package/dist/components/dashboard/FailedRunsAlert.d.ts +3 -0
  42. package/dist/components/dashboard/FlowCard.d.ts +7 -0
  43. package/dist/components/dashboard/RecentActivityTable.d.ts +9 -0
  44. package/dist/components/dashboard/StatCard.d.ts +10 -0
  45. package/dist/components/dashboard/index.d.ts +5 -0
  46. package/dist/components/dashboard/status-helpers.d.ts +5 -0
  47. package/dist/components/flow-editor/ActionsSidebar.d.ts +2 -0
  48. package/dist/components/flow-editor/FlowEditor.d.ts +21 -0
  49. package/dist/components/flow-editor/FlowHeader.d.ts +9 -0
  50. package/dist/components/flow-editor/FlowLayout.d.ts +24 -0
  51. package/dist/components/flow-editor/ModeSwitcher.d.ts +7 -0
  52. package/dist/components/flow-editor/NodeSidebar.d.ts +24 -0
  53. package/dist/components/flow-editor/RunControls.d.ts +12 -0
  54. package/dist/components/flow-editor/ToolConfigPanel.d.ts +16 -0
  55. package/dist/components/flow-editor/ValidationPanel.d.ts +5 -0
  56. package/dist/components/flow-editor/flow-editor.store.d.ts +1 -0
  57. package/dist/components/flow-editor/index.d.ts +6 -0
  58. package/dist/components/flow-editor/inline-edit.d.ts +10 -0
  59. package/dist/components/flow-editor/node-config-panel/ConfigFieldWithTemplate.d.ts +26 -0
  60. package/dist/components/flow-editor/node-config-panel/CredentialCombobox.d.ts +21 -0
  61. package/dist/components/flow-editor/node-config-panel/CredentialsSection.d.ts +19 -0
  62. package/dist/components/flow-editor/node-config-panel/DroppableInput.d.ts +20 -0
  63. package/dist/components/flow-editor/node-config-panel/DynamicSelectField.d.ts +22 -0
  64. package/dist/components/flow-editor/node-config-panel/JsonPreviewPanel.d.ts +25 -0
  65. package/dist/components/flow-editor/node-config-panel/NodeConfigPanel.d.ts +14 -0
  66. package/dist/components/flow-editor/node-config-panel/NodeConfigPanelHeader.d.ts +15 -0
  67. package/dist/components/flow-editor/node-config-panel/ParametersSection.d.ts +16 -0
  68. package/dist/components/flow-editor/node-config-panel/SearchableSelectField.d.ts +17 -0
  69. package/dist/components/flow-editor/node-config-panel/SwitchCasesField.d.ts +18 -0
  70. package/dist/components/flow-editor/node-config-panel/hooks/index.d.ts +2 -0
  71. package/dist/components/flow-editor/node-config-panel/hooks/use-node-config-panel-state.d.ts +24 -0
  72. package/dist/components/flow-editor/node-config-panel/hooks/use-node-execution.d.ts +46 -0
  73. package/dist/components/flow-editor/node-config-panel/hooks/use-upstream-slots.d.ts +16 -0
  74. package/dist/components/flow-editor/node-config-panel/panels/AgentToolsPanel.d.ts +18 -0
  75. package/dist/components/flow-editor/node-config-panel/panels/ConfigurationPanel.d.ts +49 -0
  76. package/dist/components/flow-editor/node-config-panel/panels/DataMapperPane.d.ts +40 -0
  77. package/dist/components/flow-editor/node-config-panel/panels/InputPanel.d.ts +49 -0
  78. package/dist/components/flow-editor/node-config-panel/panels/OutputPanel.d.ts +7 -0
  79. package/dist/components/flow-editor/node-config-panel/panels/index.d.ts +4 -0
  80. package/dist/components/flow-editor/node-config-panel/types.d.ts +19 -0
  81. package/dist/components/flow-editor/node-config-panel/use-node-config-panel-store.d.ts +49 -0
  82. package/dist/components/flow-editor/node-config-panel/use-node-config-state.d.ts +26 -0
  83. package/dist/components/flow-editor/node-config-panel/use-run-node.d.ts +16 -0
  84. package/dist/components/flow-editor/node-config-panel/utils.d.ts +9 -0
  85. package/dist/components/flow-editor/serialize-to-sdk.d.ts +20 -0
  86. package/dist/components/flow-editor/toolbar-context.d.ts +2 -0
  87. package/dist/components/flow-editor/use-copy-paste.d.ts +7 -0
  88. package/dist/components/flow-editor/use-copy-paste.types.d.ts +38 -0
  89. package/dist/components/flow-editor/use-flow-editor.d.ts +44 -0
  90. package/dist/components/flow-runs-table/FlowRunsTable.d.ts +6 -0
  91. package/dist/components/flow-runs-table/index.d.ts +1 -0
  92. package/dist/components/flow-viewer/FlowRunsView.d.ts +7 -0
  93. package/dist/components/flow-viewer/FlowStatusView.d.ts +21 -0
  94. package/dist/components/flow-viewer/RunSelector.d.ts +13 -0
  95. package/dist/components/flow-viewer/RunsSidebar.d.ts +14 -0
  96. package/dist/components/flow-viewer/agent-tool-executions-list.d.ts +7 -0
  97. package/dist/components/flow-viewer/index.d.ts +1 -0
  98. package/dist/components/flow-viewer/logs-panel.d.ts +18 -0
  99. package/dist/components/flow-viewer/use-execution-log-data.d.ts +113 -0
  100. package/dist/components/graph/BatchFlowEdge.d.ts +33 -0
  101. package/dist/components/graph/LayoutSelector.d.ts +9 -0
  102. package/dist/components/graph/index.d.ts +47 -0
  103. package/dist/components/graph/styleUtils.d.ts +124 -0
  104. package/dist/components/nodes/AgentConfigPanel.d.ts +24 -0
  105. package/dist/components/nodes/AgentNode.d.ts +8 -0
  106. package/dist/components/nodes/AgentToolsBox.d.ts +41 -0
  107. package/dist/components/nodes/NodeAppendix.d.ts +19 -0
  108. package/dist/components/nodes/NodeStatusIndicator.d.ts +30 -0
  109. package/dist/components/nodes/NodeViewContext.d.ts +18 -0
  110. package/dist/components/nodes/ToolParamField.d.ts +28 -0
  111. package/dist/components/nodes/ToolSelectorModal.d.ts +80 -0
  112. package/dist/components/nodes/ToolSelectorParts.d.ts +30 -0
  113. package/dist/components/nodes/UniversalNode.d.ts +2 -0
  114. package/dist/components/nodes/createContextAwareNodes.d.ts +6 -0
  115. package/dist/components/nodes/index.d.ts +22 -0
  116. package/dist/components/nodes/nodeRegistry.d.ts +13 -0
  117. package/dist/components/nodes/withNodeContext.d.ts +7 -0
  118. package/dist/components/shared/InvectLoader.d.ts +8 -0
  119. package/dist/components/shared/InvectLogo.d.ts +9 -0
  120. package/dist/components/shared/ProviderIcon.d.ts +23 -0
  121. package/dist/components/side-menu/side-menu.d.ts +4 -0
  122. package/dist/components/sidebar/BaseSidebar.d.ts +17 -0
  123. package/dist/components/sidebar/index.d.ts +1 -0
  124. package/dist/components/triggers/CronPreview.d.ts +12 -0
  125. package/dist/components/triggers/index.d.ts +1 -0
  126. package/dist/components/ui/alert-dialog.d.ts +18 -0
  127. package/dist/components/ui/badge.d.ts +9 -0
  128. package/dist/components/ui/button.d.ts +13 -0
  129. package/dist/components/ui/card.d.ts +9 -0
  130. package/dist/components/ui/codemirror-js-editor.d.ts +25 -0
  131. package/dist/components/ui/codemirror-json-editor.d.ts +18 -0
  132. package/dist/components/ui/codemirror-nunjucks-editor.d.ts +13 -0
  133. package/dist/components/ui/codemirror-vscode-theme.d.ts +24 -0
  134. package/dist/components/ui/collapsible.d.ts +6 -0
  135. package/dist/components/ui/command.d.ts +18 -0
  136. package/dist/components/ui/dialog.d.ts +18 -0
  137. package/dist/components/ui/dropdown-menu.d.ts +25 -0
  138. package/dist/components/ui/empty-state.d.ts +21 -0
  139. package/dist/components/ui/input.d.ts +3 -0
  140. package/dist/components/ui/label.d.ts +4 -0
  141. package/dist/components/ui/popover.d.ts +10 -0
  142. package/dist/components/ui/resizable.d.ts +8 -0
  143. package/dist/components/ui/scroll-area.d.ts +5 -0
  144. package/dist/components/ui/select.d.ts +18 -0
  145. package/dist/components/ui/separator.d.ts +4 -0
  146. package/dist/components/ui/slider.d.ts +4 -0
  147. package/dist/components/ui/switch.d.ts +3 -0
  148. package/dist/components/ui/table.d.ts +10 -0
  149. package/dist/components/ui/textarea.d.ts +3 -0
  150. package/dist/components/ui/tooltip.d.ts +7 -0
  151. package/dist/components/ui/tree-view.d.ts +107 -0
  152. package/dist/contexts/AgentToolCallbacksContext.d.ts +23 -0
  153. package/dist/contexts/ApiContext.d.ts +11 -0
  154. package/dist/contexts/FlowDataContext.d.ts +9 -0
  155. package/dist/contexts/NodeRegistryContext.d.ts +14 -0
  156. package/dist/contexts/PluginRegistryContext.d.ts +39 -0
  157. package/dist/contexts/ThemeProvider.d.ts +18 -0
  158. package/dist/contexts/ValidationContext.d.ts +22 -0
  159. package/dist/demo/DemoInvect.d.ts +11 -0
  160. package/dist/demo/FlowViewer.d.ts +31 -0
  161. package/dist/demo/demo-api-client.d.ts +33 -0
  162. package/dist/demo/index.d.ts +6 -0
  163. package/dist/demo/sample-data.d.ts +1538 -0
  164. package/dist/demo.d.ts +2 -0
  165. package/dist/demo.js +2774 -0
  166. package/dist/estree-ClbRfS-1.js +7076 -0
  167. package/dist/fonts/geist-cyrillic-wght-normal.woff2 +0 -0
  168. package/dist/fonts/geist-latin-ext-wght-normal.woff2 +0 -0
  169. package/dist/fonts/geist-latin-wght-normal.woff2 +0 -0
  170. package/dist/fonts/iosevka-latin-400-normal.woff2 +0 -0
  171. package/dist/hooks/index.d.ts +1 -0
  172. package/dist/hooks/use-document-title.d.ts +1 -0
  173. package/dist/hooks/use-flow-data.d.ts +22 -0
  174. package/dist/hooks/use-invect-portal-class.d.ts +21 -0
  175. package/dist/hooks/useFlowEditorStore.d.ts +1 -0
  176. package/dist/index.css +3 -0
  177. package/dist/index.d.ts +22 -0
  178. package/dist/index.js +717 -0
  179. package/dist/lib/utils.d.ts +2 -0
  180. package/dist/prettier.d.ts +13 -0
  181. package/dist/routes/all-flow-runs.d.ts +5 -0
  182. package/dist/routes/credentials.d.ts +5 -0
  183. package/dist/routes/flow-route-layout.d.ts +19 -0
  184. package/dist/routes/flow-runs.d.ts +5 -0
  185. package/dist/routes/flow.d.ts +5 -0
  186. package/dist/routes/home.d.ts +5 -0
  187. package/dist/services/index.d.ts +1 -0
  188. package/dist/standalone-C3Df7W52.js +3463 -0
  189. package/dist/stores/executionViewStore.d.ts +64 -0
  190. package/dist/stores/flow-editor.store.d.ts +137 -0
  191. package/dist/stores/flowEditorStore.d.ts +1 -0
  192. package/dist/stores/index.d.ts +2 -0
  193. package/dist/stores/uiStore.d.ts +45 -0
  194. package/dist/types/agent-tools.types.d.ts +53 -0
  195. package/dist/types/index.d.ts +2 -0
  196. package/dist/types/node-definition.types.d.ts +85 -0
  197. package/dist/types/plugin.types.d.ts +100 -0
  198. package/dist/utils/credentialBranding.d.ts +8 -0
  199. package/dist/utils/credentialFiltering.d.ts +20 -0
  200. package/dist/utils/flowTransformations.d.ts +16 -0
  201. package/dist/utils/layoutUtils.d.ts +23 -0
  202. package/dist/utils/nodeReferenceUtils.d.ts +37 -0
  203. package/dist/vendor.d.ts +5 -0
  204. package/package.json +130 -0
  205. package/src/.DS_Store +0 -0
  206. package/src/Invect.tsx +229 -0
  207. package/src/InvectShell.tsx +55 -0
  208. package/src/api/agent-tools.api.ts +23 -0
  209. package/src/api/client.ts +899 -0
  210. package/src/api/credentials.api.ts +197 -0
  211. package/src/api/executions.api.ts +228 -0
  212. package/src/api/flows.api.ts +195 -0
  213. package/src/api/index.ts +17 -0
  214. package/src/api/node-data.api.ts +167 -0
  215. package/src/api/query-keys.ts +44 -0
  216. package/src/api/triggers.api.ts +120 -0
  217. package/src/api/types.ts +212 -0
  218. package/src/api/use-flow-run-stream.ts +206 -0
  219. package/src/app.css +560 -0
  220. package/src/assets/.DS_Store +0 -0
  221. package/src/assets/favicon.ico +0 -0
  222. package/src/assets/fonts/geist-cyrillic-wght-normal.woff2 +0 -0
  223. package/src/assets/fonts/geist-latin-ext-wght-normal.woff2 +0 -0
  224. package/src/assets/fonts/geist-latin-wght-normal.woff2 +0 -0
  225. package/src/assets/fonts/iosevka-latin-400-normal.woff2 +0 -0
  226. package/src/assets/invect-branding.ts +51 -0
  227. package/src/assets/provider-icons/anthropic.svg +1 -0
  228. package/src/assets/provider-icons/anthropic_light.svg +1 -0
  229. package/src/assets/provider-icons/github.svg +1 -0
  230. package/src/assets/provider-icons/github_light.svg +1 -0
  231. package/src/assets/provider-icons/gmail.svg +1 -0
  232. package/src/assets/provider-icons/google_calendar.svg +1 -0
  233. package/src/assets/provider-icons/google_docs.svg +1 -0
  234. package/src/assets/provider-icons/google_drive.svg +1 -0
  235. package/src/assets/provider-icons/google_sheets.svg +1 -0
  236. package/src/assets/provider-icons/index.ts +55 -0
  237. package/src/assets/provider-icons/linear.svg +1 -0
  238. package/src/assets/provider-icons/openai.svg +1 -0
  239. package/src/assets/provider-icons/postgres.svg +1 -0
  240. package/src/assets/provider-icons/slack.svg +1 -0
  241. package/src/assets/small-loader-dark.svg +22 -0
  242. package/src/assets/small-loader-light.svg +22 -0
  243. package/src/assets/small.svg +7 -0
  244. package/src/components/.DS_Store +0 -0
  245. package/src/components/PageLayout.tsx +55 -0
  246. package/src/components/chat/ChatInput.tsx +115 -0
  247. package/src/components/chat/ChatMessageList.tsx +788 -0
  248. package/src/components/chat/ChatModelSelector.tsx +208 -0
  249. package/src/components/chat/ChatPanel.tsx +243 -0
  250. package/src/components/chat/ChatPromptOverlay.tsx +150 -0
  251. package/src/components/chat/ChatProviderSelector.tsx +135 -0
  252. package/src/components/chat/ChatSettingsPanel.tsx +277 -0
  253. package/src/components/chat/InlineCredentialSetup.tsx +343 -0
  254. package/src/components/chat/MarkdownRenderer.tsx +140 -0
  255. package/src/components/chat/chat-memory.ts +88 -0
  256. package/src/components/chat/chat.store.ts +479 -0
  257. package/src/components/chat/index.ts +5 -0
  258. package/src/components/chat/use-chat.ts +473 -0
  259. package/src/components/credentials/CreateCredentialModal.tsx +609 -0
  260. package/src/components/credentials/CredentialDetailDialog.tsx +882 -0
  261. package/src/components/credentials/EditCredentialModal.tsx +399 -0
  262. package/src/components/credentials/OAuth2ConnectButton.tsx +288 -0
  263. package/src/components/credentials/OAuth2ProviderSelector.tsx +360 -0
  264. package/src/components/credentials/credential-utils.ts +99 -0
  265. package/src/components/credentials/index.ts +10 -0
  266. package/src/components/dashboard/FailedRunsAlert.tsx +67 -0
  267. package/src/components/dashboard/FlowCard.tsx +64 -0
  268. package/src/components/dashboard/RecentActivityTable.tsx +92 -0
  269. package/src/components/dashboard/StatCard.tsx +32 -0
  270. package/src/components/dashboard/index.ts +5 -0
  271. package/src/components/dashboard/status-helpers.tsx +102 -0
  272. package/src/components/flow-editor/ActionsSidebar.tsx +503 -0
  273. package/src/components/flow-editor/FlowEditor.tsx +1002 -0
  274. package/src/components/flow-editor/FlowHeader.tsx +87 -0
  275. package/src/components/flow-editor/FlowLayout.tsx +117 -0
  276. package/src/components/flow-editor/ModeSwitcher.tsx +49 -0
  277. package/src/components/flow-editor/NodeSidebar.tsx +343 -0
  278. package/src/components/flow-editor/RunControls.tsx +109 -0
  279. package/src/components/flow-editor/ToolConfigPanel.tsx +434 -0
  280. package/src/components/flow-editor/ValidationPanel.tsx +167 -0
  281. package/src/components/flow-editor/flow-editor.store.ts +2 -0
  282. package/src/components/flow-editor/index.ts +6 -0
  283. package/src/components/flow-editor/inline-edit.tsx +111 -0
  284. package/src/components/flow-editor/node-config-panel/ConfigFieldWithTemplate.tsx +334 -0
  285. package/src/components/flow-editor/node-config-panel/CredentialCombobox.tsx +217 -0
  286. package/src/components/flow-editor/node-config-panel/CredentialsSection.tsx +154 -0
  287. package/src/components/flow-editor/node-config-panel/DroppableInput.tsx +45 -0
  288. package/src/components/flow-editor/node-config-panel/DynamicSelectField.tsx +223 -0
  289. package/src/components/flow-editor/node-config-panel/JsonPreviewPanel.tsx +134 -0
  290. package/src/components/flow-editor/node-config-panel/NodeConfigPanel.tsx +650 -0
  291. package/src/components/flow-editor/node-config-panel/NodeConfigPanelHeader.tsx +91 -0
  292. package/src/components/flow-editor/node-config-panel/ParametersSection.tsx +144 -0
  293. package/src/components/flow-editor/node-config-panel/SearchableSelectField.tsx +126 -0
  294. package/src/components/flow-editor/node-config-panel/SwitchCasesField.tsx +212 -0
  295. package/src/components/flow-editor/node-config-panel/hooks/index.ts +2 -0
  296. package/src/components/flow-editor/node-config-panel/hooks/use-node-config-panel-state.ts +284 -0
  297. package/src/components/flow-editor/node-config-panel/hooks/use-node-execution.ts +287 -0
  298. package/src/components/flow-editor/node-config-panel/hooks/use-upstream-slots.ts +310 -0
  299. package/src/components/flow-editor/node-config-panel/panels/AgentToolsPanel.tsx +837 -0
  300. package/src/components/flow-editor/node-config-panel/panels/ConfigurationPanel.tsx +383 -0
  301. package/src/components/flow-editor/node-config-panel/panels/DataMapperPane.tsx +456 -0
  302. package/src/components/flow-editor/node-config-panel/panels/InputPanel.tsx +338 -0
  303. package/src/components/flow-editor/node-config-panel/panels/OutputPanel.tsx +109 -0
  304. package/src/components/flow-editor/node-config-panel/panels/index.ts +4 -0
  305. package/src/components/flow-editor/node-config-panel/types.ts +20 -0
  306. package/src/components/flow-editor/node-config-panel/use-node-config-panel-store.ts +283 -0
  307. package/src/components/flow-editor/node-config-panel/use-node-config-state.ts +172 -0
  308. package/src/components/flow-editor/node-config-panel/use-run-node.ts +147 -0
  309. package/src/components/flow-editor/node-config-panel/utils.ts +73 -0
  310. package/src/components/flow-editor/serialize-to-sdk.ts +204 -0
  311. package/src/components/flow-editor/toolbar-context.ts +9 -0
  312. package/src/components/flow-editor/use-copy-paste.ts +575 -0
  313. package/src/components/flow-editor/use-copy-paste.types.ts +35 -0
  314. package/src/components/flow-editor/use-flow-editor.ts +241 -0
  315. package/src/components/flow-runs-table/FlowRunsTable.tsx +631 -0
  316. package/src/components/flow-runs-table/index.ts +1 -0
  317. package/src/components/flow-viewer/FlowRunsView.tsx +268 -0
  318. package/src/components/flow-viewer/FlowStatusView.tsx +351 -0
  319. package/src/components/flow-viewer/RunSelector.tsx +422 -0
  320. package/src/components/flow-viewer/RunsSidebar.tsx +125 -0
  321. package/src/components/flow-viewer/agent-tool-executions-list.tsx +298 -0
  322. package/src/components/flow-viewer/index.ts +1 -0
  323. package/src/components/flow-viewer/logs-panel.tsx +567 -0
  324. package/src/components/flow-viewer/use-execution-log-data.ts +374 -0
  325. package/src/components/graph/BatchFlowEdge.tsx +229 -0
  326. package/src/components/graph/LayoutSelector.tsx +42 -0
  327. package/src/components/graph/index.ts +61 -0
  328. package/src/components/graph/styleUtils.ts +375 -0
  329. package/src/components/nodes/.DS_Store +0 -0
  330. package/src/components/nodes/AgentConfigPanel.tsx +1033 -0
  331. package/src/components/nodes/AgentNode.tsx +298 -0
  332. package/src/components/nodes/AgentToolsBox.tsx +193 -0
  333. package/src/components/nodes/NodeAppendix.tsx +98 -0
  334. package/src/components/nodes/NodeStatusIndicator.tsx +74 -0
  335. package/src/components/nodes/NodeViewContext.tsx +45 -0
  336. package/src/components/nodes/ToolParamField.tsx +282 -0
  337. package/src/components/nodes/ToolSelectorModal.tsx +648 -0
  338. package/src/components/nodes/ToolSelectorParts.tsx +505 -0
  339. package/src/components/nodes/UniversalNode.tsx +356 -0
  340. package/src/components/nodes/createContextAwareNodes.ts +19 -0
  341. package/src/components/nodes/index.ts +45 -0
  342. package/src/components/nodes/nodeRegistry.ts +50 -0
  343. package/src/components/nodes/withNodeContext.tsx +55 -0
  344. package/src/components/shared/InvectLoader.tsx +59 -0
  345. package/src/components/shared/InvectLogo.tsx +59 -0
  346. package/src/components/shared/ProviderIcon.tsx +115 -0
  347. package/src/components/side-menu/side-menu.tsx +267 -0
  348. package/src/components/sidebar/BaseSidebar.tsx +148 -0
  349. package/src/components/sidebar/index.ts +1 -0
  350. package/src/components/triggers/CronPreview.tsx +243 -0
  351. package/src/components/triggers/index.ts +1 -0
  352. package/src/components/ui/alert-dialog.tsx +152 -0
  353. package/src/components/ui/badge.tsx +39 -0
  354. package/src/components/ui/button.tsx +58 -0
  355. package/src/components/ui/card.tsx +75 -0
  356. package/src/components/ui/codemirror-js-editor.tsx +432 -0
  357. package/src/components/ui/codemirror-json-editor.tsx +816 -0
  358. package/src/components/ui/codemirror-nunjucks-editor.tsx +451 -0
  359. package/src/components/ui/codemirror-vscode-theme.ts +243 -0
  360. package/src/components/ui/collapsible.tsx +12 -0
  361. package/src/components/ui/command.tsx +162 -0
  362. package/src/components/ui/dialog.tsx +140 -0
  363. package/src/components/ui/dropdown-menu.tsx +232 -0
  364. package/src/components/ui/empty-state.tsx +93 -0
  365. package/src/components/ui/input.tsx +26 -0
  366. package/src/components/ui/label.tsx +19 -0
  367. package/src/components/ui/popover.tsx +53 -0
  368. package/src/components/ui/resizable.tsx +61 -0
  369. package/src/components/ui/scroll-area.tsx +56 -0
  370. package/src/components/ui/select.tsx +179 -0
  371. package/src/components/ui/separator.tsx +26 -0
  372. package/src/components/ui/slider.tsx +58 -0
  373. package/src/components/ui/switch.tsx +22 -0
  374. package/src/components/ui/table.tsx +90 -0
  375. package/src/components/ui/textarea.tsx +23 -0
  376. package/src/components/ui/tooltip.tsx +54 -0
  377. package/src/components/ui/tree-view.tsx +574 -0
  378. package/src/contexts/AgentToolCallbacksContext.tsx +31 -0
  379. package/src/contexts/ApiContext.tsx +51 -0
  380. package/src/contexts/FlowDataContext.tsx +21 -0
  381. package/src/contexts/NodeRegistryContext.tsx +54 -0
  382. package/src/contexts/PluginRegistryContext.tsx +182 -0
  383. package/src/contexts/ThemeProvider.tsx +106 -0
  384. package/src/contexts/ValidationContext.tsx +122 -0
  385. package/src/demo/DemoInvect.tsx +42 -0
  386. package/src/demo/FlowViewer.tsx +294 -0
  387. package/src/demo/demo-api-client.ts +246 -0
  388. package/src/demo/index.ts +28 -0
  389. package/src/demo/sample-data.ts +1980 -0
  390. package/src/hooks/index.ts +1 -0
  391. package/src/hooks/use-document-title.ts +8 -0
  392. package/src/hooks/use-flow-data.ts +144 -0
  393. package/src/hooks/use-invect-portal-class.ts +27 -0
  394. package/src/hooks/useFlowEditorStore.ts +2 -0
  395. package/src/index.ts +70 -0
  396. package/src/lib/utils.ts +6 -0
  397. package/src/prettier.d.ts +13 -0
  398. package/src/routes/all-flow-runs.tsx +27 -0
  399. package/src/routes/credentials.tsx +362 -0
  400. package/src/routes/flow-route-layout.tsx +113 -0
  401. package/src/routes/flow-runs.tsx +22 -0
  402. package/src/routes/flow.tsx +22 -0
  403. package/src/routes/home.tsx +282 -0
  404. package/src/services/index.ts +6 -0
  405. package/src/stores/executionViewStore.ts +211 -0
  406. package/src/stores/flow-editor.store.ts +738 -0
  407. package/src/stores/flowEditorStore.ts +2 -0
  408. package/src/stores/index.ts +10 -0
  409. package/src/stores/uiStore.ts +189 -0
  410. package/src/types/agent-tools.types.ts +64 -0
  411. package/src/types/index.ts +5 -0
  412. package/src/types/node-definition.types.ts +104 -0
  413. package/src/types/plugin.types.ts +123 -0
  414. package/src/utils/credentialBranding.ts +116 -0
  415. package/src/utils/credentialFiltering.ts +68 -0
  416. package/src/utils/flowTransformations.ts +137 -0
  417. package/src/utils/layoutUtils.ts +127 -0
  418. package/src/utils/nodeReferenceUtils.ts +135 -0
  419. package/src/vendor.d.ts +7 -0
@@ -0,0 +1,197 @@
1
+ // Credential-related React Query hooks
2
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
3
+ import { useApiClient } from '../contexts/ApiContext';
4
+ import { queryKeys, getErrorMessage } from './query-keys';
5
+ import type { CredentialFilters, CreateCredentialInput, UpdateCredentialInput } from './types';
6
+
7
+ // Credential Queries
8
+ export function useCredentials(filters?: CredentialFilters, options?: { enabled?: boolean }) {
9
+ const apiClient = useApiClient();
10
+
11
+ return useQuery({
12
+ queryKey: queryKeys.credentials(filters),
13
+ queryFn: () => apiClient.listCredentials(filters),
14
+ staleTime: 1000 * 60 * 5,
15
+ enabled: options?.enabled ?? true,
16
+ });
17
+ }
18
+
19
+ export function useCredential(id: string) {
20
+ const apiClient = useApiClient();
21
+
22
+ return useQuery({
23
+ queryKey: queryKeys.credential(id),
24
+ queryFn: () => apiClient.getCredential(id),
25
+ enabled: Boolean(id),
26
+ staleTime: 1000 * 60,
27
+ });
28
+ }
29
+
30
+ export function useCredentialUsage(id: string, enabled: boolean = true) {
31
+ const apiClient = useApiClient();
32
+
33
+ return useQuery({
34
+ queryKey: queryKeys.credentialUsage(id),
35
+ queryFn: () => apiClient.getCredentialUsage(id),
36
+ enabled: enabled && Boolean(id),
37
+ staleTime: 1000 * 60,
38
+ });
39
+ }
40
+
41
+ // Credential Mutations
42
+ export function useCreateCredential() {
43
+ const apiClient = useApiClient();
44
+ const queryClient = useQueryClient();
45
+
46
+ return useMutation({
47
+ mutationFn: (input: CreateCredentialInput) => apiClient.createCredential(input),
48
+ onSuccess: () => {
49
+ queryClient.invalidateQueries({ queryKey: ['credentials'] });
50
+ },
51
+ onError: (error) => {
52
+ console.error('Error creating credential:', getErrorMessage(error));
53
+ },
54
+ });
55
+ }
56
+
57
+ export function useUpdateCredential() {
58
+ const apiClient = useApiClient();
59
+ const queryClient = useQueryClient();
60
+
61
+ return useMutation({
62
+ mutationFn: ({ id, data }: { id: string; data: UpdateCredentialInput }) =>
63
+ apiClient.updateCredential(id, data),
64
+ onSuccess: (_, { id }) => {
65
+ queryClient.invalidateQueries({ queryKey: ['credentials'] });
66
+ queryClient.invalidateQueries({ queryKey: queryKeys.credential(id) });
67
+ },
68
+ onError: (error) => {
69
+ console.error('Error updating credential:', getErrorMessage(error));
70
+ },
71
+ });
72
+ }
73
+
74
+ export function useDeleteCredential() {
75
+ const apiClient = useApiClient();
76
+ const queryClient = useQueryClient();
77
+
78
+ return useMutation({
79
+ mutationFn: (id: string) => apiClient.deleteCredential(id),
80
+ onSuccess: () => {
81
+ queryClient.invalidateQueries({ queryKey: ['credentials'] });
82
+ },
83
+ onError: (error) => {
84
+ console.error('Error deleting credential:', getErrorMessage(error));
85
+ },
86
+ });
87
+ }
88
+
89
+ export function useTestCredential() {
90
+ const apiClient = useApiClient();
91
+
92
+ return useMutation({
93
+ mutationFn: (id: string) => apiClient.testCredential(id),
94
+ onError: (error) => {
95
+ console.error('Error testing credential:', getErrorMessage(error));
96
+ },
97
+ });
98
+ }
99
+
100
+ // Test Credential Request Mutation (for testing API connections)
101
+ export function useTestCredentialRequest() {
102
+ const apiClient = useApiClient();
103
+
104
+ return useMutation({
105
+ mutationFn: (params: {
106
+ url: string;
107
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
108
+ headers?: Record<string, string>;
109
+ body?: string;
110
+ }) => apiClient.testCredentialRequest(params),
111
+ onError: (error) => {
112
+ console.error('Error testing credential request:', getErrorMessage(error));
113
+ },
114
+ });
115
+ }
116
+
117
+ // OAuth2 Queries
118
+ export function useOAuth2Providers() {
119
+ const apiClient = useApiClient();
120
+
121
+ return useQuery({
122
+ queryKey: ['oauth2', 'providers'],
123
+ queryFn: () => apiClient.getOAuth2Providers(),
124
+ staleTime: 1000 * 60 * 60, // 1 hour - providers don't change
125
+ });
126
+ }
127
+
128
+ export function useOAuth2Provider(providerId: string) {
129
+ const apiClient = useApiClient();
130
+
131
+ return useQuery({
132
+ queryKey: ['oauth2', 'provider', providerId],
133
+ queryFn: () => apiClient.getOAuth2Provider(providerId),
134
+ enabled: Boolean(providerId),
135
+ staleTime: 1000 * 60 * 60,
136
+ });
137
+ }
138
+
139
+ // OAuth2 Mutations
140
+ export function useStartOAuth2Flow() {
141
+ const apiClient = useApiClient();
142
+
143
+ return useMutation({
144
+ mutationFn: (params: {
145
+ providerId?: string;
146
+ clientId?: string;
147
+ clientSecret?: string;
148
+ redirectUri: string;
149
+ scopes?: string[];
150
+ returnUrl?: string;
151
+ credentialName?: string;
152
+ existingCredentialId?: string;
153
+ }) => apiClient.startOAuth2Flow(params),
154
+ onError: (error) => {
155
+ console.error('Error starting OAuth2 flow:', getErrorMessage(error));
156
+ },
157
+ });
158
+ }
159
+
160
+ export function useHandleOAuth2Callback() {
161
+ const apiClient = useApiClient();
162
+ const queryClient = useQueryClient();
163
+
164
+ return useMutation({
165
+ mutationFn: (params: {
166
+ code: string;
167
+ state: string;
168
+ clientId?: string;
169
+ clientSecret?: string;
170
+ redirectUri?: string;
171
+ }) => apiClient.handleOAuth2Callback(params),
172
+ onSuccess: () => {
173
+ // Invalidate both the list and all individual credential queries
174
+ // so the detail dialog picks up the new tokens
175
+ queryClient.invalidateQueries({ queryKey: ['credentials'] });
176
+ },
177
+ onError: (error) => {
178
+ console.error('Error handling OAuth2 callback:', getErrorMessage(error));
179
+ },
180
+ });
181
+ }
182
+
183
+ export function useRefreshOAuth2Credential() {
184
+ const apiClient = useApiClient();
185
+ const queryClient = useQueryClient();
186
+
187
+ return useMutation({
188
+ mutationFn: (credentialId: string) => apiClient.refreshOAuth2Credential(credentialId),
189
+ onSuccess: (_, credentialId) => {
190
+ queryClient.invalidateQueries({ queryKey: ['credentials'] });
191
+ queryClient.invalidateQueries({ queryKey: queryKeys.credential(credentialId) });
192
+ },
193
+ onError: (error) => {
194
+ console.error('Error refreshing OAuth2 credential:', getErrorMessage(error));
195
+ },
196
+ });
197
+ }
@@ -0,0 +1,228 @@
1
+ // Execution-related React Query hooks
2
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
3
+ import { useMemo } from 'react';
4
+ import { useApiClient } from '../contexts/ApiContext';
5
+ import { queryKeys, getErrorMessage } from './query-keys';
6
+ import { ValidationError } from './types';
7
+ import { type FlowRun, type FlowInputs } from '@invect/core/types';
8
+
9
+ // Execution Queries
10
+ // NOTE: Real-time updates are provided by useFlowRunStream (SSE).
11
+ // These hooks only do an initial fetch; the stream writes into the same cache keys.
12
+
13
+ export function useFlowRuns(flowId: string) {
14
+ const apiClient = useApiClient();
15
+
16
+ return useQuery({
17
+ queryKey: queryKeys.executions(flowId),
18
+ queryFn: () => apiClient.getFlowRunsByFlowId(flowId),
19
+ enabled: !!flowId,
20
+ });
21
+ }
22
+
23
+ export function useFlowRun(id: string) {
24
+ const apiClient = useApiClient();
25
+ return useQuery({
26
+ queryKey: queryKeys.flowRun(id),
27
+ queryFn: () => apiClient.getFlowRun(id),
28
+ enabled: !!id,
29
+ });
30
+ }
31
+
32
+ export function useNodeExecutions(flowRunId: string) {
33
+ const apiClient = useApiClient();
34
+
35
+ return useQuery({
36
+ queryKey: queryKeys.nodeExecutions(flowRunId),
37
+ queryFn: () => apiClient.getNodeExecutionsByFlowRun(flowRunId),
38
+ enabled: !!flowRunId,
39
+ });
40
+ }
41
+
42
+ export function useLatestFlowRun(flowId: string) {
43
+ const { data: executionsResponse } = useFlowRuns(flowId);
44
+ const executions = executionsResponse?.data || [];
45
+
46
+ const latestExecution = useMemo(() => {
47
+ if (!executions.length) {
48
+ return null;
49
+ }
50
+ return executions.sort(
51
+ (a: FlowRun, b: FlowRun) => new Date(b.startedAt).getTime() - new Date(a.startedAt).getTime(),
52
+ )[0];
53
+ }, [executions]);
54
+
55
+ return useFlowRun(latestExecution?.id || '');
56
+ }
57
+
58
+ export function useListFlowRuns(
59
+ flowId?: string,
60
+ status?: string,
61
+ page?: number,
62
+ limit?: number,
63
+ sortBy?: string,
64
+ sortOrder?: 'asc' | 'desc',
65
+ ) {
66
+ const apiClient = useApiClient();
67
+
68
+ const filter: Record<string, string[]> = {};
69
+ if (flowId) {
70
+ filter.flowId = [flowId];
71
+ }
72
+ if (status) {
73
+ filter.status = [status];
74
+ }
75
+
76
+ const queryOptions = {
77
+ filter: Object.keys(filter).length > 0 ? filter : undefined,
78
+ pagination: page && limit ? { page, limit } : undefined,
79
+ sort: sortBy && sortOrder ? { sortBy: sortBy as keyof FlowRun, sortOrder } : undefined,
80
+ };
81
+
82
+ return useQuery({
83
+ queryKey: queryKeys.allExecutions(flowId, status, page, limit, sortBy, sortOrder),
84
+ queryFn: () => apiClient.getAllFlowRuns(queryOptions),
85
+ staleTime: 1000 * 60 * 2, // 2 minutes
86
+ retry: (failureCount, error) => {
87
+ if (failureCount >= 2) {
88
+ return false;
89
+ }
90
+ if (error instanceof Error && error.message.includes('4')) {
91
+ return false;
92
+ }
93
+ return true;
94
+ },
95
+ });
96
+ }
97
+
98
+ // Execution Mutations
99
+ export function useExecuteFlow() {
100
+ const apiClient = useApiClient();
101
+ const queryClient = useQueryClient();
102
+ return useMutation({
103
+ mutationFn: ({
104
+ flowId,
105
+ inputs,
106
+ useBatchProcessing,
107
+ }: {
108
+ flowId: string;
109
+ inputs?: FlowInputs;
110
+ useBatchProcessing?: boolean;
111
+ }) =>
112
+ apiClient.executeFlow(flowId, inputs, {
113
+ version: 'latest',
114
+ useBatchProcessing: useBatchProcessing,
115
+ }),
116
+ onSuccess: (_, { flowId }) => {
117
+ queryClient.invalidateQueries({ queryKey: queryKeys.executions(flowId) });
118
+ },
119
+ onError: (error) => {
120
+ console.error('Error executing flow:', getErrorMessage(error));
121
+
122
+ if (error instanceof ValidationError) {
123
+ console.log('🔍 Flow Execution Validation Error Details:');
124
+ console.log('🔍 - isValid:', error.validationResult.isValid);
125
+ console.log('🔍 - warnings:', error.validationResult.warnings);
126
+
127
+ if (!error.validationResult.isValid) {
128
+ console.log('🔍 - errors:', error.validationResult.errors);
129
+
130
+ error.validationResult.errors.forEach((validationError, index) => {
131
+ console.log(`🔍 Execution Error ${index + 1}:`, {
132
+ nodeId: validationError.nodeId,
133
+ message: validationError.message,
134
+ type: validationError.type,
135
+ severity: validationError.severity,
136
+ additionalContext: validationError.additionalContext,
137
+ });
138
+ });
139
+ }
140
+ }
141
+ },
142
+ });
143
+ }
144
+
145
+ // Execution Control Mutations
146
+ export function usePauseFlowRun() {
147
+ const queryClient = useQueryClient();
148
+ const apiClient = useApiClient();
149
+ return useMutation({
150
+ mutationFn: ({ executionId, reason }: { executionId: string; reason?: string }) =>
151
+ apiClient.pauseFlowRun(executionId, reason),
152
+ onSuccess: (_, { executionId }) => {
153
+ queryClient.invalidateQueries({ queryKey: queryKeys.flowRun(executionId) });
154
+ },
155
+ onError: (error) => {
156
+ console.error('Failed to pause execution:', error);
157
+ },
158
+ });
159
+ }
160
+
161
+ export function useResumeFlowRun() {
162
+ const queryClient = useQueryClient();
163
+ const apiClient = useApiClient();
164
+ return useMutation({
165
+ mutationFn: (executionId: string) => apiClient.resumeFlowRun(executionId),
166
+ onSuccess: (_, executionId) => {
167
+ queryClient.invalidateQueries({ queryKey: ['executions'] });
168
+ queryClient.invalidateQueries({ queryKey: queryKeys.flowRun(executionId) });
169
+ },
170
+ onError: (error) => {
171
+ console.error('Failed to resume execution:', error);
172
+ },
173
+ });
174
+ }
175
+
176
+ export function useCancelFlowRun() {
177
+ const queryClient = useQueryClient();
178
+ const apiClient = useApiClient();
179
+ return useMutation({
180
+ mutationFn: (executionId: string) => apiClient.cancelFlowRun(executionId),
181
+ onSuccess: (_, executionId) => {
182
+ queryClient.invalidateQueries({ queryKey: ['executions'] });
183
+ queryClient.invalidateQueries({ queryKey: queryKeys.flowRun(executionId) });
184
+ },
185
+ onError: (error) => {
186
+ console.error('Failed to cancel execution:', error);
187
+ },
188
+ });
189
+ }
190
+
191
+ // Execute Flow To Node Mutation
192
+ export function useExecuteFlowToNode() {
193
+ const apiClient = useApiClient();
194
+
195
+ return useMutation({
196
+ mutationFn: (params: {
197
+ flowId: string;
198
+ nodeId: string;
199
+ inputs?: Record<string, unknown>;
200
+ options?: { useBatchProcessing?: boolean };
201
+ }) =>
202
+ apiClient.executeFlowToNode(
203
+ params.flowId,
204
+ params.nodeId,
205
+ params.inputs || {},
206
+ params.options,
207
+ ),
208
+ onError: (error) => {
209
+ console.error('Error executing flow to node:', getErrorMessage(error));
210
+ },
211
+ });
212
+ }
213
+
214
+ // Test Node Mutation
215
+ export function useTestNode() {
216
+ const apiClient = useApiClient();
217
+
218
+ return useMutation({
219
+ mutationFn: (params: {
220
+ nodeType: string;
221
+ params: Record<string, unknown>;
222
+ inputs: Record<string, unknown>;
223
+ }) => apiClient.testNode(params.nodeType, params.params, params.inputs),
224
+ onError: (error) => {
225
+ console.error('Error testing node:', getErrorMessage(error));
226
+ },
227
+ });
228
+ }
@@ -0,0 +1,195 @@
1
+ // Flow-related React Query hooks
2
+ import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
3
+ import { useApiClient } from '../contexts/ApiContext';
4
+ import { queryKeys, getErrorMessage } from './query-keys';
5
+ import { type ReactFlowDataOptions } from './types';
6
+ import {
7
+ type CreateFlowDto,
8
+ type CreateFlowVersionDto,
9
+ type QueryOptions,
10
+ type Flow,
11
+ type FlowVersion,
12
+ type ReactFlowData,
13
+ type InvectDefinition,
14
+ } from '@invect/core/types';
15
+
16
+ export function useDashboardStats() {
17
+ const apiClient = useApiClient();
18
+
19
+ return useQuery({
20
+ queryKey: queryKeys.dashboardStats,
21
+ queryFn: () => apiClient.getDashboardStats(),
22
+ staleTime: 1000 * 30, // 30 seconds
23
+ refetchInterval: 1000 * 60, // Refresh every minute
24
+ });
25
+ }
26
+
27
+ export function useFlows(options?: QueryOptions<Flow>) {
28
+ const apiClient = useApiClient();
29
+
30
+ return useQuery({
31
+ queryKey: [...queryKeys.flows, options],
32
+ queryFn: () => apiClient.getFlows(options),
33
+ staleTime: 1000 * 60 * 5, // 5 minutes
34
+ retry: (failureCount, error) => {
35
+ if (failureCount >= 2) {
36
+ return false;
37
+ }
38
+ if (error instanceof Error && error.message.includes('4')) {
39
+ return false;
40
+ }
41
+ return true;
42
+ },
43
+ });
44
+ }
45
+
46
+ export function useFlow(id: string) {
47
+ const apiClient = useApiClient();
48
+
49
+ return useQuery({
50
+ queryKey: queryKeys.flow(id),
51
+ queryFn: () => apiClient.getFlow(id),
52
+ enabled: !!id,
53
+ staleTime: 1000 * 30, // 30 seconds - reduced to ensure fresh data after mutations
54
+ retry: (failureCount, error) => {
55
+ if (failureCount >= 2) {
56
+ return false;
57
+ }
58
+ if (error instanceof Error && error.message.includes('4')) {
59
+ return false;
60
+ }
61
+ return true;
62
+ },
63
+ });
64
+ }
65
+
66
+ export function useFlowVersions(flowId: string, options?: QueryOptions<FlowVersion>) {
67
+ const apiClient = useApiClient();
68
+
69
+ return useQuery({
70
+ queryKey: [...queryKeys.flowVersions(flowId), options],
71
+ queryFn: () => apiClient.getFlowVersions(flowId, options),
72
+ enabled: !!flowId,
73
+ staleTime: 1000 * 30, // 30 seconds - reduced to ensure fresh data after mutations
74
+ });
75
+ }
76
+
77
+ // React Flow Data Query
78
+ export function useFlowReactFlowData(
79
+ flowId: string,
80
+ options?: ReactFlowDataOptions,
81
+ ): ReturnType<typeof useQuery<ReactFlowData, Error>> {
82
+ const apiClient = useApiClient();
83
+
84
+ return useQuery({
85
+ queryKey: queryKeys.reactFlow(flowId, options?.version, options?.flowRunId),
86
+ queryFn: () => apiClient.getFlowReactFlowData(flowId, options),
87
+ enabled: !!flowId,
88
+ staleTime: options?.flowRunId ? 0 : 1000 * 30,
89
+ retry: (failureCount, error) => {
90
+ if (failureCount >= 2) {
91
+ return false;
92
+ }
93
+ if (error instanceof Error && error.message.includes('4')) {
94
+ return false;
95
+ }
96
+ return true;
97
+ },
98
+ });
99
+ }
100
+
101
+ // Flow Mutations
102
+ export function useCreateFlow() {
103
+ const queryClient = useQueryClient();
104
+ const apiClient = useApiClient();
105
+ return useMutation({
106
+ mutationFn: (data: CreateFlowDto) => apiClient.createFlow(data),
107
+ onSuccess: () => {
108
+ queryClient.invalidateQueries({ queryKey: queryKeys.flows });
109
+ },
110
+ onError: (error) => {
111
+ console.error('Error creating flow:', getErrorMessage(error));
112
+ },
113
+ });
114
+ }
115
+
116
+ export function useCreateFlowWithVersion() {
117
+ const queryClient = useQueryClient();
118
+ const apiClient = useApiClient();
119
+ return useMutation({
120
+ mutationFn: ({
121
+ flowDto,
122
+ versionDto,
123
+ }: {
124
+ flowDto: CreateFlowDto;
125
+ versionDto: CreateFlowVersionDto;
126
+ }) => apiClient.createFlowWithVersion(flowDto, versionDto),
127
+ onSuccess: () => {
128
+ queryClient.invalidateQueries({ queryKey: queryKeys.flows });
129
+ },
130
+ onError: (error) => {
131
+ console.error('Error creating flow with version:', getErrorMessage(error));
132
+ },
133
+ });
134
+ }
135
+
136
+ export function useUpdateFlow() {
137
+ const queryClient = useQueryClient();
138
+ const apiClient = useApiClient();
139
+ return useMutation({
140
+ mutationFn: ({ id, data }: { id: string; data: Partial<CreateFlowDto> }) =>
141
+ apiClient.updateFlow(id, data),
142
+ onSuccess: (_, { id }) => {
143
+ queryClient.invalidateQueries({ queryKey: queryKeys.flow(id) });
144
+ queryClient.invalidateQueries({ queryKey: queryKeys.flows });
145
+ },
146
+ onError: (error) => {
147
+ console.error('Error updating flow:', getErrorMessage(error));
148
+ },
149
+ });
150
+ }
151
+
152
+ export function useDeleteFlow() {
153
+ const queryClient = useQueryClient();
154
+ const apiClient = useApiClient();
155
+ return useMutation({
156
+ mutationFn: (id: string) => apiClient.deleteFlow(id),
157
+ onSuccess: () => {
158
+ queryClient.invalidateQueries({ queryKey: queryKeys.flows });
159
+ },
160
+ onError: (error) => {
161
+ console.error('Error deleting flow:', getErrorMessage(error));
162
+ },
163
+ });
164
+ }
165
+
166
+ // Flow Version Mutations
167
+ export function useCreateFlowVersion() {
168
+ const queryClient = useQueryClient();
169
+ const apiClient = useApiClient();
170
+ return useMutation({
171
+ mutationFn: ({ flowId, data }: { flowId: string; data: CreateFlowVersionDto }) =>
172
+ apiClient.createFlowVersion(flowId, data),
173
+ onSuccess: (_, { flowId }) => {
174
+ queryClient.invalidateQueries({ queryKey: queryKeys.flowVersions(flowId) });
175
+ queryClient.invalidateQueries({ queryKey: queryKeys.flow(flowId) });
176
+ queryClient.invalidateQueries({ queryKey: queryKeys.flows });
177
+ },
178
+ onError: (error) => {
179
+ console.error('Error creating flow version:', getErrorMessage(error));
180
+ },
181
+ });
182
+ }
183
+
184
+ export function useValidateFlow() {
185
+ const apiClient = useApiClient();
186
+
187
+ return useMutation({
188
+ mutationFn: ({ flowId, flowData }: { flowId: string; flowData: InvectDefinition }) =>
189
+ apiClient.validateFlow(flowId, flowData),
190
+ retry: false,
191
+ onError: (error) => {
192
+ console.error('Error validating flow:', getErrorMessage(error));
193
+ },
194
+ });
195
+ }
@@ -0,0 +1,17 @@
1
+ // API layer barrel export
2
+ // Types
3
+ export * from './types';
4
+
5
+ // API Client
6
+ export { ApiClient } from './client';
7
+
8
+ // Query keys
9
+ export { queryKeys, getErrorMessage } from './query-keys';
10
+
11
+ // Domain hooks
12
+ export * from './flows.api';
13
+ export * from './executions.api';
14
+ export * from './credentials.api';
15
+ export * from './triggers.api';
16
+ export * from './agent-tools.api';
17
+ export * from './node-data.api';