voodoo-framework 2.5.0__tar.gz → 2.5.1__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 (230) hide show
  1. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/PKG-INFO +1 -1
  2. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/__init__.py +1 -1
  3. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/protocol/schemas.py +81 -15
  4. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/execution.py +53 -1
  5. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/execution/sqlite.py +5 -1
  6. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo_framework.egg-info/PKG-INFO +1 -1
  7. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/LICENSE +0 -0
  8. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/README.md +0 -0
  9. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/pyproject.toml +0 -0
  10. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/setup.cfg +0 -0
  11. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/adapters/__init__.py +0 -0
  12. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/adapters/capabilities.py +0 -0
  13. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/adapters/registry.py +0 -0
  14. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/adapters/tailwind.py +0 -0
  15. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/adapters/voodoo_css.py +0 -0
  16. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/agent.py +0 -0
  17. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/agents/__init__.py +0 -0
  18. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/agents/models.py +0 -0
  19. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/agents/registry.py +0 -0
  20. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/__init__.py +0 -0
  21. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/agent.py +0 -0
  22. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/providers/__init__.py +0 -0
  23. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/providers/anthropic.py +0 -0
  24. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/providers/gemini.py +0 -0
  25. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/providers/mock.py +0 -0
  26. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/providers/ollama.py +0 -0
  27. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/providers/openai.py +0 -0
  28. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/tools/__init__.py +0 -0
  29. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ai/tools/registry.py +0 -0
  30. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/api.py +0 -0
  31. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/auth/__init__.py +0 -0
  32. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/auth/cookies.py +0 -0
  33. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/auth/guards.py +0 -0
  34. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/auth/jwt.py +0 -0
  35. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/auth/middleware.py +0 -0
  36. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/auth/passwords.py +0 -0
  37. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/auth/user.py +0 -0
  38. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/__init__.py +0 -0
  39. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/__main__.py +0 -0
  40. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/agents.py +0 -0
  41. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/ai.py +0 -0
  42. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/approvals.py +0 -0
  43. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/auth.py +0 -0
  44. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/create.py +0 -0
  45. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/dev.py +0 -0
  46. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/doctor.py +0 -0
  47. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/executions.py +0 -0
  48. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/generate.py +0 -0
  49. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/inspect.py +0 -0
  50. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/new.py +0 -0
  51. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/objects.py +0 -0
  52. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/protocol.py +0 -0
  53. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/recover.py +0 -0
  54. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/routes.py +0 -0
  55. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/scaffolding.py +0 -0
  56. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/schedules.py +0 -0
  57. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/status.py +0 -0
  58. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/tasks.py +0 -0
  59. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/terminal.py +0 -0
  60. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/theme.py +0 -0
  61. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/version.py +0 -0
  62. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/cli/workers_cmd.py +0 -0
  63. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/components.py +0 -0
  64. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/config.py +0 -0
  65. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/core/__init__.py +0 -0
  66. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/core/app.py +0 -0
  67. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/core/errors.py +0 -0
  68. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/core/events.py +0 -0
  69. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/core/render.py +0 -0
  70. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/core/routing.py +0 -0
  71. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/core/sitemap.py +0 -0
  72. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/core/state.py +0 -0
  73. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/data/__init__.py +0 -0
  74. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/data/base.py +0 -0
  75. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/data/model.py +0 -0
  76. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/i18n.py +0 -0
  77. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/mcp/__init__.py +0 -0
  78. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/mcp/client.py +0 -0
  79. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/memory/__init__.py +0 -0
  80. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/memory/interfaces.py +0 -0
  81. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/memory/sqlite.py +0 -0
  82. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/mesh/__init__.py +0 -0
  83. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/mesh/client.py +0 -0
  84. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/mesh/event_bus.py +0 -0
  85. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/primitives/__init__.py +0 -0
  86. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/primitives/capability.py +0 -0
  87. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/primitives/compute.py +0 -0
  88. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/primitives/constraint.py +0 -0
  89. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/primitives/effect.py +0 -0
  90. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/primitives/intent.py +0 -0
  91. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/primitives/resource.py +0 -0
  92. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/primitives/state.py +0 -0
  93. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/primitives/time.py +0 -0
  94. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/protocol/__init__.py +0 -0
  95. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/protocol/export.py +0 -0
  96. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/py.typed +0 -0
  97. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/queue.py +0 -0
  98. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/routing/api.py +0 -0
  99. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/routing/pages.py +0 -0
  100. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/__init__.py +0 -0
  101. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/adaptive.py +0 -0
  102. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/capability.py +0 -0
  103. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/constraint.py +0 -0
  104. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/context.py +0 -0
  105. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/engine.py +0 -0
  106. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/errors.py +0 -0
  107. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/graph.py +0 -0
  108. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/human.py +0 -0
  109. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/persistence.py +0 -0
  110. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/planner.py +0 -0
  111. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/scheduler.py +0 -0
  112. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/task.py +0 -0
  113. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/runtime/workflow.py +0 -0
  114. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/schedule.py +0 -0
  115. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/security/__init__.py +0 -0
  116. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/security/cors.py +0 -0
  117. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/security/csrf.py +0 -0
  118. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/security/headers.py +0 -0
  119. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/security/passwords.py +0 -0
  120. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/security/rate_limit.py +0 -0
  121. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/security/redaction.py +0 -0
  122. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/security/secrets.py +0 -0
  123. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/seo.py +0 -0
  124. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/static/client.js +0 -0
  125. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/status.py +0 -0
  126. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/__init__.py +0 -0
  127. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/cache/__init__.py +0 -0
  128. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/cache/interfaces.py +0 -0
  129. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/cache/memory.py +0 -0
  130. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/cache/redis.py +0 -0
  131. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/database/__init__.py +0 -0
  132. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/database/interfaces.py +0 -0
  133. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/database/postgres.py +0 -0
  134. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/database/sqlite.py +0 -0
  135. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/events/__init__.py +0 -0
  136. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/events/interfaces.py +0 -0
  137. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/events/local.py +0 -0
  138. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/events/postgres.py +0 -0
  139. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/events/sqlite.py +0 -0
  140. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/execution/__init__.py +0 -0
  141. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/execution/migrations.py +0 -0
  142. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/execution/postgres.py +0 -0
  143. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/manager.py +0 -0
  144. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/objects/__init__.py +0 -0
  145. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/objects/interfaces.py +0 -0
  146. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/objects/local.py +0 -0
  147. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/objects/s3.py +0 -0
  148. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/queue/__init__.py +0 -0
  149. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/queue/interfaces.py +0 -0
  150. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/queue/memory.py +0 -0
  151. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/queue/postgres.py +0 -0
  152. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/queue/redis.py +0 -0
  153. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/queue/sqlite.py +0 -0
  154. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/scheduler/__init__.py +0 -0
  155. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/storage/scheduler/sqlite.py +0 -0
  156. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/telemetry/__init__.py +0 -0
  157. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/telemetry/api.py +0 -0
  158. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/telemetry/middleware.py +0 -0
  159. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/telemetry/otlp.py +0 -0
  160. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/telemetry/store.py +0 -0
  161. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/theme.py +0 -0
  162. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/tools/__init__.py +0 -0
  163. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/tools/registry.py +0 -0
  164. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/__init__.py +0 -0
  165. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/component.py +0 -0
  166. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/events.py +0 -0
  167. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/library.py +0 -0
  168. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/markdown.py +0 -0
  169. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/rendering.py +0 -0
  170. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/state.py +0 -0
  171. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/styles/__init__.py +0 -0
  172. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/styles/presets.py +0 -0
  173. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/ui/styles/theme.py +0 -0
  174. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/workers/__init__.py +0 -0
  175. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo/workers/queue.py +0 -0
  176. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo_framework.egg-info/SOURCES.txt +0 -0
  177. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo_framework.egg-info/dependency_links.txt +0 -0
  178. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo_framework.egg-info/entry_points.txt +0 -0
  179. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo_framework.egg-info/requires.txt +0 -0
  180. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/src/voodoo_framework.egg-info/top_level.txt +0 -0
  181. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_agent.py +0 -0
  182. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_agent_registry.py +0 -0
  183. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_agent_runtime.py +0 -0
  184. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_app.py +0 -0
  185. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_auth.py +0 -0
  186. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_capability_security.py +0 -0
  187. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_checkpoint_resume.py +0 -0
  188. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_chrome.py +0 -0
  189. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_cli.py +0 -0
  190. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_cli_inspect.py +0 -0
  191. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_components.py +0 -0
  192. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_config.py +0 -0
  193. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_contract_api.py +0 -0
  194. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_create.py +0 -0
  195. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_data.py +0 -0
  196. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_design_system.py +0 -0
  197. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_durable_hitl.py +0 -0
  198. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_events.py +0 -0
  199. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_execution_sqlite_store.py +0 -0
  200. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_http_runtime.py +0 -0
  201. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_human.py +0 -0
  202. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_i18n.py +0 -0
  203. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_integration.py +0 -0
  204. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_mcp.py +0 -0
  205. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_mcp_runtime.py +0 -0
  206. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_memory.py +0 -0
  207. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_mesh.py +0 -0
  208. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_mesh_event_bus.py +0 -0
  209. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_model.py +0 -0
  210. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_object_store.py +0 -0
  211. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_observability.py +0 -0
  212. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_persistence.py +0 -0
  213. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_planner_adaptive.py +0 -0
  214. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_primitives.py +0 -0
  215. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_protocol.py +0 -0
  216. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_provider_switching.py +0 -0
  217. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_providers.py +0 -0
  218. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_queue.py +0 -0
  219. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_reactive.py +0 -0
  220. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_runtime.py +0 -0
  221. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_scheduler.py +0 -0
  222. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_security.py +0 -0
  223. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_seo.py +0 -0
  224. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_state.py +0 -0
  225. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_theme.py +0 -0
  226. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_theme_presets.py +0 -0
  227. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_tools.py +0 -0
  228. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_ui.py +0 -0
  229. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_websocket.py +0 -0
  230. {voodoo_framework-2.5.0 → voodoo_framework-2.5.1}/tests/test_workers.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voodoo-framework
