Menu: split the crowded Mesh section, Messaging now leads

Chat, Channels, and Courier move into their own Messaging section at
the top; Mesh keeps the views over the mesh itself - Dashboard, Nodes,
Map, Atlas, Watchtower, Send advert - dropping from nine rows to six.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Jean-Pierre MartineauandClaude Fable 5 committed 2026-07-11 18:49:02 -04:00
1 parent 3fdf9ae7c7
commit d61d4fbbed
6 files changed
+12 -11

No files matched your search

+6 -5
View File
@@ -149,11 +149,12 @@ class Tool(ABC):
_REGISTRY: dict[str, Tool] = {}
#: Explicit menu ordering for tool categories. Mesh leads because it holds the
#: first-class, everyday features (chat, channels, the nodes and map views, adverts);
#: the rest follow in a natural workflow order. Categories not listed here sort last,
#: alphabetically, so a new category still appears.
_CATEGORY_ORDER = ["Mesh", "Device management", "Tools"]
#: Explicit menu ordering for tool categories. Messaging leads because it holds the
#: first-class, everyday features (chat, channels, the courier); Mesh follows with
#: the views over the mesh itself (dashboard, nodes, map, atlas, watchtower,
#: adverts); the rest in a natural workflow order. Categories not listed here sort
#: last, alphabetically, so a new category still appears.
_CATEGORY_ORDER = ["Messaging", "Mesh", "Device management", "Tools"]
def _category_rank(category: str) -> int:
+1 -1
View File
@@ -38,7 +38,7 @@ class ChannelsTool(Tool):
title = "Channels"
icon = "📻"
help = "Create, join, and share mesh channels (with QR codes)"
category = "Mesh"
category = "Messaging"
order = 20
async def run(self, ctx: AppContext, params: dict[str, Any]) -> ToolResult:
+1 -1
View File
@@ -46,7 +46,7 @@ class ChatTool(Tool):
title = "Chat"
icon = "💬"
help = "Channel and direct messaging — live chat, with stored history"
category = "Mesh"
category = "Messaging"
order = 10
async def prompt_params(self, ctx: AppContext) -> Optional[dict[str, Any]]:
+2 -2
View File
@@ -32,8 +32,8 @@ class CourierTool(Tool):
title = "Courier"
icon = "📨"
help = "Store-and-forward outbox — deliver when the node is next heard"
category = "Mesh"
order = 12 # right after Chat: the same conversation, minus the waiting around
category = "Messaging"
order = 30 # after Chat and Channels: the same conversations, minus the waiting around
async def prompt_params(self, ctx: AppContext) -> Optional[dict[str, Any]]:
"""Run the outbox screen; there are never parameters to collect.
+1 -1
View File
@@ -19,7 +19,7 @@ class NodesTool(Tool):
icon = "👥"
help = "List this node and known contacts (last heard, packets, type, key)"
category = "Mesh"
order = 25 # between Channels and Map: the "who's out there" view
order = 10 # right under the Dashboard: the "who's out there" view
async def run(self, ctx: AppContext, params: dict[str, Any]) -> ToolResult:
"""Query the device and render the node/contact list.
+1 -1
View File
@@ -31,7 +31,7 @@ class WatchtowerTool(Tool):
icon = "🚨"
help = "Alerts for watched nodes — silence, SNR sag, new arrivals"
category = "Mesh"
order = 7 # right under the Dashboard: the section's other always-on eye
order = 35 # after the views: the section's always-on alerting eye
async def prompt_params(self, ctx: AppContext) -> Optional[dict[str, Any]]:
"""Run the Watchtower screen; there are never parameters to collect.