Skip to content

wronai/fixos

Repository files navigation

  ___  _       ___  ____
 / _(_)_  __  / _ \/ ___|
| |_| \ \/ / | | | \___ \
|  _| |>  <  | |_| |___) |
|_| |_/_/\_\  \___/|____/
AI-powered OS Diagnostics

fixOS v2.2 🔧🤖

Python License: Apache-2.0 GitHub Providers Platforms Tests

AI diagnostyka i naprawa systemów – Linux, Windows, macOS
z anonimizacją danych, trybem HITL/Autonomous, grafem problemów i 12 providerami LLM.

🔗 GitHub: https://github.com/wronai/fixos


🌍 Cross-Platform Support

System Package Manager Audio Hardware System
Linux (Fedora, Ubuntu, Arch, Debian) dnf / apt / pacman ✅ ALSA/PipeWire/SOF ✅ DMI/sensors ✅ systemd/journal
Windows 10/11 winget / choco ✅ WMI Audio ✅ WMI Hardware ✅ Event Log
macOS 12+ brew ✅ CoreAudio ✅ system_profiler ✅ launchd

Szybki start (3 kroki)

# 1. Instalacja
pip install -e ".[dev]"

# 2. Wybierz provider i pobierz klucz API
fixos llm                          # lista 12 providerów z linkami

# 3. Zapisz klucz i uruchom
fixos token set AIzaSy...          # Gemini (darmowy, domyślny)
fixos fix

Komendy CLI

fixos                   – ekran powitalny z listą komend i statusem
fixos fix               – diagnoza + sesja naprawcza z AI (HITL)
fixos scan              – diagnostyka systemu bez AI
fixos orchestrate       – zaawansowana orkiestracja (graf problemów DAG)
fixos llm               – lista 12 providerów LLM + linki do kluczy API
fixos token set KEY     – zapisz klucz API do .env (auto-detekcja providera)
fixos token show        – pokaż aktualny token (zamaskowany)
fixos token clear       – usuń token z .env
fixos config show       – pokaż konfigurację
fixos config init       – utwórz .env z szablonu
fixos config set K V    – ustaw wartość w .env
fixos providers         – skrócona lista providerów
fixos test-llm          – testuj połączenie z LLM

Przykłady użycia

# Tylko diagnostyka audio + zapis do pliku
fixos scan --audio --output /tmp/audio-report.json

# Analiza i interaktywne czyszczenie zajętości dysku
fixos fix --disc

# Napraw audio i thumbnails (HITL – pyta o potwierdzenie)
fixos fix --modules audio,thumbnails

# Tryb autonomiczny (agent sam naprawia, max 5 akcji)
fixos fix --mode autonomous --max-fixes 5

# Zaawansowana orkiestracja z grafem zależności
fixos orchestrate --dry-run

# Pokaż tylko darmowe providery LLM
fixos llm --free

# Ustaw Groq jako provider (ultra-szybki, darmowy)
fixos token set gsk_... --provider groq
fixos fix --provider groq

# Timeout 30 minut
fixos fix --timeout 1800

Przykładowy widok w terminalu (Czyszczenie dysku)

Wyjście jest zoptymalizowane pod standardowy Markdown bez nadmiernej ilości symboli Unicode, ułatwiając czytelność i wklejanie:

$ fixos fix --disk --dry-run

  ___  _       ___  ____
 / _(_)_  __  / _ \/ ___|
| |_| \ \/ / | | | \___|
|  _| |>  <  | |_| |___) |
|_| |_/_/\_\  \___/|____/
  AI-powered OS Diagnostics  •  v2.0.0

Konfiguracja:
  Tryb: DRY-RUN (komendy nie będą wykonywane)
  Analiza dysku: Włączona
Analizowanie zajętości dysku...
  Dysk: 93.9% zajęty (1759.0GB / 1873.7GB)
  Można bezpiecznie zwolnić: 0.7GB w 3 akcjach
Diagnostyka gotowa.

Plan czyszczenia dysku:
  🔢 Akcje: 8
  Miejsce: 262255.3 GB
  Bezpieczne: 0.7 GB
  📂 Kategorie: 6

 Cache Files:
  📁 Akcje: 1
  Miejsce: 0.6 GB
      Clear application cache (0.6GB)

 Temporary Files:
  📁 Akcje: 1
  Miejsce: 0.1 GB
      Clean system_temp temporary files (0.1GB)

Rekomendacje:
  🎯 Cache Cleanup Recommended
     Clear application cache to free 0.6 GB
  🎯 Log Files Can Be Cleaned
     Clean old logs to free 0.7 GB

Tryb DRY-RUN - żadne akcje nie zostaną wykonane

🤖 Dostępni Providerzy LLM (12)

