fixos 2.2.46__tar.gz → 2.2.48__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.46 → fixos-2.2.48}/CHANGELOG.md +107 -5
- {fixos-2.2.46 → fixos-2.2.48}/MANIFEST.in +1 -0
- {fixos-2.2.46 → fixos-2.2.48}/PKG-INFO +50 -16
- {fixos-2.2.46 → fixos-2.2.48}/README.md +48 -13
- {fixos-2.2.46 → fixos-2.2.48}/docker/debian/Dockerfile +1 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/fedora/Dockerfile +1 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/ubuntu/Dockerfile +1 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/__init__.py +1 -1
- {fixos-2.2.46 → fixos-2.2.48}/fixos/agent/autonomous_session.py +29 -23
- fixos-2.2.48/fixos/agent/hitl_session.py +386 -0
- fixos-2.2.48/fixos/agent/session_core.py +781 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/agent/session_handlers.py +253 -16
- {fixos-2.2.46 → fixos-2.2.48}/fixos/agent/session_io.py +127 -18
- fixos-2.2.48/fixos/anonymizer.py +18 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/_cleanup_flatpak.py +5 -1
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/_cleanup_utils.py +15 -2
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/ask_cmd.py +256 -55
- fixos-2.2.48/fixos/cli/cleanup_cmd.py +1740 -0
- fixos-2.2.48/fixos/cli/jetbrains_cmd.py +358 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/main.py +90 -21
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/projects_cmd.py +156 -12
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/quick_cmd.py +10 -12
- fixos-2.2.48/fixos/cli/shared.py +202 -0
- fixos-2.2.48/fixos/cli/shell_cmd.py +199 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/config.py +105 -11
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/_storage_system_mixin.py +62 -17
- fixos-2.2.48/fixos/diagnostics/docker_network_cleanup.py +282 -0
- fixos-2.2.48/fixos/diagnostics/docker_startup_optimizer.py +560 -0
- fixos-2.2.48/fixos/diagnostics/jetbrains_ai.py +294 -0
- fixos-2.2.48/fixos/diagnostics/jetbrains_recovery.py +638 -0
- fixos-2.2.48/fixos/diagnostics/orphaned_workloads.py +731 -0
- fixos-2.2.48/fixos/diagnostics/process_chains.py +594 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/quick_snapshot.py +36 -18
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/service_cleanup.py +442 -86
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/service_scanner.py +99 -38
- fixos-2.2.48/fixos/endpoint_refresh.py +200 -0
- fixos-2.2.48/fixos/features/data/packages.yaml +316 -0
- fixos-2.2.48/fixos/features/data/profiles/developer.yaml +13 -0
- fixos-2.2.48/fixos/features/data/profiles/office.yaml +9 -0
- fixos-2.2.48/fixos/features/data/profiles/sysadmin.yaml +13 -0
- fixos-2.2.48/fixos/orphan_pins.py +155 -0
- fixos-2.2.48/fixos/profiles/desktop.yaml +12 -0
- fixos-2.2.48/fixos/profiles/developer.yaml +10 -0
- fixos-2.2.48/fixos/profiles/minimal.yaml +5 -0
- fixos-2.2.48/fixos/profiles/server.yaml +11 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/providers/llm.py +66 -23
- fixos-2.2.48/fixos/utils/anonymizer.py +560 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos.egg-info/PKG-INFO +50 -16
- {fixos-2.2.46 → fixos-2.2.48}/fixos.egg-info/SOURCES.txt +33 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos.egg-info/requires.txt +3 -2
- {fixos-2.2.46 → fixos-2.2.48}/fixos.egg-info/top_level.txt +0 -3
- {fixos-2.2.46 → fixos-2.2.48}/pyproject.toml +23 -20
- {fixos-2.2.46 → fixos-2.2.48}/pytest.ini +2 -1
- {fixos-2.2.46 → fixos-2.2.48}/setup.py +2 -1
- {fixos-2.2.46 → fixos-2.2.48}/tests/e2e/test_anonymization_layers.py +39 -16
- {fixos-2.2.46 → fixos-2.2.48}/tests/e2e/test_audio_broken.py +4 -2
- {fixos-2.2.46 → fixos-2.2.48}/tests/e2e/test_multi_system.py +6 -1
- fixos-2.2.48/tests/unit/test_anonymizer.py +390 -0
- fixos-2.2.48/tests/unit/test_ask_and_nl_group.py +278 -0
- fixos-2.2.48/tests/unit/test_cleanup_cmd.py +824 -0
- fixos-2.2.48/tests/unit/test_cleanup_effectiveness.py +177 -0
- fixos-2.2.48/tests/unit/test_cleanup_safety.py +314 -0
- fixos-2.2.48/tests/unit/test_cleanup_utils.py +79 -0
- fixos-2.2.48/tests/unit/test_core.py +1098 -0
- fixos-2.2.48/tests/unit/test_docker_network_cleanup.py +274 -0
- fixos-2.2.48/tests/unit/test_docker_startup_optimizer.py +369 -0
- fixos-2.2.48/tests/unit/test_endpoint_refresh.py +169 -0
- fixos-2.2.48/tests/unit/test_jetbrains_cmd.py +293 -0
- fixos-2.2.48/tests/unit/test_jetbrains_recovery.py +383 -0
- fixos-2.2.48/tests/unit/test_llm_auth_stop.py +160 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_llm_provider.py +70 -0
- fixos-2.2.48/tests/unit/test_orphan_pins.py +137 -0
- fixos-2.2.48/tests/unit/test_orphaned_workloads.py +306 -0
- fixos-2.2.48/tests/unit/test_packaging_data.py +57 -0
- fixos-2.2.48/tests/unit/test_process_chains.py +300 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_projects_cmd.py +125 -3
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_quick_cmd.py +22 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_quick_snapshot.py +30 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_service_cleanup.py +119 -12
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_service_scanner.py +19 -11
- fixos-2.2.48/tests/unit/test_storage_analyzer.py +72 -0
- fixos-2.2.46/fixos/agent/hitl_session.py +0 -246
- fixos-2.2.46/fixos/agent/session_core.py +0 -245
- fixos-2.2.46/fixos/anonymizer.py +0 -80
- fixos-2.2.46/fixos/cli/cleanup_cmd.py +0 -892
- fixos-2.2.46/fixos/cli/shared.py +0 -115
- fixos-2.2.46/fixos/utils/anonymizer.py +0 -356
- fixos-2.2.46/tests/unit/test_anonymizer.py +0 -198
- fixos-2.2.46/tests/unit/test_cleanup_cmd.py +0 -389
- fixos-2.2.46/tests/unit/test_core.py +0 -385
- {fixos-2.2.46 → fixos-2.2.48}/.env.example +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/LICENSE +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/README.md +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/TEST_RESULTS.md +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/TEST_RESULTS_V2.md +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/alpine/Dockerfile +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/arch/Dockerfile +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/base/Dockerfile +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/broken-audio/Dockerfile +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/broken-full/Dockerfile +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/broken-network/Dockerfile +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/broken-thumbnails/Dockerfile +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/docker-compose.multi-system.yml +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/docker-compose.yml +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/test-multi-system.sh +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/test-scenarios.sh +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docker/validate-scenario.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docs/examples/advanced_usage.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/docs/examples/quickstart.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/__main__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/agent/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/agent/autonomous.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/agent/hitl.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/_cleanup_home.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/_cleanup_snap.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/_cleanup_system.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/config_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/features_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/fix_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/history_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/orchestrate_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/output_formatter.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/profile_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/provider_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/quickfix_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/report_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/rollback_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/scan_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/token_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli/watch_cmd.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/cli.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/config_interactive.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/constants.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/_flatpak_analysis_mixin.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/_flatpak_execution_mixin.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/_flatpak_recommendations_mixin.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/_storage_container_mixin.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/_storage_user_mixin.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/cache_discovery.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/_shared.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/audio.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/file_analysis.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/hardware.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/packages.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/resources.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/security.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/storage_optimization.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/system_core.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/checks/thumbnails.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/dev_project_analyzer.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/disk_analyzer.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/flatpak_analyzer.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/project_scanner.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/service_details.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/storage_analyzer.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/system_checks.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/diagnostics/utils.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/features/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/features/auditor.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/features/catalog.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/features/installer.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/features/profiles.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/features/renderer.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/fixes/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/interactive/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/interactive/cleanup_planner.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/llm_shell.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/orchestrator/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/orchestrator/executor.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/orchestrator/graph.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/orchestrator/orchestrator.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/orchestrator/rollback.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/platform_utils.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/base.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/builtin/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/builtin/audio.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/builtin/disk.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/builtin/hardware.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/builtin/resources.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/builtin/security.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/builtin/thumbnails.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/plugins/registry.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/profiles/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/providers/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/providers/llm_analyzer.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/providers/schemas.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/system_checks.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/utils/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/utils/terminal.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/utils/timeout.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/utils/web_search.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos/watch.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos.egg-info/dependency_links.txt +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/fixos.egg-info/entry_points.txt +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/requirements-dev.txt +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/requirements.txt +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/scripts/pyqual-calibrate.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/setup.cfg +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/conftest.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/e2e/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/e2e/test_cli.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/e2e/test_diagnostics_integration.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/e2e/test_executor.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/e2e/test_network_broken.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/e2e/test_thumbnails_broken.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/test_fixos.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/__init__.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_cache_discovery.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_dev_project_analyzer.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_executor.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_orchestrator.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_project_scanner.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_resources_quick.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_security_quick.py +0 -0
- {fixos-2.2.46 → fixos-2.2.48}/tests/unit/test_system_checks_parallel.py +0 -0
|
@@ -2,15 +2,25 @@
|
|
|
2
2
|
|
|
3
3
|
### Added
|
|
4
4
|
|
|
5
|
-
- `fixos cleanup --docker-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
- `fixos cleanup --docker-networks [--days N]` oraz `-c docker-networks`:
|
|
6
|
+
bezpieczny podgląd i usuwanie niestandardowych sieci Docker bez endpointów,
|
|
7
|
+
z ochroną sieci aktywnych/wbudowanych i końcowym testem puli adresowej.
|
|
8
|
+
- `fixos cleanup --docker-all` / `-c docker-all`: jedna operacja dla wszystkich
|
|
9
|
+
nieużywanych obrazów, build cache i osieroconych sieci, bez kontenerów i
|
|
10
|
+
wolumenów. `--docker-old` oraz interaktywne czyszczenie Dockera również
|
|
11
|
+
dołączają osierocone sieci.
|
|
12
|
+
- `fixos projects --docker-networks`: opcjonalne usuwanie sieci `dangling`
|
|
13
|
+
należących do wybranych projektów Compose, z dopasowaniem po etykiecie,
|
|
14
|
+
osobnym potwierdzeniem i usuwaniem wyłącznie wcześniej pokazanych ID.
|
|
15
|
+
- `fixos cleanup --docker-old [--days N]` oraz `-c docker-old`: usuwa
|
|
16
|
+
nieużywane obrazy Docker i build cache starsze niż N dni (domyślnie 30)
|
|
17
|
+
oraz osierocone sieci; bez wolumenów i obrazów używanych przez kontenery.
|
|
8
18
|
- `fixos cleanup --ollama-old [--days N]` oraz `-c ollama-old`: usuwa modele
|
|
9
19
|
Ollama niezmieniane od N dni (domyślnie 90), z pominięciem modeli
|
|
10
20
|
aktualnie załadowanych (`/api/ps`).
|
|
11
21
|
- Opcja interaktywna **[1] Wszystkie bezpieczne** obejmuje teraz także:
|
|
12
|
-
- **Docker (nieużywane
|
|
13
|
-
|
|
22
|
+
- **Docker (nieużywane zasoby)** — pełną pulę unused Images+Build Cache
|
|
23
|
+
oraz osierocone sieci, bez filtra wieku,
|
|
14
24
|
- **Ollama (modele >90 dni)** — gdy takie modele istnieją.
|
|
15
25
|
- Pomiar zwolnionego miejsca Dockera przez `docker system df` przed/po oraz
|
|
16
26
|
parsowanie `Total reclaimed space`; ostrzeżenie przy 0.00 GB mimo sukcesu
|
|
@@ -70,6 +80,98 @@
|
|
|
70
80
|
rekurencyjnych skanów `/` oraz `/home` z szybkich kontroli.
|
|
71
81
|
- Czyszczenie cache JetBrains trafia w aktualną ścieżkę i wymaga zamknięcia IDE.
|
|
72
82
|
|
|
83
|
+
## [2.2.48] - 2026-09-12
|
|
84
|
+
|
|
85
|
+
### Docs
|
|
86
|
+
- Update TODO.md
|
|
87
|
+
- Update docs/autonomy-status.md
|
|
88
|
+
- Update docs/registry-integration.md
|
|
89
|
+
- Update project/TICKETS.md
|
|
90
|
+
- Update project/ticket-018/README.md
|
|
91
|
+
- Update project/ticket-018/ai-codex.md
|
|
92
|
+
- Update project/ticket-018/changelog.md
|
|
93
|
+
- Update project/ticket-018/preprompt.md
|
|
94
|
+
- Update project/ticket-020/README.md
|
|
95
|
+
- Update project/ticket-020/ai-codex.md
|
|
96
|
+
- ... and 2 more files
|
|
97
|
+
|
|
98
|
+
### Test
|
|
99
|
+
- Update tests/unit/test_ask_and_nl_group.py
|
|
100
|
+
|
|
101
|
+
### Other
|
|
102
|
+
- Update fixos/cli/ask_cmd.py
|
|
103
|
+
- Update fixos/cli/main.py
|
|
104
|
+
- Update fixos/cli/shared.py
|
|
105
|
+
- Update fixos/cli/shell_cmd.py
|
|
106
|
+
- Update project/ticket-018/ai-codex-logs.txt
|
|
107
|
+
- Update project/ticket-018/intent.json
|
|
108
|
+
- Update project/ticket-020/ai-codex-logs.txt
|
|
109
|
+
- Update project/ticket-020/intent.json
|
|
110
|
+
|
|
111
|
+
## [2.2.48] - 2026-09-01
|
|
112
|
+
|
|
113
|
+
### Docs
|
|
114
|
+
- Update TODO.md
|
|
115
|
+
- Update project/TICKETS.md
|
|
116
|
+
- Update project/ticket-013/README.md
|
|
117
|
+
- Update project/ticket-013/ai-codex.md
|
|
118
|
+
- Update project/ticket-013/changelog.md
|
|
119
|
+
- Update project/ticket-013/preprompt.md
|
|
120
|
+
|
|
121
|
+
### Test
|
|
122
|
+
- Update tests/unit/test_core.py
|
|
123
|
+
|
|
124
|
+
### Other
|
|
125
|
+
- Update fixos/agent/hitl_session.py
|
|
126
|
+
- Update fixos/agent/session_io.py
|
|
127
|
+
- Update project/ticket-013/ai-codex-logs.txt
|
|
128
|
+
- Update project/ticket-013/intent.json
|
|
129
|
+
- Update project/planfile-tickets.yaml
|
|
130
|
+
|
|
131
|
+
## [2.2.48] - 2026-09-01
|
|
132
|
+
|
|
133
|
+
### Docs
|
|
134
|
+
- Update TODO.md
|
|
135
|
+
- Update project/TICKETS.md
|
|
136
|
+
- Update project/ticket-012/README.md
|
|
137
|
+
- Update project/ticket-012/ai-codex.md
|
|
138
|
+
- Update project/ticket-012/changelog.md
|
|
139
|
+
- Update project/ticket-012/preprompt.md
|
|
140
|
+
|
|
141
|
+
### Test
|
|
142
|
+
- Update tests/unit/test_core.py
|
|
143
|
+
|
|
144
|
+
### Other
|
|
145
|
+
- Update fixos/agent/hitl_session.py
|
|
146
|
+
- Update fixos/agent/session_core.py
|
|
147
|
+
- Update fixos/agent/session_handlers.py
|
|
148
|
+
- Update fixos/agent/session_io.py
|
|
149
|
+
- Update project/ticket-012/ai-codex-logs.txt
|
|
150
|
+
- Update project/ticket-012/intent.json
|
|
151
|
+
- Update project/planfile-tickets.yaml
|
|
152
|
+
|
|
153
|
+
## [2.2.47] - 2026-08-13
|
|
154
|
+
|
|
155
|
+
### Docs
|
|
156
|
+
- Update CHANGELOG.md
|
|
157
|
+
- Update README.md
|
|
158
|
+
- Update docs/architecture.md
|
|
159
|
+
- Update docs/getting-started.md
|
|
160
|
+
|
|
161
|
+
### Test
|
|
162
|
+
- Update tests/unit/test_cleanup_cmd.py
|
|
163
|
+
- Update tests/unit/test_docker_network_cleanup.py
|
|
164
|
+
- Update tests/unit/test_projects_cmd.py
|
|
165
|
+
- Update tests/unit/test_service_cleanup.py
|
|
166
|
+
|
|
167
|
+
### Other
|
|
168
|
+
- Update fixos/cli/cleanup_cmd.py
|
|
169
|
+
- Update fixos/cli/main.py
|
|
170
|
+
- Update fixos/cli/projects_cmd.py
|
|
171
|
+
- Update fixos/diagnostics/docker_network_cleanup.py
|
|
172
|
+
- Update fixos/diagnostics/service_cleanup.py
|
|
173
|
+
- Update uv.lock
|
|
174
|
+
|
|
73
175
|
## [2.2.46] - 2026-08-07
|
|
74
176
|
|
|
75
177
|
### Docs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fixos
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.48
|
|
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
|
|
@@ -35,13 +35,13 @@ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
|
35
35
|
Requires-Dist: pytest-xdist>=3.5.0; extra == "dev"
|
|
36
36
|
Requires-Dist: pytest-timeout>=2.2.0; extra == "dev"
|
|
37
37
|
Requires-Dist: pytest-sugar>=0.9.7; extra == "dev"
|
|
38
|
-
Requires-Dist: goal>=2.1.0; extra == "dev"
|
|
38
|
+
Requires-Dist: goal>=2.1.0; python_version >= "3.12" and extra == "dev"
|
|
39
39
|
Requires-Dist: costs>=0.1.20; extra == "dev"
|
|
40
|
-
Requires-Dist: pfix>=0.1.60; extra == "dev"
|
|
41
40
|
Dynamic: home-page
|
|
42
41
|
Dynamic: license-file
|
|
43
42
|
Dynamic: requires-python
|
|
44
43
|
|
|
44
|
+

|
|
45
45
|
```
|
|
46
46
|
___ _ ___ ____
|
|
47
47
|
/ _(_)_ __ / _ \/ ___|
|
|
@@ -63,13 +63,13 @@ AI-powered OS Diagnostics
|
|
|
63
63
|
|
|
64
64
|
## AI Cost Tracking
|
|
65
65
|
|
|
66
|
-
    
