quantum-framework 0.9.0__tar.gz → 0.9.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {quantum_framework-0.9.0/quantum_framework.egg-info → quantum_framework-0.9.1}/PKG-INFO +62 -32
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/README.md +58 -29
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/pyproject.toml +4 -3
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/pypy_compat.py +5 -3
- {quantum_framework-0.9.0 → quantum_framework-0.9.1/quantum_framework.egg-info}/PKG-INFO +62 -32
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_pypy_compat.py +10 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/LICENSE +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/commands/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/commands/build.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/commands/dev.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/commands/docs.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/commands/lint.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/commands/migrate.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/commands/new.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/commands/serve.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/commands/test.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/deploy.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/hot_reload.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/jobs.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/mq.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/pkg.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/runner.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/server_process.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/cli/utils.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/base_generator.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/cli.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/expression_transformer.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/javascript/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/javascript/generator.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/optimizer.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/python/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/python/generator.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/python/runtime.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/compiler/transpiler.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/ast_nodes.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/expression_diagnostics.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/expression_stdlib.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/expressions.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/agents/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/agents/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/conditionals/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/conditionals/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/data_fetching/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/data_fetching/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/data_fetching/src/desktop_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/data_fetching/src/html_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/data_fetching/src/parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/data_import/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/data_import/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/data_import/src/runtime.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/dump/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/dump/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/dump/src/parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/dump/src/runtime.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/functions/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/functions/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/game_engine_2d/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/game_engine_2d/src/ast_nodes.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/game_engine_2d/src/parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/invocation/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/invocation/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/invocation/src/runtime.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/knowledge_base/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/knowledge_base/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/knowledge_base/src/parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/logging/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/logging/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/logging/src/parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/logging/src/runtime.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/loops/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/loops/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/query/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/query/src/database_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/query/src/query_validators.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/state_management/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/state_management/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/terminal_engine/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/terminal_engine/src/ast_nodes.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/terminal_engine/src/parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/testing_engine/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/testing_engine/src/ast_nodes.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/testing_engine/src/parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/theming/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/theming/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/theming/src/presets.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/ui_engine/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/ui_engine/src/ast_nodes.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/ui_engine/src/parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/websocket/src/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/features/websocket/src/ast_node.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/html_compat.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parser_registry.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/ai/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/ai/agent_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/ai/knowledge_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/ai/llm_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/ai/team_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/base.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/composition/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/composition/import_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/composition/slot_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/control_flow/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/control_flow/if_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/control_flow/loop_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/control_flow/set_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/data/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/data/data_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/data/invoke_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/data/query_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/data/transaction_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/events/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/events/dispatch_event_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/forms/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/forms/action_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/forms/flash_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/forms/redirect_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/functions/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/functions/function_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/functions/param_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/functions/return_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/html/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/html/component_call_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/html/html_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/jobs/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/jobs/job_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/jobs/schedule_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/jobs/thread_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/messaging/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/messaging/message_ack_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/messaging/message_nack_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/messaging/message_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/messaging/queue_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/messaging/websocket_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/persistence/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/persistence/persist_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/routing/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/routing/route_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/scripting/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/scripting/pyclass_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/scripting/pydecorator_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/scripting/pyimport_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/scripting/python_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/services/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/services/dump_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/services/file_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/services/log_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/parsers/services/mail_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/core/tiers.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/packages/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/packages/manager.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/packages/manifest.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/packages/registry.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/packages/resolver.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/plugins/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/plugins/hooks.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/plugins/loader.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/plugins/manifest.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/plugins/registry.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/action_handler.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/adapters/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/adapters/memory_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/adapters/rabbitmq_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/adapters/redis_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/adapters/sqlite_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/agent_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/api_server.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ast_cache.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/auth_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/component.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/component_composer.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/component_resolver.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/database_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/email_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/error_handler.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/execution_context.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executor_registry.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/ai/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/ai/agent_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/ai/knowledge_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/ai/llm_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/ai/team_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/base.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/control_flow/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/control_flow/if_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/control_flow/loop_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/control_flow/set_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/data/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/data/data_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/data/invoke_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/data/query_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/data/transaction_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/jobs/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/jobs/job_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/jobs/schedule_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/jobs/thread_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/messaging/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/messaging/message_ack_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/messaging/message_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/messaging/queue_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/messaging/websocket_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/scripting/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/scripting/pyclass_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/scripting/pyimport_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/scripting/python_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/services/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/services/dump_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/services/file_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/services/log_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/executors/services/mail_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/expression_cache.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/file_upload_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/function_registry.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/game_builder.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/game_code_generator.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/game_templates.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/godot_code_generator.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/godot_templates.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/job_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/knowledge_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/llm_cache.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/llm_providers.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/llm_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/logging_setup.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/message_broker.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/message_queue_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/param_validation.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/python_bridge.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/query_validators.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/renderer.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/service_container.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/terminal_builder.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/terminal_code_generator.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/terminal_templates.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/testing_builder.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/testing_code_generator.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/testing_templates.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_builder.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_desktop_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_desktop_templates.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_html_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_html_templates.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_mobile_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_mobile_templates.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_textual_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_textual_templates.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_tokens.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/ui_validator.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/validators.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/web_server.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/websocket_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/websocket_service.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/websocket_transport.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/runtime/wsgi.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum/utils/__init__.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum_framework.egg-info/SOURCES.txt +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum_framework.egg-info/dependency_links.txt +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum_framework.egg-info/entry_points.txt +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum_framework.egg-info/requires.txt +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/quantum_framework.egg-info/top_level.txt +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/setup.cfg +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_agent.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_animations.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_ast_cache.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_cli_commands.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_component_library.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_data_fetching.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_desktop_bridge.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_expression_cache.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_form_validation.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_game_codegen.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_game_e2e.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_game_engine.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_game_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_godot_codegen.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_job_executor.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_llm_providers.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_message_broker.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_message_queue.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_mobile_target.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_multi_agent.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_packages.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_plugins.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_projects_blog_components_admin.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_python_scripting.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_state_persistence.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_terminal_codegen.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_terminal_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_testing_codegen.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_testing_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_theming.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_ui_html_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_ui_parity.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_ui_parser.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_ui_textual_adapter.py +0 -0
- {quantum_framework-0.9.0 → quantum_framework-0.9.1}/tests/test_websocket.py +0 -0
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantum-framework
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.1
|
|
4
4
|
Summary: Full-stack declarative framework for building web, desktop, and mobile applications
|
|
5
5
|
Author-email: Daniel Gregorio <danielgregorio2611@gmail.com>
|
|
6
6
|
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://quantum
|
|
8
|
-
Project-URL: Documentation, https://
|
|
7
|
+
Project-URL: Homepage, https://github.com/danielgregorio/quantum
|
|
8
|
+
Project-URL: Documentation, https://danielgregorio.github.io/quantum/
|
|
9
|
+
Project-URL: Changelog, https://github.com/danielgregorio/quantum/releases
|
|
9
10
|
Project-URL: Repository, https://github.com/danielgregorio/quantum
|
|
10
11
|
Keywords: framework,declarative,xml,web,desktop,mobile
|
|
11
12
|
Classifier: Development Status :: 4 - Beta
|
|
@@ -43,9 +44,10 @@ Dynamic: license-file
|
|
|
43
44
|
# Quantum
|
|
44
45
|
|
|
45
46
|
[](https://github.com/danielgregorio/quantum/actions/workflows/ci.yml)
|
|
46
|
-
[](https://pypi.org/project/quantum-framework/)
|
|
48
|
+
[](https://pypi.org/project/quantum-framework/)
|
|
47
49
|
[](https://danielgregorio.github.io/quantum/)
|
|
48
|
-
[](LICENSE)
|
|
50
|
+
[](https://github.com/danielgregorio/quantum/blob/main/LICENSE)
|
|
49
51
|
|
|
50
52
|
> **Declarative web apps in XML, with AI and RAG built into the language.
|
|
51
53
|
> No build chain, no JavaScript, no frontend framework.**
|
|
@@ -123,6 +125,9 @@ coercion of the model's arguments are the runtime's job.
|
|
|
123
125
|
</q:component>
|
|
124
126
|
```
|
|
125
127
|
|
|
128
|
+
Save it as `components/orders.q`, run `quantum start`, and it is served at
|
|
129
|
+
`http://localhost:8080/orders`.
|
|
130
|
+
|
|
126
131
|
`q:query` refuses to run SQL with an undeclared `:param` — parameterised queries are
|
|
127
132
|
enforced by the parser, not by discipline.
|
|
128
133
|
|
|
@@ -134,14 +139,22 @@ Also core: `q:set` with `session.` / `application.` / `request.` scopes, `q:if`,
|
|
|
134
139
|
|
|
135
140
|
## Quick start
|
|
136
141
|
|
|
137
|
-
**Requirements:** Python 3.
|
|
142
|
+
**Requirements:** Python 3.12+ and `pip`.
|
|
138
143
|
|
|
139
144
|
```bash
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
pip install -e ".[dev]"
|
|
145
|
+
pip install quantum-framework
|
|
146
|
+
```
|
|
143
147
|
|
|
144
|
-
|
|
148
|
+
Create `hello.q`:
|
|
149
|
+
|
|
150
|
+
```xml
|
|
151
|
+
<q:component name="HelloWorld" xmlns:q="https://quantum.lang/ns">
|
|
152
|
+
<q:return value="Hello World!" />
|
|
153
|
+
</q:component>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
quantum run hello.q
|
|
145
158
|
```
|
|
146
159
|
|
|
147
160
|
```
|
|
@@ -149,17 +162,21 @@ quantum run examples/hello.q
|
|
|
149
162
|
[SUCCESS] Result: Hello World!
|
|
150
163
|
```
|
|
151
164
|
|
|
165
|
+
For a web app, put `.q` files in `components/` and run `quantum start`
|
|
166
|
+
(`components/index.q` is served at `/`). `quantum stop` stops it.
|
|
167
|
+
|
|
152
168
|
For the AI examples you also need an [Ollama](https://ollama.com) server and the RAG
|
|
153
169
|
extra:
|
|
154
170
|
|
|
155
171
|
```bash
|
|
156
|
-
pip install -
|
|
172
|
+
pip install "quantum-framework[rag]"
|
|
157
173
|
ollama pull phi3 && ollama pull nomic-embed-text
|
|
158
174
|
export QUANTUM_LLM_BASE_URL=http://localhost:11434
|
|
159
175
|
```
|
|
160
176
|
|
|
161
|
-
Declare datasources in `quantum.config.yaml` and `q:query` works
|
|
162
|
-
running
|
|
177
|
+
Declare datasources in `quantum.config.yaml` (next to `components/`) and `q:query` works
|
|
178
|
+
with nothing else running — SQLite needs no extra; PostgreSQL and MySQL drivers come with
|
|
179
|
+
`pip install "quantum-framework[db]"`:
|
|
163
180
|
|
|
164
181
|
```yaml
|
|
165
182
|
datasources:
|
|
@@ -173,26 +190,41 @@ datasources:
|
|
|
173
190
|
| Command | What it does |
|
|
174
191
|
|---------|--------------|
|
|
175
192
|
| `run <file.q>` | Execute a component, app, or API |
|
|
176
|
-
| `start` | Start the web server |
|
|
177
|
-
| `
|
|
193
|
+
| `start` | Start the web server (port 8080 by default; `--port` to change) |
|
|
194
|
+
| `stop` | Stop the server started by `start` |
|
|
195
|
+
| `deploy [path]` · `apps` | Deploy an application, manage deployed ones |
|
|
178
196
|
| `pkg` · `jobs` · `mq` · `migrate` | Packages, jobs, message queues, migrations |
|
|
179
197
|
|
|
198
|
+
### From source
|
|
199
|
+
|
|
200
|
+
To work on Quantum itself:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
git clone https://github.com/danielgregorio/quantum.git
|
|
204
|
+
cd quantum
|
|
205
|
+
pip install -e ".[dev]"
|
|
206
|
+
quantum run examples/hello.q
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
See [CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md) for the test suite and the architecture.
|
|
210
|
+
|
|
180
211
|
---
|
|
181
212
|
|
|
182
213
|
## Documentation
|
|
183
214
|
|
|
184
|
-
Full docs
|
|
185
|
-
|
|
215
|
+
Full docs at **[danielgregorio.github.io/quantum](https://danielgregorio.github.io/quantum/)**:
|
|
216
|
+
|
|
217
|
+
- [Getting Started](https://danielgregorio.github.io/quantum/guide/getting-started) · [Installation](https://danielgregorio.github.io/quantum/guide/installation) · [Quick Start](https://danielgregorio.github.io/quantum/guide/quick-start)
|
|
218
|
+
- [Components](https://danielgregorio.github.io/quantum/guide/components) · [State](https://danielgregorio.github.io/quantum/guide/state-management) · [Loops](https://danielgregorio.github.io/quantum/guide/loops) · [Conditionals](https://danielgregorio.github.io/quantum/guide/conditionals)
|
|
219
|
+
- [Queries](https://danielgregorio.github.io/quantum/guide/query) · [Functions](https://danielgregorio.github.io/quantum/guide/functions) · [Data fetching](https://danielgregorio.github.io/quantum/guide/data-fetching)
|
|
186
220
|
|
|
187
|
-
|
|
188
|
-
- [Components](docs/guide/components.md) · [State](docs/guide/state-management.md) · [Loops](docs/guide/loops.md) · [Conditionals](docs/guide/conditionals.md)
|
|
189
|
-
- [Queries](docs/guide/query.md) · [Functions](docs/guide/functions.md) · [Data fetching](docs/guide/data-fetching.md)
|
|
221
|
+
Releases and their notes are on the [GitHub Releases](https://github.com/danielgregorio/quantum/releases) page.
|
|
190
222
|
|
|
191
223
|
---
|
|
192
224
|
|
|
193
225
|
## Stability
|
|
194
226
|
|
|
195
|
-
Support levels are defined in **[SUPPORT_TIERS.md](SUPPORT_TIERS.md)**. Short version:
|
|
227
|
+
Support levels are defined in **[SUPPORT_TIERS.md](https://github.com/danielgregorio/quantum/blob/main/SUPPORT_TIERS.md)**. Short version:
|
|
196
228
|
|
|
197
229
|
| Surface | Status |
|
|
198
230
|
|---------|--------|
|
|
@@ -200,13 +232,11 @@ Support levels are defined in **[SUPPORT_TIERS.md](SUPPORT_TIERS.md)**. Short ve
|
|
|
200
232
|
| AI — `q:llm`, `q:knowledge`, `q:agent` | **Beta** — validated end-to-end against a live Ollama server |
|
|
201
233
|
| `q:team` (multi-agent handoff) | Beta, less exercised |
|
|
202
234
|
| Jobs, messaging, websockets, mail, file uploads, `ui:*`, terminal target | **Experimental** — they run, but no API stability promise |
|
|
203
|
-
| Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) | Experimental, and a full-trust escape hatch — see [SECURITY.md](SECURITY.md) |
|
|
235
|
+
| Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) | Experimental, and a full-trust escape hatch — see [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) |
|
|
204
236
|
|
|
205
237
|
A functional audit in 2026-09 found that several of these surfaces had never been run
|
|
206
|
-
end-to-end despite being documented as complete.
|
|
207
|
-
|
|
208
|
-
[`AUDIT_FIX_PLAN.md`](AUDIT_FIX_PLAN.md). Feature status is now verified by execution
|
|
209
|
-
rather than asserted by hand.
|
|
238
|
+
end-to-end despite being documented as complete. They were fixed or re-labelled, and
|
|
239
|
+
feature status is now verified by execution rather than asserted by hand.
|
|
210
240
|
|
|
211
241
|
Pre-1.0: APIs may change between minor versions.
|
|
212
242
|
|
|
@@ -221,24 +251,24 @@ quantum/
|
|
|
221
251
|
│ ├── runtime/ # Execution engine, web server, renderer
|
|
222
252
|
│ └── cli/ # Command-line entry point
|
|
223
253
|
├── examples/ # runnable .q examples
|
|
224
|
-
├── tests/ # pytest suite (~
|
|
254
|
+
├── tests/ # pytest suite (~3.8k tests)
|
|
225
255
|
├── scripts/ # dev tools
|
|
226
256
|
└── docs/ # VitePress documentation
|
|
227
257
|
```
|
|
228
258
|
|
|
229
259
|
Adding a tag is one parser + one executor + a registry entry — see
|
|
230
|
-
[CONTRIBUTING.md](CONTRIBUTING.md).
|
|
260
|
+
[CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md).
|
|
231
261
|
|
|
232
262
|
---
|
|
233
263
|
|
|
234
264
|
## Contributing
|
|
235
265
|
|
|
236
|
-
Read **[CONTRIBUTING.md](CONTRIBUTING.md)** for dev setup and how the modular
|
|
266
|
+
Read **[CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md)** for dev setup and how the modular
|
|
237
267
|
parser/executor architecture works. By participating you agree to the
|
|
238
|
-
[Code of Conduct](CODE_OF_CONDUCT.md).
|
|
268
|
+
[Code of Conduct](https://github.com/danielgregorio/quantum/blob/main/CODE_OF_CONDUCT.md).
|
|
239
269
|
|
|
240
|
-
Found a security issue? Follow [SECURITY.md](SECURITY.md) — **do not** open a public issue.
|
|
270
|
+
Found a security issue? Follow [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) — **do not** open a public issue.
|
|
241
271
|
|
|
242
272
|
## License
|
|
243
273
|
|
|
244
|
-
MIT — see [LICENSE](LICENSE).
|
|
274
|
+
MIT — see [LICENSE](https://github.com/danielgregorio/quantum/blob/main/LICENSE).
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
# Quantum
|
|
2
2
|
|
|
3
3
|
[](https://github.com/danielgregorio/quantum/actions/workflows/ci.yml)
|
|
4
|
-
[](https://pypi.org/project/quantum-framework/)
|
|
5
|
+
[](https://pypi.org/project/quantum-framework/)
|
|
5
6
|
[](https://danielgregorio.github.io/quantum/)
|
|
6
|
-
[](LICENSE)
|
|
7
|
+
[](https://github.com/danielgregorio/quantum/blob/main/LICENSE)
|
|
7
8
|
|
|
8
9
|
> **Declarative web apps in XML, with AI and RAG built into the language.
|
|
9
10
|
> No build chain, no JavaScript, no frontend framework.**
|
|
@@ -81,6 +82,9 @@ coercion of the model's arguments are the runtime's job.
|
|
|
81
82
|
</q:component>
|
|
82
83
|
```
|
|
83
84
|
|
|
85
|
+
Save it as `components/orders.q`, run `quantum start`, and it is served at
|
|
86
|
+
`http://localhost:8080/orders`.
|
|
87
|
+
|
|
84
88
|
`q:query` refuses to run SQL with an undeclared `:param` — parameterised queries are
|
|
85
89
|
enforced by the parser, not by discipline.
|
|
86
90
|
|
|
@@ -92,14 +96,22 @@ Also core: `q:set` with `session.` / `application.` / `request.` scopes, `q:if`,
|
|
|
92
96
|
|
|
93
97
|
## Quick start
|
|
94
98
|
|
|
95
|
-
**Requirements:** Python 3.
|
|
99
|
+
**Requirements:** Python 3.12+ and `pip`.
|
|
96
100
|
|
|
97
101
|
```bash
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
pip install -e ".[dev]"
|
|
102
|
+
pip install quantum-framework
|
|
103
|
+
```
|
|
101
104
|
|
|
102
|
-
|
|
105
|
+
Create `hello.q`:
|
|
106
|
+
|
|
107
|
+
```xml
|
|
108
|
+
<q:component name="HelloWorld" xmlns:q="https://quantum.lang/ns">
|
|
109
|
+
<q:return value="Hello World!" />
|
|
110
|
+
</q:component>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
quantum run hello.q
|
|
103
115
|
```
|
|
104
116
|
|
|
105
117
|
```
|
|
@@ -107,17 +119,21 @@ quantum run examples/hello.q
|
|
|
107
119
|
[SUCCESS] Result: Hello World!
|
|
108
120
|
```
|
|
109
121
|
|
|
122
|
+
For a web app, put `.q` files in `components/` and run `quantum start`
|
|
123
|
+
(`components/index.q` is served at `/`). `quantum stop` stops it.
|
|
124
|
+
|
|
110
125
|
For the AI examples you also need an [Ollama](https://ollama.com) server and the RAG
|
|
111
126
|
extra:
|
|
112
127
|
|
|
113
128
|
```bash
|
|
114
|
-
pip install -
|
|
129
|
+
pip install "quantum-framework[rag]"
|
|
115
130
|
ollama pull phi3 && ollama pull nomic-embed-text
|
|
116
131
|
export QUANTUM_LLM_BASE_URL=http://localhost:11434
|
|
117
132
|
```
|
|
118
133
|
|
|
119
|
-
Declare datasources in `quantum.config.yaml` and `q:query` works
|
|
120
|
-
running
|
|
134
|
+
Declare datasources in `quantum.config.yaml` (next to `components/`) and `q:query` works
|
|
135
|
+
with nothing else running — SQLite needs no extra; PostgreSQL and MySQL drivers come with
|
|
136
|
+
`pip install "quantum-framework[db]"`:
|
|
121
137
|
|
|
122
138
|
```yaml
|
|
123
139
|
datasources:
|
|
@@ -131,26 +147,41 @@ datasources:
|
|
|
131
147
|
| Command | What it does |
|
|
132
148
|
|---------|--------------|
|
|
133
149
|
| `run <file.q>` | Execute a component, app, or API |
|
|
134
|
-
| `start` | Start the web server |
|
|
135
|
-
| `
|
|
150
|
+
| `start` | Start the web server (port 8080 by default; `--port` to change) |
|
|
151
|
+
| `stop` | Stop the server started by `start` |
|
|
152
|
+
| `deploy [path]` · `apps` | Deploy an application, manage deployed ones |
|
|
136
153
|
| `pkg` · `jobs` · `mq` · `migrate` | Packages, jobs, message queues, migrations |
|
|
137
154
|
|
|
155
|
+
### From source
|
|
156
|
+
|
|
157
|
+
To work on Quantum itself:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
git clone https://github.com/danielgregorio/quantum.git
|
|
161
|
+
cd quantum
|
|
162
|
+
pip install -e ".[dev]"
|
|
163
|
+
quantum run examples/hello.q
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
See [CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md) for the test suite and the architecture.
|
|
167
|
+
|
|
138
168
|
---
|
|
139
169
|
|
|
140
170
|
## Documentation
|
|
141
171
|
|
|
142
|
-
Full docs
|
|
143
|
-
|
|
172
|
+
Full docs at **[danielgregorio.github.io/quantum](https://danielgregorio.github.io/quantum/)**:
|
|
173
|
+
|
|
174
|
+
- [Getting Started](https://danielgregorio.github.io/quantum/guide/getting-started) · [Installation](https://danielgregorio.github.io/quantum/guide/installation) · [Quick Start](https://danielgregorio.github.io/quantum/guide/quick-start)
|
|
175
|
+
- [Components](https://danielgregorio.github.io/quantum/guide/components) · [State](https://danielgregorio.github.io/quantum/guide/state-management) · [Loops](https://danielgregorio.github.io/quantum/guide/loops) · [Conditionals](https://danielgregorio.github.io/quantum/guide/conditionals)
|
|
176
|
+
- [Queries](https://danielgregorio.github.io/quantum/guide/query) · [Functions](https://danielgregorio.github.io/quantum/guide/functions) · [Data fetching](https://danielgregorio.github.io/quantum/guide/data-fetching)
|
|
144
177
|
|
|
145
|
-
|
|
146
|
-
- [Components](docs/guide/components.md) · [State](docs/guide/state-management.md) · [Loops](docs/guide/loops.md) · [Conditionals](docs/guide/conditionals.md)
|
|
147
|
-
- [Queries](docs/guide/query.md) · [Functions](docs/guide/functions.md) · [Data fetching](docs/guide/data-fetching.md)
|
|
178
|
+
Releases and their notes are on the [GitHub Releases](https://github.com/danielgregorio/quantum/releases) page.
|
|
148
179
|
|
|
149
180
|
---
|
|
150
181
|
|
|
151
182
|
## Stability
|
|
152
183
|
|
|
153
|
-
Support levels are defined in **[SUPPORT_TIERS.md](SUPPORT_TIERS.md)**. Short version:
|
|
184
|
+
Support levels are defined in **[SUPPORT_TIERS.md](https://github.com/danielgregorio/quantum/blob/main/SUPPORT_TIERS.md)**. Short version:
|
|
154
185
|
|
|
155
186
|
| Surface | Status |
|
|
156
187
|
|---------|--------|
|
|
@@ -158,13 +189,11 @@ Support levels are defined in **[SUPPORT_TIERS.md](SUPPORT_TIERS.md)**. Short ve
|
|
|
158
189
|
| AI — `q:llm`, `q:knowledge`, `q:agent` | **Beta** — validated end-to-end against a live Ollama server |
|
|
159
190
|
| `q:team` (multi-agent handoff) | Beta, less exercised |
|
|
160
191
|
| Jobs, messaging, websockets, mail, file uploads, `ui:*`, terminal target | **Experimental** — they run, but no API stability promise |
|
|
161
|
-
| Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) | Experimental, and a full-trust escape hatch — see [SECURITY.md](SECURITY.md) |
|
|
192
|
+
| Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) | Experimental, and a full-trust escape hatch — see [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) |
|
|
162
193
|
|
|
163
194
|
A functional audit in 2026-09 found that several of these surfaces had never been run
|
|
164
|
-
end-to-end despite being documented as complete.
|
|
165
|
-
|
|
166
|
-
[`AUDIT_FIX_PLAN.md`](AUDIT_FIX_PLAN.md). Feature status is now verified by execution
|
|
167
|
-
rather than asserted by hand.
|
|
195
|
+
end-to-end despite being documented as complete. They were fixed or re-labelled, and
|
|
196
|
+
feature status is now verified by execution rather than asserted by hand.
|
|
168
197
|
|
|
169
198
|
Pre-1.0: APIs may change between minor versions.
|
|
170
199
|
|
|
@@ -179,24 +208,24 @@ quantum/
|
|
|
179
208
|
│ ├── runtime/ # Execution engine, web server, renderer
|
|
180
209
|
│ └── cli/ # Command-line entry point
|
|
181
210
|
├── examples/ # runnable .q examples
|
|
182
|
-
├── tests/ # pytest suite (~
|
|
211
|
+
├── tests/ # pytest suite (~3.8k tests)
|
|
183
212
|
├── scripts/ # dev tools
|
|
184
213
|
└── docs/ # VitePress documentation
|
|
185
214
|
```
|
|
186
215
|
|
|
187
216
|
Adding a tag is one parser + one executor + a registry entry — see
|
|
188
|
-
[CONTRIBUTING.md](CONTRIBUTING.md).
|
|
217
|
+
[CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md).
|
|
189
218
|
|
|
190
219
|
---
|
|
191
220
|
|
|
192
221
|
## Contributing
|
|
193
222
|
|
|
194
|
-
Read **[CONTRIBUTING.md](CONTRIBUTING.md)** for dev setup and how the modular
|
|
223
|
+
Read **[CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md)** for dev setup and how the modular
|
|
195
224
|
parser/executor architecture works. By participating you agree to the
|
|
196
|
-
[Code of Conduct](CODE_OF_CONDUCT.md).
|
|
225
|
+
[Code of Conduct](https://github.com/danielgregorio/quantum/blob/main/CODE_OF_CONDUCT.md).
|
|
197
226
|
|
|
198
|
-
Found a security issue? Follow [SECURITY.md](SECURITY.md) — **do not** open a public issue.
|
|
227
|
+
Found a security issue? Follow [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) — **do not** open a public issue.
|
|
199
228
|
|
|
200
229
|
## License
|
|
201
230
|
|
|
202
|
-
MIT — see [LICENSE](LICENSE).
|
|
231
|
+
MIT — see [LICENSE](https://github.com/danielgregorio/quantum/blob/main/LICENSE).
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "quantum-framework"
|
|
7
|
-
version = "0.9.
|
|
7
|
+
version = "0.9.1"
|
|
8
8
|
description = "Full-stack declarative framework for building web, desktop, and mobile applications"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {text = "MIT"}
|
|
@@ -60,8 +60,9 @@ websocket = [
|
|
|
60
60
|
quantum = "quantum.cli.runner:main"
|
|
61
61
|
|
|
62
62
|
[project.urls]
|
|
63
|
-
Homepage = "https://quantum
|
|
64
|
-
Documentation = "https://
|
|
63
|
+
Homepage = "https://github.com/danielgregorio/quantum"
|
|
64
|
+
Documentation = "https://danielgregorio.github.io/quantum/"
|
|
65
|
+
Changelog = "https://github.com/danielgregorio/quantum/releases"
|
|
65
66
|
Repository = "https://github.com/danielgregorio/quantum"
|
|
66
67
|
|
|
67
68
|
[tool.setuptools.packages.find]
|
|
@@ -237,11 +237,13 @@ class QuantumPyPyAdapter:
|
|
|
237
237
|
process = psutil.Process()
|
|
238
238
|
return process.memory_info().rss / 1024 / 1024
|
|
239
239
|
except ImportError:
|
|
240
|
-
# Fallback for when psutil is not available
|
|
241
|
-
|
|
240
|
+
# Fallback for when psutil is not available. `resource` is
|
|
241
|
+
# POSIX-only: importing it outside the try crashed this on Windows
|
|
242
|
+
# instead of falling back.
|
|
242
243
|
try:
|
|
244
|
+
import resource
|
|
243
245
|
return resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1024
|
|
244
|
-
except:
|
|
246
|
+
except (ImportError, OSError, ValueError):
|
|
245
247
|
return 0.0
|
|
246
248
|
|
|
247
249
|
@staticmethod
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: quantum-framework
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.1
|
|
4
4
|
Summary: Full-stack declarative framework for building web, desktop, and mobile applications
|
|
5
5
|
Author-email: Daniel Gregorio <danielgregorio2611@gmail.com>
|
|
6
6
|
License: MIT
|
|
7
|
-
Project-URL: Homepage, https://quantum
|
|
8
|
-
Project-URL: Documentation, https://
|
|
7
|
+
Project-URL: Homepage, https://github.com/danielgregorio/quantum
|
|
8
|
+
Project-URL: Documentation, https://danielgregorio.github.io/quantum/
|
|
9
|
+
Project-URL: Changelog, https://github.com/danielgregorio/quantum/releases
|
|
9
10
|
Project-URL: Repository, https://github.com/danielgregorio/quantum
|
|
10
11
|
Keywords: framework,declarative,xml,web,desktop,mobile
|
|
11
12
|
Classifier: Development Status :: 4 - Beta
|
|
@@ -43,9 +44,10 @@ Dynamic: license-file
|
|
|
43
44
|
# Quantum
|
|
44
45
|
|
|
45
46
|
[](https://github.com/danielgregorio/quantum/actions/workflows/ci.yml)
|
|
46
|
-
[](https://pypi.org/project/quantum-framework/)
|
|
48
|
+
[](https://pypi.org/project/quantum-framework/)
|
|
47
49
|
[](https://danielgregorio.github.io/quantum/)
|
|
48
|
-
[](LICENSE)
|
|
50
|
+
[](https://github.com/danielgregorio/quantum/blob/main/LICENSE)
|
|
49
51
|
|
|
50
52
|
> **Declarative web apps in XML, with AI and RAG built into the language.
|
|
51
53
|
> No build chain, no JavaScript, no frontend framework.**
|
|
@@ -123,6 +125,9 @@ coercion of the model's arguments are the runtime's job.
|
|
|
123
125
|
</q:component>
|
|
124
126
|
```
|
|
125
127
|
|
|
128
|
+
Save it as `components/orders.q`, run `quantum start`, and it is served at
|
|
129
|
+
`http://localhost:8080/orders`.
|
|
130
|
+
|
|
126
131
|
`q:query` refuses to run SQL with an undeclared `:param` — parameterised queries are
|
|
127
132
|
enforced by the parser, not by discipline.
|
|
128
133
|
|
|
@@ -134,14 +139,22 @@ Also core: `q:set` with `session.` / `application.` / `request.` scopes, `q:if`,
|
|
|
134
139
|
|
|
135
140
|
## Quick start
|
|
136
141
|
|
|
137
|
-
**Requirements:** Python 3.
|
|
142
|
+
**Requirements:** Python 3.12+ and `pip`.
|
|
138
143
|
|
|
139
144
|
```bash
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
pip install -e ".[dev]"
|
|
145
|
+
pip install quantum-framework
|
|
146
|
+
```
|
|
143
147
|
|
|
144
|
-
|
|
148
|
+
Create `hello.q`:
|
|
149
|
+
|
|
150
|
+
```xml
|
|
151
|
+
<q:component name="HelloWorld" xmlns:q="https://quantum.lang/ns">
|
|
152
|
+
<q:return value="Hello World!" />
|
|
153
|
+
</q:component>
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
quantum run hello.q
|
|
145
158
|
```
|
|
146
159
|
|
|
147
160
|
```
|
|
@@ -149,17 +162,21 @@ quantum run examples/hello.q
|
|
|
149
162
|
[SUCCESS] Result: Hello World!
|
|
150
163
|
```
|
|
151
164
|
|
|
165
|
+
For a web app, put `.q` files in `components/` and run `quantum start`
|
|
166
|
+
(`components/index.q` is served at `/`). `quantum stop` stops it.
|
|
167
|
+
|
|
152
168
|
For the AI examples you also need an [Ollama](https://ollama.com) server and the RAG
|
|
153
169
|
extra:
|
|
154
170
|
|
|
155
171
|
```bash
|
|
156
|
-
pip install -
|
|
172
|
+
pip install "quantum-framework[rag]"
|
|
157
173
|
ollama pull phi3 && ollama pull nomic-embed-text
|
|
158
174
|
export QUANTUM_LLM_BASE_URL=http://localhost:11434
|
|
159
175
|
```
|
|
160
176
|
|
|
161
|
-
Declare datasources in `quantum.config.yaml` and `q:query` works
|
|
162
|
-
running
|
|
177
|
+
Declare datasources in `quantum.config.yaml` (next to `components/`) and `q:query` works
|
|
178
|
+
with nothing else running — SQLite needs no extra; PostgreSQL and MySQL drivers come with
|
|
179
|
+
`pip install "quantum-framework[db]"`:
|
|
163
180
|
|
|
164
181
|
```yaml
|
|
165
182
|
datasources:
|
|
@@ -173,26 +190,41 @@ datasources:
|
|
|
173
190
|
| Command | What it does |
|
|
174
191
|
|---------|--------------|
|
|
175
192
|
| `run <file.q>` | Execute a component, app, or API |
|
|
176
|
-
| `start` | Start the web server |
|
|
177
|
-
| `
|
|
193
|
+
| `start` | Start the web server (port 8080 by default; `--port` to change) |
|
|
194
|
+
| `stop` | Stop the server started by `start` |
|
|
195
|
+
| `deploy [path]` · `apps` | Deploy an application, manage deployed ones |
|
|
178
196
|
| `pkg` · `jobs` · `mq` · `migrate` | Packages, jobs, message queues, migrations |
|
|
179
197
|
|
|
198
|
+
### From source
|
|
199
|
+
|
|
200
|
+
To work on Quantum itself:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
git clone https://github.com/danielgregorio/quantum.git
|
|
204
|
+
cd quantum
|
|
205
|
+
pip install -e ".[dev]"
|
|
206
|
+
quantum run examples/hello.q
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
See [CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md) for the test suite and the architecture.
|
|
210
|
+
|
|
180
211
|
---
|
|
181
212
|
|
|
182
213
|
## Documentation
|
|
183
214
|
|
|
184
|
-
Full docs
|
|
185
|
-
|
|
215
|
+
Full docs at **[danielgregorio.github.io/quantum](https://danielgregorio.github.io/quantum/)**:
|
|
216
|
+
|
|
217
|
+
- [Getting Started](https://danielgregorio.github.io/quantum/guide/getting-started) · [Installation](https://danielgregorio.github.io/quantum/guide/installation) · [Quick Start](https://danielgregorio.github.io/quantum/guide/quick-start)
|
|
218
|
+
- [Components](https://danielgregorio.github.io/quantum/guide/components) · [State](https://danielgregorio.github.io/quantum/guide/state-management) · [Loops](https://danielgregorio.github.io/quantum/guide/loops) · [Conditionals](https://danielgregorio.github.io/quantum/guide/conditionals)
|
|
219
|
+
- [Queries](https://danielgregorio.github.io/quantum/guide/query) · [Functions](https://danielgregorio.github.io/quantum/guide/functions) · [Data fetching](https://danielgregorio.github.io/quantum/guide/data-fetching)
|
|
186
220
|
|
|
187
|
-
|
|
188
|
-
- [Components](docs/guide/components.md) · [State](docs/guide/state-management.md) · [Loops](docs/guide/loops.md) · [Conditionals](docs/guide/conditionals.md)
|
|
189
|
-
- [Queries](docs/guide/query.md) · [Functions](docs/guide/functions.md) · [Data fetching](docs/guide/data-fetching.md)
|
|
221
|
+
Releases and their notes are on the [GitHub Releases](https://github.com/danielgregorio/quantum/releases) page.
|
|
190
222
|
|
|
191
223
|
---
|
|
192
224
|
|
|
193
225
|
## Stability
|
|
194
226
|
|
|
195
|
-
Support levels are defined in **[SUPPORT_TIERS.md](SUPPORT_TIERS.md)**. Short version:
|
|
227
|
+
Support levels are defined in **[SUPPORT_TIERS.md](https://github.com/danielgregorio/quantum/blob/main/SUPPORT_TIERS.md)**. Short version:
|
|
196
228
|
|
|
197
229
|
| Surface | Status |
|
|
198
230
|
|---------|--------|
|
|
@@ -200,13 +232,11 @@ Support levels are defined in **[SUPPORT_TIERS.md](SUPPORT_TIERS.md)**. Short ve
|
|
|
200
232
|
| AI — `q:llm`, `q:knowledge`, `q:agent` | **Beta** — validated end-to-end against a live Ollama server |
|
|
201
233
|
| `q:team` (multi-agent handoff) | Beta, less exercised |
|
|
202
234
|
| Jobs, messaging, websockets, mail, file uploads, `ui:*`, terminal target | **Experimental** — they run, but no API stability promise |
|
|
203
|
-
| Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) | Experimental, and a full-trust escape hatch — see [SECURITY.md](SECURITY.md) |
|
|
235
|
+
| Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) | Experimental, and a full-trust escape hatch — see [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) |
|
|
204
236
|
|
|
205
237
|
A functional audit in 2026-09 found that several of these surfaces had never been run
|
|
206
|
-
end-to-end despite being documented as complete.
|
|
207
|
-
|
|
208
|
-
[`AUDIT_FIX_PLAN.md`](AUDIT_FIX_PLAN.md). Feature status is now verified by execution
|
|
209
|
-
rather than asserted by hand.
|
|
238
|
+
end-to-end despite being documented as complete. They were fixed or re-labelled, and
|
|
239
|
+
feature status is now verified by execution rather than asserted by hand.
|
|
210
240
|
|
|
211
241
|
Pre-1.0: APIs may change between minor versions.
|
|
212
242
|
|
|
@@ -221,24 +251,24 @@ quantum/
|
|
|
221
251
|
│ ├── runtime/ # Execution engine, web server, renderer
|
|
222
252
|
│ └── cli/ # Command-line entry point
|
|
223
253
|
├── examples/ # runnable .q examples
|
|
224
|
-
├── tests/ # pytest suite (~
|
|
254
|
+
├── tests/ # pytest suite (~3.8k tests)
|
|
225
255
|
├── scripts/ # dev tools
|
|
226
256
|
└── docs/ # VitePress documentation
|
|
227
257
|
```
|
|
228
258
|
|
|
229
259
|
Adding a tag is one parser + one executor + a registry entry — see
|
|
230
|
-
[CONTRIBUTING.md](CONTRIBUTING.md).
|
|
260
|
+
[CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md).
|
|
231
261
|
|
|
232
262
|
---
|
|
233
263
|
|
|
234
264
|
## Contributing
|
|
235
265
|
|
|
236
|
-
Read **[CONTRIBUTING.md](CONTRIBUTING.md)** for dev setup and how the modular
|
|
266
|
+
Read **[CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md)** for dev setup and how the modular
|
|
237
267
|
parser/executor architecture works. By participating you agree to the
|
|
238
|
-
[Code of Conduct](CODE_OF_CONDUCT.md).
|
|
268
|
+
[Code of Conduct](https://github.com/danielgregorio/quantum/blob/main/CODE_OF_CONDUCT.md).
|
|
239
269
|
|
|
240
|
-
Found a security issue? Follow [SECURITY.md](SECURITY.md) — **do not** open a public issue.
|
|
270
|
+
Found a security issue? Follow [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) — **do not** open a public issue.
|
|
241
271
|
|
|
242
272
|
## License
|
|
243
273
|
|
|
244
|
-
MIT — see [LICENSE](LICENSE).
|
|
274
|
+
MIT — see [LICENSE](https://github.com/danielgregorio/quantum/blob/main/LICENSE).
|
|
@@ -5,6 +5,8 @@ These tests verify that the compatibility layer works correctly
|
|
|
5
5
|
on both CPython and PyPy implementations.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
+
import sys
|
|
9
|
+
|
|
8
10
|
import pytest
|
|
9
11
|
import platform
|
|
10
12
|
from unittest.mock import patch, MagicMock
|
|
@@ -177,6 +179,14 @@ class TestQuantumPyPyAdapter:
|
|
|
177
179
|
assert isinstance(memory, float)
|
|
178
180
|
assert memory >= 0
|
|
179
181
|
|
|
182
|
+
def test_get_memory_usage_sem_psutil(self, monkeypatch):
|
|
183
|
+
# O fallback importava `resource` fora do try; `resource` so existe
|
|
184
|
+
# em POSIX, entao sem psutil a funcao quebrava no Windows.
|
|
185
|
+
monkeypatch.setitem(sys.modules, 'psutil', None)
|
|
186
|
+
memory = QuantumPyPyAdapter.get_memory_usage()
|
|
187
|
+
assert isinstance(memory, float)
|
|
188
|
+
assert memory >= 0
|
|
189
|
+
|
|
180
190
|
def test_gc_collect(self):
|
|
181
191
|
# Should not raise
|
|
182
192
|
QuantumPyPyAdapter.gc_collect()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|