voodoo-framework 2.9.0__tar.gz → 3.1.0__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 (401) hide show
  1. voodoo_framework-3.1.0/PKG-INFO +631 -0
  2. voodoo_framework-3.1.0/README.md +560 -0
  3. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/pyproject.toml +11 -10
  4. voodoo_framework-3.1.0/src/voodoo/__init__.py +25 -0
  5. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/adapters/tailwind.py +31 -19
  6. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/adapters/voodoo_css.py +1 -3
  7. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ai/agent_legacy.py +42 -34
  8. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ai/agent_runtime_truth.py +2 -2
  9. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ai/providers/__init__.py +8 -8
  10. voodoo_framework-3.1.0/src/voodoo/ai/providers/anthropic.py +7 -0
  11. voodoo_framework-3.1.0/src/voodoo/ai/providers/gemini.py +7 -0
  12. voodoo_framework-3.1.0/src/voodoo/ai/providers/ollama.py +7 -0
  13. voodoo_framework-3.1.0/src/voodoo/ai/providers/openai.py +7 -0
  14. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ai/tools/__init__.py +3 -3
  15. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ai/tools/registry.py +2 -2
  16. voodoo_framework-3.1.0/src/voodoo/auth/guards.py +144 -0
  17. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/auth/jwt.py +38 -35
  18. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/auth/user.py +10 -3
  19. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/__init__.py +2 -0
  20. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/approvals.py +1 -1
  21. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/dev.py +1 -1
  22. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/doctor.py +78 -73
  23. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/fabric.py +1 -1
  24. voodoo_framework-3.1.0/src/voodoo/cli/graph.py +36 -0
  25. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/inspect.py +91 -55
  26. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/new.py +78 -110
  27. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/recover.py +1 -1
  28. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/scaffolding.py +103 -102
  29. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/status.py +2 -2
  30. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/tasks.py +1 -1
  31. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/theme.py +4 -4
  32. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/workers_cmd.py +1 -1
  33. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/core/__init__.py +2 -1
  34. voodoo_framework-3.1.0/src/voodoo/core/app.py +561 -0
  35. voodoo_framework-3.1.0/src/voodoo/core/events.py +23 -0
  36. voodoo_framework-3.1.0/src/voodoo/core/routing.py +14 -0
  37. voodoo_framework-3.1.0/src/voodoo/core/sitemap.py +110 -0
  38. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/core/state.py +4 -5
  39. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/data/__init__.py +18 -0
  40. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/data/base.py +15 -4
  41. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/data/model.py +5 -5
  42. voodoo_framework-3.1.0/src/voodoo/data/store_backend.py +335 -0
  43. voodoo_framework-3.1.0/src/voodoo/data/store_facade.py +746 -0
  44. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/gateway.py +2 -2
  45. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/http.py +1 -1
  46. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/mqtt.py +5 -6
  47. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/protocol.py +2 -2
  48. voodoo_framework-3.1.0/src/voodoo/integrations/__init__.py +1 -0
  49. voodoo_framework-3.1.0/src/voodoo/integrations/ai/__init__.py +1 -0
  50. {voodoo_framework-2.9.0/src/voodoo/ai/providers → voodoo_framework-3.1.0/src/voodoo/integrations/ai}/anthropic.py +1 -1
  51. {voodoo_framework-2.9.0/src/voodoo/ai/providers → voodoo_framework-3.1.0/src/voodoo/integrations/ai}/gemini.py +1 -1
  52. {voodoo_framework-2.9.0/src/voodoo/ai/providers → voodoo_framework-3.1.0/src/voodoo/integrations/ai}/ollama.py +1 -1
  53. {voodoo_framework-2.9.0/src/voodoo/ai/providers → voodoo_framework-3.1.0/src/voodoo/integrations/ai}/openai.py +1 -1
  54. {voodoo_framework-2.9.0/src/voodoo → voodoo_framework-3.1.0/src/voodoo/integrations}/mcp/__init__.py +67 -107
  55. voodoo_framework-2.9.0/src/voodoo/telemetry/otlp.py → voodoo_framework-3.1.0/src/voodoo/integrations/otel.py +8 -9
  56. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/memory/interfaces.py +2 -3
  57. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/mesh/__init__.py +10 -10
  58. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/mesh/client.py +1 -1
  59. {voodoo_framework-2.9.0/src/voodoo/telemetry → voodoo_framework-3.1.0/src/voodoo/observability}/__init__.py +5 -3
  60. {voodoo_framework-2.9.0/src/voodoo/telemetry → voodoo_framework-3.1.0/src/voodoo/observability}/api.py +1 -1
  61. {voodoo_framework-2.9.0/src/voodoo/telemetry → voodoo_framework-3.1.0/src/voodoo/observability}/middleware.py +1 -1
  62. {voodoo_framework-2.9.0/src/voodoo/telemetry → voodoo_framework-3.1.0/src/voodoo/observability}/store.py +5 -5
  63. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/protocol/schemas.py +2 -2
  64. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/routing/api.py +78 -74
  65. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/__init__.py +138 -30
  66. voodoo_framework-3.1.0/src/voodoo/runtime/agency/__init__.py +39 -0
  67. {voodoo_framework-2.9.0/src/voodoo/runtime → voodoo_framework-3.1.0/src/voodoo/runtime/agency}/adaptive.py +102 -98
  68. {voodoo_framework-2.9.0/src/voodoo/runtime → voodoo_framework-3.1.0/src/voodoo/runtime/agency}/goal.py +3 -3
  69. voodoo_framework-3.1.0/src/voodoo/runtime/application_graph.py +541 -0
  70. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/context.py +1 -1
  71. voodoo_framework-3.1.0/src/voodoo/runtime/conventions.py +71 -0
  72. voodoo_framework-3.1.0/src/voodoo/runtime/dependency_graph.py +138 -0
  73. voodoo_framework-3.1.0/src/voodoo/runtime/distributed/__init__.py +35 -0
  74. {voodoo_framework-2.9.0/src/voodoo/runtime → voodoo_framework-3.1.0/src/voodoo/runtime/distributed}/fabric.py +10 -4
  75. {voodoo_framework-2.9.0/src/voodoo/mesh → voodoo_framework-3.1.0/src/voodoo/runtime/distributed}/replay.py +4 -1
  76. voodoo_framework-3.1.0/src/voodoo/runtime/execution/__init__.py +5 -0
  77. {voodoo_framework-2.9.0/src/voodoo/runtime → voodoo_framework-3.1.0/src/voodoo/runtime/execution}/engine.py +7 -7
  78. voodoo_framework-2.9.0/src/voodoo/runtime/execution.py → voodoo_framework-3.1.0/src/voodoo/runtime/execution/model.py +1 -1
  79. voodoo_framework-3.1.0/src/voodoo/runtime/extension.py +116 -0
  80. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/graph.py +1 -1
  81. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/human.py +1 -1
  82. voodoo_framework-3.1.0/src/voodoo/runtime/inspection/__init__.py +11 -0
  83. voodoo_framework-3.1.0/src/voodoo/runtime/inspection/lineage.py +147 -0
  84. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/persistence.py +1 -1
  85. voodoo_framework-3.1.0/src/voodoo/runtime/reconciliation/__init__.py +25 -0
  86. voodoo_framework-3.1.0/src/voodoo/runtime/reconciliation/reconcile.py +318 -0
  87. voodoo_framework-3.1.0/src/voodoo/runtime/runtime.py +468 -0
  88. voodoo_framework-3.1.0/src/voodoo/runtime/scheduling/__init__.py +34 -0
  89. voodoo_framework-3.1.0/src/voodoo/runtime/scheduling/dispatch.py +104 -0
  90. voodoo_framework-3.1.0/src/voodoo/runtime/scheduling/handoff.py +81 -0
  91. voodoo_framework-2.9.0/src/voodoo/runtime/scheduler.py → voodoo_framework-3.1.0/src/voodoo/runtime/scheduling/schedule_service.py +1 -1
  92. voodoo_framework-2.9.0/src/voodoo/workers/__init__.py → voodoo_framework-3.1.0/src/voodoo/runtime/scheduling/tasks.py +6 -6
  93. voodoo_framework-3.1.0/src/voodoo/runtime/scheduling/work.py +275 -0
  94. voodoo_framework-2.9.0/src/voodoo/workers/queue.py → voodoo_framework-3.1.0/src/voodoo/runtime/scheduling/workers.py +12 -7
  95. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/store.py +3 -3
  96. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/task.py +3 -3
  97. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/workflow.py +5 -5
  98. voodoo_framework-3.1.0/src/voodoo/security/headers.py +46 -0
  99. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/security/secrets.py +1 -1
  100. voodoo_framework-3.1.0/src/voodoo/seo.py +292 -0
  101. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/status.py +3 -3
  102. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/events/local.py +1 -1
  103. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/events/postgres.py +1 -1
  104. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/events/sqlite.py +1 -1
  105. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/events/store.py +41 -55
  106. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/objects/s3.py +3 -3
  107. voodoo_framework-3.1.0/src/voodoo/storage/objects/store.py +151 -0
  108. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/component.py +2 -4
  109. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/controls.py +6 -10
  110. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/data_extended.py +13 -15
  111. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/forms_extended.py +12 -6
  112. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/foundation.py +10 -6
  113. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/interaction_kernel.py +4 -11
  114. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/interactions.py +1 -2
  115. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/library.py +2 -6
  116. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/navigation.py +5 -7
  117. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/navigation_extended.py +15 -17
  118. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/state.py +49 -1
  119. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/styles/palette.py +3 -1
  120. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/styles/presets.py +2 -2
  121. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/workspace.py +27 -19
  122. voodoo_framework-3.1.0/src/voodoo_framework.egg-info/PKG-INFO +631 -0
  123. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo_framework.egg-info/SOURCES.txt +46 -145
  124. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo_framework.egg-info/requires.txt +1 -1
  125. voodoo_framework-2.9.0/PKG-INFO +0 -432
  126. voodoo_framework-2.9.0/README.md +0 -361
  127. voodoo_framework-2.9.0/src/voodoo/__init__.py +0 -413
  128. voodoo_framework-2.9.0/src/voodoo/agent.py +0 -9
  129. voodoo_framework-2.9.0/src/voodoo/api.py +0 -13
  130. voodoo_framework-2.9.0/src/voodoo/auth/guards.py +0 -282
  131. voodoo_framework-2.9.0/src/voodoo/core/app.py +0 -443
  132. voodoo_framework-2.9.0/src/voodoo/core/events.py +0 -21
  133. voodoo_framework-2.9.0/src/voodoo/core/routing.py +0 -18
  134. voodoo_framework-2.9.0/src/voodoo/core/sitemap.py +0 -134
  135. voodoo_framework-2.9.0/src/voodoo/data/store_backend.py +0 -167
  136. voodoo_framework-2.9.0/src/voodoo/data/store_facade.py +0 -346
  137. voodoo_framework-2.9.0/src/voodoo/queue.py +0 -12
  138. voodoo_framework-2.9.0/src/voodoo/security/headers.py +0 -50
  139. voodoo_framework-2.9.0/src/voodoo/seo.py +0 -292
  140. voodoo_framework-2.9.0/src/voodoo/storage/objects/store.py +0 -124
  141. voodoo_framework-2.9.0/src/voodoo/theme.py +0 -29
  142. voodoo_framework-2.9.0/src/voodoo/tools/__init__.py +0 -9
  143. voodoo_framework-2.9.0/src/voodoo/tools/registry.py +0 -20
  144. voodoo_framework-2.9.0/src/voodoo_framework.egg-info/PKG-INFO +0 -432
  145. voodoo_framework-2.9.0/tests/test_adaptive_agency_correctness.py +0 -233
  146. voodoo_framework-2.9.0/tests/test_agency_runtime_truth.py +0 -172
  147. voodoo_framework-2.9.0/tests/test_agent.py +0 -603
  148. voodoo_framework-2.9.0/tests/test_agent_registry.py +0 -391
  149. voodoo_framework-2.9.0/tests/test_agent_runtime.py +0 -108
  150. voodoo_framework-2.9.0/tests/test_app.py +0 -344
  151. voodoo_framework-2.9.0/tests/test_auth.py +0 -267
  152. voodoo_framework-2.9.0/tests/test_brand.py +0 -61
  153. voodoo_framework-2.9.0/tests/test_capability_security.py +0 -426
  154. voodoo_framework-2.9.0/tests/test_checkpoint_resume.py +0 -134
  155. voodoo_framework-2.9.0/tests/test_chrome.py +0 -156
  156. voodoo_framework-2.9.0/tests/test_cli.py +0 -431
  157. voodoo_framework-2.9.0/tests/test_cli_fabric.py +0 -28
  158. voodoo_framework-2.9.0/tests/test_cli_inspect.py +0 -223
  159. voodoo_framework-2.9.0/tests/test_components.py +0 -269
  160. voodoo_framework-2.9.0/tests/test_config.py +0 -234
  161. voodoo_framework-2.9.0/tests/test_contract_api.py +0 -242
  162. voodoo_framework-2.9.0/tests/test_create.py +0 -104
  163. voodoo_framework-2.9.0/tests/test_create_store_smoke.py +0 -60
  164. voodoo_framework-2.9.0/tests/test_data.py +0 -92
  165. voodoo_framework-2.9.0/tests/test_data_extended.py +0 -275
  166. voodoo_framework-2.9.0/tests/test_design_system.py +0 -201
  167. voodoo_framework-2.9.0/tests/test_design_system2.py +0 -136
  168. voodoo_framework-2.9.0/tests/test_design_system_premium.py +0 -101
  169. voodoo_framework-2.9.0/tests/test_design_system_theme_contract.py +0 -53
  170. voodoo_framework-2.9.0/tests/test_durable_goal_runtime.py +0 -161
  171. voodoo_framework-2.9.0/tests/test_durable_hitl.py +0 -346
  172. voodoo_framework-2.9.0/tests/test_durable_workflow_runtime.py +0 -157
  173. voodoo_framework-2.9.0/tests/test_edge_device.py +0 -325
  174. voodoo_framework-2.9.0/tests/test_edge_e2e.py +0 -186
  175. voodoo_framework-2.9.0/tests/test_edge_gateway.py +0 -1002
  176. voodoo_framework-2.9.0/tests/test_edge_http.py +0 -331
  177. voodoo_framework-2.9.0/tests/test_edge_protocol.py +0 -159
  178. voodoo_framework-2.9.0/tests/test_edge_security.py +0 -399
  179. voodoo_framework-2.9.0/tests/test_edge_voodoo_store.py +0 -102
  180. voodoo_framework-2.9.0/tests/test_edge_world.py +0 -156
  181. voodoo_framework-2.9.0/tests/test_events.py +0 -54
  182. voodoo_framework-2.9.0/tests/test_execution_sqlite_store.py +0 -152
  183. voodoo_framework-2.9.0/tests/test_forms_extended.py +0 -209
  184. voodoo_framework-2.9.0/tests/test_foundation_components.py +0 -138
  185. voodoo_framework-2.9.0/tests/test_goal_runtime.py +0 -169
  186. voodoo_framework-2.9.0/tests/test_hitl_persistence_correctness.py +0 -140
  187. voodoo_framework-2.9.0/tests/test_http_runtime.py +0 -129
  188. voodoo_framework-2.9.0/tests/test_human.py +0 -133
  189. voodoo_framework-2.9.0/tests/test_i18n.py +0 -77
  190. voodoo_framework-2.9.0/tests/test_identity_execution.py +0 -149
  191. voodoo_framework-2.9.0/tests/test_identity_foundation.py +0 -156
  192. voodoo_framework-2.9.0/tests/test_integration.py +0 -626
  193. voodoo_framework-2.9.0/tests/test_interaction_components.py +0 -363
  194. voodoo_framework-2.9.0/tests/test_interaction_kernel.py +0 -307
  195. voodoo_framework-2.9.0/tests/test_mcp.py +0 -326
  196. voodoo_framework-2.9.0/tests/test_mcp_runtime.py +0 -102
  197. voodoo_framework-2.9.0/tests/test_memory.py +0 -412
  198. voodoo_framework-2.9.0/tests/test_mesh.py +0 -350
  199. voodoo_framework-2.9.0/tests/test_mesh_event_bus.py +0 -67
  200. voodoo_framework-2.9.0/tests/test_mesh_remote_auth.py +0 -216
  201. voodoo_framework-2.9.0/tests/test_mesh_remote_authority.py +0 -164
  202. voodoo_framework-2.9.0/tests/test_mesh_remote_execution.py +0 -326
  203. voodoo_framework-2.9.0/tests/test_mesh_remote_outcomes.py +0 -205
  204. voodoo_framework-2.9.0/tests/test_mesh_remote_replay.py +0 -178
  205. voodoo_framework-2.9.0/tests/test_mesh_two_node_acceptance.py +0 -254
  206. voodoo_framework-2.9.0/tests/test_model.py +0 -193
  207. voodoo_framework-2.9.0/tests/test_navigation_extended.py +0 -224
  208. voodoo_framework-2.9.0/tests/test_node_membership.py +0 -134
  209. voodoo_framework-2.9.0/tests/test_object_store.py +0 -92
  210. voodoo_framework-2.9.0/tests/test_observability.py +0 -459
  211. voodoo_framework-2.9.0/tests/test_operational_policy.py +0 -160
  212. voodoo_framework-2.9.0/tests/test_operational_runtime_ui.py +0 -70
  213. voodoo_framework-2.9.0/tests/test_persistence.py +0 -187
  214. voodoo_framework-2.9.0/tests/test_planner_adaptive.py +0 -269
  215. voodoo_framework-2.9.0/tests/test_primitives.py +0 -529
  216. voodoo_framework-2.9.0/tests/test_product_components.py +0 -176
  217. voodoo_framework-2.9.0/tests/test_protocol.py +0 -369
  218. voodoo_framework-2.9.0/tests/test_protocol_fabric.py +0 -55
  219. voodoo_framework-2.9.0/tests/test_protocol_operational.py +0 -96
  220. voodoo_framework-2.9.0/tests/test_provider_switching.py +0 -71
  221. voodoo_framework-2.9.0/tests/test_providers.py +0 -352
  222. voodoo_framework-2.9.0/tests/test_public_api_3.py +0 -43
  223. voodoo_framework-2.9.0/tests/test_public_assets.py +0 -48
  224. voodoo_framework-2.9.0/tests/test_queue.py +0 -44
  225. voodoo_framework-2.9.0/tests/test_reactive.py +0 -332
  226. voodoo_framework-2.9.0/tests/test_runtime.py +0 -596
  227. voodoo_framework-2.9.0/tests/test_runtime_correctness.py +0 -93
  228. voodoo_framework-2.9.0/tests/test_runtime_fabric.py +0 -226
  229. voodoo_framework-2.9.0/tests/test_runtime_store_app_lifecycle.py +0 -53
  230. voodoo_framework-2.9.0/tests/test_runtime_store_lifecycle.py +0 -211
  231. voodoo_framework-2.9.0/tests/test_runtime_store_provider.py +0 -200
  232. voodoo_framework-2.9.0/tests/test_runtime_transaction.py +0 -156
  233. voodoo_framework-2.9.0/tests/test_scheduler.py +0 -128
  234. voodoo_framework-2.9.0/tests/test_security.py +0 -460
  235. voodoo_framework-2.9.0/tests/test_seo.py +0 -508
  236. voodoo_framework-2.9.0/tests/test_sprint27_convergence.py +0 -129
  237. voodoo_framework-2.9.0/tests/test_sprint28_acceptance.py +0 -154
  238. voodoo_framework-2.9.0/tests/test_state.py +0 -108
  239. voodoo_framework-2.9.0/tests/test_store_first_user_journey.py +0 -116
  240. voodoo_framework-2.9.0/tests/test_store_model_backend.py +0 -209
  241. voodoo_framework-2.9.0/tests/test_store_only_core_import.py +0 -89
  242. voodoo_framework-2.9.0/tests/test_theme.py +0 -119
  243. voodoo_framework-2.9.0/tests/test_theme_presets.py +0 -107
  244. voodoo_framework-2.9.0/tests/test_tools.py +0 -241
  245. voodoo_framework-2.9.0/tests/test_ui.py +0 -603
  246. voodoo_framework-2.9.0/tests/test_ui_magic.py +0 -101
  247. voodoo_framework-2.9.0/tests/test_ui_magic_acceptance.py +0 -99
  248. voodoo_framework-2.9.0/tests/test_voodoo_store_events.py +0 -64
  249. voodoo_framework-2.9.0/tests/test_voodoo_store_execution.py +0 -104
  250. voodoo_framework-2.9.0/tests/test_voodoo_store_hitl_restart.py +0 -138
  251. voodoo_framework-2.9.0/tests/test_voodoo_store_queue.py +0 -290
  252. voodoo_framework-2.9.0/tests/test_voodoo_store_scheduler.py +0 -253
  253. voodoo_framework-2.9.0/tests/test_voodoo_system_components.py +0 -197
  254. voodoo_framework-2.9.0/tests/test_websocket.py +0 -62
  255. voodoo_framework-2.9.0/tests/test_worker_retry_semantics.py +0 -77
  256. voodoo_framework-2.9.0/tests/test_workers.py +0 -201
  257. voodoo_framework-2.9.0/tests/test_workspace.py +0 -249
  258. voodoo_framework-2.9.0/tests/test_world_aware_execution.py +0 -103
  259. voodoo_framework-2.9.0/tests/test_world_model.py +0 -134
  260. voodoo_framework-2.9.0/tests/test_world_sqlite.py +0 -121
  261. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/LICENSE +0 -0
  262. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/setup.cfg +0 -0
  263. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/adapters/__init__.py +0 -0
  264. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/adapters/capabilities.py +0 -0
  265. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/adapters/registry.py +0 -0
  266. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/agents/__init__.py +0 -0
  267. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/agents/models.py +0 -0
  268. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/agents/registry.py +0 -0
  269. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ai/__init__.py +0 -0
  270. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ai/agent.py +0 -0
  271. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ai/providers/mock.py +0 -0
  272. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/auth/__init__.py +0 -0
  273. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/auth/cookies.py +0 -0
  274. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/auth/middleware.py +0 -0
  275. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/auth/passwords.py +0 -0
  276. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/__main__.py +0 -0
  277. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/agents.py +0 -0
  278. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/ai.py +0 -0
  279. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/auth.py +0 -0
  280. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/create.py +0 -0
  281. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/executions.py +0 -0
  282. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/generate.py +0 -0
  283. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/objects.py +0 -0
  284. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/protocol.py +0 -0
  285. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/routes.py +0 -0
  286. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/schedules.py +0 -0
  287. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/start.py +0 -0
  288. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/terminal.py +0 -0
  289. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/cli/version.py +0 -0
  290. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/components.py +0 -0
  291. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/config.py +0 -0
  292. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/core/errors.py +0 -0
  293. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/core/render.py +0 -0
  294. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/data/store_model.py +0 -0
  295. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/__init__.py +0 -0
  296. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/auth.py +0 -0
  297. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/errors.py +0 -0
  298. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/models.py +0 -0
  299. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/simulator.py +0 -0
  300. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/store.py +0 -0
  301. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/store_voodoo.py +0 -0
  302. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/edge/world.py +0 -0
  303. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/i18n.py +0 -0
  304. {voodoo_framework-2.9.0/src/voodoo → voodoo_framework-3.1.0/src/voodoo/integrations}/mcp/client.py +0 -0
  305. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/memory/__init__.py +0 -0
  306. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/memory/sqlite.py +0 -0
  307. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/mesh/event_bus.py +0 -0
  308. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/primitives/__init__.py +0 -0
  309. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/primitives/capability.py +0 -0
  310. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/primitives/compute.py +0 -0
  311. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/primitives/constraint.py +0 -0
  312. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/primitives/effect.py +0 -0
  313. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/primitives/intent.py +0 -0
  314. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/primitives/resource.py +0 -0
  315. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/primitives/state.py +0 -0
  316. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/primitives/time.py +0 -0
  317. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/protocol/__init__.py +0 -0
  318. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/protocol/export.py +0 -0
  319. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/protocol/fabric.py +0 -0
  320. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/protocol/operational.py +0 -0
  321. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/py.typed +0 -0
  322. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/routing/pages.py +0 -0
  323. {voodoo_framework-2.9.0/src/voodoo/runtime → voodoo_framework-3.1.0/src/voodoo/runtime/agency}/goal_store.py +0 -0
  324. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/capability.py +0 -0
  325. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/constraint.py +0 -0
  326. {voodoo_framework-2.9.0/src/voodoo/mesh → voodoo_framework-3.1.0/src/voodoo/runtime/distributed}/auth.py +0 -0
  327. {voodoo_framework-2.9.0/src/voodoo/runtime → voodoo_framework-3.1.0/src/voodoo/runtime/distributed}/membership.py +0 -0
  328. {voodoo_framework-2.9.0/src/voodoo/mesh → voodoo_framework-3.1.0/src/voodoo/runtime/distributed}/remote.py +0 -0
  329. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/errors.py +0 -0
  330. /voodoo_framework-2.9.0/src/voodoo/runtime/world_execution.py → /voodoo_framework-3.1.0/src/voodoo/runtime/execution/world.py +0 -0
  331. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/identity.py +0 -0
  332. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/identity_store.py +0 -0
  333. {voodoo_framework-2.9.0/src/voodoo/runtime → voodoo_framework-3.1.0/src/voodoo/runtime/inspection}/dashboard.py +0 -0
  334. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/operations.py +0 -0
  335. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/planner.py +0 -0
  336. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/policy.py +0 -0
  337. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/transaction.py +0 -0
  338. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/runtime/workflow_store.py +0 -0
  339. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/schedule.py +0 -0
  340. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/security/__init__.py +0 -0
  341. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/security/cors.py +0 -0
  342. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/security/csrf.py +0 -0
  343. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/security/passwords.py +0 -0
  344. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/security/rate_limit.py +0 -0
  345. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/security/redaction.py +0 -0
  346. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/static/client.js +0 -0
  347. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/__init__.py +0 -0
  348. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/cache/__init__.py +0 -0
  349. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/cache/interfaces.py +0 -0
  350. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/cache/memory.py +0 -0
  351. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/cache/redis.py +0 -0
  352. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/database/__init__.py +0 -0
  353. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/database/interfaces.py +0 -0
  354. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/database/postgres.py +0 -0
  355. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/database/sqlite.py +0 -0
  356. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/events/__init__.py +0 -0
  357. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/events/interfaces.py +0 -0
  358. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/execution/__init__.py +0 -0
  359. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/execution/migrations.py +0 -0
  360. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/execution/postgres.py +0 -0
  361. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/execution/sqlite.py +0 -0
  362. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/execution/store.py +0 -0
  363. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/manager.py +0 -0
  364. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/objects/__init__.py +0 -0
  365. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/objects/interfaces.py +0 -0
  366. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/objects/local.py +0 -0
  367. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/queue/__init__.py +0 -0
  368. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/queue/interfaces.py +0 -0
  369. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/queue/memory.py +0 -0
  370. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/queue/postgres.py +0 -0
  371. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/queue/redis.py +0 -0
  372. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/queue/sqlite.py +0 -0
  373. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/queue/store.py +0 -0
  374. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/scheduler/__init__.py +0 -0
  375. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/scheduler/sqlite.py +0 -0
  376. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/storage/scheduler/store.py +0 -0
  377. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/__init__.py +0 -0
  378. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/brand.py +0 -0
  379. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/events.py +0 -0
  380. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/interactive.py +0 -0
  381. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/layout.py +0 -0
  382. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/markdown.py +0 -0
  383. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/primitives.py +0 -0
  384. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/product.py +0 -0
  385. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/rendering.py +0 -0
  386. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/styles/__init__.py +0 -0
  387. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/styles/extended.py +0 -0
  388. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/styles/product.py +0 -0
  389. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/styles/system.py +0 -0
  390. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/styles/theme.py +0 -0
  391. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/styles/theme_contract.py +0 -0
  392. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/styles/voodoo_system.py +0 -0
  393. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/ui/voodoo_system.py +0 -0
  394. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/world/__init__.py +0 -0
  395. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/world/model.py +0 -0
  396. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/world/models.py +0 -0
  397. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/world/sqlite.py +0 -0
  398. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo/world/store.py +0 -0
  399. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo_framework.egg-info/dependency_links.txt +0 -0
  400. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo_framework.egg-info/entry_points.txt +0 -0
  401. {voodoo_framework-2.9.0 → voodoo_framework-3.1.0}/src/voodoo_framework.egg-info/top_level.txt +0 -0