|
|
67
|
+
  
|
|
68
68
|
|
|
69
|
-
- 🤖 **LLM usage:** $4.
|
|
70
|
-
- 👤 **Human dev:** ~$
|
|
69
|
+
- 🤖 **LLM usage:** $4.9010 (154 commits)
|
|
70
|
+
- 👤 **Human dev:** ~$4216 (42.2h @ $100/h, 30min dedup)
|
|
71
71
|
|
|
72
|
-
Generated on 2026-08-
|
|
72
|
+
Generated on 2026-08-13 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
73
73
|
|
|
74
74
|
---
|
|
75
75
|
|
|
@@ -118,10 +118,13 @@ fixos quick --deep – szybki wynik, potem pełny skan danych usług
|
|
|
118
118
|
fixos fix – diagnoza + sesja naprawcza z AI (HITL)
|
|
119
119
|
fixos scan – diagnostyka systemu bez AI
|
|
120
120
|
fixos cleanup – skanuj i czyść dane usług (Docker, npm, pip, ...)
|
|
121
|
-
fixos cleanup --docker-
|
|
121
|
+
fixos cleanup --docker-all – wszystkie unused images/cache + osierocone sieci
|
|
122
|
+
fixos cleanup --docker-old – stare unused images/cache + osierocone sieci
|
|
123
|
+
fixos cleanup --docker-networks – tylko osierocone sieci + test puli
|
|
122
124
|
fixos cleanup --ollama-old – modele Ollama niezmieniane od N dni (domyślnie 90)
|
|
123
125
|
fixos cleanup --full – pełny audit systemu + dev projects
|
|
124
126
|
fixos projects – skanuj projekty dev (venv, node_modules, ~/github/*/*)
|
|
127
|
+
fixos projects --docker-networks – nieużywane sieci Compose wybranych projektów
|
|
125
128
|
fixos orchestrate – zaawansowana orkiestracja (graf problemów DAG)
|
|
126
129
|
fixos llm – lista 12 providerów LLM + linki do kluczy API
|
|
127
130
|
fixos token set KEY – zapisz klucz API do .env (auto-detekcja providera)
|
|
@@ -157,12 +160,19 @@ fixos cleanup --full --dry-run
|
|
|
157
160
|
|
|
158
161
|
# Podgląd usług + interaktywne czyszczenie (opcja [1] = wszystkie bezpieczne)
|
|
159
162
|
fixos cleanup --list
|
|
160
|
-
fixos cleanup --dry-run # tylko gdy -c / --docker-
|
|
163
|
+
fixos cleanup --dry-run # tylko gdy -c / --docker-all / --docker-old / ...
|
|
161
164
|
fixos cleanup
|
|
162
165
|
|
|
163
|
-
#
|
|
166
|
+
# Wszystkie unused images/cache oraz osierocone sieci (bez wolumenów)
|
|
167
|
+
fixos cleanup --docker-all --dry-run
|
|
168
|
+
|
|
169
|
+
# Obrazy/cache starsze niż 30 dni oraz wszystkie osierocone sieci
|
|
164
170
|
fixos cleanup --docker-old --days 30 --dry-run
|
|
165
171
|
|
|
172
|
+
# Sieci Docker bez endpointów; aktywne i wbudowane pozostają chronione
|
|
173
|
+
fixos cleanup --docker-networks --dry-run
|
|
174
|
+
fixos cleanup --docker-networks
|
|
175
|
+
|
|
166
176
|
# Modele Ollama niezmieniane od 90+ dni (pomija uruchomione)
|
|
167
177
|
fixos cleanup --ollama-old --days 90 --dry-run
|
|
168
178
|
|
|
@@ -185,6 +195,9 @@ fixos projects
|
|
|
185
195
|
# Tylko artefakty nieużywane od >60 dni (bez świeżych venv)
|
|
186
196
|
fixos projects --only-stale
|
|
187
197
|
|
|
198
|
+
# Stare artefakty + podgląd powiązanych, nieużywanych sieci Compose
|
|
199
|
+
fixos projects --only-stale --docker-networks --dry-run
|
|
200
|
+
|
|
188
201
|
# Podgląd bez usuwania
|
|
189
202
|
fixos projects --dry-run
|
|
190
203
|
|
|
@@ -274,9 +287,9 @@ Każda znaleziona usługa jest klasyfikowana do jednej z trzech grup:
|
|
|
274
287
|
|
|
275
288
|
- **bezpieczne** – cache do odtworzenia jednym poleceniem (pip/npm/cargo/conda/nix/brew...)
|
|
276
289
|
oraz ograniczone, jawnie bezpieczne akcje wiekowe / reclaimable:
|
|
277
|
-
- **Docker (nieużywane
|
|
278
|
-
(bez wolumenów, bez obrazów
|
|
279
|
-
`RECLAIMABLE
|
|
290
|
+
- **Docker (nieużywane zasoby)** — wszystkie unused images + build cache
|
|
291
|
+
oraz osierocone sieci bez endpointów (bez wolumenów, bez obrazów
|
|
292
|
+
podpiętych do kontenerów); część dyskowa odpowiada puli `RECLAIMABLE`,
|
|
280
293
|
- **Ollama (modele >90 dni)** — modele niezmieniane od 90+ dni; pomija
|
|
281
294
|
modele aktualnie załadowane w pamięci.
|
|
282
295
|
Tylko tę grupę usuwa opcja **[1] Wszystkie bezpieczne**.
|
|
@@ -289,13 +302,26 @@ Każda znaleziona usługa jest klasyfikowana do jednej z trzech grup:
|
|
|
289
302
|
zbiorcze kasowanie modeli „na ślepo”, klastrów, maszyn wirtualnych, rozszerzeń i
|
|
290
303
|
wolumenów jest wyłączone.
|
|
291
304
|
|
|
292
|
-
Dedykowane flagi (też dostępne jako `-c docker-
|
|
305
|
+
Dedykowane flagi (też dostępne jako `-c docker-all`, `-c docker-old`,
|
|
306
|
+
`-c docker-networks` oraz `-c ollama-old`):
|
|
293
307
|
|
|
294
308
|
```bash
|
|
295
|
-
fixos cleanup --docker-
|
|
309
|
+
fixos cleanup --docker-all --dry-run # all unused + sieci
|
|
310
|
+
fixos cleanup --docker-old --days 30 --dry-run # stare unused + sieci
|
|
311
|
+
fixos cleanup --docker-networks --dry-run # sieci bez endpointów
|
|
296
312
|
fixos cleanup --ollama-old --days 90 --dry-run # modele niezmieniane od N dni
|
|
297
313
|
```
|
|
298
314
|
|
|
315
|
+
Osierocone sieci są czyszczone automatycznie razem z `--docker-all`,
|
|
316
|
+
`--docker-old` oraz dockerową pozycją w „Wszystkie bezpieczne”. Samodzielne
|
|
317
|
+
`--docker-networks` pozostaje dostępne, gdy obrazy i cache mają pozostać.
|
|
318
|
+
Mechanizm pobiera kandydatów z `dangling=true`, ponownie sprawdza brak
|
|
319
|
+
endpointów, chroni sieci `bridge`, `host` i `none`, a usuwa dokładne ID zamiast
|
|
320
|
+
wykonywać szeroki prune. Po wykonaniu tworzy i natychmiast usuwa sieć testową
|
|
321
|
+
oznaczoną `dev.fixos.cleanup-probe=true`; sukces potwierdza, że daemon może
|
|
322
|
+
ponownie przydzielić podsieć. Opcjonalne `--days N` dla samodzielnej akcji
|
|
323
|
+
ogranicza ją do sieci mających co najmniej N dni; domyślne `0` obejmuje wszystkie.
|
|
324
|
+
|
|
299
325
|
`RECLAIMABLE` Dockera obejmuje też świeże unused images. Filtr `--docker-old`
|
|
300
326
|
(domyślnie 30 dni) może więc zwolnić **znacznie mniej** niż szacunek całej puli —
|
|
301
327
|
dlatego opcja `[1]` używa prune **wszystkich** nieużywanych obrazów, a
|
|
@@ -323,6 +349,14 @@ nazwie), `node_modules`/`.next`/`.turbo` (tylko gdy jest `package.json`),
|
|
|
323
349
|
nieużywane od >60 dni (`--stale-days`) oraz projekty ze zduplikowanymi
|
|
324
350
|
virtualenvami (np. i `venv`, i `.venv` naraz).
|
|
325
351
|
|
|
352
|
+
Opcjonalne `--docker-networks` dołącza do czyszczenia wybranych projektów
|
|
353
|
+
ich nieużywane sieci Docker Compose. Dopasowanie wymaga dokładnej etykiety
|
|
354
|
+
`com.docker.compose.project`; sieci bez tej etykiety nie są zgadywane po
|
|
355
|
+
nazwie. fixOS ponownie wymaga stanu `dangling`, chroni sieci z endpointami,
|
|
356
|
+
pokazuje nazwę, ID i podsieć, a przed usunięciem pyta o osobne potwierdzenie.
|
|
357
|
+
Usuwane są tylko ID pokazane w podglądzie, po czym wykonywany jest test puli
|
|
358
|
+
adresowej. Repozytorium projektu, kontenery i wolumeny pozostają nietknięte.
|
|
359
|
+
|
|
326
360
|
```bash
|
|
327
361
|
$ fixos projects --only-stale
|
|
328
362
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+

|
|
1
2
|
```
|
|
2
3
|
___ _ ___ ____
|
|
3
4
|
/ _(_)_ __ / _ \/ ___|
|
|
@@ -19,13 +20,13 @@ AI-powered OS Diagnostics
|
|
|
19
20
|
|
|
20
21
|
## AI Cost Tracking
|
|
21
22
|
|
|
22
|
-
    
|
|
24
|
+
  
|
|
24
25
|
|
|
25
|
-
- 🤖 **LLM usage:** $4.
|
|
26
|
-
- 👤 **Human dev:** ~$
|
|
26
|
+
- 🤖 **LLM usage:** $4.9010 (154 commits)
|
|
27
|
+
- 👤 **Human dev:** ~$4216 (42.2h @ $100/h, 30min dedup)
|
|
27
28
|
|
|
28
|
-
Generated on 2026-08-
|
|
29
|
+
Generated on 2026-08-13 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
29
30
|
|
|
30
31
|
---
|
|
31
32
|
|
|
@@ -74,10 +75,13 @@ fixos quick --deep – szybki wynik, potem pełny skan danych usług
|
|
|
74
75
|
fixos fix – diagnoza + sesja naprawcza z AI (HITL)
|
|
75
76
|
fixos scan – diagnostyka systemu bez AI
|
|
76
77
|
fixos cleanup – skanuj i czyść dane usług (Docker, npm, pip, ...)
|
|
77
|
-
fixos cleanup --docker-
|
|
78
|
+
fixos cleanup --docker-all – wszystkie unused images/cache + osierocone sieci
|
|
79
|
+
fixos cleanup --docker-old – stare unused images/cache + osierocone sieci
|
|
80
|
+
fixos cleanup --docker-networks – tylko osierocone sieci + test puli
|
|
78
81
|
fixos cleanup --ollama-old – modele Ollama niezmieniane od N dni (domyślnie 90)
|
|
79
82
|
fixos cleanup --full – pełny audit systemu + dev projects
|
|
80
83
|
fixos projects – skanuj projekty dev (venv, node_modules, ~/github/*/*)
|
|
84
|
+
fixos projects --docker-networks – nieużywane sieci Compose wybranych projektów
|
|
81
85
|
fixos orchestrate – zaawansowana orkiestracja (graf problemów DAG)
|
|
82
86
|
fixos llm – lista 12 providerów LLM + linki do kluczy API
|
|
83
87
|
fixos token set KEY – zapisz klucz API do .env (auto-detekcja providera)
|
|
@@ -113,12 +117,19 @@ fixos cleanup --full --dry-run
|
|
|
113
117
|
|
|
114
118
|
# Podgląd usług + interaktywne czyszczenie (opcja [1] = wszystkie bezpieczne)
|
|
115
119
|
fixos cleanup --list
|
|
116
|
-
fixos cleanup --dry-run # tylko gdy -c / --docker-
|
|
120
|
+
fixos cleanup --dry-run # tylko gdy -c / --docker-all / --docker-old / ...
|
|
117
121
|
fixos cleanup
|
|
118
122
|
|
|
119
|
-
#
|
|
123
|
+
# Wszystkie unused images/cache oraz osierocone sieci (bez wolumenów)
|
|
124
|
+
fixos cleanup --docker-all --dry-run
|
|
125
|
+
|
|
126
|
+
# Obrazy/cache starsze niż 30 dni oraz wszystkie osierocone sieci
|
|
120
127
|
fixos cleanup --docker-old --days 30 --dry-run
|
|
121
128
|
|
|
129
|
+
# Sieci Docker bez endpointów; aktywne i wbudowane pozostają chronione
|
|
130
|
+
fixos cleanup --docker-networks --dry-run
|
|
131
|
+
fixos cleanup --docker-networks
|
|
132
|
+
|
|
122
133
|
# Modele Ollama niezmieniane od 90+ dni (pomija uruchomione)
|
|
123
134
|
fixos cleanup --ollama-old --days 90 --dry-run
|
|
124
135
|
|
|
@@ -141,6 +152,9 @@ fixos projects
|
|
|
141
152
|
# Tylko artefakty nieużywane od >60 dni (bez świeżych venv)
|
|
142
153
|
fixos projects --only-stale
|
|
143
154
|
|
|
155
|
+
# Stare artefakty + podgląd powiązanych, nieużywanych sieci Compose
|
|
156
|
+
fixos projects --only-stale --docker-networks --dry-run
|
|
157
|
+
|
|
144
158
|
# Podgląd bez usuwania
|
|
145
159
|
fixos projects --dry-run
|
|
146
160
|
|
|
@@ -230,9 +244,9 @@ Każda znaleziona usługa jest klasyfikowana do jednej z trzech grup:
|
|
|
230
244
|
|
|
231
245
|
- **bezpieczne** – cache do odtworzenia jednym poleceniem (pip/npm/cargo/conda/nix/brew...)
|
|
232
246
|
oraz ograniczone, jawnie bezpieczne akcje wiekowe / reclaimable:
|
|
233
|
-
- **Docker (nieużywane
|
|
234
|
-
(bez wolumenów, bez obrazów
|
|
235
|
-
`RECLAIMABLE
|
|
247
|
+
- **Docker (nieużywane zasoby)** — wszystkie unused images + build cache
|
|
248
|
+
oraz osierocone sieci bez endpointów (bez wolumenów, bez obrazów
|
|
249
|
+
podpiętych do kontenerów); część dyskowa odpowiada puli `RECLAIMABLE`,
|
|
236
250
|
- **Ollama (modele >90 dni)** — modele niezmieniane od 90+ dni; pomija
|
|
237
251
|
modele aktualnie załadowane w pamięci.
|
|
238
252
|
Tylko tę grupę usuwa opcja **[1] Wszystkie bezpieczne**.
|
|
@@ -245,13 +259,26 @@ Każda znaleziona usługa jest klasyfikowana do jednej z trzech grup:
|
|
|
245
259
|
zbiorcze kasowanie modeli „na ślepo”, klastrów, maszyn wirtualnych, rozszerzeń i
|
|
246
260
|
wolumenów jest wyłączone.
|
|
247
261
|
|
|
248
|
-
Dedykowane flagi (też dostępne jako `-c docker-
|
|
262
|
+
Dedykowane flagi (też dostępne jako `-c docker-all`, `-c docker-old`,
|
|
263
|
+
`-c docker-networks` oraz `-c ollama-old`):
|
|
249
264
|
|
|
250
265
|
```bash
|
|
251
|
-
fixos cleanup --docker-
|
|
266
|
+
fixos cleanup --docker-all --dry-run # all unused + sieci
|
|
267
|
+
fixos cleanup --docker-old --days 30 --dry-run # stare unused + sieci
|
|
268
|
+
fixos cleanup --docker-networks --dry-run # sieci bez endpointów
|
|
252
269
|
fixos cleanup --ollama-old --days 90 --dry-run # modele niezmieniane od N dni
|
|
253
270
|
```
|
|
254
271
|
|
|
272
|
+
Osierocone sieci są czyszczone automatycznie razem z `--docker-all`,
|
|
273
|
+
`--docker-old` oraz dockerową pozycją w „Wszystkie bezpieczne”. Samodzielne
|
|
274
|
+
`--docker-networks` pozostaje dostępne, gdy obrazy i cache mają pozostać.
|
|
275
|
+
Mechanizm pobiera kandydatów z `dangling=true`, ponownie sprawdza brak
|
|
276
|
+
endpointów, chroni sieci `bridge`, `host` i `none`, a usuwa dokładne ID zamiast
|
|
277
|
+
wykonywać szeroki prune. Po wykonaniu tworzy i natychmiast usuwa sieć testową
|
|
278
|
+
oznaczoną `dev.fixos.cleanup-probe=true`; sukces potwierdza, że daemon może
|
|
279
|
+
ponownie przydzielić podsieć. Opcjonalne `--days N` dla samodzielnej akcji
|
|
280
|
+
ogranicza ją do sieci mających co najmniej N dni; domyślne `0` obejmuje wszystkie.
|
|
281
|
+
|
|
255
282
|
`RECLAIMABLE` Dockera obejmuje też świeże unused images. Filtr `--docker-old`
|
|
256
283
|
(domyślnie 30 dni) może więc zwolnić **znacznie mniej** niż szacunek całej puli —
|
|
257
284
|
dlatego opcja `[1]` używa prune **wszystkich** nieużywanych obrazów, a
|
|
@@ -279,6 +306,14 @@ nazwie), `node_modules`/`.next`/`.turbo` (tylko gdy jest `package.json`),
|
|
|
279
306
|
nieużywane od >60 dni (`--stale-days`) oraz projekty ze zduplikowanymi
|
|
280
307
|
virtualenvami (np. i `venv`, i `.venv` naraz).
|
|
281
308
|
|
|
309
|
+
Opcjonalne `--docker-networks` dołącza do czyszczenia wybranych projektów
|
|
310
|
+
ich nieużywane sieci Docker Compose. Dopasowanie wymaga dokładnej etykiety
|
|
311
|
+
`com.docker.compose.project`; sieci bez tej etykiety nie są zgadywane po
|
|
312
|
+
nazwie. fixOS ponownie wymaga stanu `dangling`, chroni sieci z endpointami,
|
|
313
|
+
pokazuje nazwę, ID i podsieć, a przed usunięciem pyta o osobne potwierdzenie.
|
|
314
|
+
Usuwane są tylko ID pokazane w podglądzie, po czym wykonywany jest test puli
|
|
315
|
+
adresowej. Repozytorium projektu, kontenery i wolumeny pozostają nietknięte.
|
|
316
|
+
|
|
282
317
|
```bash
|
|
283
318
|
$ fixos projects --only-stale
|
|
284
319
|
|
|
@@ -8,22 +8,21 @@ import signal
|
|
|
8
8
|
import subprocess
|
|
9
9
|
import time
|
|
10
10
|
from dataclasses import dataclass, field
|
|
11
|
-
from typing import
|
|
11
|
+
from typing import Any
|
|
12
12
|
|
|
13
|
-
from ..providers.llm import LLMClient, LLMError
|
|
14
|
-
from ..utils.anonymizer import anonymize, deanonymize, display_anonymized_preview
|
|
15
|
-
from ..utils.web_search import search_all, format_results_for_llm
|
|
16
13
|
from ..config import FixOsConfig
|
|
17
|
-
from ..utils.timeout import SessionTimeout
|
|
18
14
|
from ..constants import (
|
|
19
|
-
UI_BORDER_WIDTH,
|
|
20
|
-
MAX_OUTPUT_PREVIEW_LENGTH,
|
|
21
15
|
DEFAULT_COMMAND_TIMEOUT,
|
|
22
16
|
DEFAULT_TOKEN_LIMIT,
|
|
23
17
|
MAX_COMMAND_LENGTH,
|
|
18
|
+
MAX_OUTPUT_PREVIEW_LENGTH,
|
|
24
19
|
MAX_SEARCH_QUERY_LENGTH,
|
|
20
|
+
UI_BORDER_WIDTH,
|
|
25
21
|
)
|
|
26
|
-
|
|
22
|
+
from ..providers.llm import LLMAuthError, LLMClient, LLMError
|
|
23
|
+
from ..utils.anonymizer import anonymize, deanonymize, display_anonymized_preview
|
|
24
|
+
from ..utils.timeout import SessionTimeout
|
|
25
|
+
from ..utils.web_search import format_results_for_llm, search_all
|
|
27
26
|
|
|
28
27
|
# Commands NEVER executed automatically
|
|
29
28
|
FORBIDDEN_COMMANDS = [
|
|
@@ -81,8 +80,8 @@ Zasady:
|
|
|
81
80
|
class FixAction:
|
|
82
81
|
command: str
|
|
83
82
|
reason: str
|
|
84
|
-
result:
|
|
85
|
-
success:
|
|
83
|
+
result: str | None = None
|
|
84
|
+
success: bool | None = None
|
|
86
85
|
timestamp: float = field(default_factory=time.time)
|
|
87
86
|
|
|
88
87
|
|
|
@@ -117,7 +116,7 @@ class AutonomousSession:
|
|
|
117
116
|
|
|
118
117
|
def __init__(
|
|
119
118
|
self,
|
|
120
|
-
diagnostics:
|
|
119
|
+
diagnostics: dict[str, Any],
|
|
121
120
|
config: FixOsConfig,
|
|
122
121
|
show_data: bool = True,
|
|
123
122
|
max_fixes: int = 10,
|
|
@@ -130,7 +129,7 @@ class AutonomousSession:
|
|
|
130
129
|
self.report = AgentReport()
|
|
131
130
|
self.fix_count = 0
|
|
132
131
|
self.search_count = 0
|
|
133
|
-
self.messages:
|
|
132
|
+
self.messages: list[dict[str, str]] = []
|
|
134
133
|
self.start_time = time.time()
|
|
135
134
|
self._setup_timeout()
|
|
136
135
|
|
|
@@ -193,12 +192,17 @@ class AutonomousSession:
|
|
|
193
192
|
if self._get_remaining_time() <= 0:
|
|
194
193
|
raise SessionTimeout()
|
|
195
194
|
|
|
196
|
-
def _query_llm(self) ->
|
|
195
|
+
def _query_llm(self) -> str | None:
|
|
197
196
|
"""Query LLM and return reply."""
|
|
198
197
|
try:
|
|
199
198
|
return self.llm.chat(
|
|
200
199
|
self.messages, max_tokens=DEFAULT_TOKEN_LIMIT, temperature=0.1
|
|
201
200
|
)
|
|
201
|
+
except LLMAuthError as e:
|
|
202
|
+
print(f" ❌ LLM błąd: {e}")
|
|
203
|
+
print(" Sesja zakończona: popraw klucz API i uruchom ponownie.")
|
|
204
|
+
self.llm_auth_failed = True
|
|
205
|
+
return None
|
|
202
206
|
except LLMError as e:
|
|
203
207
|
print(f" ❌ LLM błąd: {e}")
|
|
204
208
|
return None
|
|
@@ -215,7 +219,7 @@ class AutonomousSession:
|
|
|
215
219
|
return True
|
|
216
220
|
return False
|
|
217
221
|
|
|
218
|
-
def _parse_action(self, reply: str) ->
|
|
222
|
+
def _parse_action(self, reply: str) -> dict[str, Any] | None:
|
|
219
223
|
"""Parse JSON action from LLM reply."""
|
|
220
224
|
import json
|
|
221
225
|
|
|
@@ -235,7 +239,7 @@ class AutonomousSession:
|
|
|
235
239
|
except json.JSONDecodeError:
|
|
236
240
|
return None
|
|
237
241
|
|
|
238
|
-
def _is_forbidden(self, cmd: str) ->
|
|
242
|
+
def _is_forbidden(self, cmd: str) -> str | None:
|
|
239
243
|
"""Check if command is forbidden."""
|
|
240
244
|
for pattern in FORBIDDEN_COMMANDS:
|
|
241
245
|
if re.search(pattern, cmd, re.IGNORECASE):
|
|
@@ -260,15 +264,16 @@ class AutonomousSession:
|
|
|
260
264
|
capture_output=True,
|
|
261
265
|
text=True,
|
|
262
266
|
timeout=DEFAULT_COMMAND_TIMEOUT,
|
|
267
|
+
check=False,
|
|
263
268
|
)
|
|
264
269
|
out = proc.stdout.strip() or proc.stderr.strip() or "(brak outputu)"
|
|
265
270
|
return proc.returncode == 0, out[:MAX_OUTPUT_PREVIEW_LENGTH]
|
|
266
271
|
except subprocess.TimeoutExpired:
|
|
267
272
|
return False, f"[TIMEOUT {DEFAULT_COMMAND_TIMEOUT}s]"
|
|
268
|
-
except Exception as e:
|
|
273
|
+
except Exception as e: # noqa: BLE001 - report any command failure to the LLM loop
|
|
269
274
|
return False, f"[WYJĄTEK: {e}]"
|
|
270
275
|
|
|
271
|
-
def _handle_search(self, action_data:
|
|
276
|
+
def _handle_search(self, action_data: dict[str, Any]) -> bool:
|
|
272
277
|
"""Handle SEARCH action - perform web search."""
|
|
273
278
|
query = action_data.get("search_query", "fedora fix")
|
|
274
279
|
if self.search_count < self.MAX_SEARCHES:
|
|
@@ -301,7 +306,7 @@ class AutonomousSession:
|
|
|
301
306
|
)
|
|
302
307
|
return False
|
|
303
308
|
|
|
304
|
-
def _handle_exec(self, action_data:
|
|
309
|
+
def _handle_exec(self, action_data: dict[str, Any]) -> bool:
|
|
305
310
|
"""Handle EXEC action - execute command."""
|
|
306
311
|
cmd_raw = action_data.get("command", "").strip()
|
|
307
312
|
reason = action_data.get("reason", "")
|
|
@@ -353,7 +358,7 @@ class AutonomousSession:
|
|
|
353
358
|
)
|
|
354
359
|
return True
|
|
355
360
|
|
|
356
|
-
def _handle_skip(self, action_data:
|
|
361
|
+
def _handle_skip(self, action_data: dict[str, Any]) -> None:
|
|
357
362
|
"""Handle SKIP action."""
|
|
358
363
|
reason = action_data.get("reason", "")
|
|
359
364
|
print(f" ⏭️ Pomijam: {reason}")
|
|
@@ -380,9 +385,10 @@ class AutonomousSession:
|
|
|
380
385
|
# Query LLM
|
|
381
386
|
reply = self._query_llm()
|
|
382
387
|
if reply is None:
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
388
|
+
# Retrying a rejected key only repeats the failure.
|
|
389
|
+
return not getattr(
|
|
390
|
+
self, "llm_auth_failed", False
|
|
391
|
+
) and self._handle_llm_error()
|
|
386
392
|
|
|
387
393
|
self.messages.append({"role": "assistant", "content": reply})
|
|
388
394
|
|
|
@@ -458,7 +464,7 @@ class AutonomousSession:
|
|
|
458
464
|
|
|
459
465
|
|
|
460
466
|
def run_autonomous_session(
|
|
461
|
-
diagnostics:
|
|
467
|
+
diagnostics: dict[str, Any],
|
|
462
468
|
config: FixOsConfig,
|
|
463
469
|
show_data: bool = True,
|
|
464
470
|
max_fixes: int = 10,
|