quantum-framework 0.18.0__py3-none-any.whl

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 (333) hide show
  1. quantum/__init__.py +1 -0
  2. quantum/cli/__init__.py +2 -0
  3. quantum/cli/admin.py +131 -0
  4. quantum/cli/check.py +223 -0
  5. quantum/cli/commands/__init__.py +15 -0
  6. quantum/cli/commands/build.py +414 -0
  7. quantum/cli/commands/dev.py +185 -0
  8. quantum/cli/commands/docs.py +329 -0
  9. quantum/cli/commands/lint.py +523 -0
  10. quantum/cli/commands/migrate.py +548 -0
  11. quantum/cli/commands/new.py +622 -0
  12. quantum/cli/commands/serve.py +190 -0
  13. quantum/cli/commands/test.py +193 -0
  14. quantum/cli/deploy.py +810 -0
  15. quantum/cli/hot_reload.py +951 -0
  16. quantum/cli/jobs.py +356 -0
  17. quantum/cli/mq.py +582 -0
  18. quantum/cli/pkg.py +390 -0
  19. quantum/cli/runner.py +565 -0
  20. quantum/cli/server_process.py +159 -0
  21. quantum/cli/utils.py +334 -0
  22. quantum/compiler/__init__.py +30 -0
  23. quantum/compiler/base_generator.py +367 -0
  24. quantum/compiler/cli.py +295 -0
  25. quantum/compiler/expression_transformer.py +444 -0
  26. quantum/compiler/javascript/__init__.py +10 -0
  27. quantum/compiler/javascript/generator.py +659 -0
  28. quantum/compiler/optimizer.py +270 -0
  29. quantum/compiler/python/__init__.py +10 -0
  30. quantum/compiler/python/generator.py +883 -0
  31. quantum/compiler/python/runtime.py +863 -0
  32. quantum/compiler/transpiler.py +330 -0
  33. quantum/core/__init__.py +3 -0
  34. quantum/core/ast_nodes.py +2619 -0
  35. quantum/core/config_env.py +54 -0
  36. quantum/core/docs_links.py +8 -0
  37. quantum/core/expression_diagnostics.py +87 -0
  38. quantum/core/expression_stdlib.py +208 -0
  39. quantum/core/expressions.py +677 -0
  40. quantum/core/features/agents/src/__init__.py +30 -0
  41. quantum/core/features/agents/src/ast_node.py +540 -0
  42. quantum/core/features/conditionals/src/__init__.py +8 -0
  43. quantum/core/features/conditionals/src/ast_node.py +68 -0
  44. quantum/core/features/data_import/src/__init__.py +0 -0
  45. quantum/core/features/data_import/src/ast_node.py +292 -0
  46. quantum/core/features/data_import/src/runtime.py +533 -0
  47. quantum/core/features/dump/src/__init__.py +12 -0
  48. quantum/core/features/dump/src/ast_node.py +106 -0
  49. quantum/core/features/dump/src/parser.py +61 -0
  50. quantum/core/features/dump/src/runtime.py +246 -0
  51. quantum/core/features/functions/src/__init__.py +8 -0
  52. quantum/core/features/functions/src/ast_node.py +149 -0
  53. quantum/core/features/game_engine_2d/src/__init__.py +19 -0
  54. quantum/core/features/game_engine_2d/src/ast_nodes.py +1719 -0
  55. quantum/core/features/game_engine_2d/src/parser.py +983 -0
  56. quantum/core/features/invocation/src/__init__.py +0 -0
  57. quantum/core/features/invocation/src/ast_node.py +147 -0
  58. quantum/core/features/invocation/src/runtime.py +332 -0
  59. quantum/core/features/knowledge_base/src/__init__.py +6 -0
  60. quantum/core/features/knowledge_base/src/ast_node.py +113 -0
  61. quantum/core/features/knowledge_base/src/parser.py +82 -0
  62. quantum/core/features/logging/src/__init__.py +12 -0
  63. quantum/core/features/logging/src/ast_node.py +111 -0
  64. quantum/core/features/logging/src/parser.py +50 -0
  65. quantum/core/features/logging/src/runtime.py +190 -0
  66. quantum/core/features/loops/src/__init__.py +8 -0
  67. quantum/core/features/loops/src/ast_node.py +60 -0
  68. quantum/core/features/query/src/__init__.py +0 -0
  69. quantum/core/features/query/src/query_validators.py +20 -0
  70. quantum/core/features/state_management/src/__init__.py +11 -0
  71. quantum/core/features/state_management/src/ast_node.py +121 -0
  72. quantum/core/features/terminal_engine/src/__init__.py +21 -0
  73. quantum/core/features/terminal_engine/src/ast_nodes.py +560 -0
  74. quantum/core/features/terminal_engine/src/parser.py +361 -0
  75. quantum/core/features/testing_engine/src/__init__.py +41 -0
  76. quantum/core/features/testing_engine/src/ast_nodes.py +1212 -0
  77. quantum/core/features/testing_engine/src/parser.py +604 -0
  78. quantum/core/features/theming/src/__init__.py +48 -0
  79. quantum/core/features/theming/src/ast_node.py +137 -0
  80. quantum/core/features/theming/src/presets.py +405 -0
  81. quantum/core/features/ui_engine/src/__init__.py +20 -0
  82. quantum/core/features/ui_engine/src/ast_nodes.py +1913 -0
  83. quantum/core/features/ui_engine/src/parser.py +1192 -0
  84. quantum/core/features/websocket/src/__init__.py +24 -0
  85. quantum/core/features/websocket/src/ast_node.py +247 -0
  86. quantum/core/guards.py +53 -0
  87. quantum/core/html_compat.py +299 -0
  88. quantum/core/parser.py +1551 -0
  89. quantum/core/parser_registry.py +213 -0
  90. quantum/core/parsers/__init__.py +76 -0
  91. quantum/core/parsers/ai/__init__.py +12 -0
  92. quantum/core/parsers/ai/agent_parser.py +106 -0
  93. quantum/core/parsers/ai/knowledge_parser.py +86 -0
  94. quantum/core/parsers/ai/llm_parser.py +78 -0
  95. quantum/core/parsers/ai/team_parser.py +88 -0
  96. quantum/core/parsers/base.py +322 -0
  97. quantum/core/parsers/composition/__init__.py +10 -0
  98. quantum/core/parsers/composition/import_parser.py +50 -0
  99. quantum/core/parsers/composition/slot_parser.py +48 -0
  100. quantum/core/parsers/control_flow/__init__.py +11 -0
  101. quantum/core/parsers/control_flow/if_parser.py +71 -0
  102. quantum/core/parsers/control_flow/loop_parser.py +105 -0
  103. quantum/core/parsers/control_flow/set_parser.py +93 -0
  104. quantum/core/parsers/data/__init__.py +12 -0
  105. quantum/core/parsers/data/data_parser.py +229 -0
  106. quantum/core/parsers/data/invoke_parser.py +133 -0
  107. quantum/core/parsers/data/query_parser.py +213 -0
  108. quantum/core/parsers/data/transaction_parser.py +86 -0
  109. quantum/core/parsers/events/__init__.py +9 -0
  110. quantum/core/parsers/events/dispatch_event_parser.py +44 -0
  111. quantum/core/parsers/forms/__init__.py +11 -0
  112. quantum/core/parsers/forms/action_parser.py +79 -0
  113. quantum/core/parsers/forms/flash_parser.py +34 -0
  114. quantum/core/parsers/forms/redirect_parser.py +33 -0
  115. quantum/core/parsers/functions/__init__.py +11 -0
  116. quantum/core/parsers/functions/function_parser.py +98 -0
  117. quantum/core/parsers/functions/param_parser.py +73 -0
  118. quantum/core/parsers/functions/return_parser.py +31 -0
  119. quantum/core/parsers/html/__init__.py +10 -0
  120. quantum/core/parsers/html/component_call_parser.py +130 -0
  121. quantum/core/parsers/html/html_parser.py +115 -0
  122. quantum/core/parsers/jobs/__init__.py +11 -0
  123. quantum/core/parsers/jobs/job_parser.py +71 -0
  124. quantum/core/parsers/jobs/schedule_parser.py +62 -0
  125. quantum/core/parsers/jobs/thread_parser.py +57 -0
  126. quantum/core/parsers/messaging/__init__.py +17 -0
  127. quantum/core/parsers/messaging/message_ack_parser.py +30 -0
  128. quantum/core/parsers/messaging/message_nack_parser.py +30 -0
  129. quantum/core/parsers/messaging/message_parser.py +114 -0
  130. quantum/core/parsers/messaging/queue_parser.py +61 -0
  131. quantum/core/parsers/messaging/websocket_parser.py +121 -0
  132. quantum/core/parsers/routing/__init__.py +9 -0
  133. quantum/core/parsers/routing/route_parser.py +41 -0
  134. quantum/core/parsers/scripting/__init__.py +12 -0
  135. quantum/core/parsers/scripting/pyclass_parser.py +62 -0
  136. quantum/core/parsers/scripting/pydecorator_parser.py +68 -0
  137. quantum/core/parsers/scripting/pyimport_parser.py +52 -0
  138. quantum/core/parsers/scripting/python_parser.py +49 -0
  139. quantum/core/parsers/services/__init__.py +12 -0
  140. quantum/core/parsers/services/dump_parser.py +52 -0
  141. quantum/core/parsers/services/file_parser.py +48 -0
  142. quantum/core/parsers/services/log_parser.py +46 -0
  143. quantum/core/parsers/services/mail_parser.py +65 -0
  144. quantum/core/tiers.py +164 -0
  145. quantum/core/xml_lines.py +81 -0
  146. quantum/packages/__init__.py +28 -0
  147. quantum/packages/manager.py +413 -0
  148. quantum/packages/manifest.py +351 -0
  149. quantum/packages/registry.py +399 -0
  150. quantum/packages/resolver.py +336 -0
  151. quantum/plugins/__init__.py +33 -0
  152. quantum/plugins/hooks.py +329 -0
  153. quantum/plugins/loader.py +479 -0
  154. quantum/plugins/manifest.py +336 -0
  155. quantum/plugins/registry.py +371 -0
  156. quantum/runtime/__init__.py +25 -0
  157. quantum/runtime/action_handler.py +532 -0
  158. quantum/runtime/adapters/__init__.py +88 -0
  159. quantum/runtime/adapters/memory_adapter.py +690 -0
  160. quantum/runtime/adapters/rabbitmq_adapter.py +715 -0
  161. quantum/runtime/adapters/redis_adapter.py +582 -0
  162. quantum/runtime/adapters/sqlite_adapter.py +414 -0
  163. quantum/runtime/agent_service.py +1133 -0
  164. quantum/runtime/ast_cache.py +506 -0
  165. quantum/runtime/auth_service.py +267 -0
  166. quantum/runtime/component.py +1048 -0
  167. quantum/runtime/component_composer.py +133 -0
  168. quantum/runtime/component_resolver.py +174 -0
  169. quantum/runtime/conditions.py +54 -0
  170. quantum/runtime/database_service.py +595 -0
  171. quantum/runtime/db_schema.py +100 -0
  172. quantum/runtime/dev_panel.py +178 -0
  173. quantum/runtime/email_service.py +162 -0
  174. quantum/runtime/error_handler.py +295 -0
  175. quantum/runtime/execution_context.py +283 -0
  176. quantum/runtime/executor_registry.py +178 -0
  177. quantum/runtime/executors/__init__.py +71 -0
  178. quantum/runtime/executors/ai/__init__.py +12 -0
  179. quantum/runtime/executors/ai/agent_executor.py +217 -0
  180. quantum/runtime/executors/ai/knowledge_executor.py +114 -0
  181. quantum/runtime/executors/ai/llm_executor.py +153 -0
  182. quantum/runtime/executors/ai/team_executor.py +171 -0
  183. quantum/runtime/executors/base.py +264 -0
  184. quantum/runtime/executors/control_flow/__init__.py +12 -0
  185. quantum/runtime/executors/control_flow/if_executor.py +98 -0
  186. quantum/runtime/executors/control_flow/loop_executor.py +308 -0
  187. quantum/runtime/executors/control_flow/redirect_executor.py +43 -0
  188. quantum/runtime/executors/control_flow/set_executor.py +464 -0
  189. quantum/runtime/executors/data/__init__.py +12 -0
  190. quantum/runtime/executors/data/data_executor.py +156 -0
  191. quantum/runtime/executors/data/invoke_executor.py +228 -0
  192. quantum/runtime/executors/data/query_executor.py +290 -0
  193. quantum/runtime/executors/data/transaction_executor.py +91 -0
  194. quantum/runtime/executors/jobs/__init__.py +11 -0
  195. quantum/runtime/executors/jobs/job_executor.py +190 -0
  196. quantum/runtime/executors/jobs/schedule_executor.py +132 -0
  197. quantum/runtime/executors/jobs/thread_executor.py +127 -0
  198. quantum/runtime/executors/messaging/__init__.py +17 -0
  199. quantum/runtime/executors/messaging/message_ack_executor.py +51 -0
  200. quantum/runtime/executors/messaging/message_executor.py +174 -0
  201. quantum/runtime/executors/messaging/queue_executor.py +103 -0
  202. quantum/runtime/executors/messaging/websocket_executor.py +197 -0
  203. quantum/runtime/executors/scripting/__init__.py +11 -0
  204. quantum/runtime/executors/scripting/pyclass_executor.py +90 -0
  205. quantum/runtime/executors/scripting/pyimport_executor.py +81 -0
  206. quantum/runtime/executors/scripting/python_executor.py +249 -0
  207. quantum/runtime/executors/services/__init__.py +12 -0
  208. quantum/runtime/executors/services/dump_executor.py +72 -0
  209. quantum/runtime/executors/services/file_executor.py +89 -0
  210. quantum/runtime/executors/services/log_executor.py +77 -0
  211. quantum/runtime/executors/services/mail_executor.py +81 -0
  212. quantum/runtime/expression_cache.py +498 -0
  213. quantum/runtime/file_upload_service.py +326 -0
  214. quantum/runtime/function_registry.py +118 -0
  215. quantum/runtime/game_builder.py +166 -0
  216. quantum/runtime/game_code_generator.py +2371 -0
  217. quantum/runtime/game_templates.py +2006 -0
  218. quantum/runtime/godot_code_generator.py +4681 -0
  219. quantum/runtime/godot_templates.py +1449 -0
  220. quantum/runtime/job_executor.py +1599 -0
  221. quantum/runtime/knowledge_service.py +546 -0
  222. quantum/runtime/llm_cache.py +100 -0
  223. quantum/runtime/llm_providers.py +704 -0
  224. quantum/runtime/llm_service.py +287 -0
  225. quantum/runtime/local_server.py +28 -0
  226. quantum/runtime/logging_setup.py +141 -0
  227. quantum/runtime/message_broker.py +364 -0
  228. quantum/runtime/message_queue_service.py +571 -0
  229. quantum/runtime/param_validation.py +218 -0
  230. quantum/runtime/pypy_compat.py +317 -0
  231. quantum/runtime/python_bridge.py +698 -0
  232. quantum/runtime/query_validators.py +304 -0
  233. quantum/runtime/renderer.py +734 -0
  234. quantum/runtime/service_container.py +470 -0
  235. quantum/runtime/table_params.py +163 -0
  236. quantum/runtime/terminal_builder.py +76 -0
  237. quantum/runtime/terminal_code_generator.py +607 -0
  238. quantum/runtime/terminal_templates.py +243 -0
  239. quantum/runtime/testing_builder.py +77 -0
  240. quantum/runtime/testing_code_generator.py +833 -0
  241. quantum/runtime/testing_templates.py +85 -0
  242. quantum/runtime/ui_builder.py +222 -0
  243. quantum/runtime/ui_console.py +405 -0
  244. quantum/runtime/ui_desktop.py +56 -0
  245. quantum/runtime/ui_form_rules.py +193 -0
  246. quantum/runtime/ui_html_adapter.py +2567 -0
  247. quantum/runtime/ui_html_templates.py +2106 -0
  248. quantum/runtime/ui_mobile_adapter.py +1832 -0
  249. quantum/runtime/ui_mobile_templates.py +1003 -0
  250. quantum/runtime/ui_page_renderer.py +392 -0
  251. quantum/runtime/ui_pager.py +73 -0
  252. quantum/runtime/ui_table_edit.py +139 -0
  253. quantum/runtime/ui_textual_adapter.py +1866 -0
  254. quantum/runtime/ui_textual_templates.py +45 -0
  255. quantum/runtime/ui_tokens.py +465 -0
  256. quantum/runtime/ui_validator.py +365 -0
  257. quantum/runtime/ui_view.py +221 -0
  258. quantum/runtime/validators.py +256 -0
  259. quantum/runtime/web_server.py +2131 -0
  260. quantum/runtime/websocket_adapter.py +501 -0
  261. quantum/runtime/websocket_service.py +585 -0
  262. quantum/runtime/websocket_transport.py +289 -0
  263. quantum/runtime/wsgi.py +101 -0
  264. quantum/services.py +109 -0
  265. quantum/utils/__init__.py +1 -0
  266. quantum_admin/__init__.py +4 -0
  267. quantum_admin/assets/quantum-admin-connectors.js +123 -0
  268. quantum_admin/assets/quantum-admin.css +2058 -0
  269. quantum_admin/assets/quantum-source-highlight.js +106 -0
  270. quantum_admin/backend/__init__.py +4 -0
  271. quantum_admin/backend/audit_service.py +346 -0
  272. quantum_admin/backend/auth_service.py +394 -0
  273. quantum_admin/backend/component_discovery.py +766 -0
  274. quantum_admin/backend/config_generator.py +586 -0
  275. quantum_admin/backend/connector_service.py +1016 -0
  276. quantum_admin/backend/crud.py +557 -0
  277. quantum_admin/backend/database.py +226 -0
  278. quantum_admin/backend/db_setup_service.py +193 -0
  279. quantum_admin/backend/deploy_service.py +698 -0
  280. quantum_admin/backend/docker_service.py +422 -0
  281. quantum_admin/backend/environment_service.py +418 -0
  282. quantum_admin/backend/git_service.py +370 -0
  283. quantum_admin/backend/health_service.py +390 -0
  284. quantum_admin/backend/job_service.py +347 -0
  285. quantum_admin/backend/log_service.py +331 -0
  286. quantum_admin/backend/main.py +14426 -0
  287. quantum_admin/backend/models.py +986 -0
  288. quantum_admin/backend/pipeline_service.py +812 -0
  289. quantum_admin/backend/resource_manager.py +1118 -0
  290. quantum_admin/backend/schemas.py +419 -0
  291. quantum_admin/backend/secret_manager.py +277 -0
  292. quantum_admin/backend/settings_service.py +488 -0
  293. quantum_admin/backend/template_service.py +710 -0
  294. quantum_admin/backend/test_execution_service.py +364 -0
  295. quantum_admin/backend/test_generator.py +782 -0
  296. quantum_admin/backend/webhook_service.py +454 -0
  297. quantum_admin/backend/websocket_manager.py +360 -0
  298. quantum_admin/components/admin/_layout/AdminShell.q +121 -0
  299. quantum_admin/components/admin/agents.q +107 -0
  300. quantum_admin/components/admin/app/[name].q +558 -0
  301. quantum_admin/components/admin/applications.q +160 -0
  302. quantum_admin/components/admin/component/[...path].q +205 -0
  303. quantum_admin/components/admin/components.q +59 -0
  304. quantum_admin/components/admin/connectors.q +283 -0
  305. quantum_admin/components/admin/dashboard.q +86 -0
  306. quantum_admin/components/admin/database.q +95 -0
  307. quantum_admin/components/admin/features.q +69 -0
  308. quantum_admin/components/admin/index.q +12 -0
  309. quantum_admin/components/admin/jobs.q +75 -0
  310. quantum_admin/components/admin/login.q +65 -0
  311. quantum_admin/components/admin/logout.q +11 -0
  312. quantum_admin/components/admin/settings.q +174 -0
  313. quantum_admin/components/admin/source.q +45 -0
  314. quantum_admin/components/admin/tests.q +73 -0
  315. quantum_admin/run.py +13 -0
  316. quantum_admin/services/__init__.py +16 -0
  317. quantum_admin/services/_base.py +84 -0
  318. quantum_admin/services/_component_test_generator.py +205 -0
  319. quantum_admin/services/_yaml_editor.py +82 -0
  320. quantum_admin/services/apps.py +330 -0
  321. quantum_admin/services/auth.py +61 -0
  322. quantum_admin/services/components.py +210 -0
  323. quantum_admin/services/connectors.py +164 -0
  324. quantum_admin/services/projects.py +189 -0
  325. quantum_admin/services/repository.py +223 -0
  326. quantum_admin/services/settings.py +150 -0
  327. quantum_admin/services/yaml_import.py +118 -0
  328. quantum_framework-0.18.0.dist-info/METADATA +281 -0
  329. quantum_framework-0.18.0.dist-info/RECORD +333 -0
  330. quantum_framework-0.18.0.dist-info/WHEEL +5 -0
  331. quantum_framework-0.18.0.dist-info/entry_points.txt +2 -0
  332. quantum_framework-0.18.0.dist-info/licenses/LICENSE +21 -0
  333. quantum_framework-0.18.0.dist-info/top_level.txt +2 -0
quantum/cli/pkg.py ADDED
@@ -0,0 +1,390 @@
1
+ """
2
+ Quantum Package Manager CLI
3
+
4
+ CLI commands for package management:
5
+ - quantum pkg init [path] - Initialize a new package
6
+ - quantum pkg publish [path] - Create publishable archive
7
+ - quantum pkg install <source> - Install package from path/URL
8
+ - quantum pkg remove <name> - Remove installed package
9
+ - quantum pkg list - List installed packages
10
+ - quantum pkg search <query> - Search packages
11
+ - quantum pkg info <name> - Show package details
12
+ """
13
+
14
+ import argparse
15
+ import sys
16
+ from pathlib import Path
17
+ from typing import Optional
18
+
19
+
20
+ def create_pkg_parser(subparsers: argparse._SubParsersAction) -> None:
21
+ """Create the 'pkg' subparser with all package commands."""
22
+ pkg_parser = subparsers.add_parser(
23
+ 'pkg',
24
+ help='Package management commands',
25
+ formatter_class=argparse.RawDescriptionHelpFormatter,
26
+ description='Quantum Package Manager - Share and reuse components',
27
+ epilog="""
28
+ Examples:
29
+ quantum pkg init ./my-component # Create new package
30
+ quantum pkg init -n my-ui -a "Me" # Create with name and author
31
+ quantum pkg install ./other-package # Install from local path
32
+ quantum pkg install https://github.com/user/pkg.git # Install from git
33
+ quantum pkg remove my-component # Remove package
34
+ quantum pkg list # List all packages
35
+ quantum pkg search button # Search for packages
36
+ quantum pkg info my-component # Show package details
37
+ quantum pkg publish ./my-component # Create archive for sharing
38
+ """
39
+ )
40
+
41
+ pkg_subparsers = pkg_parser.add_subparsers(dest='pkg_command', help='Package command')
42
+
43
+ # init command
44
+ init_parser = pkg_subparsers.add_parser(
45
+ 'init',
46
+ help='Initialize a new package'
47
+ )
48
+ init_parser.add_argument(
49
+ 'path',
50
+ nargs='?',
51
+ default='.',
52
+ help='Directory to initialize (default: current directory)'
53
+ )
54
+ init_parser.add_argument(
55
+ '-n', '--name',
56
+ help='Package name (default: directory name)'
57
+ )
58
+ init_parser.add_argument(
59
+ '-d', '--description',
60
+ default='',
61
+ help='Package description'
62
+ )
63
+ init_parser.add_argument(
64
+ '-a', '--author',
65
+ default='',
66
+ help='Package author'
67
+ )
68
+ init_parser.add_argument(
69
+ '-l', '--license',
70
+ default='MIT',
71
+ help='License identifier (default: MIT)'
72
+ )
73
+
74
+ # publish command
75
+ publish_parser = pkg_subparsers.add_parser(
76
+ 'publish',
77
+ help='Create publishable package archive'
78
+ )
79
+ publish_parser.add_argument(
80
+ 'path',
81
+ nargs='?',
82
+ default='.',
83
+ help='Package directory (default: current directory)'
84
+ )
85
+
86
+ # install command
87
+ install_parser = pkg_subparsers.add_parser(
88
+ 'install',
89
+ help='Install a package'
90
+ )
91
+ install_parser.add_argument(
92
+ 'source',
93
+ help='Package source (local path or git URL)'
94
+ )
95
+ install_parser.add_argument(
96
+ '-v', '--version',
97
+ help='Specific version to install'
98
+ )
99
+ install_parser.add_argument(
100
+ '--no-deps',
101
+ action='store_true',
102
+ help='Skip dependency resolution'
103
+ )
104
+
105
+ # remove command
106
+ remove_parser = pkg_subparsers.add_parser(
107
+ 'remove',
108
+ help='Remove an installed package'
109
+ )
110
+ remove_parser.add_argument(
111
+ 'name',
112
+ help='Package name to remove'
113
+ )
114
+ remove_parser.add_argument(
115
+ '-v', '--version',
116
+ help='Specific version to remove (default: all versions)'
117
+ )
118
+
119
+ # list command
120
+ pkg_subparsers.add_parser(
121
+ 'list',
122
+ help='List installed packages'
123
+ )
124
+
125
+ # search command
126
+ search_parser = pkg_subparsers.add_parser(
127
+ 'search',
128
+ help='Search installed packages'
129
+ )
130
+ search_parser.add_argument(
131
+ 'query',
132
+ help='Search query'
133
+ )
134
+
135
+ # info command
136
+ info_parser = pkg_subparsers.add_parser(
137
+ 'info',
138
+ help='Show package details'
139
+ )
140
+ info_parser.add_argument(
141
+ 'name',
142
+ help='Package name'
143
+ )
144
+ info_parser.add_argument(
145
+ '-v', '--version',
146
+ help='Specific version'
147
+ )
148
+
149
+
150
+ def handle_pkg(args: argparse.Namespace) -> int:
151
+ """Handle pkg command and subcommands."""
152
+ # Lazy import to avoid circular imports
153
+ try:
154
+ from quantum.packages import PackageManager, PackageError
155
+ except ImportError:
156
+ # Try relative import
157
+ from quantum.packages import PackageManager, PackageError
158
+
159
+ if not args.pkg_command:
160
+ print("[ERROR] No package command specified")
161
+ print("Usage: quantum pkg <command> [options]")
162
+ print("Commands: init, publish, install, remove, list, search, info")
163
+ return 1
164
+
165
+ pm = PackageManager()
166
+
167
+ try:
168
+ if args.pkg_command == 'init':
169
+ return _handle_init(pm, args)
170
+ elif args.pkg_command == 'publish':
171
+ return _handle_publish(pm, args)
172
+ elif args.pkg_command == 'install':
173
+ return _handle_install(pm, args)
174
+ elif args.pkg_command == 'remove':
175
+ return _handle_remove(pm, args)
176
+ elif args.pkg_command == 'list':
177
+ return _handle_list(pm, args)
178
+ elif args.pkg_command == 'search':
179
+ return _handle_search(pm, args)
180
+ elif args.pkg_command == 'info':
181
+ return _handle_info(pm, args)
182
+ else:
183
+ print(f"[ERROR] Unknown package command: {args.pkg_command}")
184
+ return 1
185
+
186
+ except PackageError as e:
187
+ print(f"[ERROR] {e}")
188
+ return 1
189
+ except Exception as e:
190
+ print(f"[ERROR] Unexpected error: {e}")
191
+ return 1
192
+
193
+
194
+ def _handle_init(pm, args: argparse.Namespace) -> int:
195
+ """Handle 'pkg init' command."""
196
+ path = Path(args.path).resolve()
197
+
198
+ print(f"[INFO] Initializing package in {path}")
199
+
200
+ manifest = pm.init(
201
+ path=str(path),
202
+ name=args.name,
203
+ description=args.description,
204
+ author=args.author,
205
+ license_id=args.license
206
+ )
207
+
208
+ print(f"[SUCCESS] Package '{manifest.name}' initialized!")
209
+ print(f" Version: {manifest.version}")
210
+ print(f" Main: {manifest.main}")
211
+ print()
212
+ print("Created files:")
213
+ print(" quantum.yaml")
214
+ print(" src/index.q")
215
+ print(" examples/demo.q")
216
+ print(" README.md")
217
+ print()
218
+ print("Next steps:")
219
+ print(f" 1. Edit src/index.q to create your component")
220
+ print(f" 2. Update quantum.yaml with description and keywords")
221
+ print(f" 3. Run 'quantum pkg publish {args.path}' to create archive")
222
+
223
+ return 0
224
+
225
+
226
+ def _handle_publish(pm, args: argparse.Namespace) -> int:
227
+ """Handle 'pkg publish' command."""
228
+ path = Path(args.path).resolve()
229
+
230
+ print(f"[INFO] Publishing package from {path}")
231
+
232
+ archive_path = pm.publish(str(path))
233
+
234
+ print(f"[SUCCESS] Package archive created!")
235
+ print(f" Archive: {archive_path}")
236
+ print()
237
+ print("Share this archive or upload to a registry.")
238
+
239
+ return 0
240
+
241
+
242
+ def _handle_install(pm, args: argparse.Namespace) -> int:
243
+ """Handle 'pkg install' command."""
244
+ source = args.source
245
+ resolve_deps = not getattr(args, 'no_deps', False)
246
+
247
+ print(f"[INFO] Installing package from {source}")
248
+
249
+ installed = pm.install(
250
+ source=source,
251
+ version=args.version,
252
+ resolve_deps=resolve_deps
253
+ )
254
+
255
+ if not installed:
256
+ print("[WARN] No packages installed")
257
+ return 0
258
+
259
+ print(f"[SUCCESS] Installed {len(installed)} package(s):")
260
+ for manifest in installed:
261
+ print(f" {manifest.name}@{manifest.version}")
262
+
263
+ return 0
264
+
265
+
266
+ def _handle_remove(pm, args: argparse.Namespace) -> int:
267
+ """Handle 'pkg remove' command."""
268
+ name = args.name
269
+ version = args.version
270
+
271
+ if version:
272
+ print(f"[INFO] Removing {name}@{version}")
273
+ else:
274
+ print(f"[INFO] Removing {name} (all versions)")
275
+
276
+ removed = pm.remove(name, version)
277
+
278
+ if removed:
279
+ print(f"[SUCCESS] Package '{name}' removed")
280
+ return 0
281
+ else:
282
+ print(f"[WARN] Package '{name}' not found")
283
+ return 1
284
+
285
+
286
+ def _handle_list(pm, args: argparse.Namespace) -> int:
287
+ """Handle 'pkg list' command."""
288
+ packages = pm.list_packages()
289
+
290
+ if not packages:
291
+ print("[INFO] No packages installed")
292
+ print()
293
+ print("Install packages with:")
294
+ print(" quantum pkg install <path-or-url>")
295
+ return 0
296
+
297
+ print(f"[INFO] Installed packages ({len(packages)}):")
298
+ print()
299
+
300
+ for pkg in packages:
301
+ name = pkg['name']
302
+ latest = pkg.get('latest', 'unknown')
303
+ description = pkg.get('description', '')[:50]
304
+ versions = pkg.get('versions', [])
305
+
306
+ print(f" {name}@{latest}")
307
+ if description:
308
+ print(f" {description}")
309
+ if len(versions) > 1:
310
+ print(f" Versions: {', '.join(versions)}")
311
+ print()
312
+
313
+ return 0
314
+
315
+
316
+ def _handle_search(pm, args: argparse.Namespace) -> int:
317
+ """Handle 'pkg search' command."""
318
+ query = args.query
319
+
320
+ print(f"[INFO] Searching for '{query}'...")
321
+
322
+ results = pm.search(query)
323
+
324
+ if not results:
325
+ print(f"[INFO] No packages found matching '{query}'")
326
+ return 0
327
+
328
+ print(f"[INFO] Found {len(results)} package(s):")
329
+ print()
330
+
331
+ for pkg in results:
332
+ name = pkg['name']
333
+ latest = pkg.get('latest', 'unknown')
334
+ description = pkg.get('description', '')[:50]
335
+ keywords = pkg.get('keywords', [])
336
+
337
+ print(f" {name}@{latest}")
338
+ if description:
339
+ print(f" {description}")
340
+ if keywords:
341
+ print(f" Keywords: {', '.join(keywords[:5])}")
342
+ print()
343
+
344
+ return 0
345
+
346
+
347
+ def _handle_info(pm, args: argparse.Namespace) -> int:
348
+ """Handle 'pkg info' command."""
349
+ name = args.name
350
+ version = args.version
351
+
352
+ manifest = pm.get_package(name, version)
353
+
354
+ if not manifest:
355
+ print(f"[ERROR] Package '{name}' not found")
356
+ return 1
357
+
358
+ pkg_path = pm.get_package_path(name, version)
359
+
360
+ print(f"[INFO] Package: {manifest.name}")
361
+ print()
362
+ print(f" Version: {manifest.version}")
363
+ print(f" Description: {manifest.description or '(none)'}")
364
+ print(f" Author: {manifest.author or '(none)'}")
365
+ print(f" License: {manifest.license}")
366
+ print(f" Main: {manifest.main}")
367
+ print(f" Path: {pkg_path}")
368
+
369
+ if manifest.keywords:
370
+ print(f" Keywords: {', '.join(manifest.keywords)}")
371
+
372
+ if manifest.dependencies:
373
+ print()
374
+ print(" Dependencies:")
375
+ for dep_name, dep_version in manifest.dependencies.items():
376
+ print(f" {dep_name}: {dep_version}")
377
+
378
+ if manifest.exports:
379
+ print()
380
+ print(" Exports:")
381
+ for export in manifest.exports:
382
+ print(f" {export}")
383
+
384
+ # Show available versions
385
+ all_versions = pm.registry.get_all_versions(name)
386
+ if len(all_versions) > 1:
387
+ print()
388
+ print(f" All versions: {', '.join(all_versions)}")
389
+
390
+ return 0