quantum-framework 0.9.0__tar.gz → 0.9.1__tar.gz

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