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