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

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