[Feature] Integrate Meshroller into our mesh features + killer setup/use UX #50
Open
opened 2026-06-17 09:40:25 +00:00 by lfg2025
·
4 comments
No Branch/Tag Specified
main
ux-at-last
fix/mesh-send-content-inline-federation-fallback
cashu-error-messages
gsd/phase-13-aiui-functional-conversational-node-control-and-content-surf
feat/podsteadr-app-package
rotate-release-root
chore/aiui-monorepo-migration
wip/phase-13-p13-02
wip/phase-13-p13-01
companion/0.5.27-clipboard-qr-restart
fix/bitcoin-conf-conflict-crash-loop
demo-build
archy-hwconfig
openwrt-enhancements
a3-10-endpoint-fallback
public-prelaunch
release/1.7.115-prep
fix/web-listener-ipv6
fips-companion-5g-hardening
fix/connection-accept-deadlock
fix/demo-images-path-filter
fix/companion-autologin-replay-intro
networking-profits-dashboard
identities-mobile-polish
companion-qr-scan-fix
companion-qr-pairing
intro-reliability-video-perf
login-bg-continuity
audio-bottom-bar
demo-intro-every-visit
intro-entrance-fixes
cloud-feedback-demo-content
cloud-tabs-search
ark-wallet-ui-demo
demo-nginx-app-assets
demo-ui-fixes
ark-wallet-barkd
v1.7.129-alpha
v1.7.128-alpha
v1.7.127-alpha
v1.7.126-alpha
v1.7.125-alpha
v1.7.124-alpha
v1.7.123-alpha
v1.7.122-alpha
v1.7.121-alpha
v1.7.120-alpha
v1.7.119-alpha
v1.7.118-alpha
v1.7.117-alpha
v1.7.116-alpha
v1.7.115-alpha
v1.7.114-alpha
v1.7.113-alpha
v1.7.112-alpha
companion-v0.5.10
companion-v0.5.9
companion-v0.5.6
v1.7.111-alpha
v1.7.110-alpha
v1.7.109-alpha
v1.7.108-alpha
v1.7.106-alpha
v1.7.105-alpha
v1.7.104-alpha
v1.7.103-alpha
v1.7.102-alpha
v1.7.101-alpha
v1.7.100-alpha
v1.7.99-alpha
v1.7.98-alpha
v1.7.97-alpha
v1.7.96-alpha
v1.7.95-alpha
v1.7.94-alpha
v1.7.93-alpha
v1.7.92-alpha
v1.7.91-alpha
v1.7.90-alpha
v1.7.89-alpha
v1.7.88-alpha
v1.7.87-alpha
v1.7.86-alpha
v1.7.85-alpha
v1.7.84-alpha
v1.7.83-alpha
v1.7.82-alpha
v1.7.81-alpha
v1.7.80-alpha
v1.7.79-alpha
v1.7.78-alpha
v1.7.77-alpha
v1.7.76-alpha
v1.7.75-alpha
v1.7.74-alpha
v1.7.73-alpha
v1.7.72-alpha
v1.7.71-alpha
v1.7.70-alpha
v1.7.69-alpha
v1.7.68-alpha
v1.7.67-alpha
v1.7.66-alpha
v1.7.65-alpha
v1.7.64-alpha
v1.7.63-alpha
v1.7.62-alpha
v1.7.61-alpha
v1.7.60-alpha
v1.7.59-alpha
v1.7.58-alpha
v1.7.57-alpha
v1.7.56-alpha
v1.7.55-alpha
v1.7.54-alpha
v1.7.53-alpha
v1.7.52-alpha
v1.7.51-alpha
v1.7.50-alpha
v1.7.49-alpha
v1.7.48-alpha
v1.7.47-alpha
v1.7.46-alpha
v1.7.45-alpha
v1.7.44-alpha
v1.7.43-alpha
v1.7.42-alpha
v1.7.41-alpha
v1.7.40-alpha
v1.7.39-alpha
v1.7.38-alpha
v1.7.37-alpha
v1.7.36-alpha
v1.7.35-alpha
v1.7.34-alpha
v1.7.33-alpha
v1.7.32-alpha
v1.7.31-alpha
v1.7.30-alpha
v1.7.29-alpha
v1.7.28-alpha
v1.7.27-alpha
v1.7.26-alpha
v1.7.25-alpha
v1.7.24-alpha
v1.7.23-alpha
v1.7.22-alpha
v1.7.21-alpha
v1.7.20-alpha
v1.7.19-alpha
v1.7.18-alpha
v1.7.17-alpha
v1.7.16-alpha
v1.7.15-alpha
v1.7.14-alpha
v1.7.13-alpha
v1.7.12-alpha
v1.7.11-alpha
v1.7.10-alpha
v1.7.9-alpha
v1.7.8-alpha
v1.7.7-alpha
v1.7.6-alpha
v1.7.5-alpha
v1.7.4-alpha
v1.7.3-alpha
v1.7.2-alpha
v1.7.1-alpha
v1.7.0-alpha
v1.3.4
v1.3.3
v1.3.2
v1.2.0-alpha.8
v1.2.0-alpha.7
v1.2.0-alpha.6
v1.2.0-alpha.5
v1.2.0-alpha.4
v1.2.0-alpha.3
v1.2.0-alpha.2
v1.2.0-alpha.1
Labels
No items
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: lfg2025/archy#50
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Source: https://gitea.l484.com/clasko/Meshroller
Ask: integrate this work into our mesh features, including a killer UX for setting it up and using it.
Next steps:
Phase 0 review done. License + meshcore questions resolved by maintainer; remaining gate is the architecture decision.
Reviewed the repo: Meshroller is a single ~29KB Python daemon (
meshroller.py) that bridges a Meshtastic radio (via themeshtasticserial module) to an Ollama LLM (qwen2.5-coder), with trusted-node auth, scheduled/queued messaging, and command parsing on mesh channels. It's a daemon, not firmware or a library.meshtasticPython module can't drive meshcore hardware. So integrating the script as-is won't satisfy that.Decision needed (architecture):
MeshMessageType+listener/dispatch.rs), native to meshcore.Captured in
docs/REMAINING-ISSUES-PLAN.md(#50). Holding implementation until (a)/(b) is chosen.Architecture decision made (2026-06-17): seam (a) — Rust-native lift.
Rather than packaging the Python/Meshtastic daemon and writing a meshcore backend for it, we will lift Meshroller's behaviors — the LLM bridge, trusted-node auth, scheduled/queued messaging, and the on-channel command parser — into our existing Rust mesh stack (
core/archipelago/src/mesh/) as typed message kinds. This is native to meshcore (our radio: Heltec V3), drops the Python + Meshtastic-serial dependency entirely, and reuses theMeshEventpush seam so the UI gets live updates (same path used for #48).Next steps (design in progress):
MeshMessageType+listener/dispatch.rshandler.Verification still needs 2 radios (the .116 meshcore + a second). Issue stays open while the design + implementation land.
Rust-native design written →
docs/meshroller-integration-design.md(verified against the real mesh seams).Mapping (Meshroller behavior → our stack):
MeshMessageTypevariantsAssistQuery/AssistResponse(mesh/message_types.rs); inbound handler inlistener/dispatch.rsmirrors theTxRelayarm (validate → gate → spawn), calls the local Ollama at :11434 overreqwest, replies viasend_typed_wire.federationTrustLevel::Trusted+ContactEntry.blocked; policy = trusted-only (default) / pick-contacts / anyone-on-channel.Textpath, a!ai/!asktrigger on channel 0/1 synthesises anAssistQuery, so any meshcore client can ask.AssistScheduleronMeshServicewith a persisted queue (scheduled.json), a timer task, offline-retry onPeerDiscovered, RPCsmesh.schedule-message/list/cancel.MeshEventvariants flow through the existingevent_txbroadcast; no extra wiring.Airtime discipline (meshcore = ≤160 B frames, scarce bandwidth): cap replies (~480 chars / ≤3 chunks,
!morefor the tail), 1 in-flight query/sender, 60s Ollama timeout.Phase 2 UX: one-screen onboarding (detect/install Ollama → pick model → who-can-ask → trigger word) + a Mesh-tab Assistant card and a composer with Ask the mesh AI / Send later.
Build order (each testable alone): enum+payloads → gated bridge → channel trigger → events → scheduler → UI. Min demoable slice = the first two. Verification needs 2 radios + Ollama on the answering node.
Progress (2026-06-17) — implementation underway on local branch
meshroller-50, NOT yet merged/shipped.Done & compiling (
cargo checkclean), 5 commits:AssistQuery/AssistResponse+ Ollama bridge + trust/airtime gates (cap, chunk, 1 in-flight/asker).!ai/!askchannel trigger — any client (bare meshcore OR Meshtastic) can ask; plain-text answer broadcast back. Generalised reply target (typed-to-peer vs channel-text).MeshRadioDeviceabstraction; the assistant rides it. "Anyone can ask" works on both radios today.ARCHY:2identity broadcast (send each advert tick + inbound parse, deduped by archipelago pubkey, self-echo guarded) so trusted-only authenticates radio askers on BOTH radios.mesh.assistant-status(+ local Ollama detect) /mesh.assistant-configure(live toggle, no restart).Remaining before this can close:
AssistScheduler+ RPCs).Issue stays open.