summaryrefslogtreecommitdiff
path: root/internal/lsp/server.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/lsp/server.go')
-rw-r--r--internal/lsp/server.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/internal/lsp/server.go b/internal/lsp/server.go
index 9516e37..b33147c 100644
--- a/internal/lsp/server.go
+++ b/internal/lsp/server.go
@@ -29,6 +29,7 @@ type Server struct {
logger *log.Logger
serverCtx context.Context
serverCancel context.CancelFunc
+ statusSink StatusSink
exited atomic.Bool
mu sync.RWMutex
docs map[string]*document
@@ -74,6 +75,12 @@ type codeActionSubsystem struct {
altClients map[string]llm.Client
}
+// StatusSink receives status updates from the LSP server.
+type StatusSink interface {
+ SetLLMStart(provider, model string) error
+ SetGlobal(reqs int64, rpm float64, sent int64, recv int64, provider, model string, scopeRPM float64, scopeReqs int64, window time.Duration) error
+}
+
// ServerOptions collects configuration for NewServer to avoid long parameter lists.
type ServerOptions struct {
LogContext bool
@@ -84,6 +91,7 @@ type ServerOptions struct {
Client llm.Client
// Gitignore-aware file checker (optional)
IgnoreChecker *ignore.Checker
+ StatusSink StatusSink
}
func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server {
@@ -144,6 +152,9 @@ func (s *Server) applyOptions(opts ServerOptions) {
if opts.IgnoreChecker != nil {
s.ignoreChecker = opts.IgnoreChecker
}
+ if opts.StatusSink != nil {
+ s.statusSink = opts.StatusSink
+ }
}
// ApplyOptions updates the server's configuration at runtime.
@@ -412,6 +423,18 @@ func (s *Server) cancelRequests() {
}
}
+func (s *Server) emitLLMStartStatus(provider, model string) {
+ if s.statusSink != nil {
+ _ = s.statusSink.SetLLMStart(provider, model)
+ }
+}
+
+func (s *Server) emitGlobalStatus(reqs int64, rpm float64, sent int64, recv int64, provider, model string, scopeRPM float64, scopeReqs int64, window time.Duration) {
+ if s.statusSink != nil {
+ _ = s.statusSink.SetGlobal(reqs, rpm, sent, recv, provider, model, scopeRPM, scopeReqs, window)
+ }
+}
+
func (s *Server) Run() error {
defer s.cancelRequests()
for {