quantum-framework 0.22.0__tar.gz → 1.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. quantum_framework-1.0.1/PKG-INFO +356 -0
  2. quantum_framework-1.0.1/README.md +307 -0
  3. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/pyproject.toml +34 -13
  4. quantum_framework-1.0.1/quantum/cli/__init__.py +3 -0
  5. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/hot_reload.py +18 -10
  6. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/jobs.py +2 -6
  7. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/migrations.py +1 -3
  8. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/mq.py +2 -9
  9. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/pkg.py +3 -5
  10. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/runner.py +47 -62
  11. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/server_process.py +55 -14
  12. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/base_generator.py +2 -7
  13. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/cli.py +2 -3
  14. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/expression_transformer.py +0 -1
  15. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/javascript/generator.py +4 -13
  16. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/optimizer.py +1 -2
  17. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/python/generator.py +4 -9
  18. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/python/runtime.py +1 -2
  19. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/transpiler.py +0 -1
  20. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/ast_nodes.py +69 -136
  21. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/docs_links.py +1 -1
  22. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/expression_stdlib.py +90 -6
  23. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/expressions.py +27 -3
  24. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/conditionals/src/ast_node.py +0 -2
  25. quantum_framework-1.0.1/quantum/core/features/data_import/src/ast_node.py +19 -0
  26. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/data_import/src/runtime.py +18 -16
  27. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/dump/src/runtime.py +4 -4
  28. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/functions/src/ast_node.py +4 -3
  29. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/game_engine_2d/src/ast_nodes.py +9 -12
  30. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/game_engine_2d/src/parser.py +7 -7
  31. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/invocation/src/runtime.py +24 -8
  32. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/knowledge_base/src/ast_node.py +1 -3
  33. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/knowledge_base/src/parser.py +3 -1
  34. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/logging/src/parser.py +0 -1
  35. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/logging/src/runtime.py +2 -1
  36. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/loops/src/ast_node.py +0 -2
  37. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/native_testing/src/parser.py +1 -1
  38. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/state_management/src/ast_node.py +2 -5
  39. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/terminal_engine/src/ast_nodes.py +0 -3
  40. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/terminal_engine/src/parser.py +1 -1
  41. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/theming/src/ast_node.py +0 -2
  42. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/ui_engine/src/ast_nodes.py +0 -2
  43. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/ui_engine/src/parser.py +2 -4
  44. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/websocket/src/ast_node.py +1 -1
  45. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parser.py +47 -42
  46. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/ai/agent_parser.py +4 -0
  47. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/ai/knowledge_parser.py +3 -1
  48. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/base.py +3 -2
  49. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/composition/import_parser.py +1 -1
  50. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/control_flow/loop_parser.py +13 -1
  51. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/control_flow/set_parser.py +43 -3
  52. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/data/data_parser.py +12 -27
  53. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/data/invoke_parser.py +17 -0
  54. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/data/query_parser.py +2 -0
  55. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/data/transaction_parser.py +18 -6
  56. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/functions/param_parser.py +2 -0
  57. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/html/component_call_parser.py +1 -1
  58. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/html/html_parser.py +1 -1
  59. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/jobs/job_parser.py +3 -0
  60. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/tiers.py +2 -2
  61. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/packages/manifest.py +0 -1
  62. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/packages/registry.py +0 -1
  63. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/packages/resolver.py +0 -1
  64. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/plugins/loader.py +2 -2
  65. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/plugins/registry.py +1 -1
  66. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/action_handler.py +16 -9
  67. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/adapters/memory_adapter.py +5 -23
  68. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/adapters/rabbitmq_adapter.py +4 -7
  69. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/adapters/redis_adapter.py +17 -8
  70. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/agent_service.py +2 -3
  71. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ast_cache.py +1 -3
  72. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/auth_service.py +6 -2
  73. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/component.py +11 -49
  74. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/component_resolver.py +0 -1
  75. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/database_service.py +28 -13
  76. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/dev_panel.py +1 -1
  77. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/error_handler.py +1 -2
  78. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/execution_context.py +21 -7
  79. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/ai/agent_executor.py +9 -1
  80. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/ai/knowledge_executor.py +1 -3
  81. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/ai/llm_executor.py +4 -2
  82. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/ai/team_executor.py +3 -1
  83. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/base.py +2 -0
  84. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/control_flow/if_executor.py +1 -1
  85. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/control_flow/loop_executor.py +73 -44
  86. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/control_flow/set_executor.py +31 -3
  87. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/data/data_executor.py +0 -2
  88. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/data/invoke_executor.py +1 -1
  89. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/data/transaction_executor.py +1 -1
  90. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/messaging/message_executor.py +1 -1
  91. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/messaging/websocket_executor.py +1 -1
  92. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/scripting/pyclass_executor.py +3 -3
  93. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/scripting/pyimport_executor.py +1 -1
  94. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/scripting/python_executor.py +2 -2
  95. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/services/dump_executor.py +1 -1
  96. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/services/log_executor.py +2 -2
  97. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/services/mail_executor.py +1 -1
  98. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/expression_cache.py +1 -1
  99. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/function_registry.py +0 -2
  100. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/game_builder.py +0 -1
  101. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/game_code_generator.py +15 -17
  102. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/game_templates.py +17 -19
  103. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/godot_code_generator.py +97 -117
  104. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/godot_templates.py +36 -38
  105. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/job_executor.py +68 -10
  106. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/knowledge_service.py +79 -15
  107. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/llm_providers.py +3 -3
  108. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/logging_setup.py +7 -2
  109. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/message_broker.py +1 -1
  110. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/message_queue_service.py +2 -2
  111. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/param_validation.py +44 -1
  112. quantum_framework-1.0.1/quantum/runtime/process_identity.py +76 -0
  113. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/pypy_compat.py +1 -1
  114. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/python_bridge.py +5 -2
  115. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/query_validators.py +1 -1
  116. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/renderer.py +11 -48
  117. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/service_container.py +10 -8
  118. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/table_params.py +1 -1
  119. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/terminal_builder.py +1 -2
  120. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/terminal_code_generator.py +4 -11
  121. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_builder.py +2 -2
  122. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_console.py +19 -1
  123. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_html_adapter.py +1 -4
  124. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_mobile_adapter.py +3 -7
  125. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_page_renderer.py +1 -1
  126. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_table_edit.py +1 -3
  127. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_textual_adapter.py +21 -24
  128. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_textual_templates.py +0 -1
  129. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_tokens.py +0 -1
  130. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_validator.py +2 -3
  131. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_view.py +1 -1
  132. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/web_config.py +11 -5
  133. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/web_html.py +25 -5
  134. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/web_lifecycle.py +32 -1
  135. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/web_server.py +31 -3
  136. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/websocket_adapter.py +1 -1
  137. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/websocket_service.py +1 -1
  138. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/websocket_transport.py +16 -3
  139. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/wsgi.py +4 -1
  140. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/services.py +17 -4
  141. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/login.q +1 -1
  142. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/auth_service.py +4 -4
  143. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/connector_service.py +4 -4
  144. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/crud.py +6 -6
  145. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/database.py +8 -8
  146. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/environment_service.py +4 -4
  147. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/models.py +40 -32
  148. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/settings_service.py +2 -20
  149. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/apps.py +13 -0
  150. quantum_framework-1.0.1/quantum_framework.egg-info/PKG-INFO +356 -0
  151. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_framework.egg-info/SOURCES.txt +1 -1
  152. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_framework.egg-info/requires.txt +1 -2
  153. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_agent.py +2 -6
  154. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_animations.py +1 -3
  155. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_ast_cache.py +1 -2
  156. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_component_library.py +0 -3
  157. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_form_validation.py +0 -2
  158. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_game_codegen.py +9 -12
  159. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_game_e2e.py +0 -2
  160. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_game_engine.py +1 -2
  161. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_game_parser.py +41 -45
  162. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_godot_codegen.py +440 -449
  163. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_job_executor.py +1 -4
  164. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_llm_providers.py +3 -6
  165. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_message_broker.py +1 -4
  166. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_message_queue.py +2 -4
  167. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_mobile_target.py +0 -12
  168. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_multi_agent.py +5 -10
  169. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_packages.py +1 -6
  170. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_plugins.py +2 -10
  171. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_pypy_compat.py +4 -4
  172. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_python_scripting.py +2 -5
  173. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_terminal_codegen.py +2 -6
  174. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_terminal_parser.py +2 -9
  175. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_theming.py +0 -2
  176. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_ui_html_adapter.py +0 -12
  177. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_ui_parity.py +4 -8
  178. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_ui_parser.py +1 -3
  179. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_ui_textual_adapter.py +0 -2
  180. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_websocket.py +3 -7
  181. quantum_framework-0.22.0/PKG-INFO +0 -285
  182. quantum_framework-0.22.0/README.md +0 -235
  183. quantum_framework-0.22.0/quantum/cli/__init__.py +0 -2
  184. quantum_framework-0.22.0/quantum/cli/deploy.py +0 -810
  185. quantum_framework-0.22.0/quantum/core/features/data_import/src/ast_node.py +0 -292
  186. quantum_framework-0.22.0/quantum_framework.egg-info/PKG-INFO +0 -285
  187. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/LICENSE +0 -0
  188. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/__init__.py +0 -0
  189. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/admin.py +0 -0
  190. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/check.py +0 -0
  191. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/cli/schema_plan.py +0 -0
  192. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/__init__.py +0 -0
  193. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/javascript/__init__.py +0 -0
  194. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/compiler/python/__init__.py +0 -0
  195. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/__init__.py +0 -0
  196. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/config_env.py +0 -0
  197. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/expression_diagnostics.py +0 -0
  198. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/agents/src/__init__.py +0 -0
  199. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/agents/src/ast_node.py +0 -0
  200. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/conditionals/src/__init__.py +0 -0
  201. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/data_import/src/__init__.py +0 -0
  202. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/dump/src/__init__.py +0 -0
  203. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/dump/src/ast_node.py +0 -0
  204. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/dump/src/parser.py +0 -0
  205. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/functions/src/__init__.py +0 -0
  206. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/game_engine_2d/src/__init__.py +0 -0
  207. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/invocation/src/__init__.py +0 -0
  208. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/invocation/src/ast_node.py +0 -0
  209. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/knowledge_base/src/__init__.py +0 -0
  210. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/logging/src/__init__.py +0 -0
  211. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/logging/src/ast_node.py +0 -0
  212. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/loops/src/__init__.py +0 -0
  213. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/native_testing/src/__init__.py +0 -0
  214. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/native_testing/src/ast_node.py +0 -0
  215. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/query/src/__init__.py +0 -0
  216. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/query/src/query_validators.py +0 -0
  217. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/state_management/src/__init__.py +0 -0
  218. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/terminal_engine/src/__init__.py +0 -0
  219. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/theming/src/__init__.py +0 -0
  220. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/theming/src/presets.py +0 -0
  221. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/ui_engine/src/__init__.py +0 -0
  222. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/features/websocket/src/__init__.py +0 -0
  223. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/guards.py +0 -0
  224. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/html_compat.py +0 -0
  225. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parser_registry.py +0 -0
  226. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/__init__.py +0 -0
  227. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/ai/__init__.py +0 -0
  228. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/ai/llm_parser.py +0 -0
  229. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/ai/team_parser.py +0 -0
  230. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/composition/__init__.py +0 -0
  231. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/composition/slot_parser.py +0 -0
  232. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/control_flow/__init__.py +0 -0
  233. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/control_flow/if_parser.py +0 -0
  234. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/data/__init__.py +0 -0
  235. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/events/__init__.py +0 -0
  236. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/events/dispatch_event_parser.py +0 -0
  237. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/forms/__init__.py +0 -0
  238. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/forms/action_parser.py +0 -0
  239. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/forms/flash_parser.py +0 -0
  240. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/forms/redirect_parser.py +0 -0
  241. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/functions/__init__.py +0 -0
  242. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/functions/function_parser.py +0 -0
  243. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/functions/return_parser.py +0 -0
  244. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/html/__init__.py +0 -0
  245. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/jobs/__init__.py +0 -0
  246. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/jobs/schedule_parser.py +0 -0
  247. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/jobs/thread_parser.py +0 -0
  248. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/messaging/__init__.py +0 -0
  249. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/messaging/message_ack_parser.py +0 -0
  250. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/messaging/message_nack_parser.py +0 -0
  251. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/messaging/message_parser.py +0 -0
  252. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/messaging/queue_parser.py +0 -0
  253. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/messaging/websocket_parser.py +0 -0
  254. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/routing/__init__.py +0 -0
  255. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/routing/route_parser.py +0 -0
  256. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/scripting/__init__.py +0 -0
  257. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/scripting/pyclass_parser.py +0 -0
  258. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/scripting/pydecorator_parser.py +0 -0
  259. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/scripting/pyimport_parser.py +0 -0
  260. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/scripting/python_parser.py +0 -0
  261. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/services/__init__.py +0 -0
  262. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/services/dump_parser.py +0 -0
  263. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/services/file_parser.py +0 -0
  264. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/services/log_parser.py +0 -0
  265. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/parsers/services/mail_parser.py +0 -0
  266. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/core/xml_lines.py +0 -0
  267. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/packages/__init__.py +0 -0
  268. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/packages/manager.py +0 -0
  269. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/plugins/__init__.py +0 -0
  270. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/plugins/hooks.py +0 -0
  271. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/plugins/manifest.py +0 -0
  272. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/__init__.py +0 -0
  273. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/adapters/__init__.py +0 -0
  274. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/adapters/sqlite_adapter.py +0 -0
  275. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/app_testing.py +0 -0
  276. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/component_composer.py +0 -0
  277. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/conditions.py +0 -0
  278. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/db_schema.py +0 -0
  279. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/email_service.py +0 -0
  280. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executor_registry.py +0 -0
  281. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/__init__.py +0 -0
  282. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/ai/__init__.py +0 -0
  283. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/control_flow/__init__.py +0 -0
  284. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/control_flow/redirect_executor.py +0 -0
  285. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/data/__init__.py +0 -0
  286. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/data/query_executor.py +0 -0
  287. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/jobs/__init__.py +0 -0
  288. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/jobs/job_executor.py +0 -0
  289. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/jobs/schedule_executor.py +0 -0
  290. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/jobs/thread_executor.py +0 -0
  291. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/messaging/__init__.py +0 -0
  292. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/messaging/message_ack_executor.py +0 -0
  293. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/messaging/queue_executor.py +0 -0
  294. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/scripting/__init__.py +0 -0
  295. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/services/__init__.py +0 -0
  296. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/executors/services/file_executor.py +0 -0
  297. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/file_upload_service.py +0 -0
  298. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/history.py +0 -0
  299. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/llm_cache.py +0 -0
  300. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/llm_service.py +0 -0
  301. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/llm_stream.py +0 -0
  302. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/local_server.py +0 -0
  303. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/terminal_templates.py +0 -0
  304. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_desktop.py +0 -0
  305. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_form_rules.py +0 -0
  306. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_html_templates.py +0 -0
  307. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_mobile_templates.py +0 -0
  308. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/ui_pager.py +0 -0
  309. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/validators.py +0 -0
  310. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/runtime/web_errors.py +0 -0
  311. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum/utils/__init__.py +0 -0
  312. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/__init__.py +0 -0
  313. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/assets/quantum-admin-connectors.js +0 -0
  314. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/assets/quantum-admin.css +0 -0
  315. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/assets/quantum-source-highlight.js +0 -0
  316. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/_layout/AdminShell.q +0 -0
  317. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/agents.q +0 -0
  318. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/app/[name].q +0 -0
  319. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/applications.q +0 -0
  320. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/component/[...path].q +0 -0
  321. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/components.q +0 -0
  322. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/connectors.q +0 -0
  323. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/dashboard.q +0 -0
  324. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/database.q +0 -0
  325. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/features.q +0 -0
  326. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/index.q +0 -0
  327. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/jobs.q +0 -0
  328. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/logout.q +0 -0
  329. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/settings.q +0 -0
  330. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/source.q +0 -0
  331. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/components/admin/tests.q +0 -0
  332. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/__init__.py +0 -0
  333. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/docker_service.py +0 -0
  334. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/core/secret_manager.py +0 -0
  335. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/__init__.py +0 -0
  336. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/_base.py +0 -0
  337. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/_component_test_generator.py +0 -0
  338. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/_yaml_editor.py +0 -0
  339. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/auth.py +0 -0
  340. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/components.py +0 -0
  341. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/connectors.py +0 -0
  342. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/projects.py +0 -0
  343. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/repository.py +0 -0
  344. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/settings.py +0 -0
  345. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_admin/services/yaml_import.py +0 -0
  346. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_framework.egg-info/dependency_links.txt +0 -0
  347. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_framework.egg-info/entry_points.txt +0 -0
  348. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/quantum_framework.egg-info/top_level.txt +0 -0
  349. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/setup.cfg +0 -0
  350. {quantum_framework-0.22.0 → quantum_framework-1.0.1}/tests/test_expression_cache.py +0 -0
