Skip to main content

AI-powered Linux/Windows diagnostics and repair – audio, hardware, system issues

Project description

img.png

fixfedora v2.0 🔧🤖

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.

  __  _      ___        __       _
 / _|(_)_ __/ __| ___  / _| ___ | |_  ___  _ _ __ _
|  _|| | \ \ (__/ -_) |  _|/ -_)|  _|/ _ \| '_/ _` |
|_|  |_|_/_/\_,_\___| |_|  \___| \__|\/\__/|_| \__,_|
  Fedora AI Diagnostics  •  v2.0.0

Szybki start (3 kroki)

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

# 2. Token Google Gemini (domyślny, darmowy)
fixfedora token set AIzaSy...          # lub --provider openai/xai

# 3. Uruchom diagnostykę
fixfedora fix

Komendy CLI

fixfedora scan              – tylko diagnostyka (bez LLM)
fixfedora fix               – diagnoza + sesja naprawcza (HITL lub autonomous)
fixfedora token set KEY     – zapisz token API
fixfedora token show        – pokaż aktualny token (zamaskowany)
fixfedora token clear       – usuń token
fixfedora config show       – pokaż konfigurację
fixfedora config init       – utwórz .env z szablonu
fixfedora config set K V    – ustaw wartość w .env
fixfedora providers         – lista providerów LLM
fixfedora test-llm          – testuj połączenie z LLM

Przykłady użycia

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

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

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

# Bez pokazywania danych użytkownikowi przed wysłaniem
fixfedora fix --no-show-data

# Z xAI Grok
fixfedora fix --provider xai --token xai-...

# Timeout 30 minut
fixfedora fix --timeout 1800

# Test połączenia z Gemini
fixfedora test-llm

Tryby agenta

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

LLM sugeruje → Ty decydujesz → Skrypt wykonuje

fixfedora [00:58:42] ❯ 1           ← napraw problem nr 1
fixfedora [00:58:30] ❯ !dnf list   ← wykonaj komendę bezpośrednio
fixfedora [00:58:10] ❯ search sof  ← szukaj w zewnętrznych źródłach
fixfedora [00:57:55] ❯ all         ← napraw wszystko
fixfedora [00:57:40] ❯ q           ← zakończ

🤖 Autonomous – agent działa samodzielnie

fixfedora fix --mode autonomous
  • Agent analizuje → wykonuje → weryfikuje → kontynuuje
  • Protokół JSON: { "action": "EXEC", "command": "...", "reason": "..." }
  • Zabezpieczenia: lista zabronionych komend (rm -rf /, mkfs, fdisk...)
  • Każde EXEC jest logowane z wynikiem
  • Limit: --max-fixes 10 (domyślnie)
  • Wymaga jawnego yes na starcie

Anonimizacja danych

Zawsze pokazywana użytkownikowi przed wysłaniem do LLM (SHOW_ANONYMIZED_DATA=true):

═══════════════════════════════════════════════════════════════
  📋 DANE DIAGNOSTYCZNE (zanonimizowane) – wysyłane do LLM
═══════════════════════════════════════════════════════════════
  ... [zanonimizowane dane] ...

  🔒 Anonimizacja – co zostało ukryte:
  ✓ Hostname: 1 wystąpień
  ✓ Username: 3 wystąpień
  ✓ Adresy IPv4: 2 wystąpień
  ✓ UUID (serial/hardware): 4 wystąpień
═══════════════════════════════════════════════════════════════

Maskowane dane: IPv4, MAC, hostname, username, /home/<user>, tokeny API, UUID, numery seryjne.


Moduły diagnostyki

Moduł Co sprawdza
system CPU, RAM, dyski, systemctl --failed, dnf check-update, journalctl
audio ALSA karty, PipeWire/WirePlumber status, SOF firmware, mikrofon Lenovo
thumbnails ffmpegthumbnailer, totem-nautilus, cache ~/.cache/thumbnails, GNOME ustawienia
hardware DMI (Lenovo Yoga), BIOS, GPU, touchpad, kamera, ACPI, czujniki

Znane problemy Lenovo Yoga (Fedora)

🔊 Brak dźwięku po aktualizacji

Przyczyna: Brak lub niekompatybilna wersja sof-firmware (Sound Open Firmware)

