From 2a7acf566f93a7d660e6909dc6a829e17fe76066 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 16 Aug 2025 16:02:47 +0300 Subject: context: log when full-file/window context is skipped because document is not open; add -no-disk-io flag with HEXAI_NO_DISK_IO env; plumb through server --- README.md | 1 + internal/lsp/context.go | 7 ++++++- internal/lsp/server.go | 4 +++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ea6a670..22a7821 100644 --- a/README.md +++ b/README.md @@ -47,3 +47,4 @@ Notes: | `-context-window-lines` | `120` | `HEXAI_CONTEXT_WINDOW_LINES` | Lines around cursor when using `window` mode. | | `-max-context-tokens` | `2000` | `HEXAI_MAX_CONTEXT_TOKENS` | Token budget for additional context. | | `-log-preview-limit` | `0` (unlimited) | `HEXAI_LOG_PREVIEW_LIMIT` | Limit characters shown in LLM preview logs. | +| `-no-disk-io` | `true` | `HEXAI_NO_DISK_IO` | Disallow any disk reads for context. | diff --git a/internal/lsp/context.go b/internal/lsp/context.go index c08a865..8b7ed67 100644 --- a/internal/lsp/context.go +++ b/internal/lsp/context.go @@ -33,6 +33,9 @@ func (s *Server) buildAdditionalContext(newFunc bool, uri string, pos Position) func (s *Server) windowContext(uri string, pos Position) string { d := s.getDocument(uri) if d == nil || len(d.lines) == 0 { + if s.logger != nil { + s.logger.Printf("context: window requested but document not open; skipping uri=%s", uri) + } return "" } n := len(d.lines) @@ -52,6 +55,9 @@ func (s *Server) windowContext(uri string, pos Position) string { func (s *Server) fullFileContext(uri string) string { d := s.getDocument(uri) if d == nil { + if s.logger != nil { + s.logger.Printf("context: full-file requested but document not open; skipping uri=%s", uri) + } return "" } return truncateToApproxTokens(d.text, s.maxContextTokens) @@ -77,4 +83,3 @@ func truncateToApproxTokens(text string, maxTokens int) string { } return text[:cut] } - diff --git a/internal/lsp/server.go b/internal/lsp/server.go index 3154613..865d033 100644 --- a/internal/lsp/server.go +++ b/internal/lsp/server.go @@ -25,9 +25,10 @@ type Server struct { contextMode string windowLines int maxContextTokens int + noDiskIO bool } -func NewServer(r io.Reader, w io.Writer, logger *log.Logger, logContext bool, maxTokens int, contextMode string, windowLines int, maxContextTokens int) *Server { +func NewServer(r io.Reader, w io.Writer, logger *log.Logger, logContext bool, maxTokens int, contextMode string, windowLines int, maxContextTokens int, noDiskIO bool) *Server { s := &Server{in: bufio.NewReader(r), out: w, logger: logger, docs: make(map[string]*document), logContext: logContext} if maxTokens <= 0 { maxTokens = 500 @@ -45,6 +46,7 @@ func NewServer(r io.Reader, w io.Writer, logger *log.Logger, logContext bool, ma s.contextMode = contextMode s.windowLines = windowLines s.maxContextTokens = maxContextTokens + s.noDiskIO = noDiskIO if c, err := llm.NewDefault(logger); err != nil { s.logger.Printf("llm disabled: %v", err) } else { -- cgit v1.2.3