voodoo-framework 2.6.2__tar.gz → 2.7.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 (354) hide show
  1. voodoo_framework-2.7.0/PKG-INFO +432 -0
  2. voodoo_framework-2.7.0/README.md +361 -0
  3. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/pyproject.toml +6 -2
  4. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/__init__.py +7 -4
  5. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/adapters/registry.py +22 -59
  6. voodoo_framework-2.7.0/src/voodoo/ai/agent.py +14 -0
  7. voodoo_framework-2.7.0/src/voodoo/ai/agent_runtime_truth.py +190 -0
  8. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/auth/middleware.py +5 -8
  9. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/auth/user.py +114 -37
  10. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/__init__.py +2 -0
  11. voodoo_framework-2.7.0/src/voodoo/cli/create.py +325 -0
  12. voodoo_framework-2.7.0/src/voodoo/cli/fabric.py +143 -0
  13. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/components.py +5 -5
  14. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/config.py +96 -118
  15. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/core/app.py +76 -101
  16. voodoo_framework-2.7.0/src/voodoo/data/__init__.py +51 -0
  17. voodoo_framework-2.7.0/src/voodoo/data/store_backend.py +178 -0
  18. voodoo_framework-2.7.0/src/voodoo/data/store_facade.py +140 -0
  19. voodoo_framework-2.7.0/src/voodoo/data/store_model.py +108 -0
  20. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/__init__.py +5 -12
  21. voodoo_framework-2.7.0/src/voodoo/edge/store_voodoo.py +273 -0
  22. voodoo_framework-2.7.0/src/voodoo/edge/world.py +217 -0
  23. voodoo_framework-2.7.0/src/voodoo/mesh/__init__.py +448 -0
  24. voodoo_framework-2.7.0/src/voodoo/mesh/auth.py +163 -0
  25. voodoo_framework-2.7.0/src/voodoo/mesh/client.py +145 -0
  26. voodoo_framework-2.7.0/src/voodoo/mesh/remote.py +284 -0
  27. voodoo_framework-2.7.0/src/voodoo/mesh/replay.py +166 -0
  28. voodoo_framework-2.7.0/src/voodoo/protocol/__init__.py +116 -0
  29. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/protocol/export.py +14 -31
  30. voodoo_framework-2.7.0/src/voodoo/protocol/fabric.py +86 -0
  31. voodoo_framework-2.7.0/src/voodoo/protocol/operational.py +190 -0
  32. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/routing/pages.py +24 -3
  33. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/__init__.py +134 -29
  34. voodoo_framework-2.7.0/src/voodoo/runtime/adaptive.py +492 -0
  35. voodoo_framework-2.7.0/src/voodoo/runtime/capability.py +208 -0
  36. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/context.py +82 -49
  37. voodoo_framework-2.7.0/src/voodoo/runtime/dashboard.py +146 -0
  38. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/engine.py +17 -4
  39. voodoo_framework-2.7.0/src/voodoo/runtime/fabric.py +341 -0
  40. voodoo_framework-2.7.0/src/voodoo/runtime/goal.py +437 -0
  41. voodoo_framework-2.7.0/src/voodoo/runtime/goal_store.py +176 -0
  42. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/human.py +4 -8
  43. voodoo_framework-2.7.0/src/voodoo/runtime/identity.py +156 -0
  44. voodoo_framework-2.7.0/src/voodoo/runtime/identity_store.py +107 -0
  45. voodoo_framework-2.7.0/src/voodoo/runtime/membership.py +227 -0
  46. voodoo_framework-2.7.0/src/voodoo/runtime/operations.py +84 -0
  47. voodoo_framework-2.7.0/src/voodoo/runtime/planner.py +285 -0
  48. voodoo_framework-2.7.0/src/voodoo/runtime/policy.py +192 -0
  49. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/scheduler.py +22 -10
  50. voodoo_framework-2.7.0/src/voodoo/runtime/store.py +451 -0
  51. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/task.py +5 -11
  52. voodoo_framework-2.7.0/src/voodoo/runtime/transaction.py +252 -0
  53. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/workflow.py +165 -48
  54. voodoo_framework-2.7.0/src/voodoo/runtime/workflow_store.py +100 -0
  55. voodoo_framework-2.7.0/src/voodoo/runtime/world_execution.py +57 -0
  56. voodoo_framework-2.7.0/src/voodoo/static/client.js +322 -0
  57. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/database/sqlite.py +30 -5
  58. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/events/__init__.py +3 -1
  59. voodoo_framework-2.7.0/src/voodoo/storage/events/store.py +141 -0
  60. voodoo_framework-2.7.0/src/voodoo/storage/execution/__init__.py +15 -0
  61. voodoo_framework-2.7.0/src/voodoo/storage/execution/store.py +234 -0
  62. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/manager.py +39 -28
  63. voodoo_framework-2.7.0/src/voodoo/storage/objects/store.py +124 -0
  64. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/queue/__init__.py +5 -4
  65. voodoo_framework-2.7.0/src/voodoo/storage/queue/store.py +340 -0
  66. voodoo_framework-2.7.0/src/voodoo/storage/scheduler/__init__.py +31 -0
  67. voodoo_framework-2.7.0/src/voodoo/storage/scheduler/store.py +283 -0
  68. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ui/__init__.py +78 -17
  69. voodoo_framework-2.7.0/src/voodoo/ui/events.py +224 -0
  70. voodoo_framework-2.7.0/src/voodoo/ui/interactive.py +215 -0
  71. voodoo_framework-2.7.0/src/voodoo/ui/layout.py +31 -0
  72. voodoo_framework-2.7.0/src/voodoo/ui/primitives.py +230 -0
  73. voodoo_framework-2.7.0/src/voodoo/ui/product.py +434 -0
  74. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ui/rendering.py +21 -30
  75. voodoo_framework-2.7.0/src/voodoo/ui/state.py +223 -0
  76. voodoo_framework-2.7.0/src/voodoo/ui/styles/product.py +268 -0
  77. voodoo_framework-2.7.0/src/voodoo/ui/styles/system.py +273 -0
  78. voodoo_framework-2.7.0/src/voodoo/ui/styles/voodoo_system.py +169 -0
  79. voodoo_framework-2.7.0/src/voodoo/ui/voodoo_system.py +409 -0
  80. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/workers/queue.py +18 -15
  81. voodoo_framework-2.7.0/src/voodoo/world/__init__.py +17 -0
  82. voodoo_framework-2.7.0/src/voodoo/world/model.py +200 -0
  83. voodoo_framework-2.7.0/src/voodoo/world/models.py +137 -0
  84. voodoo_framework-2.7.0/src/voodoo/world/sqlite.py +289 -0
  85. voodoo_framework-2.7.0/src/voodoo/world/store.py +117 -0
  86. voodoo_framework-2.7.0/src/voodoo_framework.egg-info/PKG-INFO +432 -0
  87. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo_framework.egg-info/SOURCES.txt +90 -1
  88. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo_framework.egg-info/requires.txt +5 -1
  89. voodoo_framework-2.7.0/tests/test_adaptive_agency_correctness.py +233 -0
  90. voodoo_framework-2.7.0/tests/test_agency_runtime_truth.py +172 -0
  91. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_agent.py +20 -108
  92. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_auth.py +54 -60
  93. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_chrome.py +4 -15
  94. voodoo_framework-2.7.0/tests/test_cli_fabric.py +28 -0
  95. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_components.py +12 -24
  96. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_config.py +5 -11
  97. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_create.py +61 -54
  98. voodoo_framework-2.7.0/tests/test_create_store_smoke.py +58 -0
  99. voodoo_framework-2.7.0/tests/test_design_system2.py +135 -0
  100. voodoo_framework-2.7.0/tests/test_durable_goal_runtime.py +161 -0
  101. voodoo_framework-2.7.0/tests/test_durable_workflow_runtime.py +157 -0
  102. voodoo_framework-2.7.0/tests/test_edge_voodoo_store.py +102 -0
  103. voodoo_framework-2.7.0/tests/test_edge_world.py +156 -0
  104. voodoo_framework-2.7.0/tests/test_goal_runtime.py +169 -0
  105. voodoo_framework-2.7.0/tests/test_identity_execution.py +149 -0
  106. voodoo_framework-2.7.0/tests/test_identity_foundation.py +156 -0
  107. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_memory.py +7 -10
  108. voodoo_framework-2.7.0/tests/test_mesh_remote_auth.py +216 -0
  109. voodoo_framework-2.7.0/tests/test_mesh_remote_authority.py +164 -0
  110. voodoo_framework-2.7.0/tests/test_mesh_remote_execution.py +326 -0
  111. voodoo_framework-2.7.0/tests/test_mesh_remote_outcomes.py +205 -0
  112. voodoo_framework-2.7.0/tests/test_mesh_remote_replay.py +178 -0
  113. voodoo_framework-2.7.0/tests/test_mesh_two_node_acceptance.py +254 -0
  114. voodoo_framework-2.7.0/tests/test_node_membership.py +134 -0
  115. voodoo_framework-2.7.0/tests/test_operational_policy.py +160 -0
  116. voodoo_framework-2.7.0/tests/test_operational_runtime_ui.py +70 -0
  117. voodoo_framework-2.7.0/tests/test_product_components.py +176 -0
  118. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_protocol.py +16 -46
  119. voodoo_framework-2.7.0/tests/test_protocol_fabric.py +55 -0
  120. voodoo_framework-2.7.0/tests/test_protocol_operational.py +96 -0
  121. voodoo_framework-2.7.0/tests/test_public_api_3.py +43 -0
  122. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_reactive.py +86 -5
  123. voodoo_framework-2.7.0/tests/test_runtime_fabric.py +226 -0
  124. voodoo_framework-2.7.0/tests/test_runtime_store_app_lifecycle.py +53 -0
  125. voodoo_framework-2.7.0/tests/test_runtime_store_lifecycle.py +211 -0
  126. voodoo_framework-2.7.0/tests/test_runtime_store_provider.py +200 -0
  127. voodoo_framework-2.7.0/tests/test_runtime_transaction.py +156 -0
  128. voodoo_framework-2.7.0/tests/test_sprint27_convergence.py +129 -0
  129. voodoo_framework-2.7.0/tests/test_sprint28_acceptance.py +154 -0
  130. voodoo_framework-2.7.0/tests/test_store_first_user_journey.py +116 -0
  131. voodoo_framework-2.7.0/tests/test_store_model_backend.py +209 -0
  132. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_ui.py +20 -82
  133. voodoo_framework-2.7.0/tests/test_ui_magic.py +101 -0
  134. voodoo_framework-2.7.0/tests/test_ui_magic_acceptance.py +99 -0
  135. voodoo_framework-2.7.0/tests/test_voodoo_store_events.py +64 -0
  136. voodoo_framework-2.7.0/tests/test_voodoo_store_execution.py +104 -0
  137. voodoo_framework-2.7.0/tests/test_voodoo_store_hitl_restart.py +138 -0
  138. voodoo_framework-2.7.0/tests/test_voodoo_store_queue.py +290 -0
  139. voodoo_framework-2.7.0/tests/test_voodoo_store_scheduler.py +253 -0
  140. voodoo_framework-2.7.0/tests/test_voodoo_system_components.py +197 -0
  141. voodoo_framework-2.7.0/tests/test_world_aware_execution.py +103 -0
  142. voodoo_framework-2.7.0/tests/test_world_model.py +134 -0
  143. voodoo_framework-2.7.0/tests/test_world_sqlite.py +121 -0
  144. voodoo_framework-2.6.2/PKG-INFO +0 -284
  145. voodoo_framework-2.6.2/README.md +0 -216
  146. voodoo_framework-2.6.2/src/voodoo/cli/create.py +0 -361
  147. voodoo_framework-2.6.2/src/voodoo/data/__init__.py +0 -72
  148. voodoo_framework-2.6.2/src/voodoo/mesh/__init__.py +0 -273
  149. voodoo_framework-2.6.2/src/voodoo/mesh/client.py +0 -59
  150. voodoo_framework-2.6.2/src/voodoo/protocol/__init__.py +0 -97
  151. voodoo_framework-2.6.2/src/voodoo/runtime/adaptive.py +0 -255
  152. voodoo_framework-2.6.2/src/voodoo/runtime/capability.py +0 -167
  153. voodoo_framework-2.6.2/src/voodoo/runtime/planner.py +0 -167
  154. voodoo_framework-2.6.2/src/voodoo/static/client.js +0 -152
  155. voodoo_framework-2.6.2/src/voodoo/storage/execution/__init__.py +0 -13
  156. voodoo_framework-2.6.2/src/voodoo/storage/scheduler/__init__.py +0 -9
  157. voodoo_framework-2.6.2/src/voodoo/ui/events.py +0 -90
  158. voodoo_framework-2.6.2/src/voodoo/ui/state.py +0 -191
  159. voodoo_framework-2.6.2/src/voodoo_framework.egg-info/PKG-INFO +0 -284
  160. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/LICENSE +0 -0
  161. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/setup.cfg +0 -0
  162. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/adapters/__init__.py +0 -0
  163. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/adapters/capabilities.py +0 -0
  164. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/adapters/tailwind.py +0 -0
  165. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/adapters/voodoo_css.py +0 -0
  166. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/agent.py +0 -0
  167. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/agents/__init__.py +0 -0
  168. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/agents/models.py +0 -0
  169. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/agents/registry.py +0 -0
  170. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ai/__init__.py +0 -0
  171. /voodoo_framework-2.6.2/src/voodoo/ai/agent.py → /voodoo_framework-2.7.0/src/voodoo/ai/agent_legacy.py +0 -0
  172. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ai/providers/__init__.py +0 -0
  173. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ai/providers/anthropic.py +0 -0
  174. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ai/providers/gemini.py +0 -0
  175. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ai/providers/mock.py +0 -0
  176. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ai/providers/ollama.py +0 -0
  177. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ai/providers/openai.py +0 -0
  178. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ai/tools/__init__.py +0 -0
  179. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ai/tools/registry.py +0 -0
  180. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/api.py +0 -0
  181. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/auth/__init__.py +0 -0
  182. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/auth/cookies.py +0 -0
  183. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/auth/guards.py +0 -0
  184. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/auth/jwt.py +0 -0
  185. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/auth/passwords.py +0 -0
  186. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/__main__.py +0 -0
  187. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/agents.py +0 -0
  188. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/ai.py +0 -0
  189. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/approvals.py +0 -0
  190. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/auth.py +0 -0
  191. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/dev.py +0 -0
  192. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/doctor.py +0 -0
  193. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/executions.py +0 -0
  194. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/generate.py +0 -0
  195. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/inspect.py +0 -0
  196. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/new.py +0 -0
  197. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/objects.py +0 -0
  198. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/protocol.py +0 -0
  199. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/recover.py +0 -0
  200. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/routes.py +0 -0
  201. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/scaffolding.py +0 -0
  202. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/schedules.py +0 -0
  203. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/status.py +0 -0
  204. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/tasks.py +0 -0
  205. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/terminal.py +0 -0
  206. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/theme.py +0 -0
  207. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/version.py +0 -0
  208. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/cli/workers_cmd.py +0 -0
  209. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/core/__init__.py +0 -0
  210. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/core/errors.py +0 -0
  211. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/core/events.py +0 -0
  212. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/core/render.py +0 -0
  213. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/core/routing.py +0 -0
  214. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/core/sitemap.py +0 -0
  215. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/core/state.py +0 -0
  216. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/data/base.py +0 -0
  217. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/data/model.py +0 -0
  218. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/auth.py +0 -0
  219. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/errors.py +0 -0
  220. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/gateway.py +0 -0
  221. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/http.py +0 -0
  222. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/models.py +0 -0
  223. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/mqtt.py +0 -0
  224. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/protocol.py +0 -0
  225. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/simulator.py +0 -0
  226. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/edge/store.py +0 -0
  227. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/i18n.py +0 -0
  228. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/mcp/__init__.py +0 -0
  229. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/mcp/client.py +0 -0
  230. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/memory/__init__.py +0 -0
  231. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/memory/interfaces.py +0 -0
  232. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/memory/sqlite.py +0 -0
  233. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/mesh/event_bus.py +0 -0
  234. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/primitives/__init__.py +0 -0
  235. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/primitives/capability.py +0 -0
  236. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/primitives/compute.py +0 -0
  237. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/primitives/constraint.py +0 -0
  238. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/primitives/effect.py +0 -0
  239. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/primitives/intent.py +0 -0
  240. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/primitives/resource.py +0 -0
  241. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/primitives/state.py +0 -0
  242. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/primitives/time.py +0 -0
  243. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/protocol/schemas.py +0 -0
  244. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/py.typed +0 -0
  245. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/queue.py +0 -0
  246. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/routing/api.py +0 -0
  247. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/constraint.py +0 -0
  248. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/errors.py +0 -0
  249. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/execution.py +0 -0
  250. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/graph.py +0 -0
  251. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/runtime/persistence.py +0 -0
  252. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/schedule.py +0 -0
  253. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/security/__init__.py +0 -0
  254. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/security/cors.py +0 -0
  255. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/security/csrf.py +0 -0
  256. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/security/headers.py +0 -0
  257. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/security/passwords.py +0 -0
  258. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/security/rate_limit.py +0 -0
  259. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/security/redaction.py +0 -0
  260. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/security/secrets.py +0 -0
  261. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/seo.py +0 -0
  262. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/status.py +0 -0
  263. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/__init__.py +0 -0
  264. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/cache/__init__.py +0 -0
  265. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/cache/interfaces.py +0 -0
  266. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/cache/memory.py +0 -0
  267. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/cache/redis.py +0 -0
  268. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/database/__init__.py +0 -0
  269. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/database/interfaces.py +0 -0
  270. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/database/postgres.py +0 -0
  271. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/events/interfaces.py +0 -0
  272. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/events/local.py +0 -0
  273. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/events/postgres.py +0 -0
  274. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/events/sqlite.py +0 -0
  275. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/execution/migrations.py +0 -0
  276. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/execution/postgres.py +0 -0
  277. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/execution/sqlite.py +0 -0
  278. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/objects/__init__.py +0 -0
  279. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/objects/interfaces.py +0 -0
  280. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/objects/local.py +0 -0
  281. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/objects/s3.py +0 -0
  282. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/queue/interfaces.py +0 -0
  283. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/queue/memory.py +0 -0
  284. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/queue/postgres.py +0 -0
  285. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/queue/redis.py +0 -0
  286. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/queue/sqlite.py +0 -0
  287. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/storage/scheduler/sqlite.py +0 -0
  288. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/telemetry/__init__.py +0 -0
  289. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/telemetry/api.py +0 -0
  290. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/telemetry/middleware.py +0 -0
  291. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/telemetry/otlp.py +0 -0
  292. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/telemetry/store.py +0 -0
  293. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/theme.py +0 -0
  294. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/tools/__init__.py +0 -0
  295. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/tools/registry.py +0 -0
  296. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ui/component.py +0 -0
  297. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ui/library.py +0 -0
  298. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ui/markdown.py +0 -0
  299. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ui/styles/__init__.py +0 -0
  300. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ui/styles/presets.py +0 -0
  301. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/ui/styles/theme.py +0 -0
  302. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo/workers/__init__.py +0 -0
  303. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo_framework.egg-info/dependency_links.txt +0 -0
  304. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo_framework.egg-info/entry_points.txt +0 -0
  305. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/src/voodoo_framework.egg-info/top_level.txt +0 -0
  306. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_agent_registry.py +0 -0
  307. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_agent_runtime.py +0 -0
  308. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_app.py +0 -0
  309. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_capability_security.py +0 -0
  310. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_checkpoint_resume.py +0 -0
  311. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_cli.py +0 -0
  312. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_cli_inspect.py +0 -0
  313. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_contract_api.py +0 -0
  314. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_data.py +0 -0
  315. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_design_system.py +0 -0
  316. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_durable_hitl.py +0 -0
  317. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_edge_device.py +0 -0
  318. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_edge_e2e.py +0 -0
  319. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_edge_gateway.py +0 -0
  320. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_edge_http.py +0 -0
  321. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_edge_protocol.py +0 -0
  322. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_edge_security.py +0 -0
  323. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_events.py +0 -0
  324. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_execution_sqlite_store.py +0 -0
  325. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_hitl_persistence_correctness.py +0 -0
  326. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_http_runtime.py +0 -0
  327. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_human.py +0 -0
  328. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_i18n.py +0 -0
  329. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_integration.py +0 -0
  330. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_mcp.py +0 -0
  331. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_mcp_runtime.py +0 -0
  332. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_mesh.py +0 -0
  333. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_mesh_event_bus.py +0 -0
  334. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_model.py +0 -0
  335. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_object_store.py +0 -0
  336. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_observability.py +0 -0
  337. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_persistence.py +0 -0
  338. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_planner_adaptive.py +0 -0
  339. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_primitives.py +0 -0
  340. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_provider_switching.py +0 -0
  341. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_providers.py +0 -0
  342. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_queue.py +0 -0
  343. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_runtime.py +0 -0
  344. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_runtime_correctness.py +0 -0
  345. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_scheduler.py +0 -0
  346. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_security.py +0 -0
  347. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_seo.py +0 -0
  348. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_state.py +0 -0
  349. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_theme.py +0 -0
  350. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_theme_presets.py +0 -0
  351. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_tools.py +0 -0
  352. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_websocket.py +0 -0
  353. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_worker_retry_semantics.py +0 -0
  354. {voodoo_framework-2.6.2 → voodoo_framework-2.7.0}/tests/test_workers.py +0 -0
