initialCommit #2
@@ -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
|
||||||
|
|
||||||
|
|||||||
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@@ -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
16
.yamllint.yml
Normal 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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
@@ -32,4 +32,4 @@ A troubleshooter receives a ticket reporting that the Apache service on a remote
|
|||||||
| AI inference backend | [vLLM](https://github.com/vllm-project/vllm) |
|
| AI inference backend | [vLLM](https://github.com/vllm-project/vllm) |
|
||||||
| Model | `gemma4:a4b` |
|
| Model | `gemma4:a4b` |
|
||||||
|
|
||||||
> **Note:** A suitable implementation language for this project is yet to be determined.
|
> **Note:** A suitable implementation language for this project is yet to be determined.
|
||||||
|
|||||||
18
ROADMAP.md
18
ROADMAP.md
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user