@@ -0,0 +1,631 @@
1
+ Metadata-Version: 2.4
2
+ Name: voodoo-framework
3
+ Version: 3.1.0
4
+ Summary: The programmable runtime for adaptive applications and operational systems — from web and AI to distributed and physical systems.
5
+ Author-email: Helder Perez <contact@helderperez.com>
6
+ Maintainer-email: Helder Perez <contact@helderperez.com>
7
+ License-Expression: MIT
8
+ Project-URL: Homepage, https://github.com/helderperez-dev/voodoo
9
+ Project-URL: Documentation, https://github.com/helderperez-dev/voodoo#documentation
10
+ Project-URL: Repository, https://github.com/helderperez-dev/voodoo
11
+ Project-URL: Changelog, https://github.com/helderperez-dev/voodoo/blob/main/CHANGELOG.md
12
+ Project-URL: Roadmap, https://github.com/helderperez-dev/voodoo/blob/main/ROADMAP.md
13
+ Project-URL: Issues, https://github.com/helderperez-dev/voodoo/issues
14
+ Project-URL: Discussions, https://github.com/helderperez-dev/voodoo/discussions
15
+ Keywords: python,runtime,application-runtime,distributed-systems,ai-agents,edge-computing,reactive-ui,durable-execution,operational-systems,local-first
16
+ Classifier: Development Status :: 4 - Beta
17
+ Classifier: Framework :: AsyncIO
18
+ Classifier: Intended Audience :: Developers
19
+ Classifier: Operating System :: OS Independent
20
+ Classifier: Programming Language :: Python :: 3
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: Implementation :: CPython
24
+ Classifier: Topic :: Internet :: WWW/HTTP
25
+ Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
26
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
27
+ Classifier: Typing :: Typed
28
+ Requires-Python: >=3.12
29
+ Description-Content-Type: text/markdown
30
+ License-File: LICENSE
31
+ Requires-Dist: starlette
32
+ Requires-Dist: uvicorn
33
+ Requires-Dist: pydantic
34
+ Requires-Dist: voodoo-store<0.4,>=0.3.0
35
+ Requires-Dist: websockets
36
+ Requires-Dist: httpx
37
+ Requires-Dist: python-dotenv
38
+ Requires-Dist: pyyaml
39
+ Requires-Dist: typer
40
+ Requires-Dist: rich
41
+ Requires-Dist: aiofiles
42
+ Provides-Extra: ai
43
+ Requires-Dist: openai; extra == "ai"
44
+ Requires-Dist: anthropic; extra == "ai"
45
+ Requires-Dist: google-generativeai; extra == "ai"
46
+ Requires-Dist: ollama; extra == "ai"
47
+ Provides-Extra: mcp
48
+ Provides-Extra: dev
49
+ Requires-Dist: pytest; extra == "dev"
50
+ Requires-Dist: pytest-asyncio; extra == "dev"
51
+ Requires-Dist: ruff; extra == "dev"
52
+ Requires-Dist: mypy; extra == "dev"
53
+ Requires-Dist: pre-commit; extra == "dev"
54
+ Requires-Dist: aiosqlite; extra == "dev"
55
+ Provides-Extra: sqlite
56
+ Requires-Dist: aiosqlite; extra == "sqlite"
57
+ Provides-Extra: postgres
58
+ Requires-Dist: psycopg[binary]>=3.3.4; extra == "postgres"
59
+ Provides-Extra: s3
60
+ Requires-Dist: boto3>=1.34; extra == "s3"
61
+ Requires-Dist: botocore>=1.34; extra == "s3"
62
+ Provides-Extra: redis
63
+ Requires-Dist: redis>=5.0; extra == "redis"
64
+ Provides-Extra: edge
65
+ Requires-Dist: paho-mqtt>=2.0; extra == "edge"
66
+ Provides-Extra: otel
67
+ Requires-Dist: opentelemetry-api>=1.20; extra == "otel"
68
+ Requires-Dist: opentelemetry-sdk>=1.20; extra == "otel"
69
+ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc>=1.20; extra == "otel"
70
+ Dynamic: license-file
71
+
72
+ # Voodoo
73
+
74
+ **The programmable runtime for adaptive applications and operational systems.**
75
+
76
+ [GitHub](https://github.com/helderperez-dev/voodoo) · [Documentation](#documentation) · [Architecture](ARCHITECTURE.md) · [Roadmap](ROADMAP.md) · [Changelog](CHANGELOG.md)
77
+
78
+ [![CI](https://github.com/helderperez-dev/voodoo/actions/workflows/ci.yml/badge.svg)](https://github.com/helderperez-dev/voodoo/actions/workflows/ci.yml)
79
+ [![PyPI](https://img.shields.io/pypi/v/voodoo-framework)](https://pypi.org/project/voodoo-framework/)
80
+ [![Python](https://img.shields.io/pypi/pyversions/voodoo-framework)](https://pypi.org/project/voodoo-framework/)
81
+ [![License](https://img.shields.io/badge/license-MIT-informational)](LICENSE)
82
+
83
+ Voodoo lets a Python application start small — a page, API, model, task or agent —
84
+ and grow into durable workflows, human approvals, adaptive goals, distributed
85
+ participants and physical-device systems **without replacing the execution model
86
+ underneath it**.
87
+
88
+ > Composition over configuration. Python over DSLs. Adapters over lock-in.
89
+ > Explicit capabilities over ambient authority.
90
+
91
+ ## What Voodoo is
92
+
93
+ Most application stacks accumulate separate execution models as they grow:
94
+ HTTP handlers, frontend state, database jobs, queues, schedulers, agent loops,
95
+ workflow engines, event buses, human approvals, distributed workers and device
96
+ control.
97
+
98
+ Voodoo treats those as different manifestations of one programmable Runtime.
99
+
100
+ ```text
101
+ Entity → State → Intent → Capability + Policy → Execution → Effect → State
102
+ ```
103
+
104
+ For operational systems, the model becomes a closed loop:
105
+
106
+ ```text
107
+ World
108
+ ↓
109
+ Observation
110
+ ↓
111
+ Goal / Intent
112
+ ↓
113
+ Plan
114
+ ↓
115
+ Capability + Policy
116
+ ↓
117
+ Execution
118
+ ↓
119
+ Effect
120
+ ↓
121
+ Participant
122
+ ↓
123
+ ACK / observed evidence
124
+ └────────────────────→ World
125
+ ```
126
+
127
+ Two rules are central:
128
+
129
+ - **AI is Compute, not authority.** Agents participate in the same Runtime and
130
+ remain subject to capabilities and policy.
131
+ - **Effect != Observation.** What the system attempted is not automatically
132
+ treated as evidence that the real world changed.
133
+
134
+ An `Execution` is not every function call. It is meaningful work worth
135
+ authorizing, observing, recovering, accounting for, waiting on, or reasoning
136
+ about.
137
+
138
+ ## Quick start
139
+
140
+ Voodoo requires Python 3.12+.
141
+
142
+ ```bash
143
+ pip install voodoo-framework
144
+
145
+ voodoo create my_app
146
+ cd my_app
147
+ voodoo dev
148
+ ```
149
+
150
+ Open `http://localhost:8000`.
151
+
152
+ A fresh application needs no external database, Redis server, queue service or
153
+ object server. On first run, Voodoo creates its local durable substrate:
154
+
155
+ ```text
156
+ .voodoo/application.vstore
157
+ ```
158
+
159
+ ### Small application
160
+
161
+ ```python
162
+ from voodoo import App, page
163
+ from voodoo.ui import Heading, Page, Stack, Text
164
+
165
+ app = App()
166
+
167
+
168
+ @page("/")
169
+ def home():
170
+ return Page(
171
+ Stack(
172
+ Heading("Hello, Voodoo", level=1),
173
+ Text("One application. One runtime."),
174
+ gap="md",
175
+ )
176
+ )
177
+
178
+
179
+ if __name__ == "__main__":
180
+ app.run()
181
+ ```
182
+
183
+ ## Start simple, grow only when needed
184
+
185
+ Voodoo is designed for progressive complexity. You do not need World Models,
186
+ Goals, AI or distributed execution to build a normal application.
187
+
188
+ | You need | Use |
189
+ |---|---|
190
+ | UI-local mutable value | `state()` |
191
+ | Persistent business data | `Model` |
192
+ | Indexed business queries | `field(index=True)` + `where/order_by` |
193
+ | Page / browser interaction | Voodoo UI + Python-callable events |
194
+ | HTTP/API surface | routing / API primitives |
195
+ | Retryable background work | `@task` |
196
+ | Future or recurring work | Runtime scheduling |
197
+ | Decoupled notification | Mesh / event bus |
198
+ | Meaningful governed work | `Execution` |
199
+ | LLM reasoning and tool use | `Agent` + `@tool` |
200
+ | Authorization to produce effects | `Capability` + `Policy` |
201
+ | Human decision during work | HITL approval |
202
+ | Durable desired outcome | `Goal` + `GoalRuntime` |
203
+ | Operational reality | `Entity` + `Observation` + `WorldModel` |
204
+ | Physical/external participant | Edge / `DeviceGateway` |
205
+ | Governed node-to-node work | Runtime Fabric |
206
+
207
+ See [Choosing primitives](docs/choosing-primitives.md) for the semantic
208
+ boundaries between state, models, events, tools, tasks, capabilities and
209
+ executions.
210
+
211
+ ## One Runtime, one durable substrate
212
+
213
+ Voodoo Store is the default embedded infrastructure for a local application.
214
+
215
+ ```text
216
+ Application
217
+ │
218
+ ▼
219
+ Voodoo Runtime
220
+ │
221
+ ├── Model / Data
222
+ ├── Jobs / Queue
223
+ ├── Scheduler / Cron / Triggers
224
+ ├── Events / Outbox
225
+ ├── Objects
226
+ ├── Execution / Workflow / Goal / HITL
227
+ ├── Identity
228
+ └── Edge / device state
229
+ │
230
+ ▼
231
+ RuntimeStore
232
+ │
233
+ ▼
234
+ .voodoo/application.vstore
235
+ ```
236
+
237
+ The default path is **local-first and single-writer**. PostgreSQL, SQLite,
238
+ Redis, S3-compatible object storage and OpenTelemetry remain explicit adapters
239
+ or integrations for workloads that need them; they are not silent defaults.
240
+
241
+ Store owns durable mechanics. Runtime owns semantics, authority and
242
+ intelligence.
243
+
244
+ Models may declare native secondary indexes without changing the query API:
245
+
246
+ ```python
247
+ from voodoo import Model
248
+ from voodoo.data import field
249
+
250
+
251
+ class Customer(Model):
252
+ email: str = field(index=True)
253
+ score: int = field(index=True)
254
+
255
+
256
+ customers = await Customer.where(email="ada@example.com")
257
+ top = await Customer.where().order_by("-score").limit(10)
258
+ ```
259
+
260
+ Indexed equality and single-column ordering are pushed into Voodoo Store;
261
+ queries without a matching declared index preserve the same API and fall back
262
+ to collection scans.
263
+
264
+ Models receive a Runtime-generated UUIDv7 identity by default. The UUID is
265
+ generated before persistence, stored as the 16-byte Collection primary key and
266
+ exposed as `uuid.UUID` in Python. Sequential business identifiers remain
267
+ ordinary explicit fields rather than the default technical identity.
268
+
269
+ Model typing carries schema semantics without duplicating them in storage
270
+ configuration: `T | None` expresses optionality, normal assignment or
271
+ `field(default=...)` expresses defaults, `field(default_factory=...)` handles
272
+ dynamic defaults, and `typing.Annotated` constraints express domain limits.
273
+ Relationships use `relation(...)` with explicit `Delete.RESTRICT`,
274
+ `Delete.CASCADE` or `Delete.SET_NULL` policies. Backend-specific `db_type`
275
+ metadata is deliberately not part of the default Model API.
276
+
277
+ ## The Voodoo 3.0 architecture
278
+
279
+ Voodoo 3.0 deliberately converges concepts under one semantic owner instead of
280
+ preserving duplicate historical namespaces.
281
+
282
+ ```text
283
+ src/voodoo/
284
+ ├── core/ application facade, lifecycle, state and events
285
+ ├── primitives/ foundational semantic concepts
286
+ ├── runtime/ canonical Runtime semantics
287
+ │ ├── execution/
288
+ │ ├── scheduling/
289
+ │ ├── agency/
290
+ │ ├── distributed/
291
+ │ ├── reconciliation/
292
+ │ └── inspection/
293
+ ├── world/ entities, relationships, observations, WorldModel
294
+ ├── edge/ physical/external participant boundary
295
+ ├── protocol/ language-neutral semantic contracts
296
+ ├── ai/ native Agent/provider/tool semantics
297
+ ├── integrations/ MCP, provider SDK and OpenTelemetry integrations
298
+ ├── observability/ traces, metrics and runtime inspection
299
+ ├── data/ Store-first Model API
300
+ ├── storage/ infrastructure contracts
301
+ ├── adapters/ explicit infrastructure providers
302
+ ├── ui/ reactive UI and design system
303
+ ├── routing/ pages and APIs
304
+ ├── mesh/ realtime/event transport surface
305
+ ├── auth/ application authentication surfaces
306
+ ├── security/ HTTP security and redaction
307
+ └── cli/ developer tooling
308
+ ```
309
+
310
+ The package root stays intentionally small:
311
+
312
+ ```python
313
+ from voodoo import Agent, App, Model, page, state, task, tool
314
+ ```
315
+
316
+ Advanced APIs come from the namespace that owns them:
317
+
318
+ ```python
319
+ from voodoo.ui import Button, Card, DataTable
320
+ from voodoo.runtime import ExecutionEngine, Goal, GoalRuntime, Planner
321
+ from voodoo.world import Entity, Observation, WorldModel
322
+ from voodoo.edge import DeviceGateway, WorldAwareDeviceGateway
323
+ from voodoo.protocol import RemoteExecutionRequest, WorldSnapshot
324
+ from voodoo.integrations.mcp import mcp
325
+ ```
326
+
327
+ See [Voodoo 3.0 public API law](docs/public-api-3.md) for the canonical import
328
+ model and the clean-break migration map from 2.x.
329
+
330
+ ## Adaptive applications
331
+
332
+ An adaptive application can observe facts, express desired outcomes and allow
333
+ the Runtime to reconcile the two without creating a second orchestration model.
334
+
335
+ ```python
336
+ from voodoo import App
337
+ from voodoo.primitives import Intent
338
+
339
+ app = App()
340
+
341
+ conversion = app.observation("business", "conversion")
342
+
343
+
344
+ @app.goal(
345
+ "grow",
346
+ observes=(conversion,),
347
+ target_entity_id="business",
348
+ propose=lambda goal, world: Intent(name="conversion.adjust"),
349
+ )
350
+ def growth(world):
351
+ return world is not None and world.entity.properties.get("conversion", 0) >= 0.10
352
+
353
+
354
+ @app.capability("conversion.adjust")
355
+ async def improve(ctx):
356
+ return {"accepted": True}
357
+ ```
358
+
359
+ The application declares observations, goals and executable capabilities.
360
+ Execution, scheduling, reconciliation and authority remain Runtime concerns.
361
+
362
+ ## AI and tools
363
+
364
+ AI is optional. The core package does not install provider SDKs.
365
+
366
+ ```bash
367
+ pip install "voodoo-framework[ai]"
368
+ ```
369
+
370
+ A tool remains normal Python while also becoming introspectable Runtime
371
+ capability for agent/tool workflows:
372
+
373
+ ```python
374
+ from voodoo import Agent, tool
375
+
376
+
377
+ @tool
378
+ async def find_customer(email: str) -> dict:
379
+ """Find a customer by email."""
380
+ return {"email": email}
381
+
382
+
383
+ agent = Agent(
384
+ model="mock:test",
385
+ tools=[find_customer],
386
+ )
387
+ ```
388
+
389
+ MCP is an interoperability boundary under `voodoo.integrations.mcp`; it is
390
+ not a second tool registry or execution model.
391
+
392
+ ## Operational systems and Edge
393
+
394
+ Voodoo can connect software decisions to external or physical participants
395
+ without treating a sent command as reality.
396
+
397
+ ```text
398
+ Device evidence
399
+ ↓
400
+ Edge
401
+ ↓
402
+ Observation
403
+ ↓
404
+ World
405
+ ↓
406
+ Goal / Intent
407
+ ↓
408
+ Planner
409
+ ↓
410
+ Capability + Policy
411
+ ↓
412
+ Execution
413
+ ↓
414
+ Effect
415
+ ↓
416
+ Device
417
+ ↓
418
+ ACK / measured evidence
419
+ └──────────────→ Observation → World
420
+ ```
421
+
422
+ Run the zero-infrastructure operational canary:
423
+
424
+ ```bash
425
+ python examples/adaptive/operational_closed_loop/main.py
426
+ ```
427
+
428
+ The example proves the important boundary: the World changes only after the
429
+ simulated device reports observed evidence, not merely because an Effect was
430
+ sent.
431
+
432
+ ## Distributed Runtime
433
+
434
+ Voodoo scales by adding Runtime nodes, not by letting multiple processes write
435
+ the same Store file.
436
+
437
+ ```text
438
+ same application semantics
439
+ │
440
+ ▼
441
+ Runtime Fabric
442
+ / | \
443
+ node-a node-b node-c
444
+ | | |
445
+ a.vstore b.vstore c.vstore
446
+ ```
447
+
448
+ Each node owns its local Store. Remote work re-enters canonical
449
+ `Capability + Policy + Execution` at the destination.
450
+
451
+ The Runtime Fabric includes authenticated node identity, durable membership,
452
+ health/discovery, placement, lease generations, replay/idempotency boundaries
453
+ and bounded failover. Failover remains constrained by the semantics of the work:
454
+ ambiguous external or physical effects must not be blindly reissued.
455
+
456
+ ## Major capabilities
457
+
458
+ | Domain | Capabilities |
459
+ |---|---|
460
+ | Application | pages, APIs, reactive Python UI, design system, SEO |
461
+ | Data | Store-first `Model`, explicit SQL adapters |
462
+ | Runtime | Execution, recovery, tasks, scheduling, workflows, transactions/outbox |
463
+ | Agency | Goals, planning, adaptive supervision, reconciliation |
464
+ | Authority | Identity, Capability, contextual Policy |
465
+ | Human | durable HITL waiting/approval |
466
+ | AI | Agents, tools, provider abstraction, persistent Memory |
467
+ | Interoperability | MCP integration, language-neutral Protocol |
468
+ | Distributed | remote execution, membership, placement, leases, bounded failover |
469
+ | World | Entity, Relationship, Observation, WorldModel |
470
+ | Edge | device identity/session/effects/ACK/evidence flows |
471
+ | Observability | execution lineage, traces, metrics and inspection |
472
+ | Infrastructure | PostgreSQL, SQLite, Redis, S3 and OpenTelemetry adapters/integrations |
473
+
474
+ ## Installation options
475
+
476
+ ```bash
477
+ # Core Runtime + Voodoo Store
478
+ pip install voodoo-framework
479
+
480
+ # AI providers
481
+ pip install "voodoo-framework[ai]"
482
+
483
+ # External infrastructure adapters
484
+ pip install "voodoo-framework[postgres,redis,s3,otel]"
485
+
486
+ # Explicit SQLite adapter
487
+ pip install "voodoo-framework[sqlite]"
488
+
489
+ # Edge MQTT transport
490
+ pip install "voodoo-framework[edge]"
491
+
492
+ # Development dependencies
493
+ pip install "voodoo-framework[dev]"
494
+ ```
495
+
496
+ You can also install the CLI with `uv tool install voodoo-framework` or
497
+ `pipx install voodoo-framework`.
498
+
499
+ ## Configuration
500
+
501
+ A fresh application is zero-config. The effective defaults are equivalent to:
502
+
503
+ ```toml
504
+ [store]
505
+ provider = "voodoo"
506
+ path = ".voodoo/application.vstore"
507
+
508
+ [database]
509
+ provider = "voodoo"
510
+
511
+ [queue]
512
+ provider = "voodoo"
513
+
514
+ [events]
515
+ provider = "voodoo"
516
+
517
+ [objects]
518
+ provider = "voodoo"
519
+ ```
520
+
521
+ Override only the domain that actually needs external infrastructure:
522
+
523
+ ```toml
524
+ [database]
525
+ provider = "postgres"
526
+ url = "postgresql://..."
527
+
528
+ [queue]
529
+ provider = "redis"
530
+ url = "redis://..."
531
+
532
+ [objects]
533
+ provider = "s3"
534
+ bucket = "my-bucket"
535
+ ```
536
+
537
+ Voodoo does not silently migrate or copy legacy external data into Voodoo Store
538
+ at startup. Migration is an explicit operation.
539
+
540
+ ## Examples
541
+
542
+ | Example | What it demonstrates |
543
+ |---|---|
544
+ | `examples/basics/hello_world/` | smallest application + native design system |
545
+ | `examples/web/dashboard/` | reactive UI/state |
546
+ | `examples/web/realtime/` | realtime communication |
547
+ | `examples/web/ui_magic/` | callable UI + current design-system acceptance app |
548
+ | `examples/ai/agent/` | Agent + Tool |
549
+ | `examples/ai/saas/` | UI + Agent + Tool + Mesh + Task + Model |
550
+ | `examples/adaptive/operational_closed_loop/` | Edge → World → Goal → Execution → Effect → evidence |
551
+
552
+ ## Documentation
553
+
554
+ A useful reading order:
555
+
556
+ 1. [Hello world](docs/hello_world.md)
557
+ 2. [Choosing primitives](docs/choosing-primitives.md)
558
+ 3. [Computational primitives](docs/primitives.md)
559
+ 4. [Execution model](docs/execution-model.md)
560
+ 5. [Runtime](docs/runtime.md)
561
+ 6. [Agents](docs/agents.md) and [Tools](docs/tools.md)
562
+ 7. [Human-in-the-loop](docs/hitl.md)
563
+ 8. [MCP](docs/mcp.md)
564
+ 9. [Protocol](docs/protocol.md)
565
+ 10. [Voodoo 3.0 public API law](docs/public-api-3.md)
566
+ 11. [Architecture](ARCHITECTURE.md)
567
+ 12. [Roadmap](ROADMAP.md)
568
+
569
+ `SPRINT_PLAN.md` is the implementation tracker; it should not be treated as a
570
+ marketing promise for future capabilities.
571
+
572
+ ## What Voodoo deliberately does not claim
573
+
574
+ Voodoo's architecture is broad, but its guarantees are intentionally explicit.
575
+
576
+ Current Voodoo 3.0 does **not** claim:
577
+
578
+ - automatic Store replication or synchronization between nodes;
579
+ - shared multi-writer `.vstore` files;
580
+ - distributed consensus;
581
+ - globally serializable cross-node transactions;
582
+ - global exactly-once execution;
583
+ - production PKI/OIDC/mTLS infrastructure;
584
+ - a managed Voodoo Cloud control plane.
585
+
586
+ The Voodoo Store 0.3 integration line exposes native Collections/index
587
+ queries, Queues, Topics/Streams, Consumer Groups, Objects, RPC, CDC,
588
+ Workflow/HITL state, lifecycle operations and heterogeneous transactions to the
589
+ Runtime. Those primitives remain single-node/local Store semantics; they do not
590
+ imply replication, consensus or global exactly-once behavior.
591
+
592
+ ## What Voodoo is trying to preserve
593
+
594
+ As the project grows, these properties are architectural constraints:
595
+
596
+ - one Runtime and one canonical Execution lifecycle;
597
+ - local-first progressive complexity;
598
+ - Python application code instead of a mandatory workflow DSL;
599
+ - explicit authority for effects;
600
+ - AI as a participant, not an ambient superuser;
601
+ - replaceable infrastructure behind contracts;
602
+ - topology changes without rewriting business semantics;
603
+ - observable lineage from Intent → Execution → Effect → Observation;
604
+ - one semantic owner per concept.
605
+
606
+ ## Project status
607
+
608
+ Voodoo is **beta software**.
609
+
610
+ **v3.1.0** is the current published architecture baseline: Runtime adapters
611
+ converged on the published Voodoo Store 0.3 native surface, with the modern
612
+ Model contract and UUIDv7 identity. The `main` branch may
613
+ contain post-release documentation or implementation work, so a merge to
614
+ `main` is not itself a package release.
615
+
616
+ The next numbered development sprint is intentionally selected from real
617
+ product/architecture pressure rather than by accumulating unrelated framework
618
+ features.
619
+
620
+ ## Contributing
621
+
622
+ Read [CONTRIBUTING.md](CONTRIBUTING.md) and [AGENTS.md](AGENTS.md) before
623
+ structural changes. Repository architecture is enforced by tests, including
624
+ rules that prevent removed 2.x compatibility namespaces from returning.
625
+
626
+ Security issues should follow [SECURITY.md](SECURITY.md). Community behavior is
627
+ covered by [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
628
+
629
+ ## License
630
+
631
+ MIT. See [LICENSE](LICENSE).