quantum-framework 0.9.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.
- quantum_framework-0.9.0/LICENSE +21 -0
- quantum_framework-0.9.0/PKG-INFO +244 -0
- quantum_framework-0.9.0/README.md +202 -0
- quantum_framework-0.9.0/pyproject.toml +88 -0
- quantum_framework-0.9.0/quantum/__init__.py +1 -0
- quantum_framework-0.9.0/quantum/cli/__init__.py +2 -0
- quantum_framework-0.9.0/quantum/cli/commands/__init__.py +15 -0
- quantum_framework-0.9.0/quantum/cli/commands/build.py +417 -0
- quantum_framework-0.9.0/quantum/cli/commands/dev.py +185 -0
- quantum_framework-0.9.0/quantum/cli/commands/docs.py +329 -0
- quantum_framework-0.9.0/quantum/cli/commands/lint.py +523 -0
- quantum_framework-0.9.0/quantum/cli/commands/migrate.py +527 -0
- quantum_framework-0.9.0/quantum/cli/commands/new.py +622 -0
- quantum_framework-0.9.0/quantum/cli/commands/serve.py +190 -0
- quantum_framework-0.9.0/quantum/cli/commands/test.py +193 -0
- quantum_framework-0.9.0/quantum/cli/deploy.py +810 -0
- quantum_framework-0.9.0/quantum/cli/hot_reload.py +951 -0
- quantum_framework-0.9.0/quantum/cli/jobs.py +356 -0
- quantum_framework-0.9.0/quantum/cli/mq.py +582 -0
- quantum_framework-0.9.0/quantum/cli/pkg.py +390 -0
- quantum_framework-0.9.0/quantum/cli/runner.py +547 -0
- quantum_framework-0.9.0/quantum/cli/server_process.py +159 -0
- quantum_framework-0.9.0/quantum/cli/utils.py +334 -0
- quantum_framework-0.9.0/quantum/compiler/__init__.py +30 -0
- quantum_framework-0.9.0/quantum/compiler/base_generator.py +367 -0
- quantum_framework-0.9.0/quantum/compiler/cli.py +295 -0
- quantum_framework-0.9.0/quantum/compiler/expression_transformer.py +444 -0
- quantum_framework-0.9.0/quantum/compiler/javascript/__init__.py +10 -0
- quantum_framework-0.9.0/quantum/compiler/javascript/generator.py +659 -0
- quantum_framework-0.9.0/quantum/compiler/optimizer.py +270 -0
- quantum_framework-0.9.0/quantum/compiler/python/__init__.py +10 -0
- quantum_framework-0.9.0/quantum/compiler/python/generator.py +883 -0
- quantum_framework-0.9.0/quantum/compiler/python/runtime.py +863 -0
- quantum_framework-0.9.0/quantum/compiler/transpiler.py +330 -0
- quantum_framework-0.9.0/quantum/core/__init__.py +3 -0
- quantum_framework-0.9.0/quantum/core/ast_nodes.py +2611 -0
- quantum_framework-0.9.0/quantum/core/expression_diagnostics.py +87 -0
- quantum_framework-0.9.0/quantum/core/expression_stdlib.py +148 -0
- quantum_framework-0.9.0/quantum/core/expressions.py +591 -0
- quantum_framework-0.9.0/quantum/core/features/agents/src/__init__.py +30 -0
- quantum_framework-0.9.0/quantum/core/features/agents/src/ast_node.py +540 -0
- quantum_framework-0.9.0/quantum/core/features/conditionals/src/__init__.py +8 -0
- quantum_framework-0.9.0/quantum/core/features/conditionals/src/ast_node.py +68 -0
- quantum_framework-0.9.0/quantum/core/features/data_fetching/src/__init__.py +21 -0
- quantum_framework-0.9.0/quantum/core/features/data_fetching/src/ast_node.py +312 -0
- quantum_framework-0.9.0/quantum/core/features/data_fetching/src/desktop_adapter.py +351 -0
- quantum_framework-0.9.0/quantum/core/features/data_fetching/src/html_adapter.py +474 -0
- quantum_framework-0.9.0/quantum/core/features/data_fetching/src/parser.py +225 -0
- quantum_framework-0.9.0/quantum/core/features/data_import/src/__init__.py +0 -0
- quantum_framework-0.9.0/quantum/core/features/data_import/src/ast_node.py +291 -0
- quantum_framework-0.9.0/quantum/core/features/data_import/src/runtime.py +538 -0
- quantum_framework-0.9.0/quantum/core/features/dump/src/__init__.py +12 -0
- quantum_framework-0.9.0/quantum/core/features/dump/src/ast_node.py +106 -0
- quantum_framework-0.9.0/quantum/core/features/dump/src/parser.py +61 -0
- quantum_framework-0.9.0/quantum/core/features/dump/src/runtime.py +246 -0
- quantum_framework-0.9.0/quantum/core/features/functions/src/__init__.py +8 -0
- quantum_framework-0.9.0/quantum/core/features/functions/src/ast_node.py +149 -0
- quantum_framework-0.9.0/quantum/core/features/game_engine_2d/src/__init__.py +19 -0
- quantum_framework-0.9.0/quantum/core/features/game_engine_2d/src/ast_nodes.py +1719 -0
- quantum_framework-0.9.0/quantum/core/features/game_engine_2d/src/parser.py +983 -0
- quantum_framework-0.9.0/quantum/core/features/invocation/src/__init__.py +0 -0
- quantum_framework-0.9.0/quantum/core/features/invocation/src/ast_node.py +146 -0
- quantum_framework-0.9.0/quantum/core/features/invocation/src/runtime.py +327 -0
- quantum_framework-0.9.0/quantum/core/features/knowledge_base/src/__init__.py +6 -0
- quantum_framework-0.9.0/quantum/core/features/knowledge_base/src/ast_node.py +113 -0
- quantum_framework-0.9.0/quantum/core/features/knowledge_base/src/parser.py +82 -0
- quantum_framework-0.9.0/quantum/core/features/logging/src/__init__.py +12 -0
- quantum_framework-0.9.0/quantum/core/features/logging/src/ast_node.py +111 -0
- quantum_framework-0.9.0/quantum/core/features/logging/src/parser.py +50 -0
- quantum_framework-0.9.0/quantum/core/features/logging/src/runtime.py +190 -0
- quantum_framework-0.9.0/quantum/core/features/loops/src/__init__.py +8 -0
- quantum_framework-0.9.0/quantum/core/features/loops/src/ast_node.py +60 -0
- quantum_framework-0.9.0/quantum/core/features/query/src/__init__.py +0 -0
- quantum_framework-0.9.0/quantum/core/features/query/src/database_service.py +322 -0
- quantum_framework-0.9.0/quantum/core/features/query/src/query_validators.py +20 -0
- quantum_framework-0.9.0/quantum/core/features/state_management/src/__init__.py +11 -0
- quantum_framework-0.9.0/quantum/core/features/state_management/src/ast_node.py +228 -0
- quantum_framework-0.9.0/quantum/core/features/terminal_engine/src/__init__.py +21 -0
- quantum_framework-0.9.0/quantum/core/features/terminal_engine/src/ast_nodes.py +560 -0
- quantum_framework-0.9.0/quantum/core/features/terminal_engine/src/parser.py +361 -0
- quantum_framework-0.9.0/quantum/core/features/testing_engine/src/__init__.py +41 -0
- quantum_framework-0.9.0/quantum/core/features/testing_engine/src/ast_nodes.py +1212 -0
- quantum_framework-0.9.0/quantum/core/features/testing_engine/src/parser.py +604 -0
- quantum_framework-0.9.0/quantum/core/features/theming/src/__init__.py +48 -0
- quantum_framework-0.9.0/quantum/core/features/theming/src/ast_node.py +137 -0
- quantum_framework-0.9.0/quantum/core/features/theming/src/presets.py +405 -0
- quantum_framework-0.9.0/quantum/core/features/ui_engine/src/__init__.py +20 -0
- quantum_framework-0.9.0/quantum/core/features/ui_engine/src/ast_nodes.py +1854 -0
- quantum_framework-0.9.0/quantum/core/features/ui_engine/src/parser.py +1106 -0
- quantum_framework-0.9.0/quantum/core/features/websocket/src/__init__.py +24 -0
- quantum_framework-0.9.0/quantum/core/features/websocket/src/ast_node.py +247 -0
- quantum_framework-0.9.0/quantum/core/html_compat.py +299 -0
- quantum_framework-0.9.0/quantum/core/parser.py +1235 -0
- quantum_framework-0.9.0/quantum/core/parser_registry.py +213 -0
- quantum_framework-0.9.0/quantum/core/parsers/__init__.py +76 -0
- quantum_framework-0.9.0/quantum/core/parsers/ai/__init__.py +12 -0
- quantum_framework-0.9.0/quantum/core/parsers/ai/agent_parser.py +106 -0
- quantum_framework-0.9.0/quantum/core/parsers/ai/knowledge_parser.py +86 -0
- quantum_framework-0.9.0/quantum/core/parsers/ai/llm_parser.py +78 -0
- quantum_framework-0.9.0/quantum/core/parsers/ai/team_parser.py +88 -0
- quantum_framework-0.9.0/quantum/core/parsers/base.py +322 -0
- quantum_framework-0.9.0/quantum/core/parsers/composition/__init__.py +10 -0
- quantum_framework-0.9.0/quantum/core/parsers/composition/import_parser.py +50 -0
- quantum_framework-0.9.0/quantum/core/parsers/composition/slot_parser.py +48 -0
- quantum_framework-0.9.0/quantum/core/parsers/control_flow/__init__.py +11 -0
- quantum_framework-0.9.0/quantum/core/parsers/control_flow/if_parser.py +68 -0
- quantum_framework-0.9.0/quantum/core/parsers/control_flow/loop_parser.py +105 -0
- quantum_framework-0.9.0/quantum/core/parsers/control_flow/set_parser.py +89 -0
- quantum_framework-0.9.0/quantum/core/parsers/data/__init__.py +12 -0
- quantum_framework-0.9.0/quantum/core/parsers/data/data_parser.py +217 -0
- quantum_framework-0.9.0/quantum/core/parsers/data/invoke_parser.py +116 -0
- quantum_framework-0.9.0/quantum/core/parsers/data/query_parser.py +188 -0
- quantum_framework-0.9.0/quantum/core/parsers/data/transaction_parser.py +77 -0
- quantum_framework-0.9.0/quantum/core/parsers/events/__init__.py +9 -0
- quantum_framework-0.9.0/quantum/core/parsers/events/dispatch_event_parser.py +44 -0
- quantum_framework-0.9.0/quantum/core/parsers/forms/__init__.py +11 -0
- quantum_framework-0.9.0/quantum/core/parsers/forms/action_parser.py +54 -0
- quantum_framework-0.9.0/quantum/core/parsers/forms/flash_parser.py +34 -0
- quantum_framework-0.9.0/quantum/core/parsers/forms/redirect_parser.py +33 -0
- quantum_framework-0.9.0/quantum/core/parsers/functions/__init__.py +11 -0
- quantum_framework-0.9.0/quantum/core/parsers/functions/function_parser.py +137 -0
- quantum_framework-0.9.0/quantum/core/parsers/functions/param_parser.py +66 -0
- quantum_framework-0.9.0/quantum/core/parsers/functions/return_parser.py +31 -0
- quantum_framework-0.9.0/quantum/core/parsers/html/__init__.py +10 -0
- quantum_framework-0.9.0/quantum/core/parsers/html/component_call_parser.py +130 -0
- quantum_framework-0.9.0/quantum/core/parsers/html/html_parser.py +115 -0
- quantum_framework-0.9.0/quantum/core/parsers/jobs/__init__.py +11 -0
- quantum_framework-0.9.0/quantum/core/parsers/jobs/job_parser.py +71 -0
- quantum_framework-0.9.0/quantum/core/parsers/jobs/schedule_parser.py +62 -0
- quantum_framework-0.9.0/quantum/core/parsers/jobs/thread_parser.py +57 -0
- quantum_framework-0.9.0/quantum/core/parsers/messaging/__init__.py +17 -0
- quantum_framework-0.9.0/quantum/core/parsers/messaging/message_ack_parser.py +30 -0
- quantum_framework-0.9.0/quantum/core/parsers/messaging/message_nack_parser.py +30 -0
- quantum_framework-0.9.0/quantum/core/parsers/messaging/message_parser.py +114 -0
- quantum_framework-0.9.0/quantum/core/parsers/messaging/queue_parser.py +61 -0
- quantum_framework-0.9.0/quantum/core/parsers/messaging/websocket_parser.py +121 -0
- quantum_framework-0.9.0/quantum/core/parsers/persistence/__init__.py +9 -0
- quantum_framework-0.9.0/quantum/core/parsers/persistence/persist_parser.py +64 -0
- quantum_framework-0.9.0/quantum/core/parsers/routing/__init__.py +9 -0
- quantum_framework-0.9.0/quantum/core/parsers/routing/route_parser.py +41 -0
- quantum_framework-0.9.0/quantum/core/parsers/scripting/__init__.py +12 -0
- quantum_framework-0.9.0/quantum/core/parsers/scripting/pyclass_parser.py +62 -0
- quantum_framework-0.9.0/quantum/core/parsers/scripting/pydecorator_parser.py +68 -0
- quantum_framework-0.9.0/quantum/core/parsers/scripting/pyimport_parser.py +52 -0
- quantum_framework-0.9.0/quantum/core/parsers/scripting/python_parser.py +49 -0
- quantum_framework-0.9.0/quantum/core/parsers/services/__init__.py +12 -0
- quantum_framework-0.9.0/quantum/core/parsers/services/dump_parser.py +52 -0
- quantum_framework-0.9.0/quantum/core/parsers/services/file_parser.py +48 -0
- quantum_framework-0.9.0/quantum/core/parsers/services/log_parser.py +46 -0
- quantum_framework-0.9.0/quantum/core/parsers/services/mail_parser.py +65 -0
- quantum_framework-0.9.0/quantum/core/tiers.py +82 -0
- quantum_framework-0.9.0/quantum/packages/__init__.py +28 -0
- quantum_framework-0.9.0/quantum/packages/manager.py +413 -0
- quantum_framework-0.9.0/quantum/packages/manifest.py +351 -0
- quantum_framework-0.9.0/quantum/packages/registry.py +399 -0
- quantum_framework-0.9.0/quantum/packages/resolver.py +336 -0
- quantum_framework-0.9.0/quantum/plugins/__init__.py +33 -0
- quantum_framework-0.9.0/quantum/plugins/hooks.py +329 -0
- quantum_framework-0.9.0/quantum/plugins/loader.py +479 -0
- quantum_framework-0.9.0/quantum/plugins/manifest.py +336 -0
- quantum_framework-0.9.0/quantum/plugins/registry.py +371 -0
- quantum_framework-0.9.0/quantum/runtime/__init__.py +28 -0
- quantum_framework-0.9.0/quantum/runtime/action_handler.py +443 -0
- quantum_framework-0.9.0/quantum/runtime/adapters/__init__.py +88 -0
- quantum_framework-0.9.0/quantum/runtime/adapters/memory_adapter.py +690 -0
- quantum_framework-0.9.0/quantum/runtime/adapters/rabbitmq_adapter.py +715 -0
- quantum_framework-0.9.0/quantum/runtime/adapters/redis_adapter.py +582 -0
- quantum_framework-0.9.0/quantum/runtime/adapters/sqlite_adapter.py +414 -0
- quantum_framework-0.9.0/quantum/runtime/agent_service.py +1133 -0
- quantum_framework-0.9.0/quantum/runtime/api_server.py +86 -0
- quantum_framework-0.9.0/quantum/runtime/ast_cache.py +506 -0
- quantum_framework-0.9.0/quantum/runtime/auth_service.py +267 -0
- quantum_framework-0.9.0/quantum/runtime/component.py +990 -0
- quantum_framework-0.9.0/quantum/runtime/component_composer.py +319 -0
- quantum_framework-0.9.0/quantum/runtime/component_resolver.py +174 -0
- quantum_framework-0.9.0/quantum/runtime/database_service.py +598 -0
- quantum_framework-0.9.0/quantum/runtime/email_service.py +162 -0
- quantum_framework-0.9.0/quantum/runtime/error_handler.py +295 -0
- quantum_framework-0.9.0/quantum/runtime/execution_context.py +286 -0
- quantum_framework-0.9.0/quantum/runtime/executor_registry.py +171 -0
- quantum_framework-0.9.0/quantum/runtime/executors/__init__.py +71 -0
- quantum_framework-0.9.0/quantum/runtime/executors/ai/__init__.py +12 -0
- quantum_framework-0.9.0/quantum/runtime/executors/ai/agent_executor.py +217 -0
- quantum_framework-0.9.0/quantum/runtime/executors/ai/knowledge_executor.py +114 -0
- quantum_framework-0.9.0/quantum/runtime/executors/ai/llm_executor.py +153 -0
- quantum_framework-0.9.0/quantum/runtime/executors/ai/team_executor.py +171 -0
- quantum_framework-0.9.0/quantum/runtime/executors/base.py +262 -0
- quantum_framework-0.9.0/quantum/runtime/executors/control_flow/__init__.py +11 -0
- quantum_framework-0.9.0/quantum/runtime/executors/control_flow/if_executor.py +93 -0
- quantum_framework-0.9.0/quantum/runtime/executors/control_flow/loop_executor.py +307 -0
- quantum_framework-0.9.0/quantum/runtime/executors/control_flow/set_executor.py +412 -0
- quantum_framework-0.9.0/quantum/runtime/executors/data/__init__.py +12 -0
- quantum_framework-0.9.0/quantum/runtime/executors/data/data_executor.py +145 -0
- quantum_framework-0.9.0/quantum/runtime/executors/data/invoke_executor.py +176 -0
- quantum_framework-0.9.0/quantum/runtime/executors/data/query_executor.py +256 -0
- quantum_framework-0.9.0/quantum/runtime/executors/data/transaction_executor.py +91 -0
- quantum_framework-0.9.0/quantum/runtime/executors/jobs/__init__.py +11 -0
- quantum_framework-0.9.0/quantum/runtime/executors/jobs/job_executor.py +190 -0
- quantum_framework-0.9.0/quantum/runtime/executors/jobs/schedule_executor.py +132 -0
- quantum_framework-0.9.0/quantum/runtime/executors/jobs/thread_executor.py +127 -0
- quantum_framework-0.9.0/quantum/runtime/executors/messaging/__init__.py +17 -0
- quantum_framework-0.9.0/quantum/runtime/executors/messaging/message_ack_executor.py +51 -0
- quantum_framework-0.9.0/quantum/runtime/executors/messaging/message_executor.py +174 -0
- quantum_framework-0.9.0/quantum/runtime/executors/messaging/queue_executor.py +103 -0
- quantum_framework-0.9.0/quantum/runtime/executors/messaging/websocket_executor.py +197 -0
- quantum_framework-0.9.0/quantum/runtime/executors/scripting/__init__.py +11 -0
- quantum_framework-0.9.0/quantum/runtime/executors/scripting/pyclass_executor.py +90 -0
- quantum_framework-0.9.0/quantum/runtime/executors/scripting/pyimport_executor.py +81 -0
- quantum_framework-0.9.0/quantum/runtime/executors/scripting/python_executor.py +249 -0
- quantum_framework-0.9.0/quantum/runtime/executors/services/__init__.py +12 -0
- quantum_framework-0.9.0/quantum/runtime/executors/services/dump_executor.py +72 -0
- quantum_framework-0.9.0/quantum/runtime/executors/services/file_executor.py +89 -0
- quantum_framework-0.9.0/quantum/runtime/executors/services/log_executor.py +77 -0
- quantum_framework-0.9.0/quantum/runtime/executors/services/mail_executor.py +81 -0
- quantum_framework-0.9.0/quantum/runtime/expression_cache.py +498 -0
- quantum_framework-0.9.0/quantum/runtime/file_upload_service.py +326 -0
- quantum_framework-0.9.0/quantum/runtime/function_registry.py +118 -0
- quantum_framework-0.9.0/quantum/runtime/game_builder.py +166 -0
- quantum_framework-0.9.0/quantum/runtime/game_code_generator.py +2371 -0
- quantum_framework-0.9.0/quantum/runtime/game_templates.py +2006 -0
- quantum_framework-0.9.0/quantum/runtime/godot_code_generator.py +4681 -0
- quantum_framework-0.9.0/quantum/runtime/godot_templates.py +1449 -0
- quantum_framework-0.9.0/quantum/runtime/job_executor.py +1599 -0
- quantum_framework-0.9.0/quantum/runtime/knowledge_service.py +500 -0
- quantum_framework-0.9.0/quantum/runtime/llm_cache.py +100 -0
- quantum_framework-0.9.0/quantum/runtime/llm_providers.py +704 -0
- quantum_framework-0.9.0/quantum/runtime/llm_service.py +287 -0
- quantum_framework-0.9.0/quantum/runtime/logging_setup.py +140 -0
- quantum_framework-0.9.0/quantum/runtime/message_broker.py +364 -0
- quantum_framework-0.9.0/quantum/runtime/message_queue_service.py +571 -0
- quantum_framework-0.9.0/quantum/runtime/param_validation.py +184 -0
- quantum_framework-0.9.0/quantum/runtime/pypy_compat.py +315 -0
- quantum_framework-0.9.0/quantum/runtime/python_bridge.py +698 -0
- quantum_framework-0.9.0/quantum/runtime/query_validators.py +304 -0
- quantum_framework-0.9.0/quantum/runtime/renderer.py +733 -0
- quantum_framework-0.9.0/quantum/runtime/service_container.py +444 -0
- quantum_framework-0.9.0/quantum/runtime/terminal_builder.py +76 -0
- quantum_framework-0.9.0/quantum/runtime/terminal_code_generator.py +607 -0
- quantum_framework-0.9.0/quantum/runtime/terminal_templates.py +243 -0
- quantum_framework-0.9.0/quantum/runtime/testing_builder.py +77 -0
- quantum_framework-0.9.0/quantum/runtime/testing_code_generator.py +833 -0
- quantum_framework-0.9.0/quantum/runtime/testing_templates.py +85 -0
- quantum_framework-0.9.0/quantum/runtime/ui_builder.py +188 -0
- quantum_framework-0.9.0/quantum/runtime/ui_desktop_adapter.py +1730 -0
- quantum_framework-0.9.0/quantum/runtime/ui_desktop_templates.py +307 -0
- quantum_framework-0.9.0/quantum/runtime/ui_html_adapter.py +2691 -0
- quantum_framework-0.9.0/quantum/runtime/ui_html_templates.py +2297 -0
- quantum_framework-0.9.0/quantum/runtime/ui_mobile_adapter.py +1832 -0
- quantum_framework-0.9.0/quantum/runtime/ui_mobile_templates.py +1003 -0
- quantum_framework-0.9.0/quantum/runtime/ui_textual_adapter.py +1866 -0
- quantum_framework-0.9.0/quantum/runtime/ui_textual_templates.py +45 -0
- quantum_framework-0.9.0/quantum/runtime/ui_tokens.py +465 -0
- quantum_framework-0.9.0/quantum/runtime/ui_validator.py +365 -0
- quantum_framework-0.9.0/quantum/runtime/validators.py +256 -0
- quantum_framework-0.9.0/quantum/runtime/web_server.py +1766 -0
- quantum_framework-0.9.0/quantum/runtime/websocket_adapter.py +501 -0
- quantum_framework-0.9.0/quantum/runtime/websocket_service.py +585 -0
- quantum_framework-0.9.0/quantum/runtime/websocket_transport.py +289 -0
- quantum_framework-0.9.0/quantum/runtime/wsgi.py +101 -0
- quantum_framework-0.9.0/quantum/utils/__init__.py +1 -0
- quantum_framework-0.9.0/quantum_framework.egg-info/PKG-INFO +244 -0
- quantum_framework-0.9.0/quantum_framework.egg-info/SOURCES.txt +301 -0
- quantum_framework-0.9.0/quantum_framework.egg-info/dependency_links.txt +1 -0
- quantum_framework-0.9.0/quantum_framework.egg-info/entry_points.txt +2 -0
- quantum_framework-0.9.0/quantum_framework.egg-info/requires.txt +27 -0
- quantum_framework-0.9.0/quantum_framework.egg-info/top_level.txt +1 -0
- quantum_framework-0.9.0/setup.cfg +4 -0
- quantum_framework-0.9.0/tests/test_agent.py +531 -0
- quantum_framework-0.9.0/tests/test_animations.py +616 -0
- quantum_framework-0.9.0/tests/test_ast_cache.py +544 -0
- quantum_framework-0.9.0/tests/test_cli_commands.py +467 -0
- quantum_framework-0.9.0/tests/test_component_library.py +587 -0
- quantum_framework-0.9.0/tests/test_data_fetching.py +593 -0
- quantum_framework-0.9.0/tests/test_desktop_bridge.py +442 -0
- quantum_framework-0.9.0/tests/test_expression_cache.py +442 -0
- quantum_framework-0.9.0/tests/test_form_validation.py +595 -0
- quantum_framework-0.9.0/tests/test_game_codegen.py +1272 -0
- quantum_framework-0.9.0/tests/test_game_e2e.py +350 -0
- quantum_framework-0.9.0/tests/test_game_engine.py +277 -0
- quantum_framework-0.9.0/tests/test_game_parser.py +1493 -0
- quantum_framework-0.9.0/tests/test_godot_codegen.py +4864 -0
- quantum_framework-0.9.0/tests/test_job_executor.py +389 -0
- quantum_framework-0.9.0/tests/test_llm_providers.py +518 -0
- quantum_framework-0.9.0/tests/test_message_broker.py +445 -0
- quantum_framework-0.9.0/tests/test_message_queue.py +659 -0
- quantum_framework-0.9.0/tests/test_mobile_target.py +465 -0
- quantum_framework-0.9.0/tests/test_multi_agent.py +746 -0
- quantum_framework-0.9.0/tests/test_packages.py +747 -0
- quantum_framework-0.9.0/tests/test_plugins.py +671 -0
- quantum_framework-0.9.0/tests/test_projects_blog_components_admin.py +514 -0
- quantum_framework-0.9.0/tests/test_pypy_compat.py +376 -0
- quantum_framework-0.9.0/tests/test_python_scripting.py +551 -0
- quantum_framework-0.9.0/tests/test_state_persistence.py +458 -0
- quantum_framework-0.9.0/tests/test_terminal_codegen.py +355 -0
- quantum_framework-0.9.0/tests/test_terminal_parser.py +432 -0
- quantum_framework-0.9.0/tests/test_testing_codegen.py +787 -0
- quantum_framework-0.9.0/tests/test_testing_parser.py +671 -0
- quantum_framework-0.9.0/tests/test_theming.py +436 -0
- quantum_framework-0.9.0/tests/test_ui_html_adapter.py +361 -0
- quantum_framework-0.9.0/tests/test_ui_parity.py +743 -0
- quantum_framework-0.9.0/tests/test_ui_parser.py +551 -0
- quantum_framework-0.9.0/tests/test_ui_textual_adapter.py +249 -0
- quantum_framework-0.9.0/tests/test_websocket.py +508 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Daniel Gregorio
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: quantum-framework
|
|
3
|
+
Version: 0.9.0
|
|
4
|
+
Summary: Full-stack declarative framework for building web, desktop, and mobile applications
|
|
5
|
+
Author-email: Daniel Gregorio <danielgregorio2611@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://quantum.sargas.cloud
|
|
8
|
+
Project-URL: Documentation, https://quantum.sargas.cloud
|
|
9
|
+
Project-URL: Repository, https://github.com/danielgregorio/quantum
|
|
10
|
+
Keywords: framework,declarative,xml,web,desktop,mobile
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Framework :: Flask
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Requires-Python: >=3.12
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
License-File: LICENSE
|
|
19
|
+
Requires-Dist: flask>=3.0.0
|
|
20
|
+
Requires-Dist: pyyaml>=6.0
|
|
21
|
+
Requires-Dist: sqlparse>=0.4.4
|
|
22
|
+
Requires-Dist: gunicorn>=21.0.0
|
|
23
|
+
Requires-Dist: textual>=0.80.0
|
|
24
|
+
Requires-Dist: requests>=2.31.0
|
|
25
|
+
Requires-Dist: bcrypt>=4.1.0
|
|
26
|
+
Provides-Extra: dev
|
|
27
|
+
Requires-Dist: pytest>=7.4.0; extra == "dev"
|
|
28
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-mock>=3.11.1; extra == "dev"
|
|
30
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
31
|
+
Requires-Dist: ruff>=0.1.0; extra == "dev"
|
|
32
|
+
Provides-Extra: db
|
|
33
|
+
Requires-Dist: psycopg2-binary>=2.9.9; extra == "db"
|
|
34
|
+
Requires-Dist: pymysql>=1.1.0; extra == "db"
|
|
35
|
+
Provides-Extra: rag
|
|
36
|
+
Requires-Dist: chromadb>=0.5.0; extra == "rag"
|
|
37
|
+
Provides-Extra: jobs
|
|
38
|
+
Requires-Dist: apscheduler>=3.10.0; extra == "jobs"
|
|
39
|
+
Provides-Extra: websocket
|
|
40
|
+
Requires-Dist: websockets>=12.0; extra == "websocket"
|
|
41
|
+
Dynamic: license-file
|
|
42
|
+
|
|
43
|
+
# Quantum
|
|
44
|
+
|
|
45
|
+
[](https://github.com/danielgregorio/quantum/actions/workflows/ci.yml)
|
|
46
|
+
[](https://github.com/danielgregorio/quantum/actions/workflows/docker.yml)
|
|
47
|
+
[](https://danielgregorio.github.io/quantum/)
|
|
48
|
+
[](LICENSE)
|
|
49
|
+
|
|
50
|
+
> **Declarative web apps in XML, with AI and RAG built into the language.
|
|
51
|
+
> No build chain, no JavaScript, no frontend framework.**
|
|
52
|
+
|
|
53
|
+
Quantum is a full-stack framework whose language is markup. State, database queries,
|
|
54
|
+
forms, LLM calls and retrieval-augmented generation are all tags — not libraries you
|
|
55
|
+
wire together. It takes its philosophy from ColdFusion and Adobe Flex: the markup *is*
|
|
56
|
+
the app.
|
|
57
|
+
|
|
58
|
+
> ⚠️ **Pre-1.0, and honest about it.** See [Stability](#stability) — the table there
|
|
59
|
+
> reflects what has actually been executed end-to-end, not what is aspirational.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## The part that isn't like the others
|
|
64
|
+
|
|
65
|
+
Retrieval-augmented generation, as a language construct:
|
|
66
|
+
|
|
67
|
+
```xml
|
|
68
|
+
<q:component name="DocsBot">
|
|
69
|
+
<q:knowledge name="docs" model="phi3" embedModel="nomic-embed-text">
|
|
70
|
+
<q:source type="directory" path="./docs/" pattern="*.md" />
|
|
71
|
+
</q:knowledge>
|
|
72
|
+
|
|
73
|
+
<q:query name="answer" datasource="knowledge:docs" mode="rag">
|
|
74
|
+
SELECT answer FROM chunks WHERE content SIMILAR TO :question
|
|
75
|
+
<q:param name="question" value="{form.question}" type="string" />
|
|
76
|
+
</q:query>
|
|
77
|
+
|
|
78
|
+
<p>{answer.answer}</p>
|
|
79
|
+
</q:component>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
That indexes a directory, embeds it, stores the vectors, retrieves the relevant chunks
|
|
83
|
+
and asks the model — in the markup. There is no Python file behind it.
|
|
84
|
+
|
|
85
|
+
An agent with its own tools, same idea:
|
|
86
|
+
|
|
87
|
+
```xml
|
|
88
|
+
<q:agent name="calc" model="phi3" max_iterations="4">
|
|
89
|
+
<q:instruction>Use the add tool, then answer.</q:instruction>
|
|
90
|
+
|
|
91
|
+
<q:tool name="add" description="Add two numbers">
|
|
92
|
+
<q:param name="a" type="number" required="true" />
|
|
93
|
+
<q:param name="b" type="number" required="true" />
|
|
94
|
+
<q:function name="doAdd">
|
|
95
|
+
<q:set name="sum" value="{a + b}" type="number" />
|
|
96
|
+
<q:return value="{sum}" />
|
|
97
|
+
</q:function>
|
|
98
|
+
</q:tool>
|
|
99
|
+
|
|
100
|
+
<q:execute task="What is 17 plus 25?" />
|
|
101
|
+
</q:agent>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
The tool body is Quantum, not Python. The reasoning loop, the tool call and the type
|
|
105
|
+
coercion of the model's arguments are the runtime's job.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## The rest of the language
|
|
110
|
+
|
|
111
|
+
```xml
|
|
112
|
+
<q:component name="Orders">
|
|
113
|
+
<q:query name="orders" datasource="db">
|
|
114
|
+
SELECT id, customer, total FROM orders WHERE total > :min
|
|
115
|
+
<q:param name="min" value="100" type="decimal" />
|
|
116
|
+
</q:query>
|
|
117
|
+
|
|
118
|
+
<table>
|
|
119
|
+
<q:loop query="orders">
|
|
120
|
+
<tr><td>{orders.customer}</td><td>{orders.total}</td></tr>
|
|
121
|
+
</q:loop>
|
|
122
|
+
</table>
|
|
123
|
+
</q:component>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
`q:query` refuses to run SQL with an undeclared `:param` — parameterised queries are
|
|
127
|
+
enforced by the parser, not by discipline.
|
|
128
|
+
|
|
129
|
+
Also core: `q:set` with `session.` / `application.` / `request.` scopes, `q:if`,
|
|
130
|
+
`q:function`, `q:action` for form handling, `q:data` for CSV/JSON/XML import,
|
|
131
|
+
`q:import` / `q:slot` for composition.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Quick start
|
|
136
|
+
|
|
137
|
+
**Requirements:** Python 3.11+ and `pip`.
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
git clone https://github.com/danielgregorio/quantum.git
|
|
141
|
+
cd quantum
|
|
142
|
+
pip install -e ".[dev]"
|
|
143
|
+
|
|
144
|
+
quantum run examples/hello.q
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
[EXEC] Executing component: HelloWorld
|
|
149
|
+
[SUCCESS] Result: Hello World!
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
For the AI examples you also need an [Ollama](https://ollama.com) server and the RAG
|
|
153
|
+
extra:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
pip install -e ".[rag]"
|
|
157
|
+
ollama pull phi3 && ollama pull nomic-embed-text
|
|
158
|
+
export QUANTUM_LLM_BASE_URL=http://localhost:11434
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Declare datasources in `quantum.config.yaml` and `q:query` works with nothing else
|
|
162
|
+
running:
|
|
163
|
+
|
|
164
|
+
```yaml
|
|
165
|
+
datasources:
|
|
166
|
+
db:
|
|
167
|
+
driver: sqlite
|
|
168
|
+
database: ./data/app.db
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### CLI
|
|
172
|
+
|
|
173
|
+
| Command | What it does |
|
|
174
|
+
|---------|--------------|
|
|
175
|
+
| `run <file.q>` | Execute a component, app, or API |
|
|
176
|
+
| `start` | Start the web server |
|
|
177
|
+
| `deploy <dir>` | Deploy an application |
|
|
178
|
+
| `pkg` · `jobs` · `mq` · `migrate` | Packages, jobs, message queues, migrations |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Documentation
|
|
183
|
+
|
|
184
|
+
Full docs (VitePress) at **[danielgregorio.github.io/quantum](https://danielgregorio.github.io/quantum/)** and in
|
|
185
|
+
[`docs/`](docs/):
|
|
186
|
+
|
|
187
|
+
- [Getting Started](docs/guide/getting-started.md) · [Installation](docs/guide/installation.md) · [Quick Start](docs/guide/quick-start.md)
|
|
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)
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Stability
|
|
194
|
+
|
|
195
|
+
Support levels are defined in **[SUPPORT_TIERS.md](SUPPORT_TIERS.md)**. Short version:
|
|
196
|
+
|
|
197
|
+
| Surface | Status |
|
|
198
|
+
|---------|--------|
|
|
199
|
+
| Core language — `q:component`, `q:set`, `q:if`, `q:loop`, `q:function`, `q:query`, `q:action`, `q:invoke`, `q:data` | **Stable** |
|
|
200
|
+
| AI — `q:llm`, `q:knowledge`, `q:agent` | **Beta** — validated end-to-end against a live Ollama server |
|
|
201
|
+
| `q:team` (multi-agent handoff) | Beta, less exercised |
|
|
202
|
+
| 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) |
|
|
204
|
+
|
|
205
|
+
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. The findings and the fixes are in
|
|
207
|
+
[`FULL_AUDIT_2026-09.md`](FULL_AUDIT_2026-09.md) and
|
|
208
|
+
[`AUDIT_FIX_PLAN.md`](AUDIT_FIX_PLAN.md). Feature status is now verified by execution
|
|
209
|
+
rather than asserted by hand.
|
|
210
|
+
|
|
211
|
+
Pre-1.0: APIs may change between minor versions.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Project layout
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
quantum/
|
|
219
|
+
├── quantum/
|
|
220
|
+
│ ├── core/ # Parser & AST (registry-based, modular)
|
|
221
|
+
│ ├── runtime/ # Execution engine, web server, renderer
|
|
222
|
+
│ └── cli/ # Command-line entry point
|
|
223
|
+
├── examples/ # runnable .q examples
|
|
224
|
+
├── tests/ # pytest suite (~2.4k tests)
|
|
225
|
+
├── scripts/ # dev tools
|
|
226
|
+
└── docs/ # VitePress documentation
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Adding a tag is one parser + one executor + a registry entry — see
|
|
230
|
+
[CONTRIBUTING.md](CONTRIBUTING.md).
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Contributing
|
|
235
|
+
|
|
236
|
+
Read **[CONTRIBUTING.md](CONTRIBUTING.md)** for dev setup and how the modular
|
|
237
|
+
parser/executor architecture works. By participating you agree to the
|
|
238
|
+
[Code of Conduct](CODE_OF_CONDUCT.md).
|
|
239
|
+
|
|
240
|
+
Found a security issue? Follow [SECURITY.md](SECURITY.md) — **do not** open a public issue.
|
|
241
|
+
|
|
242
|
+
## License
|
|
243
|
+
|
|
244
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# Quantum
|
|
2
|
+
|
|
3
|
+
[](https://github.com/danielgregorio/quantum/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/danielgregorio/quantum/actions/workflows/docker.yml)
|
|
5
|
+
[](https://danielgregorio.github.io/quantum/)
|
|
6
|
+
[](LICENSE)
|
|
7
|
+
|
|
8
|
+
> **Declarative web apps in XML, with AI and RAG built into the language.
|
|
9
|
+
> No build chain, no JavaScript, no frontend framework.**
|
|
10
|
+
|
|
11
|
+
Quantum is a full-stack framework whose language is markup. State, database queries,
|
|
12
|
+
forms, LLM calls and retrieval-augmented generation are all tags — not libraries you
|
|
13
|
+
wire together. It takes its philosophy from ColdFusion and Adobe Flex: the markup *is*
|
|
14
|
+
the app.
|
|
15
|
+
|
|
16
|
+
> ⚠️ **Pre-1.0, and honest about it.** See [Stability](#stability) — the table there
|
|
17
|
+
> reflects what has actually been executed end-to-end, not what is aspirational.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## The part that isn't like the others
|
|
22
|
+
|
|
23
|
+
Retrieval-augmented generation, as a language construct:
|
|
24
|
+
|
|
25
|
+
```xml
|
|
26
|
+
<q:component name="DocsBot">
|
|
27
|
+
<q:knowledge name="docs" model="phi3" embedModel="nomic-embed-text">
|
|
28
|
+
<q:source type="directory" path="./docs/" pattern="*.md" />
|
|
29
|
+
</q:knowledge>
|
|
30
|
+
|
|
31
|
+
<q:query name="answer" datasource="knowledge:docs" mode="rag">
|
|
32
|
+
SELECT answer FROM chunks WHERE content SIMILAR TO :question
|
|
33
|
+
<q:param name="question" value="{form.question}" type="string" />
|
|
34
|
+
</q:query>
|
|
35
|
+
|
|
36
|
+
<p>{answer.answer}</p>
|
|
37
|
+
</q:component>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
That indexes a directory, embeds it, stores the vectors, retrieves the relevant chunks
|
|
41
|
+
and asks the model — in the markup. There is no Python file behind it.
|
|
42
|
+
|
|
43
|
+
An agent with its own tools, same idea:
|
|
44
|
+
|
|
45
|
+
```xml
|
|
46
|
+
<q:agent name="calc" model="phi3" max_iterations="4">
|
|
47
|
+
<q:instruction>Use the add tool, then answer.</q:instruction>
|
|
48
|
+
|
|
49
|
+
<q:tool name="add" description="Add two numbers">
|
|
50
|
+
<q:param name="a" type="number" required="true" />
|
|
51
|
+
<q:param name="b" type="number" required="true" />
|
|
52
|
+
<q:function name="doAdd">
|
|
53
|
+
<q:set name="sum" value="{a + b}" type="number" />
|
|
54
|
+
<q:return value="{sum}" />
|
|
55
|
+
</q:function>
|
|
56
|
+
</q:tool>
|
|
57
|
+
|
|
58
|
+
<q:execute task="What is 17 plus 25?" />
|
|
59
|
+
</q:agent>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The tool body is Quantum, not Python. The reasoning loop, the tool call and the type
|
|
63
|
+
coercion of the model's arguments are the runtime's job.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## The rest of the language
|
|
68
|
+
|
|
69
|
+
```xml
|
|
70
|
+
<q:component name="Orders">
|
|
71
|
+
<q:query name="orders" datasource="db">
|
|
72
|
+
SELECT id, customer, total FROM orders WHERE total > :min
|
|
73
|
+
<q:param name="min" value="100" type="decimal" />
|
|
74
|
+
</q:query>
|
|
75
|
+
|
|
76
|
+
<table>
|
|
77
|
+
<q:loop query="orders">
|
|
78
|
+
<tr><td>{orders.customer}</td><td>{orders.total}</td></tr>
|
|
79
|
+
</q:loop>
|
|
80
|
+
</table>
|
|
81
|
+
</q:component>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`q:query` refuses to run SQL with an undeclared `:param` — parameterised queries are
|
|
85
|
+
enforced by the parser, not by discipline.
|
|
86
|
+
|
|
87
|
+
Also core: `q:set` with `session.` / `application.` / `request.` scopes, `q:if`,
|
|
88
|
+
`q:function`, `q:action` for form handling, `q:data` for CSV/JSON/XML import,
|
|
89
|
+
`q:import` / `q:slot` for composition.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Quick start
|
|
94
|
+
|
|
95
|
+
**Requirements:** Python 3.11+ and `pip`.
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
git clone https://github.com/danielgregorio/quantum.git
|
|
99
|
+
cd quantum
|
|
100
|
+
pip install -e ".[dev]"
|
|
101
|
+
|
|
102
|
+
quantum run examples/hello.q
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
[EXEC] Executing component: HelloWorld
|
|
107
|
+
[SUCCESS] Result: Hello World!
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
For the AI examples you also need an [Ollama](https://ollama.com) server and the RAG
|
|
111
|
+
extra:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
pip install -e ".[rag]"
|
|
115
|
+
ollama pull phi3 && ollama pull nomic-embed-text
|
|
116
|
+
export QUANTUM_LLM_BASE_URL=http://localhost:11434
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Declare datasources in `quantum.config.yaml` and `q:query` works with nothing else
|
|
120
|
+
running:
|
|
121
|
+
|
|
122
|
+
```yaml
|
|
123
|
+
datasources:
|
|
124
|
+
db:
|
|
125
|
+
driver: sqlite
|
|
126
|
+
database: ./data/app.db
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### CLI
|
|
130
|
+
|
|
131
|
+
| Command | What it does |
|
|
132
|
+
|---------|--------------|
|
|
133
|
+
| `run <file.q>` | Execute a component, app, or API |
|
|
134
|
+
| `start` | Start the web server |
|
|
135
|
+
| `deploy <dir>` | Deploy an application |
|
|
136
|
+
| `pkg` · `jobs` · `mq` · `migrate` | Packages, jobs, message queues, migrations |
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Documentation
|
|
141
|
+
|
|
142
|
+
Full docs (VitePress) at **[danielgregorio.github.io/quantum](https://danielgregorio.github.io/quantum/)** and in
|
|
143
|
+
[`docs/`](docs/):
|
|
144
|
+
|
|
145
|
+
- [Getting Started](docs/guide/getting-started.md) · [Installation](docs/guide/installation.md) · [Quick Start](docs/guide/quick-start.md)
|
|
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)
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## Stability
|
|
152
|
+
|
|
153
|
+
Support levels are defined in **[SUPPORT_TIERS.md](SUPPORT_TIERS.md)**. Short version:
|
|
154
|
+
|
|
155
|
+
| Surface | Status |
|
|
156
|
+
|---------|--------|
|
|
157
|
+
| Core language — `q:component`, `q:set`, `q:if`, `q:loop`, `q:function`, `q:query`, `q:action`, `q:invoke`, `q:data` | **Stable** |
|
|
158
|
+
| AI — `q:llm`, `q:knowledge`, `q:agent` | **Beta** — validated end-to-end against a live Ollama server |
|
|
159
|
+
| `q:team` (multi-agent handoff) | Beta, less exercised |
|
|
160
|
+
| 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) |
|
|
162
|
+
|
|
163
|
+
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. The findings and the fixes are in
|
|
165
|
+
[`FULL_AUDIT_2026-09.md`](FULL_AUDIT_2026-09.md) and
|
|
166
|
+
[`AUDIT_FIX_PLAN.md`](AUDIT_FIX_PLAN.md). Feature status is now verified by execution
|
|
167
|
+
rather than asserted by hand.
|
|
168
|
+
|
|
169
|
+
Pre-1.0: APIs may change between minor versions.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Project layout
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
quantum/
|
|
177
|
+
├── quantum/
|
|
178
|
+
│ ├── core/ # Parser & AST (registry-based, modular)
|
|
179
|
+
│ ├── runtime/ # Execution engine, web server, renderer
|
|
180
|
+
│ └── cli/ # Command-line entry point
|
|
181
|
+
├── examples/ # runnable .q examples
|
|
182
|
+
├── tests/ # pytest suite (~2.4k tests)
|
|
183
|
+
├── scripts/ # dev tools
|
|
184
|
+
└── docs/ # VitePress documentation
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Adding a tag is one parser + one executor + a registry entry — see
|
|
188
|
+
[CONTRIBUTING.md](CONTRIBUTING.md).
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Contributing
|
|
193
|
+
|
|
194
|
+
Read **[CONTRIBUTING.md](CONTRIBUTING.md)** for dev setup and how the modular
|
|
195
|
+
parser/executor architecture works. By participating you agree to the
|
|
196
|
+
[Code of Conduct](CODE_OF_CONDUCT.md).
|
|
197
|
+
|
|
198
|
+
Found a security issue? Follow [SECURITY.md](SECURITY.md) — **do not** open a public issue.
|
|
199
|
+
|
|
200
|
+
## License
|
|
201
|
+
|
|
202
|
+
MIT — see [LICENSE](LICENSE).
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "quantum-framework"
|
|
7
|
+
version = "0.9.0"
|
|
8
|
+
description = "Full-stack declarative framework for building web, desktop, and mobile applications"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = {text = "MIT"}
|
|
11
|
+
authors = [
|
|
12
|
+
{name = "Daniel Gregorio", email = "danielgregorio2611@gmail.com"}
|
|
13
|
+
]
|
|
14
|
+
keywords = ["framework", "declarative", "xml", "web", "desktop", "mobile"]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Development Status :: 4 - Beta",
|
|
17
|
+
"Framework :: Flask",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"License :: OSI Approved :: MIT License",
|
|
20
|
+
"Programming Language :: Python :: 3.12",
|
|
21
|
+
]
|
|
22
|
+
requires-python = ">=3.12"
|
|
23
|
+
dependencies = [
|
|
24
|
+
"flask>=3.0.0",
|
|
25
|
+
"pyyaml>=6.0",
|
|
26
|
+
"sqlparse>=0.4.4",
|
|
27
|
+
"gunicorn>=21.0.0",
|
|
28
|
+
"textual>=0.80.0",
|
|
29
|
+
"requests>=2.31.0",
|
|
30
|
+
"bcrypt>=4.1.0",
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
[project.optional-dependencies]
|
|
34
|
+
dev = [
|
|
35
|
+
"pytest>=7.4.0",
|
|
36
|
+
"pytest-cov>=4.1.0",
|
|
37
|
+
"pytest-mock>=3.11.1",
|
|
38
|
+
"black>=23.0.0",
|
|
39
|
+
"ruff>=0.1.0",
|
|
40
|
+
]
|
|
41
|
+
db = [
|
|
42
|
+
"psycopg2-binary>=2.9.9",
|
|
43
|
+
"pymysql>=1.1.0",
|
|
44
|
+
]
|
|
45
|
+
rag = [
|
|
46
|
+
"chromadb>=0.5.0",
|
|
47
|
+
]
|
|
48
|
+
jobs = [
|
|
49
|
+
# Required by ScheduleService (q:schedule) — was undeclared, so
|
|
50
|
+
# q:schedule failed on any clean install.
|
|
51
|
+
"apscheduler>=3.10.0",
|
|
52
|
+
]
|
|
53
|
+
websocket = [
|
|
54
|
+
# The transport behind q:websocket. Without it the tag registers a
|
|
55
|
+
# connection and opens nothing — and says so, rather than pretending.
|
|
56
|
+
"websockets>=12.0",
|
|
57
|
+
]
|
|
58
|
+
|
|
59
|
+
[project.scripts]
|
|
60
|
+
quantum = "quantum.cli.runner:main"
|
|
61
|
+
|
|
62
|
+
[project.urls]
|
|
63
|
+
Homepage = "https://quantum.sargas.cloud"
|
|
64
|
+
Documentation = "https://quantum.sargas.cloud"
|
|
65
|
+
Repository = "https://github.com/danielgregorio/quantum"
|
|
66
|
+
|
|
67
|
+
[tool.setuptools.packages.find]
|
|
68
|
+
# So o pacote `quantum` e seus subpacotes. O glob anterior `quantum*` varria
|
|
69
|
+
# junto `quantum_admin` (app FastAPI separado, com deps proprias que nao sao
|
|
70
|
+
# do core), e as pastas `quantum-as4`/`quantum-lsp` (projetos irmaos,
|
|
71
|
+
# hifenados e nem importaveis) — 91 arquivos de peso morto no wheel. O ponto
|
|
72
|
+
# em `quantum.*` casa subpacotes; sem ele, `quantum_admin` nao entra.
|
|
73
|
+
include = ["quantum", "quantum.*"]
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
[tool.black]
|
|
77
|
+
line-length = 100
|
|
78
|
+
target-version = ['py311', 'py312']
|
|
79
|
+
|
|
80
|
+
[tool.ruff]
|
|
81
|
+
line-length = 100
|
|
82
|
+
select = ["E", "F", "W", "I"]
|
|
83
|
+
ignore = ["E501"]
|
|
84
|
+
|
|
85
|
+
[tool.pytest.ini_options]
|
|
86
|
+
testpaths = ["tests"]
|
|
87
|
+
python_files = ["test_*.py"]
|
|
88
|
+
addopts = "-v --tb=short"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Quantum main package
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Quantum CLI Commands
|
|
3
|
+
|
|
4
|
+
Each command module provides a click command group or command.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from quantum.cli.commands.new import new
|
|
8
|
+
from quantum.cli.commands.dev import dev
|
|
9
|
+
from quantum.cli.commands.build import build
|
|
10
|
+
from quantum.cli.commands.serve import serve
|
|
11
|
+
from quantum.cli.commands.test import test
|
|
12
|
+
from quantum.cli.commands.lint import lint
|
|
13
|
+
from quantum.cli.commands.docs import docs
|
|
14
|
+
|
|
15
|
+
__all__ = ['new', 'dev', 'build', 'serve', 'test', 'lint', 'docs']
|