mirror of
https://github.com/sipeed/picoclaw.git
synced 2026-06-12 18:08:54 +00:00
8a44410e37
* feat(gateway): support hot reload and empty startup - extract gateway runtime into pkg/gateway - add gateway.hot_reload config with default and example values - allow starting the gateway without a default model via --allow-empty - stop treating missing enabled channels as a startup error - update related tests * feat: replace gateway SSE updates with polling-based state sync - remove gateway SSE broadcasting and event endpoint - add polling-based gateway status refresh with stopping state handling - detect when gateway restart is required after default model changes - resolve gateway health and websocket proxy targets from configured host - update gateway UI labels and add backend/frontend test coverage
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"sync"
|
|
|
|
"github.com/sipeed/picoclaw/web/backend/launcherconfig"
|
|
)
|
|
|
|
// Handler serves HTTP API requests.
|
|
type Handler struct {
|
|
configPath string
|
|
serverPort int
|
|
serverPublic bool
|
|
serverPublicExplicit bool
|
|
serverCIDRs []string
|
|
oauthMu sync.Mutex
|
|
oauthFlows map[string]*oauthFlow
|
|
oauthState map[string]string
|
|
}
|
|
|
|
// NewHandler creates an instance of the API handler.
|
|
func NewHandler(configPath string) *Handler {
|
|
return &Handler{
|
|
configPath: configPath,
|
|
serverPort: launcherconfig.DefaultPort,
|
|
oauthFlows: make(map[string]*oauthFlow),
|
|
oauthState: make(map[string]string),
|
|
}
|
|
}
|
|
|
|
// SetServerOptions stores current backend listen options for fallback behavior.
|
|
func (h *Handler) SetServerOptions(port int, public bool, publicExplicit bool, allowedCIDRs []string) {
|
|
h.serverPort = port
|
|
h.serverPublic = public
|
|
h.serverPublicExplicit = publicExplicit
|
|
h.serverCIDRs = append([]string(nil), allowedCIDRs...)
|
|
}
|
|
|
|
// RegisterRoutes binds all API endpoint handlers to the ServeMux.
|
|
func (h *Handler) RegisterRoutes(mux *http.ServeMux) {
|
|
// Config CRUD
|
|
h.registerConfigRoutes(mux)
|
|
|
|
// Pico Channel (WebSocket chat)
|
|
h.registerPicoRoutes(mux)
|
|
|
|
// Gateway process lifecycle
|
|
h.registerGatewayRoutes(mux)
|
|
|
|
// Session history
|
|
h.registerSessionRoutes(mux)
|
|
|
|
// OAuth login and credential management
|
|
h.registerOAuthRoutes(mux)
|
|
|
|
// Model list management
|
|
h.registerModelRoutes(mux)
|
|
|
|
// Channel catalog (for frontend navigation/config pages)
|
|
h.registerChannelRoutes(mux)
|
|
|
|
// Skills and tools support/actions
|
|
h.registerSkillRoutes(mux)
|
|
h.registerToolRoutes(mux)
|
|
|
|
// OS startup / launch-at-login
|
|
h.registerStartupRoutes(mux)
|
|
|
|
// Launcher service parameters (port/public)
|
|
h.registerLauncherConfigRoutes(mux)
|
|
}
|
|
|
|
func (h *Handler) Shutdown() {}
|