docs/ was one flat folder: the user guides, the CLI manual, the device manuals, the code notes and an old survey side by side. It is now guide/ (features, configuration, connecting, terminals), cli/ (the manual as its README, the cookbook), devices/ (which manual is yours as its README, then one per device) and development/ (architecture, the survey); screenshots/ stays put. The index follows the folders. The device manuals are named for the device they are about: the PicoCalc's is picocalc-lyra.md, since MeshTerm runs on the PicoCalc's Luckfox Lyra core and on none of the others, and the uConsole's stays uconsole.md, since its CM4 and CM5 run it alike. A new cardputer-zero.md opens on a warning that the device is not supported yet, says what has been built and tested only in the simulator, and how to try it there. Every relative link was resolved from where it was written and rewritten from where it now lives, and the repo-root spellings in code, config and the release skill moved with them; the changelog's GitHub URLs too. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
24 lines
1.1 KiB
Markdown
24 lines
1.1 KiB
Markdown
# How the code is laid out
|
|
|
|
A map of the package for anyone reading it for the first time. The house rules that
|
|
govern what goes where are in [CLAUDE.md](../../CLAUDE.md), which is the real style guide;
|
|
[CONTRIBUTING.md](../../CONTRIBUTING.md) has the dev install and the gates a change has to
|
|
pass.
|
|
|
|
MeshTerm is layered so a new feature is one file in `meshterm/tools/`:
|
|
|
|
```
|
|
cli.py Typer app; no subcommand -> interactive menu
|
|
context.py AppContext (console, config, repository, device) dependency container
|
|
core/ Domain: models, preferences + device profiles, connection abstraction (+ mock)
|
|
tools/ Pluggable "menu options"; each self-registers and gets logging for free
|
|
services/ Background algorithms (monitor, trace, tx search, courier, watchtower) — no UI
|
|
persistence/ SQLite schema, repository, structured logging
|
|
ui/ Rich theme/widgets + the full-screen TUI (screens, dialogs, map, chat)
|
|
```
|
|
|
|
Adding a feature means subclassing `Tool`, decorating it with `@register`, and
|
|
implementing `run()`. The same registry builds both the CLI and the menu, and the base
|
|
class wraps every execution in a logged `runs` row automatically.
|
|
|