3
- Version: 2.5.0
3
+ Version: 2.5.1
4
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
5
  Author-email: Helder Perez <contact@helderperez.com>
6
6
  Maintainer-email: Helder Perez <contact@helderperez.com>
@@ -102,7 +102,7 @@ from .ui.styles import (
102
102
  from .ui.styles.theme import Theme, ThemeColors, create_theme
103
103
  from .workers import task
104
104
 
105
- __version__ = "2.5.0"
105
+ __version__ = "2.5.1"
106
106
 
107
107
  __all__ = [
108
108
  # Core runtime
@@ -17,7 +17,7 @@ Compatibility policy (see ``docs/protocol.md``):
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- from datetime import datetime
20
+ from datetime import UTC, datetime
21
21
  from enum import StrEnum
22
22
  from typing import Any
23
23
 
@@ -150,8 +150,8 @@ class Identity(BaseModel):
150
150
  id: str = Field(description="Globally unique entity ID (UUID4).")
151
151
  kind: str = Field(description="Entity kind (e.g. 'agent', 'execution', 'task').")
152
152
  owner: str | None = None
153
- created_at: datetime = Field(default_factory=datetime.utcnow)
154
- updated_at: datetime = Field(default_factory=datetime.utcnow)
153
+ created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
154
+ updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
155
155
  metadata: dict[str, Any] = Field(default_factory=dict)
156
156
 
157
157
 
@@ -165,7 +165,7 @@ class Capability(BaseModel):
165
165
  delegate_to: str | None = None
166
166
  expires_at: datetime | None = None
167
167
  revoked: bool = False
168
- issued_at: datetime = Field(default_factory=datetime.utcnow)
168
+ issued_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
169
169
  issued_by: str | None = None
170
170
 
171
171
 
@@ -228,8 +228,8 @@ class Intent(BaseModel):
228
228
  requires: list[str] = Field(default_factory=list)
229
229
  constraints: list[Constraint] = Field(default_factory=list)
230
230
  effect_ids: list[str] = Field(default_factory=list)
231
- created_at: datetime = Field(default_factory=datetime.utcnow)
232
- updated_at: datetime = Field(default_factory=datetime.utcnow)
231
+ created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
232
+ updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
233
233
  result: Any = None
234
234
  error: str | None = None
235
235
 
@@ -248,7 +248,7 @@ class Effect(BaseModel):
248
248
  status: EffectStatus = EffectStatus.PENDING
249
249
  result: Any = None
250
250
  error: str | None = None
251
- created_at: datetime = Field(default_factory=datetime.utcnow)
251
+ created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
252
252
  executed_at: datetime | None = None
253
253
  actor: str | None = None
254
254
  principal: str | None = None
@@ -275,10 +275,76 @@ class Execution(BaseModel):
275
275
  error: str | None = None
276
276
  metadata: dict[str, Any] = Field(default_factory=dict)
277
277
  checkpoint: dict[str, Any] | None = None
278
- created_at: datetime = Field(default_factory=datetime.utcnow)
278
+ created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
279
279
  started_at: datetime | None = None
280
280
  completed_at: datetime | None = None
281
281
 
282
+ # -- runtime conversion ------------------------------------------------
283
+
284
+ @classmethod
285
+ def from_runtime_execution(
286
+ cls,
287
+ exec: Any, # noqa: ANN401 — runtime.Execution
288
+ ) -> Execution:
289
+ """Convert a runtime ``Execution`` to a protocol ``Execution``.
290
+
291
+ Runtime ``State`` objects in ``state_changes`` are converted to dicts
292
+ via ``model_dump()`` so the protocol representation is JSON-safe.
293
+ """
294
+ return cls(
295
+ id=exec.id,
296
+ trace_id=exec.trace_id,
297
+ parent_execution_id=exec.parent_execution_id,
298
+ status=ExecutionStatus(exec.status.value),
299
+ intent=exec.intent,
300
+ actor=exec.actor,
301
+ compute=exec.compute,
302
+ capabilities=list(exec.capabilities),
303
+ resources=exec.resources,
304
+ effects=list(exec.effects),
305
+ state_changes=[
306
+ s.model_dump() if hasattr(s, "model_dump") else s
307
+ for s in exec.state_changes
308
+ ],
309
+ result=exec.result,
310
+ error=exec.error,
311
+ metadata=dict(exec.metadata),
312
+ checkpoint=exec.checkpoint,
313
+ created_at=exec.created_at,
314
+ started_at=exec.started_at,
315
+ completed_at=exec.completed_at,
316
+ )
317
+
318
+ def to_runtime_execution(self) -> Any: # noqa: ANN401
319
+ """Convert this protocol ``Execution`` back to a runtime ``Execution``.
320
+
321
+ Requires ``voodoo.runtime.execution.Execution`` to be importable.
322
+ Uses a lazy import to avoid circular dependencies.
323
+ """
324
+ from voodoo.runtime.execution import Execution as RuntimeExecution
325
+ from voodoo.runtime.execution import ExecutionStatus as RuntimeStatus
326
+
327
+ return RuntimeExecution(
328
+ id=self.id,
329
+ trace_id=self.trace_id,
330
+ parent_execution_id=self.parent_execution_id,
331
+ status=RuntimeStatus(self.status.value),
332
+ intent=self.intent,
333
+ actor=self.actor,
334
+ compute=self.compute,
335
+ capabilities=list(self.capabilities),
336
+ resources=self.resources,
337
+ effects=list(self.effects),
338
+ state_changes=self.state_changes,
339
+ result=self.result,
340
+ error=self.error,
341
+ metadata=dict(self.metadata),
342
+ checkpoint=self.checkpoint,
343
+ created_at=self.created_at,
344
+ started_at=self.started_at,
345
+ completed_at=self.completed_at,
346
+ )
347
+
282
348
 
283
349
  class Task(BaseModel):
284
350
  """A queued work item (worker task)."""
@@ -326,7 +392,7 @@ class ObjectRef(BaseModel):
326
392
  content_type: str | None = None
327
393
  checksum: str | None = None
328
394
  metadata: dict[str, Any] = Field(default_factory=dict)
329
- created_at: datetime = Field(default_factory=datetime.utcnow)
395
+ created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
330
396
 
331
397
 
332
398
  class Error(BaseModel):
@@ -339,7 +405,7 @@ class Error(BaseModel):
339
405
  trace_id: str | None = None
340
406
  details: dict[str, Any] = Field(default_factory=dict)
341
407
  cause: str | None = None
342
- timestamp: datetime = Field(default_factory=datetime.utcnow)
408
+ timestamp: datetime = Field(default_factory=lambda: datetime.now(UTC))
343
409
 
344
410
 
345
411
  class TelemetrySpan(BaseModel):
@@ -370,7 +436,7 @@ class Approval(BaseModel):
370
436
  decided_by: str | None = None
371
437
  decided_at: datetime | None = None
372
438
  reason: str | None = None
373
- created_at: datetime = Field(default_factory=datetime.utcnow)
439
+ created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
374
440
  participant: str | None = None
375
441
 
376
442
 
@@ -389,8 +455,8 @@ class AgentEntity(BaseModel):
389
455
  config: dict[str, Any] = Field(default_factory=dict)
390
456
  state: str = "active"
391
457
  metadata: dict[str, Any] = Field(default_factory=dict)
392
- created_at: datetime = Field(default_factory=datetime.utcnow)
393
- updated_at: datetime = Field(default_factory=datetime.utcnow)
458
+ created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
459
+ updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
394
460
 
395
461
 
396
462
  class AgentRun(BaseModel):
@@ -424,8 +490,8 @@ class MemoryEntry(BaseModel):
424
490
  tags: list[str] = Field(default_factory=list)
425
491
  source_execution_id: str | None = None
426
492
  importance: float = 0.5
427
- created_at: datetime = Field(default_factory=datetime.utcnow)
428
- updated_at: datetime = Field(default_factory=datetime.utcnow)
493
+ created_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
494
+ updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
429
495
  expires_at: datetime | None = None
430
496
 
431
497
 
@@ -33,7 +33,7 @@ from voodoo.primitives.intent import Intent
33
33
  from voodoo.primitives.resource import Resource
34
34
  from voodoo.primitives.state import State
35
35
 
36
- __all__ = ["ExecutionStatus", "Execution"]
36
+ __all__ = ["ExecutionStatus", "LEGAL_TRANSITIONS", "Execution"]
37
37
 
38
38
 
39
39
  class ExecutionStatus(StrEnum):
@@ -67,6 +67,52 @@ class ExecutionStatus(StrEnum):
67
67
  )
68
68
 
69
69
 
70
+ # ---------------------------------------------------------------------------
71
+ # Legal state transitions — enforced by Execution._transition()
72
+ # ---------------------------------------------------------------------------
73
+
74
+ LEGAL_TRANSITIONS: dict[ExecutionStatus, set[ExecutionStatus]] = {
75
+ ExecutionStatus.CREATED: {
76
+ ExecutionStatus.PLANNED,
77
+ ExecutionStatus.AUTHORIZED,
78
+ ExecutionStatus.RUNNING,
79
+ ExecutionStatus.WAITING,
80
+ ExecutionStatus.COMPLETED,
81
+ ExecutionStatus.FAILED,
82
+ ExecutionStatus.CANCELLED,
83
+ },
84
+ ExecutionStatus.PLANNED: {
85
+ ExecutionStatus.AUTHORIZED,
86
+ ExecutionStatus.RUNNING,
87
+ ExecutionStatus.FAILED,
88
+ ExecutionStatus.CANCELLED,
89
+ },
90
+ ExecutionStatus.AUTHORIZED: {
91
+ ExecutionStatus.RUNNING,
92
+ ExecutionStatus.FAILED,
93
+ ExecutionStatus.CANCELLED,
94
+ },
95
+ ExecutionStatus.RUNNING: {
96
+ ExecutionStatus.WAITING,
97
+ ExecutionStatus.COMPLETED,
98
+ ExecutionStatus.FAILED,
99
+ ExecutionStatus.CANCELLED,
100
+ ExecutionStatus.TIMED_OUT,
101
+ },
102
+ ExecutionStatus.WAITING: {
103
+ ExecutionStatus.RUNNING,
104
+ ExecutionStatus.COMPLETED,
105
+ ExecutionStatus.FAILED,
106
+ ExecutionStatus.CANCELLED,
107
+ },
108
+ # Terminal states — no transitions out.
109
+ ExecutionStatus.COMPLETED: set(),
110
+ ExecutionStatus.FAILED: set(),
111
+ ExecutionStatus.CANCELLED: set(),
112
+ ExecutionStatus.TIMED_OUT: set(),
113
+ }
114
+
115
+
70
116
  class Execution(BaseModel):
71
117
  """A single runtime execution.
72
118
 
@@ -150,6 +196,12 @@ class Execution(BaseModel):
150
196
  self._transition(ExecutionStatus.TIMED_OUT)
151
197
 
152
198
  def _transition(self, new_status: ExecutionStatus) -> None:
199
+ allowed = LEGAL_TRANSITIONS.get(self.status, set())
200
+ if new_status not in allowed:
201
+ raise ValueError(
202
+ f"Illegal transition: {self.status.value} → {new_status.value}. "
203
+ f"Allowed: {sorted(s.value for s in allowed) or '(terminal state)'}"
204
+ )
153
205
  self.status = new_status
154
206
 
155
207
  # -- recording ---------------------------------------------------------
@@ -186,13 +186,17 @@ class SQLiteExecutionStore:
186
186
  ``running``, ``execution.completed`` for ``completed``, etc. A
187
187
  ``state.changed`` event is appended after the status event when the
188
188
  execution already existed (subsequent write).
189
+
190
+ Materialized row is upserted FIRST to satisfy FK constraints
191
+ (``execution_events.execution_id → executions.id``), matching
192
+ the PostgreSQL store ordering.
189
193
  """
194
+ self._upsert_materialized(execution)
190
195
  self.append_event(
191
196
  execution.id,
192
197
  _status_event_type(execution.status),
193
198
  _execution_payload(execution),
194
199
  )
195
- self._upsert_materialized(execution)
196
200
 
197
201
  def load_all(self) -> list[Execution]:
198
202
  """Return every execution (materialized projection, last write wins)."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voodoo-framework
3
- Version: 2.5.0
3
+ Version: 2.5.1
4
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
5
  Author-email: Helder Perez <contact@helderperez.com>
6
6
  Maintainer-email: Helder Perez <contact@helderperez.com>