fixos 2.2.51__tar.gz → 2.2.52__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 (230) hide show
  1. {fixos-2.2.51 → fixos-2.2.52}/MANIFEST.in +1 -0
  2. {fixos-2.2.51 → fixos-2.2.52}/PKG-INFO +2 -2
  3. {fixos-2.2.51 → fixos-2.2.52}/README.md +1 -1
  4. fixos-2.2.52/VERSION +1 -0
  5. fixos-2.2.52/fixos/cli/__main__.py +6 -0
  6. {fixos-2.2.51 → fixos-2.2.52}/fixos.egg-info/PKG-INFO +2 -2
  7. {fixos-2.2.51 → fixos-2.2.52}/fixos.egg-info/SOURCES.txt +3 -0
  8. {fixos-2.2.51 → fixos-2.2.52}/pyproject.toml +1 -1
  9. {fixos-2.2.51 → fixos-2.2.52}/setup.py +10 -2
  10. fixos-2.2.52/tests/unit/test_cli_main.py +42 -0
  11. {fixos-2.2.51 → fixos-2.2.52}/.env.example +0 -0
  12. {fixos-2.2.51 → fixos-2.2.52}/CHANGELOG.md +0 -0
  13. {fixos-2.2.51 → fixos-2.2.52}/LICENSE +0 -0
  14. {fixos-2.2.51 → fixos-2.2.52}/docker/README.md +0 -0
  15. {fixos-2.2.51 → fixos-2.2.52}/docker/TEST_RESULTS.md +0 -0
  16. {fixos-2.2.51 → fixos-2.2.52}/docker/TEST_RESULTS_V2.md +0 -0
  17. {fixos-2.2.51 → fixos-2.2.52}/docker/alpine/Dockerfile +0 -0
  18. {fixos-2.2.51 → fixos-2.2.52}/docker/arch/Dockerfile +0 -0
  19. {fixos-2.2.51 → fixos-2.2.52}/docker/base/Dockerfile +0 -0
  20. {fixos-2.2.51 → fixos-2.2.52}/docker/broken-audio/Dockerfile +0 -0
  21. {fixos-2.2.51 → fixos-2.2.52}/docker/broken-full/Dockerfile +0 -0
  22. {fixos-2.2.51 → fixos-2.2.52}/docker/broken-network/Dockerfile +0 -0
  23. {fixos-2.2.51 → fixos-2.2.52}/docker/broken-thumbnails/Dockerfile +0 -0
  24. {fixos-2.2.51 → fixos-2.2.52}/docker/debian/Dockerfile +0 -0
  25. {fixos-2.2.51 → fixos-2.2.52}/docker/docker-compose.multi-system.yml +0 -0
  26. {fixos-2.2.51 → fixos-2.2.52}/docker/docker-compose.yml +0 -0
  27. {fixos-2.2.51 → fixos-2.2.52}/docker/fedora/Dockerfile +0 -0
  28. {fixos-2.2.51 → fixos-2.2.52}/docker/test-multi-system.sh +0 -0
  29. {fixos-2.2.51 → fixos-2.2.52}/docker/test-scenarios.sh +0 -0
  30. {fixos-2.2.51 → fixos-2.2.52}/docker/ubuntu/Dockerfile +0 -0
  31. {fixos-2.2.51 → fixos-2.2.52}/docker/validate-scenario.py +0 -0
  32. {fixos-2.2.51 → fixos-2.2.52}/docs/examples/advanced_usage.py +0 -0
  33. {fixos-2.2.51 → fixos-2.2.52}/docs/examples/quickstart.py +0 -0
  34. {fixos-2.2.51 → fixos-2.2.52}/fixos/__init__.py +0 -0
  35. {fixos-2.2.51 → fixos-2.2.52}/fixos/__main__.py +0 -0
  36. {fixos-2.2.51 → fixos-2.2.52}/fixos/agent/__init__.py +0 -0
  37. {fixos-2.2.51 → fixos-2.2.52}/fixos/agent/autonomous.py +0 -0
  38. {fixos-2.2.51 → fixos-2.2.52}/fixos/agent/autonomous_session.py +0 -0
  39. {fixos-2.2.51 → fixos-2.2.52}/fixos/agent/hitl.py +0 -0
  40. {fixos-2.2.51 → fixos-2.2.52}/fixos/agent/hitl_session.py +0 -0
  41. {fixos-2.2.51 → fixos-2.2.52}/fixos/agent/session_core.py +0 -0
  42. {fixos-2.2.51 → fixos-2.2.52}/fixos/agent/session_handlers.py +0 -0
  43. {fixos-2.2.51 → fixos-2.2.52}/fixos/agent/session_io.py +0 -0
  44. {fixos-2.2.51 → fixos-2.2.52}/fixos/anonymizer.py +0 -0
  45. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/__init__.py +0 -0
  46. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/_cleanup_flatpak.py +0 -0
  47. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/_cleanup_home.py +0 -0
  48. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/_cleanup_snap.py +0 -0
  49. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/_cleanup_space.py +0 -0
  50. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/_cleanup_system.py +0 -0
  51. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/_cleanup_utils.py +0 -0
  52. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/_cleanup_venvs.py +0 -0
  53. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/ask_cmd.py +0 -0
  54. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/cleanup_cmd.py +0 -0
  55. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/config_cmd.py +0 -0
  56. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/dashboard.py +0 -0
  57. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/features_cmd.py +0 -0
  58. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/fix_cmd.py +0 -0
  59. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/history_cmd.py +0 -0
  60. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/jetbrains_cmd.py +0 -0
  61. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/main.py +0 -0
  62. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/orchestrate_cmd.py +0 -0
  63. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/output_formatter.py +0 -0
  64. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/profile_cmd.py +0 -0
  65. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/projects_cmd.py +0 -0
  66. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/provider_cmd.py +0 -0
  67. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/quick_cmd.py +0 -0
  68. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/quickfix_cmd.py +0 -0
  69. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/report_cmd.py +0 -0
  70. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/rollback_cmd.py +0 -0
  71. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/scan_cmd.py +0 -0
  72. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/shared.py +0 -0
  73. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/shell_cmd.py +0 -0
  74. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/token_cmd.py +0 -0
  75. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli/watch_cmd.py +0 -0
  76. {fixos-2.2.51 → fixos-2.2.52}/fixos/cli.py +0 -0
  77. {fixos-2.2.51 → fixos-2.2.52}/fixos/config.py +0 -0
  78. {fixos-2.2.51 → fixos-2.2.52}/fixos/config_interactive.py +0 -0
  79. {fixos-2.2.51 → fixos-2.2.52}/fixos/constants.py +0 -0
  80. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/__init__.py +0 -0
  81. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/_flatpak_analysis_mixin.py +0 -0
  82. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/_flatpak_execution_mixin.py +0 -0
  83. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/_flatpak_recommendations_mixin.py +0 -0
  84. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/_storage_container_mixin.py +0 -0
  85. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/_storage_system_mixin.py +0 -0
  86. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/_storage_user_mixin.py +0 -0
  87. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/cache_discovery.py +0 -0
  88. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/__init__.py +0 -0
  89. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/_shared.py +0 -0
  90. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/audio.py +0 -0
  91. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/file_analysis.py +0 -0
  92. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/hardware.py +0 -0
  93. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/packages.py +0 -0
  94. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/resources.py +0 -0
  95. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/security.py +0 -0
  96. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/storage_optimization.py +0 -0
  97. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/system_core.py +0 -0
  98. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/checks/thumbnails.py +0 -0
  99. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/dev_project_analyzer.py +0 -0
  100. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/disk_analyzer.py +0 -0
  101. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/docker_network_cleanup.py +0 -0
  102. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/docker_startup_optimizer.py +0 -0
  103. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/flatpak_analyzer.py +0 -0
  104. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/jetbrains_ai.py +0 -0
  105. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/jetbrains_recovery.py +0 -0
  106. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/native_scan.py +0 -0
  107. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/orphaned_workloads.py +0 -0
  108. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/process_chains.py +0 -0
  109. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/project_scanner.py +0 -0
  110. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/quick_snapshot.py +0 -0
  111. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/service_cleanup.py +0 -0
  112. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/service_details.py +0 -0
  113. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/service_scanner.py +0 -0
  114. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/storage_analyzer.py +0 -0
  115. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/system_checks.py +0 -0
  116. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/utils.py +0 -0
  117. {fixos-2.2.51 → fixos-2.2.52}/fixos/diagnostics/venv_cleanup.py +0 -0
  118. {fixos-2.2.51 → fixos-2.2.52}/fixos/endpoint_refresh.py +0 -0
  119. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/__init__.py +0 -0
  120. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/auditor.py +0 -0
  121. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/catalog.py +0 -0
  122. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/data/packages.yaml +0 -0
  123. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/data/profiles/developer.yaml +0 -0
  124. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/data/profiles/office.yaml +0 -0
  125. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/data/profiles/sysadmin.yaml +0 -0
  126. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/installer.py +0 -0
  127. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/profiles.py +0 -0
  128. {fixos-2.2.51 → fixos-2.2.52}/fixos/features/renderer.py +0 -0
  129. {fixos-2.2.51 → fixos-2.2.52}/fixos/fixes/__init__.py +0 -0
  130. {fixos-2.2.51 → fixos-2.2.52}/fixos/interactive/__init__.py +0 -0
  131. {fixos-2.2.51 → fixos-2.2.52}/fixos/interactive/cleanup_planner.py +0 -0
  132. {fixos-2.2.51 → fixos-2.2.52}/fixos/llm_shell.py +0 -0
  133. {fixos-2.2.51 → fixos-2.2.52}/fixos/orchestrator/__init__.py +0 -0
  134. {fixos-2.2.51 → fixos-2.2.52}/fixos/orchestrator/executor.py +0 -0
  135. {fixos-2.2.51 → fixos-2.2.52}/fixos/orchestrator/graph.py +0 -0
  136. {fixos-2.2.51 → fixos-2.2.52}/fixos/orchestrator/orchestrator.py +0 -0
  137. {fixos-2.2.51 → fixos-2.2.52}/fixos/orchestrator/rollback.py +0 -0
  138. {fixos-2.2.51 → fixos-2.2.52}/fixos/orphan_pins.py +0 -0
  139. {fixos-2.2.51 → fixos-2.2.52}/fixos/platform_utils.py +0 -0
  140. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/__init__.py +0 -0
  141. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/base.py +0 -0
  142. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/builtin/__init__.py +0 -0
  143. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/builtin/audio.py +0 -0
  144. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/builtin/disk.py +0 -0
  145. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/builtin/hardware.py +0 -0
  146. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/builtin/resources.py +0 -0
  147. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/builtin/security.py +0 -0
  148. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/builtin/thumbnails.py +0 -0
  149. {fixos-2.2.51 → fixos-2.2.52}/fixos/plugins/registry.py +0 -0
  150. {fixos-2.2.51 → fixos-2.2.52}/fixos/profiles/__init__.py +0 -0
  151. {fixos-2.2.51 → fixos-2.2.52}/fixos/profiles/desktop.yaml +0 -0
  152. {fixos-2.2.51 → fixos-2.2.52}/fixos/profiles/developer.yaml +0 -0
  153. {fixos-2.2.51 → fixos-2.2.52}/fixos/profiles/minimal.yaml +0 -0
  154. {fixos-2.2.51 → fixos-2.2.52}/fixos/profiles/server.yaml +0 -0
  155. {fixos-2.2.51 → fixos-2.2.52}/fixos/providers/__init__.py +0 -0
  156. {fixos-2.2.51 → fixos-2.2.52}/fixos/providers/gemini_native.py +0 -0
  157. {fixos-2.2.51 → fixos-2.2.52}/fixos/providers/llm.py +0 -0
  158. {fixos-2.2.51 → fixos-2.2.52}/fixos/providers/llm_analyzer.py +0 -0
  159. {fixos-2.2.51 → fixos-2.2.52}/fixos/providers/schemas.py +0 -0
  160. {fixos-2.2.51 → fixos-2.2.52}/fixos/system_checks.py +0 -0
  161. {fixos-2.2.51 → fixos-2.2.52}/fixos/utils/__init__.py +0 -0
  162. {fixos-2.2.51 → fixos-2.2.52}/fixos/utils/anonymizer.py +0 -0
  163. {fixos-2.2.51 → fixos-2.2.52}/fixos/utils/terminal.py +0 -0
  164. {fixos-2.2.51 → fixos-2.2.52}/fixos/utils/timeout.py +0 -0
  165. {fixos-2.2.51 → fixos-2.2.52}/fixos/utils/web_search.py +0 -0
  166. {fixos-2.2.51 → fixos-2.2.52}/fixos/watch.py +0 -0
  167. {fixos-2.2.51 → fixos-2.2.52}/fixos.egg-info/dependency_links.txt +0 -0
  168. {fixos-2.2.51 → fixos-2.2.52}/fixos.egg-info/entry_points.txt +0 -0
  169. {fixos-2.2.51 → fixos-2.2.52}/fixos.egg-info/requires.txt +0 -0
  170. {fixos-2.2.51 → fixos-2.2.52}/fixos.egg-info/top_level.txt +0 -0
  171. {fixos-2.2.51 → fixos-2.2.52}/pytest.ini +0 -0
  172. {fixos-2.2.51 → fixos-2.2.52}/requirements-dev.txt +0 -0
  173. {fixos-2.2.51 → fixos-2.2.52}/requirements.txt +0 -0
  174. {fixos-2.2.51 → fixos-2.2.52}/scripts/pyqual-calibrate.py +0 -0
  175. {fixos-2.2.51 → fixos-2.2.52}/setup.cfg +0 -0
  176. {fixos-2.2.51 → fixos-2.2.52}/tests/__init__.py +0 -0
  177. {fixos-2.2.51 → fixos-2.2.52}/tests/conftest.py +0 -0
  178. {fixos-2.2.51 → fixos-2.2.52}/tests/e2e/__init__.py +0 -0
  179. {fixos-2.2.51 → fixos-2.2.52}/tests/e2e/test_anonymization_layers.py +0 -0
  180. {fixos-2.2.51 → fixos-2.2.52}/tests/e2e/test_audio_broken.py +0 -0
  181. {fixos-2.2.51 → fixos-2.2.52}/tests/e2e/test_cli.py +0 -0
  182. {fixos-2.2.51 → fixos-2.2.52}/tests/e2e/test_diagnostics_integration.py +0 -0
  183. {fixos-2.2.51 → fixos-2.2.52}/tests/e2e/test_executor.py +0 -0
  184. {fixos-2.2.51 → fixos-2.2.52}/tests/e2e/test_multi_system.py +0 -0
  185. {fixos-2.2.51 → fixos-2.2.52}/tests/e2e/test_network_broken.py +0 -0
  186. {fixos-2.2.51 → fixos-2.2.52}/tests/e2e/test_thumbnails_broken.py +0 -0
  187. {fixos-2.2.51 → fixos-2.2.52}/tests/test_fixos.py +0 -0
  188. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/__init__.py +0 -0
  189. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_anonymizer.py +0 -0
  190. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_ask_and_nl_group.py +0 -0
  191. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_cache_discovery.py +0 -0
  192. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_cleanup_cmd.py +0 -0
  193. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_cleanup_effectiveness.py +0 -0
  194. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_cleanup_retention.py +0 -0
  195. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_cleanup_safety.py +0 -0
  196. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_cleanup_space.py +0 -0
  197. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_cleanup_tmp.py +0 -0
  198. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_cleanup_utils.py +0 -0
  199. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_core.py +0 -0
  200. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_dashboard.py +0 -0
  201. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_dev_project_analyzer.py +0 -0
  202. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_disk_analyzer.py +0 -0
  203. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_docker_network_cleanup.py +0 -0
  204. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_docker_startup_optimizer.py +0 -0
  205. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_endpoint_refresh.py +0 -0
  206. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_executor.py +0 -0
  207. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_gemini_native_client.py +0 -0
  208. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_jetbrains_cmd.py +0 -0
  209. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_jetbrains_recovery.py +0 -0
  210. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_llm_auth_stop.py +0 -0
  211. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_llm_provider.py +0 -0
  212. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_native_scan.py +0 -0
  213. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_orchestrator.py +0 -0
  214. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_orphan_pins.py +0 -0
  215. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_orphaned_workloads.py +0 -0
  216. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_packaging_data.py +0 -0
  217. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_process_chains.py +0 -0
  218. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_project_scanner.py +0 -0
  219. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_projects_cmd.py +0 -0
  220. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_quick_cmd.py +0 -0
  221. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_quick_snapshot.py +0 -0
  222. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_resources_quick.py +0 -0
  223. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_security_quick.py +0 -0
  224. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_service_cleanup.py +0 -0
  225. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_service_scanner.py +0 -0
  226. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_shell_ux.py +0 -0
  227. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_storage_analyzer.py +0 -0
  228. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_system_checks_parallel.py +0 -0
  229. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_venv_cleanup.py +0 -0
  230. {fixos-2.2.51 → fixos-2.2.52}/tests/unit/test_version_parity.py +0 -0
