// Package pluginapi defines host-side plugin capability schemas and adapters.package pluginapi import ( "context" "net/http" "net/url" "time") // Plugin is the host-side representation produced from a dynamic plugin registration.type Plugin struct { // Metadata identifies the plugin binary and its published source. Metadata Metadata // Capabilities declares the optional integration points implemented by the plugin. Capabilities Capabilities} // Metadata describes a plugin for registry, logging, and diagnostics.type Metadata struct { // Name is the stable human-readable plugin name. Name string // Version is the plugin release version. Version string // Author identifies the plugin author or organization. Author string // GitHubRepository is the repository URL for plugin source and support. GitHubRepository string // Logo is a plugin-provided display asset reference for management clients. Logo string // ConfigFields describes plugin-owned configuration fields for management clients. ConfigFields []ConfigField} // ConfigFieldType classifies plugin-owned configuration values for management clients.type ConfigFieldType string const ( // ConfigFieldTypeString describes a string configuration value. ConfigFieldTypeString ConfigFieldType = "string" // ConfigFieldTypeNumber describes a numeric configuration value. ConfigFieldTypeNumber ConfigFieldType = "number" // ConfigFieldTypeInteger describes an integer configuration value. ConfigFieldTypeInteger ConfigFieldType = "integer" // ConfigFieldTypeBoolean describes a boolean configuration value. ConfigFieldTypeBoolean ConfigFieldType = "boolean" // ConfigFieldTypeEnum describes a string value constrained to EnumValues. ConfigFieldTypeEnum ConfigFieldType = "enum" // ConfigFieldTypeArray describes an array configuration value. ConfigFieldTypeArray ConfigFieldType = "array" // ConfigFieldTypeObject describes an object configuration value. ConfigFieldTypeObject ConfigFieldType = "object") // ConfigField describes a plugin-owned configuration field for management clients.type ConfigField struct { // Name is the configuration key under plugins.configs.<pluginID>. Name string // Type classifies the field value for management clients. Type ConfigFieldType // EnumValues lists allowed values when Type is ConfigFieldTypeEnum. EnumValues []string // Description explains how the plugin uses the field. Description string} // Capabilities groups the optional host integration interfaces exposed by a plugin.type Capabilities struct { // ModelRegistrar contributes development-time model metadata to the host registry. ModelRegistrar ModelRegistrar // ModelProvider contributes provider-native static and per-auth model metadata. ModelProvider ModelProvider // AuthProvider lets the host parse, login, poll, and refresh plugin provider auths. AuthProvider AuthProvider // FrontendAuthProvider authenticates frontend requests before proxy handling. FrontendAuthProvider FrontendAuthProvider // Executor sends requests to an upstream provider or local backend. Executor ProviderExecutor // ExecutorModelScope declares whether Executor serves static models, OAuth auth models, or both. // Empty defaults to ExecutorModelScopeBoth for backward compatibility. ExecutorModelScope ExecutorModelScope // ExecutorInputFormats lists request protocols accepted directly by Executor. Executors must declare at least one. ExecutorInputFormats []string // ExecutorOutputFormats lists response protocols emitted directly by Executor. Executors must declare at least one. ExecutorOutputFormats []string // RequestTranslator converts canonical requests into provider-specific payloads. RequestTranslator RequestTranslator // RequestNormalizer converts provider-specific requests into canonical payloads. RequestNormalizer RequestNormalizer // ResponseTranslator converts canonical responses into provider-specific payloads. ResponseTranslator ResponseTranslator // ResponseBeforeTranslator normalizes upstream responses before native translation. ResponseBeforeTranslator ResponseNormalizer // ResponseAfterTranslator normalizes translated responses before delivery. ResponseAfterTranslator ResponseNormalizer // ThinkingApplier applies validated thinking configuration to provider payloads. ThinkingApplier ThinkingApplier // UsagePlugin receives completed usage records. UsagePlugin UsagePlugin // CommandLinePlugin declares and handles plugin-owned command-line flags. CommandLinePlugin CommandLinePlugin // ManagementAPI declares plugin-owned diagnostic Management API routes. ManagementAPI ManagementAPI} // ExecutorModelScope declares which model-registration paths a plugin executor supports.type ExecutorModelScope string const ( // ExecutorModelScopeBoth means the executor supports static and OAuth auth-bound models. ExecutorModelScopeBoth ExecutorModelScope = "both" // ExecutorModelScopeStatic means the executor supports only non-OAuth static models. ExecutorModelScopeStatic ExecutorModelScope = "static" // ExecutorModelScopeOAuth means the executor supports only OAuth auth-bound models. ExecutorModelScopeOAuth ExecutorModelScope = "oauth") // ModelInfo describes a model contributed by a plugin.type ModelInfo struct { // ID is the stable model identifier used in API requests. ID string // Object is the API object type, usually "model". Object string // Created is the Unix timestamp when the model metadata was created. Created int64 // OwnedBy identifies the model owner or provider. OwnedBy string // Type classifies the model capability family. Type string // DisplayName is the user-facing model name. DisplayName string // Name is the provider-native model name. Name string // Version identifies the model revision when available. Version string // Description is a short user-facing model summary. Description string // InputTokenLimit is the maximum accepted input token count. InputTokenLimit int64 // OutputTokenLimit is the maximum generated output token count. OutputTokenLimit int64 // SupportedGenerationMethods lists supported generation method names. SupportedGenerationMethods []string // ContextLength is the maximum combined context length. ContextLength int64 // MaxCompletionTokens is the maximum completion token count. MaxCompletionTokens int64 // SupportedParameters lists request parameters supported by the model. SupportedParameters []string // SupportedInputModalities lists accepted input modality names. SupportedInputModalities []string // SupportedOutputModalities lists produced output modality names. SupportedOutputModalities []string // Thinking describes optional reasoning controls for the model. Thinking *ThinkingSupport // UserDefined reports whether the model was provided by user configuration. UserDefined bool} // ThinkingSupport describes supported reasoning budget controls.type ThinkingSupport struct { // Min is the minimum accepted reasoning budget. Min int // Max is the maximum accepted reasoning budget. Max int // ZeroAllowed reports whether disabling reasoning is supported. ZeroAllowed bool // DynamicAllowed reports whether automatic reasoning budget selection is supported. DynamicAllowed bool // Levels lists supported named reasoning levels. Levels []string} // HostConfigSummary describes host configuration relevant to plugin providers.type HostConfigSummary struct { // AuthDir is the resolved directory containing provider auth material. AuthDir string // ProxyURL is the configured upstream proxy URL. ProxyURL string // ForceModelPrefix reports whether model aliases should keep provider prefixes. ForceModelPrefix bool // OAuthModelAlias maps providers to configured model aliases. OAuthModelAlias map[string][]ModelAlias // ExcludedModels maps providers to model names hidden by host configuration. ExcludedModels map[string][]string} // ModelAlias describes one configured provider model alias.type ModelAlias struct { // Name is the provider model name. Name string // Alias is the host-facing model alias. Alias string} // AuthData describes a plugin provider auth record exchanged with the host.type AuthData struct { // Provider is the provider key associated with the auth. Provider string // ID is the stable host auth identifier. ID string // FileName is the source or persisted auth file name. FileName string // Label is the user-facing auth label. Label string // Prefix is the configured model prefix for this auth. Prefix string // ProxyURL is the auth-specific proxy URL when configured. ProxyURL string // Disabled reports whether the auth should be skipped. Disabled bool // StorageJSON contains provider-owned persisted auth data. StorageJSON []byte // Metadata contains mutable host-managed auth metadata. Metadata map[string]any // Attributes contains immutable routing and provider attributes. Attributes map[string]string // NextRefreshAfter is the earliest time the host should refresh this auth. NextRefreshAfter time.Time} // AuthParseRequest describes auth material offered to a plugin parser.type AuthParseRequest struct { // Provider is the provider key being parsed. Provider string // Path is the source path of the auth material when available. Path string // FileName is the auth file name. FileName string // RawJSON contains the raw auth file payload. RawJSON []byte // Host contains relevant host configuration. Host HostConfigSummary} // AuthParseResponse returns the parser decision and parsed auth data.type AuthParseResponse struct { // Handled reports whether the plugin recognized the auth material. Handled bool // Auth is the parsed auth record when Handled is true. Auth AuthData} // AuthProvider parses, logs in, polls, and refreshes plugin provider auths.type AuthProvider interface { Identifier() string ParseAuth(context.Context, AuthParseRequest) (AuthParseResponse, error) StartLogin(context.Context, AuthLoginStartRequest) (AuthLoginStartResponse, error) PollLogin(context.Context, AuthLoginPollRequest) (AuthLoginPollResponse, error) RefreshAuth(context.Context, AuthRefreshRequest) (AuthRefreshResponse, error)} // AuthLoginStartRequest asks a plugin to start a provider login flow.type AuthLoginStartRequest struct { // Provider is the provider key for the login flow. Provider string // BaseURL is the host callback or login base URL. BaseURL string // Host contains relevant host configuration. Host HostConfigSummary // HTTPClient executes upstream HTTP requests through host transport policy. HTTPClient HostHTTPClient `json:"-"` // Metadata carries plugin-defined login context. Metadata map[string]any} // AuthLoginStartResponse returns login flow state for polling.type AuthLoginStartResponse struct { // Provider is the provider key for the login flow. Provider string // URL is the user-facing login URL. URL string // State is the opaque plugin login state used for polling. State string // ExpiresAt is the time when this login flow expires. ExpiresAt time.Time // Metadata carries plugin-defined polling context. Metadata map[string]any} // AuthLoginPollRequest asks a plugin to poll a provider login flow.type AuthLoginPollRequest struct { // Provider is the provider key for the login flow. Provider string // State is the opaque plugin login state returned by StartLogin. State string // Host contains relevant host configuration. Host HostConfigSummary // HTTPClient executes upstream HTTP requests through host transport policy. HTTPClient HostHTTPClient `json:"-"` // Metadata carries plugin-defined polling context. Metadata map[string]any} // AuthLoginStatus describes the current provider login state.type AuthLoginStatus string const ( // AuthLoginStatusPending means the login flow is still waiting. AuthLoginStatusPending AuthLoginStatus = "pending" // AuthLoginStatusSuccess means the login flow produced auth data. AuthLoginStatusSuccess AuthLoginStatus = "success" // AuthLoginStatusError means the login flow failed. AuthLoginStatusError AuthLoginStatus = "error") // AuthLoginPollResponse returns the login poll status and auth data.type AuthLoginPollResponse struct { // Status is the current login flow state. Status AuthLoginStatus // Message contains provider-facing login progress or error text. Message string // Auth is the completed auth record when Status is success. Auth AuthData} // AuthRefreshRequest asks a plugin to refresh provider auth data.type AuthRefreshRequest struct { // AuthID identifies the auth record to refresh. AuthID string // AuthProvider identifies the credential provider. AuthProvider string // StorageJSON contains provider-owned persisted auth data. StorageJSON []byte // Metadata contains mutable host-managed auth metadata. Metadata map[string]any // Attributes contains immutable routing and provider attributes. Attributes map[string]string // Host contains relevant host configuration. Host HostConfigSummary // HTTPClient executes upstream HTTP requests through host transport policy. HTTPClient HostHTTPClient `json:"-"`} // AuthRefreshResponse returns refreshed provider auth data.type AuthRefreshResponse struct { // Auth is the refreshed auth record. Auth AuthData // NextRefreshAfter is the earliest time the host should refresh again. NextRefreshAfter time.Time} // ModelRegistrar registers plugin-provided models with the host.type ModelRegistrar interface { RegisterModels(context.Context, ModelRegistrationRequest) (ModelRegistrationResponse, error)} // ModelRegistrationRequest carries host context for model registration.type ModelRegistrationRequest struct { // Plugin is the metadata of the plugin being registered. Plugin Metadata} // ModelRegistrationResponse returns provider and model metadata to register.type ModelRegistrationResponse struct { // Provider is the provider key associated with the returned models. Provider string // Models is the complete set of plugin-provided models. Models []ModelInfo} // ModelProvider contributes provider-native static and per-auth model metadata.type ModelProvider interface { StaticModels(context.Context, StaticModelRequest) (ModelResponse, error) ModelsForAuth(context.Context, AuthModelRequest) (ModelResponse, error)} // StaticModelRequest carries host context for provider static models.type StaticModelRequest struct { // Plugin is the metadata of the plugin being registered. Plugin Metadata // Host contains relevant host configuration. Host HostConfigSummary} // AuthModelRequest carries auth context for provider model discovery.type AuthModelRequest struct { // Plugin is the metadata of the plugin being registered. Plugin Metadata // AuthID identifies the auth record used for discovery. AuthID string // AuthProvider identifies the credential provider. AuthProvider string // StorageJSON contains provider-owned persisted auth data. StorageJSON []byte // Metadata contains mutable host-managed auth metadata. Metadata map[string]any // Attributes contains immutable routing and provider attributes. Attributes map[string]string // Host contains relevant host configuration. Host HostConfigSummary // HTTPClient executes upstream HTTP requests through host transport policy. HTTPClient HostHTTPClient `json:"-"`} // ModelResponse returns provider and model metadata discovered by a plugin.type ModelResponse struct { // Provider is the provider key associated with the returned models. Provider string // Models is the complete set of discovered provider models. Models []ModelInfo // AuthUpdate contains updated auth data from model discovery when needed. AuthUpdate AuthData} // FrontendAuthProvider authenticates frontend requests before proxy routing.type FrontendAuthProvider interface { Identifier() string Authenticate(context.Context, FrontendAuthRequest) (FrontendAuthResponse, error)} // FrontendAuthRequest describes an inbound frontend authentication request.type FrontendAuthRequest struct { // Method is the HTTP method. Method string // Path is the request path. Path string // Headers contains inbound request headers. Headers http.Header // Query contains inbound query parameters. Query url.Values // Body contains the raw request body. Body []byte} // FrontendAuthResponse reports the authentication decision and identity metadata.type FrontendAuthResponse struct { // Authenticated reports whether the request was accepted. Authenticated bool // Principal is the authenticated subject identifier. Principal string // Metadata carries plugin-defined identity attributes for downstream use. Metadata map[string]string} // ProviderExecutor handles model execution, streaming, HTTP bridging, and token counting.type ProviderExecutor interface { Identifier() string Execute(context.Context, ExecutorRequest) (ExecutorResponse, error) ExecuteStream(context.Context, ExecutorRequest) (ExecutorStreamResponse, error) CountTokens(context.Context, ExecutorRequest) (ExecutorResponse, error) HttpRequest(context.Context, ExecutorHTTPRequest) (ExecutorHTTPResponse, error)} // HostHTTPClient executes plugin HTTP requests through host transport policy.// Plugin executors must use this client for upstream calls so request-log can// capture the outbound request and raw upstream response when enabled.type HostHTTPClient interface { Do(context.Context, HTTPRequest) (HTTPResponse, error) DoStream(context.Context, HTTPRequest) (HTTPStreamResponse, error)} // HTTPRequest describes an upstream HTTP request issued through the host.type HTTPRequest struct { // Method is the HTTP method. Method string // URL is the absolute upstream URL. URL string // Headers contains request headers. Headers http.Header // Body contains the raw request body. Body []byte} // HTTPResponse describes a non-streaming host HTTP response.type HTTPResponse struct { // StatusCode is the upstream HTTP status code. StatusCode int // Headers contains upstream response headers. Headers http.Header // Body contains the raw response body. Body []byte} // HTTPStreamResponse describes a streaming host HTTP response.type HTTPStreamResponse struct { // StatusCode is the upstream HTTP status code. StatusCode int // Headers contains upstream response headers. Headers http.Header // Chunks yields streaming payload chunks until the channel closes. Chunks <-chan HTTPStreamChunk} // HTTPStreamChunk carries one host HTTP stream chunk or an error.type HTTPStreamChunk struct { // Payload contains the raw stream chunk bytes. Payload []byte // Err reports a stream error associated with this chunk. Err error} // ExecutorHTTPRequest describes an executor-owned HTTP request.type ExecutorHTTPRequest struct { // AuthID identifies the selected credential. AuthID string // AuthProvider identifies the credential provider. AuthProvider string // Method is the HTTP method. Method stringLines 1–500 of 880. Load more
// Package pluginapi defines host-side plugin capability schemas and adapters. package pluginapi import ( "context" "net/http" "net/url" "time" ) // Plugin is the host-side representation produced from a dynamic plugin registration. type Plugin struct { // Metadata identifies the plugin binary and its published source. Metadata Metadata // Capabilities declares the optional integration points implemented by the plugin. Capabilities Capabilities } // Metadata describes a plugin for registry, logging, and diagnostics. type Metadata struct { // Name is the stable human-readable plugin name. Name string // Version is the plugin release version. Version string // Author identifies the plugin author or organization. Author string // GitHubRepository is the repository URL for plugin source and support. GitHubRepository string // Logo is a plugin-provided display asset reference for management clients. Logo string // ConfigFields describes plugin-owned configuration fields for management clients. ConfigFields []ConfigField } // ConfigFieldType classifies plugin-owned configuration values for management clients. type ConfigFieldType string const ( // ConfigFieldTypeString describes a string configuration value. ConfigFieldTypeString ConfigFieldType = "string" // ConfigFieldTypeNumber describes a numeric configuration value. ConfigFieldTypeNumber ConfigFieldType = "number" // ConfigFieldTypeInteger describes an integer configuration value. ConfigFieldTypeInteger ConfigFieldType = "integer" // ConfigFieldTypeBoolean describes a boolean configuration value. ConfigFieldTypeBoolean ConfigFieldType = "boolean" // ConfigFieldTypeEnum describes a string value constrained to EnumValues. ConfigFieldTypeEnum ConfigFieldType = "enum" // ConfigFieldTypeArray describes an array configuration value. ConfigFieldTypeArray ConfigFieldType = "array" // ConfigFieldTypeObject describes an object configuration value. ConfigFieldTypeObject ConfigFieldType = "object" ) // ConfigField describes a plugin-owned configuration field for management clients. type ConfigField struct { // Name is the configuration key under plugins.configs.<pluginID>. Name string // Type classifies the field value for management clients. Type ConfigFieldType // EnumValues lists allowed values when Type is ConfigFieldTypeEnum. EnumValues []string // Description explains how the plugin uses the field. Description string } // Capabilities groups the optional host integration interfaces exposed by a plugin. type Capabilities struct { // ModelRegistrar contributes development-time model metadata to the host registry. ModelRegistrar ModelRegistrar // ModelProvider contributes provider-native static and per-auth model metadata. ModelProvider ModelProvider // AuthProvider lets the host parse, login, poll, and refresh plugin provider auths. AuthProvider AuthProvider // FrontendAuthProvider authenticates frontend requests before proxy handling. FrontendAuthProvider FrontendAuthProvider // Executor sends requests to an upstream provider or local backend. Executor ProviderExecutor // ExecutorModelScope declares whether Executor serves static models, OAuth auth models, or both. // Empty defaults to ExecutorModelScopeBoth for backward compatibility. ExecutorModelScope ExecutorModelScope // ExecutorInputFormats lists request protocols accepted directly by Executor. Executors must declare at least one. ExecutorInputFormats []string // ExecutorOutputFormats lists response protocols emitted directly by Executor. Executors must declare at least one. ExecutorOutputFormats []string // RequestTranslator converts canonical requests into provider-specific payloads. RequestTranslator RequestTranslator // RequestNormalizer converts provider-specific requests into canonical payloads. RequestNormalizer RequestNormalizer // ResponseTranslator converts canonical responses into provider-specific payloads. ResponseTranslator ResponseTranslator // ResponseBeforeTranslator normalizes upstream responses before native translation. ResponseBeforeTranslator ResponseNormalizer // ResponseAfterTranslator normalizes translated responses before delivery. ResponseAfterTranslator ResponseNormalizer // ThinkingApplier applies validated thinking configuration to provider payloads. ThinkingApplier ThinkingApplier // UsagePlugin receives completed usage records. UsagePlugin UsagePlugin // CommandLinePlugin declares and handles plugin-owned command-line flags. CommandLinePlugin CommandLinePlugin // ManagementAPI declares plugin-owned diagnostic Management API routes. ManagementAPI ManagementAPI } // ExecutorModelScope declares which model-registration paths a plugin executor supports. type ExecutorModelScope string const ( // ExecutorModelScopeBoth means the executor supports static and OAuth auth-bound models. ExecutorModelScopeBoth ExecutorModelScope = "both" // ExecutorModelScopeStatic means the executor supports only non-OAuth static models. ExecutorModelScopeStatic ExecutorModelScope = "static" // ExecutorModelScopeOAuth means the executor supports only OAuth auth-bound models. ExecutorModelScopeOAuth ExecutorModelScope = "oauth" ) // ModelInfo describes a model contributed by a plugin. type ModelInfo struct { // ID is the stable model identifier used in API requests. ID string // Object is the API object type, usually "model". Object string // Created is the Unix timestamp when the model metadata was created. Created int64 // OwnedBy identifies the model owner or provider. OwnedBy string // Type classifies the model capability family. Type string // DisplayName is the user-facing model name. DisplayName string // Name is the provider-native model name. Name string // Version identifies the model revision when available. Version string // Description is a short user-facing model summary. Description string // InputTokenLimit is the maximum accepted input token count. InputTokenLimit int64 // OutputTokenLimit is the maximum generated output token count. OutputTokenLimit int64 // SupportedGenerationMethods lists supported generation method names. SupportedGenerationMethods []string // ContextLength is the maximum combined context length. ContextLength int64 // MaxCompletionTokens is the maximum completion token count. MaxCompletionTokens int64 // SupportedParameters lists request parameters supported by the model. SupportedParameters []string // SupportedInputModalities lists accepted input modality names. SupportedInputModalities []string // SupportedOutputModalities lists produced output modality names. SupportedOutputModalities []string // Thinking describes optional reasoning controls for the model. Thinking *ThinkingSupport // UserDefined reports whether the model was provided by user configuration. UserDefined bool } // ThinkingSupport describes supported reasoning budget controls. type ThinkingSupport struct { // Min is the minimum accepted reasoning budget. Min int // Max is the maximum accepted reasoning budget. Max int // ZeroAllowed reports whether disabling reasoning is supported. ZeroAllowed bool // DynamicAllowed reports whether automatic reasoning budget selection is supported. DynamicAllowed bool // Levels lists supported named reasoning levels. Levels []string } // HostConfigSummary describes host configuration relevant to plugin providers. type HostConfigSummary struct { // AuthDir is the resolved directory containing provider auth material. AuthDir string // ProxyURL is the configured upstream proxy URL. ProxyURL string // ForceModelPrefix reports whether model aliases should keep provider prefixes. ForceModelPrefix bool // OAuthModelAlias maps providers to configured model aliases. OAuthModelAlias map[string][]ModelAlias // ExcludedModels maps providers to model names hidden by host configuration. ExcludedModels map[string][]string } // ModelAlias describes one configured provider model alias. type ModelAlias struct { // Name is the provider model name. Name string // Alias is the host-facing model alias. Alias string } // AuthData describes a plugin provider auth record exchanged with the host. type AuthData struct { // Provider is the provider key associated with the auth. Provider string // ID is the stable host auth identifier. ID string // FileName is the source or persisted auth file name. FileName string // Label is the user-facing auth label. Label string // Prefix is the configured model prefix for this auth. Prefix string // ProxyURL is the auth-specific proxy URL when configured. ProxyURL string // Disabled reports whether the auth should be skipped. Disabled bool // StorageJSON contains provider-owned persisted auth data. StorageJSON []byte // Metadata contains mutable host-managed auth metadata. Metadata map[string]any // Attributes contains immutable routing and provider attributes. Attributes map[string]string // NextRefreshAfter is the earliest time the host should refresh this auth. NextRefreshAfter time.Time } // AuthParseRequest describes auth material offered to a plugin parser. type AuthParseRequest struct { // Provider is the provider key being parsed. Provider string // Path is the source path of the auth material when available. Path string // FileName is the auth file name. FileName string // RawJSON contains the raw auth file payload. RawJSON []byte // Host contains relevant host configuration. Host HostConfigSummary } // AuthParseResponse returns the parser decision and parsed auth data. type AuthParseResponse struct { // Handled reports whether the plugin recognized the auth material. Handled bool // Auth is the parsed auth record when Handled is true. Auth AuthData } // AuthProvider parses, logs in, polls, and refreshes plugin provider auths. type AuthProvider interface { Identifier() string ParseAuth(context.Context, AuthParseRequest) (AuthParseResponse, error) StartLogin(context.Context, AuthLoginStartRequest) (AuthLoginStartResponse, error) PollLogin(context.Context, AuthLoginPollRequest) (AuthLoginPollResponse, error) RefreshAuth(context.Context, AuthRefreshRequest) (AuthRefreshResponse, error) } // AuthLoginStartRequest asks a plugin to start a provider login flow. type AuthLoginStartRequest struct { // Provider is the provider key for the login flow. Provider string // BaseURL is the host callback or login base URL. BaseURL string // Host contains relevant host configuration. Host HostConfigSummary // HTTPClient executes upstream HTTP requests through host transport policy. HTTPClient HostHTTPClient `json:"-"` // Metadata carries plugin-defined login context. Metadata map[string]any } // AuthLoginStartResponse returns login flow state for polling. type AuthLoginStartResponse struct { // Provider is the provider key for the login flow. Provider string // URL is the user-facing login URL. URL string // State is the opaque plugin login state used for polling. State string // ExpiresAt is the time when this login flow expires. ExpiresAt time.Time // Metadata carries plugin-defined polling context. Metadata map[string]any } // AuthLoginPollRequest asks a plugin to poll a provider login flow. type AuthLoginPollRequest struct { // Provider is the provider key for the login flow. Provider string // State is the opaque plugin login state returned by StartLogin. State string // Host contains relevant host configuration. Host HostConfigSummary // HTTPClient executes upstream HTTP requests through host transport policy. HTTPClient HostHTTPClient `json:"-"` // Metadata carries plugin-defined polling context. Metadata map[string]any } // AuthLoginStatus describes the current provider login state. type AuthLoginStatus string const ( // AuthLoginStatusPending means the login flow is still waiting. AuthLoginStatusPending AuthLoginStatus = "pending" // AuthLoginStatusSuccess means the login flow produced auth data. AuthLoginStatusSuccess AuthLoginStatus = "success" // AuthLoginStatusError means the login flow failed. AuthLoginStatusError AuthLoginStatus = "error" ) // AuthLoginPollResponse returns the login poll status and auth data. type AuthLoginPollResponse struct { // Status is the current login flow state. Status AuthLoginStatus // Message contains provider-facing login progress or error text. Message string // Auth is the completed auth record when Status is success. Auth AuthData } // AuthRefreshRequest asks a plugin to refresh provider auth data. type AuthRefreshRequest struct { // AuthID identifies the auth record to refresh. AuthID string // AuthProvider identifies the credential provider. AuthProvider string // StorageJSON contains provider-owned persisted auth data. StorageJSON []byte // Metadata contains mutable host-managed auth metadata. Metadata map[string]any // Attributes contains immutable routing and provider attributes. Attributes map[string]string // Host contains relevant host configuration. Host HostConfigSummary // HTTPClient executes upstream HTTP requests through host transport policy. HTTPClient HostHTTPClient `json:"-"` } // AuthRefreshResponse returns refreshed provider auth data. type AuthRefreshResponse struct { // Auth is the refreshed auth record. Auth AuthData // NextRefreshAfter is the earliest time the host should refresh again. NextRefreshAfter time.Time } // ModelRegistrar registers plugin-provided models with the host. type ModelRegistrar interface { RegisterModels(context.Context, ModelRegistrationRequest) (ModelRegistrationResponse, error) } // ModelRegistrationRequest carries host context for model registration. type ModelRegistrationRequest struct { // Plugin is the metadata of the plugin being registered. Plugin Metadata } // ModelRegistrationResponse returns provider and model metadata to register. type ModelRegistrationResponse struct { // Provider is the provider key associated with the returned models. Provider string // Models is the complete set of plugin-provided models. Models []ModelInfo } // ModelProvider contributes provider-native static and per-auth model metadata. type ModelProvider interface { StaticModels(context.Context, StaticModelRequest) (ModelResponse, error) ModelsForAuth(context.Context, AuthModelRequest) (ModelResponse, error) } // StaticModelRequest carries host context for provider static models. type StaticModelRequest struct { // Plugin is the metadata of the plugin being registered. Plugin Metadata // Host contains relevant host configuration. Host HostConfigSummary } // AuthModelRequest carries auth context for provider model discovery. type AuthModelRequest struct { // Plugin is the metadata of the plugin being registered. Plugin Metadata // AuthID identifies the auth record used for discovery. AuthID string // AuthProvider identifies the credential provider. AuthProvider string // StorageJSON contains provider-owned persisted auth data. StorageJSON []byte // Metadata contains mutable host-managed auth metadata. Metadata map[string]any // Attributes contains immutable routing and provider attributes. Attributes map[string]string // Host contains relevant host configuration. Host HostConfigSummary // HTTPClient executes upstream HTTP requests through host transport policy. HTTPClient HostHTTPClient `json:"-"` } // ModelResponse returns provider and model metadata discovered by a plugin. type ModelResponse struct { // Provider is the provider key associated with the returned models. Provider string // Models is the complete set of discovered provider models. Models []ModelInfo // AuthUpdate contains updated auth data from model discovery when needed. AuthUpdate AuthData } // FrontendAuthProvider authenticates frontend requests before proxy routing. type FrontendAuthProvider interface { Identifier() string Authenticate(context.Context, FrontendAuthRequest) (FrontendAuthResponse, error) } // FrontendAuthRequest describes an inbound frontend authentication request. type FrontendAuthRequest struct { // Method is the HTTP method. Method string // Path is the request path. Path string // Headers contains inbound request headers. Headers http.Header // Query contains inbound query parameters. Query url.Values // Body contains the raw request body. Body []byte } // FrontendAuthResponse reports the authentication decision and identity metadata. type FrontendAuthResponse struct { // Authenticated reports whether the request was accepted. Authenticated bool // Principal is the authenticated subject identifier. Principal string // Metadata carries plugin-defined identity attributes for downstream use. Metadata map[string]string } // ProviderExecutor handles model execution, streaming, HTTP bridging, and token counting. type ProviderExecutor interface { Identifier() string Execute(context.Context, ExecutorRequest) (ExecutorResponse, error) ExecuteStream(context.Context, ExecutorRequest) (ExecutorStreamResponse, error) CountTokens(context.Context, ExecutorRequest) (ExecutorResponse, error) HttpRequest(context.Context, ExecutorHTTPRequest) (ExecutorHTTPResponse, error) } // HostHTTPClient executes plugin HTTP requests through host transport policy. // Plugin executors must use this client for upstream calls so request-log can // capture the outbound request and raw upstream response when enabled. type HostHTTPClient interface { Do(context.Context, HTTPRequest) (HTTPResponse, error) DoStream(context.Context, HTTPRequest) (HTTPStreamResponse, error) } // HTTPRequest describes an upstream HTTP request issued through the host. type HTTPRequest struct { // Method is the HTTP method. Method string // URL is the absolute upstream URL. URL string // Headers contains request headers. Headers http.Header // Body contains the raw request body. Body []byte } // HTTPResponse describes a non-streaming host HTTP response. type HTTPResponse struct { // StatusCode is the upstream HTTP status code. StatusCode int // Headers contains upstream response headers. Headers http.Header // Body contains the raw response body. Body []byte } // HTTPStreamResponse describes a streaming host HTTP response. type HTTPStreamResponse struct { // StatusCode is the upstream HTTP status code. StatusCode int // Headers contains upstream response headers. Headers http.Header // Chunks yields streaming payload chunks until the channel closes. Chunks <-chan HTTPStreamChunk } // HTTPStreamChunk carries one host HTTP stream chunk or an error. type HTTPStreamChunk struct { // Payload contains the raw stream chunk bytes. Payload []byte // Err reports a stream error associated with this chunk. Err error } // ExecutorHTTPRequest describes an executor-owned HTTP request. type ExecutorHTTPRequest struct { // AuthID identifies the selected credential. AuthID string // AuthProvider identifies the credential provider. AuthProvider string // Method is the HTTP method. Method string