Phase 8 expands app/window parity without changing the current app-backend architecture in sikuli-go.
packages/api/pkg/sikuli/app.go now exposes a richer record and deterministic query helpers:
AppController.ListWindows(name, opts)AppController.FindWindows(name, query, opts)AppController.GetWindow(name, query, opts)AppController.FocusedWindow(name, opts)The returned Window record now includes:
IDAppPIDTitleBoundsFocusedThis keeps Window as a returned value type with helper-driven selection. It does not introduce a separate Java-style mutable window object hierarchy.
WindowQuery supports:
Selection rules are deterministic:
FindWindows filters that list without reordering itGetWindow applies Index to the filtered listFocusedWindow is shorthand for the focused-only queryThis gives ports a stable way to express SikuliX-style window(), focusedWindow(), and allWindows() flows without changing the app backend model.
The gRPC API now exposes:
ListWindowsFindWindowsGetWindowGetFocusedWindowThe RPC layer delegates to the same AppController query logic used by the Go package surface. There is no parallel window-selection implementation in the transport layer.
Window metadata is richer, but still platform-dependent.
Linux uses wmctrl -lxG plus _NET_ACTIVE_WINDOW probing.
Available where the desktop environment supports those tools:
Limitations:
macOS uses System Events / AppleScript window enumeration.
Available where accessibility permissions allow it:
Limitations:
Windows uses PowerShell with Win32 window probing.
Available where a main window handle exists:
Limitations:
Common SikuliX app/window workflows now have first-class API support in the Go port:
The remaining differences are about platform portability of metadata, not about missing API concepts.