@@ -1,5 +1,6 @@
1
1
  include LICENSE
2
2
  include README.md
3
+ include VERSION
3
4
  include CHANGELOG.md
4
5
  include requirements.txt
5
6
  include requirements-dev.txt
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fixos
3
- Version: 2.2.51
3
+ Version: 2.2.52
4
4
  Summary: AI-powered Linux/Windows diagnostics and repair – audio, hardware, system issues
5
5
  Home-page: https://github.com/wronai/fixos
6
6
  Author: fixos contributors
@@ -63,7 +63,7 @@ AI-powered OS Diagnostics
63
63
 
64
64
  ## AI Cost Tracking
65
65
 
66
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-2.2.48-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
66
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-2.2.51-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
67
67
  ![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.90-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-42.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
68
68
 
69
69
  - 🤖 **LLM usage:** $4.9010 (154 commits)
@@ -20,7 +20,7 @@ AI-powered OS Diagnostics
20
20
 
21
21
  ## AI Cost Tracking
22
22
 
23
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-2.2.48-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
23
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-2.2.51-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
24
24
  ![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.90-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-42.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
25
25
 
26
26
  - 🤖 **LLM usage:** $4.9010 (154 commits)
fixos-2.2.52/VERSION ADDED
@@ -0,0 +1 @@
1
+ 2.2.52
@@ -0,0 +1,6 @@
1
+ """Allow running fixOS CLI directly as ``python -m fixos.cli``."""
2
+
3
+ from fixos.cli import main
4
+
5
+ if __name__ == "__main__":
6
+ main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fixos
3
- Version: 2.2.51
3
+ Version: 2.2.52
4
4
  Summary: AI-powered Linux/Windows diagnostics and repair – audio, hardware, system issues
5
5
  Home-page: https://github.com/wronai/fixos
6
6
  Author: fixos contributors
@@ -63,7 +63,7 @@ AI-powered OS Diagnostics
63
63
 
64
64
  ## AI Cost Tracking
65
65
 
66
- ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-2.2.48-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
66
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-2.2.51-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
67
67
  ![AI Cost](https://img.shields.io/badge/AI%20Cost-$4.90-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-42.2h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
68
68
 
69
69
  - 🤖 **LLM usage:** $4.9010 (154 commits)
@@ -3,6 +3,7 @@ CHANGELOG.md
3
3
  LICENSE
4
4
  MANIFEST.in
5
5
  README.md
6
+ VERSION
6
7
  pyproject.toml
7
8
  pytest.ini
8
9
  requirements-dev.txt
@@ -56,6 +57,7 @@ fixos/agent/session_core.py
56
57
  fixos/agent/session_handlers.py
57
58
  fixos/agent/session_io.py
58
59
  fixos/cli/__init__.py
60
+ fixos/cli/__main__.py
59
61
  fixos/cli/_cleanup_flatpak.py
60
62
  fixos/cli/_cleanup_home.py
61
63
  fixos/cli/_cleanup_snap.py
@@ -191,6 +193,7 @@ tests/unit/test_cleanup_safety.py
191
193
  tests/unit/test_cleanup_space.py
192
194
  tests/unit/test_cleanup_tmp.py
193
195
  tests/unit/test_cleanup_utils.py
196
+ tests/unit/test_cli_main.py
194
197
  tests/unit/test_core.py
195
198
  tests/unit/test_dashboard.py
196
199
  tests/unit/test_dev_project_analyzer.py
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fixos"
7
- version = "2.2.51"
7
+ version = "2.2.52"
8
8
  description = "AI-powered Linux/Windows diagnostics and repair – audio, hardware, system issues"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -1,8 +1,16 @@
1
- from setuptools import setup, find_packages
1
+ import re
2
2
  from pathlib import Path
3
3
 
4
+ from setuptools import find_packages, setup
5
+
4
6
  long_description = (Path(__file__).parent / "README.md").read_text(encoding="utf-8")
5
- version = "2.2.48"
7
+ version_file = Path(__file__).parent / "VERSION"
8
+ if version_file.is_file():
9
+ version = version_file.read_text(encoding="utf-8").strip()
10
+ else:
11
+ pyproject_file = Path(__file__).parent / "pyproject.toml"
12
+ match = re.search(r'(?m)^version\s*=\s*["\']([^"\']+)["\']', pyproject_file.read_text(encoding="utf-8"))
13
+ version = match.group(1) if match else "unknown"
6
14
 
7
15
  setup(
8
16
  name="fixos",
@@ -0,0 +1,42 @@
1
+ """Test direct module execution via python -m fixos and python -m fixos.cli."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import subprocess
6
+ import sys
7
+
8
+
9
+ def test_python_m_fixos_version():
10
+ """Verify python -m fixos --version runs successfully."""
11
+ result = subprocess.run(
12
+ [sys.executable, "-m", "fixos", "--version"],
13
+ capture_output=True,
14
+ text=True,
15
+ check=False,
16
+ )
17
+ assert result.returncode == 0
18
+ assert "fixos" in result.stdout.lower() or "version" in result.stdout.lower()
19
+
20
+
21
+ def test_python_m_fixos_cli_version():
22
+ """Verify python -m fixos.cli --version runs successfully."""
23
+ result = subprocess.run(
24
+ [sys.executable, "-m", "fixos.cli", "--version"],
25
+ capture_output=True,
26
+ text=True,
27
+ check=False,
28
+ )
29
+ assert result.returncode == 0
30
+ assert "fixos" in result.stdout.lower() or "version" in result.stdout.lower()
31
+
32
+
33
+ def test_python_m_fixos_cli_help():
34
+ """Verify python -m fixos.cli --help displays CLI options."""
35
+ result = subprocess.run(
36
+ [sys.executable, "-m", "fixos.cli", "--help"],
37
+ capture_output=True,
38
+ text=True,
39
+ check=False,
40
+ )
41
+ assert result.returncode == 0
42
+ assert "python -m fixos.cli" in result.stdout or "fixos" in result.stdout
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes