launchSwingIde
suspend fun launchSwingIde(factory: SolverFactory, profileId: SolverProfileId = SolverProfileId("prolog"), profileName: String = "Prolog", featureRenderers: SwingFeatureRendererRegistry = SwingFeatureRendererRegistry(), extensions: List<GuiExtension> = emptyList(), registerProfile: Boolean = true, capabilities: Set<String> = setOf(SolverCapabilities.CANCELLATION), solutionFeatures: (Solution) -> Map<FeatureId, Map<String, FeatureValue>> = { emptyMap() }, templates: List<TheoryTemplate> = PrologTheoryTemplates.ALL, persistence: WorkspacePersistence? = WorkspacePersistence("ide-swing"), theoryFiles: List<File> = emptyList(), defaultTimeout: Duration = 5.seconds, dispatcher: CoroutineDispatcher = Dispatchers.Default, lookAndFeel: String? = null)
This is the application's single top-level entry point: every parameter is an independent, named, defaulted configuration knob (solver profile identity, extension wiring, persistence, timeouts, ...), not a symptom of one function doing too much -- bundling them into a config object would just move the same parameter list one level deeper without reducing complexity, and would break the flat, fully-named call style both real entry points (SwingIdeCommand) and tests rely on.