Skip to content

[Quit Applications] Wispr Flow remains running after success toast #29648

Description

@TyceHerrman

Extension

https://www.raycast.com/mackopes/quit-applications

Raycast Version

Raycast Beta 0.69.0.0

OS Version

macOS 27.0 (26A5388g)

Description

Quitting Wispr Flow through Quit Applications shows a success toast and removes the app from the list, but Wispr Flow's main process remains running. Quitting the same app through Cmd-Q or its own menu works.

Wispr Flow version: 1.6.182.

Steps To Reproduce

  1. Launch /Applications/Wispr Flow.app.
  2. Run the Quit Applications extension.
  3. Select Wispr Flow and press Enter.
  4. Observe the success toast and disappearing list entry.
  5. Observe that Wispr Flow remains running.

Current Behaviour

  • The extension reports success without terminating com.electron.wispr-flow.
  • During a failed extension attempt, Wispr Flow's main log does not enter its before-quit path.
  • A direct Cmd-Q quit enters that path and exits cleanly (about 1.6 seconds in the observed run).
  • No Apple Events authorization-denial error was present in the Raycast logs around the failure.

Expected Behaviour

The selected main application terminates. The extension should only show success and remove the entry after confirming termination.

Investigation

Current code discovers each running application using its exact bundle path and keys list entries by that path, but the Quit action then passes only app.name:

const success = await quitAppWithToast(app.name);

quitApp consequently targets AppleScript by display name:

tell application "${app}" to quit

Wispr Flow installs two application bundles whose display name is Wispr Flow:

  • Main app: /Applications/Wispr Flow.app (com.electron.wispr-flow)
  • Nested accessibility helper: Wispr Flow.app/Contents/Resources/swift-helper-app-dist/Wispr Flow.app (com.electron.wispr-flow.accessibility-mac-app, LSUIElement = true)

The nested helper is filtered from discovery, but quitting later re-resolves the shared display name through AppleScript. That loses the exact identity already available as app.path and can fail to reach the selected main bundle.

The AppleScript also catches non-cancellation errors internally. runAppleScript can therefore resolve, and the extension can show success, without verifying that the selected process exited.

Current source:
https://github.com/raycast/extensions/blob/main/extensions/quit-applications/src/index.tsx

Related work:

Suggested Fix

  • Pass app.path to the quit/restart functions and target the exact bundle path or identifier.
  • Verify that the selected application process terminated before showing success or removing its row.
  • Propagate non-cancellation AppleScript errors instead of catching them and returning successful completion.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Severity

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions