Files
uberspace-cli/AI_AGENT_REPORT.md
Felix Förtsch f0604a4aee rewrite uberspace-cli in rust (phase 1 + 2)
single binary `uc` replaces bash asteroids script, unifies v7/v8
behind a stable interface with TOML config. implements registry CRUD,
SSH passthrough with v7/v8 translation, status collection/caching,
legacy import. 24 unit tests pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 11:05:35 +02:00

47 lines
2.0 KiB
Markdown

# AI Agent Report — uberspace-cli
## Status
Phase 1 + 2 of the Rust rewrite are complete. The `uc` binary compiles and all 24 unit tests pass.
## What was done
- Created Rust project (`Cargo.toml`, binary name `uc`, CalVer `2026.3.3`)
- Implemented all Phase 1 + 2 modules:
- `registry.rs` — TOML-based asteroid CRUD (`~/.config/uc/registry.toml`)
- `ssh.rs` — passthrough (`ssh -t`) and capture (for status collection)
- `cache.rs` — per-asteroid TOML status cache (`~/.config/uc/cache/*.toml`)
- `translate.rs` — v7/v8 command translation (mail, port, tools, web backend)
- `status.rs` — remote status collection via SSH, colored display, age/staleness
- `cli.rs` — clap-derived CLI with fallback to asteroid passthrough
- `uc import <path>` migrates legacy `asteroids.list` + cache files
## CLI command tree
```
uc add <name> <server> <version> # register asteroid
uc list # list registered
uc remove <name> # deregister
uc status [--refresh] # aggregate from cache (or refresh all)
uc <name> status # refresh + show one asteroid
uc <name> <args...> # passthrough → SSH with v7/v8 translation
uc import <path> # migrate from asteroids.list
```
## Architecture notes
- Clap `try_parse()` + manual fallback handles the `uc <name> <args...>` passthrough pattern
- SSH passthrough preserves the user's SSH config/keys — no Rust SSH library needed
- Remote status script is the same bash heredoc from the original, embedded as a const
- v8 Rich-table box-drawing chrome is stripped by the remote script before parsing
## What's next (Phase 3)
- Dashboard HTTP API: `reqwest` + `serde_json` for login, create-asteroid, add-ssh-key, delete
- Session management: cookies + CSRF token in `~/.config/uc/session.toml`
## Known considerations
- The `cache::load()` function exists but is currently only used transitively via `load_all()` — produces a dead-code warning
- Edition 2024 requires Rust 1.85+; current toolchain is 1.93