# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ______________________________________________________________________ ## [Unreleased] ### Added - Unified persistent run history in SQLite: - new `src/tai/history_store.py` for host-scoped JSON run records - `--history-db` and `--history/--no-history` options on `tai run` - prior host history auto-loaded for analysis/follow-up prompts - analyzed runs auto-indexed into history DB - External database targets for history and runbook options: - `--history-db` now supports SQLite path/URL and PostgreSQL DSN - `--runbooks`/`--store` now support remote ChromaDB URLs - External DB authentication options: - history DB: `--history-db-user`, `--history-db-password`, `--env-file` - runbook store: `--runbooks-user`/`--runbooks-password` and `--store-user`/`--store-password` - dotenv credential keys: `TAI_HISTORY_DB_USER`, `TAI_HISTORY_DB_PASSWORD`, `TAI_RUNBOOK_STORE_USER`, `TAI_RUNBOOK_STORE_PASSWORD` - Remote runbook/playbook source ingestion: - `tai runbooks sync --path` now supports `ssh://` directories - `tai runbooks sync --path` now supports HTTP/HTTPS webroots with Markdown links - `tai runbooks add` now supports `ssh://` and HTTP/HTTPS Markdown files - `--output-file` option on `tai run` to persist final AI analysis output as Markdown - `--output-format markdown|json` for `--output-file` exports - JSON export schema now includes host-specific run metadata (`generated_at`, collection stats, token usage) - New SQLite run history database (`--history-db`) now stores per-run JSON payloads and auto-loads prior host history for analysis context - Planner enhancements for broader service detection: - generic service candidate extraction from free text - package presence probes in plans (`rpm -q` and `dpkg-query -W`) - SSH read-only allowlist expanded to permit package presence commands (`rpm`, `dpkg-query`) - History DB tests in `tests/test_history_store.py` - CLI test coverage for analysis output file writing (`tests/test_cli.py`) - CLI test coverage for JSON export and ANSI stripping in written output (`tests/test_cli.py`) ### Changed - History reads/writes are now unified on SQLite DB in CLI workflows (`history`, interactive `/history`, analysis context injection). - Documentation alignment updates in README and ROADMAP to reflect implemented history DB and package-presence capabilities. - Package version metadata alignment: `src/tai/__init__.py` now matches project version `0.4.0`. ______________________________________________________________________ ## [0.4.0] - 2026-05-06 ### Added - `runbooks/` corpus with service troubleshooting guides: `ssh`, `nginx`, `postgres`, `disk`, `kernel`, `docker`, `sssd`, `xorg`, `wayland`, `x2go`, `selinux`, `apparmor` - Runbook knowledge store module `src/tai/runbook_store.py` (persistent ChromaDB-backed index and query) - Chroma telemetry no-op client `src/tai/chroma_telemetry.py` to suppress noisy local telemetry errors - `tai runbooks` command group with: - `sync` for indexing all Markdown runbooks - `list` for listing indexed metadata - `add` for indexing a single runbook file - `--runbooks` option on `tai run` to enable Tier 2 runbook retrieval - Initial analysis RAG path using retrieved diagnostic chunks (`build_analysis_message_with_chunks`) - Follow-up RAG path updates with tighter `top_k` and runbook context injection - AI runtime controls: - `--ai-timeout-seconds` - `--ai-max-tokens` - Non-streaming AI completion path for improved local backend reliability - Service/subsystem presence probes in collection plans: - unit-file checks - expected binary path checks - status/journal/config probes for recognized services including `sssd` - Prompt instruction for "component absent or not installed" interpretation when presence signals are missing - Runbook store unit tests in `tests/test_runbook_store.py` - CLI tests updated for `tai run` subcommand and non-streaming completion mocks - README refreshed with current CLI, architecture layout, RAG/runbook workflow, and usage examples - `docs/ARCHITECTURE.md` with end-to-end flow, module responsibilities, safety boundaries, and fallback behavior ### Removed - `.github/workflows/ci.yml` — GitHub Actions workflow removed; CI is now Gitea-only ### Decided - Implementation language: **Python** - Distribution strategy: single distributable binary via **Nuitka** (PyInstaller as fallback) - SSH authentication: **keypair only** (ed25519/RSA); auto-accept new hosts; hard reject on host key change with MITM warning - SSH bastion support: `--jump-host` flag using SSH native ProxyJump - SSH config behavior: use `~/.ssh/config` by default; allow override via `--ignore-ssh-config` - Interface: **interactive REPL** for v0.1; `textual`-based TUI (split-pane) for v0.2+ - RAG Tier 1 strategy: semantic diagnostic chunk retrieval with local embeddings - RAG Tier 2 strategy: Markdown runbooks persisted in embedded ChromaDB