J.A.R.V.I.S-py/tests
Bossiara13 633850d0f7
Some checks failed
Python CI / pytest (ubuntu-latest) (push) Failing after 5s
Python CI / ruff (push) Failing after 5s
Python CI / pytest (windows-latest) (push) Has been cancelled
feat: Python parity for wol / banter / conversation / ddg_answer + 11 tests
New `wave59_handlers.py` (~250 lines) mirroring four Rust-only packs:

- wol: pure-Python magic packet via socket + SO_BROADCAST. No PowerShell
  shellout (unlike the Rust pack). Reads MAC from memory_store under
  'wol_<alias>' or JARVIS_WOL_TARGET env. Same MAC format tolerance
  (colons / dashes / dots / bare) as the Rust normaliser.

- banter: pause/resume state + fire-one. Python edition doesn't run a
  background banter thread (the Rust daemon already does), so this is
  just the user-facing surface — same voice phrases work.

- conversation: do_conversation_summary calls Groq with last 12 turns
  from main.py's `message_log`. set_history_ref() injects the live list
  reference at startup so the handler reads up-to-date history without
  a circular import. Offline-safe: GROQ_TOKEN missing → speak the last
  user message instead. do_conversation_repeat re-speaks the last
  assistant turn.

- ddg_answer: urllib + DuckDuckGo Instant Answer JSON. Picks
  AbstractText → Answer → Definition → RelatedTopics[0]. Opens
  duckduckgo.com search fallback when nothing instant.

extensions.py / main.py / commands.yaml: 7 new dispatch entries +
proxy fns. commands.yaml now at 207 entries.

tests/test_wave59_handlers.py: 11 unit tests for MAC normalisation,
magic packet shape, WOL error paths, banter state machine, DDG trigger
stripping, conversation history handling. Network calls deliberately
NOT exercised here — they belong to integration tests.

Tests: 104 → 115 (+11).
2026-05-24 23:12:04 +03:00
..
__init__.py feat+test: pytest suite + Now Playing + World Clock + Daily Quote packs (154 commands) 2026-05-16 00:56:02 +03:00
conftest.py feat+test: pytest suite + Now Playing + World Clock + Daily Quote packs (154 commands) 2026-05-16 00:56:02 +03:00
test_expenses_handlers.py feat: expense tracker Python parity (Wave 10) 2026-05-16 15:02:07 +03:00
test_gui_smoke.py feat: Wave 3 — plugin loader + Flet GUI (parity with Rust fork) 2026-05-16 13:27:04 +03:00
test_llm_backend.py feat+test: pytest suite + Now Playing + World Clock + Daily Quote packs (154 commands) 2026-05-16 00:56:02 +03:00
test_macros_store.py feat+test: pytest suite + Now Playing + World Clock + Daily Quote packs (154 commands) 2026-05-16 00:56:02 +03:00
test_memory_store.py feat+test: pytest suite + Now Playing + World Clock + Daily Quote packs (154 commands) 2026-05-16 00:56:02 +03:00
test_outlook_handlers.py feat: Wave 5 Python parity — outlook COM + time tracker 2026-05-16 14:34:44 +03:00
test_personality_handlers.py feat: personality pack — Python parity 2026-05-16 13:53:44 +03:00
test_plugins_store.py feat: Wave 3 — plugin loader + Flet GUI (parity with Rust fork) 2026-05-16 13:27:04 +03:00
test_profiles_store.py feat+test: pytest suite + Now Playing + World Clock + Daily Quote packs (154 commands) 2026-05-16 00:56:02 +03:00
test_scheduler_store.py feat+test: pytest suite + Now Playing + World Clock + Daily Quote packs (154 commands) 2026-05-16 00:56:02 +03:00
test_time_tracker.py feat: Wave 5 Python parity — outlook COM + time tracker 2026-05-16 14:34:44 +03:00
test_wave59_handlers.py feat: Python parity for wol / banter / conversation / ddg_answer + 11 tests 2026-05-24 23:12:04 +03:00
test_wave68_handlers.py feat: Python parity for Wave 6-8 — memory admin / cooking / leftoff / trivia / routines 2026-05-16 14:55:47 +03:00