# Provider Tier Model domyślny Klucz API
1 gemini 🟢 FREE gemini-2.5-flash aistudio.google.com
2 openrouter 🟢 FREE openai/gpt-4o-mini openrouter.ai/settings/keys
3 mistral 🟢 FREE mistral-small-latest console.mistral.ai
4 groq 🟢 FREE llama-3.1-8b-instant console.groq.com/keys
5 together 🟢 FREE llama-3.2-11B api.together.ai
6 cohere 🟢 FREE command-r dashboard.cohere.com
7 cerebras 🟢 FREE llama3.1-8b cloud.cerebras.ai
8 ollama 🟢 LOCAL llama3.2 ollama.com/download
9 openai 💰 PAID gpt-4o-mini platform.openai.com
10 anthropic 💰 PAID claude-3-haiku console.anthropic.com
11 xai 💰 PAID grok-beta console.x.ai
12 deepseek 💰 PAID deepseek-chat platform.deepseek.com
fixos llm          # pełna lista z opisami i gotowymi komendami
fixos llm --free   # tylko darmowe

Tryby agenta

👤 Human-in-the-Loop (HITL) – domyślny

LLM sugeruje → Ty decydujesz → Skrypt wykonuje

fixos [00:58:42] ❯ 1              ← napraw problem nr 1
fixos [00:58:30] ❯ A              ← napraw wszystkie
fixos [00:58:20] ❯ !systemctl status pipewire  ← własna komenda
fixos [00:58:10] ❯ search sof-firmware lenovo  ← szukaj zewnętrznie
fixos [00:57:55] ❯ D              ← opisz własny problem
fixos [00:57:40] ❯ ?              ← zapytaj o szczegóły
fixos [00:57:30] ❯ q              ← zakończ

Wyjście koloryzowane: 🔴 krytyczne / 🟡 ważne / 🟢 drobne, bloki kodu z ramkami box-drawing.

🤖 Autonomous – agent działa samodzielnie

fixos fix --mode autonomous --max-fixes 10
  • Protokół JSON: { "action": "EXEC|SEARCH|SKIP|DONE", "command": "...", "reason": "..." }
  • Zabezpieczenia: lista zabronionych komend (rm -rf /, mkfs, fdisk, dd if=...)
  • Każde EXEC logowane z wynikiem i oceną LLM
  • Wymaga jawnego yes na starcie

🎼 Orchestrate – graf problemów (DAG)

fixos orchestrate
fixos orchestrate --dry-run   # podgląd bez wykonywania
  • Buduje graf zależności między problemami
  • Po każdej naprawie re-diagnozuje i wykrywa nowe problemy
  • LLM ocenia wynik każdej komendy (JSON structured output)

🔒 Anonimizacja danych

Zawsze pokazywana przed wysłaniem do LLM. Maskowane kategorie:

Kategoria Przykład Zamiennik
Hostname moj-laptop [HOSTNAME]
Username jan [USER]
Ścieżki /home /home/jan/.pyenv/versions/3.12/bin/python /home/[USER]/...
Adresy IPv4 192.168.1.100 192.168.XXX.XXX
Adresy MAC aa:bb:cc:dd:ee:ff XX:XX:XX:XX:XX:XX
Tokeny API sk-abc123... [API_TOKEN_REDACTED]
UUID hardware a1b2c3d4-... [UUID-REDACTED]
Numery seryjne SN: PF1234567 Serial: [SERIAL-REDACTED]
Hasła w env PASSWORD=secret PASSWORD=[REDACTED]

Moduły diagnostyki

Moduł Linux Windows macOS Co sprawdza
system CPU, RAM, dyski, usługi, aktualizacje, SELinux, firewall
audio ALSA/PipeWire/SOF (Linux), WMI Audio (Win), CoreAudio (Mac)
thumbnails ffmpegthumbnailer, cache, GNOME gsettings
hardware DMI/WMI/system_profiler, BIOS, GPU, czujniki, bateria
security Firewall, otwarte porty, SELinux/AppArmor, SSH config, fail2ban, SUID
resources Co zajmuje dysk, top procesów CPU/RAM, autostart, OOM events
# Tylko bezpieczeństwo
fixos scan --modules security

# Zasoby – co zajmuje dysk i pamięć
fixos scan --modules resources

# Pełna diagnostyka z naprawą
fixos fix --modules system,security,resources

Zewnętrzne źródła wiedzy (fallback)

Gdy LLM nie zna rozwiązania, fixos szuka automatycznie w:

  • Fedora Bugzilla – baza zgłoszonych błędów
  • ask.fedoraproject.org – forum społeczności
  • Arch Wiki – doskonałe źródło dla ogólnych problemów Linux
  • GitHub Issues – PipeWire, ALSA, linux-hardware repos
  • DuckDuckGo – ogólne wyszukiwanie (bez klucza API)
  • Google via SerpAPI – najlepsze wyniki (opcjonalny klucz SERPAPI_KEY)

Konfiguracja (.env)

fixos config init    # utwórz .env z szablonu
fixos config show    # sprawdź aktualną konfigurację
LLM_PROVIDER=gemini           # gemini|openai|openrouter|groq|mistral|...
GEMINI_API_KEY=AIzaSy...      # klucz Gemini (darmowy)
AGENT_MODE=hitl               # hitl|autonomous
SHOW_ANONYMIZED_DATA=true     # pokaż dane przed wysłaniem
ENABLE_WEB_SEARCH=true        # fallback do zewnętrznych źródeł
SESSION_TIMEOUT=3600          # timeout sesji (1h)
SERPAPI_KEY=                  # opcjonalny – lepsze wyniki wyszukiwania

