AbstractRunner
constructor(appName: String, agent: BaseAgent, sessionService: SessionService, artifactService: ArtifactService?, memoryService: MemoryService?, pluginManager: PluginManager, resumabilityConfig: ResumabilityConfig = ResumabilityConfig())
Creates a runner from explicit fields, not using an App.
constructor(app: App, sessionService: SessionService, artifactService: ArtifactService?, memoryService: MemoryService?, skipClosingPlugins: Boolean = false)
Creates a runner from an App, deriving its App.appName, App.rootAgent, App.plugins, and App.resumabilityConfig.
This is the recommended way to configure plugins and resumability: the App is the single source of truth. The field-based primary constructor still accepts a pluginManager and resumabilityConfig for backward compatibility.
The compaction config is resolved at construction (failing fast if a default summarizer is required but the root agent is not an LlmAgent) and stored back on the app, so App.eventsCompactionConfig returns the effective config.