Package-level declarations

Types

Link copied to clipboard
data class EndpointExecutionPolicy(val timeoutMs: Long? = null, val maxPayloadBytes: Long? = null, val allowChunkedTransfer: Boolean = false)
Link copied to clipboard
data class JvmCommunicationStrategy(val preferredMode: JvmCommunicationMode = JvmCommunicationMode.UDS, val fallbackMode: JvmCommunicationMode = JvmCommunicationMode.TCP, val maxAttempts: Int = 3)
Link copied to clipboard
interface KeelPlugin
Link copied to clipboard
class PluginApiException(val status: Int, val message: String) : RuntimeException
Link copied to clipboard
Link copied to clipboard
data class PluginConfig(val pluginId: String, val enabled: Boolean = true, val runtimeMode: PluginRuntimeMode = PluginRuntimeMode.IN_PROCESS, val communicationStrategy: JvmCommunicationStrategy = JvmCommunicationStrategy.DEFAULT, val recoveryPolicy: PluginRecoveryPolicy = PluginRecoveryPolicy(), val startupTimeoutMs: Long = 5000, val callTimeoutMs: Long = 3000, val stopTimeoutMs: Long = 3000, val healthCheckIntervalMs: Long = 10000, val maxConcurrentCalls: Int = 128, val eventLogRingBufferSize: Int = 4096, val criticalEventQueueSize: Int = 256, val reload: ReloadConfig = ReloadConfig(), val settings: JsonObject = buildJsonObject {})

Runtime configuration for a plugin instance, derived from its PluginDescriptor. This is no longer loaded from JSON files to ensure "Config-as-Code".

Link copied to clipboard
data class PluginDescriptor(val pluginId: String, val version: String, val displayName: String, val defaultRuntimeMode: PluginRuntimeMode = PluginRuntimeMode.IN_PROCESS, val communicationStrategy: JvmCommunicationStrategy = JvmCommunicationStrategy.DEFAULT, val supportedRuntimeModes: Set<PluginRuntimeMode> = setOf( PluginRuntimeMode.IN_PROCESS, PluginRuntimeMode.EXTERNAL_JVM ), val supportedServices: Set<PluginServiceType> = setOf( PluginServiceType.ENDPOINT, PluginServiceType.SSE, PluginServiceType.STATIC_RESOURCE ), val recoveryPolicy: PluginRecoveryPolicy = PluginRecoveryPolicy(), val startupTimeoutMs: Long = 5000, val callTimeoutMs: Long = 3000, val stopTimeoutMs: Long = 3000, val healthCheckIntervalMs: Long = 10000, val maxConcurrentCalls: Int = 128, val eventLogRingBufferSize: Int = 4096, val criticalEventQueueSize: Int = 256)
Link copied to clipboard
Link copied to clipboard
data class PluginEndpointDefinition<Req : Any, Res : Any>(val endpointId: String, val method: HttpMethod, val path: String, val requestType: KType?, val responseType: KType, val doc: OpenApiDoc = OpenApiDoc(), val executionPolicy: EndpointExecutionPolicy = EndpointExecutionPolicy(), val handler: suspend PluginRequestContext.(Req?) -> PluginResult<Res>) : PluginRouteDefinition
Link copied to clipboard
Link copied to clipboard
data class PluginFailureRecord(val timestamp: Long, val source: String, val message: String)
Link copied to clipboard
value class PluginGeneration(val value: Long)
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
data class PluginRecoveryPolicy(val maxRestarts: Int = 5, val baseBackoffMs: Long = 250, val maxBackoffMs: Long = 5000, val resetWindowMs: Long = 60000)
Link copied to clipboard
Link copied to clipboard
data class PluginResult<T>(val status: Int = 200, val headers: Map<String, List<String>> = emptyMap(), val body: T? = null)
Link copied to clipboard
sealed interface PluginRouteDefinition
Link copied to clipboard
Link copied to clipboard
data class PluginRuntimeDiagnostics(val processAlive: Boolean? = null, val adminChannelHealth: PluginChannelHealth = PluginChannelHealth.UNKNOWN, val eventChannelHealth: PluginChannelHealth = PluginChannelHealth.UNKNOWN, val activeCommunicationMode: JvmCommunicationMode? = null, val fallbackActivated: Boolean = false, val lastFallbackReason: String? = null, val droppedLogCount: Long = 0, val eventQueueDepth: Int = 0, val eventOverflowed: Boolean = false, val lastHealthLatencyMs: Long? = null, val lastAdminLatencyMs: Long? = null, val lastEventAtEpochMs: Long? = null, val inflightInvocations: Int = 0)
Link copied to clipboard
Link copied to clipboard
data class PluginRuntimeSnapshot(val pluginId: String, val displayName: String, val version: String, val runtimeMode: PluginRuntimeMode, val lifecycleState: PluginLifecycleState, val healthState: PluginHealthState, val generation: PluginGeneration, val processState: PluginProcessState?, val processId: Long?, val processHandleAlive: Boolean? = null, val diagnostics: PluginRuntimeDiagnostics, val lastFailure: PluginFailureRecord? = null)
Link copied to clipboard
Link copied to clipboard
data class PluginSseDefinition(val path: String, val doc: OpenApiDoc = OpenApiDoc(), val handler: suspend PluginSseSession.() -> Unit) : PluginRouteDefinition
Link copied to clipboard
Link copied to clipboard
data class PluginStaticResourceDefinition(val path: String, val basePackage: String, val doc: OpenApiDoc = OpenApiDoc(), val index: String? = null) : PluginRouteDefinition
Link copied to clipboard
Link copied to clipboard
data class ReloadConfig(val watchEnabled: Boolean = false, val debounceMs: Long = 500, val replaceOnArtifactChange: Boolean = true, val reloadOnConfigChange: Boolean = true)
Link copied to clipboard
class UnifiedPluginManager(kernelKoin: Koin, runtimeRoot: File = File("/tmp/keel"), currentClasspath: String = System.getProperty("java.class.path"), observabilityHub: ObservabilityHub? = null) : PluginAvailability

Functions

Link copied to clipboard
fun buildEndpointId(pluginId: String, method: HttpMethod, path: String): String
Link copied to clipboard