@@ -0,0 +1,356 @@
1
+ Metadata-Version: 2.4
2
+ Name: quantum-framework
3
+ Version: 1.0.1
4
+ Summary: Declarative web applications in XML, with AI and RAG built into the language
5
+ Author-email: Daniel Gregorio <danielgregorio2611@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/danielgregorio/quantum
8
+ Project-URL: Documentation, https://quantumframework.net/
9
+ Project-URL: Changelog, https://github.com/danielgregorio/quantum/releases
10
+ Project-URL: Repository, https://github.com/danielgregorio/quantum
11
+ Keywords: framework,declarative,xml,web,llm,rag
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Framework :: Flask
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Requires-Python: >=3.12
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ Requires-Dist: flask>=3.0.0
21
+ Requires-Dist: pyyaml>=6.0
22
+ Requires-Dist: sqlparse>=0.4.4
23
+ Requires-Dist: gunicorn>=21.0.0
24
+ Requires-Dist: textual>=0.80.0
25
+ Requires-Dist: requests>=2.31.0
26
+ Requires-Dist: bcrypt>=4.1.0
27
+ Provides-Extra: dev
28
+ Requires-Dist: pytest>=7.4.0; extra == "dev"
29
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
30
+ Requires-Dist: pytest-mock>=3.11.1; extra == "dev"
31
+ Requires-Dist: pytest-xdist>=3.5; extra == "dev"
32
+ Requires-Dist: ruff<0.17,>=0.16; extra == "dev"
33
+ Provides-Extra: db
34
+ Requires-Dist: psycopg2-binary>=2.9.9; extra == "db"
35
+ Requires-Dist: pymysql>=1.1.0; extra == "db"
36
+ Provides-Extra: rag
37
+ Requires-Dist: chromadb>=0.5.0; extra == "rag"
38
+ Provides-Extra: jobs
39
+ Requires-Dist: apscheduler>=3.10.0; extra == "jobs"
40
+ Provides-Extra: admin
41
+ Requires-Dist: sqlalchemy>=2.0; extra == "admin"
42
+ Requires-Dist: PyJWT>=2.8; extra == "admin"
43
+ Requires-Dist: cryptography>=42.0; extra == "admin"
44
+ Provides-Extra: desktop
45
+ Requires-Dist: pywebview>=5.0; extra == "desktop"
46
+ Provides-Extra: websocket
47
+ Requires-Dist: websockets>=12.0; extra == "websocket"
48
+ Dynamic: license-file
49
+
50
+ # Quantum
51
+
52
+ [![CI](https://github.com/danielgregorio/quantum/actions/workflows/ci.yml/badge.svg)](https://github.com/danielgregorio/quantum/actions/workflows/ci.yml)
53
+ [![PyPI](https://img.shields.io/pypi/v/quantum-framework)](https://pypi.org/project/quantum-framework/)
54
+ [![Python](https://img.shields.io/pypi/pyversions/quantum-framework)](https://pypi.org/project/quantum-framework/)
55
+ [![Docs](https://img.shields.io/badge/docs-quantumframework.net-blue)](https://quantumframework.net/)
56
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/danielgregorio/quantum/blob/main/LICENSE)
57
+
58
+ > **Declarative web apps in XML, with AI and RAG built into the language.
59
+ > No build chain, no JavaScript, no frontend framework.**
60
+
61
+ Quantum is a full-stack framework whose language is markup. State, database queries,
62
+ forms, LLM calls and retrieval-augmented generation are all tags — not libraries you
63
+ wire together. It takes its philosophy from ColdFusion and Adobe Flex: the markup *is*
64
+ the app.
65
+
66
+ > **1.0, and honest about it.** See [Stability](#stability) — the table there
67
+ > reflects what has actually been executed end-to-end, not what is aspirational.
68
+
69
+ ---
70
+
71
+ ## The part that isn't like the others
72
+
73
+ Retrieval-augmented generation, as a language construct — this page answers a
74
+ question from the Markdown files in `knowledge/` and lists the ones it used:
75
+
76
+ ```xml
77
+ <q:component name="Ask">
78
+ <!-- The documents in knowledge/, split into chunks and embedded when the
79
+ page runs. persist="false" keeps the index in memory; without it, it is
80
+ stored in ./.quantum/knowledge and reused until a document changes. -->
81
+ <q:knowledge name="docs" persist="false" chunkSize="300" chunkOverlap="30">
82
+ <q:source type="directory" path="knowledge" pattern="*.md" />
83
+ </q:knowledge>
84
+
85
+ <q:set name="question" value="{query.q}" default="" />
86
+
87
+ <q:if condition="question">
88
+ <!-- The question retrieves the closest chunks; they reach the model
89
+ numbered, with the instruction to answer only from them and cite
90
+ them like [1]. -->
91
+ <q:llm name="answer" knowledge="docs" top="2">
92
+ <q:message role="user">{question}</q:message>
93
+ </q:llm>
94
+ </q:if>
95
+
96
+ <ui:window title="Ask the store">
97
+ <ui:form>
98
+ <ui:input bind="q" value="{question}" placeholder="Your question" />
99
+ <ui:button variant="primary">Ask</ui:button>
100
+ </ui:form>
101
+ <q:if condition="question">
102
+ <ui:text>{answer}</ui:text>
103
+ <q:if condition="answer_result.grounded">
104
+ <ui:text>Sources:</ui:text>
105
+ <q:loop items="{answer_result.sources}" var="s">
106
+ <ui:text>[{s.n}] {s.name}</ui:text>
107
+ </q:loop>
108
+ <q:else>
109
+ <ui:alert variant="warning">This answer cites none of the documents.</ui:alert>
110
+ </q:else>
111
+ </q:if>
112
+ </q:if>
113
+ </ui:window>
114
+ </q:component>
115
+ ```
116
+
117
+ That splits the documents into chunks, embeds them, retrieves the closest ones
118
+ and asks the model to answer only from them, citing each one — in the markup.
119
+ `answer_result.grounded` says whether the answer cites any of them. There is no
120
+ Python file behind it. (Recipe:
121
+ [Answers with their sources](https://quantumframework.net/cookbook/ai/answer-with-sources).)
122
+
123
+ An agent whose tools you write in Quantum, same idea:
124
+
125
+ ```xml
126
+ <q:component name="Assistant">
127
+ <!-- The model never writes SQL: it picks a tool and its arguments. The
128
+ tool is a read-only query you wrote; its q:param says the argument's
129
+ type, and the model's value is converted to it before the query runs. -->
130
+ <q:agent name="stock" maxIterations="4" timeout="60000" onerror="continue">
131
+ <q:instruction>You help a shop owner. Use the tools to look at the data,
132
+ then answer in one sentence.</q:instruction>
133
+
134
+ <q:tool name="low_stock" description="Products with fewer units in stock than `below`">
135
+ <q:param name="below" type="integer" default="5" />
136
+ <q:function name="lowStock">
137
+ <q:query name="rows" datasource="db">
138
+ SELECT name, stock FROM products WHERE stock &lt; :below ORDER BY stock
139
+ <q:param name="below" value="{below}" type="integer" />
140
+ </q:query>
141
+ <q:return value="{rows}" />
142
+ </q:function>
143
+ </q:tool>
144
+
145
+ <q:execute task="Which products are running out of stock?" />
146
+ </q:agent>
147
+
148
+ <ui:window title="Stock assistant">
149
+ <q:if condition="stock_result.success">
150
+ <ui:text>{stock}</ui:text>
151
+ <q:else>
152
+ <ui:alert variant="warning">The assistant did not finish: {stock_result.error.message}</ui:alert>
153
+ </q:else>
154
+ </q:if>
155
+ <!-- Every tool call the agent made, written out. -->
156
+ <q:loop items="{stock_result.actions}" var="a">
157
+ <ui:text>Called {a.call}</ui:text>
158
+ </q:loop>
159
+ </ui:window>
160
+ </q:component>
161
+ ```
162
+
163
+ The model never writes SQL: it picks a tool and its arguments, and the
164
+ argument is converted to the `q:param`'s type before the query runs. The
165
+ reasoning loop, the tool calls and the failure contract (`onerror`,
166
+ `stock_result`) are the runtime's job. (Recipe:
167
+ [An agent over your database](https://quantumframework.net/cookbook/ai/agent-over-your-database).)
168
+
169
+ ---
170
+
171
+ ## The rest of the language
172
+
173
+ ```xml
174
+ <q:component name="Products">
175
+ <!-- ?name=mouse from the URL; empty when it is not there. -->
176
+ <q:set name="term" value="{query.name}" default="" />
177
+
178
+ <!-- :pattern is bound to the q:param: the value is sent to the database
179
+ apart from the SQL, so it can never change what the SQL does. -->
180
+ <q:query name="products" datasource="db">
181
+ SELECT name, price FROM products WHERE name LIKE :pattern ORDER BY price
182
+ <q:param name="pattern" value="%{term}%" type="string" />
183
+ </q:query>
184
+
185
+ <ui:window title="Products">
186
+ <ui:text>{products_result.recordCount} products</ui:text>
187
+ <ui:table source="{products}">
188
+ <ui:column key="name" label="Name" />
189
+ <ui:column key="price" label="Price" />
190
+ </ui:table>
191
+ </ui:window>
192
+ </q:component>
193
+ ```
194
+
195
+ Saved as `components/index.q`, with the database declared in
196
+ `quantum.config.yaml`, `quantum start` serves it at `http://localhost:8080/`,
197
+ and `/?name=mouse` filters it. (Recipe:
198
+ [A query with parameters](https://quantumframework.net/cookbook/data-and-sql/query-with-parameters).)
199
+
200
+ `q:query` refuses to run SQL with an undeclared `:param` — parameterised queries are
201
+ enforced by the parser, not by discipline.
202
+
203
+ Also core: `q:set` with `session.` / `application.` / `request.` scopes, `q:if`,
204
+ `q:function`, `q:action` for form handling, `q:data` for CSV/JSON/XML import,
205
+ `q:import` / `q:slot` for composition.
206
+
207
+ The examples above are files of [Cookbook](https://quantumframework.net/cookbook/)
208
+ recipes, byte for byte, and the recipes run in CI; the quick start below is run
209
+ as shown (`tests/docs/test_readme.py` checks both).
210
+
211
+ ---
212
+
213
+ ## Quick start
214
+
215
+ **Requirements:** Python 3.12+ and `pip`.
216
+
217
+ ```bash
218
+ pip install quantum-framework
219
+ ```
220
+
221
+ Create `hello.q`:
222
+
223
+ ```xml
224
+ <q:component name="HelloWorld" xmlns:q="https://quantum.lang/ns">
225
+ <q:return value="Hello World!" />
226
+ </q:component>
227
+ ```
228
+
229
+ ```bash
230
+ quantum run hello.q
231
+ ```
232
+
233
+ ```
234
+ [EXEC] Executing component: HelloWorld
235
+ [SUCCESS] Result: Hello World!
236
+ ```
237
+
238
+ For a web app, put `.q` files in `components/` and run `quantum start`
239
+ (`components/index.q` is served at `/`). `quantum stop` stops it.
240
+
241
+ For the AI examples you also need a model server — [Ollama](https://ollama.com)
242
+ at `http://localhost:11434` unless `QUANTUM_LLM_BASE_URL` says otherwise — and
243
+ the RAG extra. There is no built-in model name: say which one in
244
+ `quantum.config.yaml` (`llm: model: phi3`) or `QUANTUM_LLM_DEFAULT_MODEL`.
245
+
246
+ ```bash
247
+ pip install "quantum-framework[rag]"
248
+ ollama pull phi3 && ollama pull nomic-embed-text
249
+ ```
250
+
251
+ Declare datasources in `quantum.config.yaml` (next to `components/`) and `q:query` works
252
+ with nothing else running — SQLite needs no extra; PostgreSQL and MySQL drivers come with
253
+ `pip install "quantum-framework[db]"`:
254
+
255
+ ```yaml
256
+ datasources:
257
+ db:
258
+ driver: sqlite
259
+ database: ./data/app.db
260
+ ```
261
+
262
+ ### CLI
263
+
264
+ | Command | What it does |
265
+ |---------|--------------|
266
+ | `run <file.q>` | Execute a component, or build a `q:application` (`ui`, `terminal`, `game`) |
267
+ | `start` | Start the web server (port 8080 by default; `--port` to change) |
268
+ | `stop` | Stop the server started by `start` |
269
+ | `check` | Check that pages parse, SQL compiles and query fields exist |
270
+ | `test` | Run the app's `*.test.q` tests |
271
+ | `console` · `desktop` | The application's pages in the terminal, or in a desktop window |
272
+ | `migrate` | Apply, roll back and plan database migrations |
273
+ | `admin` | Start the Quantum Admin (`pip install "quantum-framework[admin]"`) |
274
+ | `pkg` · `jobs` · `mq` | Component packages (a page cannot import one yet), jobs, message queues — no stability promise |
275
+
276
+ ### From source
277
+
278
+ To work on Quantum itself:
279
+
280
+ ```bash
281
+ git clone https://github.com/danielgregorio/quantum.git
282
+ cd quantum
283
+ pip install -e ".[dev]"
284
+ quantum run examples/hello.q
285
+ ```
286
+
287
+ See [CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md) for the test suite and the architecture.
288
+
289
+ ---
290
+
291
+ ## Documentation
292
+
293
+ Full docs at **[quantumframework.net](https://quantumframework.net/)**:
294
+
295
+ - **Start:** [Installation](https://quantumframework.net/guide/installation) · [Quick Start](https://quantumframework.net/guide/quick-start) · [Tutorial: build the tasks app](https://quantumframework.net/tutorial/tasks-app)
296
+ - **Learn:** [Guide](https://quantumframework.net/guide/getting-started) · [Cookbook](https://quantumframework.net/cookbook/) — short tested recipes · [Showcase](https://quantumframework.net/showcase/) — the complete apps
297
+ - **Look up:** [Reference](https://quantumframework.net/reference/) — every tag, function, command and SPEC rule, generated from the code
298
+ - **Plan:** [Stability](https://quantumframework.net/stability/) — what 1.0 promises · [Roadmap](https://quantumframework.net/roadmap/) · [Changelog](https://quantumframework.net/changelog/)
299
+
300
+ The site is also in [Português](https://quantumframework.net/pt/), [Español](https://quantumframework.net/es/) and [中文](https://quantumframework.net/zh/).
301
+
302
+ ---
303
+
304
+ ## Stability
305
+
306
+ Support levels are defined in **[SUPPORT_TIERS.md](https://github.com/danielgregorio/quantum/blob/main/SUPPORT_TIERS.md)**. Short version:
307
+
308
+ | Tier | Surface |
309
+ |------|---------|
310
+ | **Core** — documented, tested end to end, stable | `q:component`, `q:set`, `q:if`, `q:loop`, `q:function`, `q:query`, `q:transaction`, `q:action`, `q:invoke`, `q:data`, `q:import` / `q:slot`, `q:file`, `q:mail`, the Core set of `ui:*`, `require_auth` / `require_role` |
311
+ | **AI** — the Core contract plus a live test against a real model | `q:llm`, `q:knowledge`, `q:agent` |
312
+ | **Experimental** — they run, but no API stability promise | `q:team`, jobs, messaging, websockets, `q:log` / `q:dump`, `ui:*` outside the Core set, the terminal target |
313
+ | Experimental, and a full-trust escape hatch | Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) — off by default, see [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) |
314
+
315
+ A functional audit in 2026-09 found that several of these surfaces had never been run
316
+ end-to-end despite being documented as complete. They were fixed or re-labelled, and
317
+ feature status is now verified by execution rather than asserted by hand.
318
+
319
+ From 1.0, **Core and AI follow semantic versioning**: a 1.x release does not break a
320
+ program that uses only them — their meaning is fixed by the rules in
321
+ [SPEC.md](https://github.com/danielgregorio/quantum/blob/main/SPEC.md), and a break
322
+ waits for 2.0. Experimental and Laboratory surfaces carry no such promise and may
323
+ change in any release.
324
+
325
+ ---
326
+
327
+ ## Project layout
328
+
329
+ ```
330
+ quantum/
331
+ ├── quantum/
332
+ │ ├── core/ # Parser & AST (registry-based, modular)
333
+ │ ├── runtime/ # Execution engine, web server, renderer
334
+ │ └── cli/ # Command-line entry point
335
+ ├── examples/ # runnable .q examples
336
+ ├── tests/ # pytest suite; conformance/ cites SPEC.md
337
+ ├── scripts/ # dev tools
338
+ └── docs/ # VitePress documentation
339
+ ```
340
+
341
+ Adding a tag is one parser + one executor + a registry entry — see
342
+ [CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md).
343
+
344
+ ---
345
+
346
+ ## Contributing
347
+
348
+ Read **[CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md)** for dev setup and how the modular
349
+ parser/executor architecture works. By participating you agree to the
350
+ [Code of Conduct](https://github.com/danielgregorio/quantum/blob/main/CODE_OF_CONDUCT.md).
351
+
352
+ Found a security issue? Follow [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) — **do not** open a public issue.
353
+
354
+ ## License
355
+
356
+ MIT — see [LICENSE](https://github.com/danielgregorio/quantum/blob/main/LICENSE).
@@ -0,0 +1,307 @@
1
+ # Quantum
2
+
3
+ [![CI](https://github.com/danielgregorio/quantum/actions/workflows/ci.yml/badge.svg)](https://github.com/danielgregorio/quantum/actions/workflows/ci.yml)
4
+ [![PyPI](https://img.shields.io/pypi/v/quantum-framework)](https://pypi.org/project/quantum-framework/)
5
+ [![Python](https://img.shields.io/pypi/pyversions/quantum-framework)](https://pypi.org/project/quantum-framework/)
6
+ [![Docs](https://img.shields.io/badge/docs-quantumframework.net-blue)](https://quantumframework.net/)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/danielgregorio/quantum/blob/main/LICENSE)
8
+
9
+ > **Declarative web apps in XML, with AI and RAG built into the language.
10
+ > No build chain, no JavaScript, no frontend framework.**
11
+
12
+ Quantum is a full-stack framework whose language is markup. State, database queries,
13
+ forms, LLM calls and retrieval-augmented generation are all tags — not libraries you
14
+ wire together. It takes its philosophy from ColdFusion and Adobe Flex: the markup *is*
15
+ the app.
16
+
17
+ > **1.0, and honest about it.** See [Stability](#stability) — the table there
18
+ > reflects what has actually been executed end-to-end, not what is aspirational.
19
+
20
+ ---
21
+
22
+ ## The part that isn't like the others
23
+
24
+ Retrieval-augmented generation, as a language construct — this page answers a
25
+ question from the Markdown files in `knowledge/` and lists the ones it used:
26
+
27
+ ```xml
28
+ <q:component name="Ask">
29
+ <!-- The documents in knowledge/, split into chunks and embedded when the
30
+ page runs. persist="false" keeps the index in memory; without it, it is
31
+ stored in ./.quantum/knowledge and reused until a document changes. -->
32
+ <q:knowledge name="docs" persist="false" chunkSize="300" chunkOverlap="30">
33
+ <q:source type="directory" path="knowledge" pattern="*.md" />
34
+ </q:knowledge>
35
+
36
+ <q:set name="question" value="{query.q}" default="" />
37
+
38
+ <q:if condition="question">
39
+ <!-- The question retrieves the closest chunks; they reach the model
40
+ numbered, with the instruction to answer only from them and cite
41
+ them like [1]. -->
42
+ <q:llm name="answer" knowledge="docs" top="2">
43
+ <q:message role="user">{question}</q:message>
44
+ </q:llm>
45
+ </q:if>
46
+
47
+ <ui:window title="Ask the store">
48
+ <ui:form>
49
+ <ui:input bind="q" value="{question}" placeholder="Your question" />
50
+ <ui:button variant="primary">Ask</ui:button>
51
+ </ui:form>
52
+ <q:if condition="question">
53
+ <ui:text>{answer}</ui:text>
54
+ <q:if condition="answer_result.grounded">
55
+ <ui:text>Sources:</ui:text>
56
+ <q:loop items="{answer_result.sources}" var="s">
57
+ <ui:text>[{s.n}] {s.name}</ui:text>
58
+ </q:loop>
59
+ <q:else>
60
+ <ui:alert variant="warning">This answer cites none of the documents.</ui:alert>
61
+ </q:else>
62
+ </q:if>
63
+ </q:if>
64
+ </ui:window>
65
+ </q:component>
66
+ ```
67
+
68
+ That splits the documents into chunks, embeds them, retrieves the closest ones
69
+ and asks the model to answer only from them, citing each one — in the markup.
70
+ `answer_result.grounded` says whether the answer cites any of them. There is no
71
+ Python file behind it. (Recipe:
72
+ [Answers with their sources](https://quantumframework.net/cookbook/ai/answer-with-sources).)
73
+
74
+ An agent whose tools you write in Quantum, same idea:
75
+
76
+ ```xml
77
+ <q:component name="Assistant">
78
+ <!-- The model never writes SQL: it picks a tool and its arguments. The
79
+ tool is a read-only query you wrote; its q:param says the argument's
80
+ type, and the model's value is converted to it before the query runs. -->
81
+ <q:agent name="stock" maxIterations="4" timeout="60000" onerror="continue">
82
+ <q:instruction>You help a shop owner. Use the tools to look at the data,
83
+ then answer in one sentence.</q:instruction>
84
+
85
+ <q:tool name="low_stock" description="Products with fewer units in stock than `below`">
86
+ <q:param name="below" type="integer" default="5" />
87
+ <q:function name="lowStock">
88
+ <q:query name="rows" datasource="db">
89
+ SELECT name, stock FROM products WHERE stock &lt; :below ORDER BY stock
90
+ <q:param name="below" value="{below}" type="integer" />
91
+ </q:query>
92
+ <q:return value="{rows}" />
93
+ </q:function>
94
+ </q:tool>
95
+
96
+ <q:execute task="Which products are running out of stock?" />
97
+ </q:agent>
98
+
99
+ <ui:window title="Stock assistant">
100
+ <q:if condition="stock_result.success">
101
+ <ui:text>{stock}</ui:text>
102
+ <q:else>
103
+ <ui:alert variant="warning">The assistant did not finish: {stock_result.error.message}</ui:alert>
104
+ </q:else>
105
+ </q:if>
106
+ <!-- Every tool call the agent made, written out. -->
107
+ <q:loop items="{stock_result.actions}" var="a">
108
+ <ui:text>Called {a.call}</ui:text>
109
+ </q:loop>
110
+ </ui:window>
111
+ </q:component>
112
+ ```
113
+
114
+ The model never writes SQL: it picks a tool and its arguments, and the
115
+ argument is converted to the `q:param`'s type before the query runs. The
116
+ reasoning loop, the tool calls and the failure contract (`onerror`,
117
+ `stock_result`) are the runtime's job. (Recipe:
118
+ [An agent over your database](https://quantumframework.net/cookbook/ai/agent-over-your-database).)
119
+
120
+ ---
121
+
122
+ ## The rest of the language
123
+
124
+ ```xml
125
+ <q:component name="Products">
126
+ <!-- ?name=mouse from the URL; empty when it is not there. -->
127
+ <q:set name="term" value="{query.name}" default="" />
128
+
129
+ <!-- :pattern is bound to the q:param: the value is sent to the database
130
+ apart from the SQL, so it can never change what the SQL does. -->
131
+ <q:query name="products" datasource="db">
132
+ SELECT name, price FROM products WHERE name LIKE :pattern ORDER BY price
133
+ <q:param name="pattern" value="%{term}%" type="string" />
134
+ </q:query>
135
+
136
+ <ui:window title="Products">
137
+ <ui:text>{products_result.recordCount} products</ui:text>
138
+ <ui:table source="{products}">
139
+ <ui:column key="name" label="Name" />
140
+ <ui:column key="price" label="Price" />
141
+ </ui:table>
142
+ </ui:window>
143
+ </q:component>
144
+ ```
145
+
146
+ Saved as `components/index.q`, with the database declared in
147
+ `quantum.config.yaml`, `quantum start` serves it at `http://localhost:8080/`,
148
+ and `/?name=mouse` filters it. (Recipe:
149
+ [A query with parameters](https://quantumframework.net/cookbook/data-and-sql/query-with-parameters).)
150
+
151
+ `q:query` refuses to run SQL with an undeclared `:param` — parameterised queries are
152
+ enforced by the parser, not by discipline.
153
+
154
+ Also core: `q:set` with `session.` / `application.` / `request.` scopes, `q:if`,
155
+ `q:function`, `q:action` for form handling, `q:data` for CSV/JSON/XML import,
156
+ `q:import` / `q:slot` for composition.
157
+
158
+ The examples above are files of [Cookbook](https://quantumframework.net/cookbook/)
159
+ recipes, byte for byte, and the recipes run in CI; the quick start below is run
160
+ as shown (`tests/docs/test_readme.py` checks both).
161
+
162
+ ---
163
+
164
+ ## Quick start
165
+
166
+ **Requirements:** Python 3.12+ and `pip`.
167
+
168
+ ```bash
169
+ pip install quantum-framework
170
+ ```
171
+
172
+ Create `hello.q`:
173
+
174
+ ```xml
175
+ <q:component name="HelloWorld" xmlns:q="https://quantum.lang/ns">
176
+ <q:return value="Hello World!" />
177
+ </q:component>
178
+ ```
179
+
180
+ ```bash
181
+ quantum run hello.q
182
+ ```
183
+
184
+ ```
185
+ [EXEC] Executing component: HelloWorld
186
+ [SUCCESS] Result: Hello World!
187
+ ```
188
+
189
+ For a web app, put `.q` files in `components/` and run `quantum start`
190
+ (`components/index.q` is served at `/`). `quantum stop` stops it.
191
+
192
+ For the AI examples you also need a model server — [Ollama](https://ollama.com)
193
+ at `http://localhost:11434` unless `QUANTUM_LLM_BASE_URL` says otherwise — and
194
+ the RAG extra. There is no built-in model name: say which one in
195
+ `quantum.config.yaml` (`llm: model: phi3`) or `QUANTUM_LLM_DEFAULT_MODEL`.
196
+
197
+ ```bash
198
+ pip install "quantum-framework[rag]"
199
+ ollama pull phi3 && ollama pull nomic-embed-text
200
+ ```
201
+
202
+ Declare datasources in `quantum.config.yaml` (next to `components/`) and `q:query` works
203
+ with nothing else running — SQLite needs no extra; PostgreSQL and MySQL drivers come with
204
+ `pip install "quantum-framework[db]"`:
205
+
206
+ ```yaml
207
+ datasources:
208
+ db:
209
+ driver: sqlite
210
+ database: ./data/app.db
211
+ ```
212
+
213
+ ### CLI
214
+
215
+ | Command | What it does |
216
+ |---------|--------------|
217
+ | `run <file.q>` | Execute a component, or build a `q:application` (`ui`, `terminal`, `game`) |
218
+ | `start` | Start the web server (port 8080 by default; `--port` to change) |
219
+ | `stop` | Stop the server started by `start` |
220
+ | `check` | Check that pages parse, SQL compiles and query fields exist |
221
+ | `test` | Run the app's `*.test.q` tests |
222
+ | `console` · `desktop` | The application's pages in the terminal, or in a desktop window |
223
+ | `migrate` | Apply, roll back and plan database migrations |
224
+ | `admin` | Start the Quantum Admin (`pip install "quantum-framework[admin]"`) |
225
+ | `pkg` · `jobs` · `mq` | Component packages (a page cannot import one yet), jobs, message queues — no stability promise |
226
+
227
+ ### From source
228
+
229
+ To work on Quantum itself:
230
+
231
+ ```bash
232
+ git clone https://github.com/danielgregorio/quantum.git
233
+ cd quantum
234
+ pip install -e ".[dev]"
235
+ quantum run examples/hello.q
236
+ ```
237
+
238
+ See [CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md) for the test suite and the architecture.
239
+
240
+ ---
241
+
242
+ ## Documentation
243
+
244
+ Full docs at **[quantumframework.net](https://quantumframework.net/)**:
245
+
246
+ - **Start:** [Installation](https://quantumframework.net/guide/installation) · [Quick Start](https://quantumframework.net/guide/quick-start) · [Tutorial: build the tasks app](https://quantumframework.net/tutorial/tasks-app)
247
+ - **Learn:** [Guide](https://quantumframework.net/guide/getting-started) · [Cookbook](https://quantumframework.net/cookbook/) — short tested recipes · [Showcase](https://quantumframework.net/showcase/) — the complete apps
248
+ - **Look up:** [Reference](https://quantumframework.net/reference/) — every tag, function, command and SPEC rule, generated from the code
249
+ - **Plan:** [Stability](https://quantumframework.net/stability/) — what 1.0 promises · [Roadmap](https://quantumframework.net/roadmap/) · [Changelog](https://quantumframework.net/changelog/)
250
+
251
+ The site is also in [Português](https://quantumframework.net/pt/), [Español](https://quantumframework.net/es/) and [中文](https://quantumframework.net/zh/).
252
+
253
+ ---
254
+
255
+ ## Stability
256
+
257
+ Support levels are defined in **[SUPPORT_TIERS.md](https://github.com/danielgregorio/quantum/blob/main/SUPPORT_TIERS.md)**. Short version:
258
+
259
+ | Tier | Surface |
260
+ |------|---------|
261
+ | **Core** — documented, tested end to end, stable | `q:component`, `q:set`, `q:if`, `q:loop`, `q:function`, `q:query`, `q:transaction`, `q:action`, `q:invoke`, `q:data`, `q:import` / `q:slot`, `q:file`, `q:mail`, the Core set of `ui:*`, `require_auth` / `require_role` |
262
+ | **AI** — the Core contract plus a live test against a real model | `q:llm`, `q:knowledge`, `q:agent` |
263
+ | **Experimental** — they run, but no API stability promise | `q:team`, jobs, messaging, websockets, `q:log` / `q:dump`, `ui:*` outside the Core set, the terminal target |
264
+ | Experimental, and a full-trust escape hatch | Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) — off by default, see [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) |
265
+
266
+ A functional audit in 2026-09 found that several of these surfaces had never been run
267
+ end-to-end despite being documented as complete. They were fixed or re-labelled, and
268
+ feature status is now verified by execution rather than asserted by hand.
269
+
270
+ From 1.0, **Core and AI follow semantic versioning**: a 1.x release does not break a
271
+ program that uses only them — their meaning is fixed by the rules in
272
+ [SPEC.md](https://github.com/danielgregorio/quantum/blob/main/SPEC.md), and a break
273
+ waits for 2.0. Experimental and Laboratory surfaces carry no such promise and may
274
+ change in any release.
275
+
276
+ ---
277
+
278
+ ## Project layout
279
+
280
+ ```
281
+ quantum/
282
+ ├── quantum/
283
+ │ ├── core/ # Parser & AST (registry-based, modular)
284
+ │ ├── runtime/ # Execution engine, web server, renderer
285
+ │ └── cli/ # Command-line entry point
286
+ ├── examples/ # runnable .q examples
287
+ ├── tests/ # pytest suite; conformance/ cites SPEC.md
288
+ ├── scripts/ # dev tools
289
+ └── docs/ # VitePress documentation
290
+ ```
291
+
292
+ Adding a tag is one parser + one executor + a registry entry — see
293
+ [CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md).
294
+
295
+ ---
296
+
297
+ ## Contributing
298
+
299
+ Read **[CONTRIBUTING.md](https://github.com/danielgregorio/quantum/blob/main/CONTRIBUTING.md)** for dev setup and how the modular
300
+ parser/executor architecture works. By participating you agree to the
301
+ [Code of Conduct](https://github.com/danielgregorio/quantum/blob/main/CODE_OF_CONDUCT.md).
302
+
303
+ Found a security issue? Follow [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) — **do not** open a public issue.
304
+
305
+ ## License
306
+
307
+ MIT — see [LICENSE](https://github.com/danielgregorio/quantum/blob/main/LICENSE).