meshai/work/requirements.txt

18 lines
268 B
Text
Raw Normal View History

meshtastic>=2.3.0
feat(transport): MeshCoreTransport over pyMC companion TCP (Phase 2) (#4) * feat(transport): MeshCoreTransport over pyMC companion TCP (Phase 2) Implements MeshCoreTransport (MeshTransport impl) using the meshcore lib over TCP to a pyMC companion frame server, bridged behind the sync interface via a dedicated event-loop thread. Outbound channel/DM sends, inbound message normalization into MeshMessage(transport="meshcore"), contact/self lookups. Factory wires transport="meshcore"; supervisor is now transport-aware (Meshtastic watchdog guarded). Dormant unless configured; meshtastic path unchanged; full suite matches baseline. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(transport): sync loop-thread readiness before dispatch (MeshCore) Wait on a threading.Event set from inside the event loop (via call_soon) before dispatching the first coroutine in connect(), eliminating a startup race where run_coroutine_threadsafe could be rejected by an is_running() pre-check before run_forever() had begun spinning. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(transport): MeshCore broadcasts use configured channel index The channel arg carries Meshtastic-index semantics that don't map to MeshCore's channel table; broadcasts now always use the configured meshcore_channel_index (also fixes explicit channel=0 being treated as falsy). DM path unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Matt Johnson <mj@k7zvx.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 10:15:39 -06:00
meshcore>=2.3.7
pyyaml>=6.0
aiosqlite>=0.19.0
openai>=1.0.0
anthropic>=0.18.0
google-genai>=1.0.0
rich>=13.0.0
httpx>=0.25.0
fastembed>=0.3.0
sqlite-vec>=0.1.0
numpy
h3>=4.0
fastapi>=0.110.0
uvicorn[standard]>=0.27.0
aiomqtt>=2.0.0
sgp4>=2.22
refactor(phase0): source-agnostic formatter/gating scaffold + harness (inert) (#28) Foundation for making all hazard formatting+gating source-agnostic. ZERO behavior change — the formatter/decider registries are empty (get_formatter/ get_decider return None → existing precomposed/Mode-B path preserved), and the shadow comparator is off unless MESHAI_SHADOW_CATEGORIES is set. - notifications/formatters/ (registry+dispatch with family fallback), gating/ (GateResult + deferred-commit contract), both empty registries. - notifications/clock.py determinism seam; route wfigs/quake/nws gating time reads through it (identical values) so goldens can freeze time. - formatters/_budget.py = copy of central/budget.py; central/budget.py is now a re-export shim (import-smoke test guards it). - compose_mesh_message consults the registry first (verbatim, no Mode-B re-cap), falls back to legacy; _resolve_budget injects per-category budget. - notifications/shadow.py + two DRY-RUN hooks (consumer._normalize, dispatcher render): compute the new result and diff-log SHADOW_MISMATCH JSONL, but NEVER commit/emit/write tables and always broadcast the OLD result. Inert by default. - tests/harness (pinned_time/pinned_tz, byte-golden, gate-sequence) + scripts/capture_fixtures.py (ephemeral read-only NATS capture); tzdata pinned. Tests: +60 (18 scaffold + 42 harness/shadow); 0 new failures (34 baseline). Co-authored-by: Matt Johnson <mj@k7zvx.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-04 12:55:48 -06:00
tzdata