Skip to content

Commit 04453d2

Browse files
committed
Add interactive CLI control center
1 parent 0814a4b commit 04453d2

10 files changed

Lines changed: 1059 additions & 53 deletions

File tree

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Changelog
22

3+
## 2.1.0 — 2026-06-22
4+
5+
- Added a colorful full-screen control center for no-argument `fcoin`.
6+
- Added arrow-key, `j`/`k`, number-key, back, escape, and quit navigation.
7+
- Added guided workflows for every major command category.
8+
- Added compatible-file discovery and secure-session selection.
9+
- Made incomplete terminal commands open their workflow wizard.
10+
- Added friendly `--inspect`, `-inspect`, `--doctor`, and related aliases.
11+
- Preserved direct command and JSON behavior for scripts and automation.
12+
313
## 2.0.0 — 2026-06-22
414

515
- Replaced the monolithic prototype with an installable Python package.

README.md

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
[![Python 3.11+](https://img.shields.io/badge/Python-3.11%2B-45E1FF?style=flat-square&logo=python&logoColor=0B0F14)](https://python.org)
1515
[![Zero runtime dependencies](https://img.shields.io/badge/runtime_dependencies-0-7DFFB2?style=flat-square)](#installation)
16-
[![Tests](https://img.shields.io/badge/tests-21_passing-7DFFB2?style=flat-square)](#development)
16+
[![Tests](https://img.shields.io/badge/tests-27_passing-7DFFB2?style=flat-square)](#development)
1717
[![License: MIT](https://img.shields.io/badge/license-MIT-FFCF70?style=flat-square)](LICENSE)
1818

1919
**Acquire. Validate. Understand. Plan. Record. Verify. Recover.**
@@ -26,6 +26,42 @@ FCOIN is an offline-first toolkit for examining and safely maintaining MIFARE Cl
2626

2727
FCOIN does not silently write cards, install packages with `sudo`, upload dumps, or treat heuristic guesses as facts.
2828

29+
## Interactive control center
30+
31+
Run FCOIN without arguments:
32+
33+
```bash
34+
fcoin
35+
```
36+
37+
This opens a colorful full-screen dashboard instead of printing raw command help. Navigate with:
38+
39+
- `` / `` or `j` / `k` to move.
40+
- `ENTER` to open the selected workflow.
41+
- Number keys for immediate shortcuts.
42+
- `b` or `ESC` to go back.
43+
- `q` to exit cleanly.
44+
45+
The dashboard provides guided menus for:
46+
47+
- Reader and imported-dump backups.
48+
- Inspection, validation, comparison, and evidence questions.
49+
- Reports, conversion, inference, and inventory.
50+
- Owned-laboratory profile and value-plan workflows.
51+
- Transaction preparation, verification, recovery, history, and journals.
52+
53+
File prompts automatically list compatible files in the current directory and always provide a manual-path option. Session prompts display the UID, transaction state, card type, and session ID.
54+
55+
Incomplete direct commands also enter the relevant wizard when used in a terminal:
56+
57+
```bash
58+
fcoin inspect
59+
fcoin compare
60+
fcoin backup
61+
```
62+
63+
Fully specified commands remain unchanged for scripts and automation. Friendly aliases such as `fcoin --inspect` and `fcoin --doctor` are also accepted.
64+
2965
## What changed in 2.0
3066

3167
| Area | Capability |
@@ -106,7 +142,7 @@ FCOIN itself has no third-party Python runtime dependencies.
106142
git clone https://github.com/Nour833/Fcoin.git
107143
cd Fcoin
108144
python3 -m pip install -e .
109-
fcoin --help
145+
fcoin
110146
```
111147

112148
It can also run directly from a checkout:
@@ -179,6 +215,8 @@ fcoin inspect card.mfd --json
179215

180216
The analyzer reports protocol facts and candidates separately. A structurally valid value block is a fact; calling that value a balance requires a trusted profile or controlled evidence.
181217

218+
The default terminal view hides routine empty blocks and valid sector trailers so important findings remain readable. Use `--all` for the complete forensic table.
219+
182220
### 4. Compare controlled states
183221

184222
```bash
@@ -464,6 +502,8 @@ Sensitive artifacts use mode `0600`; session directories use `0700`. Dumps, keys
464502

465503
Every analysis-oriented command supports plain terminal output or JSON where appropriate. Set `NO_COLOR=1` or use `--no-color` for non-ANSI output.
466504

505+
Use `fcoin --help` when you specifically want the complete non-interactive argparse reference instead of the dashboard.
506+
467507
## Architecture
468508

469509
```text

docs/ARCHITECTURE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ An analysis finding is not an authorization. A writable plan additionally requir
4444
- `formats.py` converts complete images.
4545
- `reporting.py` creates archiveable output.
4646
- `ui.py` presents styled terminal data without runtime dependencies.
47+
- `interactive.py` provides arrow-key menus, file/session pickers, and guided workflows.
4748
- `cli.py` connects commands to domain operations.
4849

4950
## Transaction states

fcoin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# package directory as its submodule path instead of shadowing it.
1616
if __name__ == "fcoin":
1717
__path__ = [str(SRC / "fcoin")]
18-
__version__ = "2.0.0"
18+
__version__ = "2.1.0"
1919

2020
from fcoin.cli import main # noqa: E402
2121

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "fcoin"
7-
version = "2.0.0"
7+
version = "2.1.0"
88
description = "Local-first MIFARE Classic backup, validation, analysis, comparison, and guarded restoration toolkit"
99
readme = "README.md"
1010
requires-python = ">=3.11"

src/fcoin/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@
33
from fcoin.dump import CardImage
44

55
__all__ = ["CardImage"]
6-
__version__ = "2.0.0"
6+
__version__ = "2.1.0"

0 commit comments

Comments
 (0)