v1.14.1
Fixes
-
Retries no longer deepen OmniFocus AppleEvent wedges (#121). When OmniFocus stopped responding, a read would replay its full query up to three times — 500ms and 1500ms apart — into an app that had already failed to answer for 60 seconds. A process sample of a wedged app showed the cost: eight permanently blocked AppleEvent dispatch queues, one for every osascript the server killed. Nothing on the client side can release them, so each retry made recovery strictly harder.
The server now distinguishes the two failure signals it had been treating as one: a
-1712means OmniFocus answered and is merely contended (still retried, with longer 2s/6s backoffs), while a timeout kill means it never answered at all (never retried). When the app is unresponsive, a circuit breaker fails fast with a clearOmniFocus is not respondingerror instead of dispatching more work, and a single cheap liveness probe after a 30-second cooldown decides when to resume.If you do hit an unresponsive app, the error now names the recovery that actually works: quit every omnifocus-mcp process, then restart OmniFocus — in that order, because a client still mid-query will re-wedge a freshly launched app.
New environment variables:
OMNIFOCUS_MCP_UNRESPONSIVE_COOLDOWN_MS(default 30000) andOMNIFOCUS_MCP_PROBE_TIMEOUT_MS(default 5000).
Full Changelog: v1.14.0...v1.14.1