chore: archive mac mini automation baseline

This commit is contained in:
Adolfo Reyna
2026-08-03 11:47:09 -04:00
parent a0a26565f0
commit 6e2117188e
93 changed files with 10005 additions and 5 deletions
+46
View File
@@ -19,6 +19,7 @@ from reyna_cli.email_local import ThunderbirdEmailClient, email_tool_specs
from reyna_cli.immich import ImmichClient
from reyna_cli.mcp import MCPClient
from reyna_cli.mongo_direct import MongoDirectClient
from reyna_cli.remarkable import LISTENER_LABEL, listen_forever, listener_service_action, listener_service_status, sync_once
from reyna_cli.tts import TTSError, synthesize_wav
from reyna_cli.utils import infer_capabilities, resolve_tool_name
from reyna_cli.zoom_direct import ZoomClient
@@ -39,6 +40,7 @@ zoom_app = typer.Typer(help="Zoom direct REST API commands.")
email_app = typer.Typer(help="Read-only local Thunderbird email commands.")
deco_app = typer.Typer(help="TP-Link Deco direct router commands.")
macmini_app = typer.Typer(help="Mac mini MCP tools (Calendar, Contacts, Notes, Reminders, Deco).")
remarkable_app = typer.Typer(help="Paper Pro discovery, local cache, and macOS listener service.")
macmini_calendar_app = typer.Typer(help="Mac mini Calendar tools.")
macmini_contacts_app = typer.Typer(help="Mac mini Contacts tools.")
macmini_notes_app = typer.Typer(help="Mac mini Notes tools.")
@@ -69,6 +71,7 @@ macmini_app.add_typer(macmini_notes_app, name="notes")
macmini_app.add_typer(macmini_reminders_app, name="reminders")
macmini_app.add_typer(macmini_deco_app, name="deco")
app.add_typer(macmini_app, name="macmini")
app.add_typer(remarkable_app, name="remarkable")
def scrub_sensitive(value: Any) -> Any:
@@ -692,6 +695,49 @@ def computer_service_logs(lines: int = typer.Option(80, "--lines")):
subprocess.run(["journalctl", "--user", "-u", SERVICE_NAME, "-n", str(lines), "--no-pager"], check=False)
@remarkable_app.command("listen")
def remarkable_listen():
"""Run the UDP receiver in the foreground (used by the LaunchAgent)."""
listen_forever()
@remarkable_app.command("sync")
def remarkable_sync(json_output: bool = typer.Option(False, "--json")):
"""Snapshot tracked notes and cache only fresh Paper Pro page versions."""
result = sync_once()
emit({"ok": bool(result.get("online")), "result": result}, json_output)
@remarkable_app.command("service-install")
def remarkable_service_install(json_output: bool = typer.Option(False, "--json")):
"""Install and start the macOS UDP-listener LaunchAgent."""
result = listener_service_action("install")
emit(result, json_output)
if not result.get("ok"):
raise typer.Exit(1)
@remarkable_app.command("service-status")
def remarkable_service_status(json_output: bool = typer.Option(False, "--json")):
emit({"ok": True, "service": LISTENER_LABEL, "status": listener_service_status()}, json_output)
@remarkable_app.command("service-start")
def remarkable_service_start(json_output: bool = typer.Option(False, "--json")):
result = listener_service_action("start")
emit(result, json_output)
if not result.get("ok"):
raise typer.Exit(1)
@remarkable_app.command("service-stop")
def remarkable_service_stop(json_output: bool = typer.Option(False, "--json")):
result = listener_service_action("stop")
emit(result, json_output)
if not result.get("ok"):
raise typer.Exit(1)
@iphone_app.command("tools")
def iphone_tools(json_output: bool = typer.Option(False, "--json"), live_only: bool = False, cache_only: bool = False, refresh: bool = False):
wrapper_tools("iphone_mcp", json_output, live_only, cache_only, refresh)