fuse-io 0.1.30__tar.gz

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 (277) hide show
  1. fuse_io-0.1.30/.python-version +1 -0
  2. fuse_io-0.1.30/LICENSE +21 -0
  3. fuse_io-0.1.30/MANIFEST.in +20 -0
  4. fuse_io-0.1.30/PKG-INFO +306 -0
  5. fuse_io-0.1.30/README.md +240 -0
  6. fuse_io-0.1.30/docs/pypi_publishing_guide.md +256 -0
  7. fuse_io-0.1.30/fuse/__init__.py +0 -0
  8. fuse_io-0.1.30/fuse/ai/__init__.py +0 -0
  9. fuse_io-0.1.30/fuse/ai/router.py +35 -0
  10. fuse_io-0.1.30/fuse/ai/service.py +538 -0
  11. fuse_io-0.1.30/fuse/alembic/README +1 -0
  12. fuse_io-0.1.30/fuse/alembic/env.py +90 -0
  13. fuse_io-0.1.30/fuse/alembic/script.py.mako +25 -0
  14. fuse_io-0.1.30/fuse/alembic/versions/.keep +0 -0
  15. fuse_io-0.1.30/fuse/alembic/versions/1439949b74ad_add_edge_handles.py +31 -0
  16. fuse_io-0.1.30/fuse/alembic/versions/1a31ce608336_add_cascade_delete_relationships.py +37 -0
  17. fuse_io-0.1.30/fuse/alembic/versions/2c7ca0ca6779_add_hashed_password_field_to_user_model.py +29 -0
  18. fuse_io-0.1.30/fuse/alembic/versions/82e10e9b2e3f_add_spec_column_to_workflownode_and_.py +34 -0
  19. fuse_io-0.1.30/fuse/alembic/versions/9426be80e78e_add_workflows.py +66 -0
  20. fuse_io-0.1.30/fuse/alembic/versions/9c0a54914c78_add_max_length_for_string_varchar_.py +65 -0
  21. fuse_io-0.1.30/fuse/alembic/versions/ceedbe88ef0d_add_v2_config_columns_to_workflow.py +33 -0
  22. fuse_io-0.1.30/fuse/alembic/versions/d98dd8ec85a3_edit_replace_id_integers_in_all_models_.py +99 -0
  23. fuse_io-0.1.30/fuse/alembic/versions/dd21742ef7b0_add_execution_models.py +54 -0
  24. fuse_io-0.1.30/fuse/alembic/versions/e2412789c190_initialize_models.py +54 -0
  25. fuse_io-0.1.30/fuse/alembic.ini +71 -0
  26. fuse_io-0.1.30/fuse/api.py +17 -0
  27. fuse_io-0.1.30/fuse/auth/__init__.py +9 -0
  28. fuse_io-0.1.30/fuse/auth/crud_user.py +63 -0
  29. fuse_io-0.1.30/fuse/auth/dependencies.py +69 -0
  30. fuse_io-0.1.30/fuse/auth/models.py +17 -0
  31. fuse_io-0.1.30/fuse/auth/router.py +147 -0
  32. fuse_io-0.1.30/fuse/auth/schemas.py +71 -0
  33. fuse_io-0.1.30/fuse/auth/service.py +51 -0
  34. fuse_io-0.1.30/fuse/auth/utils.py +142 -0
  35. fuse_io-0.1.30/fuse/backend_pre_start.py +39 -0
  36. fuse_io-0.1.30/fuse/base.py +71 -0
  37. fuse_io-0.1.30/fuse/cli.py +266 -0
  38. fuse_io-0.1.30/fuse/config.py +183 -0
  39. fuse_io-0.1.30/fuse/credentials/__init__.py +11 -0
  40. fuse_io-0.1.30/fuse/credentials/router.py +199 -0
  41. fuse_io-0.1.30/fuse/credentials/service.py +181 -0
  42. fuse_io-0.1.30/fuse/database.py +32 -0
  43. fuse_io-0.1.30/fuse/initial_data.py +24 -0
  44. fuse_io-0.1.30/fuse/items/__init__.py +9 -0
  45. fuse_io-0.1.30/fuse/items/crud_item.py +44 -0
  46. fuse_io-0.1.30/fuse/items/models.py +19 -0
  47. fuse_io-0.1.30/fuse/items/router.py +97 -0
  48. fuse_io-0.1.30/fuse/items/schemas.py +34 -0
  49. fuse_io-0.1.30/fuse/items/service.py +57 -0
  50. fuse_io-0.1.30/fuse/logger.py +156 -0
  51. fuse_io-0.1.30/fuse/main.py +121 -0
  52. fuse_io-0.1.30/fuse/models.py +10 -0
  53. fuse_io-0.1.30/fuse/static/404/index.html +1 -0
  54. fuse_io-0.1.30/fuse/static/404.html +1 -0
  55. fuse_io-0.1.30/fuse/static/__next.__PAGE__.txt +9 -0
  56. fuse_io-0.1.30/fuse/static/__next._full.txt +23 -0
  57. fuse_io-0.1.30/fuse/static/__next._head.txt +7 -0
  58. fuse_io-0.1.30/fuse/static/__next._index.txt +10 -0
  59. fuse_io-0.1.30/fuse/static/__next._tree.txt +3 -0
  60. fuse_io-0.1.30/fuse/static/_next/static/bAsbGnh27hobCWq6gYKAq/_buildManifest.js +1 -0
  61. fuse_io-0.1.30/fuse/static/_next/static/bAsbGnh27hobCWq6gYKAq/_ssgManifest.js +1 -0
  62. fuse_io-0.1.30/fuse/static/_next/static/chunks/162-d9110b81661c7d7d.js +1 -0
  63. fuse_io-0.1.30/fuse/static/_next/static/chunks/232.97b298320d3351e9.js +1 -0
  64. fuse_io-0.1.30/fuse/static/_next/static/chunks/24-4ee5417b9b9b92a9.js +5 -0
  65. fuse_io-0.1.30/fuse/static/_next/static/chunks/275-f12d66089f519b01.js +1 -0
  66. fuse_io-0.1.30/fuse/static/_next/static/chunks/324-771510774da7c693.js +1 -0
  67. fuse_io-0.1.30/fuse/static/_next/static/chunks/361-1ce2845fa2b2c4a4.js +1 -0
  68. fuse_io-0.1.30/fuse/static/_next/static/chunks/393-d1b3ea65900fdc5e.js +1 -0
  69. fuse_io-0.1.30/fuse/static/_next/static/chunks/4-bdc965d7dcca4cab.js +33 -0
  70. fuse_io-0.1.30/fuse/static/_next/static/chunks/4bd1b696-01b4a2ffa8bac205.js +1 -0
  71. fuse_io-0.1.30/fuse/static/_next/static/chunks/501-397a9f42b1c4da0e.js +1 -0
  72. fuse_io-0.1.30/fuse/static/_next/static/chunks/547-1833756cc09c3c28.js +1 -0
  73. fuse_io-0.1.30/fuse/static/_next/static/chunks/794-803d64bb1ca09460.js +2 -0
  74. fuse_io-0.1.30/fuse/static/_next/static/chunks/814-18bcbd34c09817f1.js +9 -0
  75. fuse_io-0.1.30/fuse/static/_next/static/chunks/821-04976ebb62352e45.js +1 -0
  76. fuse_io-0.1.30/fuse/static/_next/static/chunks/93-2937d48fc52107ef.js +9 -0
  77. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/(main)/ai-create-example/page-0a2e0f0b4460de7c.js +11 -0
  78. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/(main)/dashboard/page-7e9db37c6737695c.js +1 -0
  79. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/(main)/layout-5c636818aa3b7ed1.js +1 -0
  80. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/(main)/settings/page-00bc4735cc93b9be.js +1 -0
  81. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/(main)/workflows/page-7c3c63a11ae33eed.js +1 -0
  82. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/_global-error/page-116e68079fa76e6f.js +1 -0
  83. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/_not-found/page-bae0d4902c5585d3.js +1 -0
  84. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/auth/layout-116e68079fa76e6f.js +1 -0
  85. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/auth/login/page-546ffaa564d327e9.js +1 -0
  86. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/auth/register/page-2748b1af5b1b642a.js +1 -0
  87. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/credentials-test/page-1d2c37deaa189b43.js +1 -0
  88. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/error-033f2fd59b73a2d7.js +1 -0
  89. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/global-error-dcd149dc42c5186b.js +1 -0
  90. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/layout-d0d5a6a85d213394.js +1 -0
  91. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/loading-116e68079fa76e6f.js +1 -0
  92. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/oauth/callback/page-eecedf564f689d93.js +1 -0
  93. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/page-606905d313079604.js +1 -0
  94. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/workflows/[id]/error-66ff5093f583ae94.js +1 -0
  95. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/workflows/[id]/loading-116e68079fa76e6f.js +1 -0
  96. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/workflows/[id]/page-5459cee4cb66f5bc.js +1 -0
  97. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/workflows/error-61dbcd88cc0eff5c.js +1 -0
  98. fuse_io-0.1.30/fuse/static/_next/static/chunks/app/workflows/loading-116e68079fa76e6f.js +1 -0
  99. fuse_io-0.1.30/fuse/static/_next/static/chunks/c37d3baf-0fedbf5b6ffcd550.js +1 -0
  100. fuse_io-0.1.30/fuse/static/_next/static/chunks/framework-3311683cffde0ebf.js +1 -0
  101. fuse_io-0.1.30/fuse/static/_next/static/chunks/main-app-cf50eb2a7e26453d.js +1 -0
  102. fuse_io-0.1.30/fuse/static/_next/static/chunks/main-d74776772a65895d.js +5 -0
  103. fuse_io-0.1.30/fuse/static/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  104. fuse_io-0.1.30/fuse/static/_next/static/chunks/webpack-b28a02ce1f174559.js +1 -0
  105. fuse_io-0.1.30/fuse/static/_next/static/css/59d0dfc36eeea694.css +5 -0
  106. fuse_io-0.1.30/fuse/static/_next/static/css/d1e1fa7731bfdccb.css +1 -0
  107. fuse_io-0.1.30/fuse/static/_next/static/media/636a5ac981f94f8b-s.p.woff2 +0 -0
  108. fuse_io-0.1.30/fuse/static/_next/static/media/6fe53d21e6e7ebd8-s.woff2 +0 -0
  109. fuse_io-0.1.30/fuse/static/_next/static/media/8ebc6e9dde468c4a-s.woff2 +0 -0
  110. fuse_io-0.1.30/fuse/static/_next/static/media/9e7b0a821b9dfcb4-s.woff2 +0 -0
  111. fuse_io-0.1.30/fuse/static/_not-found/__next._full.txt +19 -0
  112. fuse_io-0.1.30/fuse/static/_not-found/__next._head.txt +7 -0
  113. fuse_io-0.1.30/fuse/static/_not-found/__next._index.txt +10 -0
  114. fuse_io-0.1.30/fuse/static/_not-found/__next._not-found.__PAGE__.txt +5 -0
  115. fuse_io-0.1.30/fuse/static/_not-found/__next._not-found.txt +4 -0
  116. fuse_io-0.1.30/fuse/static/_not-found/__next._tree.txt +3 -0
  117. fuse_io-0.1.30/fuse/static/_not-found/index.html +1 -0
  118. fuse_io-0.1.30/fuse/static/_not-found/index.txt +19 -0
  119. fuse_io-0.1.30/fuse/static/ai-create-example/__next.!KG1haW4p.ai-create-example.__PAGE__.txt +9 -0
  120. fuse_io-0.1.30/fuse/static/ai-create-example/__next.!KG1haW4p.ai-create-example.txt +4 -0
  121. fuse_io-0.1.30/fuse/static/ai-create-example/__next.!KG1haW4p.txt +7 -0
  122. fuse_io-0.1.30/fuse/static/ai-create-example/__next._full.txt +26 -0
  123. fuse_io-0.1.30/fuse/static/ai-create-example/__next._head.txt +7 -0
  124. fuse_io-0.1.30/fuse/static/ai-create-example/__next._index.txt +10 -0
  125. fuse_io-0.1.30/fuse/static/ai-create-example/__next._tree.txt +3 -0
  126. fuse_io-0.1.30/fuse/static/ai-create-example/index.html +1 -0
  127. fuse_io-0.1.30/fuse/static/ai-create-example/index.txt +26 -0
  128. fuse_io-0.1.30/fuse/static/auth/login/__next._full.txt +23 -0
  129. fuse_io-0.1.30/fuse/static/auth/login/__next._head.txt +7 -0
  130. fuse_io-0.1.30/fuse/static/auth/login/__next._index.txt +10 -0
  131. fuse_io-0.1.30/fuse/static/auth/login/__next._tree.txt +3 -0
  132. fuse_io-0.1.30/fuse/static/auth/login/__next.auth.login.__PAGE__.txt +9 -0
  133. fuse_io-0.1.30/fuse/static/auth/login/__next.auth.login.txt +4 -0
  134. fuse_io-0.1.30/fuse/static/auth/login/__next.auth.txt +4 -0
  135. fuse_io-0.1.30/fuse/static/auth/login/index.html +1 -0
  136. fuse_io-0.1.30/fuse/static/auth/login/index.txt +23 -0
  137. fuse_io-0.1.30/fuse/static/auth/register/__next._full.txt +23 -0
  138. fuse_io-0.1.30/fuse/static/auth/register/__next._head.txt +7 -0
  139. fuse_io-0.1.30/fuse/static/auth/register/__next._index.txt +10 -0
  140. fuse_io-0.1.30/fuse/static/auth/register/__next._tree.txt +3 -0
  141. fuse_io-0.1.30/fuse/static/auth/register/__next.auth.register.__PAGE__.txt +9 -0
  142. fuse_io-0.1.30/fuse/static/auth/register/__next.auth.register.txt +4 -0
  143. fuse_io-0.1.30/fuse/static/auth/register/__next.auth.txt +4 -0
  144. fuse_io-0.1.30/fuse/static/auth/register/index.html +1 -0
  145. fuse_io-0.1.30/fuse/static/auth/register/index.txt +23 -0
  146. fuse_io-0.1.30/fuse/static/credentials-test/__next._full.txt +23 -0
  147. fuse_io-0.1.30/fuse/static/credentials-test/__next._head.txt +7 -0
  148. fuse_io-0.1.30/fuse/static/credentials-test/__next._index.txt +10 -0
  149. fuse_io-0.1.30/fuse/static/credentials-test/__next._tree.txt +3 -0
  150. fuse_io-0.1.30/fuse/static/credentials-test/__next.credentials-test.__PAGE__.txt +9 -0
  151. fuse_io-0.1.30/fuse/static/credentials-test/__next.credentials-test.txt +4 -0
  152. fuse_io-0.1.30/fuse/static/credentials-test/index.html +1 -0
  153. fuse_io-0.1.30/fuse/static/credentials-test/index.txt +23 -0
  154. fuse_io-0.1.30/fuse/static/dashboard/__next.!KG1haW4p.dashboard.__PAGE__.txt +9 -0
  155. fuse_io-0.1.30/fuse/static/dashboard/__next.!KG1haW4p.dashboard.txt +4 -0
  156. fuse_io-0.1.30/fuse/static/dashboard/__next.!KG1haW4p.txt +7 -0
  157. fuse_io-0.1.30/fuse/static/dashboard/__next._full.txt +26 -0
  158. fuse_io-0.1.30/fuse/static/dashboard/__next._head.txt +7 -0
  159. fuse_io-0.1.30/fuse/static/dashboard/__next._index.txt +10 -0
  160. fuse_io-0.1.30/fuse/static/dashboard/__next._tree.txt +3 -0
  161. fuse_io-0.1.30/fuse/static/dashboard/index.html +1 -0
  162. fuse_io-0.1.30/fuse/static/dashboard/index.txt +26 -0
  163. fuse_io-0.1.30/fuse/static/index.html +1 -0
  164. fuse_io-0.1.30/fuse/static/index.txt +23 -0
  165. fuse_io-0.1.30/fuse/static/oauth/callback/__next._full.txt +23 -0
  166. fuse_io-0.1.30/fuse/static/oauth/callback/__next._head.txt +7 -0
  167. fuse_io-0.1.30/fuse/static/oauth/callback/__next._index.txt +10 -0
  168. fuse_io-0.1.30/fuse/static/oauth/callback/__next._tree.txt +3 -0
  169. fuse_io-0.1.30/fuse/static/oauth/callback/__next.oauth.callback.__PAGE__.txt +9 -0
  170. fuse_io-0.1.30/fuse/static/oauth/callback/__next.oauth.callback.txt +4 -0
  171. fuse_io-0.1.30/fuse/static/oauth/callback/__next.oauth.txt +4 -0
  172. fuse_io-0.1.30/fuse/static/oauth/callback/index.html +1 -0
  173. fuse_io-0.1.30/fuse/static/oauth/callback/index.txt +23 -0
  174. fuse_io-0.1.30/fuse/static/settings/__next.!KG1haW4p.settings.__PAGE__.txt +9 -0
  175. fuse_io-0.1.30/fuse/static/settings/__next.!KG1haW4p.settings.txt +4 -0
  176. fuse_io-0.1.30/fuse/static/settings/__next.!KG1haW4p.txt +7 -0
  177. fuse_io-0.1.30/fuse/static/settings/__next._full.txt +26 -0
  178. fuse_io-0.1.30/fuse/static/settings/__next._head.txt +7 -0
  179. fuse_io-0.1.30/fuse/static/settings/__next._index.txt +10 -0
  180. fuse_io-0.1.30/fuse/static/settings/__next._tree.txt +3 -0
  181. fuse_io-0.1.30/fuse/static/settings/index.html +1 -0
  182. fuse_io-0.1.30/fuse/static/settings/index.txt +26 -0
  183. fuse_io-0.1.30/fuse/static/workflows/__next.!KG1haW4p.txt +7 -0
  184. fuse_io-0.1.30/fuse/static/workflows/__next.!KG1haW4p.workflows.__PAGE__.txt +10 -0
  185. fuse_io-0.1.30/fuse/static/workflows/__next.!KG1haW4p.workflows.txt +4 -0
  186. fuse_io-0.1.30/fuse/static/workflows/__next._full.txt +29 -0
  187. fuse_io-0.1.30/fuse/static/workflows/__next._head.txt +7 -0
  188. fuse_io-0.1.30/fuse/static/workflows/__next._index.txt +10 -0
  189. fuse_io-0.1.30/fuse/static/workflows/__next._tree.txt +4 -0
  190. fuse_io-0.1.30/fuse/static/workflows/index.html +1 -0
  191. fuse_io-0.1.30/fuse/static/workflows/index.txt +29 -0
  192. fuse_io-0.1.30/fuse/static/workflows/new/__next._full.txt +26 -0
  193. fuse_io-0.1.30/fuse/static/workflows/new/__next._head.txt +7 -0
  194. fuse_io-0.1.30/fuse/static/workflows/new/__next._index.txt +10 -0
  195. fuse_io-0.1.30/fuse/static/workflows/new/__next._tree.txt +3 -0
  196. fuse_io-0.1.30/fuse/static/workflows/new/__next.workflows.$d$id.__PAGE__.txt +6 -0
  197. fuse_io-0.1.30/fuse/static/workflows/new/__next.workflows.$d$id.txt +5 -0
  198. fuse_io-0.1.30/fuse/static/workflows/new/__next.workflows.txt +5 -0
  199. fuse_io-0.1.30/fuse/static/workflows/new/index.html +1 -0
  200. fuse_io-0.1.30/fuse/static/workflows/new/index.txt +26 -0
  201. fuse_io-0.1.30/fuse/users/__init__.py +0 -0
  202. fuse_io-0.1.30/fuse/users/router.py +234 -0
  203. fuse_io-0.1.30/fuse/utils/cache.py +235 -0
  204. fuse_io-0.1.30/fuse/utils/circuit_breaker.py +355 -0
  205. fuse_io-0.1.30/fuse/utils/code_sanitizer.py +357 -0
  206. fuse_io-0.1.30/fuse/utils/feature_flags.py +358 -0
  207. fuse_io-0.1.30/fuse/utils/health.py +160 -0
  208. fuse_io-0.1.30/fuse/utils/pagination.py +42 -0
  209. fuse_io-0.1.30/fuse/utils/rate_limit.py +167 -0
  210. fuse_io-0.1.30/fuse/utils/redis_client.py +20 -0
  211. fuse_io-0.1.30/fuse/utils/request_id.py +89 -0
  212. fuse_io-0.1.30/fuse/utils/security.py +36 -0
  213. fuse_io-0.1.30/fuse/worker.py +44 -0
  214. fuse_io-0.1.30/fuse/workflows/__init__.py +9 -0
  215. fuse_io-0.1.30/fuse/workflows/code_execution.py +195 -0
  216. fuse_io-0.1.30/fuse/workflows/crud_workflow.py +115 -0
  217. fuse_io-0.1.30/fuse/workflows/engine/__init__.py +6 -0
  218. fuse_io-0.1.30/fuse/workflows/engine/constants.py +103 -0
  219. fuse_io-0.1.30/fuse/workflows/engine/core.py +41 -0
  220. fuse_io-0.1.30/fuse/workflows/engine/error_handler.py +267 -0
  221. fuse_io-0.1.30/fuse/workflows/engine/errors.py +19 -0
  222. fuse_io-0.1.30/fuse/workflows/engine/executor.py +259 -0
  223. fuse_io-0.1.30/fuse/workflows/engine/graph.py +32 -0
  224. fuse_io-0.1.30/fuse/workflows/engine/nodes/__init__.py +69 -0
  225. fuse_io-0.1.30/fuse/workflows/engine/nodes/actions/code.py +189 -0
  226. fuse_io-0.1.30/fuse/workflows/engine/nodes/actions/data.py +132 -0
  227. fuse_io-0.1.30/fuse/workflows/engine/nodes/actions/discord.py +58 -0
  228. fuse_io-0.1.30/fuse/workflows/engine/nodes/actions/email.py +110 -0
  229. fuse_io-0.1.30/fuse/workflows/engine/nodes/actions/google_sheets.py +315 -0
  230. fuse_io-0.1.30/fuse/workflows/engine/nodes/actions/http_request.py +97 -0
  231. fuse_io-0.1.30/fuse/workflows/engine/nodes/actions/slack.py +233 -0
  232. fuse_io-0.1.30/fuse/workflows/engine/nodes/actions/utility.py +24 -0
  233. fuse_io-0.1.30/fuse/workflows/engine/nodes/actions/whatsapp.py +66 -0
  234. fuse_io-0.1.30/fuse/workflows/engine/nodes/ai/__init__.py +3 -0
  235. fuse_io-0.1.30/fuse/workflows/engine/nodes/ai/agent.py +100 -0
  236. fuse_io-0.1.30/fuse/workflows/engine/nodes/ai/llm.py +198 -0
  237. fuse_io-0.1.30/fuse/workflows/engine/nodes/base.py +58 -0
  238. fuse_io-0.1.30/fuse/workflows/engine/nodes/logic/__init__.py +11 -0
  239. fuse_io-0.1.30/fuse/workflows/engine/nodes/logic/delay.py +32 -0
  240. fuse_io-0.1.30/fuse/workflows/engine/nodes/logic/if_node.py +58 -0
  241. fuse_io-0.1.30/fuse/workflows/engine/nodes/logic/loop.py +41 -0
  242. fuse_io-0.1.30/fuse/workflows/engine/nodes/logic/merge.py +31 -0
  243. fuse_io-0.1.30/fuse/workflows/engine/nodes/logic/parallel.py +28 -0
  244. fuse_io-0.1.30/fuse/workflows/engine/nodes/logic/pause.py +29 -0
  245. fuse_io-0.1.30/fuse/workflows/engine/nodes/logic/switch.py +37 -0
  246. fuse_io-0.1.30/fuse/workflows/engine/nodes/registry.py +27 -0
  247. fuse_io-0.1.30/fuse/workflows/engine/nodes/triggers/email.py +37 -0
  248. fuse_io-0.1.30/fuse/workflows/engine/nodes/triggers/form.py +33 -0
  249. fuse_io-0.1.30/fuse/workflows/engine/nodes/triggers/manual.py +23 -0
  250. fuse_io-0.1.30/fuse/workflows/engine/nodes/triggers/rss.py +45 -0
  251. fuse_io-0.1.30/fuse/workflows/engine/nodes/triggers/schedule.py +39 -0
  252. fuse_io-0.1.30/fuse/workflows/engine/nodes/triggers/webhook.py +34 -0
  253. fuse_io-0.1.30/fuse/workflows/engine/nodes/triggers/whatsapp.py +27 -0
  254. fuse_io-0.1.30/fuse/workflows/engine/periodic_scheduler.py +92 -0
  255. fuse_io-0.1.30/fuse/workflows/engine/runtime/code.py +35 -0
  256. fuse_io-0.1.30/fuse/workflows/engine/runtime/http.py +41 -0
  257. fuse_io-0.1.30/fuse/workflows/engine/runtime/internal.py +25 -0
  258. fuse_io-0.1.30/fuse/workflows/engine/scheduler.py +196 -0
  259. fuse_io-0.1.30/fuse/workflows/engine/state.py +108 -0
  260. fuse_io-0.1.30/fuse/workflows/logger.py +111 -0
  261. fuse_io-0.1.30/fuse/workflows/models.py +101 -0
  262. fuse_io-0.1.30/fuse/workflows/router.py +553 -0
  263. fuse_io-0.1.30/fuse/workflows/schemas.py +190 -0
  264. fuse_io-0.1.30/fuse/workflows/service.py +166 -0
  265. fuse_io-0.1.30/fuse/workflows/types.py +366 -0
  266. fuse_io-0.1.30/fuse/workflows/utils/templating.py +47 -0
  267. fuse_io-0.1.30/fuse_io.egg-info/PKG-INFO +306 -0
  268. fuse_io-0.1.30/fuse_io.egg-info/SOURCES.txt +275 -0
  269. fuse_io-0.1.30/fuse_io.egg-info/dependency_links.txt +1 -0
  270. fuse_io-0.1.30/fuse_io.egg-info/entry_points.txt +2 -0
  271. fuse_io-0.1.30/fuse_io.egg-info/requires.txt +37 -0
  272. fuse_io-0.1.30/fuse_io.egg-info/top_level.txt +1 -0
  273. fuse_io-0.1.30/pyproject.toml +89 -0
  274. fuse_io-0.1.30/scripts/format.sh +5 -0
  275. fuse_io-0.1.30/scripts/lint.sh +8 -0
  276. fuse_io-0.1.30/setup.cfg +4 -0
  277. fuse_io-0.1.30/uv.lock +2714 -0
