summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-08-16 16:02:47 +0300
committerPaul Buetow <paul@buetow.org>2025-08-16 16:02:47 +0300
commit2a7acf566f93a7d660e6909dc6a829e17fe76066 (patch)
tree7c27a856d26cd9cf7325af6acec410be97a9162e
parent02cc0e3ac6c08f422f11b668c729102fcf0c7f38 (diff)
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
-rw-r--r--README.md1
-rw-r--r--internal/lsp/context.go7
-rw-r--r--internal/lsp/server.go4
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 {