quantum-framework 0.22.0__tar.gz → 1.0.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.
Files changed (346) hide show
  1. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/PKG-INFO +23 -18
  2. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/README.md +18 -12
  3. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/pyproject.toml +33 -12
  4. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/hot_reload.py +18 -10
  5. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/jobs.py +2 -6
  6. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/migrations.py +1 -3
  7. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/mq.py +2 -9
  8. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/pkg.py +3 -5
  9. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/runner.py +22 -57
  10. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/server_process.py +55 -14
  11. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/base_generator.py +2 -7
  12. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/cli.py +2 -3
  13. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/expression_transformer.py +0 -1
  14. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/javascript/generator.py +4 -13
  15. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/optimizer.py +1 -2
  16. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/python/generator.py +4 -9
  17. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/python/runtime.py +1 -2
  18. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/transpiler.py +0 -1
  19. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/ast_nodes.py +69 -136
  20. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/expression_stdlib.py +54 -0
  21. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/expressions.py +27 -3
  22. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/conditionals/src/ast_node.py +0 -2
  23. quantum_framework-1.0.0/quantum/core/features/data_import/src/ast_node.py +19 -0
  24. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/data_import/src/runtime.py +18 -16
  25. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/dump/src/runtime.py +4 -4
  26. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/functions/src/ast_node.py +4 -3
  27. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/game_engine_2d/src/ast_nodes.py +9 -12
  28. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/game_engine_2d/src/parser.py +7 -7
  29. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/invocation/src/runtime.py +24 -8
  30. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/knowledge_base/src/ast_node.py +1 -3
  31. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/knowledge_base/src/parser.py +3 -1
  32. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/logging/src/parser.py +0 -1
  33. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/logging/src/runtime.py +2 -1
  34. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/loops/src/ast_node.py +0 -2
  35. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/native_testing/src/parser.py +1 -1
  36. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/state_management/src/ast_node.py +2 -5
  37. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/terminal_engine/src/ast_nodes.py +0 -3
  38. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/terminal_engine/src/parser.py +1 -1
  39. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/theming/src/ast_node.py +0 -2
  40. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/ui_engine/src/ast_nodes.py +0 -2
  41. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/ui_engine/src/parser.py +2 -4
  42. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/websocket/src/ast_node.py +1 -1
  43. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parser.py +47 -42
  44. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/ai/agent_parser.py +4 -0
  45. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/ai/knowledge_parser.py +3 -1
  46. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/base.py +3 -2
  47. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/composition/import_parser.py +1 -1
  48. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/control_flow/loop_parser.py +9 -0
  49. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/control_flow/set_parser.py +43 -3
  50. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/data/data_parser.py +12 -27
  51. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/data/invoke_parser.py +17 -0
  52. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/data/query_parser.py +2 -0
  53. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/data/transaction_parser.py +1 -1
  54. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/functions/param_parser.py +2 -0
  55. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/html/component_call_parser.py +1 -1
  56. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/html/html_parser.py +1 -1
  57. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/jobs/job_parser.py +3 -0
  58. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/tiers.py +1 -1
  59. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/packages/manifest.py +0 -1
  60. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/packages/registry.py +0 -1
  61. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/packages/resolver.py +0 -1
  62. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/plugins/loader.py +2 -2
  63. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/plugins/registry.py +1 -1
  64. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/action_handler.py +8 -3
  65. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/adapters/memory_adapter.py +5 -23
  66. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/adapters/rabbitmq_adapter.py +4 -7
  67. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/adapters/redis_adapter.py +17 -8
  68. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/agent_service.py +2 -3
  69. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ast_cache.py +1 -3
  70. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/auth_service.py +6 -2
  71. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/component.py +11 -49
  72. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/component_resolver.py +0 -1
  73. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/database_service.py +28 -13
  74. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/dev_panel.py +1 -1
  75. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/error_handler.py +1 -2
  76. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/execution_context.py +18 -3
  77. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/ai/agent_executor.py +9 -1
  78. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/ai/knowledge_executor.py +1 -3
  79. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/ai/llm_executor.py +4 -2
  80. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/ai/team_executor.py +3 -1
  81. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/base.py +2 -0
  82. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/control_flow/if_executor.py +1 -1
  83. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/control_flow/loop_executor.py +31 -27
  84. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/control_flow/set_executor.py +27 -3
  85. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/data/data_executor.py +0 -2
  86. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/data/invoke_executor.py +1 -1
  87. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/data/transaction_executor.py +1 -1
  88. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/messaging/message_executor.py +1 -1
  89. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/messaging/websocket_executor.py +1 -1
  90. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/scripting/pyclass_executor.py +3 -3
  91. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/scripting/pyimport_executor.py +1 -1
  92. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/scripting/python_executor.py +2 -2
  93. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/services/dump_executor.py +1 -1
  94. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/services/log_executor.py +2 -2
  95. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/services/mail_executor.py +1 -1
  96. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/expression_cache.py +1 -1
  97. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/function_registry.py +0 -2
  98. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/game_builder.py +0 -1
  99. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/game_code_generator.py +15 -17
  100. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/game_templates.py +17 -19
  101. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/godot_code_generator.py +97 -117
  102. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/godot_templates.py +36 -38
  103. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/job_executor.py +68 -10
  104. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/knowledge_service.py +21 -10
  105. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/llm_providers.py +3 -3
  106. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/logging_setup.py +7 -2
  107. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/message_broker.py +1 -1
  108. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/message_queue_service.py +2 -2
  109. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/param_validation.py +30 -1
  110. quantum_framework-1.0.0/quantum/runtime/process_identity.py +76 -0
  111. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/pypy_compat.py +1 -1
  112. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/python_bridge.py +5 -2
  113. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/query_validators.py +1 -1
  114. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/renderer.py +7 -33
  115. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/service_container.py +10 -8
  116. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/table_params.py +1 -1
  117. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/terminal_builder.py +1 -2
  118. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/terminal_code_generator.py +4 -11
  119. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_builder.py +2 -2
  120. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_console.py +19 -1
  121. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_html_adapter.py +1 -4
  122. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_mobile_adapter.py +3 -7
  123. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_page_renderer.py +1 -1
  124. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_table_edit.py +1 -3
  125. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_textual_adapter.py +21 -24
  126. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_textual_templates.py +0 -1
  127. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_tokens.py +0 -1
  128. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_validator.py +2 -3
  129. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_view.py +1 -1
  130. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/web_config.py +11 -5
  131. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/web_html.py +1 -1
  132. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/web_lifecycle.py +32 -1
  133. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/web_server.py +31 -3
  134. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/websocket_adapter.py +1 -1
  135. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/websocket_service.py +1 -1
  136. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/websocket_transport.py +16 -3
  137. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/wsgi.py +4 -1
  138. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/services.py +17 -4
  139. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/login.q +1 -1
  140. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/auth_service.py +4 -4
  141. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/connector_service.py +4 -4
  142. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/crud.py +6 -6
  143. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/database.py +8 -8
  144. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/environment_service.py +4 -4
  145. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/models.py +40 -32
  146. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/settings_service.py +2 -20
  147. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/apps.py +13 -0
  148. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_framework.egg-info/PKG-INFO +23 -18
  149. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_framework.egg-info/SOURCES.txt +1 -1
  150. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_framework.egg-info/requires.txt +1 -2
  151. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_agent.py +2 -6
  152. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_animations.py +1 -3
  153. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_ast_cache.py +1 -2
  154. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_component_library.py +0 -3
  155. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_form_validation.py +0 -2
  156. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_game_codegen.py +9 -12
  157. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_game_e2e.py +0 -2
  158. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_game_engine.py +1 -2
  159. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_game_parser.py +41 -45
  160. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_godot_codegen.py +440 -449
  161. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_job_executor.py +1 -4
  162. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_llm_providers.py +3 -6
  163. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_message_broker.py +1 -4
  164. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_message_queue.py +2 -4
  165. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_mobile_target.py +0 -12
  166. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_multi_agent.py +5 -10
  167. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_packages.py +1 -6
  168. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_plugins.py +2 -10
  169. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_pypy_compat.py +4 -4
  170. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_python_scripting.py +2 -5
  171. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_terminal_codegen.py +2 -6
  172. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_terminal_parser.py +2 -9
  173. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_theming.py +0 -2
  174. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_ui_html_adapter.py +0 -12
  175. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_ui_parity.py +4 -8
  176. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_ui_parser.py +1 -3
  177. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_ui_textual_adapter.py +0 -2
  178. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_websocket.py +3 -7
  179. quantum_framework-0.22.0/quantum/cli/deploy.py +0 -810
  180. quantum_framework-0.22.0/quantum/core/features/data_import/src/ast_node.py +0 -292
  181. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/LICENSE +0 -0
  182. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/__init__.py +0 -0
  183. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/__init__.py +0 -0
  184. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/admin.py +0 -0
  185. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/check.py +0 -0
  186. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/cli/schema_plan.py +0 -0
  187. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/__init__.py +0 -0
  188. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/javascript/__init__.py +0 -0
  189. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/compiler/python/__init__.py +0 -0
  190. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/__init__.py +0 -0
  191. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/config_env.py +0 -0
  192. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/docs_links.py +0 -0
  193. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/expression_diagnostics.py +0 -0
  194. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/agents/src/__init__.py +0 -0
  195. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/agents/src/ast_node.py +0 -0
  196. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/conditionals/src/__init__.py +0 -0
  197. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/data_import/src/__init__.py +0 -0
  198. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/dump/src/__init__.py +0 -0
  199. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/dump/src/ast_node.py +0 -0
  200. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/dump/src/parser.py +0 -0
  201. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/functions/src/__init__.py +0 -0
  202. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/game_engine_2d/src/__init__.py +0 -0
  203. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/invocation/src/__init__.py +0 -0
  204. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/invocation/src/ast_node.py +0 -0
  205. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/knowledge_base/src/__init__.py +0 -0
  206. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/logging/src/__init__.py +0 -0
  207. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/logging/src/ast_node.py +0 -0
  208. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/loops/src/__init__.py +0 -0
  209. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/native_testing/src/__init__.py +0 -0
  210. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/native_testing/src/ast_node.py +0 -0
  211. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/query/src/__init__.py +0 -0
  212. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/query/src/query_validators.py +0 -0
  213. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/state_management/src/__init__.py +0 -0
  214. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/terminal_engine/src/__init__.py +0 -0
  215. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/theming/src/__init__.py +0 -0
  216. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/theming/src/presets.py +0 -0
  217. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/ui_engine/src/__init__.py +0 -0
  218. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/features/websocket/src/__init__.py +0 -0
  219. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/guards.py +0 -0
  220. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/html_compat.py +0 -0
  221. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parser_registry.py +0 -0
  222. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/__init__.py +0 -0
  223. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/ai/__init__.py +0 -0
  224. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/ai/llm_parser.py +0 -0
  225. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/ai/team_parser.py +0 -0
  226. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/composition/__init__.py +0 -0
  227. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/composition/slot_parser.py +0 -0
  228. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/control_flow/__init__.py +0 -0
  229. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/control_flow/if_parser.py +0 -0
  230. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/data/__init__.py +0 -0
  231. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/events/__init__.py +0 -0
  232. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/events/dispatch_event_parser.py +0 -0
  233. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/forms/__init__.py +0 -0
  234. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/forms/action_parser.py +0 -0
  235. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/forms/flash_parser.py +0 -0
  236. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/forms/redirect_parser.py +0 -0
  237. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/functions/__init__.py +0 -0
  238. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/functions/function_parser.py +0 -0
  239. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/functions/return_parser.py +0 -0
  240. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/html/__init__.py +0 -0
  241. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/jobs/__init__.py +0 -0
  242. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/jobs/schedule_parser.py +0 -0
  243. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/jobs/thread_parser.py +0 -0
  244. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/messaging/__init__.py +0 -0
  245. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/messaging/message_ack_parser.py +0 -0
  246. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/messaging/message_nack_parser.py +0 -0
  247. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/messaging/message_parser.py +0 -0
  248. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/messaging/queue_parser.py +0 -0
  249. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/messaging/websocket_parser.py +0 -0
  250. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/routing/__init__.py +0 -0
  251. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/routing/route_parser.py +0 -0
  252. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/scripting/__init__.py +0 -0
  253. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/scripting/pyclass_parser.py +0 -0
  254. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/scripting/pydecorator_parser.py +0 -0
  255. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/scripting/pyimport_parser.py +0 -0
  256. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/scripting/python_parser.py +0 -0
  257. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/services/__init__.py +0 -0
  258. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/services/dump_parser.py +0 -0
  259. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/services/file_parser.py +0 -0
  260. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/services/log_parser.py +0 -0
  261. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/parsers/services/mail_parser.py +0 -0
  262. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/core/xml_lines.py +0 -0
  263. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/packages/__init__.py +0 -0
  264. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/packages/manager.py +0 -0
  265. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/plugins/__init__.py +0 -0
  266. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/plugins/hooks.py +0 -0
  267. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/plugins/manifest.py +0 -0
  268. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/__init__.py +0 -0
  269. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/adapters/__init__.py +0 -0
  270. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/adapters/sqlite_adapter.py +0 -0
  271. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/app_testing.py +0 -0
  272. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/component_composer.py +0 -0
  273. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/conditions.py +0 -0
  274. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/db_schema.py +0 -0
  275. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/email_service.py +0 -0
  276. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executor_registry.py +0 -0
  277. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/__init__.py +0 -0
  278. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/ai/__init__.py +0 -0
  279. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/control_flow/__init__.py +0 -0
  280. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/control_flow/redirect_executor.py +0 -0
  281. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/data/__init__.py +0 -0
  282. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/data/query_executor.py +0 -0
  283. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/jobs/__init__.py +0 -0
  284. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/jobs/job_executor.py +0 -0
  285. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/jobs/schedule_executor.py +0 -0
  286. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/jobs/thread_executor.py +0 -0
  287. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/messaging/__init__.py +0 -0
  288. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/messaging/message_ack_executor.py +0 -0
  289. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/messaging/queue_executor.py +0 -0
  290. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/scripting/__init__.py +0 -0
  291. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/services/__init__.py +0 -0
  292. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/executors/services/file_executor.py +0 -0
  293. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/file_upload_service.py +0 -0
  294. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/history.py +0 -0
  295. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/llm_cache.py +0 -0
  296. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/llm_service.py +0 -0
  297. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/llm_stream.py +0 -0
  298. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/local_server.py +0 -0
  299. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/terminal_templates.py +0 -0
  300. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_desktop.py +0 -0
  301. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_form_rules.py +0 -0
  302. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_html_templates.py +0 -0
  303. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_mobile_templates.py +0 -0
  304. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/ui_pager.py +0 -0
  305. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/validators.py +0 -0
  306. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/runtime/web_errors.py +0 -0
  307. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum/utils/__init__.py +0 -0
  308. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/__init__.py +0 -0
  309. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/assets/quantum-admin-connectors.js +0 -0
  310. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/assets/quantum-admin.css +0 -0
  311. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/assets/quantum-source-highlight.js +0 -0
  312. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/_layout/AdminShell.q +0 -0
  313. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/agents.q +0 -0
  314. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/app/[name].q +0 -0
  315. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/applications.q +0 -0
  316. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/component/[...path].q +0 -0
  317. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/components.q +0 -0
  318. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/connectors.q +0 -0
  319. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/dashboard.q +0 -0
  320. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/database.q +0 -0
  321. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/features.q +0 -0
  322. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/index.q +0 -0
  323. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/jobs.q +0 -0
  324. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/logout.q +0 -0
  325. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/settings.q +0 -0
  326. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/source.q +0 -0
  327. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/components/admin/tests.q +0 -0
  328. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/__init__.py +0 -0
  329. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/docker_service.py +0 -0
  330. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/core/secret_manager.py +0 -0
  331. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/__init__.py +0 -0
  332. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/_base.py +0 -0
  333. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/_component_test_generator.py +0 -0
  334. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/_yaml_editor.py +0 -0
  335. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/auth.py +0 -0
  336. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/components.py +0 -0
  337. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/connectors.py +0 -0
  338. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/projects.py +0 -0
  339. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/repository.py +0 -0
  340. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/settings.py +0 -0
  341. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_admin/services/yaml_import.py +0 -0
  342. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_framework.egg-info/dependency_links.txt +0 -0
  343. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_framework.egg-info/entry_points.txt +0 -0
  344. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/quantum_framework.egg-info/top_level.txt +0 -0
  345. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/setup.cfg +0 -0
  346. {quantum_framework-0.22.0 → quantum_framework-1.0.0}/tests/test_expression_cache.py +0 -0
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quantum-framework
3
- Version: 0.22.0
4
- Summary: Full-stack declarative framework for building web, desktop, and mobile applications
3
+ Version: 1.0.0
4
+ Summary: Declarative web applications in XML, with AI and RAG built into the language
5
5
  Author-email: Daniel Gregorio <danielgregorio2611@gmail.com>
