summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-09-26 08:19:26 +0300
committerPaul Buetow <paul@buetow.org>2025-09-26 08:19:26 +0300
commit9bcccbd80d36ae678d58cd8f83c4d0c790c16b48 (patch)
treeccbfdec5119daf443332db020824bc5845bbcf78 /docs
parent439ebb14fa6fb43bfda2e0ee6811c37f96b15ecc (diff)
Auto apply inline prompt completions
Diffstat (limited to 'docs')
-rw-r--r--docs/coverage.html715
-rw-r--r--docs/coverage.out3874
2 files changed, 2461 insertions, 2128 deletions
diff --git a/docs/coverage.html b/docs/coverage.html
index a1db0c8..7cda0d1 100644
--- a/docs/coverage.html
+++ b/docs/coverage.html
@@ -111,13 +111,13 @@
<option value="file27">codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go (88.8%)</option>
- <option value="file28">codeberg.org/snonux/hexai/internal/lsp/handlers_document.go (89.4%)</option>
+ <option value="file28">codeberg.org/snonux/hexai/internal/lsp/handlers_document.go (77.7%)</option>
<option value="file29">codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go (75.0%)</option>
<option value="file30">codeberg.org/snonux/hexai/internal/lsp/handlers_init.go (66.7%)</option>
- <option value="file31">codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go (89.9%)</option>
+ <option value="file31">codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go (90.2%)</option>
<option value="file32">codeberg.org/snonux/hexai/internal/lsp/server.go (86.8%)</option>
@@ -3593,7 +3593,7 @@ type RequestOption func(*Options)
func WithModel(model string) RequestOption <span class="cov1" title="1">{ return func(o *Options) </span><span class="cov1" title="1">{ o.Model = model }</span> }
func WithTemperature(t float64) RequestOption <span class="cov7" title="15">{ return func(o *Options) </span><span class="cov2" title="2">{ o.Temperature = t }</span> }
-func WithMaxTokens(n int) RequestOption <span class="cov10" title="53">{ return func(o *Options) </span><span class="cov2" title="2">{ o.MaxTokens = n }</span> }
+func WithMaxTokens(n int) RequestOption <span class="cov10" title="54">{ return func(o *Options) </span><span class="cov2" title="2">{ o.MaxTokens = n }</span> }
func WithStop(stop ...string) RequestOption <span class="cov1" title="1">{
return func(o *Options) </span><span class="cov1" title="1">{ o.Stop = append([]string{}, stop...) }</span>
}
@@ -3773,11 +3773,11 @@ var std *log.Logger
func Bind(l *log.Logger) <span class="cov2" title="3">{ std = l }</span>
// Logf prints a formatted message with a module prefix and base ANSI style.
-func Logf(prefix, format string, args ...any) <span class="cov10" title="199">{
+func Logf(prefix, format string, args ...any) <span class="cov10" title="202">{
if std == nil </span><span class="cov9" title="141">{
return
}</span>
- <span class="cov7" title="58">msg := fmt.Sprintf(format, args...)
+ <span class="cov7" title="61">msg := fmt.Sprintf(format, args...)
std.Print(AnsiBase + prefix + msg + AnsiReset)</span>
}
@@ -3868,18 +3868,18 @@ import (
// - window: include a window of lines around the cursor
// - file-on-new-func: include full file only when defining a new function
// - always-full: always include the full file
-func (s *Server) buildAdditionalContext(newFunc bool, uri string, pos Position) (string, bool) <span class="cov10" title="13">{
+func (s *Server) buildAdditionalContext(newFunc bool, uri string, pos Position) (string, bool) <span class="cov10" title="14">{
mode := s.contextMode()
switch mode </span>{
case "minimal":<span class="cov3" title="2">
return "", false</span>
case "window":<span class="cov1" title="1">
return s.windowContext(uri, pos), true</span>
- case "file-on-new-func":<span class="cov8" title="8">
+ case "file-on-new-func":<span class="cov8" title="9">
if newFunc </span><span class="cov3" title="2">{
return s.fullFileContext(uri), true
}</span>
- <span class="cov7" title="6">return "", false</span>
+ <span class="cov7" title="7">return "", false</span>
case "always-full":<span class="cov3" title="2">
return s.fullFileContext(uri), true</span>
default:<span class="cov0" title="0">
@@ -3953,7 +3953,7 @@ type document struct {
lines []string
}
-func (s *Server) setDocument(uri, text string) <span class="cov8" title="40">{
+func (s *Server) setDocument(uri, text string) <span class="cov8" title="41">{
s.mu.Lock()
defer s.mu.Unlock()
s.docs[uri] = &amp;document{uri: uri, text: text, lines: splitLines(text)}
@@ -3971,76 +3971,76 @@ func (s *Server) markActivity() <span class="cov3" title="4">{
s.mu.Unlock()
}</span>
-func (s *Server) getDocument(uri string) *document <span class="cov10" title="87">{
+func (s *Server) getDocument(uri string) *document <span class="cov10" title="90">{
s.mu.RLock()
defer s.mu.RUnlock()
return s.docs[uri]
}</span>
// splitLines splits the input string into lines, normalizing line endings to '\n'.
-func splitLines(sx string) []string <span class="cov8" title="52">{
+func splitLines(sx string) []string <span class="cov8" title="53">{
sx = strings.ReplaceAll(sx, "\r\n", "\n")
return strings.Split(sx, "\n")
}</span>
-func (s *Server) lineContext(uri string, pos Position) (above, current, below, funcCtx string) <span class="cov4" title="7">{
+func (s *Server) lineContext(uri string, pos Position) (above, current, below, funcCtx string) <span class="cov5" title="8">{
d := s.getDocument(uri)
if d == nil || len(d.lines) == 0 </span><span class="cov1" title="1">{
return "", "", "", ""
}</span>
- <span class="cov4" title="6">idx := pos.Line
+ <span class="cov4" title="7">idx := pos.Line
if idx &lt; 0 </span><span class="cov0" title="0">{
idx = 0
}</span>
- <span class="cov4" title="6">if idx &gt;= len(d.lines) </span><span class="cov0" title="0">{
+ <span class="cov4" title="7">if idx &gt;= len(d.lines) </span><span class="cov0" title="0">{
idx = len(d.lines) - 1
}</span>
- <span class="cov4" title="6">current = d.lines[idx]
+ <span class="cov4" title="7">current = d.lines[idx]
if idx-1 &gt;= 0 </span><span class="cov4" title="6">{
above = d.lines[idx-1]
}</span>
- <span class="cov4" title="6">if idx+1 &lt; len(d.lines) </span><span class="cov4" title="6">{
+ <span class="cov4" title="7">if idx+1 &lt; len(d.lines) </span><span class="cov4" title="6">{
below = d.lines[idx+1]
}</span>
- <span class="cov4" title="6">for i := idx; i &gt;= 0; i-- </span><span class="cov5" title="8">{
+ <span class="cov4" title="7">for i := idx; i &gt;= 0; i-- </span><span class="cov5" title="9">{
line := strings.TrimSpace(d.lines[i])
if hasAny(line, []string{"func ", "def ", "class ", "fn ", "procedure ", "sub "}) </span><span class="cov4" title="6">{
funcCtx = line
break</span>
}
}
- <span class="cov4" title="6">return above, current, below, funcCtx</span>
+ <span class="cov4" title="7">return above, current, below, funcCtx</span>
}
// isDefiningNewFunction returns true when the cursor appears to be within
// a function declaration/signature and before the opening '{' of the body.
// Heuristic: find nearest preceding line containing "func "; ensure no '{'
// appears before the cursor across those lines.
-func (s *Server) isDefiningNewFunction(uri string, pos Position) bool <span class="cov5" title="11">{
+func (s *Server) isDefiningNewFunction(uri string, pos Position) bool <span class="cov5" title="12">{
d := s.getDocument(uri)
if d == nil || len(d.lines) == 0 </span><span class="cov0" title="0">{
return false
}</span>
- <span class="cov5" title="11">idx := pos.Line
+ <span class="cov5" title="12">idx := pos.Line
if idx &lt; 0 </span><span class="cov0" title="0">{
idx = 0
}</span>
- <span class="cov5" title="11">if idx &gt;= len(d.lines) </span><span class="cov0" title="0">{
+ <span class="cov5" title="12">if idx &gt;= len(d.lines) </span><span class="cov0" title="0">{
idx = len(d.lines) - 1
}</span>
// Find signature start
- <span class="cov5" title="11">sigStart := -1
- for i := idx; i &gt;= 0; i-- </span><span class="cov7" title="20">{
+ <span class="cov5" title="12">sigStart := -1
+ for i := idx; i &gt;= 0; i-- </span><span class="cov7" title="21">{
if strings.Contains(d.lines[i], "func ") </span><span class="cov3" title="4">{
sigStart = i
break</span>
}
// stop if we hit a closing brace which likely ends a previous block
- <span class="cov6" title="16">if strings.Contains(d.lines[i], "}") </span><span class="cov0" title="0">{
+ <span class="cov6" title="17">if strings.Contains(d.lines[i], "}") </span><span class="cov0" title="0">{
break</span>
}
}
- <span class="cov5" title="11">if sigStart == -1 </span><span class="cov4" title="7">{
+ <span class="cov5" title="12">if sigStart == -1 </span><span class="cov5" title="8">{
return false
}</span>
// Scan for '{' from sigStart up to cursor position; if found before or at cursor, we're in body
@@ -4060,29 +4060,29 @@ func (s *Server) isDefiningNewFunction(uri string, pos Position) bool <span clas
<span class="cov2" title="2">return true</span>
}
-func hasAny(s string, needles []string) bool <span class="cov5" title="8">{
- for _, n := range needles </span><span class="cov6" title="18">{
+func hasAny(s string, needles []string) bool <span class="cov5" title="9">{
+ for _, n := range needles </span><span class="cov7" title="24">{
if strings.Contains(s, n) </span><span class="cov4" title="6">{
return true
}</span>
}
- <span class="cov2" title="2">return false</span>
+ <span class="cov3" title="3">return false</span>
}
-func trimLen(s string) string <span class="cov8" title="42">{
+func trimLen(s string) string <span class="cov8" title="47">{
s = strings.TrimSpace(s)
if len(s) &gt; 200 </span><span class="cov1" title="1">{
return s[:200] + "…"
}</span>
- <span class="cov8" title="41">return s</span>
+ <span class="cov8" title="46">return s</span>
}
-func firstLine(s string) string <span class="cov7" title="26">{
+func firstLine(s string) string <span class="cov7" title="27">{
s = strings.ReplaceAll(s, "\r\n", "\n")
if idx := strings.IndexByte(s, '\n'); idx &gt;= 0 </span><span class="cov4" title="6">{
return s[:idx]
}</span>
- <span class="cov7" title="20">return s</span>
+ <span class="cov7" title="21">return s</span>
}
</pre>
@@ -4203,7 +4203,7 @@ func (s *Server) findFirstInstructionInLine(line string) (instr string, cleaned
// handleCompletion moved to handlers_completion.go
-func (s *Server) reply(id json.RawMessage, result any, err *RespError) <span class="cov10" title="29">{
+func (s *Server) reply(id json.RawMessage, result any, err *RespError) <span class="cov10" title="30">{
resp := Response{JSONRPC: "2.0", ID: id, Result: result, Error: err}
s.writeMessage(resp)
}</span>
@@ -4277,33 +4277,33 @@ func (s *Server) reply(id json.RawMessage, result any, err *RespError) <span cla
// --- small completion cache (last ~10 entries) ---
-func (s *Server) completionCacheKey(p CompletionParams, above, current, below, funcCtx string, inParams bool, hasExtra bool, extraText string) string <span class="cov8" title="14">{
+func (s *Server) completionCacheKey(p CompletionParams, above, current, below, funcCtx string, inParams bool, hasExtra bool, extraText string) string <span class="cov8" title="15">{
// Normalize left-of-cursor by trimming trailing spaces/tabs
idx := p.Position.Character
if idx &gt; len(current) </span><span class="cov0" title="0">{
idx = len(current)
}</span>
- <span class="cov8" title="14">left := strings.TrimRight(current[:idx], " \t")
+ <span class="cov8" title="15">left := strings.TrimRight(current[:idx], " \t")
right := ""
if idx &lt; len(current) </span><span class="cov1" title="1">{
right = current[idx:]
}</span>
- <span class="cov8" title="14">prov := ""
+ <span class="cov8" title="15">prov := ""
model := ""
- if client := s.currentLLMClient(); client != nil </span><span class="cov8" title="14">{
+ if client := s.currentLLMClient(); client != nil </span><span class="cov8" title="15">{
prov = client.Name()
model = client.DefaultModel()
}</span>
- <span class="cov8" title="14">temp := ""
+ <span class="cov8" title="15">temp := ""
if tempPtr := s.codingTemperature(); tempPtr != nil </span><span class="cov0" title="0">{
temp = fmt.Sprintf("%.3f", *tempPtr)
}</span>
- <span class="cov8" title="14">extra := ""
+ <span class="cov8" title="15">extra := ""
if hasExtra </span><span class="cov0" title="0">{
extra = strings.TrimSpace(extraText)
}</span>
// Compose a key from essential context parts
- <span class="cov8" title="14">return strings.Join([]string{
+ <span class="cov8" title="15">return strings.Join([]string{
"v1", // version for future-proofing
prov,
model,
@@ -4320,11 +4320,11 @@ func (s *Server) completionCacheKey(p CompletionParams, above, current, below, f
}, "\x1f")</span> // use unit separator to avoid collisions
}
-func (s *Server) completionCacheGet(key string) (string, bool) <span class="cov7" title="10">{
+func (s *Server) completionCacheGet(key string) (string, bool) <span class="cov7" title="11">{
s.mu.Lock()
defer s.mu.Unlock()
v, ok := s.compCache[key]
- if !ok </span><span class="cov6" title="9">{
+ if !ok </span><span class="cov7" title="10">{
return "", false
}</span>
// move to most-recent
@@ -4332,13 +4332,13 @@ func (s *Server) completionCacheGet(key string) (string, bool) <span class="cov7
return v, true</span>
}
-func (s *Server) completionCachePut(key, value string) <span class="cov7" title="12">{
+func (s *Server) completionCachePut(key, value string) <span class="cov7" title="13">{
s.mu.Lock()
defer s.mu.Unlock()
if s.compCache == nil </span><span class="cov5" title="5">{
s.compCache = make(map[string]string)
}</span>
- <span class="cov7" title="12">if _, exists := s.compCache[key]; !exists </span><span class="cov7" title="12">{
+ <span class="cov7" title="13">if _, exists := s.compCache[key]; !exists </span><span class="cov7" title="13">{
s.compCacheOrder = append(s.compCacheOrder, key)
s.compCache[key] = value
if len(s.compCacheOrder) &gt; 10 </span><span class="cov0" title="0">{
@@ -4347,7 +4347,7 @@ func (s *Server) completionCachePut(key, value string) <span class="cov7" title=
s.compCacheOrder = s.compCacheOrder[1:]
delete(s.compCache, old)
}</span>
- <span class="cov7" title="12">return</span>
+ <span class="cov7" title="13">return</span>
}
// update existing and mark most-recent
<span class="cov0" title="0">s.compCache[key] = value
@@ -4431,15 +4431,15 @@ func (s *Server) isTriggerEvent(p CompletionParams, current string) bool <span c
<span class="cov5" title="6">return false</span>
}
-func (s *Server) makeCompletionItems(cleaned string, inParams bool, current string, p CompletionParams, docStr string) []CompletionItem <span class="cov7" title="13">{
+func (s *Server) makeCompletionItems(cleaned string, inParams bool, current string, p CompletionParams, docStr string) []CompletionItem <span class="cov7" title="14">{
te, filter := computeTextEditAndFilter(cleaned, inParams, current, p)
rm := s.collectPromptRemovalEdits(p.TextDocument.URI)
label := labelForCompletion(cleaned, filter)
detail := "Hexai LLM completion"
- if client := s.currentLLMClient(); client != nil </span><span class="cov7" title="13">{
+ if client := s.currentLLMClient(); client != nil </span><span class="cov7" title="14">{
detail = "Hexai " + client.Name() + ":" + client.DefaultModel()
}</span>
- <span class="cov7" title="13">return []CompletionItem{{
+ <span class="cov7" title="14">return []CompletionItem{{
Label: label,
Kind: 1,
Detail: detail,
@@ -5183,10 +5183,10 @@ type completionPlan struct {
cacheKey string
}
-func (s *Server) handleCompletion(req Request) <span class="cov1" title="1">{
+func (s *Server) handleCompletion(req Request) <span class="cov2" title="2">{
var p CompletionParams
var docStr string
- if err := json.Unmarshal(req.Params, &amp;p); err == nil </span><span class="cov1" title="1">{
+ if err := json.Unmarshal(req.Params, &amp;p); err == nil </span><span class="cov2" title="2">{
// Log trigger information for every completion request from client
tk, tch := extractTriggerInfo(p)
logging.Logf("lsp ", "completion trigger kind=%d char=%q uri=%s line=%d char=%d",
@@ -5196,11 +5196,11 @@ func (s *Server) handleCompletion(req Request) <span class="cov1" title="1">{
if s.logContext </span><span class="cov0" title="0">{
s.logCompletionContext(p, above, current, below, funcCtx)
}</span>
- <span class="cov1" title="1">if s.llmClient != nil </span><span class="cov1" title="1">{
+ <span class="cov2" title="2">if s.llmClient != nil </span><span class="cov2" title="2">{
newFunc := s.isDefiningNewFunction(p.TextDocument.URI, p.Position)
extra, has := s.buildAdditionalContext(newFunc, p.TextDocument.URI, p.Position)
items, ok := s.tryLLMCompletion(p, above, current, below, funcCtx, docStr, has, extra)
- if ok </span><span class="cov1" title="1">{
+ if ok </span><span class="cov2" title="2">{
s.reply(req.ID, CompletionList{IsIncomplete: false, Items: items}, nil)
return
}</span>
@@ -5212,26 +5212,26 @@ func (s *Server) handleCompletion(req Request) <span class="cov1" title="1">{
// extractTriggerInfo returns the LSP completion TriggerKind and TriggerCharacter
// if provided by the client; when absent it returns zeros.
-func extractTriggerInfo(p CompletionParams) (kind int, ch string) <span class="cov2" title="2">{
+func extractTriggerInfo(p CompletionParams) (kind int, ch string) <span class="cov3" title="3">{
if p.Context == nil </span><span class="cov0" title="0">{
return 0, ""
}</span>
- <span class="cov2" title="2">var ctx struct {
+ <span class="cov3" title="3">var ctx struct {
TriggerKind int `json:"triggerKind"`
TriggerCharacter string `json:"triggerCharacter,omitempty"`
}
if raw, ok := p.Context.(json.RawMessage); ok </span><span class="cov1" title="1">{
_ = json.Unmarshal(raw, &amp;ctx)
- }</span> else<span class="cov1" title="1"> {
+ }</span> else<span class="cov2" title="2"> {
b, _ := json.Marshal(p.Context)
_ = json.Unmarshal(b, &amp;ctx)
}</span>
- <span class="cov2" title="2">return ctx.TriggerKind, ctx.TriggerCharacter</span>
+ <span class="cov3" title="3">return ctx.TriggerKind, ctx.TriggerCharacter</span>
}
// --- completion helpers ---
-func (s *Server) buildDocString(p CompletionParams, above, current, below, funcCtx string) string <span class="cov2" title="2">{
+func (s *Server) buildDocString(p CompletionParams, above, current, below, funcCtx string) string <span class="cov3" title="3">{
return fmt.Sprintf("file: %s\nline: %d\nabove: %s\ncurrent: %s\nbelow: %s\nfunction: %s",
p.TextDocument.URI, p.Position.Line, trimLen(above), trimLen(current), trimLen(below), trimLen(funcCtx))
}</span>
@@ -5241,7 +5241,7 @@ func (s *Server) logCompletionContext(p CompletionParams, above, current, below,
p.TextDocument.URI, p.Position.Line, p.Position.Character, trimLen(above), trimLen(current), trimLen(below), trimLen(funcCtx))
}</span>
-func (s *Server) tryLLMCompletion(p CompletionParams, above, current, below, funcCtx, docStr string, hasExtra bool, extraText string) ([]CompletionItem, bool) <span class="cov8" title="18">{
+func (s *Server) tryLLMCompletion(p CompletionParams, above, current, below, funcCtx, docStr string, hasExtra bool, extraText string) ([]CompletionItem, bool) <span class="cov8" title="19">{
ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second)
defer cancel()
@@ -5250,14 +5250,14 @@ func (s *Server) tryLLMCompletion(p CompletionParams, above, current, below, fun
return items, true
}</span>
- <span class="cov6" title="9">if items, ok := s.tryProviderNativeCompletion(current, p, above, below, funcCtx, docStr, hasExtra, extraText, plan.inParams); ok </span><span class="cov1" title="1">{
+ <span class="cov6" title="10">if items, ok := s.tryProviderNativeCompletion(current, p, above, below, funcCtx, docStr, hasExtra, extraText, plan.inParams); ok </span><span class="cov1" title="1">{
return items, true
}</span>
- <span class="cov6" title="8">return s.executeChatCompletion(ctx, plan)</span>
+ <span class="cov6" title="9">return s.executeChatCompletion(ctx, plan)</span>
}
-func (s *Server) prepareCompletionPlan(p CompletionParams, above, current, below, funcCtx, docStr string, hasExtra bool, extraText string) (completionPlan, []CompletionItem, bool) <span class="cov8" title="18">{
+func (s *Server) prepareCompletionPlan(p CompletionParams, above, current, below, funcCtx, docStr string, hasExtra bool, extraText string) (completionPlan, []CompletionItem, bool) <span class="cov8" title="19">{
plan := completionPlan{
params: p,
above: above,
@@ -5274,10 +5274,10 @@ func (s *Server) prepareCompletionPlan(p CompletionParams, above, current, below
logging.Logf("lsp ", "%scompletion skip=no-trigger line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
return plan, []CompletionItem{}, true
}</span>
- <span class="cov6" title="10">if s.shouldSuppressForChatTriggerEOL(current, p) </span><span class="cov0" title="0">{
+ <span class="cov6" title="11">if s.shouldSuppressForChatTriggerEOL(current, p) </span><span class="cov0" title="0">{
return plan, []CompletionItem{}, true
}</span>
- <span class="cov6" title="10">plan.inParams = inParamList(current, p.Position.Character)
+ <span class="cov6" title="11">plan.inParams = inParamList(current, p.Position.Character)
plan.manualInvoke = parseManualInvoke(p.Context)
plan.cacheKey = s.completionCacheKey(p, above, current, below, funcCtx, plan.inParams, hasExtra, extraText)
if cleaned, ok := s.completionCacheGet(plan.cacheKey); ok &amp;&amp; strings.TrimSpace(cleaned) != "" </span><span class="cov1" title="1">{
@@ -5286,107 +5286,107 @@ func (s *Server) prepareCompletionPlan(p CompletionParams, above, current, below
logging.AnsiGreen, logging.PreviewForLog(cleaned), logging.AnsiBase)
return plan, s.makeCompletionItems(cleaned, plan.inParams, current, p, docStr), true
}</span>
- <span class="cov6" title="9">if isBareDoubleOpen(current, openChar, closeChar) || isBareDoubleOpen(below, openChar, closeChar) </span><span class="cov0" title="0">{
+ <span class="cov6" title="10">if isBareDoubleOpen(current, openChar, closeChar) || isBareDoubleOpen(below, openChar, closeChar) </span><span class="cov0" title="0">{
logging.Logf("lsp ", "%scompletion skip=empty-double-semicolon line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
return plan, []CompletionItem{}, true
}</span>
- <span class="cov6" title="9">if !plan.inParams &amp;&amp; !s.prefixHeuristicAllows(plan.inlinePrompt, current, p, plan.manualInvoke) </span><span class="cov0" title="0">{
+ <span class="cov6" title="10">if !plan.inParams &amp;&amp; !s.prefixHeuristicAllows(plan.inlinePrompt, current, p, plan.manualInvoke) </span><span class="cov0" title="0">{
logging.Logf("lsp ", "%scompletion skip=short-prefix line=%d char=%d current=%q%s", logging.AnsiYellow, p.Position.Line, p.Position.Character, trimLen(current), logging.AnsiBase)
return plan, []CompletionItem{}, true
}</span>
- <span class="cov6" title="9">return plan, nil, false</span>
+ <span class="cov6" title="10">return plan, nil, false</span>
}
-func (s *Server) executeChatCompletion(ctx context.Context, plan completionPlan) ([]CompletionItem, bool) <span class="cov6" title="8">{
+func (s *Server) executeChatCompletion(ctx context.Context, plan completionPlan) ([]CompletionItem, bool) <span class="cov6" title="9">{
messages := s.buildCompletionMessages(plan.inlinePrompt, plan.hasExtra, plan.extraText, plan.inParams, plan.params, plan.above, plan.current, plan.below, plan.funcCtx)
sentSize := 0
- for _, m := range messages </span><span class="cov7" title="16">{
+ for _, m := range messages </span><span class="cov7" title="18">{
sentSize += len(m.Content)
}</span>
- <span class="cov6" title="8">s.incSentCounters(sentSize)
+ <span class="cov6" title="9">s.incSentCounters(sentSize)
opts := s.llmRequestOpts()
s.waitForDebounce(ctx)
if !s.waitForThrottle(ctx) </span><span class="cov0" title="0">{
return nil, false
}</span>
- <span class="cov6" title="8">client := s.currentLLMClient()
+ <span class="cov6" title="9">client := s.currentLLMClient()
if client == nil </span><span class="cov0" title="0">{
return nil, false
}</span>
- <span class="cov6" title="8">logging.Logf("lsp ", "completion llm=requesting model=%s", client.DefaultModel())
+ <span class="cov6" title="9">logging.Logf("lsp ", "completion llm=requesting model=%s", client.DefaultModel())
text, err := client.Chat(ctx, messages, opts...)
if err != nil </span><span class="cov0" title="0">{
logging.Logf("lsp ", "llm completion error: %v", err)
s.logLLMStats()
return nil, false
}</span>
- <span class="cov6" title="8">s.incRecvCounters(len(text))
+ <span class="cov6" title="9">s.incRecvCounters(len(text))
s.logLLMStats()
trimmed := strings.TrimSpace(text)
cleaned := s.postProcessCompletion(trimmed, plan.current[:plan.params.Position.Character], plan.current)
if cleaned == "" </span><span class="cov0" title="0">{
return nil, false
}</span>
- <span class="cov6" title="8">s.completionCachePut(plan.cacheKey, cleaned)
+ <span class="cov6" title="9">s.completionCachePut(plan.cacheKey, cleaned)
items := s.makeCompletionItems(cleaned, plan.inParams, plan.current, plan.params, plan.docStr)
return items, true</span>
}
// parseManualInvoke inspects the LSP completion context and reports whether the user manually invoked completion.
-func parseManualInvoke(ctx any) bool <span class="cov6" title="11">{
+func parseManualInvoke(ctx any) bool <span class="cov6" title="12">{
if ctx == nil </span><span class="cov4" title="5">{
return false
}</span>
- <span class="cov5" title="6">var c struct {
+ <span class="cov5" title="7">var c struct {
TriggerKind int `json:"triggerKind"`
}
if raw, ok := ctx.(json.RawMessage); ok </span><span class="cov4" title="5">{
_ = json.Unmarshal(raw, &amp;c)
- }</span> else<span class="cov1" title="1"> {
+ }</span> else<span class="cov2" title="2"> {
b, _ := json.Marshal(ctx)
_ = json.Unmarshal(b, &amp;c)
}</span>
- <span class="cov5" title="6">return c.TriggerKind == 1</span>
+ <span class="cov5" title="7">return c.TriggerKind == 1</span>
}
// shouldSuppressForChatTriggerEOL returns true when a chat trigger like "&gt;" follows ?, !, :, or ; at EOL.
-func (s *Server) shouldSuppressForChatTriggerEOL(current string, p CompletionParams) bool <span class="cov7" title="15">{
+func (s *Server) shouldSuppressForChatTriggerEOL(current string, p CompletionParams) bool <span class="cov7" title="16">{
t := strings.TrimRight(current, " \t")
suffix, prefixes, _ := s.chatConfig()
if suffix == "" </span><span class="cov1" title="1">{
return false
}</span>
- <span class="cov7" title="14">if strings.HasSuffix(t, suffix) </span><span class="cov4" title="4">{
+ <span class="cov7" title="15">if strings.HasSuffix(t, suffix) </span><span class="cov4" title="5">{
if len(t) &lt; len(suffix)+1 </span><span class="cov0" title="0">{
return false
}</span>
- <span class="cov4" title="4">prev := string(t[len(t)-len(suffix)-1])
- for _, pf := range prefixes </span><span class="cov6" title="10">{
+ <span class="cov4" title="5">prev := string(t[len(t)-len(suffix)-1])
+ for _, pf := range prefixes </span><span class="cov7" title="14">{
if prev == pf </span><span class="cov2" title="2">{
logging.Logf("lsp ", "completion skip=chat-trigger-eol uri=%s line=%d", p.TextDocument.URI, p.Position.Line)
return true
}</span>
}
}
- <span class="cov7" title="12">return false</span>
+ <span class="cov7" title="13">return false</span>
}
// prefixHeuristicAllows applies minimal prefix rules unless inlinePrompt or structural triggers apply.
-func (s *Server) prefixHeuristicAllows(inlinePrompt bool, current string, p CompletionParams, manualInvoke bool) bool <span class="cov7" title="14">{
+func (s *Server) prefixHeuristicAllows(inlinePrompt bool, current string, p CompletionParams, manualInvoke bool) bool <span class="cov7" title="15">{
// Determine the effective cursor index within current line, clamped, and
// skip over trailing spaces/tabs to support cases like "type Matrix| ".
idx := p.Position.Character
if idx &gt; len(current) </span><span class="cov0" title="0">{
idx = len(current)
}</span>
- <span class="cov7" title="14">allowNoPrefix := inlinePrompt
- if idx &gt; 0 </span><span class="cov7" title="12">{
+ <span class="cov7" title="15">allowNoPrefix := inlinePrompt
+ if idx &gt; 0 </span><span class="cov7" title="13">{
ch := current[idx-1]
if ch == '.' || ch == ':' || ch == '/' || ch == '_' || ch == ')' </span><span class="cov4" title="5">{
allowNoPrefix = true
}</span>
}
- <span class="cov7" title="14">if allowNoPrefix </span><span class="cov5" title="7">{
+ <span class="cov7" title="15">if allowNoPrefix </span><span class="cov6" title="8">{
return true
}</span>
// Walk left over whitespace
@@ -5410,10 +5410,10 @@ func (s *Server) prefixHeuristicAllows(inlinePrompt bool, current string, p Comp
}
// tryProviderNativeCompletion attempts provider-native completion and returns items when successful.
-func (s *Server) tryProviderNativeCompletion(current string, p CompletionParams, above, below, funcCtx, docStr string, hasExtra bool, extraText string, inParams bool) ([]CompletionItem, bool) <span class="cov7" title="12">{
+func (s *Server) tryProviderNativeCompletion(current string, p CompletionParams, above, below, funcCtx, docStr string, hasExtra bool, extraText string, inParams bool) ([]CompletionItem, bool) <span class="cov7" title="13">{
client := s.currentLLMClient()
cc, ok := client.(llm.CodeCompleter)
- if !ok </span><span class="cov5" title="6">{
+ if !ok </span><span class="cov5" title="7">{
return nil, false
}</span>
<span class="cov5" title="6">before, after := s.docBeforeAfter(p.TextDocument.URI, p.Position)
@@ -5484,9 +5484,9 @@ func (s *Server) tryProviderNativeCompletion(current string, p CompletionParams,
// waitForDebounce sleeps until there has been no input activity for at least
// completionDebounce. If debounce is zero or ctx is done, it returns promptly.
-func (s *Server) waitForDebounce(ctx context.Context) <span class="cov10" title="41">{
+func (s *Server) waitForDebounce(ctx context.Context) <span class="cov10" title="42">{
d := s.completionDebounce()
- if d &lt;= 0 </span><span class="cov9" title="39">{
+ if d &lt;= 0 </span><span class="cov9" title="40">{
return
}</span>
<span class="cov2" title="2">for </span><span class="cov4" title="4">{
@@ -5514,9 +5514,9 @@ func (s *Server) waitForDebounce(ctx context.Context) <span class="cov10" title=
// waitForThrottle enforces a minimum spacing between LLM calls. Returns false
// if the context is canceled while waiting.
-func (s *Server) waitForThrottle(ctx context.Context) bool <span class="cov10" title="41">{
+func (s *Server) waitForThrottle(ctx context.Context) bool <span class="cov10" title="42">{
interval := s.completionThrottle()
- if interval &lt;= 0 </span><span class="cov9" title="38">{
+ if interval &lt;= 0 </span><span class="cov9" title="39">{
return true
}</span>
<span class="cov3" title="3">var wait time.Duration
@@ -5545,7 +5545,7 @@ func (s *Server) waitForThrottle(ctx context.Context) bool <span class="cov10" t
}
// buildCompletionMessages constructs the LLM messages for completion.
-func (s *Server) buildCompletionMessages(inlinePrompt, hasExtra bool, extraText string, inParams bool, p CompletionParams, above, current, below, funcCtx string) []llm.Message <span class="cov7" title="14">{
+func (s *Server) buildCompletionMessages(inlinePrompt, hasExtra bool, extraText string, inParams bool, p CompletionParams, above, current, below, funcCtx string) []llm.Message <span class="cov7" title="15">{
vars := map[string]string{
"file": p.TextDocument.URI,
"function": funcCtx,
@@ -5561,10 +5561,10 @@ func (s *Server) buildCompletionMessages(inlinePrompt, hasExtra bool, extraText
sys = cfg.PromptCompletionSystemParams
userTpl = cfg.PromptCompletionUserParams
}</span>
- <span class="cov7" title="14">if inlinePrompt &amp;&amp; strings.TrimSpace(cfg.PromptCompletionSystemInline) != "" </span><span class="cov2" title="2">{
+ <span class="cov7" title="15">if inlinePrompt &amp;&amp; strings.TrimSpace(cfg.PromptCompletionSystemInline) != "" </span><span class="cov2" title="2">{
sys = cfg.PromptCompletionSystemInline
}</span>
- <span class="cov7" title="14">user := renderTemplate(userTpl, vars)
+ <span class="cov7" title="15">user := renderTemplate(userTpl, vars)
messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
if hasExtra &amp;&amp; strings.TrimSpace(extraText) != "" </span><span class="cov1" title="1">{
extra := renderTemplate(cfg.PromptCompletionExtraHeader, map[string]string{"context": extraText})
@@ -5573,30 +5573,30 @@ func (s *Server) buildCompletionMessages(inlinePrompt, hasExtra bool, extraText
}</span>
<span class="cov1" title="1">messages = append(messages, llm.Message{Role: "user", Content: extra})</span>
}
- <span class="cov7" title="14">return messages</span>
+ <span class="cov7" title="15">return messages</span>
}
// postProcessCompletion normalizes and deduplicates completion text and applies indentation rules.
-func (s *Server) postProcessCompletion(text string, leftOfCursor string, currentLine string) string <span class="cov6" title="11">{
+func (s *Server) postProcessCompletion(text string, leftOfCursor string, currentLine string) string <span class="cov6" title="12">{
cleaned := stripCodeFences(text)
if cleaned != "" &amp;&amp; strings.ContainsRune(cleaned, '`') </span><span class="cov0" title="0">{
if inline := stripInlineCodeSpan(cleaned); strings.TrimSpace(inline) != "" </span><span class="cov0" title="0">{
cleaned = inline
}</span>
}
- <span class="cov6" title="11">if cleaned != "" </span><span class="cov6" title="11">{
+ <span class="cov6" title="12">if cleaned != "" </span><span class="cov6" title="12">{
cleaned = stripDuplicateAssignmentPrefix(leftOfCursor, cleaned)
}</span>
- <span class="cov6" title="11">if cleaned != "" </span><span class="cov6" title="11">{
+ <span class="cov6" title="12">if cleaned != "" </span><span class="cov6" title="12">{
cleaned = stripDuplicateGeneralPrefix(leftOfCursor, cleaned)
}</span>
- <span class="cov6" title="11">_, _, openChar, closeChar := s.inlineMarkers()
- if cleaned != "" &amp;&amp; hasDoubleOpenTrigger(currentLine, openChar, closeChar) </span><span class="cov1" title="1">{
+ <span class="cov6" title="12">_, _, openChar, closeChar := s.inlineMarkers()
+ if cleaned != "" &amp;&amp; hasDoubleOpenTrigger(currentLine, openChar, closeChar) </span><span class="cov2" title="2">{
if indent := leadingIndent(currentLine); indent != "" </span><span class="cov1" title="1">{
cleaned = applyIndent(indent, cleaned)
}</span>
}
- <span class="cov6" title="11">return cleaned</span>
+ <span class="cov6" title="12">return cleaned</span>
}
</pre>
@@ -5696,7 +5696,11 @@ func (s *Server) detectAndHandleChat(uri string) <span class="cov7" title="11">{
_, _, openChar, closeChar := s.inlineMarkers()
for i, raw := range d.lines </span><span class="cov10" title="23">{
if lineHasInlinePrompt(raw, openChar, closeChar) </span><span class="cov0" title="0">{
- continue</span>
+ if s.currentLLMClient() != nil </span><span class="cov0" title="0">{
+ pos := Position{Line: i, Character: len(raw)}
+ go s.runInlinePrompt(uri, pos)
+ }</span>
+ <span class="cov0" title="0">continue</span>
}
// Find last non-space character index
<span class="cov10" title="23">j := len(raw) - 1
@@ -5812,6 +5816,47 @@ func (s *Server) applyChatEdits(uri string, lineIdx int, lastNonSpace int, remov
s.clientApplyEdit("Hexai: insert chat response", we)</span>
}
+func (s *Server) runInlinePrompt(uri string, pos Position) <span class="cov0" title="0">{
+ if s.currentLLMClient() == nil </span><span class="cov0" title="0">{
+ return
+ }</span>
+ <span class="cov0" title="0">d := s.getDocument(uri)
+ if d == nil || pos.Line &lt; 0 || pos.Line &gt;= len(d.lines) </span><span class="cov0" title="0">{
+ return
+ }</span>
+ <span class="cov0" title="0">line := d.lines[pos.Line]
+ _, _, openChar, closeChar := s.inlineMarkers()
+ if !lineHasInlinePrompt(line, openChar, closeChar) </span><span class="cov0" title="0">{
+ return
+ }</span>
+ <span class="cov0" title="0">p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: uri}, Position: Position{Line: pos.Line, Character: len(line)}}
+ p.Context = map[string]int{"triggerKind": 1}
+ above, current, below, funcCtx := s.lineContext(uri, p.Position)
+ docStr := s.buildDocString(p, above, current, below, funcCtx)
+ newFunc := s.isDefiningNewFunction(uri, p.Position)
+ extra, hasExtra := s.buildAdditionalContext(newFunc, uri, p.Position)
+ items, ok := s.tryLLMCompletion(p, above, current, below, funcCtx, docStr, hasExtra, extra)
+ if !ok || len(items) == 0 </span><span class="cov0" title="0">{
+ return
+ }</span>
+ <span class="cov0" title="0">s.applyInlineCompletion(uri, items[0])</span>
+}
+
+func (s *Server) applyInlineCompletion(uri string, item CompletionItem) <span class="cov0" title="0">{
+ var edits []TextEdit
+ if len(item.AdditionalTextEdits) &gt; 0 </span><span class="cov0" title="0">{
+ edits = append(edits, item.AdditionalTextEdits...)
+ }</span>
+ <span class="cov0" title="0">if item.TextEdit != nil </span><span class="cov0" title="0">{
+ edits = append(edits, *item.TextEdit)
+ }</span>
+ <span class="cov0" title="0">if len(edits) == 0 </span><span class="cov0" title="0">{
+ return
+ }</span>
+ <span class="cov0" title="0">we := WorkspaceEdit{Changes: map[string][]TextEdit{uri: edits}}
+ s.clientApplyEdit("Hexai: inline prompt", we)</span>
+}
+
// buildChatHistory walks upwards from the current line to collect the most recent
// Q/A pairs in the in-editor transcript. Returns messages ending with current prompt.
func (s *Server) buildChatHistory(uri string, lineIdx int, currentPrompt string) []llm.Message <span class="cov7" title="9">{
@@ -6068,7 +6113,7 @@ import (
)
// llmRequestOpts builds request options from server settings.
-func (s *Server) llmRequestOpts() []llm.RequestOption <span class="cov7" title="35">{
+func (s *Server) llmRequestOpts() []llm.RequestOption <span class="cov7" title="36">{
maxTokens := s.maxTokens()
client := s.currentLLMClient()
tempPtr := s.codingTemperature()
@@ -6084,63 +6129,63 @@ func (s *Server) llmRequestOpts() []llm.RequestOption <span class="cov7" title="
}
<span class="cov1" title="1">opts = append(opts, llm.WithTemperature(temp))</span>
}
- <span class="cov7" title="35">return opts</span>
+ <span class="cov7" title="36">return opts</span>
}
// small helpers for LLM traffic stats
-func (s *Server) incSentCounters(n int) <span class="cov8" title="41">{
+func (s *Server) incSentCounters(n int) <span class="cov7" title="42">{
s.mu.Lock()
s.llmReqTotal++
s.llmSentBytesTotal += int64(n)
s.mu.Unlock()
}</span>
-func (s *Server) incRecvCounters(n int) <span class="cov8" title="38">{
+func (s *Server) incRecvCounters(n int) <span class="cov7" title="39">{
s.mu.Lock()
s.llmRespTotal++
s.llmRespBytesTotal += int64(n)
s.mu.Unlock()
}</span>
-func (s *Server) logLLMStats() <span class="cov8" title="41">{
+func (s *Server) logLLMStats() <span class="cov7" title="42">{
s.mu.RLock()
avgSent := int64(0)
- if s.llmReqTotal &gt; 0 </span><span class="cov8" title="41">{
+ if s.llmReqTotal &gt; 0 </span><span class="cov7" title="42">{
avgSent = s.llmSentBytesTotal / s.llmReqTotal
}</span>
- <span class="cov8" title="41">avgRecv := int64(0)
- if s.llmRespTotal &gt; 0 </span><span class="cov8" title="38">{
+ <span class="cov7" title="42">avgRecv := int64(0)
+ if s.llmRespTotal &gt; 0 </span><span class="cov7" title="39">{
avgRecv = s.llmRespBytesTotal / s.llmRespTotal
}</span>
- <span class="cov8" title="41">reqs, sentTot, recvTot := s.llmReqTotal, s.llmSentBytesTotal, s.llmRespBytesTotal
+ <span class="cov7" title="42">reqs, sentTot, recvTot := s.llmReqTotal, s.llmSentBytesTotal, s.llmRespBytesTotal
s.mu.RUnlock()
mins := time.Since(s.startTime).Minutes()
if mins &lt;= 0 </span><span class="cov0" title="0">{
mins = 0.001
}</span>
- <span class="cov8" title="41">rpmLocal := float64(reqs) / mins
+ <span class="cov7" title="42">rpmLocal := float64(reqs) / mins
sentPerMin := float64(sentTot) / mins
recvPerMin := float64(recvTot) / mins
// Log local process counters
logging.Logf("lsp ", "llm stats (local) reqs=%d avg_sent=%d avg_recv=%d sent_total=%d recv_total=%d rpm=%.2f sent_per_min=%.0f recv_per_min=%.0f", reqs, avgSent, avgRecv, sentTot, recvTot, rpmLocal, sentPerMin, recvPerMin)
// Global snapshot for tmux status
snap, err := stats.TakeSnapshot()
- if err == nil </span><span class="cov8" title="41">{
- if client := s.currentLLMClient(); client != nil </span><span class="cov8" title="40">{
+ if err == nil </span><span class="cov7" title="42">{
+ if client := s.currentLLMClient(); client != nil </span><span class="cov7" title="41">{
provider := client.Name()
model := client.DefaultModel()
// Per-scope rpm estimated from window
scopeReqs := int64(0)
- if pe, ok := snap.Providers[provider]; ok </span><span class="cov8" title="40">{
- if mc, ok2 := pe.Models[model]; ok2 </span><span class="cov8" title="40">{
+ if pe, ok := snap.Providers[provider]; ok </span><span class="cov7" title="41">{
+ if mc, ok2 := pe.Models[model]; ok2 </span><span class="cov7" title="40">{
scopeReqs = mc.Reqs
}</span>
}
- <span class="cov8" title="40">minsWin := snap.Window.Minutes()
+ <span class="cov7" title="41">minsWin := snap.Window.Minutes()
if minsWin &lt;= 0 </span><span class="cov0" title="0">{
minsWin = 0.001
}</span>
- <span class="cov8" title="40">scopeRPM := float64(scopeReqs) / minsWin
+ <span class="cov7" title="41">scopeRPM := float64(scopeReqs) / minsWin
status := tmx.FormatGlobalStatusColored(snap.Global.Reqs, snap.RPM, snap.Global.Sent, snap.Global.Recv, provider, model, scopeRPM, scopeReqs, snap.Window)
_ = tmx.SetStatus(status)</span>
}
@@ -6148,8 +6193,8 @@ func (s *Server) logLLMStats() <span class="cov8" title="41">{
}
// Completion prompt builders and filters
-func inParamList(current string, cursor int) bool <span class="cov5" title="13">{
- if !strings.Contains(current, "func ") </span><span class="cov4" title="7">{
+func inParamList(current string, cursor int) bool <span class="cov5" title="14">{
+ if !strings.Contains(current, "func ") </span><span class="cov4" title="8">{
return false
}</span>
<span class="cov4" title="6">open := strings.Index(current, "(")
@@ -6158,78 +6203,78 @@ func inParamList(current string, cursor int) bool <span class="cov5" title="13">
}
// renderTemplate performs simple {{var}} replacement in a template string.
-func renderTemplate(t string, vars map[string]string) string <span class="cov8" title="42">{ return textutil.RenderTemplate(t, vars) }</span>
+func renderTemplate(t string, vars map[string]string) string <span class="cov7" title="43">{ return textutil.RenderTemplate(t, vars) }</span>
-func computeTextEditAndFilter(cleaned string, inParams bool, current string, p CompletionParams) (*TextEdit, string) <span class="cov6" title="18">{
- if inParams </span><span class="cov3" title="3">{
+func computeTextEditAndFilter(cleaned string, inParams bool, current string, p CompletionParams) (*TextEdit, string) <span class="cov6" title="19">{
+ if inParams </span><span class="cov2" title="3">{
open := strings.Index(current, "(")
close := strings.Index(current, ")")
- if open &gt;= 0 </span><span class="cov3" title="3">{
+ if open &gt;= 0 </span><span class="cov2" title="3">{
left := open + 1
right := len(current)
- if close &gt;= 0 &amp;&amp; close &gt;= left </span><span class="cov3" title="3">{
+ if close &gt;= 0 &amp;&amp; close &gt;= left </span><span class="cov2" title="3">{
right = close
}</span>
- <span class="cov3" title="3">if p.Position.Character &lt; right </span><span class="cov2" title="2">{
+ <span class="cov2" title="3">if p.Position.Character &lt; right </span><span class="cov2" title="2">{
right = p.Position.Character
}</span>
- <span class="cov3" title="3">te := &amp;TextEdit{Range: Range{Start: Position{Line: p.Position.Line, Character: left}, End: Position{Line: p.Position.Line, Character: right}}, NewText: cleaned}
+ <span class="cov2" title="3">te := &amp;TextEdit{Range: Range{Start: Position{Line: p.Position.Line, Character: left}, End: Position{Line: p.Position.Line, Character: right}}, NewText: cleaned}
var filter string
- if left &gt;= 0 &amp;&amp; right &gt;= left &amp;&amp; right &lt;= len(current) </span><span class="cov3" title="3">{
+ if left &gt;= 0 &amp;&amp; right &gt;= left &amp;&amp; right &lt;= len(current) </span><span class="cov2" title="3">{
filter = strings.TrimLeft(current[left:right], " \t")
}</span>
- <span class="cov3" title="3">return te, filter</span>
+ <span class="cov2" title="3">return te, filter</span>
}
}
- <span class="cov6" title="15">startChar := computeWordStart(current, p.Position.Character)
+ <span class="cov6" title="16">startChar := computeWordStart(current, p.Position.Character)
te := &amp;TextEdit{Range: Range{Start: Position{Line: p.Position.Line, Character: startChar}, End: Position{Line: p.Position.Line, Character: p.Position.Character}}, NewText: cleaned}
filter := strings.TrimLeft(current[startChar:p.Position.Character], " \t")
return te, filter</span>
}
-func computeWordStart(current string, at int) int <span class="cov7" title="25">{
+func computeWordStart(current string, at int) int <span class="cov6" title="26">{
if at &gt; len(current) </span><span class="cov0" title="0">{
at = len(current)
}</span>
- <span class="cov7" title="25">for at &gt; 0 </span><span class="cov8" title="50">{
+ <span class="cov6" title="26">for at &gt; 0 </span><span class="cov8" title="51">{
ch := current[at-1]
if (ch &gt;= 'a' &amp;&amp; ch &lt;= 'z') || (ch &gt;= 'A' &amp;&amp; ch &lt;= 'Z') || (ch &gt;= '0' &amp;&amp; ch &lt;= '9') || ch == '_' </span><span class="cov7" title="31">{
at--
continue</span>
}
- <span class="cov6" title="19">break</span>
+ <span class="cov6" title="20">break</span>
}
- <span class="cov7" title="25">return at</span>
+ <span class="cov6" title="26">return at</span>
}
-func isIdentChar(ch byte) bool <span class="cov7" title="26">{
+func isIdentChar(ch byte) bool <span class="cov6" title="26">{
return (ch &gt;= 'a' &amp;&amp; ch &lt;= 'z') || (ch &gt;= 'A' &amp;&amp; ch &lt;= 'Z') || (ch &gt;= '0' &amp;&amp; ch &lt;= '9') || ch == '_'
}</span>
// chatWithStats wraps llmClient.Chat to increment counters and emit a tmux heartbeat.
-func (s *Server) chatWithStats(ctx context.Context, msgs []llm.Message, opts ...llm.RequestOption) (string, error) <span class="cov7" title="26">{
+func (s *Server) chatWithStats(ctx context.Context, msgs []llm.Message, opts ...llm.RequestOption) (string, error) <span class="cov6" title="26">{
// Count bytes sent
sent := 0
for _, m := range msgs </span><span class="cov8" title="55">{
sent += len(m.Content)
}</span>
- <span class="cov7" title="26">s.incSentCounters(sent)
+ <span class="cov6" title="26">s.incSentCounters(sent)
// Debounce/throttle if configured (reuse completion gates)
s.waitForDebounce(ctx)
if !s.waitForThrottle(ctx) </span><span class="cov0" title="0">{
return "", context.Canceled
}</span>
// Perform request
- <span class="cov7" title="26">client := s.currentLLMClient()
+ <span class="cov6" title="26">client := s.currentLLMClient()
if client == nil </span><span class="cov0" title="0">{
return "", fmt.Errorf("llm client unavailable")
}</span>
- <span class="cov7" title="26">txt, err := client.Chat(ctx, msgs, opts...)
+ <span class="cov6" title="26">txt, err := client.Chat(ctx, msgs, opts...)
if err != nil </span><span class="cov1" title="1">{
s.logLLMStats()
return "", err
}</span>
- <span class="cov7" title="25">s.incRecvCounters(len(txt))
+ <span class="cov6" title="25">s.incRecvCounters(len(txt))
// Update global stats cache
_ = stats.Update(ctx, client.Name(), client.DefaultModel(), sent, len(txt))
s.logLLMStats()
@@ -6238,23 +6283,23 @@ func (s *Server) chatWithStats(ctx context.Context, msgs []llm.Message, opts ...
// Inline prompt utilities
-func lineHasInlinePrompt(line string, open, close byte) bool <span class="cov8" title="44">{
- if _, _, _, ok := findStrictInlineTag(line, open, close); ok </span><span class="cov3" title="4">{
+func lineHasInlinePrompt(line string, open, close byte) bool <span class="cov7" title="45">{
+ if _, _, _, ok := findStrictInlineTag(line, open, close); ok </span><span class="cov3" title="5">{
return true
}</span>
- <span class="cov8" title="40">return hasDoubleOpenTrigger(line, open, close)</span>
+ <span class="cov7" title="40">return hasDoubleOpenTrigger(line, open, close)</span>
}
-func leadingIndent(line string) string <span class="cov3" title="4">{
+func leadingIndent(line string) string <span class="cov3" title="5">{
i := 0
- for i &lt; len(line) </span><span class="cov6" title="14">{
+ for i &lt; len(line) </span><span class="cov5" title="15">{
if line[i] == ' ' || line[i] == '\t' </span><span class="cov5" title="10">{
i++
continue</span>
}
- <span class="cov3" title="4">break</span>
+ <span class="cov3" title="5">break</span>
}
- <span class="cov3" title="4">if i == 0 </span><span class="cov0" title="0">{
+ <span class="cov3" title="5">if i == 0 </span><span class="cov1" title="1">{
return ""
}</span>
<span class="cov3" title="4">return line[:i]</span>
@@ -6269,10 +6314,10 @@ func applyIndent(indent, suggestion string) string <span class="cov3" title="4">
if strings.TrimSpace(ln) == "" </span><span class="cov1" title="1">{
continue</span>
}
- <span class="cov5" title="9">if strings.HasPrefix(ln, indent) </span><span class="cov0" title="0">{
+ <span class="cov4" title="9">if strings.HasPrefix(ln, indent) </span><span class="cov0" title="0">{
continue</span>
}
- <span class="cov5" title="9">lines[i] = indent + ln</span>
+ <span class="cov4" title="9">lines[i] = indent + ln</span>
}
<span class="cov3" title="4">return strings.Join(lines, "\n")</span>
}
@@ -6282,36 +6327,36 @@ func applyIndent(indent, suggestion string) string <span class="cov3" title="4">
// findStrictInlineTag finds &gt;text&gt; (configurable), with no space after the first
// opening marker and no space immediately before the closing marker. Returns the
// text between markers, the start index, the end index just after closing, and ok.
-func findStrictInlineTag(line string, open, close byte) (string, int, int, bool) <span class="cov9" title="75">{
+func findStrictInlineTag(line string, open, close byte) (string, int, int, bool) <span class="cov8" title="76">{
pos := 0
- for pos &lt; len(line) </span><span class="cov9" title="87">{
+ for pos &lt; len(line) </span><span class="cov9" title="89">{
// find opening marker
j := strings.IndexByte(line[pos:], open)
- if j &lt; 0 </span><span class="cov8" title="39">{
+ if j &lt; 0 </span><span class="cov7" title="39">{
return "", 0, 0, false
}</span>
- <span class="cov8" title="48">j += pos
+ <span class="cov8" title="50">j += pos
// ensure single open (not double) and non-space after
- if j+1 &gt;= len(line) || line[j+1] == open || line[j+1] == ' ' </span><span class="cov7" title="31">{
+ if j+1 &gt;= len(line) || line[j+1] == open || line[j+1] == ' ' </span><span class="cov7" title="32">{
pos = j + 1
continue</span>
}
// find closing marker
- <span class="cov6" title="17">k := strings.IndexByte(line[j+1:], close)
+ <span class="cov6" title="18">k := strings.IndexByte(line[j+1:], close)
if k &lt; 0 </span><span class="cov1" title="1">{
return "", 0, 0, false
}</span>
- <span class="cov6" title="16">closeIdx := j + 1 + k
+ <span class="cov6" title="17">closeIdx := j + 1 + k
if closeIdx-1 &lt; 0 || line[closeIdx-1] == ' ' </span><span class="cov1" title="1">{
pos = closeIdx + 1
continue</span>
}
- <span class="cov6" title="15">inner := strings.TrimSpace(line[j+1 : closeIdx])
+ <span class="cov6" title="16">inner := strings.TrimSpace(line[j+1 : closeIdx])
if inner == "" </span><span class="cov0" title="0">{
pos = closeIdx + 1
continue</span>
}
- <span class="cov6" title="15">end := closeIdx + 1
+ <span class="cov6" title="16">end := closeIdx + 1
return inner, j, end, true</span>
}
<span class="cov6" title="20">return "", 0, 0, false</span>
@@ -6320,14 +6365,14 @@ func findStrictInlineTag(line string, open, close byte) (string, int, int, bool)
// isBareDoubleSemicolon reports whether the line contains a standalone
// double-semicolon marker with no inline content (";;" possibly with only
// whitespace after it). It explicitly excludes the valid form ";;text;".
-func isBareDoubleOpen(line string, open, close byte) bool <span class="cov6" title="20">{
+func isBareDoubleOpen(line string, open, close byte) bool <span class="cov6" title="22">{
t := strings.TrimSpace(line)
// check for double-open pattern
dbl := string([]byte{open, open})
- if !strings.Contains(t, dbl) </span><span class="cov6" title="18">{
+ if !strings.Contains(t, dbl) </span><span class="cov6" title="19">{
return false
}</span>
- <span class="cov2" title="2">if hasDoubleOpenTrigger(t, open, close) </span><span class="cov1" title="1">{
+ <span class="cov2" title="3">if hasDoubleOpenTrigger(t, open, close) </span><span class="cov2" title="2">{
return false
}</span>
<span class="cov1" title="1">if strings.HasPrefix(t, dbl) </span><span class="cov1" title="1">{
@@ -6340,7 +6385,7 @@ func isBareDoubleOpen(line string, open, close byte) bool <span class="cov6" tit
}
// stripDuplicateAssignmentPrefix removes a duplicated assignment prefix from the suggestion.
-func stripDuplicateAssignmentPrefix(prefixBeforeCursor, suggestion string) string <span class="cov6" title="20">{
+func stripDuplicateAssignmentPrefix(prefixBeforeCursor, suggestion string) string <span class="cov6" title="21">{
s2 := strings.TrimLeft(suggestion, " \t")
// Prefer := if present at end of prefix
if idx := strings.LastIndex(prefixBeforeCursor, ":="); idx &gt;= 0 &amp;&amp; idx+2 &lt;= len(prefixBeforeCursor) </span><span class="cov3" title="4">{
@@ -6358,7 +6403,7 @@ func stripDuplicateAssignmentPrefix(prefixBeforeCursor, suggestion string) strin
}
}
// Fallback to plain '=' if present
- <span class="cov6" title="16">if idx := strings.LastIndex(prefixBeforeCursor, "="); idx &gt;= 0 </span><span class="cov2" title="2">{
+ <span class="cov6" title="17">if idx := strings.LastIndex(prefixBeforeCursor, "="); idx &gt;= 0 </span><span class="cov2" title="2">{
if !(idx &gt; 0 &amp;&amp; prefixBeforeCursor[idx-1] == ':') </span><span class="cov2" title="2">{ // not :=
tail := prefixBeforeCursor[idx+1:]
if strings.TrimSpace(tail) == "" </span><span class="cov2" title="2">{
@@ -6374,40 +6419,40 @@ func stripDuplicateAssignmentPrefix(prefixBeforeCursor, suggestion string) strin
}
}
}
- <span class="cov6" title="14">return suggestion</span>
+ <span class="cov5" title="15">return suggestion</span>
}
// stripDuplicateGeneralPrefix removes any already-typed prefix that the model repeated.
-func stripDuplicateGeneralPrefix(prefixBeforeCursor, suggestion string) string <span class="cov6" title="20">{
+func stripDuplicateGeneralPrefix(prefixBeforeCursor, suggestion string) string <span class="cov6" title="21">{
if suggestion == "" </span><span class="cov0" title="0">{
return suggestion
}</span>
- <span class="cov6" title="20">s := strings.TrimLeft(suggestion, " \t")
+ <span class="cov6" title="21">s := strings.TrimLeft(suggestion, " \t")
p := strings.TrimRight(prefixBeforeCursor, " \t")
- if p != "" &amp;&amp; strings.HasPrefix(s, p) </span><span class="cov4" title="5">{
+ if p != "" &amp;&amp; strings.HasPrefix(s, p) </span><span class="cov3" title="5">{
return strings.TrimLeft(s[len(p):], " \t")
}</span>
- <span class="cov6" title="15">for k := len(p) - 1; k &gt; 0; k-- </span><span class="cov10" title="103">{
- if !isIdentBoundary(p[k-1]) </span><span class="cov9" title="80">{
+ <span class="cov6" title="16">for k := len(p) - 1; k &gt; 0; k-- </span><span class="cov10" title="146">{
+ if !isIdentBoundary(p[k-1]) </span><span class="cov9" title="116">{
continue</span>
}
- <span class="cov7" title="23">suf := strings.TrimLeft(p[k:], " \t")
+ <span class="cov7" title="30">suf := strings.TrimLeft(p[k:], " \t")
if suf == "" </span><span class="cov0" title="0">{
continue</span>
}
- <span class="cov7" title="23">if strings.HasPrefix(s, suf) </span><span class="cov0" title="0">{
+ <span class="cov7" title="30">if strings.HasPrefix(s, suf) </span><span class="cov0" title="0">{
return strings.TrimLeft(s[len(suf):], " \t")
}</span>
}
- <span class="cov6" title="15">return suggestion</span>
+ <span class="cov6" title="16">return suggestion</span>
}
-func isIdentBoundary(ch byte) bool <span class="cov10" title="103">{
+func isIdentBoundary(ch byte) bool <span class="cov10" title="146">{
return !((ch &gt;= 'a' &amp;&amp; ch &lt;= 'z') || (ch &gt;= 'A' &amp;&amp; ch &lt;= 'Z') || (ch &gt;= '0' &amp;&amp; ch &lt;= '9') || ch == '_')
}</span>
// stripCodeFences removes surrounding Markdown code fences from a model response.
-func stripCodeFences(s string) string <span class="cov8" title="45">{ return textutil.StripCodeFences(s) }</span>
+func stripCodeFences(s string) string <span class="cov7" title="46">{ return textutil.StripCodeFences(s) }</span>
// stripInlineCodeSpan returns the contents of the first inline backtick code span if present.
func stripInlineCodeSpan(s string) string <span class="cov5" title="11">{
@@ -6419,7 +6464,7 @@ func stripInlineCodeSpan(s string) string <span class="cov5" title="11">{
if i &lt; 0 </span><span class="cov2" title="2">{
return t
}</span>
- <span class="cov5" title="9">jrel := strings.IndexByte(t[i+1:], '`')
+ <span class="cov4" title="9">jrel := strings.IndexByte(t[i+1:], '`')
if jrel &lt; 0 </span><span class="cov2" title="2">{
return t
}</span>
@@ -6428,25 +6473,25 @@ func stripInlineCodeSpan(s string) string <span class="cov5" title="11">{
}
// labelForCompletion picks a short, readable label for the completion list.
-func labelForCompletion(cleaned, filter string) string <span class="cov6" title="21">{
+func labelForCompletion(cleaned, filter string) string <span class="cov6" title="22">{
label := trimLen(firstLine(cleaned))
- if filter != "" &amp;&amp; !strings.HasPrefix(strings.ToLower(label), strings.ToLower(filter)) </span><span class="cov4" title="5">{
+ if filter != "" &amp;&amp; !strings.HasPrefix(strings.ToLower(label), strings.ToLower(filter)) </span><span class="cov3" title="5">{
return filter
}</span>
- <span class="cov6" title="16">return label</span>
+ <span class="cov6" title="17">return label</span>
}
// extractRangeText returns the exact text within the given document range.
func extractRangeText(d *document, r Range) string <span class="cov4" title="6">{
- if r.Start.Line == r.End.Line </span><span class="cov4" title="5">{
+ if r.Start.Line == r.End.Line </span><span class="cov3" title="5">{
line := d.lines[r.Start.Line]
if r.Start.Character &lt; 0 </span><span class="cov0" title="0">{
r.Start.Character = 0
}</span>
- <span class="cov4" title="5">if r.End.Character &gt; len(line) </span><span class="cov0" title="0">{
+ <span class="cov3" title="5">if r.End.Character &gt; len(line) </span><span class="cov0" title="0">{
r.End.Character = len(line)
}</span>
- <span class="cov4" title="5">if r.Start.Character &gt; r.End.Character </span><span class="cov1" title="1">{
+ <span class="cov3" title="5">if r.Start.Character &gt; r.End.Character </span><span class="cov1" title="1">{
return ""
}</span>
<span class="cov3" title="4">return line[r.Start.Character:r.End.Character]</span>
@@ -6482,61 +6527,61 @@ func extractRangeText(d *document, r Range) string <span class="cov4" title="6">
}
// collectPromptRemovalEdits returns edits to remove all inline prompt markers.
-func (s *Server) collectPromptRemovalEdits(uri string) []TextEdit <span class="cov6" title="14">{
+func (s *Server) collectPromptRemovalEdits(uri string) []TextEdit <span class="cov5" title="15">{
d := s.getDocument(uri)
if d == nil || len(d.lines) == 0 </span><span class="cov5" title="11">{
return nil
}</span>
- <span class="cov3" title="3">var edits []TextEdit
+ <span class="cov3" title="4">var edits []TextEdit
_, _, openChar, closeChar := s.inlineMarkers()
- for i, line := range d.lines </span><span class="cov5" title="12">{
+ for i, line := range d.lines </span><span class="cov5" title="13">{
edits = append(edits, promptRemovalEditsForLine(line, i, openChar, closeChar)...)
}</span>
- <span class="cov3" title="3">return edits</span>
+ <span class="cov3" title="4">return edits</span>
}
-func promptRemovalEditsForLine(line string, lineNum int, open, close byte) []TextEdit <span class="cov6" title="16">{
- if hasDoubleOpenTrigger(line, open, close) </span><span class="cov3" title="4">{
+func promptRemovalEditsForLine(line string, lineNum int, open, close byte) []TextEdit <span class="cov6" title="17">{
+ if hasDoubleOpenTrigger(line, open, close) </span><span class="cov3" title="5">{
return []TextEdit{{Range: Range{Start: Position{Line: lineNum, Character: 0}, End: Position{Line: lineNum, Character: len(line)}}, NewText: ""}}
}</span>
<span class="cov5" title="12">return collectSemicolonMarkers(line, lineNum, open, close)</span>
}
-func hasDoubleOpenTrigger(line string, open, close byte) bool <span class="cov9" title="87">{
+func hasDoubleOpenTrigger(line string, open, close byte) bool <span class="cov9" title="90">{
pos := 0
- for pos &lt; len(line) </span><span class="cov9" title="86">{
+ for pos &lt; len(line) </span><span class="cov9" title="89">{
// look for double-open sequence
dbl := string([]byte{open, open})
j := strings.Index(line[pos:], dbl)
- if j &lt; 0 </span><span class="cov9" title="62">{
+ if j &lt; 0 </span><span class="cov8" title="62">{
return false
}</span>
- <span class="cov7" title="24">j += pos
+ <span class="cov6" title="27">j += pos
contentStart := j + len(dbl)
- if contentStart &gt;= len(line) </span><span class="cov5" title="8">{
+ if contentStart &gt;= len(line) </span><span class="cov4" title="8">{
return false
}</span>
- <span class="cov6" title="16">first := line[contentStart]
- if first == ' ' || first == open </span><span class="cov4" title="5">{
+ <span class="cov6" title="19">first := line[contentStart]
+ if first == ' ' || first == open </span><span class="cov3" title="5">{
pos = contentStart + 1
continue</span>
}
// find closing
- <span class="cov5" title="11">k := strings.IndexByte(line[contentStart+1:], close)
+ <span class="cov5" title="14">k := strings.IndexByte(line[contentStart+1:], close)
if k &lt; 0 </span><span class="cov0" title="0">{
return false
}</span>
- <span class="cov5" title="11">closeIdx := contentStart + 1 + k
+ <span class="cov5" title="14">closeIdx := contentStart + 1 + k
if closeIdx-1 &gt;= 0 &amp;&amp; line[closeIdx-1] == ' ' </span><span class="cov1" title="1">{
pos = closeIdx + 1
continue</span>
}
- <span class="cov5" title="10">return true</span>
+ <span class="cov5" title="13">return true</span>
}
<span class="cov4" title="7">return false</span>
}
-func collectSemicolonMarkers(line string, lineNum int, open, close byte) []TextEdit <span class="cov6" title="14">{
+func collectSemicolonMarkers(line string, lineNum int, open, close byte) []TextEdit <span class="cov5" title="14">{
var edits []TextEdit
startSemi := 0
for startSemi &lt; len(line) </span><span class="cov6" title="18">{
@@ -6573,7 +6618,7 @@ func collectSemicolonMarkers(line string, lineNum int, open, close byte) []TextE
<span class="cov4" title="6">edits = append(edits, TextEdit{Range: Range{Start: Position{Line: lineNum, Character: j}, End: Position{Line: lineNum, Character: endChar}}, NewText: ""})
startSemi = endChar</span>
}
- <span class="cov6" title="14">return edits</span>
+ <span class="cov5" title="14">return edits</span>
}
</pre>
@@ -6684,7 +6729,7 @@ type CustomAction struct {
User string // if set, use this user template
}
-func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server <span class="cov3" title="7">{
+func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server <span class="cov4" title="8">{
s := &amp;Server{in: bufio.NewReader(r), out: w, logger: logger, docs: make(map[string]*document), logContext: opts.LogContext, configStore: opts.ConfigStore}
s.startTime = time.Now()
s.compCache = make(map[string]string)
@@ -6703,21 +6748,21 @@ func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions)
"codeAction/resolve": s.handleCodeActionResolve,
"workspace/executeCommand": s.handleExecuteCommand,
}
- <span class="cov3" title="7">return s</span>
+ <span class="cov4" title="8">return s</span>
}
-func (s *Server) applyOptions(opts ServerOptions) <span class="cov4" title="8">{
+func (s *Server) applyOptions(opts ServerOptions) <span class="cov4" title="9">{
s.mu.Lock()
defer s.mu.Unlock()
s.logContext = opts.LogContext
if opts.ConfigStore != nil </span><span class="cov1" title="1">{
s.configStore = opts.ConfigStore
}</span>
- <span class="cov4" title="8">if opts.Config != nil </span><span class="cov2" title="2">{
+ <span class="cov4" title="9">if opts.Config != nil </span><span class="cov2" title="2">{
s.cfg = *opts.Config
- }</span> else<span class="cov3" title="6"> if opts.ConfigStore != nil </span><span class="cov0" title="0">{
+ }</span> else<span class="cov3" title="7"> if opts.ConfigStore != nil </span><span class="cov0" title="0">{
s.cfg = opts.ConfigStore.Snapshot()
- }</span> else<span class="cov3" title="6"> {
+ }</span> else<span class="cov3" title="7"> {
s.cfg = appconfig.App{}
// populate from legacy ServerOptions fields
s.cfg.MaxTokens = opts.MaxTokens
@@ -6764,7 +6809,7 @@ func (s *Server) applyOptions(opts ServerOptions) <span class="cov4" title="8">{
}
}</span>
}
- <span class="cov4" title="8">s.llmClient = opts.Client</span>
+ <span class="cov4" title="9">s.llmClient = opts.Client</span>
}
// ApplyOptions updates the server's configuration at runtime.
@@ -6772,32 +6817,32 @@ func (s *Server) ApplyOptions(opts ServerOptions) <span class="cov1" title="1">{
s.applyOptions(opts)
}</span>
-func (s *Server) currentLLMClient() llm.Client <span class="cov8" title="199">{
+func (s *Server) currentLLMClient() llm.Client <span class="cov8" title="205">{
s.mu.RLock()
defer s.mu.RUnlock()
return s.llmClient
}</span>
-func (s *Server) currentConfig() appconfig.App <span class="cov10" title="420">{
+func (s *Server) currentConfig() appconfig.App <span class="cov10" title="431">{
if s.configStore != nil </span><span class="cov3" title="5">{
return s.configStore.Snapshot()
}</span>
- <span class="cov9" title="415">s.mu.RLock()
+ <span class="cov9" title="426">s.mu.RLock()
defer s.mu.RUnlock()
return s.cfg</span>
}
-func (s *Server) maxTokens() int <span class="cov6" title="35">{
+func (s *Server) maxTokens() int <span class="cov6" title="36">{
cfg := s.currentConfig()
- if cfg.MaxTokens &lt;= 0 </span><span class="cov6" title="29">{
+ if cfg.MaxTokens &lt;= 0 </span><span class="cov6" title="30">{
return 500
}</span>
<span class="cov3" title="6">return cfg.MaxTokens</span>
}
-func (s *Server) contextMode() string <span class="cov4" title="13">{
+func (s *Server) contextMode() string <span class="cov4" title="14">{
mode := strings.TrimSpace(s.currentConfig().ContextMode)
- if mode == "" </span><span class="cov3" title="4">{
+ if mode == "" </span><span class="cov3" title="5">{
return "file-on-new-func"
}</span>
<span class="cov4" title="9">return mode</span>
@@ -6827,7 +6872,7 @@ func (s *Server) triggerCharacters() []string <span class="cov5" title="27">{
<span class="cov5" title="24">return append([]string{}, cfg.TriggerCharacters...)</span>
}
-func (s *Server) codingTemperature() *float64 <span class="cov6" title="49">{
+func (s *Server) codingTemperature() *float64 <span class="cov6" title="51">{
cfg := s.currentConfig()
return cfg.CodingTemperature
}</span>
@@ -6836,47 +6881,47 @@ func (s *Server) manualInvokeMinPrefix() int <span class="cov3" title="5">{
return s.currentConfig().ManualInvokeMinPrefix
}</span>
-func (s *Server) completionDebounce() time.Duration <span class="cov6" title="41">{
+func (s *Server) completionDebounce() time.Duration <span class="cov6" title="42">{
cfg := s.currentConfig()
- if cfg.CompletionDebounceMs &lt;= 0 </span><span class="cov6" title="39">{
+ if cfg.CompletionDebounceMs &lt;= 0 </span><span class="cov6" title="40">{
return 0
}</span>
<span class="cov2" title="2">return time.Duration(cfg.CompletionDebounceMs) * time.Millisecond</span>
}
-func (s *Server) completionThrottle() time.Duration <span class="cov6" title="41">{
+func (s *Server) completionThrottle() time.Duration <span class="cov6" title="42">{
cfg := s.currentConfig()
- if cfg.CompletionThrottleMs &lt;= 0 </span><span class="cov6" title="38">{
+ if cfg.CompletionThrottleMs &lt;= 0 </span><span class="cov6" title="39">{
return 0
}</span>
<span class="cov2" title="3">return time.Duration(cfg.CompletionThrottleMs) * time.Millisecond</span>
}
-func (s *Server) inlineMarkers() (open string, close string, openChar byte, closeChar byte) <span class="cov7" title="99">{
+func (s *Server) inlineMarkers() (open string, close string, openChar byte, closeChar byte) <span class="cov7" title="102">{
cfg := s.currentConfig()
open = strings.TrimSpace(cfg.InlineOpen)
if open == "" </span><span class="cov2" title="2">{
open = "&gt;"
}</span>
- <span class="cov7" title="99">close = strings.TrimSpace(cfg.InlineClose)
+ <span class="cov7" title="102">close = strings.TrimSpace(cfg.InlineClose)
if close == "" </span><span class="cov2" title="2">{
close = "&gt;"
}</span>
- <span class="cov7" title="99">openChar = '&gt;'
- if len(open) &gt; 0 </span><span class="cov7" title="99">{
+ <span class="cov7" title="102">openChar = '&gt;'
+ if len(open) &gt; 0 </span><span class="cov7" title="102">{
openChar = open[0]
}</span>
- <span class="cov7" title="99">closeChar = '&gt;'
- if len(close) &gt; 0 </span><span class="cov7" title="99">{
+ <span class="cov7" title="102">closeChar = '&gt;'
+ if len(close) &gt; 0 </span><span class="cov7" title="102">{
closeChar = close[0]
}</span>
- <span class="cov7" title="99">return open, close, openChar, closeChar</span>
+ <span class="cov7" title="102">return open, close, openChar, closeChar</span>
}
-func (s *Server) chatConfig() (suffix string, prefixes []string, suffixChar byte) <span class="cov6" title="46">{
+func (s *Server) chatConfig() (suffix string, prefixes []string, suffixChar byte) <span class="cov6" title="47">{
cfg := s.currentConfig()
suffix = cfg.ChatSuffix
- if suffix != "" </span><span class="cov6" title="44">{
+ if suffix != "" </span><span class="cov6" title="45">{
suffix = strings.TrimSpace(suffix)
if suffix == "" </span><span class="cov0" title="0">{
suffix = "&gt;"
@@ -6884,16 +6929,16 @@ func (s *Server) chatConfig() (suffix string, prefixes []string, suffixChar byte
} else<span class="cov2" title="2"> {
suffix = ""
}</span>
- <span class="cov6" title="46">if len(cfg.ChatPrefixes) == 0 </span><span class="cov0" title="0">{
+ <span class="cov6" title="47">if len(cfg.ChatPrefixes) == 0 </span><span class="cov0" title="0">{
prefixes = []string{"?", "!", ":", ";"}
- }</span> else<span class="cov6" title="46"> {
+ }</span> else<span class="cov6" title="47"> {
prefixes = append([]string{}, cfg.ChatPrefixes...)
}</span>
- <span class="cov6" title="46">suffixChar = '&gt;'
- if len(suffix) &gt; 0 </span><span class="cov6" title="44">{
+ <span class="cov6" title="47">suffixChar = '&gt;'
+ if len(suffix) &gt; 0 </span><span class="cov6" title="45">{
suffixChar = suffix[0]
}</span>
- <span class="cov6" title="46">return suffix, prefixes, suffixChar</span>
+ <span class="cov6" title="47">return suffix, prefixes, suffixChar</span>
}
func (s *Server) promptSet() appconfig.App <span class="cov2" title="2">{
@@ -6996,7 +7041,7 @@ func (s *Server) readMessage() ([]byte, error) <span class="cov2" title="2">{
<span class="cov1" title="1">return buf, nil</span>
}
-func (s *Server) writeMessage(v any) <span class="cov10" title="42">{
+func (s *Server) writeMessage(v any) <span class="cov10" title="43">{
s.outMu.Lock()
defer s.outMu.Unlock()
@@ -7005,12 +7050,12 @@ func (s *Server) writeMessage(v any) <span class="cov10" title="42">{
logging.Logf("lsp ", "marshal error: %v", err)
return
}</span>
- <span class="cov10" title="42">header := fmt.Sprintf("Content-Length: %d\r\n\r\n", len(data))
+ <span class="cov10" title="43">header := fmt.Sprintf("Content-Length: %d\r\n\r\n", len(data))
if _, err := io.WriteString(s.out, header); err != nil </span><span class="cov0" title="0">{
logging.Logf("lsp ", "write header error: %v", err)
return
}</span>
- <span class="cov10" title="42">if _, err := s.out.Write(data); err != nil </span><span class="cov0" title="0">{
+ <span class="cov10" title="43">if _, err := s.out.Write(data); err != nil </span><span class="cov0" title="0">{
logging.Logf("lsp ", "write body error: %v", err)
return
}</span>
@@ -7224,9 +7269,9 @@ import (
"golang.org/x/sys/unix"
)
-func tryLockFile(fd uintptr) error <span class="cov10" title="199">{
- if err := unix.Flock(int(fd), unix.LOCK_EX|unix.LOCK_NB); err != nil </span><span class="cov9" title="122">{
- if errors.Is(err, unix.EWOULDBLOCK) </span><span class="cov9" title="122">{
+func tryLockFile(fd uintptr) error <span class="cov10" title="214">{
+ if err := unix.Flock(int(fd), unix.LOCK_EX|unix.LOCK_NB); err != nil </span><span class="cov9" title="137">{
+ if errors.Is(err, unix.EWOULDBLOCK) </span><span class="cov9" title="137">{
return errLockWouldBlock
}</span>
<span class="cov0" title="0">return err</span>
@@ -7270,18 +7315,18 @@ var windowSeconds int64 = int64(defaultWindow.Seconds())
var errLockWouldBlock = errors.New("stats: lock would block")
// SetWindow sets the sliding window used for pruning and aggregation.
-func SetWindow(d time.Duration) <span class="cov5" title="82">{
+func SetWindow(d time.Duration) <span class="cov5" title="83">{
if d &lt; time.Second </span><span class="cov0" title="0">{
d = time.Second
}</span>
- <span class="cov5" title="82">if d &gt; 24*time.Hour </span><span class="cov0" title="0">{
+ <span class="cov5" title="83">if d &gt; 24*time.Hour </span><span class="cov0" title="0">{
d = 24 * time.Hour
}</span>
- <span class="cov5" title="82">atomic.StoreInt64(&amp;windowSeconds, int64(d.Seconds()))</span>
+ <span class="cov5" title="83">atomic.StoreInt64(&amp;windowSeconds, int64(d.Seconds()))</span>
}
// Window returns the current sliding window.
-func Window() time.Duration <span class="cov5" title="77">{ return time.Duration(atomic.LoadInt64(&amp;windowSeconds)) * time.Second }</span>
+func Window() time.Duration <span class="cov4" title="77">{ return time.Duration(atomic.LoadInt64(&amp;windowSeconds)) * time.Second }</span>
// Event represents a single request/response with sizes.
type Event struct {
@@ -7316,108 +7361,108 @@ type Snapshot struct {
}
// Update appends one event and prunes old entries under lock.
-func Update(ctx context.Context, provider, model string, sentBytes, recvBytes int) error <span class="cov5" title="77">{
+func Update(ctx context.Context, provider, model string, sentBytes, recvBytes int) error <span class="cov4" title="77">{
dir, err := CacheDir()
if err != nil </span><span class="cov0" title="0">{
return err
}</span>
- <span class="cov5" title="77">if err := os.MkdirAll(dir, 0o755); err != nil </span><span class="cov0" title="0">{
+ <span class="cov4" title="77">if err := os.MkdirAll(dir, 0o755); err != nil </span><span class="cov0" title="0">{
return err
}</span>
- <span class="cov5" title="77">lockPath := filepath.Join(dir, lockFileName)
+ <span class="cov4" title="77">lockPath := filepath.Join(dir, lockFileName)
f, err := os.OpenFile(lockPath, os.O_CREATE|os.O_RDWR, 0o600)
if err != nil </span><span class="cov0" title="0">{
return err
}</span>
- <span class="cov5" title="77">defer f.Close()
+ <span class="cov4" title="77">defer f.Close()
unlock, err := acquireFileLock(ctx, f)
if err != nil </span><span class="cov0" title="0">{
return err
}</span>
- <span class="cov5" title="77">defer func() </span><span class="cov5" title="77">{ _ = unlock() }</span>()
+ <span class="cov4" title="77">defer func() </span><span class="cov4" title="77">{ _ = unlock() }</span>()
// Read existing file (if any)
- <span class="cov5" title="77">path := filepath.Join(dir, fileName)
+ <span class="cov4" title="77">path := filepath.Join(dir, fileName)
var sf File
- if b, rerr := os.ReadFile(path); rerr == nil </span><span class="cov5" title="74">{
+ if b, rerr := os.ReadFile(path); rerr == nil </span><span class="cov4" title="74">{
_ = json.Unmarshal(b, &amp;sf)
}</span>
- <span class="cov5" title="77">if sf.Version != fileVersion </span><span class="cov2" title="3">{
+ <span class="cov4" title="77">if sf.Version != fileVersion </span><span class="cov2" title="3">{
sf = File{Version: fileVersion}
}</span>
- <span class="cov5" title="77">now := time.Now()
+ <span class="cov4" title="77">now := time.Now()
win := Window()
sf.WindowSeconds = int(win.Seconds())
// Append event
sf.Events = append(sf.Events, Event{TS: now, Provider: provider, Model: model, Sent: int64(sentBytes), Recv: int64(recvBytes)})
// Prune old
cutoff := now.Add(-win)
- if len(sf.Events) &gt; 0 </span><span class="cov5" title="77">{
+ if len(sf.Events) &gt; 0 </span><span class="cov4" title="77">{
// Find first &gt;= cutoff
i := 0
- for ; i &lt; len(sf.Events); i++ </span><span class="cov5" title="78">{
- if !sf.Events[i].TS.Before(cutoff) </span><span class="cov5" title="77">{
+ for ; i &lt; len(sf.Events); i++ </span><span class="cov4" title="78">{
+ if !sf.Events[i].TS.Before(cutoff) </span><span class="cov4" title="77">{
break</span>
}
}
- <span class="cov5" title="77">if i &gt; 0 </span><span class="cov1" title="1">{
+ <span class="cov4" title="77">if i &gt; 0 </span><span class="cov1" title="1">{
sf.Events = append([]Event(nil), sf.Events[i:]...)
}</span>
}
- <span class="cov5" title="77">sf.UpdatedAt = now
+ <span class="cov4" title="77">sf.UpdatedAt = now
// Write atomically
tmp, err := os.CreateTemp(dir, fileName+".tmp.")
if err != nil </span><span class="cov0" title="0">{
return err
}</span>
- <span class="cov5" title="77">enc := json.NewEncoder(tmp)
+ <span class="cov4" title="77">enc := json.NewEncoder(tmp)
enc.SetEscapeHTML(false)
if err := enc.Encode(&amp;sf); err != nil </span><span class="cov0" title="0">{
tmp.Close()
os.Remove(tmp.Name())
return err
}</span>
- <span class="cov5" title="77">if err := tmp.Sync(); err != nil </span><span class="cov0" title="0">{
+ <span class="cov4" title="77">if err := tmp.Sync(); err != nil </span><span class="cov0" title="0">{
tmp.Close()
os.Remove(tmp.Name())
return err
}</span>
- <span class="cov5" title="77">if err := tmp.Close(); err != nil </span><span class="cov0" title="0">{
+ <span class="cov4" title="77">if err := tmp.Close(); err != nil </span><span class="cov0" title="0">{
os.Remove(tmp.Name())
return err
}</span>
- <span class="cov5" title="77">if err := os.Rename(tmp.Name(), path); err != nil </span><span class="cov0" title="0">{
+ <span class="cov4" title="77">if err := os.Rename(tmp.Name(), path); err != nil </span><span class="cov0" title="0">{
os.Remove(tmp.Name())
return err
}</span>
- <span class="cov5" title="77">return nil</span>
+ <span class="cov4" title="77">return nil</span>
}
-func acquireFileLock(ctx context.Context, f *os.File) (func() error, error) <span class="cov5" title="77">{
+func acquireFileLock(ctx context.Context, f *os.File) (func() error, error) <span class="cov4" title="77">{
fd := f.Fd()
- for </span><span class="cov5" title="199">{
+ for </span><span class="cov5" title="214">{
err := tryLockFile(fd)
- if err == nil </span><span class="cov5" title="77">{
- return func() error </span><span class="cov5" title="77">{ return unlockFile(fd) }</span>, nil
+ if err == nil </span><span class="cov4" title="77">{
+ return func() error </span><span class="cov4" title="77">{ return unlockFile(fd) }</span>, nil
}
- <span class="cov5" title="122">if errors.Is(err, errLockWouldBlock) </span><span class="cov5" title="122">{
+ <span class="cov5" title="137">if errors.Is(err, errLockWouldBlock) </span><span class="cov5" title="137">{
select </span>{
case &lt;-ctx.Done():<span class="cov0" title="0">
return nil, ctx.Err()</span>
- case &lt;-time.After(5 * time.Millisecond):<span class="cov5" title="122"></span>
+ case &lt;-time.After(5 * time.Millisecond):<span class="cov5" title="137"></span>
}
- <span class="cov5" title="122">continue</span>
+ <span class="cov5" title="137">continue</span>
}
<span class="cov0" title="0">return nil, err</span>
}
}
// Snapshot reads and aggregates events within the configured window.
-func TakeSnapshot() (Snapshot, error) <span class="cov4" title="69">{
+func TakeSnapshot() (Snapshot, error) <span class="cov4" title="70">{
dir, err := CacheDir()
if err != nil </span><span class="cov0" title="0">{
return Snapshot{}, err
}</span>
- <span class="cov4" title="69">path := filepath.Join(dir, fileName)
+ <span class="cov4" title="70">path := filepath.Join(dir, fileName)
b, err := os.ReadFile(path)
if err != nil </span><span class="cov0" title="0">{
if errors.Is(err, os.ErrNotExist) </span><span class="cov0" title="0">{
@@ -7425,30 +7470,30 @@ func TakeSnapshot() (Snapshot, error) <span class="cov4" title="69">{
}</span>
<span class="cov0" title="0">return Snapshot{}, err</span>
}
- <span class="cov4" title="69">var sf File
+ <span class="cov4" title="70">var sf File
if err := json.Unmarshal(b, &amp;sf); err != nil </span><span class="cov0" title="0">{
return Snapshot{}, err
}</span>
- <span class="cov4" title="69">win := time.Duration(sf.WindowSeconds) * time.Second
+ <span class="cov4" title="70">win := time.Duration(sf.WindowSeconds) * time.Second
if win &lt;= 0 </span><span class="cov0" title="0">{
win = Window()
- }</span> else<span class="cov4" title="69"> {
+ }</span> else<span class="cov4" title="70"> {
SetWindow(win) // align process with file window if changed elsewhere
}</span>
- <span class="cov4" title="69">cutoff := time.Now().Add(-win)
+ <span class="cov4" title="70">cutoff := time.Now().Add(-win)
snap := Snapshot{Providers: make(map[string]ProviderEntry), Window: win}
- for _, ev := range sf.Events </span><span class="cov10" title="14622">{
+ for _, ev := range sf.Events </span><span class="cov10" title="18479">{
if ev.TS.Before(cutoff) </span><span class="cov0" title="0">{
continue</span>
}
- <span class="cov10" title="14622">snap.Global.Reqs++
+ <span class="cov10" title="18479">snap.Global.Reqs++
snap.Global.Sent += ev.Sent
snap.Global.Recv += ev.Recv
pe := snap.Providers[ev.Provider]
- if pe.Models == nil </span><span class="cov6" title="465">{
+ if pe.Models == nil </span><span class="cov6" title="472">{
pe.Models = make(map[string]Counters)
}</span>
- <span class="cov10" title="14622">pe.Totals.Reqs++
+ <span class="cov10" title="18479">pe.Totals.Reqs++
pe.Totals.Sent += ev.Sent
pe.Totals.Recv += ev.Recv
mc := pe.Models[ev.Model]
@@ -7458,37 +7503,37 @@ func TakeSnapshot() (Snapshot, error) <span class="cov4" title="69">{
pe.Models[ev.Model] = mc
snap.Providers[ev.Provider] = pe</span>
}
- <span class="cov4" title="69">mins := win.Minutes()
+ <span class="cov4" title="70">mins := win.Minutes()
if mins &lt;= 0 </span><span class="cov0" title="0">{
mins = 0.001
}</span>
- <span class="cov4" title="69">snap.RPM = float64(snap.Global.Reqs) / mins
+ <span class="cov4" title="70">snap.RPM = float64(snap.Global.Reqs) / mins
return snap, nil</span>
}
// CacheDir resolves the cache directory for stats.
-func CacheDir() (string, error) <span class="cov5" title="147">{
+func CacheDir() (string, error) <span class="cov5" title="148">{
if x := os.Getenv("XDG_CACHE_HOME"); stringsTrim(x) != "" </span><span class="cov4" title="27">{
return filepath.Join(x, "hexai"), nil
}</span>
- <span class="cov5" title="120">home, err := os.UserHomeDir()
+ <span class="cov5" title="121">home, err := os.UserHomeDir()
if err != nil </span><span class="cov0" title="0">{
return "", fmt.Errorf("cannot resolve home: %w", err)
}</span>
- <span class="cov5" title="120">return filepath.Join(home, ".cache", "hexai"), nil</span>
+ <span class="cov5" title="121">return filepath.Join(home, ".cache", "hexai"), nil</span>
}
// stringsTrim is a tiny helper to avoid importing strings everywhere here.
-func stringsTrim(s string) string <span class="cov5" title="147">{
+func stringsTrim(s string) string <span class="cov5" title="148">{
i := 0
j := len(s)
for i &lt; j &amp;&amp; (s[i] == ' ' || s[i] == '\t' || s[i] == '\n' || s[i] == '\r') </span><span class="cov0" title="0">{
i++
}</span>
- <span class="cov5" title="147">for j &gt; i &amp;&amp; (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n' || s[j-1] == '\r') </span><span class="cov0" title="0">{
+ <span class="cov5" title="148">for j &gt; i &amp;&amp; (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n' || s[j-1] == '\r') </span><span class="cov0" title="0">{
j--
}</span>
- <span class="cov5" title="147">if i == 0 &amp;&amp; j == len(s) </span><span class="cov5" title="147">{
+ <span class="cov5" title="148">if i == 0 &amp;&amp; j == len(s) </span><span class="cov5" title="148">{
return s
}</span>
<span class="cov0" title="0">return s[i:j]</span>
@@ -7534,24 +7579,24 @@ import "fmt"
// HumanBytes renders n in a short human-friendly form using base-1000 units.
// Examples: 999 -&gt; 999B, 1200 -&gt; 1.2k, 1540000 -&gt; 1.5M
-func HumanBytes(n int64) string <span class="cov10" title="138">{
+func HumanBytes(n int64) string <span class="cov10" title="140">{
if n &lt; 1000 </span><span class="cov2" title="2">{
return fmt.Sprintf("%dB", n)
}</span>
- <span class="cov9" title="136">const unit = 1000.0
+ <span class="cov9" title="138">const unit = 1000.0
v := float64(n)
suffix := []string{"k", "M", "G", "T"}
i := 0
- for v &gt;= unit &amp;&amp; i &lt; len(suffix)-1 </span><span class="cov9" title="136">{
+ for v &gt;= unit &amp;&amp; i &lt; len(suffix)-1 </span><span class="cov9" title="138">{
v /= unit
i++
}</span>
- <span class="cov9" title="136">s := fmt.Sprintf("%.1f%s", v, suffix[i])
+ <span class="cov9" title="138">s := fmt.Sprintf("%.1f%s", v, suffix[i])
// Strip trailing ".0"
if len(s) &gt;= 3 &amp;&amp; s[len(s)-2:] == ".0" </span><span class="cov0" title="0">{
s = fmt.Sprintf("%d%s", int(v), suffix[i])
}</span>
- <span class="cov9" title="136">return s</span>
+ <span class="cov9" title="138">return s</span>
}
</pre>
@@ -7560,8 +7605,8 @@ func HumanBytes(n int64) string <span class="cov10" title="138">{
import "strings"
// RenderTemplate performs simple {{var}} replacement in a template string.
-func RenderTemplate(t string, vars map[string]string) string <span class="cov8" title="63">{
- if t == "" || len(vars) == 0 </span><span class="cov3" title="5">{
+func RenderTemplate(t string, vars map[string]string) string <span class="cov8" title="64">{
+ if t == "" || len(vars) == 0 </span><span class="cov4" title="6">{
return t
}</span>
<span class="cov8" title="58">out := t
@@ -7572,30 +7617,30 @@ func RenderTemplate(t string, vars map[string]string) string <span class="cov8"
}
// StripCodeFences removes surrounding Markdown triple-backtick fences.
-func StripCodeFences(s string) string <span class="cov8" title="69">{
+func StripCodeFences(s string) string <span class="cov8" title="70">{
t := strings.TrimSpace(s)
if t == "" </span><span class="cov1" title="1">{
return t
}</span>
- <span class="cov8" title="68">lines := strings.Split(t, "\n")
+ <span class="cov8" title="69">lines := strings.Split(t, "\n")
start := 0
for start &lt; len(lines) &amp;&amp; strings.TrimSpace(lines[start]) == "" </span><span class="cov0" title="0">{
start++
}</span>
- <span class="cov8" title="68">end := len(lines) - 1
+ <span class="cov8" title="69">end := len(lines) - 1
for end &gt;= 0 &amp;&amp; strings.TrimSpace(lines[end]) == "" </span><span class="cov0" title="0">{
end--
}</span>
- <span class="cov8" title="68">if start &gt;= len(lines) || end &lt; 0 || start &gt; end </span><span class="cov0" title="0">{
+ <span class="cov8" title="69">if start &gt;= len(lines) || end &lt; 0 || start &gt; end </span><span class="cov0" title="0">{
return t
}</span>
- <span class="cov8" title="68">first := strings.TrimSpace(lines[start])
+ <span class="cov8" title="69">first := strings.TrimSpace(lines[start])
last := strings.TrimSpace(lines[end])
if strings.HasPrefix(first, "```") &amp;&amp; last == "```" &amp;&amp; end &gt; start </span><span class="cov6" title="20">{
inner := strings.Join(lines[start+1:end], "\n")
return inner
}</span>
- <span class="cov7" title="48">return t</span>
+ <span class="cov7" title="49">return t</span>
}
// InstructionFromSelection extracts the first inline instruction and returns
@@ -7709,9 +7754,9 @@ const (
)
// Enabled reports whether tmux status updates are enabled via env (default: on).
-func Enabled() bool <span class="cov8" title="77">{
+func Enabled() bool <span class="cov8" title="78">{
v := strings.TrimSpace(os.Getenv("HEXAI_TMUX_STATUS"))
- if v == "" </span><span class="cov7" title="74">{
+ if v == "" </span><span class="cov7" title="75">{
return true
}</span>
<span class="cov2" title="3">v = strings.ToLower(v)
@@ -7719,20 +7764,20 @@ func Enabled() bool <span class="cov8" title="77">{
}
// SetUserOption sets a global tmux user option like @hexai_status to value.
-func SetUserOption(key, value string) error <span class="cov8" title="77">{
+func SetUserOption(key, value string) error <span class="cov8" title="78">{
if !Enabled() || !HasBinary() || !InSession() </span><span class="cov2" title="3">{
return nil
}</span>
- <span class="cov7" title="74">k := strings.TrimPrefix(strings.TrimSpace(key), "@")
+ <span class="cov7" title="75">k := strings.TrimPrefix(strings.TrimSpace(key), "@")
if k == "" </span><span class="cov0" title="0">{
return nil
}</span>
// Use set-option -g so it appears for all windows
- <span class="cov7" title="74">return exec.Command("tmux", "set-option", "-g", "@"+k, value).Run()</span>
+ <span class="cov7" title="75">return exec.Command("tmux", "set-option", "-g", "@"+k, value).Run()</span>
}
// SetStatus is a convenience for setting @hexai_status.
-func SetStatus(value string) error <span class="cov8" title="77">{ return SetUserOption("hexai_status", applyTheme(value)) }</span>
+func SetStatus(value string) error <span class="cov8" title="78">{ return SetUserOption("hexai_status", applyTheme(value)) }</span>
// FormatLLMStatsStatus builds a compact tmux status string for LLM heartbeats.
// Example: "LLM:gpt-4.1 5r 0.8rpm in12k out34k"
@@ -7758,7 +7803,7 @@ func FormatLLMStatsStatusColored(provider, model string, reqs int64, rpm float64
// scoped provider:model tail. The window indicator (e.g., Σ@1h) should be composed
// by the caller if needed; this function focuses on numbers and labels.
// Example: "Σ ↑120k ↓340k 4.2rpm | openai:gpt-4.1 3.1rpm 80r"
-func FormatGlobalStatusColored(globalReqs int64, globalRPM float64, globalIn, globalOut int64, scopeProvider, scopeModel string, scopeRPM float64, scopeReqs int64, window time.Duration) string <span class="cov7" title="67">{
+func FormatGlobalStatusColored(globalReqs int64, globalRPM float64, globalIn, globalOut int64, scopeProvider, scopeModel string, scopeRPM float64, scopeReqs int64, window time.Duration) string <span class="cov7" title="68">{
gin := textutil.HumanBytes(globalIn)
gout := textutil.HumanBytes(globalOut)
head := fmt.Sprintf("%sΣ@%s %s↑%s%s %s↓%s%s %.1frpm", baseFGToken, humanWindow(window), arrowUpToken, baseFGToken, gin, arrowDownToken, baseFGToken, gout, globalRPM)
@@ -7766,7 +7811,7 @@ func FormatGlobalStatusColored(globalReqs int64, globalRPM float64, globalIn, gl
if narrowEnabled() || stringsTrim(scopeProvider) == "" || stringsTrim(scopeModel) == "" </span><span class="cov1" title="1">{
return head
}</span>
- <span class="cov7" title="66">tail := fmt.Sprintf(" | %s:%s %.1frpm %dr", scopeProvider, scopeModel, scopeRPM, scopeReqs)
+ <span class="cov7" title="67">tail := fmt.Sprintf(" | %s:%s %.1frpm %dr", scopeProvider, scopeModel, scopeRPM, scopeReqs)
// Respect max length when configured: drop tail if it would overflow
if ml := maxStatusLen(); ml &gt; 0 </span><span class="cov1" title="1">{
if len(head) &lt;= ml &amp;&amp; len(head)+len(tail) &gt; ml </span><span class="cov0" title="0">{
@@ -7776,15 +7821,15 @@ func FormatGlobalStatusColored(globalReqs int64, globalRPM float64, globalIn, gl
return truncateStatus(head, ml)
}</span>
}
- <span class="cov7" title="65">return head + tail</span>
+ <span class="cov7" title="66">return head + tail</span>
}
-func humanWindow(d time.Duration) string <span class="cov7" title="67">{
+func humanWindow(d time.Duration) string <span class="cov7" title="68">{
if d &lt;= 0 </span><span class="cov0" title="0">{
return "?"
}</span>
- <span class="cov7" title="67">mins := int(d.Minutes())
- if mins%60 == 0 </span><span class="cov7" title="65">{
+ <span class="cov7" title="68">mins := int(d.Minutes())
+ if mins%60 == 0 </span><span class="cov7" title="66">{
return fmt.Sprintf("%dh", mins/60)
}</span>
<span class="cov2" title="2">if mins &gt;= 60 </span><span class="cov0" title="0">{
@@ -7794,9 +7839,9 @@ func humanWindow(d time.Duration) string <span class="cov7" title="67">{
}
// narrowEnabled returns true when HEXAI_TMUX_STATUS_NARROW is truthy (1/true/yes/on).
-func narrowEnabled() bool <span class="cov7" title="67">{
+func narrowEnabled() bool <span class="cov7" title="68">{
v := strings.ToLower(stringsTrim(os.Getenv("HEXAI_TMUX_STATUS_NARROW")))
- if v == "" </span><span class="cov7" title="66">{
+ if v == "" </span><span class="cov7" title="67">{
return false
}</span>
<span class="cov1" title="1">switch v </span>{
@@ -7808,9 +7853,9 @@ func narrowEnabled() bool <span class="cov7" title="67">{
}
// maxStatusLen returns HEXAI_TMUX_STATUS_MAXLEN parsed as int; 0 disables.
-func maxStatusLen() int <span class="cov7" title="66">{
+func maxStatusLen() int <span class="cov7" title="67">{
v := stringsTrim(os.Getenv("HEXAI_TMUX_STATUS_MAXLEN"))
- if v == "" </span><span class="cov7" title="65">{
+ if v == "" </span><span class="cov7" title="66">{
return 0
}</span>
<span class="cov1" title="1">n, err := strconv.Atoi(v)
@@ -7833,16 +7878,16 @@ func truncateStatus(s string, n int) string <span class="cov1" title="1">{
<span class="cov1" title="1">return s[:n-1] + "…"</span>
}
-func stringsTrim(s string) string <span class="cov10" title="265">{
+func stringsTrim(s string) string <span class="cov10" title="269">{
i := 0
j := len(s)
for i &lt; j &amp;&amp; (s[i] == ' ' || s[i] == '\t' || s[i] == '\n' || s[i] == '\r') </span><span class="cov0" title="0">{
i++
}</span>
- <span class="cov10" title="265">for j &gt; i &amp;&amp; (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n' || s[j-1] == '\r') </span><span class="cov0" title="0">{
+ <span class="cov10" title="269">for j &gt; i &amp;&amp; (s[j-1] == ' ' || s[j-1] == '\t' || s[j-1] == '\n' || s[j-1] == '\r') </span><span class="cov0" title="0">{
j--
}</span>
- <span class="cov10" title="265">if i == 0 &amp;&amp; j == len(s) </span><span class="cov10" title="265">{
+ <span class="cov10" title="269">if i == 0 &amp;&amp; j == len(s) </span><span class="cov10" title="269">{
return s
}</span>
<span class="cov0" title="0">return s[i:j]</span>
@@ -7850,13 +7895,13 @@ func stringsTrim(s string) string <span class="cov10" title="265">{
// FormatLLMStartStatus renders a short colored heartbeat at start/initialize time.
// Example: "LLM:openai:gpt-4.1 ⏳"
-func FormatLLMStartStatus(provider, model string) string <span class="cov5" title="12">{
+func FormatLLMStartStatus(provider, model string) string <span class="cov4" title="12">{
return fmt.Sprintf("%sLLM:%s:%s #[fg=colour11]⏳%s", baseFGToken, provider, model, baseFGToken)
}</span>
// applyTheme wraps the status string with a user-selected tmux style if requested.
// Set HEXAI_TMUX_STATUS_THEME=white-on-purple to get white-on-purple background.
-func applyTheme(s string) string <span class="cov8" title="77">{
+func applyTheme(s string) string <span class="cov8" title="78">{
theme := strings.ToLower(strings.TrimSpace(os.Getenv("HEXAI_TMUX_STATUS_THEME")))
// Allow explicit fg/bg override
fg := strings.TrimSpace(os.Getenv("HEXAI_TMUX_STATUS_FG"))
@@ -7872,23 +7917,23 @@ func applyTheme(s string) string <span class="cov8" title="77">{
baseFG = fg
}</span>
// bg used as provided (may be empty)
- } else<span class="cov8" title="77"> {
+ } else<span class="cov8" title="78"> {
switch theme </span>{
- case "white-on-purple", "purple", "magenta", "white-on-magenta":<span class="cov8" title="77">
+ case "white-on-purple", "purple", "magenta", "white-on-magenta":<span class="cov8" title="78">
baseFG, bg, wrap = "white", "magenta", true</span>
case "black-on-yellow", "yellow", "black-on-gold":<span class="cov0" title="0">
baseFG, bg, wrap = "black", "yellow", true</span>
case "white-on-blue", "blue", "white-on-navy":<span class="cov0" title="0">
baseFG, bg, wrap = "white", "blue", true</span>
}
- <span class="cov8" title="77">if baseFG == "" </span><span class="cov0" title="0">{ // no theme selected
+ <span class="cov8" title="78">if baseFG == "" </span><span class="cov0" title="0">{ // no theme selected
baseFG = "default"
}</span>
}
// Theme-aware arrow styles
- <span class="cov8" title="77">upStyle, downStyle := "#[fg=colour3]", "#[fg=colour2]" // defaults: yellow up, green down
- if fg != "" || bg != "" </span><span class="cov8" title="77">{ // explicit override path: match arrows to base fg, bold for visibility
+ <span class="cov8" title="78">upStyle, downStyle := "#[fg=colour3]", "#[fg=colour2]" // defaults: yellow up, green down
+ if fg != "" || bg != "" </span><span class="cov8" title="78">{ // explicit override path: match arrows to base fg, bold for visibility
upStyle = "#[bold,fg=" + baseFG + "]"
downStyle = upStyle
}</span> else<span class="cov0" title="0"> {
@@ -7903,25 +7948,25 @@ func applyTheme(s string) string <span class="cov8" title="77">{
}
// Replace base-foreground and arrow placeholders with selected styles
- <span class="cov8" title="77">if strings.Contains(s, baseFGToken) </span><span class="cov8" title="77">{
+ <span class="cov8" title="78">if strings.Contains(s, baseFGToken) </span><span class="cov8" title="78">{
s = strings.ReplaceAll(s, baseFGToken, "#[fg="+baseFG+"]")
}</span>
- <span class="cov8" title="77">if strings.Contains(s, arrowUpToken) </span><span class="cov7" title="65">{
+ <span class="cov8" title="78">if strings.Contains(s, arrowUpToken) </span><span class="cov7" title="66">{
s = strings.ReplaceAll(s, arrowUpToken, upStyle)
}</span>
- <span class="cov8" title="77">if strings.Contains(s, arrowDownToken) </span><span class="cov7" title="65">{
+ <span class="cov8" title="78">if strings.Contains(s, arrowDownToken) </span><span class="cov7" title="66">{
s = strings.ReplaceAll(s, arrowDownToken, downStyle)
}</span>
- <span class="cov8" title="77">if !wrap </span><span class="cov0" title="0">{
+ <span class="cov8" title="78">if !wrap </span><span class="cov0" title="0">{
return s
}</span>
// Wrap with base fg and optional bg, then reset at the end
- <span class="cov8" title="77">prefix := "#[fg=" + baseFG
- if bg != "" </span><span class="cov8" title="77">{
+ <span class="cov8" title="78">prefix := "#[fg=" + baseFG
+ if bg != "" </span><span class="cov8" title="78">{
prefix += ",bg=" + bg
}</span>
- <span class="cov8" title="77">prefix += "]"
+ <span class="cov8" title="78">prefix += "]"
return prefix + s + "#[fg=default,bg=default]"</span>
}
</pre>
@@ -7944,10 +7989,10 @@ var (
command = exec.Command
)
-func HasBinary() bool <span class="cov10" title="78">{ _, err := lookPath("tmux"); return err == nil }</span>
+func HasBinary() bool <span class="cov10" title="79">{ _, err := lookPath("tmux"); return err == nil }</span>
// InSession reports whether we seem to be running inside a tmux session.
-func InSession() bool <span class="cov9" title="77">{ return strings.TrimSpace(os.Getenv("TMUX")) != "" }</span>
+func InSession() bool <span class="cov9" title="78">{ return strings.TrimSpace(os.Getenv("TMUX")) != "" }</span>
// SplitOpts controls how a new pane is created for running a command.
type SplitOpts struct {
diff --git a/docs/coverage.out b/docs/coverage.out
index 278ee5d..3410034 100644
--- a/docs/coverage.out
+++ b/docs/coverage.out
@@ -1580,92 +1580,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -3870,92 +3888,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -6158,92 +6194,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -8446,92 +8500,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -10734,92 +10806,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -11253,11 +11343,11 @@ codeberg.org/snonux/hexai/internal/stats/stats.go:191.2,192.14 2 7
codeberg.org/snonux/hexai/internal/stats/stats.go:192.14,194.3 1 0
codeberg.org/snonux/hexai/internal/stats/stats.go:194.8,196.3 1 7
codeberg.org/snonux/hexai/internal/stats/stats.go:197.2,199.31 3 7
-codeberg.org/snonux/hexai/internal/stats/stats.go:199.31,200.27 1 1365
+codeberg.org/snonux/hexai/internal/stats/stats.go:199.31,200.27 1 1743
codeberg.org/snonux/hexai/internal/stats/stats.go:200.27,201.12 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:203.3,207.23 5 1365
+codeberg.org/snonux/hexai/internal/stats/stats.go:203.3,207.23 5 1743
codeberg.org/snonux/hexai/internal/stats/stats.go:207.23,209.4 1 49
-codeberg.org/snonux/hexai/internal/stats/stats.go:210.3,218.35 9 1365
+codeberg.org/snonux/hexai/internal/stats/stats.go:210.3,218.35 9 1743
codeberg.org/snonux/hexai/internal/stats/stats.go:220.2,221.15 2 7
codeberg.org/snonux/hexai/internal/stats/stats.go:221.15,223.3 1 0
codeberg.org/snonux/hexai/internal/stats/stats.go:224.2,225.18 2 7
@@ -13022,92 +13112,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -15310,92 +15418,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -17598,92 +17724,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -19886,92 +20030,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -20405,11 +20567,11 @@ codeberg.org/snonux/hexai/internal/stats/stats.go:191.2,192.14 2 18
codeberg.org/snonux/hexai/internal/stats/stats.go:192.14,194.3 1 0
codeberg.org/snonux/hexai/internal/stats/stats.go:194.8,196.3 1 18
codeberg.org/snonux/hexai/internal/stats/stats.go:197.2,199.31 3 18
-codeberg.org/snonux/hexai/internal/stats/stats.go:199.31,200.27 1 3735
+codeberg.org/snonux/hexai/internal/stats/stats.go:199.31,200.27 1 4707
codeberg.org/snonux/hexai/internal/stats/stats.go:200.27,201.12 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:203.3,207.23 5 3735
+codeberg.org/snonux/hexai/internal/stats/stats.go:203.3,207.23 5 4707
codeberg.org/snonux/hexai/internal/stats/stats.go:207.23,209.4 1 126
-codeberg.org/snonux/hexai/internal/stats/stats.go:210.3,218.35 9 3735
+codeberg.org/snonux/hexai/internal/stats/stats.go:210.3,218.35 9 4707
codeberg.org/snonux/hexai/internal/stats/stats.go:220.2,221.15 2 18
codeberg.org/snonux/hexai/internal/stats/stats.go:221.15,223.3 1 0
codeberg.org/snonux/hexai/internal/stats/stats.go:224.2,225.18 2 18
@@ -22174,92 +22336,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -24462,92 +24642,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -25005,15 +25203,15 @@ codeberg.org/snonux/hexai/internal/stats/stats.go:257.40,259.2 1 0
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:4.33,6.2 1 0
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:9.34,11.2 1 0
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:14.43,16.2 1 0
-codeberg.org/snonux/hexai/internal/testutil/fixtures.go:19.33,21.2 1 1
-codeberg.org/snonux/hexai/internal/testutil/fixtures.go:24.29,26.2 1 1
-codeberg.org/snonux/hexai/internal/textutil/human.go:7.33,8.14 1 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:8.14,10.3 1 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:11.2,15.37 5 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:15.37,18.3 2 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:19.2,21.41 2 0
+codeberg.org/snonux/hexai/internal/testutil/fixtures.go:19.33,21.2 1 0
+codeberg.org/snonux/hexai/internal/testutil/fixtures.go:24.29,26.2 1 0
+codeberg.org/snonux/hexai/internal/textutil/human.go:7.33,8.14 1 8
+codeberg.org/snonux/hexai/internal/textutil/human.go:8.14,10.3 1 2
+codeberg.org/snonux/hexai/internal/textutil/human.go:11.2,15.37 5 6
+codeberg.org/snonux/hexai/internal/textutil/human.go:15.37,18.3 2 6
+codeberg.org/snonux/hexai/internal/textutil/human.go:19.2,21.41 2 6
codeberg.org/snonux/hexai/internal/textutil/human.go:21.41,23.3 1 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:24.2,24.10 1 0
+codeberg.org/snonux/hexai/internal/textutil/human.go:24.2,24.10 1 6
codeberg.org/snonux/hexai/internal/textutil/textutil.go:6.62,7.31 1 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:7.31,9.3 1 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:10.2,11.25 2 0
@@ -25075,46 +25273,46 @@ codeberg.org/snonux/hexai/internal/tmux/status.go:39.2,40.13 2 0
codeberg.org/snonux/hexai/internal/tmux/status.go:40.13,42.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:44.2,44.69 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:48.36,48.95 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:52.98,54.2 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:59.115,68.2 3 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:74.194,79.90 4 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:79.90,81.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:82.2,84.34 2 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:84.34,85.50 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:52.98,54.2 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:59.115,68.2 3 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:74.194,79.90 4 2
+codeberg.org/snonux/hexai/internal/tmux/status.go:79.90,81.3 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:82.2,84.34 2 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:84.34,85.50 1 1
codeberg.org/snonux/hexai/internal/tmux/status.go:85.50,87.4 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:88.3,88.21 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:88.21,90.4 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:88.3,88.21 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:88.21,90.4 1 1
codeberg.org/snonux/hexai/internal/tmux/status.go:92.2,92.20 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:95.42,96.12 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:95.42,96.12 1 2
codeberg.org/snonux/hexai/internal/tmux/status.go:96.12,98.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:99.2,100.18 2 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:99.2,100.18 2 2
codeberg.org/snonux/hexai/internal/tmux/status.go:100.18,102.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:103.2,103.16 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:103.2,103.16 1 2
codeberg.org/snonux/hexai/internal/tmux/status.go:103.16,105.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:106.2,106.33 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:110.27,112.13 2 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:112.13,114.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:115.2,115.11 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:116.32,117.14 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:106.2,106.33 1 2
+codeberg.org/snonux/hexai/internal/tmux/status.go:110.27,112.13 2 2
+codeberg.org/snonux/hexai/internal/tmux/status.go:112.13,114.3 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:115.2,115.11 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:116.32,117.14 1 1
codeberg.org/snonux/hexai/internal/tmux/status.go:118.10,119.15 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:124.25,126.13 2 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:124.25,126.13 2 1
codeberg.org/snonux/hexai/internal/tmux/status.go:126.13,128.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:129.2,130.26 2 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:129.2,130.26 2 1
codeberg.org/snonux/hexai/internal/tmux/status.go:130.26,132.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:133.2,133.10 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:136.45,137.12 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:133.2,133.10 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:136.45,137.12 1 1
codeberg.org/snonux/hexai/internal/tmux/status.go:137.12,139.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:140.2,140.17 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:140.2,140.17 1 1
codeberg.org/snonux/hexai/internal/tmux/status.go:140.17,142.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:143.2,143.12 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:143.2,143.12 1 1
codeberg.org/snonux/hexai/internal/tmux/status.go:143.12,145.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:146.2,146.24 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:149.35,152.77 3 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:146.2,146.24 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:149.35,152.77 3 5
codeberg.org/snonux/hexai/internal/tmux/status.go:152.77,154.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:155.2,155.85 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:155.2,155.85 1 5
codeberg.org/snonux/hexai/internal/tmux/status.go:155.85,157.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:158.2,158.27 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:158.27,160.3 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:158.2,158.27 1 5
+codeberg.org/snonux/hexai/internal/tmux/status.go:158.27,160.3 1 5
codeberg.org/snonux/hexai/internal/tmux/status.go:161.2,161.15 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:166.58,168.2 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:172.34,180.26 6 0
@@ -25144,31 +25342,31 @@ codeberg.org/snonux/hexai/internal/tmux/status.go:229.11,231.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:233.2,234.14 2 0
codeberg.org/snonux/hexai/internal/tmux/status.go:234.14,236.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:237.2,238.48 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:11.23,11.60 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:19.23,19.72 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:22.23,22.76 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:33.52,34.20 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:11.23,11.60 1 2
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:19.23,19.72 2 4
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:22.23,22.76 1 3
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:33.52,34.20 1 1
codeberg.org/snonux/hexai/internal/tmux/tmux.go:34.20,36.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:37.2,38.19 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:38.19,40.3 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:37.2,38.19 2 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:38.19,40.3 1 1
codeberg.org/snonux/hexai/internal/tmux/tmux.go:40.8,42.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:43.2,43.45 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:43.45,45.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:46.2,46.42 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:46.42,48.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:50.2,53.16 4 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:58.38,60.25 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:60.25,61.14 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:43.2,43.45 1 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:43.45,45.3 1 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:46.2,46.42 1 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:46.42,48.3 1 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:50.2,53.16 4 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:58.38,60.25 2 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:60.25,61.14 1 4
codeberg.org/snonux/hexai/internal/tmux/tmux.go:61.14,63.12 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:65.3,65.20 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:65.20,67.12 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:71.3,72.33 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:74.2,74.31 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:78.32,79.30 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:79.30,81.141 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:81.141,82.12 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:84.3,84.15 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:86.2,86.13 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:65.3,65.20 1 4
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:65.20,67.12 2 2
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:71.3,72.33 2 2
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:74.2,74.31 1 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:78.32,79.30 1 4
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:79.30,81.141 2 27
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:81.141,82.12 1 25
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:84.3,84.15 1 2
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:86.2,86.13 1 2
codeberg.org/snonux/hexai/cmd/hexai/main.go:14.13,17.18 3 0
codeberg.org/snonux/hexai/cmd/hexai/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai/main.go:22.2,22.104 1 0
@@ -26750,92 +26948,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -29038,92 +29254,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -31326,92 +31560,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -31869,15 +32121,15 @@ codeberg.org/snonux/hexai/internal/stats/stats.go:257.40,259.2 1 0
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:4.33,6.2 1 0
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:9.34,11.2 1 0
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:14.43,16.2 1 0
-codeberg.org/snonux/hexai/internal/testutil/fixtures.go:19.33,21.2 1 0
-codeberg.org/snonux/hexai/internal/testutil/fixtures.go:24.29,26.2 1 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:7.33,8.14 1 8
-codeberg.org/snonux/hexai/internal/textutil/human.go:8.14,10.3 1 2
-codeberg.org/snonux/hexai/internal/textutil/human.go:11.2,15.37 5 6
-codeberg.org/snonux/hexai/internal/textutil/human.go:15.37,18.3 2 6
-codeberg.org/snonux/hexai/internal/textutil/human.go:19.2,21.41 2 6
+codeberg.org/snonux/hexai/internal/testutil/fixtures.go:19.33,21.2 1 1
+codeberg.org/snonux/hexai/internal/testutil/fixtures.go:24.29,26.2 1 1
+codeberg.org/snonux/hexai/internal/textutil/human.go:7.33,8.14 1 0
+codeberg.org/snonux/hexai/internal/textutil/human.go:8.14,10.3 1 0
+codeberg.org/snonux/hexai/internal/textutil/human.go:11.2,15.37 5 0
+codeberg.org/snonux/hexai/internal/textutil/human.go:15.37,18.3 2 0
+codeberg.org/snonux/hexai/internal/textutil/human.go:19.2,21.41 2 0
codeberg.org/snonux/hexai/internal/textutil/human.go:21.41,23.3 1 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:24.2,24.10 1 6
+codeberg.org/snonux/hexai/internal/textutil/human.go:24.2,24.10 1 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:6.62,7.31 1 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:7.31,9.3 1 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:10.2,11.25 2 0
@@ -31939,46 +32191,46 @@ codeberg.org/snonux/hexai/internal/tmux/status.go:39.2,40.13 2 0
codeberg.org/snonux/hexai/internal/tmux/status.go:40.13,42.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:44.2,44.69 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:48.36,48.95 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:52.98,54.2 1 1
-codeberg.org/snonux/hexai/internal/tmux/status.go:59.115,68.2 3 1
-codeberg.org/snonux/hexai/internal/tmux/status.go:74.194,79.90 4 2
-codeberg.org/snonux/hexai/internal/tmux/status.go:79.90,81.3 1 1
-codeberg.org/snonux/hexai/internal/tmux/status.go:82.2,84.34 2 1
-codeberg.org/snonux/hexai/internal/tmux/status.go:84.34,85.50 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:52.98,54.2 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:59.115,68.2 3 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:74.194,79.90 4 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:79.90,81.3 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:82.2,84.34 2 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:84.34,85.50 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:85.50,87.4 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:88.3,88.21 1 1
-codeberg.org/snonux/hexai/internal/tmux/status.go:88.21,90.4 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:88.3,88.21 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:88.21,90.4 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:92.2,92.20 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:95.42,96.12 1 2
+codeberg.org/snonux/hexai/internal/tmux/status.go:95.42,96.12 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:96.12,98.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:99.2,100.18 2 2
+codeberg.org/snonux/hexai/internal/tmux/status.go:99.2,100.18 2 0
codeberg.org/snonux/hexai/internal/tmux/status.go:100.18,102.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:103.2,103.16 1 2
+codeberg.org/snonux/hexai/internal/tmux/status.go:103.2,103.16 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:103.16,105.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:106.2,106.33 1 2
-codeberg.org/snonux/hexai/internal/tmux/status.go:110.27,112.13 2 2
-codeberg.org/snonux/hexai/internal/tmux/status.go:112.13,114.3 1 1
-codeberg.org/snonux/hexai/internal/tmux/status.go:115.2,115.11 1 1
-codeberg.org/snonux/hexai/internal/tmux/status.go:116.32,117.14 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:106.2,106.33 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:110.27,112.13 2 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:112.13,114.3 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:115.2,115.11 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:116.32,117.14 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:118.10,119.15 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:124.25,126.13 2 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:124.25,126.13 2 0
codeberg.org/snonux/hexai/internal/tmux/status.go:126.13,128.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:129.2,130.26 2 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:129.2,130.26 2 0
codeberg.org/snonux/hexai/internal/tmux/status.go:130.26,132.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:133.2,133.10 1 1
-codeberg.org/snonux/hexai/internal/tmux/status.go:136.45,137.12 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:133.2,133.10 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:136.45,137.12 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:137.12,139.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:140.2,140.17 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:140.2,140.17 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:140.17,142.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:143.2,143.12 1 1
+codeberg.org/snonux/hexai/internal/tmux/status.go:143.2,143.12 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:143.12,145.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:146.2,146.24 1 1
-codeberg.org/snonux/hexai/internal/tmux/status.go:149.35,152.77 3 5
+codeberg.org/snonux/hexai/internal/tmux/status.go:146.2,146.24 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:149.35,152.77 3 0
codeberg.org/snonux/hexai/internal/tmux/status.go:152.77,154.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:155.2,155.85 1 5
+codeberg.org/snonux/hexai/internal/tmux/status.go:155.2,155.85 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:155.85,157.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:158.2,158.27 1 5
-codeberg.org/snonux/hexai/internal/tmux/status.go:158.27,160.3 1 5
+codeberg.org/snonux/hexai/internal/tmux/status.go:158.2,158.27 1 0
+codeberg.org/snonux/hexai/internal/tmux/status.go:158.27,160.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:161.2,161.15 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:166.58,168.2 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:172.34,180.26 6 0
@@ -32008,31 +32260,31 @@ codeberg.org/snonux/hexai/internal/tmux/status.go:229.11,231.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:233.2,234.14 2 0
codeberg.org/snonux/hexai/internal/tmux/status.go:234.14,236.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:237.2,238.48 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:11.23,11.60 1 2
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:19.23,19.72 2 4
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:22.23,22.76 1 3
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:33.52,34.20 1 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:11.23,11.60 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:19.23,19.72 2 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:22.23,22.76 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:33.52,34.20 1 0
codeberg.org/snonux/hexai/internal/tmux/tmux.go:34.20,36.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:37.2,38.19 2 1
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:38.19,40.3 1 1
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:37.2,38.19 2 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:38.19,40.3 1 0
codeberg.org/snonux/hexai/internal/tmux/tmux.go:40.8,42.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:43.2,43.45 1 1
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:43.45,45.3 1 1
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:46.2,46.42 1 1
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:46.42,48.3 1 1
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:50.2,53.16 4 1
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:58.38,60.25 2 1
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:60.25,61.14 1 4
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:43.2,43.45 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:43.45,45.3 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:46.2,46.42 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:46.42,48.3 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:50.2,53.16 4 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:58.38,60.25 2 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:60.25,61.14 1 0
codeberg.org/snonux/hexai/internal/tmux/tmux.go:61.14,63.12 2 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:65.3,65.20 1 4
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:65.20,67.12 2 2
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:71.3,72.33 2 2
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:74.2,74.31 1 1
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:78.32,79.30 1 4
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:79.30,81.141 2 27
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:81.141,82.12 1 25
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:84.3,84.15 1 2
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:86.2,86.13 1 2
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:65.3,65.20 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:65.20,67.12 2 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:71.3,72.33 2 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:74.2,74.31 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:78.32,79.30 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:79.30,81.141 2 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:81.141,82.12 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:84.3,84.15 1 0
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:86.2,86.13 1 0
codeberg.org/snonux/hexai/cmd/hexai/main.go:14.13,17.18 3 0
codeberg.org/snonux/hexai/cmd/hexai/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai/main.go:22.2,22.104 1 0
@@ -33027,7 +33279,7 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:58.47,58.73 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:58.73,58.92 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:59.47,59.73 1 1
codeberg.org/snonux/hexai/internal/llm/provider.go:59.73,59.94 1 1
-codeberg.org/snonux/hexai/internal/llm/provider.go:60.47,60.73 1 35
+codeberg.org/snonux/hexai/internal/llm/provider.go:60.47,60.73 1 36
codeberg.org/snonux/hexai/internal/llm/provider.go:60.73,60.92 1 1
codeberg.org/snonux/hexai/internal/llm/provider.go:61.45,62.26 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:62.26,62.66 1 0
@@ -33065,9 +33317,9 @@ codeberg.org/snonux/hexai/internal/logging/chatlogger.go:20.12,22.3 1 0
codeberg.org/snonux/hexai/internal/logging/chatlogger.go:23.2,25.29 2 0
codeberg.org/snonux/hexai/internal/logging/chatlogger.go:25.29,28.3 1 0
codeberg.org/snonux/hexai/internal/logging/logging.go:27.26,27.37 1 1
-codeberg.org/snonux/hexai/internal/logging/logging.go:30.47,31.16 1 80
+codeberg.org/snonux/hexai/internal/logging/logging.go:30.47,31.16 1 83
codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 29
-codeberg.org/snonux/hexai/internal/logging/logging.go:34.2,35.48 2 51
+codeberg.org/snonux/hexai/internal/logging/logging.go:34.2,35.48 2 54
codeberg.org/snonux/hexai/internal/logging/logging.go:43.32,43.55 1 0
codeberg.org/snonux/hexai/internal/logging/logging.go:46.37,47.25 1 1
codeberg.org/snonux/hexai/internal/logging/logging.go:47.25,48.32 1 0
@@ -33086,12 +33338,12 @@ codeberg.org/snonux/hexai/internal/lsp/chat_commands.go:40.26,42.3 1 0
codeberg.org/snonux/hexai/internal/lsp/chat_commands.go:43.2,44.16 2 2
codeberg.org/snonux/hexai/internal/lsp/chat_commands.go:44.16,47.3 2 0
codeberg.org/snonux/hexai/internal/lsp/chat_commands.go:48.2,50.44 3 2
-codeberg.org/snonux/hexai/internal/lsp/context.go:16.96,18.14 2 13
+codeberg.org/snonux/hexai/internal/lsp/context.go:16.96,18.14 2 14
codeberg.org/snonux/hexai/internal/lsp/context.go:19.17,20.19 1 2
codeberg.org/snonux/hexai/internal/lsp/context.go:21.16,22.41 1 1
-codeberg.org/snonux/hexai/internal/lsp/context.go:23.26,24.14 1 8
+codeberg.org/snonux/hexai/internal/lsp/context.go:23.26,24.14 1 9
codeberg.org/snonux/hexai/internal/lsp/context.go:24.14,26.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/context.go:27.3,27.19 1 6
+codeberg.org/snonux/hexai/internal/lsp/context.go:27.3,27.19 1 7
codeberg.org/snonux/hexai/internal/lsp/context.go:28.21,29.38 1 2
codeberg.org/snonux/hexai/internal/lsp/context.go:30.10,32.19 1 0
codeberg.org/snonux/hexai/internal/lsp/context.go:36.65,38.35 2 2
@@ -33113,38 +33365,38 @@ codeberg.org/snonux/hexai/internal/lsp/context.go:77.21,79.3 1 0
codeberg.org/snonux/hexai/internal/lsp/context.go:80.2,80.53 1 1
codeberg.org/snonux/hexai/internal/lsp/context.go:80.53,82.3 1 0
codeberg.org/snonux/hexai/internal/lsp/context.go:83.2,83.19 1 1
-codeberg.org/snonux/hexai/internal/lsp/document.go:15.48,19.2 3 40
+codeberg.org/snonux/hexai/internal/lsp/document.go:15.48,19.2 3 41
codeberg.org/snonux/hexai/internal/lsp/document.go:21.45,25.2 3 1
codeberg.org/snonux/hexai/internal/lsp/document.go:27.33,31.2 3 4
-codeberg.org/snonux/hexai/internal/lsp/document.go:33.52,37.2 3 87
-codeberg.org/snonux/hexai/internal/lsp/document.go:40.37,43.2 2 52
-codeberg.org/snonux/hexai/internal/lsp/document.go:45.96,47.35 2 7
+codeberg.org/snonux/hexai/internal/lsp/document.go:33.52,37.2 3 90
+codeberg.org/snonux/hexai/internal/lsp/document.go:40.37,43.2 2 53
+codeberg.org/snonux/hexai/internal/lsp/document.go:45.96,47.35 2 8
codeberg.org/snonux/hexai/internal/lsp/document.go:47.35,49.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/document.go:50.2,51.13 2 6
+codeberg.org/snonux/hexai/internal/lsp/document.go:50.2,51.13 2 7
codeberg.org/snonux/hexai/internal/lsp/document.go:51.13,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/document.go:54.2,54.25 1 6
+codeberg.org/snonux/hexai/internal/lsp/document.go:54.2,54.25 1 7
codeberg.org/snonux/hexai/internal/lsp/document.go:54.25,56.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/document.go:57.2,58.16 2 6
+codeberg.org/snonux/hexai/internal/lsp/document.go:57.2,58.16 2 7
codeberg.org/snonux/hexai/internal/lsp/document.go:58.16,60.3 1 6
-codeberg.org/snonux/hexai/internal/lsp/document.go:61.2,61.26 1 6
+codeberg.org/snonux/hexai/internal/lsp/document.go:61.2,61.26 1 7
codeberg.org/snonux/hexai/internal/lsp/document.go:61.26,63.3 1 6
-codeberg.org/snonux/hexai/internal/lsp/document.go:64.2,64.28 1 6
-codeberg.org/snonux/hexai/internal/lsp/document.go:64.28,66.85 2 8
+codeberg.org/snonux/hexai/internal/lsp/document.go:64.2,64.28 1 7
+codeberg.org/snonux/hexai/internal/lsp/document.go:64.28,66.85 2 9
codeberg.org/snonux/hexai/internal/lsp/document.go:66.85,68.9 2 6
-codeberg.org/snonux/hexai/internal/lsp/document.go:71.2,71.39 1 6
-codeberg.org/snonux/hexai/internal/lsp/document.go:78.71,80.35 2 11
+codeberg.org/snonux/hexai/internal/lsp/document.go:71.2,71.39 1 7
+codeberg.org/snonux/hexai/internal/lsp/document.go:78.71,80.35 2 12
codeberg.org/snonux/hexai/internal/lsp/document.go:80.35,82.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/document.go:83.2,84.13 2 11
+codeberg.org/snonux/hexai/internal/lsp/document.go:83.2,84.13 2 12
codeberg.org/snonux/hexai/internal/lsp/document.go:84.13,86.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/document.go:87.2,87.25 1 11
+codeberg.org/snonux/hexai/internal/lsp/document.go:87.2,87.25 1 12
codeberg.org/snonux/hexai/internal/lsp/document.go:87.25,89.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/document.go:91.2,92.28 2 11
-codeberg.org/snonux/hexai/internal/lsp/document.go:92.28,93.44 1 20
+codeberg.org/snonux/hexai/internal/lsp/document.go:91.2,92.28 2 12
+codeberg.org/snonux/hexai/internal/lsp/document.go:92.28,93.44 1 21
codeberg.org/snonux/hexai/internal/lsp/document.go:93.44,95.9 2 4
-codeberg.org/snonux/hexai/internal/lsp/document.go:98.3,98.40 1 16
+codeberg.org/snonux/hexai/internal/lsp/document.go:98.3,98.40 1 17
codeberg.org/snonux/hexai/internal/lsp/document.go:98.40,99.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/document.go:102.2,102.20 1 11
-codeberg.org/snonux/hexai/internal/lsp/document.go:102.20,104.3 1 7
+codeberg.org/snonux/hexai/internal/lsp/document.go:102.2,102.20 1 12
+codeberg.org/snonux/hexai/internal/lsp/document.go:102.20,104.3 1 8
codeberg.org/snonux/hexai/internal/lsp/document.go:106.2,106.35 1 4
codeberg.org/snonux/hexai/internal/lsp/document.go:106.35,109.17 3 6
codeberg.org/snonux/hexai/internal/lsp/document.go:109.17,110.15 1 2
@@ -33152,16 +33404,16 @@ codeberg.org/snonux/hexai/internal/lsp/document.go:110.15,112.5 1 1
codeberg.org/snonux/hexai/internal/lsp/document.go:114.4,114.29 1 1
codeberg.org/snonux/hexai/internal/lsp/document.go:114.29,116.5 1 1
codeberg.org/snonux/hexai/internal/lsp/document.go:119.2,119.13 1 2
-codeberg.org/snonux/hexai/internal/lsp/document.go:122.46,123.28 1 8
-codeberg.org/snonux/hexai/internal/lsp/document.go:123.28,124.29 1 18
+codeberg.org/snonux/hexai/internal/lsp/document.go:122.46,123.28 1 9
+codeberg.org/snonux/hexai/internal/lsp/document.go:123.28,124.29 1 24
codeberg.org/snonux/hexai/internal/lsp/document.go:124.29,126.4 1 6
-codeberg.org/snonux/hexai/internal/lsp/document.go:128.2,128.14 1 2
-codeberg.org/snonux/hexai/internal/lsp/document.go:131.31,133.18 2 42
+codeberg.org/snonux/hexai/internal/lsp/document.go:128.2,128.14 1 3
+codeberg.org/snonux/hexai/internal/lsp/document.go:131.31,133.18 2 47
codeberg.org/snonux/hexai/internal/lsp/document.go:133.18,135.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/document.go:136.2,136.10 1 41
-codeberg.org/snonux/hexai/internal/lsp/document.go:139.33,141.49 2 26
+codeberg.org/snonux/hexai/internal/lsp/document.go:136.2,136.10 1 46
+codeberg.org/snonux/hexai/internal/lsp/document.go:139.33,141.49 2 27
codeberg.org/snonux/hexai/internal/lsp/document.go:141.49,143.3 1 6
-codeberg.org/snonux/hexai/internal/lsp/document.go:144.2,144.10 1 20
+codeberg.org/snonux/hexai/internal/lsp/document.go:144.2,144.10 1 21
codeberg.org/snonux/hexai/internal/lsp/handlers.go:10.38,11.41 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers.go:11.41,14.3 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers.go:15.2,15.22 1 1
@@ -33190,27 +33442,27 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:87.2,88.30 2 16
codeberg.org/snonux/hexai/internal/lsp/handlers.go:88.30,89.63 1 4
codeberg.org/snonux/hexai/internal/lsp/handlers.go:89.63,91.4 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers.go:93.2,94.33 2 16
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:118.72,121.2 2 29
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:192.151,195.24 2 14
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:118.72,121.2 2 30
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:192.151,195.24 2 15
codeberg.org/snonux/hexai/internal/lsp/handlers.go:195.24,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:198.2,200.24 3 14
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:198.2,200.24 3 15
codeberg.org/snonux/hexai/internal/lsp/handlers.go:200.24,202.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:203.2,205.51 3 14
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:205.51,208.3 2 14
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:209.2,210.54 2 14
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:203.2,205.51 3 15
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:205.51,208.3 2 15
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:209.2,210.54 2 15
codeberg.org/snonux/hexai/internal/lsp/handlers.go:210.54,212.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:213.2,214.14 2 14
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:213.2,214.14 2 15
codeberg.org/snonux/hexai/internal/lsp/handlers.go:214.14,216.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:218.2,232.12 1 14
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:235.64,239.9 4 10
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:239.9,241.3 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:218.2,232.12 1 15
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:235.64,239.9 4 11
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:239.9,241.3 1 10
codeberg.org/snonux/hexai/internal/lsp/handlers.go:243.2,244.16 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:247.56,250.24 3 12
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:247.56,250.24 3 13
codeberg.org/snonux/hexai/internal/lsp/handlers.go:250.24,252.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:253.2,253.44 1 12
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:253.44,256.33 3 12
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:253.2,253.44 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:253.44,256.33 3 13
codeberg.org/snonux/hexai/internal/lsp/handlers.go:256.33,261.4 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:262.3,262.9 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:262.3,262.9 1 13
codeberg.org/snonux/hexai/internal/lsp/handlers.go:265.2,266.29 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:269.51,273.37 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers.go:273.37,274.15 1 1
@@ -33241,9 +33493,9 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:337.2,338.33 2 12
codeberg.org/snonux/hexai/internal/lsp/handlers.go:338.33,339.14 1 28
codeberg.org/snonux/hexai/internal/lsp/handlers.go:339.14,341.4 1 6
codeberg.org/snonux/hexai/internal/lsp/handlers.go:343.2,343.14 1 6
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:346.137,351.51 5 13
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.51,353.3 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:354.2,364.4 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:346.137,351.51 5 14
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.51,353.3 1 14
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:354.2,364.4 1 14
codeberg.org/snonux/hexai/internal/lsp/handlers.go:439.74,448.2 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:17.48,19.55 2 5
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:19.55,20.23 1 0
@@ -33455,70 +33707,70 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:607.16,609.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:610.2,611.32 2 2
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:611.32,613.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:614.2,614.18 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:31.48,34.55 3 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:34.55,41.19 5 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:31.48,34.55 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:34.55,41.19 5 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:41.19,43.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:44.3,44.25 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:44.25,48.10 4 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:48.10,51.5 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:44.3,44.25 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:44.25,48.10 4 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:48.10,51.5 2 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:54.2,55.73 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:60.67,61.22 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:60.67,61.22 1 3
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:61.22,63.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:64.2,68.48 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:64.2,68.48 2 3
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:68.48,70.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:70.8,73.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:74.2,74.46 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:79.99,82.2 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:70.8,73.3 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:74.2,74.46 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:79.99,82.2 1 3
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:84.98,87.2 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:89.160,94.13 4 18
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:89.160,94.13 4 19
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:94.13,96.3 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:98.2,98.131 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:98.2,98.131 1 10
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:98.131,100.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:102.2,102.43 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:105.181,118.57 4 18
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:102.2,102.43 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:105.181,118.57 4 19
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:118.57,121.3 2 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:122.2,122.51 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:122.2,122.51 1 11
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:122.51,124.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:125.2,128.96 4 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:125.2,128.96 4 11
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:128.96,133.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:134.2,134.100 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:134.2,134.100 1 10
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:134.100,137.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:138.2,138.98 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:138.2,138.98 1 10
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:138.98,141.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:142.2,142.25 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:145.107,148.29 3 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:148.29,150.3 1 16
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:151.2,154.29 4 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:142.2,142.25 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:145.107,148.29 3 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:148.29,150.3 1 18
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:151.2,154.29 4 9
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:154.29,156.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:157.2,158.19 2 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:157.2,158.19 2 9
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:158.19,160.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:161.2,163.16 3 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:161.2,163.16 3 9
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:163.16,167.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.2,172.19 5 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:168.2,172.19 5 9
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:172.19,174.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:175.2,177.20 3 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:181.38,182.16 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:175.2,177.20 3 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:181.38,182.16 1 12
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:182.16,184.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:185.2,188.42 2 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:185.2,188.42 2 7
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:188.42,190.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:190.8,193.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:194.2,194.27 1 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:198.91,201.18 3 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:190.8,193.3 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:194.2,194.27 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:198.91,201.18 3 16
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:201.18,203.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.2,204.34 1 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.34,205.29 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.2,204.34 1 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:204.34,205.29 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:205.29,207.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:208.3,209.31 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.31,210.18 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:208.3,209.31 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:209.31,210.18 1 14
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:210.18,213.5 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:216.2,216.14 1 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:220.119,224.24 2 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:216.2,216.14 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:220.119,224.24 2 15
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:224.24,226.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:227.2,228.13 2 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.13,230.68 2 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:227.2,228.13 2 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.13,230.68 2 13
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:230.68,232.4 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:234.2,234.19 1 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:234.19,236.3 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:234.2,234.19 1 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:234.19,236.3 1 8
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:238.2,239.12 2 7
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:239.12,241.28 2 13
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.28,243.12 2 7
@@ -33527,8 +33779,8 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:247.2,249.18 3 7
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.18,250.45 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.45,252.4 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.2,254.23 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.193,261.9 3 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.9,263.3 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.193,261.9 3 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.9,263.3 1 7
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:264.2,275.34 8 6
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:275.34,277.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:278.2,279.19 2 6
@@ -33549,8 +33801,8 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:315.40,319.5 3 4
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.8,321.23 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.23,326.3 3 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:327.2,327.19 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:332.55,334.12 2 41
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:334.12,336.3 1 39
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:332.55,334.12 2 42
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:334.12,336.3 1 40
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.2,337.6 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:337.6,341.20 4 4
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:341.20,343.4 1 0
@@ -33559,34 +33811,34 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:345.17,347.4 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:348.3,350.10 3 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:351.21,353.10 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.18,354.18 0 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.60,364.19 2 41
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.19,366.3 1 38
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:362.60,364.19 2 42
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.19,366.3 1 39
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,368.6 2 3
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.6,372.23 4 5
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:372.23,376.11 4 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:377.22,379.17 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:380.19,382.13 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:386.3,388.14 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:393.177,405.14 5 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:393.177,405.14 5 15
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:405.14,408.3 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:409.2,409.79 1 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:409.2,409.79 1 15
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:409.79,411.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:412.2,414.52 3 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:412.2,414.52 3 15
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:414.52,416.37 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:416.37,418.4 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:419.3,419.73 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:421.2,421.17 1 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:425.101,427.57 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:421.2,421.17 1 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:425.101,427.57 2 12
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:427.57,428.78 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:428.78,430.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:432.2,432.19 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:432.19,434.3 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:435.2,435.19 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:435.19,437.3 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:438.2,439.77 2 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:439.77,440.57 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:432.2,432.19 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:432.19,434.3 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:435.2,435.19 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:435.19,437.3 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:438.2,439.77 2 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:439.77,440.57 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:440.57,442.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:444.2,444.16 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:444.2,444.16 1 12
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:14.45,16.55 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:16.55,19.3 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:22.47,24.55 2 1
@@ -33614,92 +33866,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 11
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 11
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 23
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 23
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 23
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 23
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 23
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 1
@@ -33717,33 +33987,33 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:32.38,35.51 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:35.51,37.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:40.46,42.2 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:44.31,47.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.55,23.20 5 35
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:18.55,23.20 5 36
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.20,25.20 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:25.20,28.61 3 1
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:28.61,30.5 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:32.3,32.49 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:34.2,34.13 1 35
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:38.41,43.2 4 41
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:45.41,50.2 4 38
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:52.32,55.23 3 41
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:55.23,57.3 1 41
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:58.2,59.24 2 41
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.24,61.3 1 38
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:62.2,65.15 4 41
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:34.2,34.13 1 36
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:38.41,43.2 4 42
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:45.41,50.2 4 39
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:52.32,55.23 3 42
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:55.23,57.3 1 42
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:58.2,59.24 2 42
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.24,61.3 1 39
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:62.2,65.15 4 42
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:65.15,67.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.2,75.16 6 41
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:75.16,76.52 1 41
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.52,81.46 4 40
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:81.46,82.41 1 40
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.2,75.16 6 42
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:75.16,76.52 1 42
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.52,81.46 4 41
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:81.46,82.41 1 41
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:82.41,84.6 1 40
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:86.4,87.20 2 40
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:86.4,87.20 2 41
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:87.20,89.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:90.4,92.29 3 40
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.51,99.41 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:99.41,101.3 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:90.4,92.29 3 41
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.51,99.41 1 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:99.41,101.3 1 8
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.2,104.71 3 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:108.62,108.105 1 42
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.118,111.14 1 18
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:108.62,108.105 1 43
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.118,111.14 1 19
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:111.14,114.16 3 3
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:114.16,117.35 3 3
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:117.35,119.5 1 3
@@ -33752,14 +34022,14 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:120.36,122.5 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:123.4,125.59 3 3
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:125.59,127.5 1 3
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:128.4,128.21 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:131.2,134.19 4 15
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:137.51,138.23 1 25
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:131.2,134.19 4 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:137.51,138.23 1 26
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.23,140.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.2,141.13 1 25
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.13,143.100 2 50
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.2,141.13 1 26
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.13,143.100 2 51
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:143.100,145.12 2 31
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.3,147.8 1 19
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.2,149.11 1 25
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.3,147.8 1 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.2,149.11 1 26
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:152.32,154.2 1 26
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.116,160.25 2 26
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.25,162.3 1 55
@@ -33770,15 +34040,15 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.19,173.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:174.2,175.16 2 26
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.16,178.3 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:179.2,183.17 4 25
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.62,189.63 1 44
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.63,191.3 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.62,189.63 1 45
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.63,191.3 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:192.2,192.48 1 40
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.40,197.20 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:197.20,198.40 1 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.40,197.20 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:197.20,198.40 1 15
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.40,200.12 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:202.3,202.8 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.2,204.12 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.12,206.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:202.3,202.8 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.2,204.12 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.12,206.3 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.2,207.17 1 4
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:210.52,211.38 1 4
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:211.38,213.3 1 0
@@ -33789,55 +34059,55 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:219.3,219.36 1 9
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:219.36,220.12 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:222.3,222.25 1 9
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.2,224.34 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.82,234.22 2 75
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:234.22,237.12 2 87
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.82,234.22 2 76
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:234.22,237.12 2 89
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.12,239.4 1 39
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.3,242.64 2 48
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:242.64,244.12 2 31
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:247.3,248.12 2 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.3,242.64 2 50
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:242.64,244.12 2 32
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:247.3,248.12 2 18
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.12,250.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.3,252.48 2 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.3,252.48 2 17
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:252.48,254.12 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.3,257.18 2 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.3,257.18 2 16
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:257.18,259.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:261.3,262.29 2 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:261.3,262.29 2 16
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.2,264.24 1 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:270.59,274.31 3 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:274.31,276.3 1 18
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.2,277.42 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.42,279.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:270.59,274.31 3 22
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:274.31,276.3 1 19
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.2,277.42 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.42,279.3 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.2,280.31 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.31,282.32 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:282.32,284.4 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:286.2,286.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:290.83,293.102 2 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:290.83,293.102 2 21
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:293.102,295.36 2 4
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.36,297.136 2 4
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:297.136,299.5 1 20
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:300.4,302.34 3 4
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:302.34,304.5 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.2,308.65 1 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.2,308.65 1 17
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.65,309.53 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.53,311.37 2 2
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.37,313.137 2 2
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:313.137,315.6 1 4
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:316.5,318.35 3 2
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.35,320.6 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:324.2,324.19 1 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:328.80,329.22 1 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:324.2,324.19 1 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:328.80,329.22 1 21
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:329.22,331.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,334.40 3 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.2,334.40 3 21
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:334.40,336.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.2,337.34 1 15
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.34,338.31 1 103
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:338.31,339.12 1 80
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:341.3,342.16 2 23
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.2,337.34 1 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.34,338.31 1 146
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:338.31,339.12 1 116
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:341.3,342.16 2 30
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:342.16,343.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.3,345.32 1 23
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.3,345.32 1 30
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.32,347.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.2,349.19 1 15
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.36,354.2 1 103
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.39,357.77 1 45
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.2,349.19 1 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:352.36,354.2 1 146
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.39,357.77 1 46
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.43,362.13 2 11
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:362.13,364.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:365.2,366.11 2 11
@@ -33845,9 +34115,9 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.11,368.3 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.2,370.14 2 9
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:370.14,372.3 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:373.2,374.19 2 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.56,380.89 2 21
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.56,380.89 2 22
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.89,382.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.2,383.14 1 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.2,383.14 1 17
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:387.52,388.32 1 6
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:388.32,390.28 2 5
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:390.28,392.4 1 0
@@ -33868,26 +34138,26 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:421.25,423.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.2,424.33 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.33,426.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.2,428.19 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.67,434.35 2 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.67,434.35 2 15
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:434.35,436.3 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:437.2,439.31 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:439.31,441.3 1 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.2,442.14 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:445.87,446.45 1 16
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.45,448.3 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:437.2,439.31 3 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:439.31,441.3 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.2,442.14 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:445.87,446.45 1 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.45,448.3 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:449.2,449.60 1 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.63,454.22 2 87
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.22,458.12 3 86
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.63,454.22 2 90
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:454.22,458.12 3 89
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.12,460.4 1 62
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:461.3,463.32 3 24
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:461.3,463.32 3 27
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.32,465.4 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:466.3,467.36 2 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:466.3,467.36 2 19
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:467.36,469.12 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.3,473.12 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.3,473.12 2 14
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.12,475.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:476.3,477.49 2 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:476.3,477.49 2 14
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.49,479.12 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.3,481.14 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.3,481.14 1 13
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:483.2,483.14 1 7
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.85,489.28 3 14
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.28,491.12 2 18
@@ -33906,29 +34176,29 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:516.3,517.50 2 6
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:517.50,519.4 1 4
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:520.3,521.22 2 6
codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:523.2,523.14 1 14
-codeberg.org/snonux/hexai/internal/lsp/server.go:108.90,116.47 5 6
+codeberg.org/snonux/hexai/internal/lsp/server.go:108.90,116.47 5 7
codeberg.org/snonux/hexai/internal/lsp/server.go:116.47,116.72 1 0
codeberg.org/snonux/hexai/internal/lsp/server.go:118.47,118.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.2,127.10 1 6
-codeberg.org/snonux/hexai/internal/lsp/server.go:130.51,134.29 4 7
+codeberg.org/snonux/hexai/internal/lsp/server.go:127.2,127.10 1 7
+codeberg.org/snonux/hexai/internal/lsp/server.go:130.51,134.29 4 8
codeberg.org/snonux/hexai/internal/lsp/server.go:134.29,136.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,137.24 1 7
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,137.24 1 8
codeberg.org/snonux/hexai/internal/lsp/server.go:137.24,139.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.8,139.36 1 6
+codeberg.org/snonux/hexai/internal/lsp/server.go:139.8,139.36 1 7
codeberg.org/snonux/hexai/internal/lsp/server.go:139.36,141.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:141.8,176.41 34 6
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.8,176.41 34 7
codeberg.org/snonux/hexai/internal/lsp/server.go:176.41,186.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:188.2,188.27 1 7
+codeberg.org/snonux/hexai/internal/lsp/server.go:188.2,188.27 1 8
codeberg.org/snonux/hexai/internal/lsp/server.go:192.51,194.2 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:196.48,200.2 3 199
-codeberg.org/snonux/hexai/internal/lsp/server.go:202.48,203.26 1 420
+codeberg.org/snonux/hexai/internal/lsp/server.go:196.48,200.2 3 205
+codeberg.org/snonux/hexai/internal/lsp/server.go:202.48,203.26 1 431
codeberg.org/snonux/hexai/internal/lsp/server.go:203.26,205.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:206.2,208.14 3 415
-codeberg.org/snonux/hexai/internal/lsp/server.go:211.34,213.24 2 35
-codeberg.org/snonux/hexai/internal/lsp/server.go:213.24,215.3 1 29
+codeberg.org/snonux/hexai/internal/lsp/server.go:206.2,208.14 3 426
+codeberg.org/snonux/hexai/internal/lsp/server.go:211.34,213.24 2 36
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.24,215.3 1 30
codeberg.org/snonux/hexai/internal/lsp/server.go:216.2,216.22 1 6
-codeberg.org/snonux/hexai/internal/lsp/server.go:219.39,221.16 2 13
-codeberg.org/snonux/hexai/internal/lsp/server.go:221.16,223.3 1 4
+codeberg.org/snonux/hexai/internal/lsp/server.go:219.39,221.16 2 14
+codeberg.org/snonux/hexai/internal/lsp/server.go:221.16,223.3 1 5
codeberg.org/snonux/hexai/internal/lsp/server.go:224.2,224.13 1 9
codeberg.org/snonux/hexai/internal/lsp/server.go:227.36,229.33 2 2
codeberg.org/snonux/hexai/internal/lsp/server.go:229.33,231.3 1 0
@@ -33939,33 +34209,33 @@ codeberg.org/snonux/hexai/internal/lsp/server.go:240.2,240.29 1 6
codeberg.org/snonux/hexai/internal/lsp/server.go:243.47,245.37 2 27
codeberg.org/snonux/hexai/internal/lsp/server.go:245.37,247.3 1 3
codeberg.org/snonux/hexai/internal/lsp/server.go:248.2,248.53 1 24
-codeberg.org/snonux/hexai/internal/lsp/server.go:251.47,254.2 2 49
+codeberg.org/snonux/hexai/internal/lsp/server.go:251.47,254.2 2 51
codeberg.org/snonux/hexai/internal/lsp/server.go:256.46,258.2 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:260.53,262.35 2 41
-codeberg.org/snonux/hexai/internal/lsp/server.go:262.35,264.3 1 39
+codeberg.org/snonux/hexai/internal/lsp/server.go:260.53,262.35 2 42
+codeberg.org/snonux/hexai/internal/lsp/server.go:262.35,264.3 1 40
codeberg.org/snonux/hexai/internal/lsp/server.go:265.2,265.67 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:268.53,270.35 2 41
-codeberg.org/snonux/hexai/internal/lsp/server.go:270.35,272.3 1 38
+codeberg.org/snonux/hexai/internal/lsp/server.go:268.53,270.35 2 42
+codeberg.org/snonux/hexai/internal/lsp/server.go:270.35,272.3 1 39
codeberg.org/snonux/hexai/internal/lsp/server.go:273.2,273.67 1 3
-codeberg.org/snonux/hexai/internal/lsp/server.go:276.93,279.16 3 99
+codeberg.org/snonux/hexai/internal/lsp/server.go:276.93,279.16 3 102
codeberg.org/snonux/hexai/internal/lsp/server.go:279.16,281.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:282.2,283.17 2 99
+codeberg.org/snonux/hexai/internal/lsp/server.go:282.2,283.17 2 102
codeberg.org/snonux/hexai/internal/lsp/server.go:283.17,285.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:286.2,287.19 2 99
-codeberg.org/snonux/hexai/internal/lsp/server.go:287.19,289.3 1 99
-codeberg.org/snonux/hexai/internal/lsp/server.go:290.2,291.20 2 99
-codeberg.org/snonux/hexai/internal/lsp/server.go:291.20,293.3 1 99
-codeberg.org/snonux/hexai/internal/lsp/server.go:294.2,294.41 1 99
-codeberg.org/snonux/hexai/internal/lsp/server.go:297.83,300.18 3 46
-codeberg.org/snonux/hexai/internal/lsp/server.go:300.18,302.19 2 44
+codeberg.org/snonux/hexai/internal/lsp/server.go:286.2,287.19 2 102
+codeberg.org/snonux/hexai/internal/lsp/server.go:287.19,289.3 1 102
+codeberg.org/snonux/hexai/internal/lsp/server.go:290.2,291.20 2 102
+codeberg.org/snonux/hexai/internal/lsp/server.go:291.20,293.3 1 102
+codeberg.org/snonux/hexai/internal/lsp/server.go:294.2,294.41 1 102
+codeberg.org/snonux/hexai/internal/lsp/server.go:297.83,300.18 3 47
+codeberg.org/snonux/hexai/internal/lsp/server.go:300.18,302.19 2 45
codeberg.org/snonux/hexai/internal/lsp/server.go:302.19,304.4 1 0
codeberg.org/snonux/hexai/internal/lsp/server.go:305.8,307.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:308.2,308.32 1 46
+codeberg.org/snonux/hexai/internal/lsp/server.go:308.2,308.32 1 47
codeberg.org/snonux/hexai/internal/lsp/server.go:308.32,310.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:310.8,312.3 1 46
-codeberg.org/snonux/hexai/internal/lsp/server.go:313.2,314.21 2 46
-codeberg.org/snonux/hexai/internal/lsp/server.go:314.21,316.3 1 44
-codeberg.org/snonux/hexai/internal/lsp/server.go:317.2,317.37 1 46
+codeberg.org/snonux/hexai/internal/lsp/server.go:310.8,312.3 1 47
+codeberg.org/snonux/hexai/internal/lsp/server.go:313.2,314.21 2 47
+codeberg.org/snonux/hexai/internal/lsp/server.go:314.21,316.3 1 45
+codeberg.org/snonux/hexai/internal/lsp/server.go:317.2,317.37 1 47
codeberg.org/snonux/hexai/internal/lsp/server.go:320.44,322.2 1 2
codeberg.org/snonux/hexai/internal/lsp/server.go:324.49,326.33 2 7
codeberg.org/snonux/hexai/internal/lsp/server.go:326.33,328.3 1 1
@@ -33999,11 +34269,11 @@ codeberg.org/snonux/hexai/internal/lsp/transport.go:41.24,43.3 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:44.2,45.50 2 1
codeberg.org/snonux/hexai/internal/lsp/transport.go:45.50,47.3 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:48.2,48.17 1 1
-codeberg.org/snonux/hexai/internal/lsp/transport.go:51.38,56.16 4 42
+codeberg.org/snonux/hexai/internal/lsp/transport.go:51.38,56.16 4 43
codeberg.org/snonux/hexai/internal/lsp/transport.go:56.16,59.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:60.2,61.57 2 42
+codeberg.org/snonux/hexai/internal/lsp/transport.go:60.2,61.57 2 43
codeberg.org/snonux/hexai/internal/lsp/transport.go:61.57,64.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:65.2,65.45 1 42
+codeberg.org/snonux/hexai/internal/lsp/transport.go:65.2,65.45 1 43
codeberg.org/snonux/hexai/internal/lsp/transport.go:65.45,68.3 2 0
codeberg.org/snonux/hexai/internal/runtimeconfig/store.go:34.36,36.2 1 3
codeberg.org/snonux/hexai/internal/runtimeconfig/store.go:39.42,43.2 3 6
@@ -34074,11 +34344,11 @@ codeberg.org/snonux/hexai/internal/stats/lock_posix.go:13.39,15.4 1 1
codeberg.org/snonux/hexai/internal/stats/lock_posix.go:16.3,16.13 1 0
codeberg.org/snonux/hexai/internal/stats/lock_posix.go:18.2,18.12 1 29
codeberg.org/snonux/hexai/internal/stats/lock_posix.go:21.35,23.2 1 29
-codeberg.org/snonux/hexai/internal/stats/stats.go:32.33,33.21 1 41
+codeberg.org/snonux/hexai/internal/stats/stats.go:32.33,33.21 1 42
codeberg.org/snonux/hexai/internal/stats/stats.go:33.21,35.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:36.2,36.22 1 41
+codeberg.org/snonux/hexai/internal/stats/stats.go:36.2,36.22 1 42
codeberg.org/snonux/hexai/internal/stats/stats.go:36.22,38.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:39.2,39.55 1 41
+codeberg.org/snonux/hexai/internal/stats/stats.go:39.2,39.55 1 42
codeberg.org/snonux/hexai/internal/stats/stats.go:43.29,43.101 1 29
codeberg.org/snonux/hexai/internal/stats/stats.go:78.90,80.16 2 29
codeberg.org/snonux/hexai/internal/stats/stats.go:80.16,82.3 1 0
@@ -34121,37 +34391,37 @@ codeberg.org/snonux/hexai/internal/stats/stats.go:163.22,164.26 1 0
codeberg.org/snonux/hexai/internal/stats/stats.go:165.44,165.44 0 1
codeberg.org/snonux/hexai/internal/stats/stats.go:167.4,167.12 1 1
codeberg.org/snonux/hexai/internal/stats/stats.go:169.3,169.18 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:174.39,176.16 2 41
+codeberg.org/snonux/hexai/internal/stats/stats.go:174.39,176.16 2 42
codeberg.org/snonux/hexai/internal/stats/stats.go:176.16,178.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:179.2,181.16 3 41
+codeberg.org/snonux/hexai/internal/stats/stats.go:179.2,181.16 3 42
codeberg.org/snonux/hexai/internal/stats/stats.go:181.16,182.37 1 0
codeberg.org/snonux/hexai/internal/stats/stats.go:182.37,184.4 1 0
codeberg.org/snonux/hexai/internal/stats/stats.go:185.3,185.25 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:187.2,188.47 2 41
+codeberg.org/snonux/hexai/internal/stats/stats.go:187.2,188.47 2 42
codeberg.org/snonux/hexai/internal/stats/stats.go:188.47,190.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:191.2,192.14 2 41
+codeberg.org/snonux/hexai/internal/stats/stats.go:191.2,192.14 2 42
codeberg.org/snonux/hexai/internal/stats/stats.go:192.14,194.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:194.8,196.3 1 41
-codeberg.org/snonux/hexai/internal/stats/stats.go:197.2,199.31 3 41
-codeberg.org/snonux/hexai/internal/stats/stats.go:199.31,200.27 1 9500
+codeberg.org/snonux/hexai/internal/stats/stats.go:194.8,196.3 1 42
+codeberg.org/snonux/hexai/internal/stats/stats.go:197.2,199.31 3 42
+codeberg.org/snonux/hexai/internal/stats/stats.go:199.31,200.27 1 12007
codeberg.org/snonux/hexai/internal/stats/stats.go:200.27,201.12 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:203.3,207.23 5 9500
-codeberg.org/snonux/hexai/internal/stats/stats.go:207.23,209.4 1 287
-codeberg.org/snonux/hexai/internal/stats/stats.go:210.3,218.35 9 9500
-codeberg.org/snonux/hexai/internal/stats/stats.go:220.2,221.15 2 41
+codeberg.org/snonux/hexai/internal/stats/stats.go:203.3,207.23 5 12007
+codeberg.org/snonux/hexai/internal/stats/stats.go:207.23,209.4 1 294
+codeberg.org/snonux/hexai/internal/stats/stats.go:210.3,218.35 9 12007
+codeberg.org/snonux/hexai/internal/stats/stats.go:220.2,221.15 2 42
codeberg.org/snonux/hexai/internal/stats/stats.go:221.15,223.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:224.2,225.18 2 41
-codeberg.org/snonux/hexai/internal/stats/stats.go:229.33,230.60 1 70
+codeberg.org/snonux/hexai/internal/stats/stats.go:224.2,225.18 2 42
+codeberg.org/snonux/hexai/internal/stats/stats.go:229.33,230.60 1 71
codeberg.org/snonux/hexai/internal/stats/stats.go:230.60,232.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:233.2,234.16 2 70
+codeberg.org/snonux/hexai/internal/stats/stats.go:233.2,234.16 2 71
codeberg.org/snonux/hexai/internal/stats/stats.go:234.16,236.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:237.2,237.52 1 70
-codeberg.org/snonux/hexai/internal/stats/stats.go:241.35,244.77 3 70
+codeberg.org/snonux/hexai/internal/stats/stats.go:237.2,237.52 1 71
+codeberg.org/snonux/hexai/internal/stats/stats.go:241.35,244.77 3 71
codeberg.org/snonux/hexai/internal/stats/stats.go:244.77,246.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:247.2,247.85 1 70
+codeberg.org/snonux/hexai/internal/stats/stats.go:247.2,247.85 1 71
codeberg.org/snonux/hexai/internal/stats/stats.go:247.85,249.3 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:250.2,250.27 1 70
-codeberg.org/snonux/hexai/internal/stats/stats.go:250.27,252.3 1 70
+codeberg.org/snonux/hexai/internal/stats/stats.go:250.2,250.27 1 71
+codeberg.org/snonux/hexai/internal/stats/stats.go:250.27,252.3 1 71
codeberg.org/snonux/hexai/internal/stats/stats.go:253.2,253.15 1 0
codeberg.org/snonux/hexai/internal/stats/stats.go:257.40,259.2 1 0
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:4.33,6.2 1 1
@@ -34159,29 +34429,29 @@ codeberg.org/snonux/hexai/internal/testutil/fixtures.go:9.34,11.2 1 1
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:14.43,16.2 1 1
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:19.33,21.2 1 0
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:24.29,26.2 1 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:7.33,8.14 1 80
+codeberg.org/snonux/hexai/internal/textutil/human.go:7.33,8.14 1 82
codeberg.org/snonux/hexai/internal/textutil/human.go:8.14,10.3 1 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:11.2,15.37 5 80
-codeberg.org/snonux/hexai/internal/textutil/human.go:15.37,18.3 2 80
-codeberg.org/snonux/hexai/internal/textutil/human.go:19.2,21.41 2 80
+codeberg.org/snonux/hexai/internal/textutil/human.go:11.2,15.37 5 82
+codeberg.org/snonux/hexai/internal/textutil/human.go:15.37,18.3 2 82
+codeberg.org/snonux/hexai/internal/textutil/human.go:19.2,21.41 2 82
codeberg.org/snonux/hexai/internal/textutil/human.go:21.41,23.3 1 0
-codeberg.org/snonux/hexai/internal/textutil/human.go:24.2,24.10 1 80
-codeberg.org/snonux/hexai/internal/textutil/textutil.go:6.62,7.31 1 42
-codeberg.org/snonux/hexai/internal/textutil/textutil.go:7.31,9.3 1 3
+codeberg.org/snonux/hexai/internal/textutil/human.go:24.2,24.10 1 82
+codeberg.org/snonux/hexai/internal/textutil/textutil.go:6.62,7.31 1 43
+codeberg.org/snonux/hexai/internal/textutil/textutil.go:7.31,9.3 1 4
codeberg.org/snonux/hexai/internal/textutil/textutil.go:10.2,11.25 2 39
codeberg.org/snonux/hexai/internal/textutil/textutil.go:11.25,13.3 1 126
codeberg.org/snonux/hexai/internal/textutil/textutil.go:14.2,14.12 1 39
-codeberg.org/snonux/hexai/internal/textutil/textutil.go:18.39,20.13 2 45
+codeberg.org/snonux/hexai/internal/textutil/textutil.go:18.39,20.13 2 46
codeberg.org/snonux/hexai/internal/textutil/textutil.go:20.13,22.3 1 1
-codeberg.org/snonux/hexai/internal/textutil/textutil.go:23.2,25.66 3 44
+codeberg.org/snonux/hexai/internal/textutil/textutil.go:23.2,25.66 3 45
codeberg.org/snonux/hexai/internal/textutil/textutil.go:25.66,27.3 1 0
-codeberg.org/snonux/hexai/internal/textutil/textutil.go:28.2,29.54 2 44
+codeberg.org/snonux/hexai/internal/textutil/textutil.go:28.2,29.54 2 45
codeberg.org/snonux/hexai/internal/textutil/textutil.go:29.54,31.3 1 0
-codeberg.org/snonux/hexai/internal/textutil/textutil.go:32.2,32.51 1 44
+codeberg.org/snonux/hexai/internal/textutil/textutil.go:32.2,32.51 1 45
codeberg.org/snonux/hexai/internal/textutil/textutil.go:32.51,34.3 1 0
-codeberg.org/snonux/hexai/internal/textutil/textutil.go:35.2,37.69 3 44
+codeberg.org/snonux/hexai/internal/textutil/textutil.go:35.2,37.69 3 45
codeberg.org/snonux/hexai/internal/textutil/textutil.go:37.69,40.3 2 8
-codeberg.org/snonux/hexai/internal/textutil/textutil.go:41.2,41.10 1 36
+codeberg.org/snonux/hexai/internal/textutil/textutil.go:41.2,41.10 1 37
codeberg.org/snonux/hexai/internal/textutil/textutil.go:47.60,49.31 2 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:49.31,50.99 1 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:50.99,53.4 2 0
@@ -34218,39 +34488,39 @@ codeberg.org/snonux/hexai/internal/textutil/textutil.go:117.37,118.14 1 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:120.5,121.20 2 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:121.20,123.6 1 0
codeberg.org/snonux/hexai/internal/textutil/textutil.go:127.2,127.26 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:25.21,27.13 2 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:27.13,29.3 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:25.21,27.13 2 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:27.13,29.3 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:30.2,31.59 2 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:35.45,36.48 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:35.45,36.48 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:36.48,38.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:39.2,40.13 2 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:39.2,40.13 2 41
codeberg.org/snonux/hexai/internal/tmux/status.go:40.13,42.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:44.2,44.69 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:48.36,48.95 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:44.2,44.69 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:48.36,48.95 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:52.98,54.2 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:59.115,68.2 3 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:74.194,79.90 4 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:74.194,79.90 4 41
codeberg.org/snonux/hexai/internal/tmux/status.go:79.90,81.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:82.2,84.34 2 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:82.2,84.34 2 41
codeberg.org/snonux/hexai/internal/tmux/status.go:84.34,85.50 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:85.50,87.4 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:88.3,88.21 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:88.21,90.4 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:92.2,92.20 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:95.42,96.12 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:92.2,92.20 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:95.42,96.12 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:96.12,98.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:99.2,100.18 2 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:100.18,102.3 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:99.2,100.18 2 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:100.18,102.3 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:103.2,103.16 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:103.16,105.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:106.2,106.33 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:110.27,112.13 2 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:112.13,114.3 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:110.27,112.13 2 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:112.13,114.3 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:115.2,115.11 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:116.32,117.14 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:118.10,119.15 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:124.25,126.13 2 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:126.13,128.3 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:124.25,126.13 2 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:126.13,128.3 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:129.2,130.26 2 0
codeberg.org/snonux/hexai/internal/tmux/status.go:130.26,132.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:133.2,133.10 1 0
@@ -34261,44 +34531,44 @@ codeberg.org/snonux/hexai/internal/tmux/status.go:140.17,142.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:143.2,143.12 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:143.12,145.3 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:146.2,146.24 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:149.35,152.77 3 160
+codeberg.org/snonux/hexai/internal/tmux/status.go:149.35,152.77 3 164
codeberg.org/snonux/hexai/internal/tmux/status.go:152.77,154.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:155.2,155.85 1 160
+codeberg.org/snonux/hexai/internal/tmux/status.go:155.2,155.85 1 164
codeberg.org/snonux/hexai/internal/tmux/status.go:155.85,157.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:158.2,158.27 1 160
-codeberg.org/snonux/hexai/internal/tmux/status.go:158.27,160.3 1 160
+codeberg.org/snonux/hexai/internal/tmux/status.go:158.2,158.27 1 164
+codeberg.org/snonux/hexai/internal/tmux/status.go:158.27,160.3 1 164
codeberg.org/snonux/hexai/internal/tmux/status.go:161.2,161.15 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:166.58,168.2 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:172.34,180.26 6 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:172.34,180.26 6 41
codeberg.org/snonux/hexai/internal/tmux/status.go:180.26,182.15 2 0
codeberg.org/snonux/hexai/internal/tmux/status.go:182.15,184.4 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:184.9,186.4 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:188.8,189.16 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:190.67,191.47 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:188.8,189.16 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:190.67,191.47 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:192.53,193.46 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:194.49,195.44 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:197.3,197.19 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:197.3,197.19 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:197.19,199.4 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:203.2,204.26 2 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:204.26,207.3 2 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:203.2,204.26 2 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:204.26,207.3 2 41
codeberg.org/snonux/hexai/internal/tmux/status.go:207.8,208.16 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:209.67,210.63 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:211.53,212.63 1 0
codeberg.org/snonux/hexai/internal/tmux/status.go:213.49,214.63 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:219.2,219.38 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:219.38,221.3 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:222.2,222.39 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:222.39,224.3 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:225.2,225.41 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:225.41,227.3 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:229.2,229.11 1 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:219.2,219.38 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:219.38,221.3 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:222.2,222.39 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:222.39,224.3 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:225.2,225.41 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:225.41,227.3 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:229.2,229.11 1 41
codeberg.org/snonux/hexai/internal/tmux/status.go:229.11,231.3 1 0
-codeberg.org/snonux/hexai/internal/tmux/status.go:233.2,234.14 2 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:234.14,236.3 1 40
-codeberg.org/snonux/hexai/internal/tmux/status.go:237.2,238.48 2 40
+codeberg.org/snonux/hexai/internal/tmux/status.go:233.2,234.14 2 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:234.14,236.3 1 41
+codeberg.org/snonux/hexai/internal/tmux/status.go:237.2,238.48 2 41
codeberg.org/snonux/hexai/internal/tmux/tmux.go:11.23,11.60 1 0
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:19.23,19.72 2 40
-codeberg.org/snonux/hexai/internal/tmux/tmux.go:22.23,22.76 1 40
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:19.23,19.72 2 41
+codeberg.org/snonux/hexai/internal/tmux/tmux.go:22.23,22.76 1 41
codeberg.org/snonux/hexai/internal/tmux/tmux.go:33.52,34.20 1 0
codeberg.org/snonux/hexai/internal/tmux/tmux.go:34.20,36.3 1 0
codeberg.org/snonux/hexai/internal/tmux/tmux.go:37.2,38.19 2 0
@@ -35902,92 +36172,110 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:88.50,90.35 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:90.35,92.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:93.2,95.30 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.30,96.52 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.3,101.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.14,102.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:102.39,104.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.4,106.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.3,108.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:108.12,109.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.19,113.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.3,115.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:115.31,116.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:118.3,121.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.19,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,126.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:126.17,128.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.13,129.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.4,133.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:133.33,134.20 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:134.20,136.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.4,139.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:139.14,140.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,145.63 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:145.63,147.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,148.80 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.80,149.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.3,153.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:153.66,155.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.17,157.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:158.4,158.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.3,160.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:160.34,161.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.3,163.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:163.38,171.21 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.21,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,176.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:176.18,179.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.4,181.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:181.17,183.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,184.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:187.3,187.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:193.110,195.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:195.14,197.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.2,210.54 8 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:215.96,217.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.14,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:220.2,223.31 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:223.31,224.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:224.53,226.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.3,227.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.12,228.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.3,230.61 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.61,231.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.3,234.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:234.14,236.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.36,239.13 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:241.4,241.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.3,243.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.53,245.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.3,246.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.12,247.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,252.6 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.26 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:255.26,256.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:256.35,258.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.3,259.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:259.35,261.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:263.2,264.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.57,270.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:270.20,272.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:274.74,276.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:276.31,277.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.18,279.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:282.2,283.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:284.21,285.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.10,287.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:295.91,306.102 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:306.102,309.38 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:309.38,311.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:312.3,312.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.2,316.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:320.68,327.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:330.46,337.2 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.61,355.2 9 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:359.59,360.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.12,363.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.52,97.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:97.35,100.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:101.4,101.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:104.3,105.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:105.14,106.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.39,108.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:110.4,110.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.3,112.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:112.12,113.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.3,116.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:116.19,117.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.3,119.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:119.31,120.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:122.3,125.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.19,126.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:129.3,130.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.17,132.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:132.13,133.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:135.4,137.33 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:137.33,138.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:138.20,140.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.4,143.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:143.14,144.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,149.63 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:149.63,151.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.3,152.80 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:152.80,153.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:155.3,157.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:157.66,159.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:159.17,161.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:162.4,162.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.3,164.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:164.34,165.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.3,167.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:167.38,175.21 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:175.21,177.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:178.4,180.18 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:180.18,183.5 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:184.4,185.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.17,187.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:188.4,188.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:191.3,191.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:197.110,199.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:199.14,201.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:203.2,214.54 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.60,218.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:218.33,220.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:221.2,222.58 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:222.58,224.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:225.2,227.53 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:227.53,229.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:230.2,237.28 8 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:237.28,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:240.2,240.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:243.73,245.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.39,247.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.2,248.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:248.26,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.2,251.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:251.21,253.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:254.2,255.47 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.96,262.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:262.14,264.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:265.2,268.31 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:268.31,269.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:269.53,271.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.3,272.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:272.12,273.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.3,275.61 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.61,276.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:278.3,279.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:279.14,281.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:281.36,284.13 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:286.4,286.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.3,288.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:288.53,290.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.3,291.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:291.12,292.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:294.3,297.6 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:299.2,300.26 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:300.26,301.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:301.35,303.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.3,304.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:304.35,306.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:308.2,309.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:313.57,315.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:315.20,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:318.2,319.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:319.74,321.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:321.31,322.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.18,324.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:327.2,328.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:329.21,330.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:331.10,332.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:340.91,351.102 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:351.102,354.38 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:354.38,356.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:357.3,357.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:360.2,361.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:365.68,372.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:375.46,382.2 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:385.61,400.2 9 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:404.59,405.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:405.12,408.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:8.52,10.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:10.55,13.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_execute.go:14.2,14.19 1 0
@@ -36356,9 +36644,9 @@ codeberg.org/snonux/hexai/internal/runtimeconfig/store.go:186.23,188.3 1 0
codeberg.org/snonux/hexai/internal/runtimeconfig/store.go:189.2,191.29 3 0
codeberg.org/snonux/hexai/internal/runtimeconfig/store.go:191.29,193.3 1 0
codeberg.org/snonux/hexai/internal/runtimeconfig/store.go:194.2,194.34 1 0
-codeberg.org/snonux/hexai/internal/stats/lock_posix.go:11.36,12.71 1 144
-codeberg.org/snonux/hexai/internal/stats/lock_posix.go:12.71,13.39 1 121
-codeberg.org/snonux/hexai/internal/stats/lock_posix.go:13.39,15.4 1 121
+codeberg.org/snonux/hexai/internal/stats/lock_posix.go:11.36,12.71 1 159
+codeberg.org/snonux/hexai/internal/stats/lock_posix.go:12.71,13.39 1 136
+codeberg.org/snonux/hexai/internal/stats/lock_posix.go:13.39,15.4 1 136
codeberg.org/snonux/hexai/internal/stats/lock_posix.go:16.3,16.13 1 0
codeberg.org/snonux/hexai/internal/stats/lock_posix.go:18.2,18.12 1 23
codeberg.org/snonux/hexai/internal/stats/lock_posix.go:21.35,23.2 1 23
@@ -36400,14 +36688,14 @@ codeberg.org/snonux/hexai/internal/stats/stats.go:147.2,147.52 1 23
codeberg.org/snonux/hexai/internal/stats/stats.go:147.52,150.3 2 0
codeberg.org/snonux/hexai/internal/stats/stats.go:151.2,151.12 1 23
codeberg.org/snonux/hexai/internal/stats/stats.go:154.77,156.6 2 23
-codeberg.org/snonux/hexai/internal/stats/stats.go:156.6,158.17 2 144
+codeberg.org/snonux/hexai/internal/stats/stats.go:156.6,158.17 2 159
codeberg.org/snonux/hexai/internal/stats/stats.go:158.17,159.24 1 23
codeberg.org/snonux/hexai/internal/stats/stats.go:159.24,159.49 1 23
-codeberg.org/snonux/hexai/internal/stats/stats.go:161.3,161.40 1 121
-codeberg.org/snonux/hexai/internal/stats/stats.go:161.40,162.11 1 121
+codeberg.org/snonux/hexai/internal/stats/stats.go:161.3,161.40 1 136
+codeberg.org/snonux/hexai/internal/stats/stats.go:161.40,162.11 1 136
codeberg.org/snonux/hexai/internal/stats/stats.go:163.22,164.26 1 0
-codeberg.org/snonux/hexai/internal/stats/stats.go:165.44,165.44 0 121
-codeberg.org/snonux/hexai/internal/stats/stats.go:167.4,167.12 1 121
+codeberg.org/snonux/hexai/internal/stats/stats.go:165.44,165.44 0 136
+codeberg.org/snonux/hexai/internal/stats/stats.go:167.4,167.12 1 136
codeberg.org/snonux/hexai/internal/stats/stats.go:169.3,169.18 1 0
codeberg.org/snonux/hexai/internal/stats/stats.go:174.39,176.16 2 3
codeberg.org/snonux/hexai/internal/stats/stats.go:176.16,178.3 1 0