// Package instance implements the decomposed InstanceManager (Facade Pattern). // // Components: // - Repository: instance lifecycle (Launch, Stop, List, Get) // - Locator: tab discovery + cache (FindInstanceByTabID) // - Allocator: policy application (AllocateInstance) // - TabService: tab operations (CreateTab, CloseTab, ListTabs) // - Router: HTTP proxying (ProxyTabRequest) // - Manager: facade composing all 5 components package instance import "github.com/pinchtab/pinchtab/internal/bridge" // TabEntry represents a tab in a bridge's registry. type TabEntry struct { ID string `json:"id"` URL string `json:"url"` } // InstanceLauncher abstracts the process of launching and stopping browser instances. // The Orchestrator implements this — the instance package delegates to it // for process management while owning the higher-level abstractions. type InstanceLauncher interface { Launch(name, port string, headless bool) (*bridge.Instance, error) Stop(id string) error } // TabFetcher abstracts fetching tabs from a bridge instance via HTTP. type TabFetcher interface { FetchTabs(instanceURL string) ([]bridge.InstanceTab, error) }