6
6
  License: MIT
7
7
  Project-URL: Homepage, https://github.com/danielgregorio/quantum
8
8
  Project-URL: Documentation, https://danielgregorio.github.io/quantum/
9
9
  Project-URL: Changelog, https://github.com/danielgregorio/quantum/releases
10
10
  Project-URL: Repository, https://github.com/danielgregorio/quantum
11
- Keywords: framework,declarative,xml,web,desktop,mobile
12
- Classifier: Development Status :: 4 - Beta
11
+ Keywords: framework,declarative,xml,web,llm,rag
12
+ Classifier: Development Status :: 5 - Production/Stable
13
13
  Classifier: Framework :: Flask
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: License :: OSI Approved :: MIT License
@@ -29,8 +29,7 @@ Requires-Dist: pytest>=7.4.0; extra == "dev"
29
29
  Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
30
30
  Requires-Dist: pytest-mock>=3.11.1; extra == "dev"
31
31
  Requires-Dist: pytest-xdist>=3.5; extra == "dev"
32
- Requires-Dist: black>=23.0.0; extra == "dev"
33
- Requires-Dist: ruff>=0.1.0; extra == "dev"
32
+ Requires-Dist: ruff<0.17,>=0.16; extra == "dev"
34
33
  Provides-Extra: db
