feat(rawcli): interactive raw-command TUI skeleton (Phase 1)

First slice of `pm3py rawcli` — the interactive, annotated raw-command
tool (separate from pyws and from the future `pm3py client` CLI).

- pm3py/cli: a top-level `pm3py` console-script dispatcher (argparse)
  with a `rawcli` subcommand; prompt_toolkit gated behind a [rawcli] extra
- rawcli/session.py: RawSession — device/field/transponder/entry-mode
  state + the segmented breadcrumb `[raw / hf|lf / $tag / 0x|0b]`
- rawcli/trace_view.py: render a reader<->tag exchange as annotated,
  Proxmark-style trace lines, reusing TraceFormatter + the 14a/15693
  decoders
- rawcli/app.py: minimal PromptSession loop (connect best-effort,
  breadcrumb prompt, help/quit, raw-hex -> annotated exchange)

Entry-mode toggle, identify/connection, the command catalog, and TLV
editing follow in later phases. 9 hardware-free tests (session, trace
render, CLI dispatch); device I/O is the user's local hardware test.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
michael
2026-07-14 11:59:29 -07:00
parent 5d4af2c8e4
commit 028ce9c21e
8 changed files with 254 additions and 0 deletions

View File

@@ -42,9 +42,11 @@ dependencies = [
[project.optional-dependencies]
dev = ["pytest"]
rawcli = ["prompt_toolkit>=3.0"]
[project.scripts]
pm3flash = "pm3py.flash_cli:main"
pm3py = "pm3py.cli:main"
# pyws workspace plugin — discovered by the pyws engine (installed alongside) via this group.
[project.entry-points."pyws.plugins"]