# Diagnoza
fixfedora scan --audio

# Naprawa
sudo dnf install sof-firmware
systemctl --user restart pipewire wireplumber

🖼️ Brak podglądów plików

Przyczyna: Brak thumbnailerów usuniętych przez aktualizację Fedora

# Naprawa
sudo dnf install ffmpegthumbnailer totem-nautilus gstreamer1-plugins-good
nautilus -q
rm -rf ~/.cache/thumbnails/fail/*

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

Gdy LLM nie zna rozwiązania, fixfedora 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)
# Ręczne wyszukiwanie w sesji HITL
fixfedora [00:58:00]  search sof-firmware lenovo yoga no sound

Konfiguracja (.env)

# Stwórz plik konfiguracyjny
fixfedora config init

# Lub ręcznie:
cp .env.example .env
chmod 600 .env

Kluczowe ustawienia:

LLM_PROVIDER=gemini           # gemini|openai|xai|openrouter|ollama
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)

Testy i Docker

Uruchomienie testów

# Unit testy (bez API)
pytest tests/unit/ -v

# E2E testy z mock LLM
pytest tests/e2e/ -v

# E2E testy z prawdziwym API (wymaga tokena w .env)
pytest tests/e2e/ -v -k "real_llm"

# Pokrycie kodu
pytest --cov=fixfedora --cov-report=html

Docker – symulowane środowiska

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

# Testuj scenariusz broken-audio
docker compose -f docker/docker-compose.yml run broken-audio

# Testuj scenariusz broken-thumbnails
docker compose -f docker/docker-compose.yml run broken-thumbnails

# Pełny scenariusz (wszystkie problemy)
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
fixfedora-broken-audio Brak sof-firmware, PipeWire failed, no ALSA cards
fixfedora-broken-thumbnails Brak thumbnailerów, pusty cache, brak GStreamer
fixfedora-broken-full Wszystkie problemy naraz + pending updates + failed services

Struktura projektu

fixfedora/
├── fixfedora/
│   ├── __init__.py
│   ├── cli.py                  # Komendy CLI (Click)
│   ├── config.py               # Zarządzanie konfiguracją (.env)
│   ├── agent/
│   │   ├── hitl.py             # Human-in-the-Loop
│   │   └── autonomous.py       # Tryb autonomiczny z JSON protokołem
│   ├── diagnostics/
│   │   └── system_checks.py    # Moduły: system, audio, thumbnails, hardware
│   ├── providers/
│   │   └── llm.py              # Multi-provider LLM (Gemini/OpenAI/xAI/Ollama)
│   └── 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
│   └── unit/
│       └── test_core.py
├── docker/
│   ├── base/Dockerfile
│   ├── broken-audio/Dockerfile
│   ├── broken-thumbnails/Dockerfile
│   ├── broken-full/Dockerfile
│   └── docker-compose.yml
├── .env.example
├── pytest.ini
└── setup.py

Licencja

MIT License

License

Apache License 2.0 - see LICENSE for details.

Author

Created by Tom Sapletta - tom@sapletta.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fixos-2.1.2.tar.gz (73.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fixos-2.1.2-py3-none-any.whl (57.6 kB view details)

Uploaded Python 3

File details

Details for the file fixos-2.1.2.tar.gz.

File metadata

  • Download URL: fixos-2.1.2.tar.gz
  • Upload date:
  • Size: 73.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for fixos-2.1.2.tar.gz
Algorithm Hash digest
SHA256 ca41027be8057f081475329894210b9f19751bd10f69d4b9f1ff948e97b78c51
MD5 c468571f37bf6014fbb28f9d3f976248
BLAKE2b-256 143664950aa7a8c9c3e721a0653e3ee90ace2813221d7cdc9e1bfe858cbd6345

See more details on using hashes here.

File details

Details for the file fixos-2.1.2-py3-none-any.whl.

File metadata

  • Download URL: fixos-2.1.2-py3-none-any.whl
  • Upload date:
  • Size: 57.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for fixos-2.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 21cdf8ded9626e5c832c79e76505fca2ce719d633d2954992130db03191a13ab
MD5 c87977f66eddc0572c5552a56db8602d
BLAKE2b-256 b7cffea984386d70bac6be67bb1346d955b3f55467726b8e0f2992fd99fc5803

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page