Skip to content

v1.14.1

Choose a tag to compare

@themotionmachine themotionmachine released this 19 Aug 14:53
· 2 commits to main since this release

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 -1712 means 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 clear OmniFocus is not responding error 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) and OMNIFOCUS_MCP_PROBE_TIMEOUT_MS (default 5000).

Full Changelog: v1.14.0...v1.14.1