Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

127 changes: 127 additions & 0 deletions docs/plans/2026-03-02-tui-version-status-commands.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
# toki-tui version + status commands Implementation Plan

> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

**Goal:** Add `toki-tui version` and `toki-tui status` CLI subcommands and bump the crate version to 0.2.0.

**Architecture:** Two new variants added to the existing `Commands` enum in `cli.rs`, handled in the `match` block in `main.rs`. No new files, no network calls. Version is read at compile time via `env!("CARGO_PKG_VERSION")`. Status is purely local — reads session and Milltime cookie files from disk.

**Tech Stack:** clap 4 (derive), Rust std, existing `session_store` module.

---

### Task 1: Bump crate version to 0.2.0

**Files:**
- Modify: `toki-tui/Cargo.toml:3`

**Step 1: Edit version field**

Change:
```toml
version = "0.1.0"
```
To:
```toml
version = "0.2.0"
```

**Step 2: Verify build**

```bash
SQLX_OFFLINE=true just check
```
Expected: `Finished` with no errors.

---

### Task 2: Add `Version` subcommand

**Files:**
- Modify: `toki-tui/src/cli.rs`
- Modify: `toki-tui/src/main.rs`

**Step 1: Add variant to Commands enum in `cli.rs`**

```rust
/// Print the current version
Version,
```

**Step 2: Handle in `main.rs` match block**

```rust
Commands::Version => {
println!("{}", env!("CARGO_PKG_VERSION"));
}
```

**Step 3: Verify build**

```bash
SQLX_OFFLINE=true just check
```
Expected: `Finished` with no errors.

---

### Task 3: Add `Status` subcommand

**Files:**
- Modify: `toki-tui/src/cli.rs`
- Modify: `toki-tui/src/main.rs`

**Step 1: Add variant to Commands enum in `cli.rs`**

```rust
/// Show current login and Milltime session status
Status,
```

**Step 2: Handle in `main.rs` match block**

```rust
Commands::Status => {
let session = session_store::load_session()?;
let mt_cookies = session_store::load_mt_cookies()?;
let session_status = if session.is_some() { "logged in" } else { "not logged in" };
let mt_status = if !mt_cookies.is_empty() { "authenticated" } else { "no cookies" };
println!("Session: {}", session_status);
println!("Milltime: {}", mt_status);
}
```

**Step 3: Verify build**

```bash
SQLX_OFFLINE=true just check
```
Expected: `Finished` with no errors.

---

### Task 4: Add justfile recipes

**Files:**
- Modify: `justfile`

**Step 1: Add two recipes after existing tui-* recipes**

```just
# Print toki-tui version
tui-version:
cd toki-tui && cargo run -- version

# Show toki-tui session status
tui-status:
cd toki-tui && cargo run -- status
```

---

### Task 5: Commit

```bash
git add toki-tui/Cargo.toml toki-tui/src/cli.rs toki-tui/src/main.rs justfile docs/plans/2026-03-02-tui-version-status-commands.md
git commit -m "feat(tui): add version and status subcommands, bump to v0.2.0"
```
8 changes: 8 additions & 0 deletions justfile
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,11 @@ tui-logout:
# Print TUI config path and create default config if missing
tui-config:
cd toki-tui && cargo run -- config-path

# Print toki-tui version
tui-version:
cd toki-tui && cargo run -- version

# Show toki-tui session and Milltime status
tui-status:
cd toki-tui && cargo run -- status
2 changes: 1 addition & 1 deletion toki-tui/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "toki-tui"
version = "0.1.0"
version = "0.2.0"
edition = "2021"

[dependencies]
Expand Down
4 changes: 4 additions & 0 deletions toki-tui/src/cli.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,8 @@ pub enum Commands {
Logout,
/// Print config path and create default file if missing
ConfigPath,
/// Print the current version
Version,
/// Show current login and Milltime session status
Status,
}
11 changes: 11 additions & 0 deletions toki-tui/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,17 @@ async fn main() -> Result<()> {
let path = config::TokiConfig::ensure_exists()?;
println!("{}", path.display());
}
Commands::Version => {
println!("{}", env!("CARGO_PKG_VERSION"));
}
Commands::Status => {
let session = session_store::load_session()?;
let mt_cookies = session_store::load_mt_cookies()?;
let session_status = if session.is_some() { "logged in" } else { "not logged in" };
let mt_status = if !mt_cookies.is_empty() { "authenticated" } else { "no cookies" };
println!("Azure AD: {}", session_status);
println!("Milltime: {}", mt_status);
}
Commands::Login => {
let cfg = config::TokiConfig::load()?;
login::run_login(&cfg.api_url).await?;
Expand Down
Loading