@@ -0,0 +1 @@
1
+ 3.13
fuse_io-0.1.30/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Bibek Timilsina
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,20 @@
1
+ include README.md
2
+ include LICENSE
3
+ include pyproject.toml
4
+ include .python-version
5
+ include uv.lock
6
+
7
+ recursive-include fuse *
8
+ recursive-exclude fuse/__pycache__ *
9
+
10
+ recursive-include docs *.md
11
+ recursive-include scripts *.sh
12
+
13
+ global-exclude __pycache__
14
+ global-exclude *.py[co]
15
+ global-exclude .DS_Store
16
+ global-exclude dist/*
17
+ global-exclude build/*
18
+ global-exclude *.egg-info
19
+ global-exclude fuse.db
20
+ global-exclude .env
@@ -0,0 +1,306 @@
1
+ Metadata-Version: 2.4
2
+ Name: fuse-io
3
+ Version: 0.1.30
4
+ Summary: Fuse - Workflow automation. A powerful local-first automation platform with visual builder, AI integration, and extensive node library.
5
+ Author-email: Bibek Timilsina <bibektimilsina@example.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/fuse-io/fuse
8
+ Project-URL: Documentation, https://github.com/fuse-io/fuse#readme
9
+ Project-URL: Source Code, https://github.com/fuse-io/fuse
10
+ Project-URL: Bug Tracker, https://github.com/fuse-io/fuse/issues
11
+ Keywords: automation,workflow,no-code,low-code,fastapi,ai,integration
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Intended Audience :: Information Technology
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
23
+ Classifier: Topic :: Office/Business :: Scheduling
24
+ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
25
+ Classifier: Framework :: FastAPI
26
+ Requires-Python: <4.0,>=3.10
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Requires-Dist: alembic>=1.16.5
30
+ Requires-Dist: anthropic>=0.75.0
31
+ Requires-Dist: argon2-cffi>=23.1.0
32
+ Requires-Dist: celery>=5.6.0
33
+ Requires-Dist: click>=8.1.0
34
+ Requires-Dist: email-validator>=2.3.0
35
+ Requires-Dist: emails>=0.6
36
+ Requires-Dist: fastapi>=0.116.1
37
+ Requires-Dist: feedparser>=6.0.11
38
+ Requires-Dist: google-genai>=0.2.2
39
+ Requires-Dist: gunicorn>=23.0.0
40
+ Requires-Dist: httpx>=0.28.1
41
+ Requires-Dist: jinja2>=3.1.6
42
+ Requires-Dist: jsonschema>=4.25.1
43
+ Requires-Dist: openai>=2.8.1
44
+ Requires-Dist: passlib>=1.7.4
45
+ Requires-Dist: psycopg>=3.3.2
46
+ Requires-Dist: psycopg-binary>=3.3.2
47
+ Requires-Dist: psycopg2-binary>=2.9.11
48
+ Requires-Dist: pydantic>=2.11.7
49
+ Requires-Dist: pydantic-settings>=2.10.1
50
+ Requires-Dist: pyjwt>=2.10.1
51
+ Requires-Dist: python-multipart>=0.0.20
52
+ Requires-Dist: redis>=7.1.0
53
+ Requires-Dist: rich>=14.2.0
54
+ Requires-Dist: sentry-sdk>=2.37.0
55
+ Requires-Dist: sqlmodel>=0.0.24
56
+ Requires-Dist: tenacity>=9.1.2
57
+ Requires-Dist: uvicorn[standard]>=0.35.0
58
+ Provides-Extra: dev
59
+ Requires-Dist: coverage>=7.10.6; extra == "dev"
60
+ Requires-Dist: mypy>=1.17.1; extra == "dev"
61
+ Requires-Dist: pre-commit>=4.3.0; extra == "dev"
62
+ Requires-Dist: pytest>=8.4.2; extra == "dev"
63
+ Requires-Dist: ruff>=0.12.12; extra == "dev"
64
+ Requires-Dist: types-passlib>=1.7.7.20250602; extra == "dev"
65
+ Dynamic: license-file
66
+
67
+ # 🚀 Fuse - Workflow Automation
68
+
69
+ [![PyPI version](https://badge.fury.io/py/fuse-io.svg)](https://badge.fury.io/py/fuse-io)
70
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
71
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
72
+
73
+ **Fuse** is a powerful **local-first** workflow automation platform with visual builder, AI integration, and extensive node library. Build complex automations with a drag-and-drop interface, similar to n8n and Zapier, but optimized for local deployment and AI-powered workflows.
74
+
75
+ > **"Keep your workflows in constant fuse"** ⚡
76
+
77
+ ## ✨ Features
78
+
79
+ ### 🎨 Visual Workflow Builder
80
+ - **Drag-and-drop** interface powered by React Flow
81
+ - Real-time workflow execution with live log streaming
82
+ - Support for parallel execution, loops, and conditional branching
83
+ - **29+ pre-built nodes** including triggers, actions, AI, and logic nodes
84
+
85
+ ### 🤖 AI-Powered Automation
86
+ - Built-in **AI LLM nodes** supporting OpenAI, Anthropic, and Google AI
87
+ - **AI Agent** nodes for autonomous task completion
88
+ - AI-assisted workflow generation from natural language prompts
89
+ - Token usage tracking and cost monitoring
90
+
91
+ ### 🔌 Extensive Integration Library
92
+ - **Triggers**: Manual, Cron, Webhook, Email, Form, RSS, WhatsApp
93
+ - **Actions**: HTTP requests, Google Sheets, Slack, Discord, Email
94
+ - **Logic**: Conditions, Switch/Case, Loops, Merge, Delay, Pause
95
+ - **Data**: Transform, Store, Set Variables
96
+ - **Code**: Python and JavaScript execution nodes
97
+
98
+ ### 🔒 Security & Performance
99
+ - **JWT-based authentication** with secure session management
100
+ - **Rate limiting** and **circuit breaker** patterns for external API calls
101
+ - **PostgreSQL** database with Alembic migrations
102
+ - **Redis** for caching and Celery task queue
103
+ - **WebSocket support** for real-time updates
104
+
105
+ ## 📦 Installation
106
+
107
+ ### Quick Start
108
+
109
+ ```bash
110
+ pip install fuse-io
111
+ ```
112
+
113
+ ### Initialize and Start
114
+
115
+ ```bash
116
+ # Initialize configuration
117
+ fuse init
118
+
119
+ # Start the server and builder
120
+ fuse start
121
+ ```
122
+
123
+ Then open your browser to `http://localhost:5678` 🎉
124
+
125
+ ### Custom Configuration
126
+
127
+ ```bash
128
+ fuse start --host 0.0.0.0 --port 3000 --workers 4 --reload
129
+ ```
130
+
131
+ ## 🛠 Development Setup
132
+
133
+ ### Prerequisites
134
+ - Python 3.10 or higher
135
+ - PostgreSQL 14+
136
+ - Redis 6+
137
+ - Node.js 18+ (for frontend development)
138
+
139
+ ### Clone and Install
140
+
141
+ ```bash
142
+ git clone https://github.com/fuse-io/fuse.git
143
+ cd fuse
144
+
145
+ # Backend setup
146
+ cd fuse_backend
147
+ pip install -e ".[dev]"
148
+
149
+ # Frontend setup
150
+ cd ../fuse_frontend
151
+ npm install
152
+ npm run dev
153
+ ```
154
+
155
+ ### Environment Configuration
156
+
157
+ Create a `.env` file in the `fuse_backend` directory:
158
+
159
+ ```bash
160
+ # Database
161
+ DATABASE_URL=postgresql://user:password@localhost:5432/fuse
162
+
163
+ # Redis
164
+ REDIS_URL=redis://localhost:6379/0
165
+
166
+ # Security
167
+ SECRET_KEY=your-secret-key-change-in-production
168
+
169
+ # AI API Keys (Optional)
170
+ OPENAI_API_KEY=sk-...
171
+ ANTHROPIC_API_KEY=sk-ant-...
172
+ GOOGLE_API_KEY=AIza...
173
+
174
+ # OAuth (Optional)
175
+ GOOGLE_OAUTH_CLIENT_ID=...
176
+ GOOGLE_OAUTH_CLIENT_SECRET=...
177
+ SLACK_OAUTH_CLIENT_ID=...
178
+ SLACK_OAUTH_CLIENT_SECRET=...
179
+ ```
180
+
181
+ ### Run with Docker
182
+
183
+ ```bash
184
+ docker-compose up --build
185
+ ```
186
+
187
+ Access the application at `http://localhost:8000`
188
+
189
+ ## 📚 Usage Examples
190
+
191
+ ### Creating Your First Workflow
192
+
193
+ 1. **Add a Trigger**: Start with a Manual Trigger, Webhook, or Cron Schedule
194
+ 2. **Add Actions**: Connect HTTP Request, Google Sheets, or AI nodes
195
+ 3. **Add Logic**: Use conditions, loops, or parallel branches
196
+ 4. **Test & Deploy**: Click "Execute" to test, then activate for production
197
+
198
+ ### Example: AIowered Data Processing
199
+
200
+ ```python
201
+ # Workflow structure:
202
+ # Trigger (Manual) → HTTP Request → AI LLM → Transform → Google Sheets
203
+ ```
204
+
205
+ 1. Fetch data from an API
206
+ 2. Process with AI (summarize, classify, extract)
207
+ 3. Transform the results
208
+ 4. Save to Google Sheets
209
+
210
+ ### Example: Scheduled Report Generation
211
+
212
+ ```python
213
+ # Workflow structure:
214
+ # Cron Trigger → Read Sheets → Loop → AI Agent → Email
215
+ ```
216
+
217
+ 1. Run daily at 9 AM
218
+ 2. Read data from Google Sheets
219
+ 3. Loop through each row
220
+ 4. Generate insights with AI
221
+ 5. Send email report
222
+
223
+ ## 🏗 Architecture
224
+
225
+ ```
226
+ ┌─────────────────────────────────────────┐
227
+ │ Frontend (Next.js) │
228
+ │ - React Flow Workflow Builder │
229
+ │ - Real-time Logs (WebSocket) │
230
+ │ - Node Configuration UI │
231
+ └──────────────────┬──────────────────────┘
232
+ │ HTTP + WebSocket
233
+ ┌──────────────────▼──────────────────────┐
234
+ │ Backend (FastAPI) │
235
+ │ - REST API (JWT Auth) │
236
+ │ - WebSocket for live logs │
237
+ │ - Workflow Engine │
238
+ └──────────────────┬──────────────────────┘
239
+
240
+ ┌──────────┴──────────┐
241
+ │ │
242
+ ┌───────▼────────┐ ┌────────▼─────────┐
243
+ │ PostgreSQL │ │ Redis + Celery │
244
+ │ (Workflows & │ │ (Task Queue & │
245
+ │ Executions) │ │ Cache) │
246
+ └────────────────┘ └──────────────────┘
247
+ ```
248
+
249
+ ## 🚀 CLI Commands
250
+
251
+ ```bash
252
+ # Start server
253
+ fuse start [--host HOST] [--port PORT] [--workers N] [--reload]
254
+
255
+ # Initialize project
256
+ fuse init
257
+
258
+ # Show version
259
+ fuse version
260
+
261
+ # Help
262
+ fuse --help
263
+ ```
264
+
265
+ ## 🔐 Security Best Practices
266
+
267
+ 1. **Change default SECRET_KEY** in production
268
+ 2. Use **environment variables** for sensitive data
269
+ 3. Enable **rate limiting** for public endpoints
270
+ 4. Use **HTTPS** in production deployments
271
+ 5. Regularly **rotate API keys** and credentials
272
+
273
+ ## 🤝 Contributing
274
+
275
+ Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
276
+
277
+ ### Development Workflow
278
+
279
+ 1. Fork the repository
280
+ 2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
281
+ 3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
282
+ 4. Push to the branch (`git push origin feature/AmazingFeature`)
283
+ 5. Open a Pull Request
284
+
285
+ ## 📄 License
286
+
287
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
288
+
289
+ ## 🙏 Acknowledgments
290
+
291
+ - Inspired by [n8n](https://n8n.io/) and [Zapier](https://zapier.com/)
292
+ - Built with [FastAPI](https://fastapi.tiangolo.com/)
293
+ - UI powered by [React Flow](https://reactflow.dev/)
294
+ - Based on [full-stack-fastapi-template](https://github.com/tiangolo/full-stack-fastapi-template)
295
+
296
+ ## 📞 Support
297
+
298
+ - 📖 [Documentation](https://github.com/fuse-io/fuse#readme)
299
+ - 🐛 [Issue Tracker](https://github.com/fuse-io/fuse/issues)
300
+ - 💬 [Discussions](https://github.com/fuse-io/fuse/discussions)
301
+
302
+ ---
303
+
304
+ **Made with ⚡ by [Bibek Timilsina](https://github.com/bibektimilsina)**
305
+
306
+ *Fuse - Keep your workflows in constant fuse* 🌊
@@ -0,0 +1,240 @@
1
+ # 🚀 Fuse - Workflow Automation
2
+
3
+ [![PyPI version](https://badge.fury.io/py/fuse-io.svg)](https://badge.fury.io/py/fuse-io)
4
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+
7
+ **Fuse** is a powerful **local-first** workflow automation platform with visual builder, AI integration, and extensive node library. Build complex automations with a drag-and-drop interface, similar to n8n and Zapier, but optimized for local deployment and AI-powered workflows.
8
+
9
+ > **"Keep your workflows in constant fuse"** ⚡
10
+
11
+ ## ✨ Features
12
+
13
+ ### 🎨 Visual Workflow Builder
14
+ - **Drag-and-drop** interface powered by React Flow
15
+ - Real-time workflow execution with live log streaming
16
+ - Support for parallel execution, loops, and conditional branching
17
+ - **29+ pre-built nodes** including triggers, actions, AI, and logic nodes
18
+
19
+ ### 🤖 AI-Powered Automation
20
+ - Built-in **AI LLM nodes** supporting OpenAI, Anthropic, and Google AI
21
+ - **AI Agent** nodes for autonomous task completion
22
+ - AI-assisted workflow generation from natural language prompts
23
+ - Token usage tracking and cost monitoring
24
+
25
+ ### 🔌 Extensive Integration Library
26
+ - **Triggers**: Manual, Cron, Webhook, Email, Form, RSS, WhatsApp
27
+ - **Actions**: HTTP requests, Google Sheets, Slack, Discord, Email
28
+ - **Logic**: Conditions, Switch/Case, Loops, Merge, Delay, Pause
29
+ - **Data**: Transform, Store, Set Variables
30
+ - **Code**: Python and JavaScript execution nodes
31
+
32
+ ### 🔒 Security & Performance
33
+ - **JWT-based authentication** with secure session management
34
+ - **Rate limiting** and **circuit breaker** patterns for external API calls
35
+ - **PostgreSQL** database with Alembic migrations
36
+ - **Redis** for caching and Celery task queue
37
+ - **WebSocket support** for real-time updates
38
+
39
+ ## 📦 Installation
40
+
41
+ ### Quick Start
42
+
43
+ ```bash
44
+ pip install fuse-io
45
+ ```
46
+
47
+ ### Initialize and Start
48
+
49
+ ```bash
50
+ # Initialize configuration
51
+ fuse init
52
+
53
+ # Start the server and builder
54
+ fuse start
55
+ ```
56
+
57
+ Then open your browser to `http://localhost:5678` 🎉
58
+
59
+ ### Custom Configuration
60
+
61
+ ```bash
62
+ fuse start --host 0.0.0.0 --port 3000 --workers 4 --reload
63
+ ```
64
+
65
+ ## 🛠 Development Setup
66
+
67
+ ### Prerequisites
68
+ - Python 3.10 or higher
69
+ - PostgreSQL 14+
70
+ - Redis 6+
71
+ - Node.js 18+ (for frontend development)
72
+
73
+ ### Clone and Install
74
+
75
+ ```bash
76
+ git clone https://github.com/fuse-io/fuse.git
77
+ cd fuse
78
+
79
+ # Backend setup
80
+ cd fuse_backend
81
+ pip install -e ".[dev]"
82
+
83
+ # Frontend setup
84
+ cd ../fuse_frontend
85
+ npm install
86
+ npm run dev
87
+ ```
88
+
89
+ ### Environment Configuration
90
+
91
+ Create a `.env` file in the `fuse_backend` directory:
92
+
93
+ ```bash
94
+ # Database
95
+ DATABASE_URL=postgresql://user:password@localhost:5432/fuse
96
+
97
+ # Redis
98
+ REDIS_URL=redis://localhost:6379/0
99
+
100
+ # Security
101
+ SECRET_KEY=your-secret-key-change-in-production
102
+
103
+ # AI API Keys (Optional)
104
+ OPENAI_API_KEY=sk-...
105
+ ANTHROPIC_API_KEY=sk-ant-...
106
+ GOOGLE_API_KEY=AIza...
107
+
108
+ # OAuth (Optional)
109
+ GOOGLE_OAUTH_CLIENT_ID=...
110
+ GOOGLE_OAUTH_CLIENT_SECRET=...
111
+ SLACK_OAUTH_CLIENT_ID=...
112
+ SLACK_OAUTH_CLIENT_SECRET=...
113
+ ```
114
+
115
+ ### Run with Docker
116
+
117
+ ```bash
118
+ docker-compose up --build
119
+ ```
120
+
121
+ Access the application at `http://localhost:8000`
122
+
123
+ ## 📚 Usage Examples
124
+
125
+ ### Creating Your First Workflow
126
+
127
+ 1. **Add a Trigger**: Start with a Manual Trigger, Webhook, or Cron Schedule
128
+ 2. **Add Actions**: Connect HTTP Request, Google Sheets, or AI nodes
129
+ 3. **Add Logic**: Use conditions, loops, or parallel branches
130
+ 4. **Test & Deploy**: Click "Execute" to test, then activate for production
131
+
132
+ ### Example: AIowered Data Processing
133
+
134
+ ```python
135
+ # Workflow structure:
136
+ # Trigger (Manual) → HTTP Request → AI LLM → Transform → Google Sheets
137
+ ```
138
+
139
+ 1. Fetch data from an API
140
+ 2. Process with AI (summarize, classify, extract)
141
+ 3. Transform the results
142
+ 4. Save to Google Sheets
143
+
144
+ ### Example: Scheduled Report Generation
145
+
146
+ ```python
147
+ # Workflow structure:
148
+ # Cron Trigger → Read Sheets → Loop → AI Agent → Email
149
+ ```
150
+
151
+ 1. Run daily at 9 AM
152
+ 2. Read data from Google Sheets
153
+ 3. Loop through each row
154
+ 4. Generate insights with AI
155
+ 5. Send email report
156
+
157
+ ## 🏗 Architecture
158
+
159
+ ```
160
+ ┌─────────────────────────────────────────┐
161
+ │ Frontend (Next.js) │
162
+ │ - React Flow Workflow Builder │
163
+ │ - Real-time Logs (WebSocket) │
164
+ │ - Node Configuration UI │
165
+ └──────────────────┬──────────────────────┘
166
+ │ HTTP + WebSocket
167
+ ┌──────────────────▼──────────────────────┐
168
+ │ Backend (FastAPI) │
169
+ │ - REST API (JWT Auth) │
170
+ │ - WebSocket for live logs │
171
+ │ - Workflow Engine │
172
+ └──────────────────┬──────────────────────┘
173
+
174
+ ┌──────────┴──────────┐
175
+ │ │
176
+ ┌───────▼────────┐ ┌────────▼─────────┐
177
+ │ PostgreSQL │ │ Redis + Celery │
178
+ │ (Workflows & │ │ (Task Queue & │
179
+ │ Executions) │ │ Cache) │
180
+ └────────────────┘ └──────────────────┘
181
+ ```
182
+
183
+ ## 🚀 CLI Commands
184
+
185
+ ```bash
186
+ # Start server
187
+ fuse start [--host HOST] [--port PORT] [--workers N] [--reload]
188
+
189
+ # Initialize project
190
+ fuse init
191
+
192
+ # Show version
193
+ fuse version
194
+
195
+ # Help
196
+ fuse --help
197
+ ```
198
+
199
+ ## 🔐 Security Best Practices
200
+
201
+ 1. **Change default SECRET_KEY** in production
202
+ 2. Use **environment variables** for sensitive data
203
+ 3. Enable **rate limiting** for public endpoints
204
+ 4. Use **HTTPS** in production deployments
205
+ 5. Regularly **rotate API keys** and credentials
206
+
207
+ ## 🤝 Contributing
208
+
209
+ Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
210
+
211
+ ### Development Workflow
212
+
213
+ 1. Fork the repository
214
+ 2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
215
+ 3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
216
+ 4. Push to the branch (`git push origin feature/AmazingFeature`)
217
+ 5. Open a Pull Request
218
+
219
+ ## 📄 License
220
+
221
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
222
+
223
+ ## 🙏 Acknowledgments
224
+
225
+ - Inspired by [n8n](https://n8n.io/) and [Zapier](https://zapier.com/)
226
+ - Built with [FastAPI](https://fastapi.tiangolo.com/)
227
+ - UI powered by [React Flow](https://reactflow.dev/)
228
+ - Based on [full-stack-fastapi-template](https://github.com/tiangolo/full-stack-fastapi-template)
229
+
230
+ ## 📞 Support
231
+
232
+ - 📖 [Documentation](https://github.com/fuse-io/fuse#readme)
233
+ - 🐛 [Issue Tracker](https://github.com/fuse-io/fuse/issues)
234
+ - 💬 [Discussions](https://github.com/fuse-io/fuse/discussions)
235
+
236
+ ---
237
+
238
+ **Made with ⚡ by [Bibek Timilsina](https://github.com/bibektimilsina)**
239
+
240
+ *Fuse - Keep your workflows in constant fuse* 🌊