Testy i Docker

Uruchomienie testów

# Wszystkie testy jednostkowe (bez API, szybkie)
pytest tests/unit/ -v

# Testy e2e z mock LLM
pytest tests/e2e/ -v

# Tylko testy z prawdziwym API (wymaga tokena w .env)
pytest tests/e2e/ -v -m real_api

# Pokrycie kodu
pytest --cov=fixos --cov-report=html
make test-coverage

Docker – symulowane środowiska

# Zbuduj wszystkie obrazy
docker compose -f docker/docker-compose.yml build

# Scenariusze broken
docker compose -f docker/docker-compose.yml run broken-audio
docker compose -f docker/docker-compose.yml run broken-thumbnails
docker compose -f docker/docker-compose.yml run broken-network
docker compose -f docker/docker-compose.yml run broken-full

# Uruchom testy e2e w Dockerze
docker compose -f docker/docker-compose.yml run e2e-tests

Środowiska Docker

Obraz Scenariusz
fixos-broken-audio Brak sof-firmware, PipeWire failed, no ALSA cards
fixos-broken-thumbnails Brak thumbnailerów, pusty cache, brak GStreamer
fixos-broken-network NetworkManager failed, DNS broken, rfkill blocked
fixos-broken-full Wszystkie problemy naraz + pending updates + failed services

Struktura projektu

fixos/
├── fixos/
│   ├── cli.py                  # Komendy CLI (Click) – fixos, fix, scan, llm, ...
│   ├── config.py               # Konfiguracja + 12 providerów LLM
│   ├── platform_utils.py       # Cross-platform (Linux/Win/Mac)
│   ├── agent/
│   │   ├── hitl.py             # HITL z koloryzowanym markdown output
│   │   └── autonomous.py       # Tryb autonomiczny z JSON protokołem
│   ├── diagnostics/
│   │   └── system_checks.py    # Moduły: system, audio, thumbnails, hardware
│   ├── fixes/
│   │   ├── knowledge_base.py   # Baza znanych bugów z heurystykami
│   │   └── heuristics.py       # Matcher diagnostics → known fixes
│   ├── orchestrator/
│   │   ├── graph.py            # Graf problemów (DAG)
│   │   ├── executor.py         # Bezpieczny executor komend
│   │   └── orchestrator.py     # Główna pętla orkiestracji
│   ├── providers/
│   │   └── llm.py              # Multi-provider LLM client
│   └── utils/
│       ├── anonymizer.py       # Anonimizacja z raportem
│       └── web_search.py       # Bugzilla/AskFedora/ArchWiki/GitHub/DDG
├── tests/
│   ├── conftest.py             # Fixtures + mock diagnostics
│   ├── e2e/
│   │   ├── test_audio_broken.py
│   │   ├── test_thumbnails_broken.py
│   │   ├── test_network_broken.py
│   │   ├── test_executor.py
│   │   └── test_cli.py
│   └── unit/
│       ├── test_core.py
│       ├── test_anonymizer.py
│       └── test_executor.py
├── docker/
│   ├── base/Dockerfile
│   ├── broken-audio/Dockerfile
│   ├── broken-thumbnails/Dockerfile
│   ├── broken-network/Dockerfile
│   └── broken-full/Dockerfile
├── .env.example
├── pytest.ini
└── pyproject.toml

📋 Roadmap

Zobacz pełną listę zadań i roadmap w pliku TODO.md


🚀 Jak używać fixOS (Prosty przewodnik)

Krok 1: Instalacja

pip install -e ".[dev]"

Krok 2: Konfiguracja

# Utwórz plik .env z szablonu
fixos config init

# Ustaw klucz API (darmowy Gemini)
fixos token set AIzaSy...

# Lub wybierz innego providera
fixos llm --free    # pokaż darmowe providery

Krok 3: Użycie

# Zobacz dostępne komendy
fixos

# Diagnostyka systemu (bez AI)
fixos scan

# Naprawa z AI (pyta o potwierdzenie)
fixos fix

# Naprawa automatyczna (bez pytania)
fixos fix --mode autonomous --max-fixes 5

Przydatne przykłady

# Tylko audio
fixos fix --modules audio

# Zapisz wynik do pliku
fixos scan --output raport.json

# Timeout 30 minut
fixos fix --timeout 1800

# Podgląd orkiestracji
fixos orchestrate --dry-run

🔗 Linki


Licencja

Apache License 2.0 – see LICENSE for details.

License

Apache License 2.0 - see LICENSE for details.

Author

Created by Tom Sapletta - tom@sapletta.com

About

AI diagnostyka i naprawa Fedora Linux – audio, thumbnails, sprzęt Lenovo Yoga z anonimizacją danych, trybem HITL/Autonomous i zewnętrznymi źródłami wiedzy.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors