vibe-proxy/backend/sdk/cliproxy/service.go
2026-08-24 00:10:41 +02:00

127 lines
4.6 KiB
Go

// Package cliproxy provides the core service implementation for the CLI Proxy API.
// It includes service lifecycle management, authentication handling, file watching,
// and integration with various AI service providers through a unified interface.
package cliproxy
import (
"context"
"sync"
"time"
"github.com/router-for-me/CLIProxyAPI/v7/internal/api"
"github.com/router-for-me/CLIProxyAPI/v7/internal/home"
"github.com/router-for-me/CLIProxyAPI/v7/internal/homeplugins"
"github.com/router-for-me/CLIProxyAPI/v7/internal/pluginhost"
"github.com/router-for-me/CLIProxyAPI/v7/internal/watcher"
"github.com/router-for-me/CLIProxyAPI/v7/internal/wsrelay"
sdkaccess "github.com/router-for-me/CLIProxyAPI/v7/sdk/access"
sdkAuth "github.com/router-for-me/CLIProxyAPI/v7/sdk/auth"
coreauth "github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/auth"
"github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/executionregistry"
"github.com/router-for-me/CLIProxyAPI/v7/sdk/config"
sdkpluginstore "github.com/router-for-me/CLIProxyAPI/v7/sdk/pluginstore"
)
// Service wraps the proxy server lifecycle so external programs can embed the CLI proxy.
// It manages the complete lifecycle including authentication, file watching, HTTP server,
// and integration with various AI service providers.
type Service struct {
// cfg holds the current application configuration.
cfg *config.Config
// cfgMu protects concurrent access to the configuration.
cfgMu sync.RWMutex
// configUpdateMu serializes config updates across watcher + home.
configUpdateMu sync.Mutex
// configRuntimeMu orders side-effecting runtime application after config commits.
configRuntimeMu sync.Mutex
executorRegistrationMu sync.Mutex
configSequence uint64
appliedRoutingState *routingRuntimeState
// configPath is the path to the configuration file.
configPath string
// tokenProvider handles loading token-based clients.
tokenProvider TokenClientProvider
// apiKeyProvider handles loading API key-based clients.
apiKeyProvider APIKeyClientProvider
// watcherFactory creates file watcher instances.
watcherFactory WatcherFactory
// hooks provides lifecycle callbacks.
hooks Hooks
// serverOptions contains additional server configuration options.
serverOptions []api.ServerOption
// server is the HTTP API server instance.
server *api.Server
// pprofServer manages the optional pprof HTTP debug server.
pprofServer *pprofServer
// serverErr channel for server startup/shutdown errors.
serverErr chan error
// watcher handles file system monitoring.
watcher *WatcherWrapper
// watcherCancel cancels the watcher context.
watcherCancel context.CancelFunc
// authUpdates channel for authentication updates.
authUpdates chan watcher.AuthUpdate
// authQueueStop cancels the auth update queue processing.
authQueueStop context.CancelFunc
// authManager handles legacy authentication operations.
authManager *sdkAuth.Manager
// accessManager handles request authentication providers.
accessManager *sdkaccess.Manager
// coreManager handles core authentication and execution.
coreManager *coreauth.Manager
// cooldownStateStore persists runtime cooldown state when enabled.
cooldownStateStore coreauth.CooldownStateStore
// pluginHost owns dynamic plugin lifecycle and runtime capability adapters.
pluginHost *pluginhost.Host
// shutdownOnce ensures shutdown is called only once.
shutdownOnce sync.Once
// wsGateway manages websocket Gemini providers.
wsGateway *wsrelay.Manager
homeLifecycleMu sync.Mutex
homeOwnershipMu sync.Mutex
homeConfigCommitMu sync.Mutex
homeConfigStageHook func()
homeConfigCommitHook func()
homeConfigRuntimeHook func()
applyPprofConfigContextFn func(context.Context, *config.Config) bool
updateServerClientsContextFn func(context.Context, *config.Config) bool
homeSupervisor *homeSubscriberSupervisor
homeMu sync.Mutex
homeGeneration uint64
homeClient *home.Client
homeRegistry *executionregistry.Registry
homeDispatchBundle *coreauth.HomeDispatchBundle
homeDrainBound time.Duration
homeCancel context.CancelFunc
runCancel context.CancelFunc
homeLogForwarder homeLogForwarder
homeLogForwarderClient *home.Client
homePluginSyncMu sync.Mutex
homePluginSyncKey string
homePluginSyncFetch func(context.Context, sdkpluginstore.PluginSyncRequest) (sdkpluginstore.PluginSyncResponse, error)
homePluginDeleteTask func(context.Context, *config.Config, home.PluginTask) homeplugins.SyncReport
}