update
All checks were successful
CI / test (push) Successful in 14s

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-05-04 04:08:50 +02:00
parent 1f0286015b
commit 65c74dde5a
7 changed files with 48 additions and 11 deletions

View File

@@ -88,6 +88,12 @@ jobs:
- name: Lint - name: Lint
run: .venv/bin/python -m ruff check . run: .venv/bin/python -m ruff check .
- name: Lint Markdown
run: .venv/bin/mdformat --check README.md ROADMAP.md CHANGELOG.md
- name: Lint YAML
run: .venv/bin/yamllint .
- name: Type-check - name: Type-check
run: .venv/bin/python -m mypy src run: .venv/bin/python -m mypy src

View File

@@ -25,6 +25,12 @@ jobs:
- name: Lint - name: Lint
run: ruff check . run: ruff check .
- name: Lint Markdown
run: mdformat --check README.md ROADMAP.md CHANGELOG.md
- name: Lint YAML
run: yamllint .
- name: Type-check - name: Type-check
run: mypy src run: mypy src

16
.yamllint.yml Normal file
View File

@@ -0,0 +1,16 @@
extends: default
ignore: |
.git/
.venv/
.mypy_cache/
.pytest_cache/
.ruff_cache/
rules:
document-start: disable
line-length:
max: 120
truthy:
allowed-values: ["true", "false"]
check-keys: false

View File

@@ -4,11 +4,12 @@ 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/). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
--- ______________________________________________________________________
## [Unreleased] ## [Unreleased]
### Added ### Added
- `README.md` — project overview, description, example workflow, supported distributions, and suggested tooling - `README.md` — project overview, description, example workflow, supported distributions, and suggested tooling
- `ROADMAP.md` — phased development plan covering decisions, data collection, AI integration, CLI design, and hardening - `ROADMAP.md` — phased development plan covering decisions, data collection, AI integration, CLI design, and hardening
- `CHANGELOG.md` — this file; established changelog tracking for the project - `CHANGELOG.md` — this file; established changelog tracking for the project
@@ -27,8 +28,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
- Test scaffold (`pytest`) with initial parser and CLI coverage - Test scaffold (`pytest`) with initial parser and CLI coverage
- SSH test coverage for policy checks, SSH argument construction, and config summary behavior - SSH test coverage for policy checks, SSH argument construction, and config summary behavior
- CI workflow for lint (`ruff`), type-check (`mypy`), and tests (`pytest`) - CI workflow for lint (`ruff`), type-check (`mypy`), and tests (`pytest`)
- CI coverage expanded with Markdown formatting checks (`mdformat --check`) and YAML linting (`yamllint`)
### Decided ### Decided
- Implementation language: **Python** - Implementation language: **Python**
- Distribution strategy: single distributable binary via **Nuitka** (PyInstaller as fallback) - 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 authentication: **keypair only** (ed25519/RSA); auto-accept new hosts; hard reject on host key change with MITM warning

View File

@@ -20,8 +20,8 @@ The agent operates in **read-only mode at all times**. It will never modify the
A troubleshooter receives a ticket reporting that the Apache service on a remote server has failed to start. They provide `tai` with: A troubleshooter receives a ticket reporting that the Apache service on a remote server has failed to start. They provide `tai` with:
1. The ticket description or error message 1. The ticket description or error message
2. The hostname of the affected system 1. The hostname of the affected system
3. Any relevant directories to focus on 1. Any relevant directories to focus on
`tai` then connects to the host, reads through system logs, service configurations, and any other related files, and returns a structured analysis of the likely cause along with recommended next steps. `tai` then connects to the host, reads through system logs, service configurations, and any other related files, and returns a structured analysis of the likely cause along with recommended next steps.

View File

@@ -2,13 +2,14 @@
This document outlines the major decisions, milestones, and development phases required to bring `tai` from concept to a working tool. This document outlines the major decisions, milestones, and development phases required to bring `tai` from concept to a working tool.
--- ______________________________________________________________________
## Phase 0 — Decisions & Prerequisites ## Phase 0 — Decisions & Prerequisites
These must be resolved before meaningful development can begin. These must be resolved before meaningful development can begin.
### Language Selection ### Language Selection
- [x] **Decision: Python** - [x] **Decision: Python**
- Key factors: native vLLM integration, mature SSH libraries (`paramiko` / `asyncssh`), strong text/log parsing, rapid development - Key factors: native vLLM integration, mature SSH libraries (`paramiko` / `asyncssh`), strong text/log parsing, rapid development
- Single binary distribution will be achieved via **Nuitka** (preferred for true compilation) or **PyInstaller** as a fallback - Single binary distribution will be achieved via **Nuitka** (preferred for true compilation) or **PyInstaller** as a fallback
@@ -16,12 +17,14 @@ These must be resolved before meaningful development can begin.
- [ ] Add binary build step to CI pipeline - [ ] Add binary build step to CI pipeline
### AI Backend & Model ### AI Backend & Model
- [ ] Confirm use of [vLLM](https://github.com/vllm-project/vllm) as the inference backend - [ ] Confirm use of [vLLM](https://github.com/vllm-project/vllm) as the inference backend
- [ ] Confirm `gemma4:a4b` as the default model (or select an alternative) - [ ] Confirm `gemma4:a4b` as the default model (or select an alternative)
- [ ] Define minimum hardware requirements for running the model locally - [ ] Define minimum hardware requirements for running the model locally
- [ ] Decide whether the AI backend is bundled, self-hosted externally, or user-supplied - [ ] Decide whether the AI backend is bundled, self-hosted externally, or user-supplied
### SSH Strategy ### SSH Strategy
- [x] **Decision: keypair authentication only** — no password auth; eliminates credential storage risk - [x] **Decision: keypair authentication only** — no password auth; eliminates credential storage risk
- Default key resolution: `~/.ssh/id_ed25519`, `~/.ssh/id_rsa` (in order of preference) - Default key resolution: `~/.ssh/id_ed25519`, `~/.ssh/id_rsa` (in order of preference)
- CLI override via `--identity-file <path>` - CLI override via `--identity-file <path>`
@@ -33,6 +36,7 @@ These must be resolved before meaningful development can begin.
- Override switch: `--ignore-ssh-config` to bypass local SSH config when required - Override switch: `--ignore-ssh-config` to bypass local SSH config when required
### Scope & Constraints ### Scope & Constraints
- [ ] Define the supported scope of issues (services, network, disk, kernel, etc.) - [ ] Define the supported scope of issues (services, network, disk, kernel, etc.)
- [ ] Confirm read-only guarantee — document exactly what "read-only" means in practice - [ ] Confirm read-only guarantee — document exactly what "read-only" means in practice
- [x] **Decision: interactive REPL mode for v0.1, full TUI for v0.2+** - [x] **Decision: interactive REPL mode for v0.1, full TUI for v0.2+**
@@ -40,7 +44,7 @@ These must be resolved before meaningful development can begin.
- v0.2+: `textual`-based TUI with split panes (collected data | AI output | input bar) - v0.2+: `textual`-based TUI with split panes (collected data | AI output | input bar)
- Built-in slash commands: `/collect`, `/show logs`, `/clear`, `/host <hostname>`, `/help`, `/quit` - Built-in slash commands: `/collect`, `/show logs`, `/clear`, `/host <hostname>`, `/help`, `/quit`
--- ______________________________________________________________________
## Phase 1 — Project Foundation ## Phase 1 — Project Foundation
@@ -58,7 +62,7 @@ Basic project scaffolding and connectivity.
- [x] Input parser and CLI tests added - [x] Input parser and CLI tests added
- [x] SSH module tests added for command policy and SSH argv behavior - [x] SSH module tests added for command policy and SSH argv behavior
--- ______________________________________________________________________
## Phase 2 — Data Collection Layer ## Phase 2 — Data Collection Layer
@@ -74,7 +78,7 @@ Define what information the agent gathers and how.
- [ ] Add support for per-distro variations (Ubuntu vs RHEL path differences, etc.) - [ ] Add support for per-distro variations (Ubuntu vs RHEL path differences, etc.)
- [ ] Write tests with mocked SSH output - [ ] Write tests with mocked SSH output
--- ______________________________________________________________________
## Phase 3 — AI Integration ## Phase 3 — AI Integration
@@ -87,7 +91,7 @@ Wire collected data into the local AI model.
- [ ] Add streaming support for long AI responses - [ ] Add streaming support for long AI responses
- [ ] Evaluate and test model output quality on common issue types - [ ] Evaluate and test model output quality on common issue types
--- ______________________________________________________________________
## Phase 4 — CLI & User Experience ## Phase 4 — CLI & User Experience
@@ -99,7 +103,7 @@ Polish the interface for real-world use.
- [ ] Support output to file or clipboard - [ ] Support output to file or clipboard
- [ ] Write man page / `--help` documentation - [ ] Write man page / `--help` documentation
--- ______________________________________________________________________
## Phase 5 — Hardening & Distribution ## Phase 5 — Hardening & Distribution
@@ -111,7 +115,7 @@ Prepare for broader use.
- [ ] Write installation and quickstart documentation - [ ] Write installation and quickstart documentation
- [ ] End-to-end integration tests against a test VM - [ ] End-to-end integration tests against a test VM
--- ______________________________________________________________________
## Decisions Log ## Decisions Log

View File

@@ -22,6 +22,8 @@ dev = [
"pytest>=8.2,<9.0", "pytest>=8.2,<9.0",
"ruff>=0.5,<1.0", "ruff>=0.5,<1.0",
"mypy>=1.10,<2.0", "mypy>=1.10,<2.0",
"mdformat>=0.7,<1.0",
"yamllint>=1.35,<2.0",
] ]
build = [ build = [
"nuitka>=2.4,<3.0", "nuitka>=2.4,<3.0",