35
34
  Requires-Dist: psycopg2-binary>=2.9.9; extra == "db"
36
35
  Requires-Dist: pymysql>=1.1.0; extra == "db"
@@ -64,7 +63,7 @@ forms, LLM calls and retrieval-augmented generation are all tags — not librari
64
63
  wire together. It takes its philosophy from ColdFusion and Adobe Flex: the markup *is*
65
64
  the app.
66
65
 
67
- > ⚠️ **Pre-1.0, and honest about it.** See [Stability](#stability) — the table there
66
+ > **1.0, and honest about it.** See [Stability](#stability) — the table there
68
67
  > reflects what has actually been executed end-to-end, not what is aspirational.
69
68
 
70
69
  ---
@@ -75,7 +74,7 @@ Retrieval-augmented generation, as a language construct:
75
74
 
76
75
  ```xml
77
76
  <q:component name="DocsBot">
78
- <q:knowledge name="docs" model="phi3" embedModel="nomic-embed-text">
77
+ <q:knowledge name="docs" embedModel="nomic-embed-text">
79
78
  <q:source type="directory" path="./docs/" pattern="*.md" />
80
79
  </q:knowledge>
81
80
 
@@ -200,10 +199,13 @@ datasources:
200
199
 
201
200
  | Command | What it does |
202
201
  |---------|--------------|
203
- | `run <file.q>` | Execute a component, app, or API |
202
+ | `run <file.q>` | Execute a component, or build a `q:application` (`ui`, `terminal`, `game`) |
204
203
  | `start` | Start the web server (port 8080 by default; `--port` to change) |
205
204
  | `stop` | Stop the server started by `start` |
206
- | `deploy [path]` · `apps` | Deploy an application, manage deployed ones |
205
+ | `check` | Check that pages parse, SQL compiles and query fields exist |
206
+ | `test` | Run the app's `*.test.q` tests |
207
+ | `console` · `desktop` | The application's pages in the terminal, or in a desktop window |
208
+ | `admin` | Start the Quantum Admin (`pip install "quantum-framework[admin]"`) |
207
209
  | `pkg` · `jobs` · `mq` · `migrate` | Packages, jobs, message queues, migrations |
208
210
 
209
211
  ### From source
@@ -237,19 +239,22 @@ Releases and their notes are on the [GitHub Releases](https://github.com/danielg
237
239
 
238
240
  Support levels are defined in **[SUPPORT_TIERS.md](https://github.com/danielgregorio/quantum/blob/main/SUPPORT_TIERS.md)**. Short version:
239
241
 
240
- | Surface | Status |
241
- |---------|--------|
242
- | Core language — `q:component`, `q:set`, `q:if`, `q:loop`, `q:function`, `q:query`, `q:action`, `q:invoke`, `q:data` | **Stable** |
243
- | AI — `q:llm`, `q:knowledge`, `q:agent` | **Beta** — validated end-to-end against a live Ollama server |
244
- | `q:team` (multi-agent handoff) | Beta, less exercised |
245
- | Jobs, messaging, websockets, mail, file uploads, `ui:*`, terminal target | **Experimental** — they run, but no API stability promise |
246
- | Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) | Experimental, and a full-trust escape hatch — see [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) |
242
+ | Tier | Surface |
243
+ |------|---------|
244
+ | **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` |
245
+ | **AI** — the Core contract plus a live test against a real model | `q:llm`, `q:knowledge`, `q:agent` |
246
+ | **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 |
247
+ | 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) |
247
248
 
248
249
  A functional audit in 2026-09 found that several of these surfaces had never been run
249
250
  end-to-end despite being documented as complete. They were fixed or re-labelled, and
250
251
  feature status is now verified by execution rather than asserted by hand.
251
252
 
252
- Pre-1.0: APIs may change between minor versions.
253
+ From 1.0, **Core and AI follow semantic versioning**: a 1.x release does not break a
254
+ program that uses only them — their meaning is fixed by the rules in
255
+ [SPEC.md](https://github.com/danielgregorio/quantum/blob/main/SPEC.md), and a break
256
+ waits for 2.0. Experimental and Laboratory surfaces carry no such promise and may
257
+ change in any release.
253
258
 
254
259
  ---
255
260
 
@@ -14,7 +14,7 @@ forms, LLM calls and retrieval-augmented generation are all tags — not librari
14
14
  wire together. It takes its philosophy from ColdFusion and Adobe Flex: the markup *is*
15
15
  the app.
16
16
 
17
- > ⚠️ **Pre-1.0, and honest about it.** See [Stability](#stability) — the table there
17
+ > **1.0, and honest about it.** See [Stability](#stability) — the table there
18
18
  > reflects what has actually been executed end-to-end, not what is aspirational.
19
19
 
20
20
  ---
@@ -25,7 +25,7 @@ Retrieval-augmented generation, as a language construct:
25
25
 
26
26
  ```xml
27
27
  <q:component name="DocsBot">
28
- <q:knowledge name="docs" model="phi3" embedModel="nomic-embed-text">
28
+ <q:knowledge name="docs" embedModel="nomic-embed-text">
29
29
  <q:source type="directory" path="./docs/" pattern="*.md" />
30
30
  </q:knowledge>
31
31
 
@@ -150,10 +150,13 @@ datasources:
150
150
 
151
151
  | Command | What it does |
152
152
  |---------|--------------|
153
- | `run <file.q>` | Execute a component, app, or API |
153
+ | `run <file.q>` | Execute a component, or build a `q:application` (`ui`, `terminal`, `game`) |
154
154
  | `start` | Start the web server (port 8080 by default; `--port` to change) |
155
155
  | `stop` | Stop the server started by `start` |
156
- | `deploy [path]` · `apps` | Deploy an application, manage deployed ones |
156
+ | `check` | Check that pages parse, SQL compiles and query fields exist |
157
+ | `test` | Run the app's `*.test.q` tests |
158
+ | `console` · `desktop` | The application's pages in the terminal, or in a desktop window |
159
+ | `admin` | Start the Quantum Admin (`pip install "quantum-framework[admin]"`) |
157
160
  | `pkg` · `jobs` · `mq` · `migrate` | Packages, jobs, message queues, migrations |
158
161
 
159
162
  ### From source
@@ -187,19 +190,22 @@ Releases and their notes are on the [GitHub Releases](https://github.com/danielg
187
190
 
188
191
  Support levels are defined in **[SUPPORT_TIERS.md](https://github.com/danielgregorio/quantum/blob/main/SUPPORT_TIERS.md)**. Short version:
189
192
 
190
- | Surface | Status |
191
- |---------|--------|
192
- | Core language — `q:component`, `q:set`, `q:if`, `q:loop`, `q:function`, `q:query`, `q:action`, `q:invoke`, `q:data` | **Stable** |
193
- | AI — `q:llm`, `q:knowledge`, `q:agent` | **Beta** — validated end-to-end against a live Ollama server |
194
- | `q:team` (multi-agent handoff) | Beta, less exercised |
195
- | Jobs, messaging, websockets, mail, file uploads, `ui:*`, terminal target | **Experimental** — they run, but no API stability promise |
196
- | Python scripting (`q:python`, `q:pyclass`, `q:pyimport`) | Experimental, and a full-trust escape hatch — see [SECURITY.md](https://github.com/danielgregorio/quantum/blob/main/SECURITY.md) |
193
+ | Tier | Surface |
194
+ |------|---------|
195
+ | **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` |
196
+ | **AI** — the Core contract plus a live test against a real model | `q:llm`, `q:knowledge`, `q:agent` |
197
+ | **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 |
198
+ | 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) |
197
199
 
198
200
  A functional audit in 2026-09 found that several of these surfaces had never been run
199
201
  end-to-end despite being documented as complete. They were fixed or re-labelled, and
200
202
  feature status is now verified by execution rather than asserted by hand.
201
203
 
202
- Pre-1.0: APIs may change between minor versions.
204
+ From 1.0, **Core and AI follow semantic versioning**: a 1.x release does not break a
205
+ program that uses only them — their meaning is fixed by the rules in
206
+ [SPEC.md](https://github.com/danielgregorio/quantum/blob/main/SPEC.md), and a break
207
+ waits for 2.0. Experimental and Laboratory surfaces carry no such promise and may
208
+ change in any release.
203
209
 
204
210
  ---
205
211
 
@@ -4,16 +4,16 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "quantum-framework"
7
- version = "0.22.0"
8
- description = "Full-stack declarative framework for building web, desktop, and mobile applications"
7
+ version = "1.0.0"
8
+ description = "Declarative web applications in XML, with AI and RAG built into the language"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
11
11
  authors = [
12
12
  {name = "Daniel Gregorio", email = "danielgregorio2611@gmail.com"}
13
13
  ]
14
- keywords = ["framework", "declarative", "xml", "web", "desktop", "mobile"]
14
+ keywords = ["framework", "declarative", "xml", "web", "llm", "rag"]
15
15
  classifiers = [
16
- "Development Status :: 4 - Beta",
16
+ "Development Status :: 5 - Production/Stable",
17
17
  "Framework :: Flask",
18
18
  "Intended Audience :: Developers",
19
19
  "License :: OSI Approved :: MIT License",
@@ -36,8 +36,9 @@ dev = [
36
36
  "pytest-cov>=4.1.0",
37
37
  "pytest-mock>=3.11.1",
38
38
  "pytest-xdist>=3.5",
39
- "black>=23.0.0",
40
- "ruff>=0.1.0",
39
+ # Pinned to a minor version: `ruff check` blocks CI, and a new release
40
+ # that adds checks must not turn main red with no change to the code.
41
+ "ruff>=0.16,<0.17",
41
42
  ]
42
43
  db = [
43
44
  "psycopg2-binary>=2.9.9",
@@ -99,14 +100,34 @@ quantum_admin = ["backend/*", "backend/**/*", "templates/**/*", "static/**/*", "
99
100
  "settings/**/*", "*.db"]
100
101
 
101
102
 
102
- [tool.black]
103
- line-length = 100
104
- target-version = ['py311', 'py312']
105
-
106
103
  [tool.ruff]
107
104
  line-length = 100
108
- select = ["E", "F", "W", "I"]
109
- ignore = ["E501"]
105
+
106
+ # `ruff check quantum tests` is clean and blocking in CI. Each rule left out
107
+ # says why; anything else it finds is a finding to fix.
108
+ [tool.ruff.lint]
109
+ # "I" (import sorting) is not selected: sorting the imports of ~400 files is
110
+ # churn with no bug behind it, and it would conflict with every open branch.
111
+ select = ["E", "F", "W"]
112
+ ignore = [
113
+ # Line length: templates, SQL and user-facing messages read better whole;
114
+ # length is left to review.
115
+ "E501",
116
+ # Ambiguous names (`l`, `O`, `I`): 13 short-lived loop variables; renaming
117
+ # them fixes nothing.
118
+ "E741",
119
+ ]
120
+
121
+ [tool.ruff.lint.per-file-ignores]
122
+ # A package __init__ re-exports names on purpose (and quantum.core re-exports
123
+ # the AST with `*`).
124
+ "**/__init__.py" = ["F401", "F403"]
125
+ # The feature modules import QuantumNode from ast_nodes, so their node classes
126
+ # can only be imported after QuantumNode is defined, mid-module.
127
+ "quantum/core/ast_nodes.py" = ["E402"]
128
+ # A pytest fixture imported into a test module and requested as a parameter
129
+ # reads as a redefinition.
130
+ "tests/**" = ["F811"]
110
131
 
111
132
  [tool.pytest.ini_options]
112
133
  testpaths = ["tests"]
@@ -293,11 +293,13 @@ class HotReloadServer:
293
293
 
294
294
  def stop(self):
295
295
  """Stop the WebSocket server."""
296
+ # Only clear the flag: main() leaves its loop within 0.1 s and the
297
+ # `async with serve(...)` closes the server and its sockets. Stopping
298
+ # the event loop instead abandoned main() mid-`async with`; the loop
299
+ # was then closed under it, and when the orphaned coroutine was
300
+ # collected later its cleanup raised "Event loop is closed".
296
301
  self._running = False
297
302
 
298
- if self._loop:
299
- self._loop.call_soon_threadsafe(self._loop.stop)
300
-
301
303
  if self._thread:
302
304
  self._thread.join(timeout=2)
303
305
  self._thread = None
@@ -306,7 +308,11 @@ class HotReloadServer:
306
308
  """Run the WebSocket server (in background thread)."""
307
309
  try:
308
310
  import websockets
309
- import websockets.server
311
+ try:
312
+ # websockets >= 13; the legacy module warns since 14.
313
+ from websockets.asyncio.server import serve
314
+ except ImportError:
315
+ from websockets.server import serve
310
316
  except ImportError:
311
317
  print("[Hot Reload] websockets library not found. Using fallback polling.")
312
318
  print("[Hot Reload] Install with: pip install websockets")
@@ -338,7 +344,7 @@ class HotReloadServer:
338
344
  self._clients.discard(websocket)
339
345
 
340
346
  async def main():
341
- async with websockets.server.serve(handler, self.host, self.port):
347
+ async with serve(handler, self.host, self.port):
342
348
  while self._running:
343
349
  await asyncio.sleep(0.1)
344
350
 
@@ -350,6 +356,7 @@ class HotReloadServer:
350
356
  except Exception:
351
357
  pass
352
358
  finally:
359
+ self._loop.run_until_complete(self._loop.shutdown_asyncgens())
353
360
  self._loop.close()
354
361
 
355
362
  def broadcast(self, message: dict):
@@ -505,20 +512,21 @@ class HotReloadManager:
505
512
  self._broadcast_error(parse_error)
506
513
  return
507
514
 
508
- # Broadcast reload to clients
509
- self._broadcast_reload(changes, reload_type)
510
-
511
- # Call optional callback
515
+ # The callback runs BEFORE the browsers are told: the server clears
516
+ # its caches there, and a page reloading right after the message must
517
+ # not be served from the old ones.
512
518
  if self.on_reload:
513
519
  try:
514
520
  self.on_reload(changes, reload_type)
515
521
  except Exception as e:
516
522
  self._log(f"Error in reload callback: {e}")
517
523
 
524
+ # Broadcast reload to clients
525
+ self._broadcast_reload(changes, reload_type)
526
+
518
527
  def _check_parse_error(self, path: Path) -> Optional[dict]:
519
528
  """Check if a .q file has parse errors."""
520
529
  try:
521
- import sys
522
530
  from quantum.core.parser import QuantumParser, QuantumParseError
523
531
 
524
532
  parser = QuantumParser()
@@ -6,12 +6,8 @@ Quantum CLI - Job Management Commands
6
6
  Commands for managing scheduled jobs, threads, and job queues.
7
7
  """
8
8
 
9
- import argparse
10
- import sys
11
9
  import json
12
- from pathlib import Path
13
10
  from datetime import datetime
14
- from typing import Optional
15
11
 
16
12
  # Add parent to path for imports
17
13
 
@@ -203,7 +199,7 @@ def _handle_jobs_run(executor, args) -> int:
203
199
 
204
200
  if args.sync:
205
201
  if result.get('success'):
206
- print(f"Job completed successfully.")
202
+ print("Job completed successfully.")
207
203
  if result.get('result'):
208
204
  print(f"Result: {result['result']}")
209
205
  else:
@@ -286,7 +282,7 @@ def _handle_jobs_worker(executor, args) -> int:
286
282
 
287
283
  if args.worker_action == 'start':
288
284
  queues = [q.strip() for q in args.queue.split(',')]
289
- print(f"Starting worker...")
285
+ print("Starting worker...")
290
286
  print(f" Queues: {', '.join(queues)}")
291
287
  print(f" Concurrency: {args.concurrency}")
292
288
  print(f" Poll interval: {args.poll_interval}s")
@@ -2,13 +2,11 @@
2
2
  Database migrations: applies migrations/*.sql to a datasource declared in
3
3
  quantum.config.yaml (DB-6). `quantum migrate` (cli/runner.py) drives it.
4
4
  """
5
- import os
6
- import sys
7
5
  import hashlib
8
6
  import logging
9
7
  from pathlib import Path
10
8
  from datetime import datetime
11
- from typing import Optional, List, Dict, Any
9
+ from typing import List, Dict, Any
12
10
 
13
11
 
14
12
  logger = logging.getLogger(__name__)
@@ -6,12 +6,7 @@ Quantum CLI - Message Queue Commands
6
6
  Commands for managing message queues, publishing messages, and running consumers.
7
7
  """
8
8
 
9
- import argparse
10
- import sys
11
9
  import json
12
- from pathlib import Path
13
- from datetime import datetime
14
- from typing import Optional
15
10
 
16
11
  # Add parent to path for imports
17
12
 
@@ -100,15 +95,13 @@ def create_mq_parser(subparsers):
100
95
  stats_parser.add_argument('--format', choices=['table', 'json'], default='table')
101
96
 
102
97
  # Connection info
103
- info_parser = mq_sub.add_parser('info', help='Show connection information')
98
+ mq_sub.add_parser('info', help='Show connection information')
104
99
 
105
100
  return mq_parser
106
101
 
107
102
 
108
103
  def handle_mq(args) -> int:
109
104
  """Handle mq command"""
110
- from quantum.runtime.message_broker import MessageBroker, Message
111
- from quantum.runtime.adapters.memory_adapter import InMemoryAdapter
112
105
 
113
106
  if not args.mq_action:
114
107
  print("Usage: quantum mq <action>")
@@ -504,7 +497,7 @@ def _handle_mq_worker(broker, args) -> int:
504
497
  """Start message worker"""
505
498
  queues = [q.strip() for q in args.queues.split(',')]
506
499
 
507
- print(f"Starting message worker...")
500
+ print("Starting message worker...")
508
501
  print(f" Queues: {', '.join(queues)}")
509
502
  print(f" Concurrency: {args.concurrency}")
510
503
  print(f" Prefetch: {args.prefetch}")
@@ -12,9 +12,7 @@ CLI commands for package management:
12
12
  """
13
13
 
14
14
  import argparse
15
- import sys
16
15
  from pathlib import Path
17
- from typing import Optional
18
16
 
19
17
 
20
18
  def create_pkg_parser(subparsers: argparse._SubParsersAction) -> None:
@@ -216,8 +214,8 @@ def _handle_init(pm, args: argparse.Namespace) -> int:
216
214
  print(" README.md")
217
215
  print()
218
216
  print("Next steps:")
219
- print(f" 1. Edit src/index.q to create your component")
220
- print(f" 2. Update quantum.yaml with description and keywords")
217
+ print(" 1. Edit src/index.q to create your component")
218
+ print(" 2. Update quantum.yaml with description and keywords")
221
219
  print(f" 3. Run 'quantum pkg publish {args.path}' to create archive")
222
220
 
223
221
  return 0
@@ -231,7 +229,7 @@ def _handle_publish(pm, args: argparse.Namespace) -> int:
231
229
 
232
230
  archive_path = pm.publish(str(path))
233
231
 
234
- print(f"[SUCCESS] Package archive created!")
232
+ print("[SUCCESS] Package archive created!")
235
233
  print(f" Archive: {archive_path}")
236
234
  print()
237
235
  print("Share this archive or upload to a registry.")
@@ -16,7 +16,7 @@ if os.name == 'nt': # Windows
16
16
  if hasattr(sys.stdout, 'reconfigure'):
17
17
  sys.stdout.reconfigure(encoding='utf-8')
18
18
  sys.stderr.reconfigure(encoding='utf-8')
19
- except:
19
+ except Exception:
20
20
  pass # Silent fallback
21
21
 
22
22
  # Fix imports - use absolute imports
@@ -25,18 +25,6 @@ from quantum.core.parser import QuantumParser, QuantumParseError
25
25
  from quantum.core.ast_nodes import ComponentNode, ApplicationNode, JobNode
26
26
  from quantum.runtime.component import ComponentRuntime, ComponentExecutionError
27
27
  from quantum.runtime.executors.control_flow.redirect_executor import PageRedirect
28
- from quantum.runtime.web_server import QuantumWebServer
29
-
30
- # Import deploy commands (lazy load to avoid import errors if requests not installed)
31
- def _get_deploy_module():
32
- try:
33
- from quantum.cli.deploy import (
34
- create_deploy_parser, create_apps_parser,
35
- handle_deploy, handle_apps
36
- )
37
- return True, create_deploy_parser, create_apps_parser, handle_deploy, handle_apps
38
- except ImportError as e:
39
- return False, None, None, None, str(e)
40
28
 
41
29
  # Import package commands
42
30
  def _get_pkg_module():
@@ -98,23 +86,23 @@ class QuantumRunner:
98
86
  self.parser = QuantumParser()
99
87
  self.config = config if config is not None else load_config()
100
88
  self.component_runtime = ComponentRuntime(config=self.config)
101
-
89
+
102
90
  def run(self, file_path: str, debug: bool = False) -> int:
103
91
  """Execute .q file"""
104
92
  try:
105
93
  if debug:
106
94
  print(f"[DEBUG] Parsing file: {Path(file_path).name}")
107
-
95
+
108
96
  # Store source directory for asset resolution
109
97
  self._source_dir = str(Path(file_path).resolve().parent)
110
98
 
111
99
  # Parse file → AST
112
100
  ast_node = self.parser.parse_file(file_path)
113
-
101
+
114
102
  if debug:
115
103
  print(f"[DEBUG] AST generated: {type(ast_node).__name__}")
116
- print(f"[DEBUG] Validating AST...")
117
-
104
+ print("[DEBUG] Validating AST...")
105
+
118
106
  # Validate AST
119
107
  validation_errors = ast_node.validate()
120
108
  if validation_errors:
@@ -122,10 +110,10 @@ class QuantumRunner:
122
110
  for error in validation_errors:
123
111
  print(f" - {error}")
124
112
  return 1
125
-
113
+
126
114
  # Execute based on type
127
115
  return self._execute_ast(ast_node, debug)
128
-
116
+
129
117
  except QuantumParseError as e:
130
118
  print(f"[ERROR] Parse error: {e}")
131
119
  return 1
@@ -135,7 +123,7 @@ class QuantumRunner:
135
123
  import traceback
136
124
  traceback.print_exc()
137
125
  return 1
138
-
126
+
139
127
  def _execute_ast(self, ast_node, debug: bool = False) -> int:
140
128
  """Execute AST based on type"""
141
129
  if isinstance(ast_node, ComponentNode):
@@ -147,7 +135,7 @@ class QuantumRunner:
147
135
  else:
148
136
  print(f"[ERROR] Unsupported AST type: {type(ast_node)}")
149
137
  return 1
150
-
138
+
151
139
  def _execute_component(self, component: ComponentNode, debug: bool = False) -> int:
152
140
  """Execute q:component"""
153
141
  print(f"[EXEC] Executing component: {component.name}")
@@ -155,7 +143,7 @@ class QuantumRunner:
155
143
  print(f" Type: {component.component_type}")
156
144
  print(f" Params: {len(component.params)}")
157
145
  print(f" Returns: {len(component.returns)}")
158
-
146
+
159
147
  try:
160
148
  result = self.component_runtime.execute_component(component)
161
149
  if result is not None:
@@ -163,14 +151,14 @@ class QuantumRunner:
163
151
  else:
164
152
  print("[WARN] Component executed without return")
165
153
  return 0
166
-
154
+
167
155
  except ComponentExecutionError as e:
168
156
  print(f"[ERROR] Execution error: {e}")
169
157
  return 1
170
158
  except PageRedirect as r:
171
159
  print(f"[REDIRECT] {r.status} {r.url}")
172
160
  return 0
173
-
161
+
174
162
  def _execute_application(self, app: ApplicationNode, debug: bool = False) -> int:
175
163
  """Execute q:application"""
176
164
  print(f"[EXEC] Executing application: {app.app_id}")
@@ -251,7 +239,7 @@ class QuantumRunner:
251
239
  print(f"[EXEC] Executing job: {job.job_id}")
252
240
  if job.schedule:
253
241
  print(f"[INFO] Schedule: {job.schedule}")
254
-
242
+
255
243
  # TODO: Implement real job execution
256
244
  print("[SUCCESS] Job executed successfully")
257
245
  return 0
@@ -260,7 +248,7 @@ class QuantumRunner:
260
248
  def main():
261
249
  """CLI entry point"""
262
250
  parser = argparse.ArgumentParser(
263
- description='Quantum CLI - Execute .q files, start servers, and deploy applications',
251
+ description='Quantum CLI - Execute .q files and start servers',
264
252
  formatter_class=argparse.RawDescriptionHelpFormatter,
265
253
  epilog="""
266
254
  Examples:
@@ -273,9 +261,6 @@ Examples:
273
261
  quantum test # Run the app's *.test.q tests
274
262
  quantum run game.q --engine godot # Build Godot 4 project
275
263
  quantum run backup-job.q # Execute job
276
- quantum deploy ./my-app # Deploy application
277
- quantum apps # List deployed apps
278
- quantum apps logs my-app # View app logs
279
264
  quantum pkg init ./my-component # Initialize new package
280
265
  quantum pkg install ./package # Install package
281
266
  quantum pkg list # List installed packages
@@ -317,6 +302,10 @@ Examples:
317
302
  start_parser.add_argument('--port', type=int, help='Port (overrides config)')
318
303
  start_parser.add_argument('--config', default='quantum.config.yaml', help='Config file')
319
304
  start_parser.add_argument('--debug', action='store_true', help='Debug mode')
305
+ start_parser.add_argument('--hot-reload', action='store_true',
306
+ help='Reload the open pages when a component or static file changes')
307
+ start_parser.add_argument('--hot-reload-port', type=int, default=None,
308
+ help='WebSocket port for --hot-reload (default 35729)')
320
309
 
321
310
  # Stop command
322
311
  subparsers.add_parser('stop', help='Stop running web server')
@@ -346,13 +335,6 @@ Examples:
346
335
  from quantum.cli.admin import create_admin_parser
347
336
  create_admin_parser(subparsers)
348
337
 
349
- # Deploy commands (if available)
350
- deploy_available, create_deploy_parser, create_apps_parser, handle_deploy, handle_apps = _get_deploy_module()
351
-
352
- if deploy_available:
353
- create_deploy_parser(subparsers)
354
- create_apps_parser(subparsers)
355
-
356
338
  # Package commands (if available)
357
339
  pkg_available, create_pkg_parser, handle_pkg = _get_pkg_module()
358
340
 
@@ -409,7 +391,9 @@ Examples:
409
391
  try:
410
392
  # Exit with whatever the server reports: a taken port or a failed
411
393
  # bind must not look like a clean start to a supervisor or CI.
412
- sys.exit(start_server(args.config, port=getattr(args, 'port', None)) or 0)
394
+ sys.exit(start_server(args.config, port=getattr(args, 'port', None),
395
+ hot_reload=getattr(args, 'hot_reload', False),
396
+ hot_reload_port=getattr(args, 'hot_reload_port', None)) or 0)
413
397
  except Exception as e:
414
398
  print(f"[ERROR] Failed to start server: {e}")
415
399
  if getattr(args, 'debug', False):
@@ -455,24 +439,6 @@ Examples:
455
439
  exit_code = runner.run(args.file, getattr(args, 'debug', False))
456
440
  sys.exit(exit_code)
457
441
 
458
- # Handle 'deploy' command
459
- elif args.command == 'deploy':
460
- if not deploy_available:
461
- print("[ERROR] Deploy functionality not available.")
462
- print(f"Missing dependency: {handle_apps}")
463
- print("Install with: pip install requests")
464
- sys.exit(1)
465
- sys.exit(handle_deploy(args))
466
-
467
- # Handle 'apps' command
468
- elif args.command == 'apps':
469
- if not deploy_available:
470
- print("[ERROR] Apps functionality not available.")
471
- print(f"Missing dependency: {handle_apps}")
472
- print("Install with: pip install requests")
473
- sys.exit(1)
474
- sys.exit(handle_apps(args))
475
-
476
442
  # Handle 'jobs' command
477
443
  elif args.command == 'jobs':
478
444
  if not jobs_available:
@@ -510,7 +476,6 @@ Examples:
510
476
  runner = MigrationRunner(datasource=getattr(args, 'datasource', None))
511
477
 
512
478
  if args.migrate_command == 'status':
513
- import json
514
479
  status = runner.status()
515
480
  print(f"\nDatabase: {status['database_type']}")
516
481
  print(f"Applied migrations: {status['total_applied']}")