feat(mcp): enhance multi-platform notification resilience and reactive wakeups
- AgentApiNotifier: Sort candidate process sessions by creation time descending to prioritize the latest active IDE session over stale PIDs. Implement automatic retry across candidate address/token pairs and persist working credentials to shared environment files (~/.gemini/jetski/.jetski_env and ~/.artemis/.artemis_env). - DesktopNotifier: Enable native OS desktop toast notifications by default on macOS, Linux, and Windows unless explicitly disabled or running in CI. Ensure MCP installer sets ARTEMIS_DESKTOP_NOTIFY=true in generated IDE configurations. - ScriptNotifier: Add universal command hook adapter (ARTEMIS_NOTIFY_CMD / MCP_NOTIFY_COMMAND) for custom IDE and CLI integration. - Fault Isolation: Wrap CompositeNotifier and global notify entrypoint in strict try-except blocks to guarantee zero-crash execution even if any individual notifier fails. - Tests & Docs: Add unit tests for session recovery, fault tolerance, script hook execution, and document multi-platform notification architecture in README.
This commit is contained in:
1 parent
4927c4f0b9
commit
c1a4b49a21
9 files changed
+468
-110
No files matched your search
@@ -27,14 +27,26 @@ logger = logging.getLogger("mcp_server.notifiers.desktop")
|
||||
|
||||
|
||||
class DesktopNotifier(BaseNotifier):
|
||||
"""Notifier that displays native desktop notifications when explicitly enabled."""
|
||||
"""Notifier that displays native desktop notifications across macOS, Linux, and Windows."""
|
||||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
return "desktop"
|
||||
|
||||
def is_available(self) -> bool:
|
||||
return os.getenv("ARTEMIS_DESKTOP_NOTIFY", "").lower() in ("1", "true", "yes")
|
||||
try:
|
||||
val = os.getenv("ARTEMIS_DESKTOP_NOTIFY", "").lower()
|
||||
if val in ("0", "false", "no", "off"):
|
||||
return False
|
||||
if os.getenv("CI", "").lower() in ("1", "true", "yes") and val not in ("1", "true", "yes"):
|
||||
return False
|
||||
if sys.platform == "linux" and not shutil.which("notify-send"):
|
||||
return False
|
||||
if sys.platform == "darwin" and not shutil.which("osascript"):
|
||||
return False
|
||||
return True
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def notify(
|
||||
self,
|
||||
|
||||
Reference in new issue
Block a user