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