Phase 6 adds the SikuliX-style multi-pattern helper family to the Go API without changing the underlying runtime architecture.
Added public helpers:
(*Finder).FindAnyList(patterns)(*Finder).FindBestList(patterns)(*Finder).WaitAnyList(patterns, timeout)(*Finder).WaitBestList(patterns, timeout)(*Region).FindAnyList(source, patterns)(*Region).FindBestList(source, patterns)(*Region).WaitAnyList(source, patterns, timeout)(*Region).WaitBestList(source, patterns, timeout)LiveRegion.FindAnyList(patterns)LiveRegion.FindBestList(patterns)LiveRegion.WaitAnyList(patterns, timeout)LiveRegion.WaitBestList(patterns, timeout)Screen.FindAnyList(patterns)Screen.FindBestList(patterns)Screen.WaitAnyList(patterns, timeout)Screen.WaitBestList(patterns, timeout)Match equivalents through the existing region-like match surfaceNo new RPCs were added in this phase.
Image-backed helpers:
FinderLive-screen helpers:
WaitAnyList and WaitBestList, poll by taking one capture per poll cycle, then evaluate all patterns against that captureThis keeps semantics stable and avoids screenshot drift across patterns inside one helper call.
FindAnyList(patterns):
ErrFindFailed if none of the patterns matchMatch.IndexFindBestList(patterns):
ErrFindFailed if none of the patterns matchScoreYXWHWaitAnyList(patterns, timeout):
ErrTimeout if the wait budget is exhaustedWaitBestList(patterns, timeout):
ErrTimeout if the wait budget is exhaustedFor this helper family, Match.Index is the zero-based input pattern index, not the match-occurrence index inside a single-pattern result set.
That aligns the additive Go helper surface with the SikuliX expectation that callers can map the returned match back to the pattern list they supplied.
This phase intentionally implements multi-target helpers as stable API composition in pkg/sikuli, not as a new batch RPC surface.
Implications:
A future performance phase can still add batch RPCs without changing the public helper contract introduced here.