volnix 0.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.
- volnix-0.1.0/.env.example +31 -0
- volnix-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +64 -0
- volnix-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +56 -0
- volnix-0.1.0/.github/pull_request_template.md +20 -0
- volnix-0.1.0/.github/workflows/ci.yml +76 -0
- volnix-0.1.0/.github/workflows/publish.yml +47 -0
- volnix-0.1.0/.gitignore +91 -0
- volnix-0.1.0/AGENTS.md +171 -0
- volnix-0.1.0/CHANGELOG.md +32 -0
- volnix-0.1.0/CLAUDE.md +171 -0
- volnix-0.1.0/CODE_OF_CONDUCT.md +30 -0
- volnix-0.1.0/CONTRIBUTING.md +139 -0
- volnix-0.1.0/DESIGN_PRINCIPLES.md +165 -0
- volnix-0.1.0/LICENSE +21 -0
- volnix-0.1.0/PKG-INFO +616 -0
- volnix-0.1.0/README.md +576 -0
- volnix-0.1.0/SECURITY.md +46 -0
- volnix-0.1.0/docs/agent-integration.md +482 -0
- volnix-0.1.0/docs/architecture.md +181 -0
- volnix-0.1.0/docs/assets/Dashboard.png +0 -0
- volnix-0.1.0/docs/behavior-modes.md +181 -0
- volnix-0.1.0/docs/blueprints-reference.md +186 -0
- volnix-0.1.0/docs/configuration.md +467 -0
- volnix-0.1.0/docs/creating-worlds.md +452 -0
- volnix-0.1.0/docs/getting-started.md +177 -0
- volnix-0.1.0/docs/internal-agents.md +252 -0
- volnix-0.1.0/docs/internal-simulation.md +15 -0
- volnix-0.1.0/docs/pending-work.md +96 -0
- volnix-0.1.0/docs/service-packs.md +987 -0
- volnix-0.1.0/examples/README.md +407 -0
- volnix-0.1.0/examples/anthropic-sdk/main.py +108 -0
- volnix-0.1.0/examples/autogen/main.py +88 -0
- volnix-0.1.0/examples/crewai/crew.py +98 -0
- volnix-0.1.0/examples/gemini-sdk/main.py +125 -0
- volnix-0.1.0/examples/governance-test/main.py +137 -0
- volnix-0.1.0/examples/langgraph/volnix_agent.py +120 -0
- volnix-0.1.0/examples/launch-demo/README.md +57 -0
- volnix-0.1.0/examples/launch-demo/external/README.md +75 -0
- volnix-0.1.0/examples/launch-demo/external/agents.yaml +21 -0
- volnix-0.1.0/examples/launch-demo/external/run.py +127 -0
- volnix-0.1.0/examples/launch-demo/external/run.sh +44 -0
- volnix-0.1.0/examples/launch-demo/internal/README.md +45 -0
- volnix-0.1.0/examples/launch-demo/internal/run.sh +27 -0
- volnix-0.1.0/examples/mcp/claude_desktop_config.json +8 -0
- volnix-0.1.0/examples/mcp/main.py +65 -0
- volnix-0.1.0/examples/mcp/stdio_config.json +9 -0
- volnix-0.1.0/examples/openai-sdk/main.py +101 -0
- volnix-0.1.0/examples/pydanticai/main.py +46 -0
- volnix-0.1.0/pyproject.toml +95 -0
- volnix-0.1.0/scripts/check-providers.sh +119 -0
- volnix-0.1.0/scripts/start-acp.sh +82 -0
- volnix-0.1.0/scripts/test-providers.sh +89 -0
- volnix-0.1.0/tests/__init__.py +0 -0
- volnix-0.1.0/tests/actors/__init__.py +0 -0
- volnix-0.1.0/tests/actors/test_actor_state.py +408 -0
- volnix-0.1.0/tests/actors/test_definition.py +89 -0
- volnix-0.1.0/tests/actors/test_generator.py +141 -0
- volnix-0.1.0/tests/actors/test_personality.py +98 -0
- volnix-0.1.0/tests/actors/test_registry.py +221 -0
- volnix-0.1.0/tests/actors/test_replay.py +179 -0
- volnix-0.1.0/tests/actors/test_slot_binding.py +111 -0
- volnix-0.1.0/tests/actors/test_trait_extractor.py +115 -0
- volnix-0.1.0/tests/architecture/__init__.py +1 -0
- volnix-0.1.0/tests/architecture/conftest.py +29 -0
- volnix-0.1.0/tests/architecture/helpers.py +168 -0
- volnix-0.1.0/tests/architecture/test_contracts.py +158 -0
- volnix-0.1.0/tests/architecture/test_protocol_conformance.py +139 -0
- volnix-0.1.0/tests/architecture/test_source_guards.py +109 -0
- volnix-0.1.0/tests/architecture/test_world_compiler_guards.py +40 -0
- volnix-0.1.0/tests/bus/__init__.py +0 -0
- volnix-0.1.0/tests/bus/test_bus.py +238 -0
- volnix-0.1.0/tests/bus/test_fanout.py +169 -0
- volnix-0.1.0/tests/bus/test_integration.py +169 -0
- volnix-0.1.0/tests/bus/test_middleware.py +170 -0
- volnix-0.1.0/tests/bus/test_persistence.py +129 -0
- volnix-0.1.0/tests/bus/test_replay.py +190 -0
- volnix-0.1.0/tests/cli/__init__.py +0 -0
- volnix-0.1.0/tests/cli/test_cli.py +1086 -0
- volnix-0.1.0/tests/cli/test_preset_actors_flags.py +197 -0
- volnix-0.1.0/tests/config/__init__.py +0 -0
- volnix-0.1.0/tests/config/test_loader.py +155 -0
- volnix-0.1.0/tests/config/test_registry.py +88 -0
- volnix-0.1.0/tests/config/test_schema.py +120 -0
- volnix-0.1.0/tests/config/test_tunable.py +83 -0
- volnix-0.1.0/tests/config/test_validation.py +96 -0
- volnix-0.1.0/tests/conftest.py +193 -0
- volnix-0.1.0/tests/core/__init__.py +0 -0
- volnix-0.1.0/tests/core/test_context.py +51 -0
- volnix-0.1.0/tests/core/test_engine.py +123 -0
- volnix-0.1.0/tests/core/test_envelope.py +165 -0
- volnix-0.1.0/tests/core/test_errors.py +50 -0
- volnix-0.1.0/tests/core/test_events.py +136 -0
- volnix-0.1.0/tests/core/test_protocols.py +57 -0
- volnix-0.1.0/tests/core/test_types.py +125 -0
- volnix-0.1.0/tests/core/test_world_event_new_fields.py +122 -0
- volnix-0.1.0/tests/engines/__init__.py +0 -0
- volnix-0.1.0/tests/engines/adapter/__init__.py +0 -0
- volnix-0.1.0/tests/engines/adapter/test_acp_server.py +14 -0
- volnix-0.1.0/tests/engines/adapter/test_anthropic_compat.py +11 -0
- volnix-0.1.0/tests/engines/adapter/test_dashboard_endpoints.py +605 -0
- volnix-0.1.0/tests/engines/adapter/test_engine.py +104 -0
- volnix-0.1.0/tests/engines/adapter/test_event_enrichment.py +241 -0
- volnix-0.1.0/tests/engines/adapter/test_http_rest.py +810 -0
- volnix-0.1.0/tests/engines/adapter/test_http_rest_real_path.py +144 -0
- volnix-0.1.0/tests/engines/adapter/test_list_actors_endpoint.py +125 -0
- volnix-0.1.0/tests/engines/adapter/test_mcp_server.py +147 -0
- volnix-0.1.0/tests/engines/adapter/test_openai_compat.py +14 -0
- volnix-0.1.0/tests/engines/adapter/test_run_lifecycle.py +160 -0
- volnix-0.1.0/tests/engines/adapter/test_tool_manifest.py +125 -0
- volnix-0.1.0/tests/engines/agency/__init__.py +0 -0
- volnix-0.1.0/tests/engines/agency/test_engine.py +1506 -0
- volnix-0.1.0/tests/engines/agency/test_multi_turn.py +591 -0
- volnix-0.1.0/tests/engines/agency/test_prompt_builder.py +324 -0
- volnix-0.1.0/tests/engines/agency/test_wiring.py +68 -0
- volnix-0.1.0/tests/engines/animator/__init__.py +1 -0
- volnix-0.1.0/tests/engines/animator/test_context.py +154 -0
- volnix-0.1.0/tests/engines/animator/test_engine.py +412 -0
- volnix-0.1.0/tests/engines/animator/test_generator.py +215 -0
- volnix-0.1.0/tests/engines/budget/__init__.py +0 -0
- volnix-0.1.0/tests/engines/budget/test_engine.py +430 -0
- volnix-0.1.0/tests/engines/feedback/__init__.py +0 -0
- volnix-0.1.0/tests/engines/feedback/conftest.py +251 -0
- volnix-0.1.0/tests/engines/feedback/test_annotations.py +73 -0
- volnix-0.1.0/tests/engines/feedback/test_capture.py +68 -0
- volnix-0.1.0/tests/engines/feedback/test_drift.py +105 -0
- volnix-0.1.0/tests/engines/feedback/test_engine.py +135 -0
- volnix-0.1.0/tests/engines/feedback/test_engine_g4b.py +84 -0
- volnix-0.1.0/tests/engines/feedback/test_pack_compiler.py +61 -0
- volnix-0.1.0/tests/engines/feedback/test_pack_verifier.py +70 -0
- volnix-0.1.0/tests/engines/feedback/test_promotion.py +195 -0
- volnix-0.1.0/tests/engines/feedback/test_proposer.py +90 -0
- volnix-0.1.0/tests/engines/feedback/test_signals.py +221 -0
- volnix-0.1.0/tests/engines/feedback/test_sync.py +173 -0
- volnix-0.1.0/tests/engines/permission/__init__.py +0 -0
- volnix-0.1.0/tests/engines/permission/test_engine.py +292 -0
- volnix-0.1.0/tests/engines/permission/test_observer.py +126 -0
- volnix-0.1.0/tests/engines/permission/test_visibility.py +320 -0
- volnix-0.1.0/tests/engines/policy/__init__.py +0 -0
- volnix-0.1.0/tests/engines/policy/test_engine.py +459 -0
- volnix-0.1.0/tests/engines/policy/test_evaluator.py +165 -0
- volnix-0.1.0/tests/engines/reporter/__init__.py +0 -0
- volnix-0.1.0/tests/engines/reporter/conftest.py +180 -0
- volnix-0.1.0/tests/engines/reporter/test_boundaries.py +94 -0
- volnix-0.1.0/tests/engines/reporter/test_causal.py +89 -0
- volnix-0.1.0/tests/engines/reporter/test_challenges.py +97 -0
- volnix-0.1.0/tests/engines/reporter/test_diff.py +70 -0
- volnix-0.1.0/tests/engines/reporter/test_engine.py +96 -0
- volnix-0.1.0/tests/engines/reporter/test_gaps.py +98 -0
- volnix-0.1.0/tests/engines/reporter/test_governance_report.py +107 -0
- volnix-0.1.0/tests/engines/reporter/test_score_registry.py +69 -0
- volnix-0.1.0/tests/engines/reporter/test_scorecard.py +436 -0
- volnix-0.1.0/tests/engines/reporter/test_scorecard_boundaries.py +105 -0
- volnix-0.1.0/tests/engines/reporter/test_scorecard_scores_list.py +61 -0
- volnix-0.1.0/tests/engines/state/__init__.py +0 -0
- volnix-0.1.0/tests/engines/state/conftest.py +38 -0
- volnix-0.1.0/tests/engines/state/test_causal_graph.py +122 -0
- volnix-0.1.0/tests/engines/state/test_engine.py +404 -0
- volnix-0.1.0/tests/engines/state/test_event_log.py +150 -0
- volnix-0.1.0/tests/engines/state/test_integration.py +222 -0
- volnix-0.1.0/tests/engines/state/test_store.py +126 -0
- volnix-0.1.0/tests/engines/test_animator.py +36 -0
- volnix-0.1.0/tests/engines/test_budget.py +23 -0
- volnix-0.1.0/tests/engines/test_permission.py +19 -0
- volnix-0.1.0/tests/engines/test_policy.py +31 -0
- volnix-0.1.0/tests/engines/test_reporter.py +74 -0
- volnix-0.1.0/tests/engines/test_reporter_boundaries.py +76 -0
- volnix-0.1.0/tests/engines/test_reporter_challenges.py +82 -0
- volnix-0.1.0/tests/engines/test_responder.py +21 -0
- volnix-0.1.0/tests/engines/test_state.py +2 -0
- volnix-0.1.0/tests/engines/test_world_compiler.py +23 -0
- volnix-0.1.0/tests/engines/test_world_compiler_bootstrap.py +33 -0
- volnix-0.1.0/tests/engines/test_world_compiler_reality.py +27 -0
- volnix-0.1.0/tests/engines/world_compiler/__init__.py +0 -0
- volnix-0.1.0/tests/engines/world_compiler/conftest.py +95 -0
- volnix-0.1.0/tests/engines/world_compiler/test_compiler_validator.py +160 -0
- volnix-0.1.0/tests/engines/world_compiler/test_data_generator.py +168 -0
- volnix-0.1.0/tests/engines/world_compiler/test_engine.py +211 -0
- volnix-0.1.0/tests/engines/world_compiler/test_engine_generate.py +477 -0
- volnix-0.1.0/tests/engines/world_compiler/test_nl_parser.py +201 -0
- volnix-0.1.0/tests/engines/world_compiler/test_personality_generator.py +131 -0
- volnix-0.1.0/tests/engines/world_compiler/test_plan.py +157 -0
- volnix-0.1.0/tests/engines/world_compiler/test_plan_reviewer.py +163 -0
- volnix-0.1.0/tests/engines/world_compiler/test_policy_compiler.py +320 -0
- volnix-0.1.0/tests/engines/world_compiler/test_seed_processor.py +188 -0
- volnix-0.1.0/tests/engines/world_compiler/test_service_resolution.py +159 -0
- volnix-0.1.0/tests/engines/world_compiler/test_yaml_parser.py +251 -0
- volnix-0.1.0/tests/external_agent/__init__.py +0 -0
- volnix-0.1.0/tests/external_agent/conftest.py +149 -0
- volnix-0.1.0/tests/external_agent/test_cli_world_generation.py +141 -0
- volnix-0.1.0/tests/external_agent/test_http_transport.py +379 -0
- volnix-0.1.0/tests/external_agent/test_mcp_transport.py +218 -0
- volnix-0.1.0/tests/fixtures/__init__.py +0 -0
- volnix-0.1.0/tests/fixtures/agent_profiles/support_triage_terrarium.yaml +80 -0
- volnix-0.1.0/tests/fixtures/agents/governance_test_agents.yaml +35 -0
- volnix-0.1.0/tests/fixtures/agents/marketing_strategists.yaml +38 -0
- volnix-0.1.0/tests/fixtures/agents/stock_analysts.yaml +30 -0
- volnix-0.1.0/tests/fixtures/events/__init__.py +0 -0
- volnix-0.1.0/tests/fixtures/worlds/acme_compiler.yaml +26 -0
- volnix-0.1.0/tests/fixtures/worlds/acme_support.yaml +90 -0
- volnix-0.1.0/tests/fixtures/worlds/collaboration/campaign_brainstorm.yaml +64 -0
- volnix-0.1.0/tests/fixtures/worlds/collaboration/climate_research.yaml +65 -0
- volnix-0.1.0/tests/fixtures/worlds/collaboration/feature_decision.yaml +61 -0
- volnix-0.1.0/tests/fixtures/worlds/collaboration/market_prediction.yaml +62 -0
- volnix-0.1.0/tests/fixtures/worlds/collaboration/security_assessment.yaml +67 -0
- volnix-0.1.0/tests/fixtures/worlds/collaboration/support_triage.yaml +63 -0
- volnix-0.1.0/tests/fixtures/worlds/external/marketing_strategy.yaml +37 -0
- volnix-0.1.0/tests/fixtures/worlds/external/stock_analysis_crew.yaml +31 -0
- volnix-0.1.0/tests/fixtures/worlds/minimal_world.yaml +9 -0
- volnix-0.1.0/tests/fixtures/worlds/simple_world.yaml +56 -0
- volnix-0.1.0/tests/fixtures/worlds/support_triage_world.yaml +40 -0
- volnix-0.1.0/tests/gateway/__init__.py +0 -0
- volnix-0.1.0/tests/gateway/test_gateway.py +468 -0
- volnix-0.1.0/tests/helpers/__init__.py +1 -0
- volnix-0.1.0/tests/helpers/guardrails.py +10 -0
- volnix-0.1.0/tests/helpers/runtime.py +43 -0
- volnix-0.1.0/tests/integration/__init__.py +0 -0
- volnix-0.1.0/tests/integration/conftest.py +814 -0
- volnix-0.1.0/tests/integration/test_agency_full_loop.py +668 -0
- volnix-0.1.0/tests/integration/test_agency_integration.py +280 -0
- volnix-0.1.0/tests/integration/test_animator_modes.py +296 -0
- volnix-0.1.0/tests/integration/test_gateway_to_report.py +11 -0
- volnix-0.1.0/tests/integration/test_governance.py +433 -0
- volnix-0.1.0/tests/integration/test_governed_vs_ungoverned.py +192 -0
- volnix-0.1.0/tests/integration/test_pipeline_integration.py +12 -0
- volnix-0.1.0/tests/integration/test_report_e2e.py +185 -0
- volnix-0.1.0/tests/integration/test_simulation_loop.py +208 -0
- volnix-0.1.0/tests/integration/test_wire.py +570 -0
- volnix-0.1.0/tests/integration/test_world_run.py +146 -0
- volnix-0.1.0/tests/integration/test_world_simulation.py +586 -0
- volnix-0.1.0/tests/kernel/__init__.py +0 -0
- volnix-0.1.0/tests/kernel/test_architectural_validation.py +230 -0
- volnix-0.1.0/tests/kernel/test_categories.py +51 -0
- volnix-0.1.0/tests/kernel/test_context_hub.py +245 -0
- volnix-0.1.0/tests/kernel/test_openapi_provider.py +161 -0
- volnix-0.1.0/tests/kernel/test_primitives.py +50 -0
- volnix-0.1.0/tests/kernel/test_registry.py +118 -0
- volnix-0.1.0/tests/kernel/test_resolver.py +183 -0
- volnix-0.1.0/tests/kernel/test_surface.py +233 -0
- volnix-0.1.0/tests/ledger/__init__.py +0 -0
- volnix-0.1.0/tests/ledger/test_entries.py +284 -0
- volnix-0.1.0/tests/ledger/test_export.py +163 -0
- volnix-0.1.0/tests/ledger/test_integration.py +203 -0
- volnix-0.1.0/tests/ledger/test_ledger.py +261 -0
- volnix-0.1.0/tests/ledger/test_query.py +94 -0
- volnix-0.1.0/tests/live/__init__.py +12 -0
- volnix-0.1.0/tests/live/conftest.py +62 -0
- volnix-0.1.0/tests/live/test_agency_full_loop.py +340 -0
- volnix-0.1.0/tests/live/test_agency_live.py +311 -0
- volnix-0.1.0/tests/live/test_agent_integration_e2e.py +288 -0
- volnix-0.1.0/tests/live/test_animator_live.py +86 -0
- volnix-0.1.0/tests/live/test_browser_simulation.py +212 -0
- volnix-0.1.0/tests/live/test_collaboration_cli.py +203 -0
- volnix-0.1.0/tests/live/test_collaboration_live.py +440 -0
- volnix-0.1.0/tests/live/test_collaboration_scenarios.py +1502 -0
- volnix-0.1.0/tests/live/test_full_simulation.py +193 -0
- volnix-0.1.0/tests/live/test_g4a_feedback_pipeline.py +324 -0
- volnix-0.1.0/tests/live/test_multi_service_live.py +370 -0
- volnix-0.1.0/tests/live/test_nl_create_world.py +115 -0
- volnix-0.1.0/tests/live/test_social_simulation.py +436 -0
- volnix-0.1.0/tests/live/test_tier2_full_lifecycle.py +538 -0
- volnix-0.1.0/tests/live/test_tier2_live.py +191 -0
- volnix-0.1.0/tests/live/test_trading_simulation.py +434 -0
- volnix-0.1.0/tests/live/test_visibility_e2e.py +285 -0
- volnix-0.1.0/tests/live/test_yaml_blueprint.py +128 -0
- volnix-0.1.0/tests/llm/__init__.py +0 -0
- volnix-0.1.0/tests/llm/test_acp_client.py +574 -0
- volnix-0.1.0/tests/llm/test_anthropic_provider.py +86 -0
- volnix-0.1.0/tests/llm/test_cli_subprocess.py +241 -0
- volnix-0.1.0/tests/llm/test_conversation.py +504 -0
- volnix-0.1.0/tests/llm/test_google_provider.py +69 -0
- volnix-0.1.0/tests/llm/test_integration.py +121 -0
- volnix-0.1.0/tests/llm/test_mock.py +64 -0
- volnix-0.1.0/tests/llm/test_openai_compat.py +99 -0
- volnix-0.1.0/tests/llm/test_provider.py +47 -0
- volnix-0.1.0/tests/llm/test_registry.py +95 -0
- volnix-0.1.0/tests/llm/test_router.py +280 -0
- volnix-0.1.0/tests/llm/test_secrets.py +78 -0
- volnix-0.1.0/tests/llm/test_tracker.py +107 -0
- volnix-0.1.0/tests/middleware/__init__.py +0 -0
- volnix-0.1.0/tests/middleware/conftest.py +82 -0
- volnix-0.1.0/tests/middleware/test_auth.py +147 -0
- volnix-0.1.0/tests/middleware/test_prefix_router.py +55 -0
- volnix-0.1.0/tests/middleware/test_status_codes.py +164 -0
- volnix-0.1.0/tests/packs/__init__.py +0 -0
- volnix-0.1.0/tests/packs/test_browser_pack.py +885 -0
- volnix-0.1.0/tests/packs/test_browser_pack_integration.py +461 -0
- volnix-0.1.0/tests/packs/test_chat_pack.py +34 -0
- volnix-0.1.0/tests/packs/test_email_pack.py +293 -0
- volnix-0.1.0/tests/packs/test_g2_comprehensive.py +696 -0
- volnix-0.1.0/tests/packs/test_loader.py +67 -0
- volnix-0.1.0/tests/packs/test_pack_integration.py +294 -0
- volnix-0.1.0/tests/packs/test_payments_pack.py +20 -0
- volnix-0.1.0/tests/packs/test_profile_infer.py +461 -0
- volnix-0.1.0/tests/packs/test_profile_schema.py +650 -0
- volnix-0.1.0/tests/packs/test_registry.py +188 -0
- volnix-0.1.0/tests/packs/test_runtime.py +344 -0
- volnix-0.1.0/tests/packs/test_tickets_pack.py +54 -0
- volnix-0.1.0/tests/packs/test_tier2_runtime.py +660 -0
- volnix-0.1.0/tests/packs/verified/__init__.py +0 -0
- volnix-0.1.0/tests/packs/verified/test_calendar.py +701 -0
- volnix-0.1.0/tests/packs/verified/test_chat.py +1144 -0
- volnix-0.1.0/tests/packs/verified/test_email_gmail.py +366 -0
- volnix-0.1.0/tests/packs/verified/test_notion.py +1334 -0
- volnix-0.1.0/tests/packs/verified/test_payments.py +1226 -0
- volnix-0.1.0/tests/packs/verified/test_reddit.py +730 -0
- volnix-0.1.0/tests/packs/verified/test_repos.py +1118 -0
- volnix-0.1.0/tests/packs/verified/test_tickets.py +801 -0
- volnix-0.1.0/tests/packs/verified/test_trading.py +1303 -0
- volnix-0.1.0/tests/packs/verified/test_twitter.py +695 -0
- volnix-0.1.0/tests/persistence/__init__.py +0 -0
- volnix-0.1.0/tests/persistence/test_append_log.py +241 -0
- volnix-0.1.0/tests/persistence/test_config.py +46 -0
- volnix-0.1.0/tests/persistence/test_database.py +11 -0
- volnix-0.1.0/tests/persistence/test_manager.py +94 -0
- volnix-0.1.0/tests/persistence/test_migrations.py +174 -0
- volnix-0.1.0/tests/persistence/test_snapshot.py +121 -0
- volnix-0.1.0/tests/persistence/test_sqlite.py +214 -0
- volnix-0.1.0/tests/pipeline/__init__.py +0 -0
- volnix-0.1.0/tests/pipeline/test_builder.py +88 -0
- volnix-0.1.0/tests/pipeline/test_dag.py +300 -0
- volnix-0.1.0/tests/pipeline/test_integration.py +267 -0
- volnix-0.1.0/tests/pipeline/test_side_effects.py +210 -0
- volnix-0.1.0/tests/pipeline/test_step.py +68 -0
- volnix-0.1.0/tests/reality/__init__.py +0 -0
- volnix-0.1.0/tests/reality/test_dimensions.py +188 -0
- volnix-0.1.0/tests/reality/test_expander.py +214 -0
- volnix-0.1.0/tests/reality/test_labels.py +237 -0
- volnix-0.1.0/tests/reality/test_overlays.py +78 -0
- volnix-0.1.0/tests/reality/test_presets.py +146 -0
- volnix-0.1.0/tests/reality/test_seeds.py +52 -0
- volnix-0.1.0/tests/registry/__init__.py +0 -0
- volnix-0.1.0/tests/registry/conftest.py +49 -0
- volnix-0.1.0/tests/registry/test_composition.py +69 -0
- volnix-0.1.0/tests/registry/test_health.py +83 -0
- volnix-0.1.0/tests/registry/test_registry.py +253 -0
- volnix-0.1.0/tests/registry/test_wiring.py +120 -0
- volnix-0.1.0/tests/runs/__init__.py +0 -0
- volnix-0.1.0/tests/runs/test_artifact_serialization.py +184 -0
- volnix-0.1.0/tests/runs/test_artifacts.py +94 -0
- volnix-0.1.0/tests/runs/test_comparison.py +160 -0
- volnix-0.1.0/tests/runs/test_divergence_points.py +107 -0
- volnix-0.1.0/tests/runs/test_manager.py +152 -0
- volnix-0.1.0/tests/runs/test_manager_summary.py +73 -0
- volnix-0.1.0/tests/runs/test_replay.py +107 -0
- volnix-0.1.0/tests/runs/test_snapshot.py +70 -0
- volnix-0.1.0/tests/scheduling/__init__.py +1 -0
- volnix-0.1.0/tests/scheduling/test_scheduler.py +251 -0
- volnix-0.1.0/tests/sdk/__init__.py +0 -0
- volnix-0.1.0/tests/sdk/conftest.py +88 -0
- volnix-0.1.0/tests/sdk/test_attach_detach.py +90 -0
- volnix-0.1.0/tests/sdk/test_client.py +44 -0
- volnix-0.1.0/tests/sdk/test_config_export.py +99 -0
- volnix-0.1.0/tests/sdk/test_entry_points.py +43 -0
- volnix-0.1.0/tests/sdk/test_error_paths.py +83 -0
- volnix-0.1.0/tests/simulation/__init__.py +0 -0
- volnix-0.1.0/tests/simulation/test_event_queue.py +202 -0
- volnix-0.1.0/tests/simulation/test_runner.py +973 -0
- volnix-0.1.0/tests/simulation/test_world_context.py +158 -0
- volnix-0.1.0/tests/templates/__init__.py +0 -0
- volnix-0.1.0/tests/templates/test_base.py +7 -0
- volnix-0.1.0/tests/templates/test_builtin.py +10 -0
- volnix-0.1.0/tests/templates/test_composer.py +10 -0
- volnix-0.1.0/tests/templates/test_loader.py +13 -0
- volnix-0.1.0/tests/templates/test_registry.py +13 -0
- volnix-0.1.0/tests/test_audit_fixes.py +878 -0
- volnix-0.1.0/tests/test_collaborative_communication.py +1087 -0
- volnix-0.1.0/tests/test_collaborative_harness.py +292 -0
- volnix-0.1.0/tests/test_paths.py +262 -0
- volnix-0.1.0/tests/utils/__init__.py +0 -0
- volnix-0.1.0/tests/utils/test_collections.py +124 -0
- volnix-0.1.0/tests/validation/__init__.py +0 -0
- volnix-0.1.0/tests/validation/test_amounts.py +55 -0
- volnix-0.1.0/tests/validation/test_consistency.py +182 -0
- volnix-0.1.0/tests/validation/test_pipeline.py +270 -0
- volnix-0.1.0/tests/validation/test_schema.py +115 -0
- volnix-0.1.0/tests/validation/test_schema_contracts.py +54 -0
- volnix-0.1.0/tests/validation/test_state_machine.py +73 -0
- volnix-0.1.0/tests/validation/test_temporal.py +70 -0
- volnix-0.1.0/tests/webhook/__init__.py +0 -0
- volnix-0.1.0/tests/webhook/conftest.py +70 -0
- volnix-0.1.0/tests/webhook/test_delivery.py +120 -0
- volnix-0.1.0/tests/webhook/test_manager.py +167 -0
- volnix-0.1.0/tests/webhook/test_payloads.py +63 -0
- volnix-0.1.0/tests/webhook/test_registry.py +119 -0
- volnix-0.1.0/tests/worlds/__init__.py +0 -0
- volnix-0.1.0/tests/worlds/test_world_manager.py +154 -0
- volnix-0.1.0/uv.lock +2369 -0
- volnix-0.1.0/volnix/__init__.py +3 -0
- volnix-0.1.0/volnix/__main__.py +5 -0
- volnix-0.1.0/volnix/actors/__init__.py +38 -0
- volnix-0.1.0/volnix/actors/config.py +75 -0
- volnix-0.1.0/volnix/actors/definition.py +36 -0
- volnix-0.1.0/volnix/actors/generator.py +48 -0
- volnix-0.1.0/volnix/actors/internal_profile.py +142 -0
- volnix-0.1.0/volnix/actors/personality.py +60 -0
- volnix-0.1.0/volnix/actors/profile.py +116 -0
- volnix-0.1.0/volnix/actors/registry.py +187 -0
- volnix-0.1.0/volnix/actors/replay.py +81 -0
- volnix-0.1.0/volnix/actors/simple_generator.py +196 -0
- volnix-0.1.0/volnix/actors/slot_binding.py +80 -0
- volnix-0.1.0/volnix/actors/slot_manager.py +301 -0
- volnix-0.1.0/volnix/actors/state.py +157 -0
- volnix-0.1.0/volnix/actors/trait_extractor.py +153 -0
- volnix-0.1.0/volnix/adapters/__init__.py +12 -0
- volnix-0.1.0/volnix/adapters/_schema.py +76 -0
- volnix-0.1.0/volnix/adapters/autogen.py +80 -0
- volnix-0.1.0/volnix/adapters/crewai.py +164 -0
- volnix-0.1.0/volnix/adapters/langgraph.py +77 -0
- volnix-0.1.0/volnix/app.py +1614 -0
- volnix-0.1.0/volnix/blueprints/__init__.py +0 -0
- volnix-0.1.0/volnix/blueprints/community/.gitkeep +0 -0
- volnix-0.1.0/volnix/blueprints/official/agents_campaign_creatives.yaml +39 -0
- volnix-0.1.0/volnix/blueprints/official/agents_climate_researchers.yaml +47 -0
- volnix-0.1.0/volnix/blueprints/official/agents_dynamic_support.yaml +48 -0
- volnix-0.1.0/volnix/blueprints/official/agents_feature_team.yaml +38 -0
- volnix-0.1.0/volnix/blueprints/official/agents_market_analysts.yaml +37 -0
- volnix-0.1.0/volnix/blueprints/official/agents_product_team.yaml +41 -0
- volnix-0.1.0/volnix/blueprints/official/agents_sales_team.yaml +40 -0
- volnix-0.1.0/volnix/blueprints/official/agents_security_team.yaml +38 -0
- volnix-0.1.0/volnix/blueprints/official/agents_support_team.yaml +46 -0
- volnix-0.1.0/volnix/blueprints/official/campaign_brainstorm.yaml +24 -0
- volnix-0.1.0/volnix/blueprints/official/climate_research_station.yaml +40 -0
- volnix-0.1.0/volnix/blueprints/official/customer_support.yaml +58 -0
- volnix-0.1.0/volnix/blueprints/official/demo_ecommerce.yaml +46 -0
- volnix-0.1.0/volnix/blueprints/official/demo_support_escalation.yaml +47 -0
- volnix-0.1.0/volnix/blueprints/official/dynamic_support_center.yaml +81 -0
- volnix-0.1.0/volnix/blueprints/official/feature_prioritization.yaml +37 -0
- volnix-0.1.0/volnix/blueprints/official/governance_test.yaml +43 -0
- volnix-0.1.0/volnix/blueprints/official/hubspot_sales_pipeline.yaml +34 -0
- volnix-0.1.0/volnix/blueprints/official/incident_response.yaml +56 -0
- volnix-0.1.0/volnix/blueprints/official/market_prediction_analysis.yaml +43 -0
- volnix-0.1.0/volnix/blueprints/official/notion_project_tracker.yaml +27 -0
- volnix-0.1.0/volnix/blueprints/official/open_sandbox.yaml +33 -0
- volnix-0.1.0/volnix/blueprints/official/security_posture_assessment.yaml +47 -0
- volnix-0.1.0/volnix/blueprints/official/stock_analysis.yaml +45 -0
- volnix-0.1.0/volnix/blueprints/official/support_ticket_triage.yaml +87 -0
- volnix-0.1.0/volnix/bus/__init__.py +40 -0
- volnix-0.1.0/volnix/bus/bus.py +221 -0
- volnix-0.1.0/volnix/bus/config.py +27 -0
- volnix-0.1.0/volnix/bus/fanout.py +134 -0
- volnix-0.1.0/volnix/bus/middleware.py +172 -0
- volnix-0.1.0/volnix/bus/persistence.py +172 -0
- volnix-0.1.0/volnix/bus/replay.py +109 -0
- volnix-0.1.0/volnix/bus/types.py +65 -0
- volnix-0.1.0/volnix/cli.py +2470 -0
- volnix-0.1.0/volnix/cli_exports/__init__.py +1 -0
- volnix-0.1.0/volnix/cli_exports/attach.py +118 -0
- volnix-0.1.0/volnix/cli_exports/templates.py +195 -0
- volnix-0.1.0/volnix/cli_helpers.py +285 -0
- volnix-0.1.0/volnix/config/__init__.py +25 -0
- volnix-0.1.0/volnix/config/loader.py +213 -0
- volnix-0.1.0/volnix/config/registry.py +91 -0
- volnix-0.1.0/volnix/config/schema.py +121 -0
- volnix-0.1.0/volnix/config/tunable.py +124 -0
- volnix-0.1.0/volnix/config/validation.py +117 -0
- volnix-0.1.0/volnix/core/__init__.py +261 -0
- volnix-0.1.0/volnix/core/context.py +165 -0
- volnix-0.1.0/volnix/core/engine.py +227 -0
- volnix-0.1.0/volnix/core/envelope.py +41 -0
- volnix-0.1.0/volnix/core/errors.py +398 -0
- volnix-0.1.0/volnix/core/events.py +396 -0
- volnix-0.1.0/volnix/core/protocols.py +552 -0
- volnix-0.1.0/volnix/core/types.py +313 -0
- volnix-0.1.0/volnix/dashboard/__init__.py +10 -0
- volnix-0.1.0/volnix/dashboard/app.py +39 -0
- volnix-0.1.0/volnix/dashboard/routes/__init__.py +5 -0
- volnix-0.1.0/volnix/dashboard/routes/api.py +59 -0
- volnix-0.1.0/volnix/dashboard/routes/live.py +24 -0
- volnix-0.1.0/volnix/dashboard/routes/replay.py +57 -0
- volnix-0.1.0/volnix/dashboard/routes/reports.py +56 -0
- volnix-0.1.0/volnix/dashboard/static/style.css +59 -0
- volnix-0.1.0/volnix/dashboard/templates/base.html +22 -0
- volnix-0.1.0/volnix/dashboard/templates/live.html +13 -0
- volnix-0.1.0/volnix/dashboard/templates/replay.html +17 -0
- volnix-0.1.0/volnix/dashboard/templates/report.html +16 -0
- volnix-0.1.0/volnix/deliverable_presets/__init__.py +85 -0
- volnix-0.1.0/volnix/deliverable_presets/assessment.yaml +96 -0
- volnix-0.1.0/volnix/deliverable_presets/brainstorm.yaml +60 -0
- volnix-0.1.0/volnix/deliverable_presets/decision.yaml +71 -0
- volnix-0.1.0/volnix/deliverable_presets/loader.py +32 -0
- volnix-0.1.0/volnix/deliverable_presets/prediction.yaml +82 -0
- volnix-0.1.0/volnix/deliverable_presets/recommendation.yaml +64 -0
- volnix-0.1.0/volnix/deliverable_presets/synthesis.yaml +55 -0
- volnix-0.1.0/volnix/engines/__init__.py +4 -0
- volnix-0.1.0/volnix/engines/adapter/__init__.py +1 -0
- volnix-0.1.0/volnix/engines/adapter/config.py +13 -0
- volnix-0.1.0/volnix/engines/adapter/engine.py +145 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/__init__.py +1 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/_auth.py +59 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/_response.py +28 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/acp_server.py +41 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/anthropic_compat.py +169 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/base.py +53 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/gemini_compat.py +162 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/http_rest.py +1676 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/mcp_server.py +108 -0
- volnix-0.1.0/volnix/engines/adapter/protocols/openai_compat.py +181 -0
- volnix-0.1.0/volnix/engines/adapter/tool_manifest.py +53 -0
- volnix-0.1.0/volnix/engines/agency/__init__.py +7 -0
- volnix-0.1.0/volnix/engines/agency/config.py +70 -0
- volnix-0.1.0/volnix/engines/agency/engine.py +1646 -0
- volnix-0.1.0/volnix/engines/agency/prompt_builder.py +471 -0
- volnix-0.1.0/volnix/engines/animator/__init__.py +13 -0
- volnix-0.1.0/volnix/engines/animator/config.py +31 -0
- volnix-0.1.0/volnix/engines/animator/context.py +123 -0
- volnix-0.1.0/volnix/engines/animator/engine.py +433 -0
- volnix-0.1.0/volnix/engines/animator/generator.py +91 -0
- volnix-0.1.0/volnix/engines/budget/__init__.py +1 -0
- volnix-0.1.0/volnix/engines/budget/config.py +12 -0
- volnix-0.1.0/volnix/engines/budget/engine.py +316 -0
- volnix-0.1.0/volnix/engines/budget/tracker.py +271 -0
- volnix-0.1.0/volnix/engines/feedback/__init__.py +1 -0
- volnix-0.1.0/volnix/engines/feedback/annotations.py +113 -0
- volnix-0.1.0/volnix/engines/feedback/capture.py +206 -0
- volnix-0.1.0/volnix/engines/feedback/config.py +51 -0
- volnix-0.1.0/volnix/engines/feedback/drift.py +258 -0
- volnix-0.1.0/volnix/engines/feedback/engine.py +600 -0
- volnix-0.1.0/volnix/engines/feedback/models.py +106 -0
- volnix-0.1.0/volnix/engines/feedback/pack_compiler.py +314 -0
- volnix-0.1.0/volnix/engines/feedback/pack_verifier.py +362 -0
- volnix-0.1.0/volnix/engines/feedback/promotion.py +219 -0
- volnix-0.1.0/volnix/engines/feedback/proposer.py +147 -0
- volnix-0.1.0/volnix/engines/feedback/signals.py +338 -0
- volnix-0.1.0/volnix/engines/feedback/sync.py +133 -0
- volnix-0.1.0/volnix/engines/permission/__init__.py +1 -0
- volnix-0.1.0/volnix/engines/permission/authority.py +113 -0
- volnix-0.1.0/volnix/engines/permission/config.py +34 -0
- volnix-0.1.0/volnix/engines/permission/engine.py +386 -0
- volnix-0.1.0/volnix/engines/policy/__init__.py +1 -0
- volnix-0.1.0/volnix/engines/policy/config.py +12 -0
- volnix-0.1.0/volnix/engines/policy/enforcement.py +165 -0
- volnix-0.1.0/volnix/engines/policy/engine.py +278 -0
- volnix-0.1.0/volnix/engines/policy/evaluator.py +185 -0
- volnix-0.1.0/volnix/engines/policy/loader.py +44 -0
- volnix-0.1.0/volnix/engines/reporter/__init__.py +1 -0
- volnix-0.1.0/volnix/engines/reporter/agent_boundaries.py +293 -0
- volnix-0.1.0/volnix/engines/reporter/capability_gaps.py +110 -0
- volnix-0.1.0/volnix/engines/reporter/causal_trace.py +63 -0
- volnix-0.1.0/volnix/engines/reporter/config.py +12 -0
- volnix-0.1.0/volnix/engines/reporter/diff.py +142 -0
- volnix-0.1.0/volnix/engines/reporter/engine.py +295 -0
- volnix-0.1.0/volnix/engines/reporter/governance_report.py +114 -0
- volnix-0.1.0/volnix/engines/reporter/scorecard.py +251 -0
- volnix-0.1.0/volnix/engines/reporter/world_challenges.py +319 -0
- volnix-0.1.0/volnix/engines/responder/__init__.py +1 -0
- volnix-0.1.0/volnix/engines/responder/config.py +13 -0
- volnix-0.1.0/volnix/engines/responder/engine.py +303 -0
- volnix-0.1.0/volnix/engines/responder/tier1.py +40 -0
- volnix-0.1.0/volnix/engines/responder/tier2.py +488 -0
- volnix-0.1.0/volnix/engines/state/__init__.py +8 -0
- volnix-0.1.0/volnix/engines/state/causal_graph.py +87 -0
- volnix-0.1.0/volnix/engines/state/config.py +12 -0
- volnix-0.1.0/volnix/engines/state/engine.py +530 -0
- volnix-0.1.0/volnix/engines/state/event_log.py +116 -0
- volnix-0.1.0/volnix/engines/state/migrations.py +115 -0
- volnix-0.1.0/volnix/engines/state/store.py +118 -0
- volnix-0.1.0/volnix/engines/world_compiler/__init__.py +30 -0
- volnix-0.1.0/volnix/engines/world_compiler/config.py +17 -0
- volnix-0.1.0/volnix/engines/world_compiler/data_generator.py +308 -0
- volnix-0.1.0/volnix/engines/world_compiler/engine.py +1147 -0
- volnix-0.1.0/volnix/engines/world_compiler/generation_context.py +154 -0
- volnix-0.1.0/volnix/engines/world_compiler/nl_parser.py +126 -0
- volnix-0.1.0/volnix/engines/world_compiler/personality_generator.py +199 -0
- volnix-0.1.0/volnix/engines/world_compiler/plan.py +105 -0
- volnix-0.1.0/volnix/engines/world_compiler/plan_reviewer.py +171 -0
- volnix-0.1.0/volnix/engines/world_compiler/prompt_templates.py +625 -0
- volnix-0.1.0/volnix/engines/world_compiler/seed_processor.py +225 -0
- volnix-0.1.0/volnix/engines/world_compiler/service_bootstrapper.py +119 -0
- volnix-0.1.0/volnix/engines/world_compiler/service_resolution.py +314 -0
- volnix-0.1.0/volnix/engines/world_compiler/subscription_generator.py +359 -0
- volnix-0.1.0/volnix/engines/world_compiler/validator.py +547 -0
- volnix-0.1.0/volnix/engines/world_compiler/visibility_generator.py +161 -0
- volnix-0.1.0/volnix/engines/world_compiler/yaml_parser.py +164 -0
- volnix-0.1.0/volnix/gateway/__init__.py +17 -0
- volnix-0.1.0/volnix/gateway/config.py +29 -0
- volnix-0.1.0/volnix/gateway/gateway.py +268 -0
- volnix-0.1.0/volnix/kernel/__init__.py +22 -0
- volnix-0.1.0/volnix/kernel/categories.py +104 -0
- volnix-0.1.0/volnix/kernel/context_hub.py +213 -0
- volnix-0.1.0/volnix/kernel/data/categories.toml +51 -0
- volnix-0.1.0/volnix/kernel/data/services.toml +78 -0
- volnix-0.1.0/volnix/kernel/external_spec.py +30 -0
- volnix-0.1.0/volnix/kernel/mapping.py +122 -0
- volnix-0.1.0/volnix/kernel/openapi_provider.py +181 -0
- volnix-0.1.0/volnix/kernel/primitives.py +443 -0
- volnix-0.1.0/volnix/kernel/registry.py +89 -0
- volnix-0.1.0/volnix/kernel/resolver.py +135 -0
- volnix-0.1.0/volnix/kernel/surface.py +237 -0
- volnix-0.1.0/volnix/ledger/__init__.py +48 -0
- volnix-0.1.0/volnix/ledger/config.py +28 -0
- volnix-0.1.0/volnix/ledger/entries.py +476 -0
- volnix-0.1.0/volnix/ledger/export.py +103 -0
- volnix-0.1.0/volnix/ledger/ledger.py +143 -0
- volnix-0.1.0/volnix/ledger/query.py +181 -0
- volnix-0.1.0/volnix/llm/__init__.py +41 -0
- volnix-0.1.0/volnix/llm/config.py +81 -0
- volnix-0.1.0/volnix/llm/conversation.py +277 -0
- volnix-0.1.0/volnix/llm/provider.py +55 -0
- volnix-0.1.0/volnix/llm/providers/__init__.py +22 -0
- volnix-0.1.0/volnix/llm/providers/acp_client.py +939 -0
- volnix-0.1.0/volnix/llm/providers/anthropic.py +232 -0
- volnix-0.1.0/volnix/llm/providers/cli_subprocess.py +164 -0
- volnix-0.1.0/volnix/llm/providers/google.py +298 -0
- volnix-0.1.0/volnix/llm/providers/mock.py +105 -0
- volnix-0.1.0/volnix/llm/providers/openai_compat.py +294 -0
- volnix-0.1.0/volnix/llm/registry.py +180 -0
- volnix-0.1.0/volnix/llm/router.py +278 -0
- volnix-0.1.0/volnix/llm/secrets.py +110 -0
- volnix-0.1.0/volnix/llm/tracker.py +132 -0
- volnix-0.1.0/volnix/llm/types.py +136 -0
- volnix-0.1.0/volnix/middleware/__init__.py +6 -0
- volnix-0.1.0/volnix/middleware/auth.py +147 -0
- volnix-0.1.0/volnix/middleware/config.py +28 -0
- volnix-0.1.0/volnix/middleware/prefix_router.py +97 -0
- volnix-0.1.0/volnix/middleware/status_codes.py +146 -0
- volnix-0.1.0/volnix/packs/__init__.py +28 -0
- volnix-0.1.0/volnix/packs/base.py +185 -0
- volnix-0.1.0/volnix/packs/loader.py +126 -0
- volnix-0.1.0/volnix/packs/profile_infer.py +500 -0
- volnix-0.1.0/volnix/packs/profile_loader.py +142 -0
- volnix-0.1.0/volnix/packs/profile_registry.py +69 -0
- volnix-0.1.0/volnix/packs/profile_schema.py +114 -0
- volnix-0.1.0/volnix/packs/profile_surface.py +89 -0
- volnix-0.1.0/volnix/packs/profiles/email.profile.yaml +556 -0
- volnix-0.1.0/volnix/packs/profiles/gmail.profile.yaml +511 -0
- volnix-0.1.0/volnix/packs/profiles/jira.profile.yaml +299 -0
- volnix-0.1.0/volnix/packs/profiles/shopify.profile.yaml +524 -0
- volnix-0.1.0/volnix/packs/profiles/stripe.profile.yaml +658 -0
- volnix-0.1.0/volnix/packs/profiles/twilio.profile.yaml +424 -0
- volnix-0.1.0/volnix/packs/registry.py +163 -0
- volnix-0.1.0/volnix/packs/runtime.py +408 -0
- volnix-0.1.0/volnix/packs/verified/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/alpaca/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/alpaca/handlers.py +1176 -0
- volnix-0.1.0/volnix/packs/verified/alpaca/pack.py +151 -0
- volnix-0.1.0/volnix/packs/verified/alpaca/price_model.py +206 -0
- volnix-0.1.0/volnix/packs/verified/alpaca/schemas.py +881 -0
- volnix-0.1.0/volnix/packs/verified/alpaca/state_machines.py +42 -0
- volnix-0.1.0/volnix/packs/verified/browser/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/browser/handlers.py +877 -0
- volnix-0.1.0/volnix/packs/verified/browser/pack.py +93 -0
- volnix-0.1.0/volnix/packs/verified/browser/schemas.py +581 -0
- volnix-0.1.0/volnix/packs/verified/browser/state_machines.py +22 -0
- volnix-0.1.0/volnix/packs/verified/github/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/github/handlers.py +769 -0
- volnix-0.1.0/volnix/packs/verified/github/pack.py +111 -0
- volnix-0.1.0/volnix/packs/verified/github/schemas.py +716 -0
- volnix-0.1.0/volnix/packs/verified/github/state_machines.py +37 -0
- volnix-0.1.0/volnix/packs/verified/gmail/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/gmail/handlers.py +612 -0
- volnix-0.1.0/volnix/packs/verified/gmail/pack.py +123 -0
- volnix-0.1.0/volnix/packs/verified/gmail/schemas.py +436 -0
- volnix-0.1.0/volnix/packs/verified/gmail/state_machines.py +23 -0
- volnix-0.1.0/volnix/packs/verified/google_calendar/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/google_calendar/handlers.py +511 -0
- volnix-0.1.0/volnix/packs/verified/google_calendar/pack.py +88 -0
- volnix-0.1.0/volnix/packs/verified/google_calendar/schemas.py +459 -0
- volnix-0.1.0/volnix/packs/verified/google_calendar/state_machines.py +23 -0
- volnix-0.1.0/volnix/packs/verified/notion/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/notion/handlers.py +1054 -0
- volnix-0.1.0/volnix/packs/verified/notion/pack.py +105 -0
- volnix-0.1.0/volnix/packs/verified/notion/schemas.py +920 -0
- volnix-0.1.0/volnix/packs/verified/notion/state_machines.py +15 -0
- volnix-0.1.0/volnix/packs/verified/reddit/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/reddit/handlers.py +1163 -0
- volnix-0.1.0/volnix/packs/verified/reddit/pack.py +116 -0
- volnix-0.1.0/volnix/packs/verified/reddit/schemas.py +724 -0
- volnix-0.1.0/volnix/packs/verified/reddit/state_machines.py +38 -0
- volnix-0.1.0/volnix/packs/verified/slack/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/slack/handlers.py +819 -0
- volnix-0.1.0/volnix/packs/verified/slack/pack.py +108 -0
- volnix-0.1.0/volnix/packs/verified/slack/schemas.py +604 -0
- volnix-0.1.0/volnix/packs/verified/slack/state_machines.py +14 -0
- volnix-0.1.0/volnix/packs/verified/stripe/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/stripe/handlers.py +1029 -0
- volnix-0.1.0/volnix/packs/verified/stripe/pack.py +125 -0
- volnix-0.1.0/volnix/packs/verified/stripe/schemas.py +750 -0
- volnix-0.1.0/volnix/packs/verified/stripe/state_machines.py +81 -0
- volnix-0.1.0/volnix/packs/verified/twitter/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/twitter/handlers.py +1067 -0
- volnix-0.1.0/volnix/packs/verified/twitter/pack.py +107 -0
- volnix-0.1.0/volnix/packs/verified/twitter/schemas.py +545 -0
- volnix-0.1.0/volnix/packs/verified/twitter/state_machines.py +21 -0
- volnix-0.1.0/volnix/packs/verified/zendesk/__init__.py +5 -0
- volnix-0.1.0/volnix/packs/verified/zendesk/handlers.py +521 -0
- volnix-0.1.0/volnix/packs/verified/zendesk/pack.py +94 -0
- volnix-0.1.0/volnix/packs/verified/zendesk/schemas.py +534 -0
- volnix-0.1.0/volnix/packs/verified/zendesk/state_machines.py +17 -0
- volnix-0.1.0/volnix/paths.py +238 -0
- volnix-0.1.0/volnix/persistence/__init__.py +31 -0
- volnix-0.1.0/volnix/persistence/append_log.py +175 -0
- volnix-0.1.0/volnix/persistence/config.py +31 -0
- volnix-0.1.0/volnix/persistence/database.py +108 -0
- volnix-0.1.0/volnix/persistence/manager.py +112 -0
- volnix-0.1.0/volnix/persistence/migrations.py +153 -0
- volnix-0.1.0/volnix/persistence/snapshot.py +141 -0
- volnix-0.1.0/volnix/persistence/sqlite.py +202 -0
- volnix-0.1.0/volnix/pipeline/__init__.py +23 -0
- volnix-0.1.0/volnix/pipeline/builder.py +49 -0
- volnix-0.1.0/volnix/pipeline/config.py +34 -0
- volnix-0.1.0/volnix/pipeline/dag.py +179 -0
- volnix-0.1.0/volnix/pipeline/side_effects.py +157 -0
- volnix-0.1.0/volnix/pipeline/step.py +66 -0
- volnix-0.1.0/volnix/presets/hostile.yaml +16 -0
- volnix-0.1.0/volnix/presets/ideal.yaml +16 -0
- volnix-0.1.0/volnix/presets/messy.yaml +16 -0
- volnix-0.1.0/volnix/reality/__init__.py +62 -0
- volnix-0.1.0/volnix/reality/config.py +36 -0
- volnix-0.1.0/volnix/reality/dimensions.py +102 -0
- volnix-0.1.0/volnix/reality/expander.py +290 -0
- volnix-0.1.0/volnix/reality/labels.py +313 -0
- volnix-0.1.0/volnix/reality/overlays.py +171 -0
- volnix-0.1.0/volnix/reality/presets.py +151 -0
- volnix-0.1.0/volnix/reality/seeds.py +119 -0
- volnix-0.1.0/volnix/registry/__init__.py +24 -0
- volnix-0.1.0/volnix/registry/composition.py +46 -0
- volnix-0.1.0/volnix/registry/health.py +69 -0
- volnix-0.1.0/volnix/registry/registry.py +149 -0
- volnix-0.1.0/volnix/registry/wiring.py +88 -0
- volnix-0.1.0/volnix/runs/__init__.py +26 -0
- volnix-0.1.0/volnix/runs/artifacts.py +133 -0
- volnix-0.1.0/volnix/runs/comparison.py +488 -0
- volnix-0.1.0/volnix/runs/config.py +23 -0
- volnix-0.1.0/volnix/runs/manager.py +191 -0
- volnix-0.1.0/volnix/runs/replay.py +92 -0
- volnix-0.1.0/volnix/runs/snapshot.py +63 -0
- volnix-0.1.0/volnix/scheduling/__init__.py +19 -0
- volnix-0.1.0/volnix/scheduling/scheduler.py +278 -0
- volnix-0.1.0/volnix/sdk.py +228 -0
- volnix-0.1.0/volnix/simulation/__init__.py +13 -0
- volnix-0.1.0/volnix/simulation/config.py +64 -0
- volnix-0.1.0/volnix/simulation/event_queue.py +75 -0
- volnix-0.1.0/volnix/simulation/runner.py +577 -0
- volnix-0.1.0/volnix/simulation/world_context.py +129 -0
- volnix-0.1.0/volnix/templates/__init__.py +23 -0
- volnix-0.1.0/volnix/templates/base.py +68 -0
- volnix-0.1.0/volnix/templates/builtin/__init__.py +14 -0
- volnix-0.1.0/volnix/templates/builtin/customer_support.py +43 -0
- volnix-0.1.0/volnix/templates/builtin/incident_response.py +41 -0
- volnix-0.1.0/volnix/templates/builtin/open_sandbox.py +40 -0
- volnix-0.1.0/volnix/templates/composer.py +60 -0
- volnix-0.1.0/volnix/templates/config.py +17 -0
- volnix-0.1.0/volnix/templates/loader.py +56 -0
- volnix-0.1.0/volnix/templates/registry.py +54 -0
- volnix-0.1.0/volnix/utils/__init__.py +1 -0
- volnix-0.1.0/volnix/utils/collections.py +79 -0
- volnix-0.1.0/volnix/validation/__init__.py +31 -0
- volnix-0.1.0/volnix/validation/amounts.py +89 -0
- volnix-0.1.0/volnix/validation/config.py +20 -0
- volnix-0.1.0/volnix/validation/consistency.py +130 -0
- volnix-0.1.0/volnix/validation/pipeline.py +196 -0
- volnix-0.1.0/volnix/validation/schema.py +197 -0
- volnix-0.1.0/volnix/validation/schema_contracts.py +161 -0
- volnix-0.1.0/volnix/validation/state_machine.py +81 -0
- volnix-0.1.0/volnix/validation/step.py +76 -0
- volnix-0.1.0/volnix/validation/temporal.py +158 -0
- volnix-0.1.0/volnix/webhook/__init__.py +8 -0
- volnix-0.1.0/volnix/webhook/config.py +28 -0
- volnix-0.1.0/volnix/webhook/delivery.py +152 -0
- volnix-0.1.0/volnix/webhook/manager.py +152 -0
- volnix-0.1.0/volnix/webhook/payloads.py +170 -0
- volnix-0.1.0/volnix/webhook/registry.py +163 -0
- volnix-0.1.0/volnix/worlds/__init__.py +1 -0
- volnix-0.1.0/volnix/worlds/config.py +12 -0
- volnix-0.1.0/volnix/worlds/manager.py +193 -0
- volnix-0.1.0/volnix-dashboard/.env.example +3 -0
- volnix-0.1.0/volnix-dashboard/.gitignore +24 -0
- volnix-0.1.0/volnix-dashboard/.vite/deps/_metadata.json +8 -0
- volnix-0.1.0/volnix-dashboard/.vite/deps/package.json +3 -0
- volnix-0.1.0/volnix-dashboard/README.md +73 -0
- volnix-0.1.0/volnix-dashboard/dist/assets/html2canvas-BPBHsaeR.js +5 -0
- volnix-0.1.0/volnix-dashboard/dist/assets/index-BjpdnCjf.js +76 -0
- volnix-0.1.0/volnix-dashboard/dist/assets/index-DDrKQGv6.css +2 -0
- volnix-0.1.0/volnix-dashboard/dist/favicon.svg +1 -0
- volnix-0.1.0/volnix-dashboard/dist/icons.svg +24 -0
- volnix-0.1.0/volnix-dashboard/dist/index.html +17 -0
- volnix-0.1.0/volnix-dashboard/eslint.config.js +29 -0
- volnix-0.1.0/volnix-dashboard/index.html +16 -0
- volnix-0.1.0/volnix-dashboard/package.json +52 -0
- volnix-0.1.0/volnix-dashboard/public/favicon.svg +1 -0
- volnix-0.1.0/volnix-dashboard/public/icons.svg +24 -0
- volnix-0.1.0/volnix-dashboard/src/app.tsx +23 -0
- volnix-0.1.0/volnix-dashboard/src/assets/hero.png +0 -0
- volnix-0.1.0/volnix-dashboard/src/assets/vite.svg +1 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/actor-badge.tsx +24 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/causal-chain.tsx +43 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/enforcement-badge.tsx +24 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/entity-link.tsx +34 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/event-type-badge.tsx +14 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/fidelity-indicator.tsx +19 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/json-viewer.tsx +59 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/outcome-icon.tsx +24 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/run-status-badge.tsx +41 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/score-bar.tsx +25 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/score-grade.tsx +10 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/service-badge.tsx +20 -0
- volnix-0.1.0/volnix-dashboard/src/components/domain/timestamp-cell.tsx +17 -0
- volnix-0.1.0/volnix-dashboard/src/components/feedback/dialog.tsx +45 -0
- volnix-0.1.0/volnix-dashboard/src/components/feedback/empty-state.tsx +18 -0
- volnix-0.1.0/volnix-dashboard/src/components/feedback/error-boundary.tsx +34 -0
- volnix-0.1.0/volnix-dashboard/src/components/feedback/error-display.tsx +26 -0
- volnix-0.1.0/volnix-dashboard/src/components/feedback/page-loading.tsx +10 -0
- volnix-0.1.0/volnix-dashboard/src/components/feedback/query-guard.tsx +33 -0
- volnix-0.1.0/volnix-dashboard/src/components/feedback/section-loading.tsx +9 -0
- volnix-0.1.0/volnix-dashboard/src/components/feedback/skeletons.tsx +56 -0
- volnix-0.1.0/volnix-dashboard/src/components/layout/app-shell.tsx +17 -0
- volnix-0.1.0/volnix-dashboard/src/components/layout/page-header.tsx +17 -0
- volnix-0.1.0/volnix-dashboard/src/components/layout/panel-layout.tsx +21 -0
- volnix-0.1.0/volnix-dashboard/src/components/layout/sidebar.tsx +59 -0
- volnix-0.1.0/volnix-dashboard/src/components/layout/status-bar.tsx +26 -0
- volnix-0.1.0/volnix-dashboard/src/constants/defaults.ts +29 -0
- volnix-0.1.0/volnix-dashboard/src/constants/index.ts +7 -0
- volnix-0.1.0/volnix-dashboard/src/constants/query-keys.ts +31 -0
- volnix-0.1.0/volnix-dashboard/src/constants/routes.ts +26 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/index.ts +23 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/queries/use-actors.ts +12 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/queries/use-compare.ts +14 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/queries/use-deliverable.ts +11 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/queries/use-entities.ts +24 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/queries/use-events.ts +24 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/queries/use-gaps.ts +12 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/queries/use-runs.ts +28 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/queries/use-scorecard.ts +13 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/queries/use-worlds.ts +19 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/use-copy-to-clipboard.ts +29 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/use-debounce.ts +17 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/use-keyboard.ts +24 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/use-live-events.ts +137 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/use-url-filters.ts +13 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/use-url-state.ts +38 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/use-url-tabs.ts +6 -0
- volnix-0.1.0/volnix-dashboard/src/hooks/use-websocket.ts +23 -0
- volnix-0.1.0/volnix-dashboard/src/lib/causal-graph.ts +46 -0
- volnix-0.1.0/volnix-dashboard/src/lib/classifiers.ts +91 -0
- volnix-0.1.0/volnix-dashboard/src/lib/cn.ts +6 -0
- volnix-0.1.0/volnix-dashboard/src/lib/color-utils.ts +36 -0
- volnix-0.1.0/volnix-dashboard/src/lib/comparison.ts +42 -0
- volnix-0.1.0/volnix-dashboard/src/lib/export.ts +25 -0
- volnix-0.1.0/volnix-dashboard/src/lib/formatters.ts +75 -0
- volnix-0.1.0/volnix-dashboard/src/lib/index.ts +13 -0
- volnix-0.1.0/volnix-dashboard/src/lib/score-utils.ts +20 -0
- volnix-0.1.0/volnix-dashboard/src/lib/url-state.ts +36 -0
- volnix-0.1.0/volnix-dashboard/src/main.tsx +13 -0
- volnix-0.1.0/volnix-dashboard/src/pages/compare/divergence-timeline.tsx +71 -0
- volnix-0.1.0/volnix-dashboard/src/pages/compare/entity-diff.tsx +31 -0
- volnix-0.1.0/volnix-dashboard/src/pages/compare/export-button.tsx +26 -0
- volnix-0.1.0/volnix-dashboard/src/pages/compare/index.tsx +77 -0
- volnix-0.1.0/volnix-dashboard/src/pages/compare/metric-diff-table.tsx +49 -0
- volnix-0.1.0/volnix-dashboard/src/pages/live-console/activity-timeline.tsx +70 -0
- volnix-0.1.0/volnix-dashboard/src/pages/live-console/context-view.tsx +338 -0
- volnix-0.1.0/volnix-dashboard/src/pages/live-console/event-feed-item.tsx +64 -0
- volnix-0.1.0/volnix-dashboard/src/pages/live-console/event-feed.tsx +224 -0
- volnix-0.1.0/volnix-dashboard/src/pages/live-console/index.tsx +122 -0
- volnix-0.1.0/volnix-dashboard/src/pages/live-console/inspector.tsx +128 -0
- volnix-0.1.0/volnix-dashboard/src/pages/live-console/run-header-bar.tsx +112 -0
- volnix-0.1.0/volnix-dashboard/src/pages/live-console/transition-banner.tsx +26 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-list/compare-toolbar.tsx +38 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-list/index.tsx +171 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-list/run-filters.tsx +103 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-list/run-row.tsx +156 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-list/run-table.tsx +32 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-list/run-timeline.tsx +100 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-report/index.tsx +93 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-report/report-header.tsx +83 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-report/tabs/conditions-tab.tsx +165 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-report/tabs/deliverable-tab.tsx +157 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-report/tabs/entities-tab.tsx +251 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-report/tabs/events-tab.tsx +564 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-report/tabs/gaps-tab.tsx +131 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-report/tabs/overview-tab.tsx +349 -0
- volnix-0.1.0/volnix-dashboard/src/pages/run-report/tabs/scorecard-tab.tsx +143 -0
- volnix-0.1.0/volnix-dashboard/src/pages/worlds/index.tsx +129 -0
- volnix-0.1.0/volnix-dashboard/src/providers/app-providers.tsx +13 -0
- volnix-0.1.0/volnix-dashboard/src/providers/index.ts +3 -0
- volnix-0.1.0/volnix-dashboard/src/providers/query-provider.tsx +18 -0
- volnix-0.1.0/volnix-dashboard/src/providers/services-provider.tsx +27 -0
- volnix-0.1.0/volnix-dashboard/src/services/api-client.ts +118 -0
- volnix-0.1.0/volnix-dashboard/src/services/index.ts +2 -0
- volnix-0.1.0/volnix-dashboard/src/services/ws-manager.ts +126 -0
- volnix-0.1.0/volnix-dashboard/src/stores/compare-store.ts +27 -0
- volnix-0.1.0/volnix-dashboard/src/stores/index.ts +2 -0
- volnix-0.1.0/volnix-dashboard/src/stores/layout-store.ts +49 -0
- volnix-0.1.0/volnix-dashboard/src/styles/globals.css +141 -0
- volnix-0.1.0/volnix-dashboard/src/types/api.ts +113 -0
- volnix-0.1.0/volnix-dashboard/src/types/domain.ts +272 -0
- volnix-0.1.0/volnix-dashboard/src/types/index.ts +8 -0
- volnix-0.1.0/volnix-dashboard/src/types/ui.ts +16 -0
- volnix-0.1.0/volnix-dashboard/src/types/ws.ts +46 -0
- volnix-0.1.0/volnix-dashboard/tests/components/dialog.test.tsx +63 -0
- volnix-0.1.0/volnix-dashboard/tests/components/domain/entity-link.test.tsx +56 -0
- volnix-0.1.0/volnix-dashboard/tests/components/domain/outcome-icon.test.tsx +26 -0
- volnix-0.1.0/volnix-dashboard/tests/components/domain/run-status-badge.test.tsx +33 -0
- volnix-0.1.0/volnix-dashboard/tests/components/domain/score-bar.test.tsx +28 -0
- volnix-0.1.0/volnix-dashboard/tests/components/domain/timestamp-cell.test.tsx +28 -0
- volnix-0.1.0/volnix-dashboard/tests/components/feedback/error-boundary.test.tsx +46 -0
- volnix-0.1.0/volnix-dashboard/tests/components/feedback/query-guard.test.tsx +84 -0
- volnix-0.1.0/volnix-dashboard/tests/components/panel-layout.test.tsx +31 -0
- volnix-0.1.0/volnix-dashboard/tests/components/score-bar.test.tsx +27 -0
- volnix-0.1.0/volnix-dashboard/tests/components/skeletons.test.tsx +32 -0
- volnix-0.1.0/volnix-dashboard/tests/helpers/mock-websocket.ts +33 -0
- volnix-0.1.0/volnix-dashboard/tests/hooks/queries/use-events.test.tsx +52 -0
- volnix-0.1.0/volnix-dashboard/tests/hooks/queries/use-runs.test.tsx +57 -0
- volnix-0.1.0/volnix-dashboard/tests/hooks/queries/use-scorecard.test.tsx +41 -0
- volnix-0.1.0/volnix-dashboard/tests/hooks/use-live-events.test.tsx +112 -0
- volnix-0.1.0/volnix-dashboard/tests/hooks/use-url-state.test.tsx +53 -0
- volnix-0.1.0/volnix-dashboard/tests/hooks/use-websocket.test.ts +49 -0
- volnix-0.1.0/volnix-dashboard/tests/lib/causal-graph.test.ts +69 -0
- volnix-0.1.0/volnix-dashboard/tests/lib/classifiers.test.ts +56 -0
- volnix-0.1.0/volnix-dashboard/tests/lib/color-utils.test.ts +33 -0
- volnix-0.1.0/volnix-dashboard/tests/lib/comparison.test.ts +47 -0
- volnix-0.1.0/volnix-dashboard/tests/lib/formatters.test.ts +62 -0
- volnix-0.1.0/volnix-dashboard/tests/lib/score-utils.test.ts +34 -0
- volnix-0.1.0/volnix-dashboard/tests/lib/url-state.test.ts +38 -0
- volnix-0.1.0/volnix-dashboard/tests/mocks/handlers.ts +72 -0
- volnix-0.1.0/volnix-dashboard/tests/mocks/server.ts +4 -0
- volnix-0.1.0/volnix-dashboard/tests/mocks/ws-mock.ts +22 -0
- volnix-0.1.0/volnix-dashboard/tests/pages/compare.test.tsx +115 -0
- volnix-0.1.0/volnix-dashboard/tests/pages/divergence-timeline.test.tsx +67 -0
- volnix-0.1.0/volnix-dashboard/tests/pages/live-console.test.tsx +348 -0
- volnix-0.1.0/volnix-dashboard/tests/pages/run-list.test.tsx +174 -0
- volnix-0.1.0/volnix-dashboard/tests/pages/run-report.test.tsx +369 -0
- volnix-0.1.0/volnix-dashboard/tests/services/api-client.test.ts +112 -0
- volnix-0.1.0/volnix-dashboard/tests/services/ws-manager.test.ts +156 -0
- volnix-0.1.0/volnix-dashboard/tests/setup.ts +7 -0
- volnix-0.1.0/volnix-dashboard/tests/stores/compare-store.test.ts +36 -0
- volnix-0.1.0/volnix-dashboard/tests/stores/layout-store.test.ts +37 -0
- volnix-0.1.0/volnix-dashboard/tsconfig.app.json +34 -0
- volnix-0.1.0/volnix-dashboard/tsconfig.json +7 -0
- volnix-0.1.0/volnix-dashboard/tsconfig.node.json +26 -0
- volnix-0.1.0/volnix-dashboard/vite.config.ts +26 -0
- volnix-0.1.0/volnix-dashboard/vitest.config.ts +22 -0
- volnix-0.1.0/volnix.toml +367 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Volnix Environment Configuration
|
|
2
|
+
# Copy to .env and fill in your values:
|
|
3
|
+
# cp .env.example .env
|
|
4
|
+
#
|
|
5
|
+
# The config system resolves api_key_ref values from these env vars.
|
|
6
|
+
# Only set the providers you plan to use.
|
|
7
|
+
|
|
8
|
+
# ── LLM API Keys ──────────────────────────────────────────────────
|
|
9
|
+
# Direct API access — Volnix calls the provider's API with your key.
|
|
10
|
+
|
|
11
|
+
ANTHROPIC_API_KEY= # https://console.anthropic.com/
|
|
12
|
+
OPENAI_API_KEY= # https://platform.openai.com/api-keys
|
|
13
|
+
GOOGLE_API_KEY= # https://aistudio.google.com/apikey
|
|
14
|
+
|
|
15
|
+
# ── ACP Agent Servers ─────────────────────────────────────────────
|
|
16
|
+
# For connecting to locally-installed CLIs via Agent Client Protocol.
|
|
17
|
+
# Start the ACP server first, then set the URL here.
|
|
18
|
+
#
|
|
19
|
+
# Claude Code: npx @zed-industries/claude-agent-acp
|
|
20
|
+
# Codex: npx @zed-industries/codex-acp
|
|
21
|
+
#
|
|
22
|
+
# These use the CLI's own credentials — no API key needed from Volnix.
|
|
23
|
+
|
|
24
|
+
ACP_CLAUDE_URL= # e.g., http://localhost:3000
|
|
25
|
+
ACP_CODEX_URL= # e.g., http://localhost:3001
|
|
26
|
+
|
|
27
|
+
# ── Testing ───────────────────────────────────────────────────────
|
|
28
|
+
# Enable real API tests (costs money, adds latency — off by default)
|
|
29
|
+
|
|
30
|
+
VOLNIX_RUN_REAL_API_TESTS= # Set to "1" to enable real API tests
|
|
31
|
+
ACP_SERVER_URL= # URL of a running ACP server for integration tests
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: Bug Report
|
|
2
|
+
description: Report a bug in Volnix
|
|
3
|
+
labels: ["bug"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Thanks for reporting a bug. Please fill out the sections below so we can reproduce and fix it.
|
|
9
|
+
|
|
10
|
+
- type: textarea
|
|
11
|
+
id: description
|
|
12
|
+
attributes:
|
|
13
|
+
label: Description
|
|
14
|
+
description: What happened? What did you expect to happen?
|
|
15
|
+
placeholder: A clear description of the bug.
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
|
|
19
|
+
- type: textarea
|
|
20
|
+
id: reproduction
|
|
21
|
+
attributes:
|
|
22
|
+
label: Steps to Reproduce
|
|
23
|
+
description: How can we reproduce this?
|
|
24
|
+
placeholder: |
|
|
25
|
+
1. Run `volnix serve customer_support --port 8080`
|
|
26
|
+
2. Connect an agent
|
|
27
|
+
3. Call `email_send` with ...
|
|
28
|
+
4. See error
|
|
29
|
+
validations:
|
|
30
|
+
required: true
|
|
31
|
+
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: expected
|
|
34
|
+
attributes:
|
|
35
|
+
label: Expected Behavior
|
|
36
|
+
description: What should have happened instead?
|
|
37
|
+
validations:
|
|
38
|
+
required: true
|
|
39
|
+
|
|
40
|
+
- type: textarea
|
|
41
|
+
id: logs
|
|
42
|
+
attributes:
|
|
43
|
+
label: Logs / Error Output
|
|
44
|
+
description: Paste any relevant logs or error messages.
|
|
45
|
+
render: shell
|
|
46
|
+
|
|
47
|
+
- type: input
|
|
48
|
+
id: version
|
|
49
|
+
attributes:
|
|
50
|
+
label: Volnix Version
|
|
51
|
+
description: Output of `volnix --version`
|
|
52
|
+
placeholder: "0.1.0"
|
|
53
|
+
|
|
54
|
+
- type: input
|
|
55
|
+
id: python
|
|
56
|
+
attributes:
|
|
57
|
+
label: Python Version
|
|
58
|
+
placeholder: "3.12.1"
|
|
59
|
+
|
|
60
|
+
- type: input
|
|
61
|
+
id: os
|
|
62
|
+
attributes:
|
|
63
|
+
label: Operating System
|
|
64
|
+
placeholder: "macOS 15.2 / Ubuntu 24.04 / Windows 11"
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Feature Request
|
|
2
|
+
description: Propose a new feature or improvement
|
|
3
|
+
labels: ["enhancement"]
|
|
4
|
+
body:
|
|
5
|
+
- type: markdown
|
|
6
|
+
attributes:
|
|
7
|
+
value: |
|
|
8
|
+
Thanks for suggesting an improvement. Please describe the problem you're trying to solve and your proposed solution.
|
|
9
|
+
|
|
10
|
+
- type: textarea
|
|
11
|
+
id: problem
|
|
12
|
+
attributes:
|
|
13
|
+
label: Problem
|
|
14
|
+
description: What problem are you trying to solve? What's missing or frustrating?
|
|
15
|
+
placeholder: When I try to ..., I can't ... because ...
|
|
16
|
+
validations:
|
|
17
|
+
required: true
|
|
18
|
+
|
|
19
|
+
- type: textarea
|
|
20
|
+
id: solution
|
|
21
|
+
attributes:
|
|
22
|
+
label: Proposed Solution
|
|
23
|
+
description: How would you like this to work?
|
|
24
|
+
placeholder: It would be great if Volnix could ...
|
|
25
|
+
validations:
|
|
26
|
+
required: true
|
|
27
|
+
|
|
28
|
+
- type: textarea
|
|
29
|
+
id: alternatives
|
|
30
|
+
attributes:
|
|
31
|
+
label: Alternatives Considered
|
|
32
|
+
description: Have you considered any workarounds or alternative approaches?
|
|
33
|
+
|
|
34
|
+
- type: dropdown
|
|
35
|
+
id: area
|
|
36
|
+
attributes:
|
|
37
|
+
label: Area
|
|
38
|
+
description: Which part of Volnix does this relate to?
|
|
39
|
+
options:
|
|
40
|
+
- CLI
|
|
41
|
+
- World Compiler
|
|
42
|
+
- Governance Pipeline
|
|
43
|
+
- Service Packs
|
|
44
|
+
- Agent Integration (MCP / REST / SDK)
|
|
45
|
+
- Internal Simulation (Agency Engine)
|
|
46
|
+
- Dashboard
|
|
47
|
+
- Configuration
|
|
48
|
+
- Documentation
|
|
49
|
+
- Other
|
|
50
|
+
|
|
51
|
+
- type: checkboxes
|
|
52
|
+
id: contribution
|
|
53
|
+
attributes:
|
|
54
|
+
label: Contribution
|
|
55
|
+
options:
|
|
56
|
+
- label: I'm willing to submit a pull request for this feature
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## What
|
|
2
|
+
|
|
3
|
+
Brief description of what this PR does.
|
|
4
|
+
|
|
5
|
+
## Why
|
|
6
|
+
|
|
7
|
+
What problem does it solve or what feature does it add?
|
|
8
|
+
|
|
9
|
+
## How
|
|
10
|
+
|
|
11
|
+
Key implementation details or design decisions worth noting.
|
|
12
|
+
|
|
13
|
+
## Checklist
|
|
14
|
+
|
|
15
|
+
- [ ] Tests added or updated
|
|
16
|
+
- [ ] `uv run pytest` passes
|
|
17
|
+
- [ ] `uv run ruff check volnix/ tests/` passes
|
|
18
|
+
- [ ] `uv run ruff format --check volnix/ tests/` passes
|
|
19
|
+
- [ ] `uv run mypy volnix/` passes
|
|
20
|
+
- [ ] Documentation updated (if user-facing change)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
name: Tests
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Install uv
|
|
17
|
+
uses: astral-sh/setup-uv@v4
|
|
18
|
+
with:
|
|
19
|
+
version: "latest"
|
|
20
|
+
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
uses: actions/setup-python@v5
|
|
23
|
+
with:
|
|
24
|
+
python-version: "3.12"
|
|
25
|
+
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: uv sync --all-extras
|
|
28
|
+
|
|
29
|
+
- name: Run tests
|
|
30
|
+
run: uv run pytest --cov=volnix --cov-report=term-missing --cov-fail-under=75 -x -q
|
|
31
|
+
env:
|
|
32
|
+
VOLNIX_RUN_REAL_API_TESTS: "0"
|
|
33
|
+
|
|
34
|
+
lint:
|
|
35
|
+
name: Lint & Format
|
|
36
|
+
runs-on: ubuntu-latest
|
|
37
|
+
steps:
|
|
38
|
+
- uses: actions/checkout@v4
|
|
39
|
+
|
|
40
|
+
- name: Install uv
|
|
41
|
+
uses: astral-sh/setup-uv@v4
|
|
42
|
+
with:
|
|
43
|
+
version: "latest"
|
|
44
|
+
|
|
45
|
+
- name: Set up Python
|
|
46
|
+
uses: actions/setup-python@v5
|
|
47
|
+
with:
|
|
48
|
+
python-version: "3.12"
|
|
49
|
+
|
|
50
|
+
- name: Install dependencies
|
|
51
|
+
run: uv sync --all-extras
|
|
52
|
+
|
|
53
|
+
- name: Ruff check
|
|
54
|
+
run: uv run ruff check volnix/ tests/
|
|
55
|
+
|
|
56
|
+
- name: Ruff format check
|
|
57
|
+
run: uv run ruff format --check volnix/ tests/
|
|
58
|
+
|
|
59
|
+
# TODO: Re-enable once mypy strict errors are resolved
|
|
60
|
+
# typecheck:
|
|
61
|
+
# name: Type Check
|
|
62
|
+
# runs-on: ubuntu-latest
|
|
63
|
+
# steps:
|
|
64
|
+
# - uses: actions/checkout@v4
|
|
65
|
+
# - name: Install uv
|
|
66
|
+
# uses: astral-sh/setup-uv@v4
|
|
67
|
+
# with:
|
|
68
|
+
# version: "latest"
|
|
69
|
+
# - name: Set up Python
|
|
70
|
+
# uses: actions/setup-python@v5
|
|
71
|
+
# with:
|
|
72
|
+
# python-version: "3.12"
|
|
73
|
+
# - name: Install dependencies
|
|
74
|
+
# run: uv sync --all-extras
|
|
75
|
+
# - name: Mypy
|
|
76
|
+
# run: uv run mypy volnix/
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*" # Only triggers on version tags like v0.1.0, v1.2.3
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
publish:
|
|
10
|
+
name: Build & Publish
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
permissions:
|
|
13
|
+
id-token: write # Required for trusted publishing (no API token needed)
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Install uv
|
|
19
|
+
uses: astral-sh/setup-uv@v4
|
|
20
|
+
with:
|
|
21
|
+
version: "latest"
|
|
22
|
+
|
|
23
|
+
- name: Set up Python
|
|
24
|
+
uses: actions/setup-python@v5
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.12"
|
|
27
|
+
|
|
28
|
+
- name: Install dependencies
|
|
29
|
+
run: uv sync --all-extras
|
|
30
|
+
|
|
31
|
+
- name: Run tests
|
|
32
|
+
run: uv run pytest --cov=volnix --cov-fail-under=75 -x -q
|
|
33
|
+
env:
|
|
34
|
+
VOLNIX_RUN_REAL_API_TESTS: "0"
|
|
35
|
+
|
|
36
|
+
- name: Lint
|
|
37
|
+
run: uv run ruff check volnix/ tests/
|
|
38
|
+
|
|
39
|
+
# TODO: Re-enable once mypy strict errors are resolved
|
|
40
|
+
# - name: Type check
|
|
41
|
+
# run: uv run mypy volnix/
|
|
42
|
+
|
|
43
|
+
- name: Build package
|
|
44
|
+
run: uv build
|
|
45
|
+
|
|
46
|
+
- name: Publish to PyPI
|
|
47
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
volnix-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# ──────────────────────────────────────────────
|
|
2
|
+
# Volnix .gitignore
|
|
3
|
+
# ──────────────────────────────────────────────
|
|
4
|
+
|
|
5
|
+
# Volnix local config & runtime data
|
|
6
|
+
volnix.local.toml
|
|
7
|
+
volnix.development.toml.bak
|
|
8
|
+
terrarium.development.toml.bak
|
|
9
|
+
data/
|
|
10
|
+
!volnix/kernel/data/
|
|
11
|
+
!volnix/kernel/data/
|
|
12
|
+
dev_data/
|
|
13
|
+
volnix_data/
|
|
14
|
+
terrarium_data/
|
|
15
|
+
logs/
|
|
16
|
+
reports/
|
|
17
|
+
snapshots/
|
|
18
|
+
|
|
19
|
+
# Old pre-rename directories (should not be tracked)
|
|
20
|
+
terrarium-dashboard/
|
|
21
|
+
=6.0
|
|
22
|
+
|
|
23
|
+
# Internal docs (specs, plans — not for public release)
|
|
24
|
+
internal_docs/
|
|
25
|
+
|
|
26
|
+
# Internal development tracking
|
|
27
|
+
IMPLEMENTATION_STATUS.md
|
|
28
|
+
MASTER_ISSUES.md
|
|
29
|
+
OPEN_QUESTIONS.md
|
|
30
|
+
|
|
31
|
+
# Python
|
|
32
|
+
__pycache__/
|
|
33
|
+
*.py[cod]
|
|
34
|
+
*$py.class
|
|
35
|
+
*.so
|
|
36
|
+
|
|
37
|
+
# Virtual environments
|
|
38
|
+
.venv/
|
|
39
|
+
venv/
|
|
40
|
+
ENV/
|
|
41
|
+
env/
|
|
42
|
+
|
|
43
|
+
# Distribution / packaging
|
|
44
|
+
build/
|
|
45
|
+
dist/
|
|
46
|
+
!volnix-dashboard/dist/
|
|
47
|
+
*.egg-info/
|
|
48
|
+
*.egg
|
|
49
|
+
sdist/
|
|
50
|
+
wheels/
|
|
51
|
+
|
|
52
|
+
# Testing
|
|
53
|
+
.pytest_cache/
|
|
54
|
+
htmlcov/
|
|
55
|
+
.coverage
|
|
56
|
+
.coverage.*
|
|
57
|
+
coverage.xml
|
|
58
|
+
*.cover
|
|
59
|
+
|
|
60
|
+
# Type checking
|
|
61
|
+
.mypy_cache/
|
|
62
|
+
.dmypy.json
|
|
63
|
+
dmypy.json
|
|
64
|
+
|
|
65
|
+
# Linting
|
|
66
|
+
.ruff_cache/
|
|
67
|
+
|
|
68
|
+
# IDE
|
|
69
|
+
.vscode/
|
|
70
|
+
.idea/
|
|
71
|
+
*.swp
|
|
72
|
+
*.swo
|
|
73
|
+
*~
|
|
74
|
+
.project
|
|
75
|
+
.settings/
|
|
76
|
+
|
|
77
|
+
# Node (npx cache for @aisuite/chub)
|
|
78
|
+
node_modules/
|
|
79
|
+
package-lock.json
|
|
80
|
+
|
|
81
|
+
# OS
|
|
82
|
+
.DS_Store
|
|
83
|
+
Thumbs.db
|
|
84
|
+
|
|
85
|
+
# Jupyter
|
|
86
|
+
.ipynb_checkpoints/
|
|
87
|
+
|
|
88
|
+
# Environment variables
|
|
89
|
+
.env
|
|
90
|
+
.env.*
|
|
91
|
+
!.env.example
|
volnix-0.1.0/AGENTS.md
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Codex (Codex.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## What is Volnix
|
|
6
|
+
|
|
7
|
+
Volnix is a **world engine for AI agents**. It creates stateful, causal, observable realities where agents exist as participants — not as isolated prompt loops calling tools, but as actors inside a world that has places, institutions, other agents, budgets, policies, communication systems, and real consequences.
|
|
8
|
+
|
|
9
|
+
Users describe a world in natural language or YAML. Volnix compiles it into a deep, reproducible simulation. Agents interact with the world through standard protocols (MCP, ACP, OpenAI function calling, Anthropic tool use, raw HTTP). Everything that happens is recorded, scored, and diffable.
|
|
10
|
+
|
|
11
|
+
## Spec Documents
|
|
12
|
+
|
|
13
|
+
For deep understanding of the system, read these internal docs in order:
|
|
14
|
+
|
|
15
|
+
- `internal_docs/volnix-full-spec.md` — Complete specification: all 10 engines, the runtime pipeline, fidelity tiers, validation framework, governed vs. ungoverned, multi-agent, world packs, CLI, and roadmap.
|
|
16
|
+
- `internal_docs/volnix-world-definition-and-compiler.md` — World definition YAML schema, reality dimensions (labels + per-attribute numbers), behavior modes, fidelity tiers, compiler settings, blueprints, reproducibility model, and the five user-facing concepts.
|
|
17
|
+
- `internal_docs/volnix-architecture.md` — The two-half architecture (deterministic engine vs. generative layer), three generation phases, fidelity tiers, world conditions, the self-improving loop, and the end-to-end flow diagram.
|
|
18
|
+
- `DESIGN_PRINCIPLES.md` — Architectural principles, design rules (DOs/DON'Ts), patterns (event bus, ledger, pipeline, gateway, composition root), async flow, and enforcement mechanisms.
|
|
19
|
+
|
|
20
|
+
## Commands
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Install (uses uv with hatchling build backend)
|
|
24
|
+
uv sync --all-extras
|
|
25
|
+
|
|
26
|
+
# Run all tests
|
|
27
|
+
uv run pytest
|
|
28
|
+
|
|
29
|
+
# Run a single test file
|
|
30
|
+
uv run pytest tests/path/to/test_file.py
|
|
31
|
+
|
|
32
|
+
# Run a single test
|
|
33
|
+
uv run pytest tests/path/to/test_file.py::test_function_name -v
|
|
34
|
+
|
|
35
|
+
# Run tests with coverage
|
|
36
|
+
uv run pytest --cov=volnix --cov-report=term-missing
|
|
37
|
+
|
|
38
|
+
# Lint
|
|
39
|
+
uv run ruff check volnix/ tests/
|
|
40
|
+
uv run ruff format --check volnix/ tests/
|
|
41
|
+
|
|
42
|
+
# Type check
|
|
43
|
+
uv run mypy volnix/
|
|
44
|
+
|
|
45
|
+
# CLI entry point (typer-based, entry point: volnix/cli.py)
|
|
46
|
+
uv run volnix --help
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Architecture
|
|
50
|
+
|
|
51
|
+
### The Two Halves
|
|
52
|
+
|
|
53
|
+
**World Law (Deterministic Engine):** Owns state, events, causal graph, permissions, policy enforcement, budget accounting, time, visibility, mutation validation, replay/fork/diff, governance scoring. The engine never guesses, never generates text, never decides what a service "would probably do." It enforces structure.
|
|
54
|
+
|
|
55
|
+
**World Content (Generative Layer):** Creates realistic data, service behavior, actor responses, scenario complications. But it operates inside constraints set by the engine. The generative layer proposes; the engine disposes. A generated response that violates state consistency is rejected. A generated mutation that exceeds budget is denied.
|
|
56
|
+
|
|
57
|
+
### Two-Phase Model
|
|
58
|
+
|
|
59
|
+
- **Phase A (World Compilation):** The compiler transforms user intent into a runnable world. LLM generates all world data — entities, actors, service state — seeded for reproducibility and shaped by reality dimensions. Dimensions determine what IS in the world at compile time. The compiler executes a 7-step pipeline: Parse → Classify → Resolve → Generate → Validate → Inject seeds → Snapshot.
|
|
60
|
+
- **Phase B (Runtime):** The 7-step governance pipeline processes every agent action. Services return data as it exists in state. No LLM decides runtime reality — it was baked in during compilation.
|
|
61
|
+
|
|
62
|
+
### The 10 Engines
|
|
63
|
+
|
|
64
|
+
Every engine inherits from `BaseEngine` (`core/engine.py`), which provides lifecycle hooks (`_on_initialize`, `_on_start`, `_on_stop`) and event bus integration. Engines override `_handle_event` for their core logic.
|
|
65
|
+
|
|
66
|
+
| Engine | Package | Responsibility |
|
|
67
|
+
|--------|---------|---------------|
|
|
68
|
+
| **World Compiler** | `engines/world_compiler/` | Transforms NL/YAML descriptions into runnable worlds. Schema resolution, data generation, plan review. |
|
|
69
|
+
| **State Engine** | `engines/state/` | Single source of truth. Entity storage, event log, causal graph, snapshot/fork/diff. All state mutations go through its commit interface. |
|
|
70
|
+
| **Policy Engine** | `engines/policy/` | Evaluates governance rules. YAML condition language. Enforcement modes: hold, block, escalate, log. Precedence: block > hold > escalate > log. |
|
|
71
|
+
| **Permission Engine** | `engines/permission/` | RBAC + visibility scoping. Determines what each actor can see and do. Filters query results by actor scope. |
|
|
72
|
+
| **Budget Engine** | `engines/budget/` | Tracks resource consumption per actor (api_calls, llm_spend_usd, world_actions, time). Emits warning/critical/exhausted events. |
|
|
73
|
+
| **World Responder** | `engines/responder/` | Generates responses. Tier 1: deterministic pack logic, no LLM. Tier 2: profile-constrained LLM, seeded. |
|
|
74
|
+
| **World Animator** | `engines/animator/` | Generates events between agent turns. Controlled by behavior mode (static=off, reactive=cause-effect, dynamic=fully alive). Two layers: deterministic schedule + generative content with creativity budget. |
|
|
75
|
+
| **Agent Adapter** | `engines/adapter/` | Translates between external protocols (MCP, ACP, OpenAI, Anthropic, HTTP) and internal world actions. Handles capability gap detection. |
|
|
76
|
+
| **Report Generator** | `engines/reporter/` | Produces governance scorecards, capability gap logs, causal traces, counterfactual diffs. Scores are derived from events, not LLM judgment. Two-direction observation: world→agent challenges + agent→world behavior. |
|
|
77
|
+
| **Feedback Engine** | `engines/feedback/` | Manages the self-improving loop: annotations, tier promotion (bootstrapped→curated→verified), external source sync. |
|
|
78
|
+
|
|
79
|
+
### 7-Step Governance Pipeline
|
|
80
|
+
|
|
81
|
+
Every action flows through: **permission → policy → budget → capability → responder → validation → commit**. This pipeline IS the law of the world. Nothing bypasses it. Agent actions, animator events, side effects, and approval responses all flow through the same seven steps. Steps are configured in `volnix.toml` under `[pipeline]`. Steps can short-circuit (e.g., policy blocks before reaching responder).
|
|
82
|
+
|
|
83
|
+
### Semantic Kernel (`kernel/`)
|
|
84
|
+
|
|
85
|
+
Maps services to semantic categories (communication, work-management, money, authority, identity, storage, code, scheduling, monitoring) via `SemanticCategory` and `SemanticPrimitive`. This is a static registry — no LLMs. When the compiler encounters a service name (e.g., "Stripe"), it classifies it to a category, inherits core primitives, then specializes. This means bootstrapped services start from category semantics, not from zero. Services are resolved through `ServiceResolver` and exposed via `ServiceSurface` with `APIOperation` definitions.
|
|
86
|
+
|
|
87
|
+
### Fidelity Tiers (Two Tiers at Runtime)
|
|
88
|
+
|
|
89
|
+
- **Tier 1 (Verified Pack):** Hand-built deterministic simulation. No LLM at runtime. Fully reproducible. Benchmark-grade. Built along mission-critical paths of flagship templates.
|
|
90
|
+
- **Tier 2 (Profile-Backed):** Curated prompt profile with schemas, state machines, response templates, behavioral annotations. LLM generates content within constraints. Seeded. Includes bootstrapped services (compile-time inferred, labeled as `fidelity_source: "bootstrapped"`).
|
|
91
|
+
- **There is no Tier 3 at runtime.** Bootstrapping happens at compile time and produces a Tier 2 profile.
|
|
92
|
+
|
|
93
|
+
### Service Resolution Priority Chain (Compiler)
|
|
94
|
+
|
|
95
|
+
When the compiler encounters a service name:
|
|
96
|
+
1. **Semantic classification** — map to category, inherit primitives
|
|
97
|
+
2. **Verified Pack?** — if found → Tier 1, done
|
|
98
|
+
3. **Curated Profile?** — if found → Tier 2, done
|
|
99
|
+
4. **External spec?** — Context Hub (`chub get`), OpenAPI spec, MCP Registry → generate draft profile → Tier 2
|
|
100
|
+
5. **LLM Inference** — bootstrap from category primitives + general knowledge → Tier 2 (labeled "bootstrapped")
|
|
101
|
+
|
|
102
|
+
### Reality Dimensions — The World's Personality
|
|
103
|
+
|
|
104
|
+
Five dimensions that are personality traits, not engineering parameters. The LLM interprets them holistically — "somewhat neglected information" means the LLM creates a world where data management has been neglected, contextually and narratively coherent.
|
|
105
|
+
|
|
106
|
+
| Dimension | What it answers | Sub-attributes |
|
|
107
|
+
|-----------|----------------|----------------|
|
|
108
|
+
| **Information Quality** | How well-maintained is the data? | staleness, incompleteness, inconsistency, noise |
|
|
109
|
+
| **Reliability** | Do the tools work? | failures, timeouts, degradation |
|
|
110
|
+
| **Social Friction** | How difficult are the people? | uncooperative, deceptive, hostile, sophistication |
|
|
111
|
+
| **Complexity** | How messy are the situations? | ambiguity, edge_cases, contradictions, urgency, volatility |
|
|
112
|
+
| **Boundaries** | What limits exist? | access_limits, rule_clarity, boundary_gaps |
|
|
113
|
+
|
|
114
|
+
Three presets: `ideal` / `messy` (default) / `hostile`. Two-level config: labels for simple users, per-attribute numbers (0-100) for advanced. Mix freely.
|
|
115
|
+
|
|
116
|
+
### Behavior Modes
|
|
117
|
+
|
|
118
|
+
| Mode | Animator | Reproducibility |
|
|
119
|
+
|------|----------|----------------|
|
|
120
|
+
| **static** | Off. World frozen after compilation. | Fully deterministic. Same seed = same world. |
|
|
121
|
+
| **reactive** | Responds only to agent actions/inaction. | Same agent actions = same reactions. |
|
|
122
|
+
| **dynamic** | Fully active. Generates contextual events. | Seeds provide similar character. Use snapshots for exact replay. |
|
|
123
|
+
|
|
124
|
+
### Five User-Facing Concepts (the stable API)
|
|
125
|
+
|
|
126
|
+
| Concept | What it answers | Flag |
|
|
127
|
+
|---------|----------------|------|
|
|
128
|
+
| **Description** | What is this world? | NL or YAML |
|
|
129
|
+
| **Reality** | What kind of world? | `--reality ideal/messy/hostile` |
|
|
130
|
+
| **Behavior** | Is the world alive? | `--behavior static/reactive/dynamic` |
|
|
131
|
+
| **Fidelity** | How accurate are services? | `--fidelity auto/strict/exploratory` |
|
|
132
|
+
| **Mode** | Are rules enforced? | `--mode governed/ungoverned` |
|
|
133
|
+
|
|
134
|
+
### Composition Root
|
|
135
|
+
|
|
136
|
+
`registry/composition.py` is the **only** place that imports concrete engine classes. All other code depends on `typing.Protocol` interfaces from `core/protocols.py`. This is strictly enforced — no cross-engine imports.
|
|
137
|
+
|
|
138
|
+
### Event Bus & Ledger (separate concerns)
|
|
139
|
+
|
|
140
|
+
- **Bus** (`bus/`): Inter-engine communication via typed events. Events are immutable Pydantic models persisted to SQLite before delivery. Per-engine `asyncio.Queue` instances.
|
|
141
|
+
- **Ledger** (`ledger/`): Audit log for observability. Records pipeline steps, state mutations, LLM calls, gateway requests. Not for inter-engine communication.
|
|
142
|
+
|
|
143
|
+
### Config System
|
|
144
|
+
|
|
145
|
+
- `volnix.toml` — base config
|
|
146
|
+
- `volnix.{env}.toml` — environment overrides (e.g., `volnix.development.toml` uses `:memory:` DBs)
|
|
147
|
+
- `volnix.local.toml` — git-ignored local overrides
|
|
148
|
+
- Root config schema: `config/schema.py` → `VolnixConfig`. Each subsystem owns its own config model (SRP).
|
|
149
|
+
|
|
150
|
+
### LLM Router
|
|
151
|
+
|
|
152
|
+
All LLM calls go through the router (`llm/router.py`), which handles provider selection, retry, budget tracking, and fallback. Never call provider SDKs directly. Task-specific routing is configured in `[llm.routing.*]` sections of `volnix.toml`. Supports: Google (native), Anthropic (native), OpenAI-compatible (OpenAI, Gemini, Ollama, vLLM), CLI providers (Codex, codex, gemini), ACP providers (bidirectional JSON-RPC).
|
|
153
|
+
|
|
154
|
+
## Key Conventions
|
|
155
|
+
|
|
156
|
+
- **All I/O is async.** Use `aiosqlite`, `httpx`, async SDK methods. Wrap sync libs with `asyncio.to_thread()`. A single blocking call degrades the entire event loop.
|
|
157
|
+
- **All value objects and events are frozen Pydantic models** (`model_config = ConfigDict(frozen=True)`).
|
|
158
|
+
- **Inter-module contracts use `typing.Protocol`** (runtime_checkable, structural). ABC is used only for `BaseEngine`.
|
|
159
|
+
- **Typed IDs everywhere** — `EntityId`, `ActorId`, `ServiceId`, `EventId`, `WorldId`, `RunId`, `PolicyId`, `ToolName`, `SnapshotId`, `ProfileVersion` are `NewType` wrappers in `core/types.py`. Never pass raw strings for domain identifiers.
|
|
160
|
+
- **No hardcoded values in engine code.** Thresholds, timeouts, limits, provider names come from TOML config.
|
|
161
|
+
- **No cross-engine imports.** `engines/policy/` must never import from `engines/state/`. Communication is through the bus and protocols only.
|
|
162
|
+
- **All state changes go through the State Engine's commit interface.** Direct mutation creates inconsistencies.
|
|
163
|
+
- **All external requests go through the Gateway.** MCP calls, HTTP requests, webhook deliveries — everything.
|
|
164
|
+
- **All LLM calls go through the LLM router.** Never call provider SDKs directly. The router handles provider selection, retry, budget tracking, and fallback.
|
|
165
|
+
- **Record everything in the ledger.** If it didn't produce a ledger entry, it didn't happen.
|
|
166
|
+
- **Use the persistence module for all database operations.** Never create standalone SQLite connections.
|
|
167
|
+
- **Tests use `pytest-asyncio` with `asyncio_mode = "auto"`** — no `@pytest.mark.asyncio` decorators needed.
|
|
168
|
+
- **Coverage threshold: 80%** (95% for critical paths: pipeline, bus, state engine).
|
|
169
|
+
- Shared test fixtures in `tests/conftest.py`: `mock_event_bus`, `mock_ledger`, `stub_state_engine`, `mock_llm_provider`, `make_action_context`, `make_world_event`.
|
|
170
|
+
- **Ruff** for linting/formatting: Python 3.12 target, 100-char line length, rules: E, F, I, N, W, UP.
|
|
171
|
+
- **Mypy** with strict mode enabled.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.1.0] - 2026-04-03
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- 10-engine architecture: State, Policy, Permission, Budget, World Responder, World Animator, Agency, Agent Adapter, Report Generator, Feedback
|
|
13
|
+
- World Compiler: natural language and YAML world definitions compiled into runnable simulations
|
|
14
|
+
- 7-step governance pipeline: permission, policy, budget, capability, responder, validation, commit
|
|
15
|
+
- CLI with 28 commands: create, run, serve, mcp, dashboard, blueprints, report, check, config, attach, detach, inspect, diff, and more
|
|
16
|
+
- REST API with 39 endpoints + WebSocket live event streaming
|
|
17
|
+
- MCP server for agent integration (stdio and HTTP transports)
|
|
18
|
+
- React dashboard for run observation, scorecards, deliverables, and comparison
|
|
19
|
+
- 10 verified service packs: Gmail, Slack, Zendesk, Stripe, GitHub, Google Calendar, Twitter, Reddit, Alpaca, Browser
|
|
20
|
+
- 15 official blueprints: customer support, incident response, open sandbox, market prediction, campaign brainstorm, climate research, feature prioritization, security assessment, support ticket triage, governance test, and 5 internal agent team templates
|
|
21
|
+
- Multi-provider LLM routing: Anthropic, OpenAI, Google Gemini, Ollama, CLI-based, ACP-based
|
|
22
|
+
- Reality dimensions: information quality, reliability, social friction, complexity, boundaries (with ideal/messy/hostile presets)
|
|
23
|
+
- Behavior modes: static, reactive, dynamic
|
|
24
|
+
- Internal agent simulation with collaborative communication, subscriptions, and deliverable synthesis
|
|
25
|
+
- Python SDK client for programmatic access
|
|
26
|
+
- Agent config integration: one-command attach for Claude Desktop, Cursor, Windsurf
|
|
27
|
+
- Config export for OpenAI, Anthropic, LangGraph, CrewAI, AutoGen formats
|
|
28
|
+
- Layered TOML configuration system with environment and local overrides
|
|
29
|
+
- SQLite async persistence with WAL mode
|
|
30
|
+
- Event bus for inter-engine communication
|
|
31
|
+
- Ledger for audit logging and observability
|
|
32
|
+
- Seeded reproducibility: same seed produces same world state
|