9 Commits

Author SHA1 Message Date
bc2e086f2f feat(daemon): add daemon mode with C&C and display abstraction
- Add display abstraction with swappable backends (TerminalDisplay, NullDisplay)
- Separate C&C into RX/TX topics for serial-like communication
- Add StreamController with automatic ntfy topic warmup
- Add performance monitoring for render + display stages
- Update AGENTS.md and README.md with daemon/cmd operating procedures
- Add clean/clobber tasks to mise.toml
- Add tests for display, effects controller, and controller warmup
- Fix bug where /effects reorder command was unreachable
2026-03-15 18:37:36 -07:00
40ad935dda feat(cmdline): improve rich output and add mise tasks
- Add box-drawing characters for nicer header
- Add response formatting with success/error indicators
- Add mise tasks: cmd (interactive) and cmd-stats (monitoring)
2026-03-15 17:49:15 -07:00
648326cd37 feat(cmdline): use C&C topic with response polling
- Rewrite cmdline to send commands via ntfy and wait for response
- Add NtfyResponsePoller class for serial-port-like interface
- Add integration tests for ntfy topics (test read/write)
- Add NTFY_CC_TOPIC export to config
2026-03-15 17:46:40 -07:00
3324adb07a feat(ntfy): separate C&C topic from message ingestion
- Add ntfy_cc_topic config for command and control
- Add separate NtfyPoller for C&C in StreamController
- Implement serial-port-like interface: commands are executed and responses are sent back to the same topic
- Update cmdline.py to use C&C topic
2026-03-15 17:40:20 -07:00
2f1b2591c6 fix(cmdline): make cmdline work without PIL dependency
- Refactor controller to not require importing engine.layers (which imports PIL)
- Add set_effect_chain_ref for external chain registration
- Fix cmdline to use new ref mechanism
2026-03-15 17:35:00 -07:00
b86434ac03 feat(cmdline): add command-line interface for mainline control
Add cmdline.py utility for interacting with mainline:
- Interactive TUI mode (default when no args)
- Local command mode (--local) for testing without ntfy
- Send commands via ntfy (default)
- Watch mode (-w) for continuous stats polling

Usage:
  python cmdline.py                    # Interactive mode
  python cmdline.py --local /effects list
  python cmdline.py /effects stats     # Send via ntfy
  python cmdline.py -w /effects stats  # Watch mode
2026-03-15 17:31:13 -07:00
8a2c02fef1 test(effects): add performance benchmark tests
- Add TestEffectPipelinePerformance test class
- test_pipeline_stays_within_frame_budget: verifies pipeline completes within 33ms (30fps)
- test_individual_effects_performance: verifies individual effects don't exceed 10ms
2026-03-15 17:25:40 -07:00
f5a086154a feat(effects): add performance monitoring to effect pipeline
- Add PerformanceMonitor to collect per-effect timings
- Track effect duration (ms), buffer chars in/out per frame
- Store last 60 frames in ring buffer
- Add /effects stats NTFY command to view performance data
- Add tests for performance monitoring system
2026-03-15 17:24:38 -07:00
291e96d11e feat(effects): add plugin architecture for visual effects
- Extract effects as fully decoupled plugins in engine/effects/
- Add EffectConfig, EffectContext dataclasses and EffectPlugin protocol
- Add EffectRegistry for plugin discovery and management
- Add EffectChain for ordered pipeline execution
- Move built-in effects to effects_plugins/ directory
- Add interactive effects config picker during startup
- Add NTFY command handler for /effects commands
- Add tests for effects system (24 new tests)
- Update AGENTS.md with effects plugin documentation
- Add conventional commits section to AGENTS.md

chore: add coverage.xml to .gitignore
2026-03-15 17:16:49 -07:00

Diff Content Not Available