fixos 2.2.50__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.
- {fixos-2.2.50 → fixos-2.2.52}/MANIFEST.in +1 -0
- {fixos-2.2.50 → fixos-2.2.52}/PKG-INFO +2 -2
- {fixos-2.2.50 → fixos-2.2.52}/README.md +1 -1
- fixos-2.2.52/VERSION +1 -0
- fixos-2.2.52/fixos/__init__.py +18 -0
- fixos-2.2.52/fixos/cli/__main__.py +6 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/ask_cmd.py +31 -2
- fixos-2.2.52/fixos/cli/dashboard.py +583 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/main.py +41 -41
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/shared.py +47 -1
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/shell_cmd.py +107 -37
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/cache_discovery.py +46 -11
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/disk_analyzer.py +32 -7
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/native_scan.py +100 -7
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/project_scanner.py +14 -1
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/quick_snapshot.py +27 -4
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/service_scanner.py +18 -2
- {fixos-2.2.50 → fixos-2.2.52}/fixos.egg-info/PKG-INFO +2 -2
- {fixos-2.2.50 → fixos-2.2.52}/fixos.egg-info/SOURCES.txt +8 -1
- {fixos-2.2.50 → fixos-2.2.52}/pyproject.toml +1 -1
- {fixos-2.2.50 → fixos-2.2.52}/setup.py +10 -2
- {fixos-2.2.50 → fixos-2.2.52}/tests/conftest.py +11 -2
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_ask_and_nl_group.py +63 -2
- fixos-2.2.52/tests/unit/test_cli_main.py +42 -0
- fixos-2.2.52/tests/unit/test_dashboard.py +350 -0
- fixos-2.2.52/tests/unit/test_disk_analyzer.py +126 -0
- fixos-2.2.52/tests/unit/test_native_scan.py +186 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_project_scanner.py +33 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_quick_snapshot.py +31 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_shell_ux.py +37 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_venv_cleanup.py +2 -2
- fixos-2.2.52/tests/unit/test_version_parity.py +38 -0
- fixos-2.2.50/fixos/__init__.py +0 -3
- fixos-2.2.50/tests/unit/test_disk_analyzer.py +0 -60
- {fixos-2.2.50 → fixos-2.2.52}/.env.example +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/CHANGELOG.md +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/LICENSE +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/README.md +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/TEST_RESULTS.md +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/TEST_RESULTS_V2.md +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/alpine/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/arch/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/base/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/broken-audio/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/broken-full/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/broken-network/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/broken-thumbnails/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/debian/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/docker-compose.multi-system.yml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/docker-compose.yml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/fedora/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/test-multi-system.sh +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/test-scenarios.sh +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/ubuntu/Dockerfile +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docker/validate-scenario.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docs/examples/advanced_usage.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/docs/examples/quickstart.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/__main__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/agent/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/agent/autonomous.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/agent/autonomous_session.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/agent/hitl.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/agent/hitl_session.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/agent/session_core.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/agent/session_handlers.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/agent/session_io.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/anonymizer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/_cleanup_flatpak.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/_cleanup_home.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/_cleanup_snap.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/_cleanup_space.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/_cleanup_system.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/_cleanup_utils.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/_cleanup_venvs.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/cleanup_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/config_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/features_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/fix_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/history_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/jetbrains_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/orchestrate_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/output_formatter.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/profile_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/projects_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/provider_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/quick_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/quickfix_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/report_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/rollback_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/scan_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/token_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli/watch_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/cli.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/config.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/config_interactive.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/constants.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/_flatpak_analysis_mixin.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/_flatpak_execution_mixin.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/_flatpak_recommendations_mixin.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/_storage_container_mixin.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/_storage_system_mixin.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/_storage_user_mixin.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/_shared.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/audio.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/file_analysis.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/hardware.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/packages.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/resources.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/security.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/storage_optimization.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/system_core.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/checks/thumbnails.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/dev_project_analyzer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/docker_network_cleanup.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/docker_startup_optimizer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/flatpak_analyzer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/jetbrains_ai.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/jetbrains_recovery.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/orphaned_workloads.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/process_chains.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/service_cleanup.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/service_details.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/storage_analyzer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/system_checks.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/utils.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/diagnostics/venv_cleanup.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/endpoint_refresh.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/auditor.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/catalog.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/data/packages.yaml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/data/profiles/developer.yaml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/data/profiles/office.yaml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/data/profiles/sysadmin.yaml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/installer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/profiles.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/features/renderer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/fixes/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/interactive/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/interactive/cleanup_planner.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/llm_shell.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/orchestrator/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/orchestrator/executor.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/orchestrator/graph.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/orchestrator/orchestrator.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/orchestrator/rollback.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/orphan_pins.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/platform_utils.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/base.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/builtin/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/builtin/audio.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/builtin/disk.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/builtin/hardware.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/builtin/resources.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/builtin/security.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/builtin/thumbnails.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/plugins/registry.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/profiles/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/profiles/desktop.yaml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/profiles/developer.yaml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/profiles/minimal.yaml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/profiles/server.yaml +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/providers/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/providers/gemini_native.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/providers/llm.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/providers/llm_analyzer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/providers/schemas.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/system_checks.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/utils/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/utils/anonymizer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/utils/terminal.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/utils/timeout.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/utils/web_search.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos/watch.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos.egg-info/dependency_links.txt +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos.egg-info/entry_points.txt +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos.egg-info/requires.txt +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/fixos.egg-info/top_level.txt +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/pytest.ini +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/requirements-dev.txt +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/requirements.txt +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/scripts/pyqual-calibrate.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/setup.cfg +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/e2e/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/e2e/test_anonymization_layers.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/e2e/test_audio_broken.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/e2e/test_cli.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/e2e/test_diagnostics_integration.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/e2e/test_executor.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/e2e/test_multi_system.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/e2e/test_network_broken.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/e2e/test_thumbnails_broken.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/test_fixos.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/__init__.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_anonymizer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_cache_discovery.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_cleanup_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_cleanup_effectiveness.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_cleanup_retention.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_cleanup_safety.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_cleanup_space.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_cleanup_tmp.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_cleanup_utils.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_core.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_dev_project_analyzer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_docker_network_cleanup.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_docker_startup_optimizer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_endpoint_refresh.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_executor.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_gemini_native_client.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_jetbrains_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_jetbrains_recovery.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_llm_auth_stop.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_llm_provider.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_orchestrator.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_orphan_pins.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_orphaned_workloads.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_packaging_data.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_process_chains.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_projects_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_quick_cmd.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_resources_quick.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_security_quick.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_service_cleanup.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_service_scanner.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_storage_analyzer.py +0 -0
- {fixos-2.2.50 → fixos-2.2.52}/tests/unit/test_system_checks_parallel.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fixos
|
|
3
|
-
Version: 2.2.
|
|
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
|
-
    
|
|
67
67
|
  
|
|
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
|
-
    
|
|
24
24
|
  
|
|
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,18 @@
|
|
|
1
|
+
"""fixos – AI-powered Linux/Windows diagnostics and repair."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from importlib.metadata import PackageNotFoundError
|
|
6
|
+
from importlib.metadata import version as _get_version
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
# Single Source of Truth: check VERSION file in repo root first,
|
|
10
|
+
# then fall back to installed package metadata.
|
|
11
|
+
_version_file = Path(__file__).resolve().parent.parent / "VERSION"
|
|
12
|
+
if _version_file.is_file():
|
|
13
|
+
__version__ = _version_file.read_text(encoding="utf-8").strip()
|
|
14
|
+
else:
|
|
15
|
+
try:
|
|
16
|
+
__version__ = _get_version("fixos")
|
|
17
|
+
except (PackageNotFoundError, OSError):
|
|
18
|
+
__version__ = "unknown"
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Natural language command (ask) for fixOS CLI
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
import re
|
|
5
6
|
import subprocess
|
|
6
7
|
from contextlib import suppress
|
|
7
8
|
|
|
@@ -39,6 +40,7 @@ _PACKAGE_ACTION_TERMS = (
|
|
|
39
40
|
"triage",
|
|
40
41
|
)
|
|
41
42
|
_PACKAGE_TRIAGE_COMMAND = ("fixos", ["cleanup", "--full", "--dry-run", "--json"])
|
|
43
|
+
_TMP_CLEANUP_COMMAND = ("fixos", ["cleanup", "--tmp", "--retention", "24h"])
|
|
42
44
|
|
|
43
45
|
|
|
44
46
|
def _is_package_triage_request(prompt_lower: str) -> bool:
|
|
@@ -64,6 +66,13 @@ def _match_heuristic_command(prompt_lower: str) -> object | None:
|
|
|
64
66
|
- tuple: (program, args) for subprocess
|
|
65
67
|
- None: No match found
|
|
66
68
|
"""
|
|
69
|
+
if re.fullmatch(
|
|
70
|
+
r"(?:wyczysc|wyczyść|posprzataj|posprzątaj|clean|cleanup|clear)"
|
|
71
|
+
r"(?:\s+(?:katalog|directory))?\s+/tmp/?",
|
|
72
|
+
prompt_lower.strip(),
|
|
73
|
+
):
|
|
74
|
+
return _TMP_CLEANUP_COMMAND
|
|
75
|
+
|
|
67
76
|
is_docker = any(
|
|
68
77
|
kw in prompt_lower
|
|
69
78
|
for kw in ["docker", "kontener", "kontenery", "container", "containers"]
|
|
@@ -418,8 +427,9 @@ Przykłady:
|
|
|
418
427
|
output = {
|
|
419
428
|
"status": "error",
|
|
420
429
|
"reason": "llm_error",
|
|
430
|
+
"prompt": prompt,
|
|
421
431
|
"message": str(e),
|
|
422
|
-
"hint":
|
|
432
|
+
"hint": "fixos --help",
|
|
423
433
|
}
|
|
424
434
|
click.echo(yaml.dump(output, default_flow_style=False, allow_unicode=True))
|
|
425
435
|
|
|
@@ -435,6 +445,24 @@ def _handle_natural_command(prompt: str, dry_run: bool = False) -> None:
|
|
|
435
445
|
# Stage 1: Try heuristic matching
|
|
436
446
|
matched_cmd = _match_heuristic_command(prompt_lower)
|
|
437
447
|
|
|
448
|
+
if matched_cmd == _TMP_CLEANUP_COMMAND:
|
|
449
|
+
command = _format_command(matched_cmd)
|
|
450
|
+
if dry_run:
|
|
451
|
+
click.echo(yaml.dump(_build_output_dict(
|
|
452
|
+
status="dry_run", prompt=prompt, source="heuristics",
|
|
453
|
+
command=command,
|
|
454
|
+
), default_flow_style=False, allow_unicode=True))
|
|
455
|
+
else:
|
|
456
|
+
from fixos.cli.cleanup_cmd import cleanup_services
|
|
457
|
+
|
|
458
|
+
click.echo(f"→ {command}")
|
|
459
|
+
# Invoke in this terminal: the existing cleaner owns selection,
|
|
460
|
+
# retention and confirmation, without shell capture or LLM calls.
|
|
461
|
+
click.get_current_context().invoke(
|
|
462
|
+
cleanup_services, tmp_cleanup=True, retention="24h", yes=False,
|
|
463
|
+
)
|
|
464
|
+
return
|
|
465
|
+
|
|
438
466
|
if matched_cmd:
|
|
439
467
|
# Heuristic match found - execute directly
|
|
440
468
|
cmd_str = _format_command(matched_cmd)
|
|
@@ -448,8 +476,9 @@ def _handle_natural_command(prompt: str, dry_run: bool = False) -> None:
|
|
|
448
476
|
output = {
|
|
449
477
|
"status": "error",
|
|
450
478
|
"reason": "no_api_key",
|
|
479
|
+
"prompt": prompt,
|
|
451
480
|
"message": "Brak klucza API. Użyj: fixos token set <KLUCZ>",
|
|
452
|
-
"hint":
|
|
481
|
+
"hint": "fixos --help",
|
|
453
482
|
}
|
|
454
483
|
click.echo(yaml.dump(output, default_flow_style=False, allow_unicode=True))
|
|
455
484
|
return
|