Skip to main content
Glama
open-launch-tests.md2.95 kB
--- summary: 'WIP notes for open/app launcher abstraction and test plan' read_when: - 'resuming the open-command test/abstraction refactor' - 'continuing work on app launch --open behavior tests' --- # Open command + app launch test refactor (WIP) _Status: Archived · Focus: harmonizing open/app launch behavior and tests._ ## Current state (Nov 14, 2025) - Added pure resolution tests (`OpenCommandResolutionTests`, `AppCommandLaunchOpenTargetTests`) covering URL/path parsing. - Introduced launcher/resolver abstractions (`ApplicationLaunching`, `RunningApplicationHandle`, `ApplicationURLResolving`) and updated both `OpenCommand` + `AppCommand.LaunchSubcommand` to depend on them. - Added flow tests (`OpenCommandFlowTests`, `AppCommandLaunchFlowTests`) using stub launchers/resolvers to verify command wiring. - Still missing: - **CLI help/doc polish:** Update `help open`, `help app launch`, and CLI docs once behavior is locked. - **Full CLI docs/examples:** ensure README/tutorials demonstrate `peekaboo open` + `app launch --open`. - **In-Process CLI tests:** Previous attempt to drive the full CLI via `executePeekabooCLI` hung because it always instantiates real `PeekabooServices()` (which in turn waits on UI automation entitlements). Need either a way to inject stub services into `CommandRuntime.makeDefault` or a lighter-weight CLI harness before we can add true end-to-end tests. ## Proposed approach 1. **Introduce abstractions** - Create `ApplicationLaunching` protocol + default `NSWorkspace` implementation (probably in `Commands/System/ApplicationLaunching.swift`). - Provide a `RunningApplicationHandle` protocol so tests can stub `isFinishedLaunching`, `activate`, etc. - Add `ApplicationURLResolving` for name/bundle resolution; default implementation wraps existing logic. - Wire `OpenCommand` and `AppCommand.LaunchSubcommand` to reference `ApplicationLaunchEnvironment.launcher`/`resolver` so tests can swap them. 2. **Tests** - New test suites in `CoreCLITests` that inject fake launchers/resolvers and assert: - Flags/JSON output path. - Activation + wait semantics (simulate `isFinishedLaunching` toggles). - Extend CLI runtime tests (or add a new `LaunchCommandFlowTests`) that run through `InProcessCommandRunner` using the stubs, ensuring no AppKit calls are made. 3. **Docs/help** - Update CLI help strings after the feature stabilizes (app launch discussion block + `open` subcommand doc block). ## Next steps when resuming 1. Update CLI help text (`help open`, `help app launch`) and command reference docs with examples for `peekaboo open` and repeated `--open`. 2. Refresh higher-level docs/README snippets so users see the new behavior outside the reference file. 3. Investigate adding a test-only hook to `CommandRuntime.withInjectedServices`/`CommanderRuntimeExecutor` so we can run `executePeekabooCLI` with stub services (or document why it’s unsafe).

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/steipete/Peekaboo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server