@@ -0,0 +1,432 @@
1
+ Metadata-Version: 2.4
2
+ Name: voodoo-framework
3
+ Version: 2.7.0
4
+ Summary: The programmable runtime for adaptive applications and operational systems — web, APIs, agents, workers, human workflows, distributed systems, and physical systems in one runtime.
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: ai,agent,application-framework,async,durable-execution,mcp,realtime,reactive,web-framework
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.3,>=0.2.2
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
+ Voodoo lets a Python application start as a page or API and grow into durable
77
+ workers, agents, human approvals, distributed participants and physical-device
78
+ workflows without replacing the execution model underneath it.
79
+
80
+ > Composition over configuration. Python over DSLs. Adapters over lock-in. Explicit capabilities over unrestricted autonomy.
81
+
82
+ ## Why Voodoo?
83
+
84
+ Modern systems often assemble separate frameworks for HTTP, UI, persistence,
85
+ queues, scheduling, AI, realtime communication, workflow execution,
86
+ observability and devices. Voodoo provides a common runtime model so those
87
+ pieces can converge when the application actually needs them.
88
+
89
+ ```text
90
+ Entity → State → Intent → Capability → Execution → Effect → State
91
+ ```
92
+
93
+ `Compute`, `Time`, `Resource` and `Constraint` govern Execution. AI is one form
94
+ of Compute, not a second runtime.
95
+
96
+ An `Execution` is not every function call. It is meaningful work worth
97
+ observing, authorizing, recovering, accounting for, waiting on or reasoning
98
+ about.
99
+
100
+ For operational systems Voodoo also keeps attempted action and observed reality
101
+ separate:
102
+
103
+ ```text
104
+ Effect != Observation
105
+ ```
106
+
107
+ An Effect records what the runtime tried to do. An Observation records evidence
108
+ about what actually happened in the World.
109
+
110
+ ## Quick start
111
+
112
+ ```bash
113
+ pip install voodoo-framework
114
+ voodoo create my_app
115
+ cd my_app
116
+ voodoo dev
117
+ ```
118
+
119
+ Open `http://localhost:8000`. On first run Voodoo creates:
120
+
121
+ ```text
122
+ .voodoo/application.vstore
123
+ ```
124
+
125
+ That Store is the default durable application substrate for local data, durable
126
+ work, scheduling, event state, objects, execution state, workflows, approvals,
127
+ identity state, and Edge/device state. A local application does not require an
128
+ external database, Redis, queue server, or object server.
129
+
130
+ AI provider SDKs are optional:
131
+
132
+ ```bash
133
+ pip install "voodoo-framework[ai]"
134
+ ```
135
+
136
+ The core package does not install OpenAI, Anthropic, Gemini or Ollama SDKs.
137
+ Providers are resolved lazily when used.
138
+
139
+ ## Voodoo Store by default
140
+
141
+ Voodoo Store is embedded application infrastructure. The framework owns one
142
+ Runtime Store handle per process/application lifecycle and shares it across
143
+ Store-backed Runtime domains.
144
+
145
+ ```text
146
+ Application
147
+ |
148
+ v
149
+ Voodoo Runtime
150
+ |
151
+ +-- Model / Data
152
+ +-- Jobs / Queue
153
+ +-- Scheduler
154
+ +-- Events
155
+ +-- Objects
156
+ +-- Execution / Workflow / HITL
157
+ +-- Identity
158
+ +-- Edge
159
+ |
160
+ v
161
+ .voodoo/application.vstore
162
+ ```
163
+
164
+ The Store is local-first and single-writer. PostgreSQL, SQLite, Redis, S3 and
165
+ other infrastructure remain explicit adapters for workloads that need them;
166
+ they are not silent defaults.
167
+
168
+ ## Start simple
169
+
170
+ | You need | Voodoo primitive |
171
+ |---|---|
172
+ | UI-local mutable value | `state()` |
173
+ | Persistent business data | `Model` |
174
+ | Browser interaction | Python-callable UI event/action |
175
+ | Decoupled application notification | Mesh / event bus |
176
+ | Retryable background work | `@task` / durable queue |
177
+ | Meaningful durable/observable work | `Execution` |
178
+ | LLM reasoning and tool use | `Agent` + `@tool` |
179
+ | Authorization to produce an effect | `Capability` |
180
+ | Human decision inside work | HITL approval |
181
+ | Operational identity/evidence | `Entity` + `Observation` + `WorldModel` |
182
+ | Durable desired outcome | `Goal` + `GoalRuntime` |
183
+ | External physical participant | Edge / `DeviceGateway` |
184
+ | Future/recurring work | Scheduler |
185
+
186
+ See `docs/choosing-primitives.md` for semantic boundaries between State, Model,
187
+ Memory, events, tools, tasks, capabilities and executions.
188
+
189
+ ## Small AI + data + event example
190
+
191
+ ```python
192
+ from voodoo import Agent, Model, tool
193
+ from voodoo.mesh import mesh
194
+
195
+
196
+ class Lead(Model):
197
+ name: str
198
+ email: str
199
+
200
+
201
+ @tool
202
+ async def create_lead(name: str, email: str) -> str:
203
+ lead = await Lead.create(name=name, email=email)
204
+ await mesh.emit("lead.created", {"id": lead.id, "name": name})
205
+ return f"Created lead #{lead.id}"
206
+
207
+
208
+ @mesh.on("lead.created")
209
+ async def notify(payload):
210
+ print("new lead", payload["name"])
211
+
212
+
213
+ agent = Agent(model="mock:test", tools=["create_lead"])
214
+ ```
215
+
216
+ With the default configuration, `Lead` is persisted through Voodoo Store. Tools
217
+ may also be exposed through MCP, but MCP is a separate interoperability
218
+ boundary, not a fake step inserted into every tool call.
219
+
220
+ ## Operational closed loop
221
+
222
+ The operational runtime keeps attempted effects separate from observed reality:
223
+
224
+ ```text
225
+ simulated device
226
+ → Edge
227
+ → Observation
228
+ → World
229
+ → Goal / Intent
230
+ → context-aware Planner
231
+ → Capability + Policy
232
+ → Execution
233
+ → Effect
234
+ → device
235
+ → ACK / observed evidence
236
+ → Observation
237
+ → World
238
+ ```
239
+
240
+ Run the canary with:
241
+
242
+ ```bash
243
+ python examples/operational_closed_loop/main.py
244
+ ```
245
+
246
+ The World does not change merely because an Effect was sent. It changes only
247
+ when the simulated device reports observed evidence back through the Edge
248
+ boundary.
249
+
250
+ ## What makes Voodoo different
251
+
252
+ - **One execution model.** APIs, agents, tools, workers, humans, remote nodes and
253
+ devices can converge on one traceable runtime instead of independent
254
+ orchestration stacks.
255
+ - **World-aware operational state.** `Entity`, `Relationship`, `Observation` and
256
+ `WorldModel` represent changing operational reality with provenance.
257
+ - **Governed agency.** Goal/Intent planning can use current World context, but
258
+ authority still flows through Capability and Policy.
259
+ - **AI is Compute.** Agents are powerful participants, not ambient authority.
260
+ - **Durable when it matters.** Executions, tasks, schedules, Goals and approvals
261
+ have persistence/recovery seams.
262
+ - **Human-in-the-loop is native.** Waiting is an execution lifecycle state.
263
+ - **Distributed without a second runtime.** Remote work re-enters the same
264
+ ExecutionEngine, capability and policy boundary.
265
+ - **Physical participants use the same semantics.** Edge devices report
266
+ evidence and receive Effects without owning a DeviceExecutionEngine.
267
+ - **Store-first and local-first.** Voodoo Store provides the default embedded
268
+ durable infrastructure; PostgreSQL, SQLite, Redis and S3-compatible storage
269
+ are explicit adapters.
270
+ - **Observability is structural.** Trace/execution lineage connects meaningful
271
+ work, Effects and resulting Observations.
272
+
273
+ ## Canonical import model
274
+
275
+ The 2.x package root remains a compatibility facade. New code should use the
276
+ namespace that owns the concept:
277
+
278
+ ```python
279
+ from voodoo import App, Agent, Model, page, state, task, tool
280
+ from voodoo.ui import Button, Card, DataTable
281
+ from voodoo.runtime import ExecutionEngine, Goal, GoalRuntime, Planner
282
+ from voodoo.world import Entity, Observation, WorldModel
283
+ from voodoo.edge import DeviceGateway, WorldAwareDeviceGateway
284
+ from voodoo.protocol import WorldSnapshot, RemoteExecutionRequest
285
+ ```
286
+
287
+ See `docs/public-api-3.md` for the 3.0 import law and 2.x compatibility policy.
288
+
289
+ ## Major capabilities
290
+
291
+ **Application:** server-rendered/reactive Python UI, routing/APIs, design
292
+ system/themes, SEO, async Model persistence, auth and security middleware.
293
+
294
+ **Runtime:** ExecutionEngine, durable checkpoints/recovery, workers/tasks,
295
+ scheduler, event infrastructure, human approvals, capability security,
296
+ contextual Policy, Goal Runtime and bounded adaptive planning/supervision.
297
+
298
+ **World:** stable entities, relationships, append-only observations, durable
299
+ World storage and reasoning/policy snapshots.
300
+
301
+ **AI:** agents, native provider tool calling, `@tool`, MCP integration, Memory,
302
+ model/provider abstraction and config-driven OpenAI-compatible endpoints.
303
+
304
+ **Distributed/Edge:** governed remote execution, replay/idempotency, distributed
305
+ WAITING/HITL, node membership/routing, device identity/auth, HTTP/MQTT Edge
306
+ semantics, effect delivery, ACKs and Edge → World evidence convergence.
307
+
308
+ **Infrastructure adapters:** PostgreSQL, SQLite, Redis, S3-compatible object
309
+ storage and OpenTelemetry are optional or explicit integrations behind Runtime
310
+ contracts.
311
+
312
+ ## Installation
313
+
314
+ ```bash
315
+ # Core runtime (includes the Voodoo Store dependency)
316
+ pip install voodoo-framework
317
+
318
+ # Model providers
319
+ pip install "voodoo-framework[ai]"
320
+
321
+ # Explicit external adapters as needed
322
+ pip install "voodoo-framework[postgres,redis,s3,otel]"
323
+
324
+ # Explicit SQLite adapter when needed
325
+ pip install "voodoo-framework[sqlite]"
326
+
327
+ # Edge MQTT transport when needed
328
+ pip install "voodoo-framework[edge]"
329
+
330
+ # Development tools
331
+ pip install "voodoo-framework[dev]"
332
+ ```
333
+
334
+ Other supported installation paths include `uv tool install voodoo-framework`
335
+ and `pipx install voodoo-framework`.
336
+
337
+ ## Configuration
338
+
339
+ Voodoo is zero-config locally. The effective defaults are equivalent to:
340
+
341
+ ```toml
342
+ [store]
343
+ provider = "voodoo"
344
+ path = ".voodoo/application.vstore"
345
+
346
+ [database]
347
+ provider = "voodoo"
348
+
349
+ [queue]
350
+ provider = "voodoo"
351
+
352
+ [events]
353
+ provider = "voodoo"
354
+
355
+ [objects]
356
+ provider = "voodoo"
357
+ ```
358
+
359
+ You normally do not need to write those blocks. Override only the domain that
360
+ needs external infrastructure. For example:
361
+
362
+ ```toml
363
+ [database]
364
+ provider = "postgres"
365
+ url = "postgresql://..."
366
+
367
+ [queue]
368
+ provider = "redis"
369
+ url = "redis://..."
370
+
371
+ [objects]
372
+ provider = "s3"
373
+ bucket = "my-bucket"
374
+ ```
375
+
376
+ Voodoo does not silently migrate or copy legacy SQLite/PostgreSQL/Redis/S3 data
377
+ into the Store at startup. Migration is an explicit operation.
378
+
379
+ ## Current Store boundaries
380
+
381
+ The Store-first path is usable, but current 0.2.x boundaries are explicit:
382
+
383
+ - schedule enable/disable is supported, but arbitrary schedule-cursor
384
+ repositioning is not exposed by Store 0.2.2;
385
+ - Events and Objects preserve their Framework contracts through Store-backed
386
+ compatibility layers while richer native Python bindings evolve;
387
+ - node-local Stores are not replicated automatically;
388
+ - Voodoo does not claim distributed consensus, global serializable
389
+ transactions, or global exactly-once execution.
390
+
391
+ ## Documentation
392
+
393
+ Start here:
394
+
395
+ - `docs/hello_world.md` — first application
396
+ - `docs/choosing-primitives.md` — which abstraction to use
397
+ - `docs/primitives.md` — computational model
398
+ - `docs/execution-model.md` and `docs/runtime.md` — execution semantics
399
+ - `docs/agents.md`, `docs/tools.md`, `docs/mcp.md` — AI/tool integration
400
+ - `docs/hitl.md` — human approvals
401
+ - `docs/protocol.md` — language-neutral semantic boundary
402
+ - `docs/public-api-3.md` — canonical 3.0 import model
403
+ - `ARCHITECTURE.md` — root architecture reference
404
+ - `ROADMAP.md` — long-range architectural direction
405
+ - `SPRINT_PLAN.md` — implementation source of truth
406
+
407
+ ## Examples
408
+
409
+ | Example | Purpose |
410
+ |---|---|
411
+ | `examples/hello_world/` | smallest page |
412
+ | `examples/dashboard/` | reactive UI/state |
413
+ | `examples/realtime/` | realtime communication |
414
+ | `examples/ai_agent/` | agent/tool application |
415
+ | `examples/ai_saas/` | UI + Agent + Tool + Mesh + Worker + Model |
416
+ | `examples/ui_magic/` | current callable UI / Design System acceptance app |
417
+ | `examples/operational_closed_loop/` | Edge → World → Goal → Execution → Effect → evidence canary |
418
+
419
+ ## Project status
420
+
421
+ Voodoo is beta software. Sprint completion and a published package release are
422
+ intentionally separate operations. The repository branch may contain completed
423
+ work that has not yet been released to PyPI.
424
+
425
+ ## Contributing and security
426
+
427
+ See `CONTRIBUTING.md` for development workflow, `SECURITY.md` for vulnerability
428
+ reporting and `CODE_OF_CONDUCT.md` for community expectations.
429
+
430
+ ## License
431
+
432
+ MIT. See `LICENSE`.