summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-09-06 11:57:45 +0300
committerPaul Buetow <paul@buetow.org>2025-09-06 11:57:45 +0300
commita48079fae6bb19d7c931f275901670cd5839ab5c (patch)
tree5788a3e8cac34ffca9d39b0c4b5df720e869b578
parentfb267966f7840df222338f57023273a993a73c9a (diff)
chore(version): bump to 0.6.0; configurable prompts via config + testsv0.6.0
-rw-r--r--PROJECTSTATUS.md35
-rw-r--r--config.toml.example105
-rw-r--r--docs/configuration.md133
-rw-r--r--docs/coverage.html1250
-rw-r--r--docs/coverage.out8482
-rw-r--r--internal/appconfig/config.go488
-rw-r--r--internal/appconfig/config_test.go207
-rw-r--r--internal/hexaicli/run.go42
-rw-r--r--internal/hexailsp/run.go52
-rw-r--r--internal/lsp/build_prompts_table_test.go32
-rw-r--r--internal/lsp/chat_prompt_test.go36
-rw-r--r--internal/lsp/codeaction_prompts_test.go102
-rw-r--r--internal/lsp/completion_messages_test.go16
-rw-r--r--internal/lsp/document_test.go35
-rw-r--r--internal/lsp/handlers_codeaction.go89
-rw-r--r--internal/lsp/handlers_completion.go50
-rw-r--r--internal/lsp/handlers_document.go6
-rw-r--r--internal/lsp/handlers_utils.go29
-rw-r--r--internal/lsp/helpers_more_test.go21
-rw-r--r--internal/lsp/provider_native_success_test.go31
-rw-r--r--internal/lsp/server.go74
-rw-r--r--internal/lsp/testhelper_capture_llm_test.go18
-rw-r--r--internal/version.go2
23 files changed, 6768 insertions, 4567 deletions
diff --git a/PROJECTSTATUS.md b/PROJECTSTATUS.md
index 4114df6..d26a5a8 100644
--- a/PROJECTSTATUS.md
+++ b/PROJECTSTATUS.md
@@ -1,8 +1,27 @@
-# Ideas
+# Project status
+
+This documents shows future items and in progress items. Already completed ones are removed from this document as we go.
## Features
-### New features
+### AI menu
+
+```
+[keys.normal]
+C-p = ":sh hexai --menu"
+```
+
+Or maybe
+
+```
+[keys.normal]
+C-p = ":sh hexai-action"
+```
+
+
+And then generate a menu with all the code actions hexai-lsp knows of and include hotkeys for each menu item! Also print out a notice that this is a work-around due to limitations in Helix's current LSP UI.
+
+### More features
* [ ] Have all text LLM prompts be configurable. With defaults as of now.
* [ ] implement a code action for selected code block the way via a unix pipe as faster access in helix
@@ -10,16 +29,8 @@
- the external command should open a menu to select an action (e.g. "format", "refactor", "explain", "test", etc.) and then apply it to the selected code
- the external menu can be opened in a separate tmux pane
* [ ] Fish and zsh and bash shell integration for command completion? Have access to the current shell history (N last commands), current directory content, and current directory name.
-* [X] Create "generate unit test" code action for selected code block => write test to FILE_test.go file
-* [X] Use hexai as a gh copilot... CLI replacemant for command line questions
-* [X] Resolve diagnostics code action feature
-* [X] LSP server to be used with the Helix text editor
-* [X] Code completion using LLMs
-* [X] Text completion in general
-* [/] Be a replacement for 'github copilot cli'
-* [X] Be able to perform inline chats (keeping history in the document)
-* [X] Fine tune when Large Language Model (LLM) completions trigger, as it seems that there are some cases where the Large Language Model (LLM) receives a request but Helix isn't suggesting any completions. There seems to be something odd with the in logic. Investigate the TriggerChar logic and make sure it matches Helix's expectations.
-* [X] Can anything else can be done with LSP?
+* [ ] Be able to re-configure the temperature in-editor
+* [ ] Unit test config loading
Be able to switch LLMs.
diff --git a/config.toml.example b/config.toml.example
index 70b4442..3b331c3 100644
--- a/config.toml.example
+++ b/config.toml.example
@@ -1,34 +1,79 @@
+# Hexai sectioned config example
+
+[general]
max_tokens = 4000
-context_mode = "file-on-new-func"
-context_window_lines = 120
max_context_tokens = 4000
-log_preview_limit = 100
-completion_debounce_ms = 200
-completion_throttle_ms = 0
-# Optional: disable disk IO while building context (reserved)
-# no_disk_io = true
+context_mode = "always-full" # minimal | window | file-on-new-func | always-full
+context_window_lines = 120
+coding_temperature = 0.2 # single knob for LSP calls (optional)
+
+[logging]
+# Flatten to: log_preview_limit
+log_preview_limit = 100 # chars shown in log previews
+
+[completion]
+completion_debounce_ms = 200 # idle ms before sending a request
+completion_throttle_ms = 0 # min ms between requests (0 disables)
+manual_invoke_min_prefix = 0 # required identifier chars for manual invoke
+
+[triggers]
trigger_characters = [".", ":", "/", "_", " "]
-inline_open = ">"
-inline_close = ">"
-chat_suffix = ">"
-chat_prefixes = ["?", "!", ":", ";"]
-coding_temperature = 0.2
-
-# Provider: openai | copilot | ollama
-provider = "openai"
-
-# OpenAI
-openai_model = "gpt-4.1"
-openai_base_url = "https://api.openai.com/v1"
-openai_temperature = 0.2
-
-# Ollama
-ollama_model = "qwen3-coder:30b-a3b-q4_K_M"
-ollama_base_url = "http://localhost:11434"
-ollama_temperature = 0.2
-
-# GitHub Copilot
-copilot_model = "gpt-4o-mini"
-copilot_base_url = "https://api.githubcopilot.com"
-copilot_temperature = 0.2
+[inline]
+inline_open = ">" # single-character
+inline_close = ">" # single-character
+
+[chat]
+chat_suffix = ">" # single-character
+chat_prefixes = ["?", "!", ":", ";"] # single-character items
+
+[provider]
+name = "openai" # openai | copilot | ollama
+
+[openai]
+model = "gpt-4.1"
+base_url = "https://api.openai.com/v1"
+temperature = 0.2
+
+[copilot]
+model = "gpt-4o-mini"
+base_url = "https://api.githubcopilot.com"
+temperature = 0.2
+
+[ollama]
+model = "qwen3-coder:30b-a3b-q4_K_M"
+base_url = "http://localhost:11434"
+temperature = 0.2
+
+# Prompt templates (optional). Leave commented to use defaults.
+[prompts]
+
+[prompts.completion]
+# Templates support {{file}}, {{function}}, {{above}}, {{current}}, {{below}}, {{char}}
+# and for additional context: {{context}}
+# system_general = "You are a terse code completion engine. Return only the code to insert, no surrounding prose or backticks. Only continue from the cursor; never repeat characters already present to the left of the cursor on the current line (e.g., if 'name :=' is already typed, only return the right-hand side expression)."
+# system_params = "You are a code completion engine for function signatures. Return only the parameter list contents (without parentheses), no braces, no prose. Prefer idiomatic names and types."
+# system_inline = "You are a precise code completion/refactoring engine. Output only the code to insert with no prose, no comments, and no backticks. Return raw code only."
+# user_general = "Provide the next likely code to insert at the cursor.\nFile: {{file}}\nFunction/context: {{function}}\nAbove line: {{above}}\nCurrent line (cursor at character {{char}}): {{current}}\nBelow line: {{below}}\nOnly return the completion snippet."
+# user_params = "Cursor is inside the function parameter list. Suggest only the parameter list (no parentheses).\nFunction line: {{function}}\nCurrent line (cursor at {{char}}): {{current}}"
+# additional_context = "Additional context:\n{{context}}"
+
+[prompts.provider_native]
+# completion = "// Path: {{path}}\n{{before}}"
+
+[prompts.chat]
+# system = "You are a helpful coding assistant. Answer concisely and clearly."
+
+[prompts.code_action]
+# rewrite_system = "You are a precise code refactoring engine. Rewrite the given code strictly according to the instruction. Return only the updated code with no prose or backticks. Preserve formatting where reasonable."
+# diagnostics_system = "You are a precise code fixer. Resolve the given diagnostics by editing only the selected code. Return only the corrected code with no prose or backticks. Keep behavior and style, and avoid unrelated changes."
+# document_system = "You are a precise code documentation engine. Add idiomatic documentation comments to the given code. Preserve exact behavior and formatting as much as possible. Return only the updated code with comments, no prose or backticks."
+# rewrite_user = "Instruction: {{instruction}}\n\nSelected code to transform:\n{{selection}}"
+# diagnostics_user = "Diagnostics to resolve (selection only):\n{{diagnostics}}\n\nSelected code:\n{{selection}}"
+# document_user = "Add documentation comments to this code:\n{{selection}}"
+# go_test_system = "You are a precise Go unit test generator. Given a Go function, write one or more Test* functions using the testing package. Do NOT include package or imports, only the test function(s). Prefer table-driven tests. Keep it minimal and idiomatic."
+# go_test_user = "Function under test:\n{{function}}"
+
+[prompts.cli]
+# default_system = "You are Hexai CLI. Default to very short, concise answers. If the user asks for commands, output only the commands (one per line) with no commentary or explanation. Only when the word 'explain' appears in the prompt, produce a verbose explanation."
+# explain_system = "You are Hexai CLI. The user requested an explanation. Provide a clear, verbose explanation with reasoning and details. If commands are needed, include them with brief context."
diff --git a/docs/configuration.md b/docs/configuration.md
index d52323c..d6c3f4b 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -1,84 +1,16 @@
# Hexai configuration
-This document covers all configuration options for Hexai, including the config file,
-environment overrides, provider selection, and temperature behavior.
+This page explains where the config lives and how to choose a style; the authoritative list of options and comments lives in the example file.
-## Config file
-
-The config file is optional.
+Config file
- Location: `$XDG_CONFIG_HOME/hexai/config.toml` (usually `~/.config/hexai/config.toml`).
-- Example:
-
-```toml
-max_tokens = 4000
-context_mode = "always-full"
-context_window_lines = 120
-max_context_tokens = 4000
-log_preview_limit = 100
-completion_debounce_ms = 200
-completion_throttle_ms = 0
-# no_disk_io is reserved for future use
-trigger_characters = [".", ":", "/", "_", " "]
-inline_open = ">"
-inline_close = ">"
-chat_suffix = ">"
-chat_prefixes = ["?", "!", ":", ";"]
-coding_temperature = 0.2
-
-# choose one provider: openai | copilot | ollama
-provider = "ollama"
-
-copilot_model = "gpt-4o-mini"
-copilot_base_url = "https://api.githubcopilot.com"
-copilot_temperature = 0.2
-
-openai_model = "gpt-4.1"
-openai_base_url = "https://api.openai.com/v1"
-openai_temperature = 0.2
-
-ollama_model = "qwen3-coder:30b-a3b-q4_K_M"
-ollama_base_url = "http://localhost:11434"
-ollama_temperature = 0.2
-```
-
-Key fields:
-
-- max_tokens: upper bound for a single LLM response.
-- context_mode: `minimal` | `window` | `file-on-new-func` | `always-full`.
-- context_window_lines: line count for `window` mode.
-- max_context_tokens: hard cap for sent context tokens.
-- log_preview_limit: max characters of context preview logged.
-- completion_debounce_ms: minimum idle time before sending completion requests.
-- completion_throttle_ms: minimum spacing between completion requests (0 disables).
-- manual_invoke_min_prefix: minimum typed identifier chars required for manual invoke to proceed without structural triggers (0 allows always).
-- no_disk_io: avoid reading files from disk when building context.
-- trigger_characters: LSP completion trigger characters.
-- inline_open / inline_close: characters that bracket inline prompts (default `>`/`>`). Inline prompts support `>text>` and a double-open variant `>>text>`. Single-character markers are required.
-- chat_suffix / chat_prefixes: in-editor chat triggers (default suffix `>` and prefixes `["?","!",":",";"]`). A line ending with one of these prefixes immediately followed by the suffix triggers a chat reply (e.g., `What?>`). Prefixes must be single characters.
-- coding_temperature: optional override for LSP calls.
-- provider: `openai` | `copilot` | `ollama`.
-
-### Trigger customization
-
-Defaults use `>` for inline prompts and chat suffix. You can change them, e.g.:
-
-```toml
-inline_open = "<"
-inline_close = ">"
-chat_suffix = "/"
-chat_prefixes = ["?", "!"]
-trigger_characters = [".", ":", "/", "_", " "]
-```
-
-Notes:
-- `inline_open`/`inline_close` must be single characters; `>>text>` is the double‑open variant.
-- `chat_prefixes` items must be single characters.
+- Style: sectioned tables only — see `config.toml.example` for a complete, commented reference.
-## Environment overrides
+Environment overrides
-- All config-file options can be overridden by environment variables prefixed with `HEXAI_`.
-- Env values take precedence over `config.toml`.
+- All options can be overridden by environment variables prefixed with `HEXAI_`.
+- Env values take precedence over the config file.
- Examples:
- `HEXAI_PROVIDER`, `HEXAI_MAX_TOKENS`, `HEXAI_CONTEXT_MODE`, `HEXAI_CONTEXT_WINDOW_LINES`, `HEXAI_MAX_CONTEXT_TOKENS`, `HEXAI_LOG_PREVIEW_LIMIT`
- `HEXAI_CODING_TEMPERATURE`
@@ -95,33 +27,15 @@ API keys:
- OpenAI: prefer `HEXAI_OPENAI_API_KEY`, falling back to `OPENAI_API_KEY`.
- Copilot: prefer `HEXAI_COPILOT_API_KEY`, falling back to `COPILOT_API_KEY`.
-## Selecting a provider
+Selecting a provider
-- Set `provider` in the config to `openai`, `copilot`, or `ollama`.
+- Sectioned: set `[provider] name = "openai" | "copilot" | "ollama"`.
+- Flat: set `provider = "openai" | "copilot" | "ollama"`.
- If omitted, Hexai defaults to `openai`.
-### OpenAI configuration
-
-- Required: `HEXAI_OPENAI_API_KEY` (or `OPENAI_API_KEY`).
-- Options:
- - `openai_model` — model name (default: `gpt-4.1`).
- - `openai_base_url` — API base (default: `https://api.openai.com/v1`).
- - `openai_temperature` — default temperature (coding-friendly `0.2`).
-
-### GitHub Copilot configuration
-
-- Required: `COPILOT_API_KEY`.
-- Options:
- - `copilot_model` — model name (default: `gpt-4o-mini`).
- - `copilot_base_url` — API base (default: `https://api.githubcopilot.com`).
- - `copilot_temperature` — default temperature (coding-friendly `0.2`).
+Provider-specific options
-### Ollama configuration
-
-- Options:
- - `ollama_model` — model name/tag (default: `qwen3-coder:30b-a3b-q4_K_M`).
- - `ollama_base_url` — base URL (default: `http://localhost:11434`).
- - `ollama_temperature` — default temperature (coding-friendly `0.2`).
+- See `config.toml.example` for the per-provider tables and defaults.
Notes:
@@ -129,27 +43,10 @@ Notes:
- Alternatively, run Ollama in OpenAI‑compatible mode and use the OpenAI provider with
`openai_base_url` pointed at your local endpoint.
-## LSP completion tuning
-
-- Debounce: `completion_debounce_ms` waits until there has been no recent input for at least this many milliseconds before sending a completion request. Recommended 150–300 ms to balance responsiveness and API usage.
-- Throttle: `completion_throttle_ms` enforces a minimum spacing between completion requests, across both chat and provider-native paths. Set to 0 to disable. Recommended 300–600 ms if you still see excessive requests with just debounce.
-- Manual invoke prefix: `manual_invoke_min_prefix` requires this many identifier characters before a manual completion (TriggerKind=1) proceeds without other triggers. Use 0 to always allow manual invoke.
-
-Environment variables mirror these settings: `HEXAI_COMPLETION_DEBOUNCE_MS`, `HEXAI_COMPLETION_THROTTLE_MS`, `HEXAI_MANUAL_INVOKE_MIN_PREFIX`.
-
-## Temperature behavior
-
-- What it is: controls randomness/creativity of outputs.
-- Default for coding: `0.2` for all providers unless overridden.
-- Per-provider overrides: `openai_temperature`, `copilot_temperature`, `ollama_temperature`.
-
-Recommended ranges:
+LSP completion tuning
-- 0.0–0.3: deterministic and precise; best for refactors, tests, and bug fixes.
-- 0.4–0.7: balanced; general Q&A and writing.
-- 0.8–1.2+: creative; brainstorming; may increase tangents.
+- See the [completion] section in `config.toml.example`.
-Guidance:
+Temperature behavior
-- Lower temperature increases consistency, but can be terse or repetitive.
-- Higher temperature increases diversity, but can wander or introduce mistakes.
+- Defaults and recommended ranges are commented inline in `config.toml.example` under [general] and provider tables.
diff --git a/docs/coverage.html b/docs/coverage.html
index 49b89df..d22ef74 100644
--- a/docs/coverage.html
+++ b/docs/coverage.html
@@ -59,9 +59,9 @@
<option value="file1">codeberg.org/snonux/hexai/cmd/hexai/main.go (0.0%)</option>
- <option value="file2">codeberg.org/snonux/hexai/internal/appconfig/config.go (87.0%)</option>
+ <option value="file2">codeberg.org/snonux/hexai/internal/appconfig/config.go (91.6%)</option>
- <option value="file3">codeberg.org/snonux/hexai/internal/hexaicli/run.go (91.4%)</option>
+ <option value="file3">codeberg.org/snonux/hexai/internal/hexaicli/run.go (72.6%)</option>
<option value="file4">codeberg.org/snonux/hexai/internal/hexailsp/run.go (92.5%)</option>
@@ -83,11 +83,11 @@
<option value="file13">codeberg.org/snonux/hexai/internal/lsp/document.go (90.1%)</option>
- <option value="file14">codeberg.org/snonux/hexai/internal/lsp/handlers.go (92.1%)</option>
+ <option value="file14">codeberg.org/snonux/hexai/internal/lsp/handlers.go (92.9%)</option>
<option value="file15">codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go (81.2%)</option>
- <option value="file16">codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go (87.5%)</option>
+ <option value="file16">codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go (87.6%)</option>
<option value="file17">codeberg.org/snonux/hexai/internal/lsp/handlers_document.go (88.9%)</option>
@@ -97,7 +97,7 @@
<option value="file20">codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go (88.5%)</option>
- <option value="file21">codeberg.org/snonux/hexai/internal/lsp/server.go (77.9%)</option>
+ <option value="file21">codeberg.org/snonux/hexai/internal/lsp/server.go (82.1%)</option>
<option value="file22">codeberg.org/snonux/hexai/internal/lsp/transport.go (71.4%)</option>
@@ -234,17 +234,43 @@ type App struct {
// Default temperature for Ollama requests (nil means use provider default)
OllamaTemperature *float64 `json:"ollama_temperature" toml:"ollama_temperature"`
CopilotBaseURL string `json:"copilot_base_url" toml:"copilot_base_url"`
- CopilotModel string `json:"copilot_model" toml:"copilot_model"`
- // Default temperature for Copilot requests (nil means use provider default)
- CopilotTemperature *float64 `json:"copilot_temperature" toml:"copilot_temperature"`
+ CopilotModel string `json:"copilot_model" toml:"copilot_model"`
+ // Default temperature for Copilot requests (nil means use provider default)
+ CopilotTemperature *float64 `json:"copilot_temperature" toml:"copilot_temperature"`
+
+ // Prompt templates (configured only via file; no env overrides)
+ // Completion/chat/code action/CLI prompt strings. See config.toml.example for placeholders.
+ // Completion
+ PromptCompletionSystemGeneral string `json:"-" toml:"-"`
+ PromptCompletionSystemParams string `json:"-" toml:"-"`
+ PromptCompletionSystemInline string `json:"-" toml:"-"`
+ PromptCompletionUserGeneral string `json:"-" toml:"-"`
+ PromptCompletionUserParams string `json:"-" toml:"-"`
+ PromptCompletionExtraHeader string `json:"-" toml:"-"`
+ // Provider-native code-completer
+ PromptNativeCompletion string `json:"-" toml:"-"`
+ // In-editor chat
+ PromptChatSystem string `json:"-" toml:"-"`
+ // Code actions
+ PromptCodeActionRewriteSystem string `json:"-" toml:"-"`
+ PromptCodeActionDiagnosticsSystem string `json:"-" toml:"-"`
+ PromptCodeActionDocumentSystem string `json:"-" toml:"-"`
+ PromptCodeActionRewriteUser string `json:"-" toml:"-"`
+ PromptCodeActionDiagnosticsUser string `json:"-" toml:"-"`
+ PromptCodeActionDocumentUser string `json:"-" toml:"-"`
+ PromptCodeActionGoTestSystem string `json:"-" toml:"-"`
+ PromptCodeActionGoTestUser string `json:"-" toml:"-"`
+ // CLI
+ PromptCLIDefaultSystem string `json:"-" toml:"-"`
+ PromptCLIExplainSystem string `json:"-" toml:"-"`
}
// Constructor: defaults for App (kept first among functions)
-func newDefaultConfig() App <span class="cov5" title="9">{
+func newDefaultConfig() App <span class="cov5" title="11">{
// Coding-friendly default temperature across providers
// Users can override per provider in config.toml (including 0.0).
t := 0.2
- return App{
+ return App{
MaxTokens: 4000,
ContextMode: "always-full",
ContextWindowLines: 120,
@@ -261,24 +287,48 @@ func newDefaultConfig() App <span class="cov5" title="9">{
InlineOpen: "&gt;",
InlineClose: "&gt;",
ChatSuffix: "&gt;",
- ChatPrefixes: []string{"?", "!", ":", ";"},
- }
+ ChatPrefixes: []string{"?", "!", ":", ";"},
+
+ // Default prompt templates (match current hard-coded strings)
+ PromptCompletionSystemParams: "You are a code completion engine for function signatures. Return only the parameter list contents (without parentheses), no braces, no prose. Prefer idiomatic names and types.",
+ PromptCompletionUserParams: "Cursor is inside the function parameter list. Suggest only the parameter list (no parentheses).\nFunction line: {{function}}\nCurrent line (cursor at {{char}}): {{current}}",
+ PromptCompletionSystemGeneral: "You are a terse code completion engine. Return only the code to insert, no surrounding prose or backticks. Only continue from the cursor; never repeat characters already present to the left of the cursor on the current line (e.g., if 'name :=' is already typed, only return the right-hand side expression).",
+ PromptCompletionUserGeneral: "Provide the next likely code to insert at the cursor.\nFile: {{file}}\nFunction/context: {{function}}\nAbove line: {{above}}\nCurrent line (cursor at character {{char}}): {{current}}\nBelow line: {{below}}\nOnly return the completion snippet.",
+ PromptCompletionSystemInline: "You are a precise code completion/refactoring engine. Output only the code to insert with no prose, no comments, and no backticks. Return raw code only.",
+ PromptCompletionExtraHeader: "Additional context:\n{{context}}",
+
+ PromptNativeCompletion: "// Path: {{path}}\n{{before}}",
+
+ PromptChatSystem: "You are a helpful coding assistant. Answer concisely and clearly.",
+
+ PromptCodeActionRewriteSystem: "You are a precise code refactoring engine. Rewrite the given code strictly according to the instruction. Return only the updated code with no prose or backticks. Preserve formatting where reasonable.",
+ PromptCodeActionDiagnosticsSystem: "You are a precise code fixer. Resolve the given diagnostics by editing only the selected code. Return only the corrected code with no prose or backticks. Keep behavior and style, and avoid unrelated changes.",
+ PromptCodeActionDocumentSystem: "You are a precise code documentation engine. Add idiomatic documentation comments to the given code. Preserve exact behavior and formatting as much as possible. Return only the updated code with comments, no prose or backticks.",
+ PromptCodeActionRewriteUser: "Instruction: {{instruction}}\n\nSelected code to transform:\n{{selection}}",
+ PromptCodeActionDiagnosticsUser: "Diagnostics to resolve (selection only):\n{{diagnostics}}\n\nSelected code:\n{{selection}}",
+ PromptCodeActionDocumentUser: "Add documentation comments to this code:\n{{selection}}",
+ PromptCodeActionGoTestSystem: "You are a precise Go unit test generator. Given a Go function, write one or more Test* functions using the testing package. Do NOT include package or imports, only the test function(s). Prefer table-driven tests. Keep it minimal and idiomatic.",
+ PromptCodeActionGoTestUser: "Function under test:\n{{function}}",
+
+ PromptCLIDefaultSystem: "You are Hexai CLI. Default to very short, concise answers. If the user asks for commands, output only the commands (one per line) with no commentary or explanation. Only when the word 'explain' appears in the prompt, produce a verbose explanation.",
+ PromptCLIExplainSystem: "You are Hexai CLI. The user requested an explanation. Provide a clear, verbose explanation with reasoning and details. If commands are needed, include them with brief context.",
+ }
}</span>
// Load reads configuration from a file and merges with defaults.
// It respects the XDG Base Directory Specification.
-func Load(logger *log.Logger) App <span class="cov4" title="8">{
+func Load(logger *log.Logger) App <span class="cov5" title="10">{
cfg := newDefaultConfig()
- if logger == nil </span><span class="cov3" title="3">{
+ if logger == nil </span><span class="cov2" title="3">{
return cfg // Return defaults if no logger is provided (e.g. in tests)
}</span>
- <span class="cov4" title="5">configPath, err := getConfigPath()
+ <span class="cov4" title="7">configPath, err := getConfigPath()
if err != nil </span><span class="cov0" title="0">{
logger.Printf("%v", err)
// Even if config path cannot be resolved, still allow env overrides below.
- }</span> else<span class="cov4" title="5"> {
- if fileCfg, err := loadFromFile(configPath, logger); err == nil &amp;&amp; fileCfg != nil </span><span class="cov3" title="3">{
+ }</span> else<span class="cov4" title="7"> {
+ if fileCfg, err := loadFromFile(configPath, logger); err == nil &amp;&amp; fileCfg != nil </span><span class="cov3" title="4">{
cfg.mergeWith(fileCfg)
}</span>
// When the config file is missing or invalid, we keep defaults and still
@@ -286,125 +336,507 @@ func Load(logger *log.Logger) App <span class="cov4" title="8">{
}
// Environment overrides (take precedence over file)
- <span class="cov4" title="5">if envCfg := loadFromEnv(logger); envCfg != nil </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if envCfg := loadFromEnv(logger); envCfg != nil </span><span class="cov1" title="1">{
cfg.mergeWith(envCfg)
}</span>
- <span class="cov4" title="5">return cfg</span>
+ <span class="cov4" title="7">return cfg</span>
}
// Private helpers
-func loadFromFile(path string, logger *log.Logger) (*App, error) <span class="cov4" title="6">{
- f, err := os.Open(path)
- if err != nil </span><span class="cov2" title="2">{
- if !os.IsNotExist(err) &amp;&amp; logger != nil </span><span class="cov0" title="0">{
- logger.Printf("cannot open TOML config file %s: %v", path, err)
- }</span>
- <span class="cov2" title="2">return nil, err</span>
- }
- <span class="cov3" title="4">defer f.Close()
+// Sectioned (table-based) file format only.
+type fileConfig struct {
+ // Section tables only (flat keys are not allowed)
+ General sectionGeneral `toml:"general"`
+ Logging sectionLogging `toml:"logging"`
+ Completion sectionCompletion `toml:"completion"`
+ Triggers sectionTriggers `toml:"triggers"`
+ Inline sectionInline `toml:"inline"`
+ Chat sectionChat `toml:"chat"`
+ Provider sectionProvider `toml:"provider"`
+ OpenAI sectionOpenAI `toml:"openai"`
+ Copilot sectionCopilot `toml:"copilot"`
+ Ollama sectionOllama `toml:"ollama"`
+ Prompts sectionPrompts `toml:"prompts"`
+}
- dec := toml.NewDecoder(f)
- var fileCfg App
- if err := dec.Decode(&amp;fileCfg); err != nil </span><span class="cov1" title="1">{
- if logger != nil </span><span class="cov1" title="1">{
- logger.Printf("invalid TOML config file %s: %v", path, err)
- }</span>
- <span class="cov1" title="1">return nil, err</span>
+type sectionGeneral struct {
+ MaxTokens int `toml:"max_tokens"`
+ ContextMode string `toml:"context_mode"`
+ ContextWindowLines int `toml:"context_window_lines"`
+ MaxContextTokens int `toml:"max_context_tokens"`
+ CodingTemperature *float64 `toml:"coding_temperature"`
+}
+
+type sectionLogging struct {
+ LogPreviewLimit int `toml:"log_preview_limit"`
+}
+
+type sectionCompletion struct {
+ CompletionDebounceMs int `toml:"completion_debounce_ms"`
+ CompletionThrottleMs int `toml:"completion_throttle_ms"`
+ ManualInvokeMinPrefix int `toml:"manual_invoke_min_prefix"`
+}
+
+type sectionTriggers struct {
+ TriggerCharacters []string `toml:"trigger_characters"`
+}
+
+type sectionInline struct {
+ InlineOpen string `toml:"inline_open"`
+ InlineClose string `toml:"inline_close"`
+}
+
+type sectionChat struct {
+ ChatSuffix string `toml:"chat_suffix"`
+ ChatPrefixes []string `toml:"chat_prefixes"`
+}
+
+type sectionProvider struct {
+ Name string `toml:"name"`
+}
+
+type sectionOpenAI struct {
+ Model string `toml:"model"`
+ BaseURL string `toml:"base_url"`
+ Temperature *float64 `toml:"temperature"`
+}
+
+type sectionCopilot struct {
+ Model string `toml:"model"`
+ BaseURL string `toml:"base_url"`
+ Temperature *float64 `toml:"temperature"`
+}
+
+type sectionOllama struct {
+ Model string `toml:"model"`
+ BaseURL string `toml:"base_url"`
+ Temperature *float64 `toml:"temperature"`
+}
+
+// Prompts sections
+type sectionPrompts struct {
+ Completion sectionPromptsCompletion `toml:"completion"`
+ Chat sectionPromptsChat `toml:"chat"`
+ CodeAction sectionPromptsCodeAction `toml:"code_action"`
+ CLI sectionPromptsCLI `toml:"cli"`
+ ProviderNative sectionPromptsProviderNative `toml:"provider_native"`
+}
+
+type sectionPromptsCompletion struct {
+ SystemGeneral string `toml:"system_general"`
+ SystemParams string `toml:"system_params"`
+ SystemInline string `toml:"system_inline"`
+ UserGeneral string `toml:"user_general"`
+ UserParams string `toml:"user_params"`
+ ExtraHeader string `toml:"additional_context"`
+}
+
+type sectionPromptsChat struct {
+ System string `toml:"system"`
+}
+
+type sectionPromptsCodeAction struct {
+ RewriteSystem string `toml:"rewrite_system"`
+ DiagnosticsSystem string `toml:"diagnostics_system"`
+ DocumentSystem string `toml:"document_system"`
+ RewriteUser string `toml:"rewrite_user"`
+ DiagnosticsUser string `toml:"diagnostics_user"`
+ DocumentUser string `toml:"document_user"`
+ GoTestSystem string `toml:"go_test_system"`
+ GoTestUser string `toml:"go_test_user"`
+}
+
+type sectionPromptsCLI struct {
+ DefaultSystem string `toml:"default_system"`
+ ExplainSystem string `toml:"explain_system"`
+}
+
+type sectionPromptsProviderNative struct {
+ Completion string `toml:"completion"`
+}
+
+func (fc *fileConfig) toApp() App <span class="cov3" title="4">{
+ out := App{}
+
+ // Merge section: general
+ if (fc.General != sectionGeneral{}) || fc.General.CodingTemperature != nil </span><span class="cov2" title="3">{
+ tmp := App{
+ MaxTokens: fc.General.MaxTokens,
+ ContextMode: fc.General.ContextMode,
+ ContextWindowLines: fc.General.ContextWindowLines,
+ MaxContextTokens: fc.General.MaxContextTokens,
+ CodingTemperature: fc.General.CodingTemperature,
}
- <span class="cov3" title="3">if logger != nil </span><span class="cov3" title="3">{
- logger.Printf("loaded configuration from %s (TOML)", path)
- }</span>
- <span class="cov3" title="3">return &amp;fileCfg, nil</span>
+ out.mergeBasics(&amp;tmp)
+ }</span>
+
+ // logging
+ <span class="cov3" title="4">if (fc.Logging != sectionLogging{}) </span><span class="cov1" title="1">{
+ tmp := App{LogPreviewLimit: fc.Logging.LogPreviewLimit}
+ out.mergeBasics(&amp;tmp)
+ }</span>
+
+ // completion
+ <span class="cov3" title="4">if (fc.Completion != sectionCompletion{}) </span><span class="cov2" title="3">{
+ tmp := App{
+ CompletionDebounceMs: fc.Completion.CompletionDebounceMs,
+ CompletionThrottleMs: fc.Completion.CompletionThrottleMs,
+ ManualInvokeMinPrefix: fc.Completion.ManualInvokeMinPrefix,
+ }
+ out.mergeBasics(&amp;tmp)
+ }</span>
+
+ // triggers
+ <span class="cov3" title="4">if len(fc.Triggers.TriggerCharacters) &gt; 0 </span><span class="cov2" title="3">{
+ tmp := App{TriggerCharacters: fc.Triggers.TriggerCharacters}
+ out.mergeBasics(&amp;tmp)
+ }</span>
+
+ // inline
+ <span class="cov3" title="4">if (fc.Inline != sectionInline{}) </span><span class="cov1" title="1">{
+ tmp := App{InlineOpen: fc.Inline.InlineOpen, InlineClose: fc.Inline.InlineClose}
+ out.mergeBasics(&amp;tmp)
+ }</span>
+
+ // chat
+ <span class="cov3" title="4">if strings.TrimSpace(fc.Chat.ChatSuffix) != "" || len(fc.Chat.ChatPrefixes) &gt; 0 </span><span class="cov1" title="1">{
+ tmp := App{ChatSuffix: fc.Chat.ChatSuffix, ChatPrefixes: fc.Chat.ChatPrefixes}
+ out.mergeBasics(&amp;tmp)
+ }</span>
+
+ // provider
+ <span class="cov3" title="4">if strings.TrimSpace(fc.Provider.Name) != "" </span><span class="cov2" title="3">{
+ tmp := App{Provider: fc.Provider.Name}
+ out.mergeBasics(&amp;tmp)
+ }</span>
+
+ // openai
+ <span class="cov3" title="4">if (fc.OpenAI != sectionOpenAI{}) || fc.OpenAI.Temperature != nil </span><span class="cov2" title="3">{
+ tmp := App{
+ OpenAIBaseURL: fc.OpenAI.BaseURL,
+ OpenAIModel: fc.OpenAI.Model,
+ OpenAITemperature: fc.OpenAI.Temperature,
+ }
+ out.mergeProviderFields(&amp;tmp)
+ }</span>
+
+ // copilot
+ <span class="cov3" title="4">if (fc.Copilot != sectionCopilot{}) || fc.Copilot.Temperature != nil </span><span class="cov2" title="3">{
+ tmp := App{
+ CopilotBaseURL: fc.Copilot.BaseURL,
+ CopilotModel: fc.Copilot.Model,
+ CopilotTemperature: fc.Copilot.Temperature,
+ }
+ out.mergeProviderFields(&amp;tmp)
+ }</span>
+
+ // ollama
+ <span class="cov3" title="4">if (fc.Ollama != sectionOllama{}) || fc.Ollama.Temperature != nil </span><span class="cov2" title="3">{
+ tmp := App{
+ OllamaBaseURL: fc.Ollama.BaseURL,
+ OllamaModel: fc.Ollama.Model,
+ OllamaTemperature: fc.Ollama.Temperature,
+ }
+ out.mergeProviderFields(&amp;tmp)
+ }</span>
+
+ // prompts
+ // completion
+ <span class="cov3" title="4">if (fc.Prompts.Completion != sectionPromptsCompletion{}) </span><span class="cov1" title="1">{
+ if strings.TrimSpace(fc.Prompts.Completion.SystemGeneral) != "" </span><span class="cov1" title="1">{
+ out.PromptCompletionSystemGeneral = fc.Prompts.Completion.SystemGeneral
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.Completion.SystemParams) != "" </span><span class="cov1" title="1">{
+ out.PromptCompletionSystemParams = fc.Prompts.Completion.SystemParams
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.Completion.SystemInline) != "" </span><span class="cov1" title="1">{
+ out.PromptCompletionSystemInline = fc.Prompts.Completion.SystemInline
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.Completion.UserGeneral) != "" </span><span class="cov1" title="1">{
+ out.PromptCompletionUserGeneral = fc.Prompts.Completion.UserGeneral
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.Completion.UserParams) != "" </span><span class="cov1" title="1">{
+ out.PromptCompletionUserParams = fc.Prompts.Completion.UserParams
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.Completion.ExtraHeader) != "" </span><span class="cov1" title="1">{
+ out.PromptCompletionExtraHeader = fc.Prompts.Completion.ExtraHeader
+ }</span>
+ }
+ // chat
+ <span class="cov3" title="4">if strings.TrimSpace(fc.Prompts.Chat.System) != "" </span><span class="cov1" title="1">{
+ out.PromptChatSystem = fc.Prompts.Chat.System
+ }</span>
+ // code action
+ <span class="cov3" title="4">if (fc.Prompts.CodeAction != sectionPromptsCodeAction{}) </span><span class="cov1" title="1">{
+ if strings.TrimSpace(fc.Prompts.CodeAction.RewriteSystem) != "" </span><span class="cov1" title="1">{
+ out.PromptCodeActionRewriteSystem = fc.Prompts.CodeAction.RewriteSystem
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.CodeAction.DiagnosticsSystem) != "" </span><span class="cov1" title="1">{
+ out.PromptCodeActionDiagnosticsSystem = fc.Prompts.CodeAction.DiagnosticsSystem
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.CodeAction.DocumentSystem) != "" </span><span class="cov1" title="1">{
+ out.PromptCodeActionDocumentSystem = fc.Prompts.CodeAction.DocumentSystem
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.CodeAction.RewriteUser) != "" </span><span class="cov1" title="1">{
+ out.PromptCodeActionRewriteUser = fc.Prompts.CodeAction.RewriteUser
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.CodeAction.DiagnosticsUser) != "" </span><span class="cov1" title="1">{
+ out.PromptCodeActionDiagnosticsUser = fc.Prompts.CodeAction.DiagnosticsUser
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.CodeAction.DocumentUser) != "" </span><span class="cov1" title="1">{
+ out.PromptCodeActionDocumentUser = fc.Prompts.CodeAction.DocumentUser
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.CodeAction.GoTestSystem) != "" </span><span class="cov1" title="1">{
+ out.PromptCodeActionGoTestSystem = fc.Prompts.CodeAction.GoTestSystem
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.CodeAction.GoTestUser) != "" </span><span class="cov1" title="1">{
+ out.PromptCodeActionGoTestUser = fc.Prompts.CodeAction.GoTestUser
+ }</span>
+ }
+ // cli
+ <span class="cov3" title="4">if (fc.Prompts.CLI != sectionPromptsCLI{}) </span><span class="cov1" title="1">{
+ if strings.TrimSpace(fc.Prompts.CLI.DefaultSystem) != "" </span><span class="cov1" title="1">{
+ out.PromptCLIDefaultSystem = fc.Prompts.CLI.DefaultSystem
+ }</span>
+ <span class="cov1" title="1">if strings.TrimSpace(fc.Prompts.CLI.ExplainSystem) != "" </span><span class="cov1" title="1">{
+ out.PromptCLIExplainSystem = fc.Prompts.CLI.ExplainSystem
+ }</span>
+ }
+ // provider-native
+ <span class="cov3" title="4">if strings.TrimSpace(fc.Prompts.ProviderNative.Completion) != "" </span><span class="cov1" title="1">{
+ out.PromptNativeCompletion = fc.Prompts.ProviderNative.Completion
+ }</span>
+
+ <span class="cov3" title="4">return out</span>
+}
+
+func loadFromFile(path string, logger *log.Logger) (*App, error) <span class="cov4" title="8">{
+ b, err := os.ReadFile(path)
+ if err != nil </span><span class="cov2" title="2">{
+ if !os.IsNotExist(err) &amp;&amp; logger != nil </span><span class="cov0" title="0">{
+ logger.Printf("cannot open TOML config file %s: %v", path, err)
+ }</span>
+ <span class="cov2" title="2">return nil, err</span>
+ }
+
+ <span class="cov4" title="6">var tables fileConfig
+ errTables := toml.NewDecoder(strings.NewReader(string(b))).Decode(&amp;tables)
+ // Raw map for validation/presence checks
+ var raw map[string]any
+ _ = toml.Unmarshal(b, &amp;raw)
+ if errTables != nil </span><span class="cov2" title="2">{
+ if logger != nil </span><span class="cov2" title="2">{
+ logger.Printf("invalid TOML config file %s: %v", path, errTables)
+ }</span>
+ <span class="cov2" title="2">return nil, errTables</span>
+ }
+
+ // Reject legacy flat keys at top-level (sectioned-only config is allowed)
+ <span class="cov3" title="4">legacy := map[string]struct{}{
+ "max_tokens": {}, "context_mode": {}, "context_window_lines": {}, "max_context_tokens": {},
+ "log_preview_limit": {}, "completion_debounce_ms": {}, "completion_throttle_ms": {},
+ "manual_invoke_min_prefix": {}, "trigger_characters": {}, "inline_open": {}, "inline_close": {},
+ "chat_suffix": {}, "chat_prefixes": {}, "coding_temperature": {}, "provider": {},
+ "openai_model": {}, "openai_base_url": {}, "openai_temperature": {},
+ "ollama_model": {}, "ollama_base_url": {}, "ollama_temperature": {},
+ "copilot_model": {}, "copilot_base_url": {}, "copilot_temperature": {},
+ }
+ for k := range raw </span><span class="cov6" title="27">{
+ if _, isTable := map[string]struct{}{"general": {}, "logging": {}, "completion": {}, "triggers": {}, "inline": {}, "chat": {}, "provider": {}, "openai": {}, "copilot": {}, "ollama": {}, "prompts": {}}[k]; isTable </span><span class="cov6" title="27">{
+ continue</span>
+ }
+ <span class="cov0" title="0">if _, isLegacy := legacy[k]; isLegacy </span><span class="cov0" title="0">{
+ return nil, fmt.Errorf("unsupported flat key '%s' in config; use sectioned tables (see config.toml.example)", k)
+ }</span>
+ }
+
+ <span class="cov3" title="4">if logger != nil </span><span class="cov3" title="4">{
+ logger.Printf("loaded configuration from %s (TOML)", path)
+ }</span>
+
+ // Merge order: flat first, then tables (so tables win over zero flat values)
+ // Build App from tables only
+ <span class="cov3" title="4">tab := tables.toApp()
+ // Ensure explicit values from raw map are respected (defensive for ints)
+ if t, ok := raw["completion"].(map[string]any); ok </span><span class="cov2" title="3">{
+ if v, present := t["manual_invoke_min_prefix"]; present </span><span class="cov2" title="3">{
+ switch vv := v.(type) </span>{
+ case int64:<span class="cov2" title="3">
+ tab.ManualInvokeMinPrefix = int(vv)</span>
+ case int:<span class="cov0" title="0">
+ tab.ManualInvokeMinPrefix = vv</span>
+ case float64:<span class="cov0" title="0">
+ tab.ManualInvokeMinPrefix = int(vv)</span>
+ }
+ }
+ }
+ <span class="cov3" title="4">if t, ok := raw["logging"].(map[string]any); ok </span><span class="cov2" title="3">{
+ if v, present := t["log_preview_limit"]; present </span><span class="cov2" title="3">{
+ switch vv := v.(type) </span>{
+ case int64:<span class="cov2" title="3">
+ tab.LogPreviewLimit = int(vv)</span>
+ case int:<span class="cov0" title="0">
+ tab.LogPreviewLimit = vv</span>
+ case float64:<span class="cov0" title="0">
+ tab.LogPreviewLimit = int(vv)</span>
+ }
+ }
+ }
+ <span class="cov3" title="4">return &amp;tab, nil</span>
}
-func (a *App) mergeWith(other *App) <span class="cov3" title="4">{
- a.mergeBasics(other)
- a.mergeProviderFields(other)
+func (a *App) mergeWith(other *App) <span class="cov3" title="5">{
+ a.mergeBasics(other)
+ a.mergeProviderFields(other)
+ a.mergePrompts(other)
}</span>
// mergeBasics merges general (non-provider) fields.
-func (a *App) mergeBasics(other *App) <span class="cov3" title="4">{
- if other.MaxTokens &gt; 0 </span><span class="cov3" title="3">{
+func (a *App) mergeBasics(other *App) <span class="cov6" title="20">{
+ if other.MaxTokens &gt; 0 </span><span class="cov4" title="7">{
a.MaxTokens = other.MaxTokens
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.ContextMode); s != "" </span><span class="cov3" title="3">{
+ <span class="cov6" title="20">if s := strings.TrimSpace(other.ContextMode); s != "" </span><span class="cov4" title="7">{
a.ContextMode = s
}</span>
- <span class="cov3" title="4">if other.ContextWindowLines &gt; 0 </span><span class="cov3" title="3">{
+ <span class="cov6" title="20">if other.ContextWindowLines &gt; 0 </span><span class="cov4" title="7">{
a.ContextWindowLines = other.ContextWindowLines
}</span>
- <span class="cov3" title="4">if other.MaxContextTokens &gt; 0 </span><span class="cov3" title="3">{
+ <span class="cov6" title="20">if other.MaxContextTokens &gt; 0 </span><span class="cov4" title="7">{
a.MaxContextTokens = other.MaxContextTokens
}</span>
- <span class="cov3" title="4">if other.LogPreviewLimit &gt;= 0 </span><span class="cov3" title="4">{
+ <span class="cov6" title="20">if other.LogPreviewLimit &gt;= 0 </span><span class="cov6" title="20">{
a.LogPreviewLimit = other.LogPreviewLimit
}</span>
- <span class="cov3" title="4">if other.CodingTemperature != nil </span><span class="cov3" title="3">{ // allow explicit 0.0
+ <span class="cov6" title="20">if other.CodingTemperature != nil </span><span class="cov4" title="7">{ // allow explicit 0.0
a.CodingTemperature = other.CodingTemperature
}</span>
- <span class="cov3" title="4">if other.ManualInvokeMinPrefix &gt;= 0 </span><span class="cov3" title="4">{
+ <span class="cov6" title="20">if other.ManualInvokeMinPrefix &gt;= 0 </span><span class="cov6" title="20">{
a.ManualInvokeMinPrefix = other.ManualInvokeMinPrefix
}</span>
- <span class="cov3" title="4">if other.CompletionDebounceMs &gt; 0 </span><span class="cov3" title="3">{
+ <span class="cov6" title="20">if other.CompletionDebounceMs &gt; 0 </span><span class="cov4" title="7">{
a.CompletionDebounceMs = other.CompletionDebounceMs
}</span>
- <span class="cov3" title="4">if other.CompletionThrottleMs &gt; 0 </span><span class="cov3" title="3">{
+ <span class="cov6" title="20">if other.CompletionThrottleMs &gt; 0 </span><span class="cov4" title="7">{
a.CompletionThrottleMs = other.CompletionThrottleMs
}</span>
- <span class="cov3" title="4">if len(other.TriggerCharacters) &gt; 0 </span><span class="cov3" title="3">{
+ <span class="cov6" title="20">if len(other.TriggerCharacters) &gt; 0 </span><span class="cov4" title="7">{
a.TriggerCharacters = slices.Clone(other.TriggerCharacters)
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.InlineOpen); s != "" </span><span class="cov0" title="0">{
+ <span class="cov6" title="20">if s := strings.TrimSpace(other.InlineOpen); s != "" </span><span class="cov2" title="2">{
a.InlineOpen = s
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.InlineClose); s != "" </span><span class="cov0" title="0">{
+ <span class="cov6" title="20">if s := strings.TrimSpace(other.InlineClose); s != "" </span><span class="cov2" title="2">{
a.InlineClose = s
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.ChatSuffix); s != "" </span><span class="cov0" title="0">{
+ <span class="cov6" title="20">if s := strings.TrimSpace(other.ChatSuffix); s != "" </span><span class="cov2" title="2">{
a.ChatSuffix = s
}</span>
- <span class="cov3" title="4">if len(other.ChatPrefixes) &gt; 0 </span><span class="cov0" title="0">{
+ <span class="cov6" title="20">if len(other.ChatPrefixes) &gt; 0 </span><span class="cov2" title="2">{
a.ChatPrefixes = slices.Clone(other.ChatPrefixes)
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.Provider); s != "" </span><span class="cov3" title="4">{
+ <span class="cov6" title="20">if s := strings.TrimSpace(other.Provider); s != "" </span><span class="cov4" title="7">{
a.Provider = s
}</span>
}
+// mergePrompts copies non-empty prompt templates from other.
+func (a *App) mergePrompts(other *App) <span class="cov3" title="5">{
+ // Completion
+ if strings.TrimSpace(other.PromptCompletionSystemGeneral) != "" </span><span class="cov1" title="1">{
+ a.PromptCompletionSystemGeneral = other.PromptCompletionSystemGeneral
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCompletionSystemParams) != "" </span><span class="cov1" title="1">{
+ a.PromptCompletionSystemParams = other.PromptCompletionSystemParams
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCompletionSystemInline) != "" </span><span class="cov1" title="1">{
+ a.PromptCompletionSystemInline = other.PromptCompletionSystemInline
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCompletionUserGeneral) != "" </span><span class="cov1" title="1">{
+ a.PromptCompletionUserGeneral = other.PromptCompletionUserGeneral
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCompletionUserParams) != "" </span><span class="cov1" title="1">{
+ a.PromptCompletionUserParams = other.PromptCompletionUserParams
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCompletionExtraHeader) != "" </span><span class="cov1" title="1">{
+ a.PromptCompletionExtraHeader = other.PromptCompletionExtraHeader
+ }</span>
+ // Provider-native
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptNativeCompletion) != "" </span><span class="cov1" title="1">{
+ a.PromptNativeCompletion = other.PromptNativeCompletion
+ }</span>
+ // Chat
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptChatSystem) != "" </span><span class="cov1" title="1">{
+ a.PromptChatSystem = other.PromptChatSystem
+ }</span>
+ // Code actions
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCodeActionRewriteSystem) != "" </span><span class="cov1" title="1">{
+ a.PromptCodeActionRewriteSystem = other.PromptCodeActionRewriteSystem
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCodeActionDiagnosticsSystem) != "" </span><span class="cov1" title="1">{
+ a.PromptCodeActionDiagnosticsSystem = other.PromptCodeActionDiagnosticsSystem
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCodeActionDocumentSystem) != "" </span><span class="cov1" title="1">{
+ a.PromptCodeActionDocumentSystem = other.PromptCodeActionDocumentSystem
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCodeActionRewriteUser) != "" </span><span class="cov1" title="1">{
+ a.PromptCodeActionRewriteUser = other.PromptCodeActionRewriteUser
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCodeActionDiagnosticsUser) != "" </span><span class="cov1" title="1">{
+ a.PromptCodeActionDiagnosticsUser = other.PromptCodeActionDiagnosticsUser
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCodeActionDocumentUser) != "" </span><span class="cov1" title="1">{
+ a.PromptCodeActionDocumentUser = other.PromptCodeActionDocumentUser
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCodeActionGoTestSystem) != "" </span><span class="cov1" title="1">{
+ a.PromptCodeActionGoTestSystem = other.PromptCodeActionGoTestSystem
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCodeActionGoTestUser) != "" </span><span class="cov1" title="1">{
+ a.PromptCodeActionGoTestUser = other.PromptCodeActionGoTestUser
+ }</span>
+ // CLI
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCLIDefaultSystem) != "" </span><span class="cov1" title="1">{
+ a.PromptCLIDefaultSystem = other.PromptCLIDefaultSystem
+ }</span>
+ <span class="cov3" title="5">if strings.TrimSpace(other.PromptCLIExplainSystem) != "" </span><span class="cov1" title="1">{
+ a.PromptCLIExplainSystem = other.PromptCLIExplainSystem
+ }</span>
+}
+
// mergeProviderFields merges per-provider configuration.
-func (a *App) mergeProviderFields(other *App) <span class="cov3" title="4">{
- if s := strings.TrimSpace(other.OpenAIBaseURL); s != "" </span><span class="cov3" title="3">{
+func (a *App) mergeProviderFields(other *App) <span class="cov5" title="14">{
+ if s := strings.TrimSpace(other.OpenAIBaseURL); s != "" </span><span class="cov4" title="7">{
a.OpenAIBaseURL = s
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.OpenAIModel); s != "" </span><span class="cov3" title="4">{
+ <span class="cov5" title="14">if s := strings.TrimSpace(other.OpenAIModel); s != "" </span><span class="cov4" title="7">{
a.OpenAIModel = s
}</span>
- <span class="cov3" title="4">if other.OpenAITemperature != nil </span><span class="cov3" title="3">{ // allow explicit 0.0
+ <span class="cov5" title="14">if other.OpenAITemperature != nil </span><span class="cov4" title="7">{ // allow explicit 0.0
a.OpenAITemperature = other.OpenAITemperature
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.OllamaBaseURL); s != "" </span><span class="cov3" title="3">{
+ <span class="cov5" title="14">if s := strings.TrimSpace(other.OllamaBaseURL); s != "" </span><span class="cov4" title="7">{
a.OllamaBaseURL = s
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.OllamaModel); s != "" </span><span class="cov3" title="3">{
+ <span class="cov5" title="14">if s := strings.TrimSpace(other.OllamaModel); s != "" </span><span class="cov4" title="7">{
a.OllamaModel = s
}</span>
- <span class="cov3" title="4">if other.OllamaTemperature != nil </span><span class="cov3" title="3">{ // allow explicit 0.0
+ <span class="cov5" title="14">if other.OllamaTemperature != nil </span><span class="cov4" title="7">{ // allow explicit 0.0
a.OllamaTemperature = other.OllamaTemperature
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.CopilotBaseURL); s != "" </span><span class="cov3" title="3">{
+ <span class="cov5" title="14">if s := strings.TrimSpace(other.CopilotBaseURL); s != "" </span><span class="cov4" title="7">{
a.CopilotBaseURL = s
}</span>
- <span class="cov3" title="4">if s := strings.TrimSpace(other.CopilotModel); s != "" </span><span class="cov3" title="3">{
+ <span class="cov5" title="14">if s := strings.TrimSpace(other.CopilotModel); s != "" </span><span class="cov4" title="7">{
a.CopilotModel = s
}</span>
- <span class="cov3" title="4">if other.CopilotTemperature != nil </span><span class="cov3" title="3">{ // allow explicit 0.0
+ <span class="cov5" title="14">if other.CopilotTemperature != nil </span><span class="cov4" title="7">{ // allow explicit 0.0
a.CopilotTemperature = other.CopilotTemperature
}</span>
}
-func getConfigPath() (string, error) <span class="cov4" title="6">{
+func getConfigPath() (string, error) <span class="cov4" title="8">{
var configPath string
- if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" </span><span class="cov4" title="5">{
+ if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" </span><span class="cov4" title="7">{
configPath = filepath.Join(xdgConfigHome, "hexai", "config.toml")
}</span> else<span class="cov1" title="1"> {
home, err := os.UserHomeDir()
@@ -413,22 +845,22 @@ func getConfigPath() (string, error) <span class="cov4" title="6">{
}</span>
<span class="cov1" title="1">configPath = filepath.Join(home, ".config", "hexai", "config.toml")</span>
}
- <span class="cov4" title="6">return configPath, nil</span>
+ <span class="cov4" title="8">return configPath, nil</span>
}
// --- Environment overrides ---
// loadFromEnv constructs an App containing only fields set via HEXAI_* env vars.
// These values should take precedence over file config when merged.
-func loadFromEnv(logger *log.Logger) *App <span class="cov4" title="5">{
+func loadFromEnv(logger *log.Logger) *App <span class="cov4" title="7">{
var out App
var any bool
// helpers
- getenv := func(k string) string </span><span class="cov10" title="120">{ return strings.TrimSpace(os.Getenv(k)) }</span>
- <span class="cov4" title="5">parseInt := func(k string) (int, bool) </span><span class="cov7" title="35">{
+ getenv := func(k string) string </span><span class="cov10" title="168">{ return strings.TrimSpace(os.Getenv(k)) }</span>
+ <span class="cov4" title="7">parseInt := func(k string) (int, bool) </span><span class="cov7" title="49">{
v := getenv(k)
- if v == "" </span><span class="cov7" title="28">{
+ if v == "" </span><span class="cov7" title="42">{
return 0, false
}</span>
<span class="cov4" title="7">n, err := strconv.Atoi(v)
@@ -440,9 +872,9 @@ func loadFromEnv(logger *log.Logger) *App <span class="cov4" title="5">{
}
<span class="cov4" title="7">return n, true</span>
}
- <span class="cov4" title="5">parseFloatPtr := func(k string) (*float64, bool) </span><span class="cov6" title="20">{
+ <span class="cov4" title="7">parseFloatPtr := func(k string) (*float64, bool) </span><span class="cov6" title="28">{
v := getenv(k)
- if v == "" </span><span class="cov6" title="16">{
+ if v == "" </span><span class="cov6" title="24">{
return nil, false
}</span>
<span class="cov3" title="4">f, err := strconv.ParseFloat(v, 64)
@@ -455,65 +887,65 @@ func loadFromEnv(logger *log.Logger) *App <span class="cov4" title="5">{
<span class="cov3" title="4">return &amp;f, true</span>
}
- <span class="cov4" title="5">if n, ok := parseInt("HEXAI_MAX_TOKENS"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if n, ok := parseInt("HEXAI_MAX_TOKENS"); ok </span><span class="cov1" title="1">{
out.MaxTokens = n
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_CONTEXT_MODE"); s != "" </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_CONTEXT_MODE"); s != "" </span><span class="cov1" title="1">{
out.ContextMode = s
any = true
}</span>
- <span class="cov4" title="5">if n, ok := parseInt("HEXAI_CONTEXT_WINDOW_LINES"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if n, ok := parseInt("HEXAI_CONTEXT_WINDOW_LINES"); ok </span><span class="cov1" title="1">{
out.ContextWindowLines = n
any = true
}</span>
- <span class="cov4" title="5">if n, ok := parseInt("HEXAI_MAX_CONTEXT_TOKENS"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if n, ok := parseInt("HEXAI_MAX_CONTEXT_TOKENS"); ok </span><span class="cov1" title="1">{
out.MaxContextTokens = n
any = true
}</span>
- <span class="cov4" title="5">if n, ok := parseInt("HEXAI_LOG_PREVIEW_LIMIT"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if n, ok := parseInt("HEXAI_LOG_PREVIEW_LIMIT"); ok </span><span class="cov1" title="1">{
out.LogPreviewLimit = n
any = true
}</span>
- <span class="cov4" title="5">if n, ok := parseInt("HEXAI_MANUAL_INVOKE_MIN_PREFIX"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if n, ok := parseInt("HEXAI_MANUAL_INVOKE_MIN_PREFIX"); ok </span><span class="cov1" title="1">{
out.ManualInvokeMinPrefix = n
any = true
}</span>
- <span class="cov4" title="5">if n, ok := parseInt("HEXAI_COMPLETION_DEBOUNCE_MS"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if n, ok := parseInt("HEXAI_COMPLETION_DEBOUNCE_MS"); ok </span><span class="cov1" title="1">{
out.CompletionDebounceMs = n
any = true
}</span>
- <span class="cov4" title="5">if n, ok := parseInt("HEXAI_COMPLETION_THROTTLE_MS"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if n, ok := parseInt("HEXAI_COMPLETION_THROTTLE_MS"); ok </span><span class="cov1" title="1">{
out.CompletionThrottleMs = n
any = true
}</span>
- <span class="cov4" title="5">if f, ok := parseFloatPtr("HEXAI_CODING_TEMPERATURE"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if f, ok := parseFloatPtr("HEXAI_CODING_TEMPERATURE"); ok </span><span class="cov1" title="1">{
out.CodingTemperature = f
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_TRIGGER_CHARACTERS"); s != "" </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_TRIGGER_CHARACTERS"); s != "" </span><span class="cov1" title="1">{
parts := strings.Split(s, ",")
out.TriggerCharacters = nil
- for _, p := range parts </span><span class="cov3" title="3">{
- if t := strings.TrimSpace(p); t != "" </span><span class="cov3" title="3">{
+ for _, p := range parts </span><span class="cov2" title="3">{
+ if t := strings.TrimSpace(p); t != "" </span><span class="cov2" title="3">{
out.TriggerCharacters = append(out.TriggerCharacters, t)
}</span>
}
<span class="cov1" title="1">any = true</span>
}
- <span class="cov4" title="5">if s := getenv("HEXAI_INLINE_OPEN"); s != "" </span><span class="cov0" title="0">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_INLINE_OPEN"); s != "" </span><span class="cov0" title="0">{
out.InlineOpen = s
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_INLINE_CLOSE"); s != "" </span><span class="cov0" title="0">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_INLINE_CLOSE"); s != "" </span><span class="cov0" title="0">{
out.InlineClose = s
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_CHAT_SUFFIX"); s != "" </span><span class="cov0" title="0">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_CHAT_SUFFIX"); s != "" </span><span class="cov0" title="0">{
out.ChatSuffix = s
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_CHAT_PREFIXES"); s != "" </span><span class="cov0" title="0">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_CHAT_PREFIXES"); s != "" </span><span class="cov0" title="0">{
parts := strings.Split(s, ",")
out.ChatPrefixes = nil
for _, p := range parts </span><span class="cov0" title="0">{
@@ -523,52 +955,52 @@ func loadFromEnv(logger *log.Logger) *App <span class="cov4" title="5">{
}
<span class="cov0" title="0">any = true</span>
}
- <span class="cov4" title="5">if s := getenv("HEXAI_PROVIDER"); s != "" </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_PROVIDER"); s != "" </span><span class="cov1" title="1">{
out.Provider = s
any = true
}</span>
// Provider-specific
- <span class="cov4" title="5">if s := getenv("HEXAI_OPENAI_BASE_URL"); s != "" </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_OPENAI_BASE_URL"); s != "" </span><span class="cov1" title="1">{
out.OpenAIBaseURL = s
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_OPENAI_MODEL"); s != "" </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_OPENAI_MODEL"); s != "" </span><span class="cov1" title="1">{
out.OpenAIModel = s
any = true
}</span>
- <span class="cov4" title="5">if f, ok := parseFloatPtr("HEXAI_OPENAI_TEMPERATURE"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if f, ok := parseFloatPtr("HEXAI_OPENAI_TEMPERATURE"); ok </span><span class="cov1" title="1">{
out.OpenAITemperature = f
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_OLLAMA_BASE_URL"); s != "" </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_OLLAMA_BASE_URL"); s != "" </span><span class="cov1" title="1">{
out.OllamaBaseURL = s
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_OLLAMA_MODEL"); s != "" </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_OLLAMA_MODEL"); s != "" </span><span class="cov1" title="1">{
out.OllamaModel = s
any = true
}</span>
- <span class="cov4" title="5">if f, ok := parseFloatPtr("HEXAI_OLLAMA_TEMPERATURE"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if f, ok := parseFloatPtr("HEXAI_OLLAMA_TEMPERATURE"); ok </span><span class="cov1" title="1">{
out.OllamaTemperature = f
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_COPILOT_BASE_URL"); s != "" </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_COPILOT_BASE_URL"); s != "" </span><span class="cov1" title="1">{
out.CopilotBaseURL = s
any = true
}</span>
- <span class="cov4" title="5">if s := getenv("HEXAI_COPILOT_MODEL"); s != "" </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if s := getenv("HEXAI_COPILOT_MODEL"); s != "" </span><span class="cov1" title="1">{
out.CopilotModel = s
any = true
}</span>
- <span class="cov4" title="5">if f, ok := parseFloatPtr("HEXAI_COPILOT_TEMPERATURE"); ok </span><span class="cov1" title="1">{
+ <span class="cov4" title="7">if f, ok := parseFloatPtr("HEXAI_COPILOT_TEMPERATURE"); ok </span><span class="cov1" title="1">{
out.CopilotTemperature = f
any = true
}</span>
- <span class="cov4" title="5">if !any </span><span class="cov3" title="4">{
+ <span class="cov4" title="7">if !any </span><span class="cov4" title="6">{
return nil
}</span>
<span class="cov1" title="1">return &amp;out</span>
@@ -600,13 +1032,24 @@ func Run(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.
// Load configuration with a logger so file-based config is respected.
logger := log.New(stderr, "hexai ", log.LstdFlags|log.Lmsgprefix)
cfg := appconfig.Load(logger)
- client, err := newClientFromConfig(cfg)
- if err != nil </span><span class="cov1" title="1">{
- fmt.Fprintf(stderr, logging.AnsiBase+"hexai: LLM disabled: %v"+logging.AnsiReset+"\n", err)
- return err
- }</span>
-
- <span class="cov0" title="0">return RunWithClient(ctx, args, stdin, stdout, stderr, client)</span>
+ client, err := newClientFromConfig(cfg)
+ if err != nil </span><span class="cov1" title="1">{
+ fmt.Fprintf(stderr, logging.AnsiBase+"hexai: LLM disabled: %v"+logging.AnsiReset+"\n", err)
+ return err
+ }</span>
+ // Inline the flow here to use configured CLI prompts.
+ <span class="cov0" title="0">input, rerr := readInput(stdin, args)
+ if rerr != nil </span><span class="cov0" title="0">{
+ fmt.Fprintln(stderr, logging.AnsiBase+rerr.Error()+logging.AnsiReset)
+ return rerr
+ }</span>
+ <span class="cov0" title="0">printProviderInfo(stderr, client)
+ msgs := buildMessagesFromConfig(cfg, input)
+ if err := runChat(ctx, client, msgs, input, stdout, stderr); err != nil </span><span class="cov0" title="0">{
+ fmt.Fprintf(stderr, logging.AnsiBase+"hexai: error: %v"+logging.AnsiReset+"\n", err)
+ return err
+ }</span>
+ <span class="cov0" title="0">return nil</span>
}
// RunWithClient executes the CLI flow using an already-constructed client.
@@ -618,7 +1061,7 @@ func RunWithClient(ctx context.Context, args []string, stdin io.Reader, stdout,
return err
}</span>
<span class="cov1" title="1">printProviderInfo(stderr, client)
- msgs := buildMessages(input)
+ msgs := buildMessages(input)
if err := runChat(ctx, client, msgs, input, stdout, stderr); err != nil </span><span class="cov1" title="1">{
fmt.Fprintf(stderr, logging.AnsiBase+"hexai: error: %v"+logging.AnsiReset+"\n", err)
return err
@@ -686,6 +1129,21 @@ func buildMessages(input string) []llm.Message <span class="cov10" title="6">{
}</span>
}
+// buildMessagesFromConfig uses configured CLI system prompts.
+func buildMessagesFromConfig(cfg appconfig.App, input string) []llm.Message <span class="cov0" title="0">{
+ lower := strings.ToLower(input)
+ system := cfg.PromptCLIDefaultSystem
+ if strings.Contains(lower, "explain") </span><span class="cov0" title="0">{
+ if strings.TrimSpace(cfg.PromptCLIExplainSystem) != "" </span><span class="cov0" title="0">{
+ system = cfg.PromptCLIExplainSystem
+ }</span>
+ }
+ <span class="cov0" title="0">return []llm.Message{
+ {Role: "system", Content: system},
+ {Role: "user", Content: input},
+ }</span>
+}
+
// runChat executes the chat request, handling streaming and summary output.
func runChat(ctx context.Context, client llm.Client, msgs []llm.Message, input string, out io.Writer, errw io.Writer) error <span class="cov7" title="4">{
start := time.Now()
@@ -827,23 +1285,41 @@ func ensureFactory(factory ServerFactory) ServerFactory <span class="cov10" titl
}
func makeServerOptions(cfg appconfig.App, logContext bool, client llm.Client) lsp.ServerOptions <span class="cov10" title="6">{
- return lsp.ServerOptions{
- LogContext: logContext,
- MaxTokens: cfg.MaxTokens,
- ContextMode: cfg.ContextMode,
- WindowLines: cfg.ContextWindowLines,
- MaxContextTokens: cfg.MaxContextTokens,
- CodingTemperature: cfg.CodingTemperature,
- Client: client,
- TriggerCharacters: cfg.TriggerCharacters,
- ManualInvokeMinPrefix: cfg.ManualInvokeMinPrefix,
- CompletionDebounceMs: cfg.CompletionDebounceMs,
- CompletionThrottleMs: cfg.CompletionThrottleMs,
- InlineOpen: cfg.InlineOpen,
- InlineClose: cfg.InlineClose,
- ChatSuffix: cfg.ChatSuffix,
- ChatPrefixes: cfg.ChatPrefixes,
- }
+ return lsp.ServerOptions{
+ LogContext: logContext,
+ MaxTokens: cfg.MaxTokens,
+ ContextMode: cfg.ContextMode,
+ WindowLines: cfg.ContextWindowLines,
+ MaxContextTokens: cfg.MaxContextTokens,
+ CodingTemperature: cfg.CodingTemperature,
+ Client: client,
+ TriggerCharacters: cfg.TriggerCharacters,
+ ManualInvokeMinPrefix: cfg.ManualInvokeMinPrefix,
+ CompletionDebounceMs: cfg.CompletionDebounceMs,
+ CompletionThrottleMs: cfg.CompletionThrottleMs,
+ InlineOpen: cfg.InlineOpen,
+ InlineClose: cfg.InlineClose,
+ ChatSuffix: cfg.ChatSuffix,
+ ChatPrefixes: cfg.ChatPrefixes,
+
+ // Prompts
+ PromptCompSysGeneral: cfg.PromptCompletionSystemGeneral,
+ PromptCompSysParams: cfg.PromptCompletionSystemParams,
+ PromptCompSysInline: cfg.PromptCompletionSystemInline,
+ PromptCompUserGeneral: cfg.PromptCompletionUserGeneral,
+ PromptCompUserParams: cfg.PromptCompletionUserParams,
+ PromptCompExtraHeader: cfg.PromptCompletionExtraHeader,
+ PromptNativeCompletion: cfg.PromptNativeCompletion,
+ PromptChatSystem: cfg.PromptChatSystem,
+ PromptRewriteSystem: cfg.PromptCodeActionRewriteSystem,
+ PromptDiagnosticsSystem: cfg.PromptCodeActionDiagnosticsSystem,
+ PromptDocumentSystem: cfg.PromptCodeActionDocumentSystem,
+ PromptRewriteUser: cfg.PromptCodeActionRewriteUser,
+ PromptDiagnosticsUser: cfg.PromptCodeActionDiagnosticsUser,
+ PromptDocumentUser: cfg.PromptCodeActionDocumentUser,
+ PromptGoTestSystem: cfg.PromptCodeActionGoTestSystem,
+ PromptGoTestUser: cfg.PromptCodeActionGoTestUser,
+ }
}</span>
</pre>
@@ -1822,7 +2298,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="cov1" title="1">{ return func(o *Options) </span><span class="cov1" title="1">{ o.Temperature = t }</span> }
-func WithMaxTokens(n int) RequestOption <span class="cov10" title="20">{ return func(o *Options) </span><span class="cov1" title="1">{ o.MaxTokens = n }</span> }
+func WithMaxTokens(n int) RequestOption <span class="cov10" title="25">{ return func(o *Options) </span><span class="cov1" title="1">{ 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>
}
@@ -1849,16 +2325,16 @@ type Config struct {
// by the caller; other environment-based configuration is not used.
func NewFromConfig(cfg Config, openAIAPIKey, copilotAPIKey string) (Client, error) <span class="cov8" title="14">{
p := strings.ToLower(strings.TrimSpace(cfg.Provider))
- if p == "" </span><span class="cov6" title="6">{
+ if p == "" </span><span class="cov6" title="7">{
p = "openai"
}</span>
<span class="cov8" title="14">switch p </span>{
case "openai":<span class="cov7" title="10">
- if strings.TrimSpace(openAIAPIKey) == "" </span><span class="cov5" title="4">{
+ if strings.TrimSpace(openAIAPIKey) == "" </span><span class="cov4" title="4">{
return nil, errors.New("missing OPENAI_API_KEY for provider openai")
}</span>
// Set coding-friendly default temperature if none provided
- <span class="cov6" title="6">if cfg.OpenAITemperature == nil </span><span class="cov5" title="4">{
+ <span class="cov6" title="6">if cfg.OpenAITemperature == nil </span><span class="cov4" title="4">{
t := 0.2
cfg.OpenAITemperature = &amp;t
}</span>
@@ -1869,7 +2345,7 @@ func NewFromConfig(cfg Config, openAIAPIKey, copilotAPIKey string) (Client, erro
cfg.OllamaTemperature = &amp;t
}</span>
<span class="cov1" title="1">return newOllama(cfg.OllamaBaseURL, cfg.OllamaModel, cfg.OllamaTemperature), nil</span>
- case "copilot":<span class="cov3" title="2">
+ case "copilot":<span class="cov2" title="2">
if strings.TrimSpace(copilotAPIKey) == "" </span><span class="cov1" title="1">{
return nil, errors.New("missing COPILOT_API_KEY for provider copilot")
}</span>
@@ -1952,11 +2428,11 @@ var std *log.Logger
func Bind(l *log.Logger) <span class="cov3" title="4">{ 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="141">{
- if std == nil </span><span class="cov9" title="101">{
+func Logf(prefix, format string, args ...any) <span class="cov10" title="143">{
+ if std == nil </span><span class="cov9" title="102">{
return
}</span>
- <span class="cov7" title="40">msg := fmt.Sprintf(format, args...)
+ <span class="cov7" title="41">msg := fmt.Sprintf(format, args...)
std.Print(AnsiBase + prefix + msg + AnsiReset)</span>
}
@@ -2079,7 +2555,7 @@ type document struct {
lines []string
}
-func (s *Server) setDocument(uri, text string) <span class="cov8" title="27">{
+func (s *Server) setDocument(uri, text string) <span class="cov8" title="32">{
s.mu.Lock()
defer s.mu.Unlock()
s.docs[uri] = &amp;document{uri: uri, text: text, lines: splitLines(text)}
@@ -2097,14 +2573,14 @@ func (s *Server) markActivity() <span class="cov3" title="4">{
s.mu.Unlock()
}</span>
-func (s *Server) getDocument(uri string) *document <span class="cov9" title="46">{
+func (s *Server) getDocument(uri string) *document <span class="cov9" title="51">{
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="cov10" title="66">{
+func splitLines(sx string) []string <span class="cov10" title="76">{
sx = strings.ReplaceAll(sx, "\r\n", "\n")
return strings.Split(sx, "\n")
}</span>
@@ -2195,20 +2671,20 @@ func hasAny(s string, needles []string) bool <span class="cov4" title="6">{
<span class="cov2" title="2">return false</span>
}
-func trimLen(s string) string <span class="cov8" title="39">{
+func trimLen(s string) string <span class="cov8" title="40">{
s = strings.TrimSpace(s)
if len(s) &gt; 200 </span><span class="cov1" title="1">{
return s[:200] + "…"
}</span>
- <span class="cov8" title="38">return s</span>
+ <span class="cov8" title="39">return s</span>
}
-func firstLine(s string) string <span class="cov7" title="21">{
+func firstLine(s string) string <span class="cov7" title="22">{
s = strings.ReplaceAll(s, "\r\n", "\n")
if idx := strings.IndexByte(s, '\n'); idx &gt;= 0 </span><span class="cov4" title="5">{
return s[:idx]
}</span>
- <span class="cov6" title="16">return s</span>
+ <span class="cov6" title="17">return s</span>
}
</pre>
@@ -2402,33 +2878,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="cov7" title="13">{
+func (s *Server) completionCacheKey(p CompletionParams, above, current, below, funcCtx string, inParams bool, hasExtra bool, extraText string) string <span class="cov7" title="14">{
// 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="cov7" title="13">left := strings.TrimRight(current[:idx], " \t")
+ <span class="cov7" title="14">left := strings.TrimRight(current[:idx], " \t")
right := ""
- if idx &lt; len(current) </span><span class="cov0" title="0">{
+ if idx &lt; len(current) </span><span class="cov1" title="1">{
right = current[idx:]
}</span>
- <span class="cov7" title="13">prov := ""
+ <span class="cov7" title="14">prov := ""
model := ""
- if s.llmClient != nil </span><span class="cov7" title="13">{
+ if s.llmClient != nil </span><span class="cov7" title="14">{
prov = s.llmClient.Name()
model = s.llmClient.DefaultModel()
}</span>
- <span class="cov7" title="13">temp := ""
+ <span class="cov7" title="14">temp := ""
if s.codingTemperature != nil </span><span class="cov0" title="0">{
temp = fmt.Sprintf("%.3f", *s.codingTemperature)
}</span>
- <span class="cov7" title="13">extra := ""
+ <span class="cov7" title="14">extra := ""
if hasExtra </span><span class="cov0" title="0">{
extra = strings.TrimSpace(extraText)
}</span>
// Compose a key from essential context parts
- <span class="cov7" title="13">return strings.Join([]string{
+ <span class="cov7" title="14">return strings.Join([]string{
"v1", // version for future-proofing
prov,
model,
@@ -2457,13 +2933,13 @@ func (s *Server) completionCacheGet(key string) (string, bool) <span class="cov6
return v, true</span>
}
-func (s *Server) completionCachePut(key, value string) <span class="cov6" title="10">{
+func (s *Server) completionCachePut(key, value string) <span class="cov7" title="11">{
s.mu.Lock()
defer s.mu.Unlock()
- if s.compCache == nil </span><span class="cov2" title="2">{
+ if s.compCache == nil </span><span class="cov3" title="3">{
s.compCache = make(map[string]string)
}</span>
- <span class="cov6" title="10">if _, exists := s.compCache[key]; !exists </span><span class="cov6" title="10">{
+ <span class="cov7" title="11">if _, exists := s.compCache[key]; !exists </span><span class="cov7" title="11">{
s.compCacheOrder = append(s.compCacheOrder, key)
s.compCache[key] = value
if len(s.compCacheOrder) &gt; 10 </span><span class="cov0" title="0">{
@@ -2472,7 +2948,7 @@ func (s *Server) completionCachePut(key, value string) <span class="cov6" title=
s.compCacheOrder = s.compCacheOrder[1:]
delete(s.compCache, old)
}</span>
- <span class="cov6" title="10">return</span>
+ <span class="cov7" title="11">return</span>
}
// update existing and mark most-recent
<span class="cov0" title="0">s.compCache[key] = value
@@ -2554,15 +3030,15 @@ func (s *Server) isTriggerEvent(p CompletionParams, current string) bool <span c
<span class="cov6" title="8">return false</span>
}
-func (s *Server) makeCompletionItems(cleaned string, inParams bool, current string, p CompletionParams, docStr string) []CompletionItem <span class="cov7" title="11">{
+func (s *Server) makeCompletionItems(cleaned string, inParams bool, current string, p CompletionParams, docStr string) []CompletionItem <span class="cov7" title="12">{
te, filter := computeTextEditAndFilter(cleaned, inParams, current, p)
rm := s.collectPromptRemovalEdits(p.TextDocument.URI)
label := labelForCompletion(cleaned, filter)
detail := "Hexai LLM completion"
- if s.llmClient != nil </span><span class="cov7" title="11">{
+ if s.llmClient != nil </span><span class="cov7" title="12">{
detail = "Hexai " + s.llmClient.Name() + ":" + s.llmClient.DefaultModel()
}</span>
- <span class="cov7" title="11">return []CompletionItem{{
+ <span class="cov7" title="12">return []CompletionItem{{
Label: label,
Kind: 1,
Detail: detail,
@@ -2743,11 +3219,11 @@ func (s *Server) buildDiagnosticsCodeAction(p CodeActionParams, sel string) *Cod
return &amp;ca</span>
}
-func (s *Server) resolveCodeAction(ca CodeAction) (CodeAction, bool) <span class="cov6" title="9">{
+func (s *Server) resolveCodeAction(ca CodeAction) (CodeAction, bool) <span class="cov6" title="12">{
if s.llmClient == nil || len(ca.Data) == 0 </span><span class="cov0" title="0">{
return ca, false
}</span>
- <span class="cov6" title="9">var payload struct {
+ <span class="cov6" title="12">var payload struct {
Type string `json:"type"`
URI string `json:"uri"`
Range Range `json:"range"`
@@ -2758,39 +3234,13 @@ func (s *Server) resolveCodeAction(ca CodeAction) (CodeAction, bool) <span class
if err := json.Unmarshal(ca.Data, &amp;payload); err != nil </span><span class="cov0" title="0">{
return ca, false
}</span>
- <span class="cov6" title="9">switch payload.Type </span>{
- case "rewrite":<span class="cov3" title="3">
- sys := "You are a precise code refactoring engine. Rewrite the given code strictly according to the instruction. Return only the updated code with no prose or backticks. Preserve formatting where reasonable."
- user := fmt.Sprintf("Instruction: %s\n\nSelected code to transform:\n%s", payload.Instruction, payload.Selection)
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
- opts := s.llmRequestOpts()
- if text, err := s.llmClient.Chat(ctx, messages, opts...); err == nil </span><span class="cov3" title="3">{
- if out := stripCodeFences(strings.TrimSpace(text)); out != "" </span><span class="cov3" title="3">{
- edit := WorkspaceEdit{Changes: map[string][]TextEdit{payload.URI: {{Range: payload.Range, NewText: out}}}}
- ca.Edit = &amp;edit
- return ca, true
- }</span>
- } else<span class="cov0" title="0"> {
- logging.Logf("lsp ", "codeAction rewrite llm error: %v", err)
- }</span>
- case "diagnostics":<span class="cov4" title="4">
- sys := "You are a precise code fixer. Resolve the given diagnostics by editing only the selected code. Return only the corrected code with no prose or backticks. Keep behavior and style, and avoid unrelated changes."
- var b strings.Builder
- b.WriteString("Diagnostics to resolve (selection only):\n")
- for i, dgn := range payload.Diagnostics </span><span class="cov4" title="4">{
- if dgn.Source != "" </span><span class="cov0" title="0">{
- fmt.Fprintf(&amp;b, "%d. [%s] %s\n", i+1, dgn.Source, dgn.Message)
- }</span> else<span class="cov4" title="4"> {
- fmt.Fprintf(&amp;b, "%d. %s\n", i+1, dgn.Message)
- }</span>
- }
- <span class="cov4" title="4">b.WriteString("\nSelected code:\n")
- b.WriteString(payload.Selection)
- ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second)
- defer cancel()
- messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: b.String()}}
+ <span class="cov6" title="12">switch payload.Type </span>{
+ case "rewrite":<span class="cov4" title="4">
+ sys := s.promptRewriteSystem
+ user := renderTemplate(s.promptRewriteUser, map[string]string{"instruction": payload.Instruction, "selection": payload.Selection})
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer cancel()
+ messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
opts := s.llmRequestOpts()
if text, err := s.llmClient.Chat(ctx, messages, opts...); err == nil </span><span class="cov4" title="4">{
if out := stripCodeFences(strings.TrimSpace(text)); out != "" </span><span class="cov4" title="4">{
@@ -2799,17 +3249,42 @@ func (s *Server) resolveCodeAction(ca CodeAction) (CodeAction, bool) <span class
return ca, true
}</span>
} else<span class="cov0" title="0"> {
- logging.Logf("lsp ", "codeAction diagnostics llm error: %v", err)
+ logging.Logf("lsp ", "codeAction rewrite llm error: %v", err)
}</span>
- case "document":<span class="cov2" title="2">
- sys := "You are a precise code documentation engine. Add idiomatic documentation comments to the given code. Preserve exact behavior and formatting as much as possible. Return only the updated code with comments, no prose or backticks."
- user := "Add documentation comments to this code:\n" + payload.Selection
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
+ case "diagnostics":<span class="cov4" title="5">
+ sys := s.promptDiagnosticsSystem
+ var b strings.Builder
+ for i, dgn := range payload.Diagnostics </span><span class="cov5" title="6">{
+ if dgn.Source != "" </span><span class="cov0" title="0">{
+ fmt.Fprintf(&amp;b, "%d. [%s] %s\n", i+1, dgn.Source, dgn.Message)
+ }</span> else<span class="cov5" title="6"> {
+ fmt.Fprintf(&amp;b, "%d. %s\n", i+1, dgn.Message)
+ }</span>
+ }
+ <span class="cov4" title="5">diagList := b.String()
+ user := renderTemplate(s.promptDiagnosticsUser, map[string]string{"diagnostics": diagList, "selection": payload.Selection})
+ ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second)
+ defer cancel()
+ messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
+ opts := s.llmRequestOpts()
+ if text, err := s.llmClient.Chat(ctx, messages, opts...); err == nil </span><span class="cov4" title="5">{
+ if out := stripCodeFences(strings.TrimSpace(text)); out != "" </span><span class="cov4" title="5">{
+ edit := WorkspaceEdit{Changes: map[string][]TextEdit{payload.URI: {{Range: payload.Range, NewText: out}}}}
+ ca.Edit = &amp;edit
+ return ca, true
+ }</span>
+ } else<span class="cov0" title="0"> {
+ logging.Logf("lsp ", "codeAction diagnostics llm error: %v", err)
+ }</span>
+ case "document":<span class="cov3" title="3">
+ sys := s.promptDocumentSystem
+ user := renderTemplate(s.promptDocumentUser, map[string]string{"selection": payload.Selection})
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer cancel()
+ messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
opts := s.llmRequestOpts()
- if text, err := s.llmClient.Chat(ctx, messages, opts...); err == nil </span><span class="cov2" title="2">{
- if out := stripCodeFences(strings.TrimSpace(text)); out != "" </span><span class="cov2" title="2">{
+ if text, err := s.llmClient.Chat(ctx, messages, opts...); err == nil </span><span class="cov3" title="3">{
+ if out := stripCodeFences(strings.TrimSpace(text)); out != "" </span><span class="cov3" title="3">{
edit := WorkspaceEdit{Changes: map[string][]TextEdit{payload.URI: {{Range: payload.Range, NewText: out}}}}
ca.Edit = &amp;edit
return ca, true
@@ -3127,17 +3602,17 @@ func findGoFunctionAtLine(lines []string, idx int) (int, int) <span class="cov2"
}
// generateGoTestFunction uses LLM to produce a test function; falls back to a stub when unavailable.
-func (s *Server) generateGoTestFunction(funcCode string) string <span class="cov2" title="2">{
- if s.llmClient != nil </span><span class="cov1" title="1">{
- sys := "You are a precise Go unit test generator. Given a Go function, write one or more Test* functions using the testing package. Do NOT include package or imports, only the test function(s). Prefer table-driven tests. Keep it minimal and idiomatic."
- user := "Function under test:\n" + funcCode
- ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second)
- defer cancel()
- messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
- opts := s.llmRequestOpts()
- if out, err := s.llmClient.Chat(ctx, messages, opts...); err == nil </span><span class="cov1" title="1">{
+func (s *Server) generateGoTestFunction(funcCode string) string <span class="cov3" title="3">{
+ if s.llmClient != nil </span><span class="cov2" title="2">{
+ sys := s.promptGoTestSystem
+ user := renderTemplate(s.promptGoTestUser, map[string]string{"function": funcCode})
+ ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second)
+ defer cancel()
+ messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
+ opts := s.llmRequestOpts()
+ if out, err := s.llmClient.Chat(ctx, messages, opts...); err == nil </span><span class="cov2" title="2">{
cleaned := strings.TrimSpace(stripCodeFences(out))
- if cleaned != "" </span><span class="cov1" title="1">{
+ if cleaned != "" </span><span class="cov2" title="2">{
return cleaned
}</span>
} else<span class="cov0" title="0"> {
@@ -3409,24 +3884,28 @@ 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="cov8" title="10">{
+func (s *Server) tryProviderNativeCompletion(current string, p CompletionParams, above, below, funcCtx, docStr string, hasExtra bool, extraText string, inParams bool) ([]CompletionItem, bool) <span class="cov8" title="11">{
cc, ok := s.llmClient.(llm.CodeCompleter)
if !ok </span><span class="cov6" title="6">{
return nil, false
}</span>
- <span class="cov5" title="4">before, after := s.docBeforeAfter(p.TextDocument.URI, p.Position)
- path := strings.TrimPrefix(p.TextDocument.URI, "file://")
- prompt := "// Path: " + path + "\n" + before
+ <span class="cov6" title="5">before, after := s.docBeforeAfter(p.TextDocument.URI, p.Position)
+ path := strings.TrimPrefix(p.TextDocument.URI, "file://")
+ // Build provider-native prompt from template
+ prompt := renderTemplate(s.promptNativeCompletion, map[string]string{
+ "path": path,
+ "before": before,
+ })
lang := ""
temp := 0.0
if s.codingTemperature != nil </span><span class="cov0" title="0">{
temp = *s.codingTemperature
}</span>
- <span class="cov5" title="4">prov := ""
- if s.llmClient != nil </span><span class="cov5" title="4">{
+ <span class="cov6" title="5">prov := ""
+ if s.llmClient != nil </span><span class="cov6" title="5">{
prov = s.llmClient.Name()
}</span>
- <span class="cov5" title="4">logging.Logf("lsp ", "completion path=codex provider=%s uri=%s", prov, path)
+ <span class="cov6" title="5">logging.Logf("lsp ", "completion path=codex provider=%s uri=%s", prov, path)
ctx2, cancel2 := context.WithTimeout(context.Background(), 8*time.Second)
defer cancel2()
@@ -3435,21 +3914,21 @@ func (s *Server) tryProviderNativeCompletion(current string, p CompletionParams,
if !s.waitForThrottle(ctx2) </span><span class="cov0" title="0">{
return nil, false
}</span>
- <span class="cov5" title="4">suggestions, err := cc.CodeCompletion(ctx2, prompt, after, 1, lang, temp)
- if err == nil &amp;&amp; len(suggestions) &gt; 0 </span><span class="cov4" title="3">{
+ <span class="cov6" title="5">suggestions, err := cc.CodeCompletion(ctx2, prompt, after, 1, lang, temp)
+ if err == nil &amp;&amp; len(suggestions) &gt; 0 </span><span class="cov5" title="4">{
cleaned := strings.TrimSpace(suggestions[0])
- if cleaned != "" </span><span class="cov4" title="3">{
+ if cleaned != "" </span><span class="cov5" title="4">{
cleaned = stripDuplicateAssignmentPrefix(current[:p.Position.Character], cleaned)
- if cleaned != "" </span><span class="cov4" title="3">{
+ if cleaned != "" </span><span class="cov5" title="4">{
cleaned = stripDuplicateGeneralPrefix(current[:p.Position.Character], cleaned)
}</span>
- <span class="cov4" title="3">if cleaned != "" &amp;&amp; hasDoubleOpenTrigger(current) </span><span class="cov1" title="1">{
+ <span class="cov5" title="4">if cleaned != "" &amp;&amp; hasDoubleOpenTrigger(current) </span><span class="cov1" title="1">{
indent := leadingIndent(current)
if indent != "" </span><span class="cov1" title="1">{
cleaned = applyIndent(indent, cleaned)
}</span>
}
- <span class="cov4" title="3">if strings.TrimSpace(cleaned) != "" </span><span class="cov4" title="3">{
+ <span class="cov5" title="4">if strings.TrimSpace(cleaned) != "" </span><span class="cov5" title="4">{
key := s.completionCacheKey(p, above, current, below, funcCtx, inParams, hasExtra, extraText)
s.completionCachePut(key, cleaned)
return s.makeCompletionItems(cleaned, inParams, current, p, docStr), true
@@ -3463,9 +3942,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="cov8" title="12">{
+func (s *Server) waitForDebounce(ctx context.Context) <span class="cov8" title="13">{
d := s.completionDebounce
- if d &lt;= 0 </span><span class="cov8" title="10">{
+ if d &lt;= 0 </span><span class="cov8" title="11">{
return
}</span>
<span class="cov3" title="2">for </span><span class="cov5" title="4">{
@@ -3493,9 +3972,9 @@ func (s *Server) waitForDebounce(ctx context.Context) <span class="cov8" 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="cov8" title="12">{
+func (s *Server) waitForThrottle(ctx context.Context) bool <span class="cov8" title="13">{
interval := s.throttleInterval
- if interval &lt;= 0 </span><span class="cov7" title="9">{
+ if interval &lt;= 0 </span><span class="cov8" title="10">{
return true
}</span>
<span class="cov4" title="3">var wait time.Duration
@@ -3524,19 +4003,35 @@ func (s *Server) waitForThrottle(ctx context.Context) bool <span class="cov8" ti
}
// 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="9">{
- sysPrompt, userPrompt := buildPrompts(inParams, p, above, current, below, funcCtx)
- messages := []llm.Message{
- {Role: "system", Content: sysPrompt},
- {Role: "user", Content: userPrompt},
- }
- if hasExtra &amp;&amp; extraText != "" </span><span class="cov1" title="1">{
- messages = append(messages, llm.Message{Role: "user", Content: "Additional context:\n" + extraText})
- }</span>
- <span class="cov7" title="9">if inlinePrompt </span><span class="cov3" title="2">{
- messages[0].Content = "You are a precise code completion/refactoring engine. Output only the code to insert with no prose, no comments, and no backticks. Return raw code only."
- }</span>
- <span class="cov7" title="9">return messages</span>
+func (s *Server) buildCompletionMessages(inlinePrompt, hasExtra bool, extraText string, inParams bool, p CompletionParams, above, current, below, funcCtx string) []llm.Message <span class="cov8" title="13">{
+ // Vars for templates
+ vars := map[string]string{
+ "file": p.TextDocument.URI,
+ "function": funcCtx,
+ "above": above,
+ "current": current,
+ "below": below,
+ "char": fmt.Sprintf("%d", p.Position.Character),
+ }
+ sys := s.promptCompSysGeneral
+ userTpl := s.promptCompUserGeneral
+ if inParams </span><span class="cov3" title="2">{
+ sys = s.promptCompSysParams
+ userTpl = s.promptCompUserParams
+ }</span>
+ <span class="cov8" title="13">if inlinePrompt &amp;&amp; strings.TrimSpace(s.promptCompSysInline) != "" </span><span class="cov1" title="1">{
+ sys = s.promptCompSysInline
+ }</span>
+ <span class="cov8" title="13">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(s.promptCompExtraHeader, map[string]string{"context": extraText})
+ if strings.TrimSpace(extra) == "" </span><span class="cov0" title="0">{
+ extra = extraText
+ }</span>
+ <span class="cov1" title="1">messages = append(messages, llm.Message{Role: "user", Content: extra})</span>
+ }
+ <span class="cov8" title="13">return messages</span>
}
// postProcessCompletion normalizes and deduplicates completion text and applies indentation rules.
@@ -3613,42 +4108,42 @@ func (s *Server) handleDidClose(req Request) <span class="cov1" title="1">{
// docBeforeAfter returns the full document text split at the given position.
// The returned strings are the text before the cursor (inclusive of anything
// left of the position) and the text after the cursor.
-func (s *Server) docBeforeAfter(uri string, pos Position) (string, string) <span class="cov7" title="6">{
+func (s *Server) docBeforeAfter(uri string, pos Position) (string, string) <span class="cov8" title="7">{
d := s.getDocument(uri)
if d == nil </span><span class="cov6" title="4">{
return "", ""
}</span>
// Clamp indices
- <span class="cov3" title="2">line := pos.Line
+ <span class="cov5" title="3">line := pos.Line
if line &lt; 0 </span><span class="cov0" title="0">{
line = 0
}</span>
- <span class="cov3" title="2">if line &gt;= len(d.lines) </span><span class="cov1" title="1">{
+ <span class="cov5" title="3">if line &gt;= len(d.lines) </span><span class="cov1" title="1">{
line = len(d.lines) - 1
}</span>
- <span class="cov3" title="2">col := pos.Character
+ <span class="cov5" title="3">col := pos.Character
if col &lt; 0 </span><span class="cov0" title="0">{
col = 0
}</span>
- <span class="cov3" title="2">if col &gt; len(d.lines[line]) </span><span class="cov1" title="1">{
+ <span class="cov5" title="3">if col &gt; len(d.lines[line]) </span><span class="cov1" title="1">{
col = len(d.lines[line])
}</span>
// Build before
- <span class="cov3" title="2">var b strings.Builder
- for i := 0; i &lt; line; i++ </span><span class="cov3" title="2">{
+ <span class="cov5" title="3">var b strings.Builder
+ for i := 0; i &lt; line; i++ </span><span class="cov5" title="3">{
b.WriteString(d.lines[i])
b.WriteByte('\n')
}</span>
- <span class="cov3" title="2">b.WriteString(d.lines[line][:col])
+ <span class="cov5" title="3">b.WriteString(d.lines[line][:col])
before := b.String()
// Build after
var a strings.Builder
a.WriteString(d.lines[line][col:])
- for i := line + 1; i &lt; len(d.lines); i++ </span><span class="cov1" title="1">{
+ for i := line + 1; i &lt; len(d.lines); i++ </span><span class="cov3" title="2">{
a.WriteByte('\n')
a.WriteString(d.lines[i])
}</span>
- <span class="cov3" title="2">return before, a.String()</span>
+ <span class="cov5" title="3">return before, a.String()</span>
}
// --- in-editor chat (";C ...") ---
@@ -3656,73 +4151,73 @@ func (s *Server) docBeforeAfter(uri string, pos Position) (string, string) <span
// detectAndHandleChat scans the current document for any line that starts with
// a new trigger pair (e.g., "?&gt;" ",&gt;" ":&gt;" ";&gt;") at EOL and inserts the LLM
// reply below.
-func (s *Server) detectAndHandleChat(uri string) <span class="cov6" title="4">{
+func (s *Server) detectAndHandleChat(uri string) <span class="cov7" title="5">{
if s.llmClient == nil </span><span class="cov1" title="1">{
return
}</span>
- <span class="cov5" title="3">d := s.getDocument(uri)
+ <span class="cov6" title="4">d := s.getDocument(uri)
if d == nil || len(d.lines) == 0 </span><span class="cov0" title="0">{
return
}</span>
- <span class="cov5" title="3">for i, raw := range d.lines </span><span class="cov7" title="5">{
+ <span class="cov6" title="4">for i, raw := range d.lines </span><span class="cov7" title="6">{
// Find last non-space character index
j := len(raw) - 1
- for j &gt;= 0 </span><span class="cov6" title="4">{
+ for j &gt;= 0 </span><span class="cov7" title="5">{
if raw[j] == ' ' || raw[j] == '\t' </span><span class="cov0" title="0">{
j--
continue</span>
}
- <span class="cov6" title="4">break</span>
+ <span class="cov7" title="5">break</span>
}
- <span class="cov7" title="5">if j &lt; 0 </span><span class="cov1" title="1">{
+ <span class="cov7" title="6">if j &lt; 0 </span><span class="cov1" title="1">{
continue</span>
}
// Check suffix/prefix according to configuration
- <span class="cov6" title="4">if s.chatSuffix == "" </span><span class="cov3" title="2">{
+ <span class="cov7" title="5">if s.chatSuffix == "" </span><span class="cov3" title="2">{
continue</span>
}
// Last non-space must equal suffix
- <span class="cov3" title="2">if string(raw[j]) != s.chatSuffix </span><span class="cov0" title="0">{
+ <span class="cov5" title="3">if string(raw[j]) != s.chatSuffix </span><span class="cov0" title="0">{
continue</span>
}
// Require at least one char before suffix and that char must be in chatPrefixes
- <span class="cov3" title="2">if j &lt; 1 </span><span class="cov0" title="0">{
+ <span class="cov5" title="3">if j &lt; 1 </span><span class="cov0" title="0">{
continue</span>
}
- <span class="cov3" title="2">prev := string(raw[j-1])
+ <span class="cov5" title="3">prev := string(raw[j-1])
isTrigger := false
- for _, pfx := range s.chatPrefixes </span><span class="cov3" title="2">{
- if prev == pfx </span><span class="cov3" title="2">{
+ for _, pfx := range s.chatPrefixes </span><span class="cov5" title="3">{
+ if prev == pfx </span><span class="cov5" title="3">{
isTrigger = true
break</span>
}
}
- <span class="cov3" title="2">if !isTrigger </span><span class="cov0" title="0">{
+ <span class="cov5" title="3">if !isTrigger </span><span class="cov0" title="0">{
continue</span>
}
// Avoid double-answering: if the next non-empty line starts with '&gt;' we skip.
- <span class="cov3" title="2">k := i + 1
- for k &lt; len(d.lines) &amp;&amp; strings.TrimSpace(d.lines[k]) == "" </span><span class="cov6" title="4">{
+ <span class="cov5" title="3">k := i + 1
+ for k &lt; len(d.lines) &amp;&amp; strings.TrimSpace(d.lines[k]) == "" </span><span class="cov7" title="5">{
k++
}</span>
- <span class="cov3" title="2">if k &lt; len(d.lines) &amp;&amp; strings.HasPrefix(strings.TrimSpace(d.lines[k]), "&gt;") </span><span class="cov0" title="0">{
+ <span class="cov5" title="3">if k &lt; len(d.lines) &amp;&amp; strings.HasPrefix(strings.TrimSpace(d.lines[k]), "&gt;") </span><span class="cov0" title="0">{
continue</span>
}
// Derive prompt by removing only the trailing '&gt;'
- <span class="cov3" title="2">removeCount := len(s.chatSuffix)
+ <span class="cov5" title="3">removeCount := len(s.chatSuffix)
base := raw[:j+1-removeCount]
prompt := strings.TrimSpace(base)
if prompt == "" </span><span class="cov0" title="0">{
continue</span>
}
- <span class="cov3" title="2">lineIdx := i
+ <span class="cov5" title="3">lineIdx := i
lastIdx := j
- go func(prompt string, remove int) </span><span class="cov3" title="2">{
+ go func(prompt string, remove int) </span><span class="cov5" title="3">{
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel()
- sys := "You are a helpful coding assistant. Answer concisely and clearly."
- // Build short conversation history from the document above this line
- history := s.buildChatHistory(uri, lineIdx, prompt)
+ sys := s.promptChatSystem
+ // Build short conversation history from the document above this line
+ history := s.buildChatHistory(uri, lineIdx, prompt)
msgs := append([]llm.Message{{Role: "system", Content: sys}}, history...)
opts := s.llmRequestOpts()
logging.Logf("lsp ", "chat llm=requesting model=%s", s.llmClient.DefaultModel())
@@ -3731,26 +4226,26 @@ func (s *Server) detectAndHandleChat(uri string) <span class="cov6" title="4">{
logging.Logf("lsp ", "chat llm error: %v", err)
return
}</span>
- <span class="cov3" title="2">out := strings.TrimSpace(stripCodeFences(text))
+ <span class="cov5" title="3">out := strings.TrimSpace(stripCodeFences(text))
if out == "" </span><span class="cov0" title="0">{
return
}</span>
- <span class="cov3" title="2">s.applyChatEdits(uri, lineIdx, lastIdx, remove, "&gt; "+out)</span>
+ <span class="cov5" title="3">s.applyChatEdits(uri, lineIdx, lastIdx, remove, "&gt; "+out)</span>
}(prompt, removeCount)
// Only handle one per change tick to avoid flooding
- <span class="cov3" title="2">break</span>
+ <span class="cov5" title="3">break</span>
}
}
// applyChatEdits removes the triggering punctuation at end of the line and
// inserts two newlines followed by a new line with the response prefixed.
-func (s *Server) applyChatEdits(uri string, lineIdx int, lastNonSpace int, removeCount int, response string) <span class="cov3" title="2">{
+func (s *Server) applyChatEdits(uri string, lineIdx int, lastNonSpace int, removeCount int, response string) <span class="cov5" title="3">{
d := s.getDocument(uri)
if d == nil </span><span class="cov0" title="0">{
return
}</span>
// 1) Delete the trailing punctuation (1 or 2 chars)
- <span class="cov3" title="2">delStart := Position{Line: lineIdx, Character: lastNonSpace + 1 - removeCount}
+ <span class="cov5" title="3">delStart := Position{Line: lineIdx, Character: lastNonSpace + 1 - removeCount}
delEnd := Position{Line: lineIdx, Character: lastNonSpace + 1}
// 2) Insert two newlines and the response at end-of-line, then one extra blank line
insPos := Position{Line: lineIdx, Character: len(d.lines[lineIdx])}
@@ -3766,12 +4261,12 @@ func (s *Server) applyChatEdits(uri string, lineIdx int, lastNonSpace int, remov
// 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="cov5" title="3">{
+func (s *Server) buildChatHistory(uri string, lineIdx int, currentPrompt string) []llm.Message <span class="cov6" title="4">{
d := s.getDocument(uri)
if d == nil </span><span class="cov0" title="0">{
return []llm.Message{{Role: "user", Content: currentPrompt}}
}</span>
- <span class="cov5" title="3">type pair struct{ q, a string }
+ <span class="cov6" title="4">type pair struct{ q, a string }
pairs := []pair{}
i := lineIdx - 1
for i &gt;= 0 &amp;&amp; len(pairs) &lt; 3 </span><span class="cov3" title="2">{
@@ -3805,7 +4300,7 @@ func (s *Server) buildChatHistory(uri string, lineIdx int, currentPrompt string)
pairs = append([]pair{{q: q, a: strings.Join(replyLines, "\n")}}, pairs...)
i--</span>
}
- <span class="cov5" title="3">msgs := make([]llm.Message, 0, len(pairs)*2+1)
+ <span class="cov6" title="4">msgs := make([]llm.Message, 0, len(pairs)*2+1)
for _, p := range pairs </span><span class="cov3" title="2">{
if strings.TrimSpace(p.q) != "" </span><span class="cov3" title="2">{
msgs = append(msgs, llm.Message{Role: "user", Content: p.q})
@@ -3814,7 +4309,7 @@ func (s *Server) buildChatHistory(uri string, lineIdx int, currentPrompt string)
msgs = append(msgs, llm.Message{Role: "assistant", Content: p.a})
}</span>
}
- <span class="cov5" title="3">msgs = append(msgs, llm.Message{Role: "user", Content: currentPrompt})
+ <span class="cov6" title="4">msgs = append(msgs, llm.Message{Role: "user", Content: currentPrompt})
return msgs</span>
}
@@ -3844,7 +4339,7 @@ func stripTrailingTrigger(sx string) string <span class="cov8" title="8">{
}
// clientApplyEdit sends a workspace/applyEdit request to the client.
-func (s *Server) clientApplyEdit(label string, edit WorkspaceEdit) <span class="cov3" title="2">{
+func (s *Server) clientApplyEdit(label string, edit WorkspaceEdit) <span class="cov5" title="3">{
params := ApplyWorkspaceEditParams{Label: label, Edit: edit}
id := s.nextReqID()
req := Request{JSONRPC: "2.0", ID: id, Method: "workspace/applyEdit"}
@@ -3854,7 +4349,7 @@ func (s *Server) clientApplyEdit(label string, edit WorkspaceEdit) <span class="
}</span>
// nextReqID returns a unique json.RawMessage id for server-initiated requests.
-func (s *Server) nextReqID() json.RawMessage <span class="cov7" title="5">{
+func (s *Server) nextReqID() json.RawMessage <span class="cov7" title="6">{
s.mu.Lock()
s.nextID++
idNum := s.nextID
@@ -3974,12 +4469,11 @@ func (s *Server) handleExit() <span class="cov0" title="0">{
package lsp
import (
- "fmt"
- "strings"
- "time"
+ "strings"
+ "time"
- "codeberg.org/snonux/hexai/internal/llm"
- "codeberg.org/snonux/hexai/internal/logging"
+ "codeberg.org/snonux/hexai/internal/llm"
+ "codeberg.org/snonux/hexai/internal/logging"
)
// Configurable inline trigger characters (default to '&gt;') used by free helpers below.
@@ -3990,12 +4484,12 @@ var (
)
// llmRequestOpts builds request options from server settings.
-func (s *Server) llmRequestOpts() []llm.RequestOption <span class="cov5" title="12">{
+func (s *Server) llmRequestOpts() []llm.RequestOption <span class="cov6" title="17">{
opts := []llm.RequestOption{llm.WithMaxTokens(s.maxTokens)}
if s.codingTemperature != nil </span><span class="cov0" title="0">{
opts = append(opts, llm.WithTemperature(*s.codingTemperature))
}</span>
- <span class="cov5" title="12">return opts</span>
+ <span class="cov6" title="17">return opts</span>
}
// small helpers for LLM traffic stats
@@ -4045,18 +4539,20 @@ func inParamList(current string, cursor int) bool <span class="cov5" title="11">
return open &gt;= 0 &amp;&amp; cursor &gt; open &amp;&amp; (close == -1 || cursor &lt;= close)</span>
}
-func buildPrompts(inParams bool, p CompletionParams, above, current, below, funcCtx string) (string, string) <span class="cov6" title="13">{
- if inParams </span><span class="cov2" title="2">{
- sys := "You are a code completion engine for function signatures. Return only the parameter list contents (without parentheses), no braces, no prose. Prefer idiomatic names and types."
- user := fmt.Sprintf("Cursor is inside the function parameter list. Suggest only the parameter list (no parentheses).\nFunction line: %s\nCurrent line (cursor at %d): %s", funcCtx, p.Position.Character, current)
- return sys, user
- }</span>
- <span class="cov5" title="11">sys := "You are a terse code completion engine. Return only the code to insert, no surrounding prose or backticks. Only continue from the cursor; never repeat characters already present to the left of the cursor on the current line (e.g., if 'name :=' is already typed, only return the right-hand side expression)."
- user := fmt.Sprintf("Provide the next likely code to insert at the cursor.\nFile: %s\nFunction/context: %s\nAbove line: %s\nCurrent line (cursor at character %d): %s\nBelow line: %s\nOnly return the completion snippet.", p.TextDocument.URI, funcCtx, above, p.Position.Character, current, below)
- return sys, user</span>
+// renderTemplate performs simple {{var}} replacement in a template string.
+func renderTemplate(t string, vars map[string]string) string <span class="cov7" title="33">{
+ if t == "" </span><span class="cov5" title="9">{
+ return t
+ }</span>
+ <span class="cov7" title="24">out := t
+ for k, v := range vars </span><span class="cov9" title="79">{
+ placeholder := "{{" + k + "}}"
+ out = strings.ReplaceAll(out, placeholder, v)
+ }</span>
+ <span class="cov7" title="24">return out</span>
}
-func computeTextEditAndFilter(cleaned string, inParams bool, current string, p CompletionParams) (*TextEdit, string) <span class="cov6" title="16">{
+func computeTextEditAndFilter(cleaned string, inParams bool, current string, p CompletionParams) (*TextEdit, string) <span class="cov6" title="17">{
if inParams </span><span class="cov3" title="3">{
open := strings.Index(current, "(")
close := strings.Index(current, ")")
@@ -4077,25 +4573,25 @@ func computeTextEditAndFilter(cleaned string, inParams bool, current string, p C
<span class="cov3" title="3">return te, filter</span>
}
}
- <span class="cov6" title="13">startChar := computeWordStart(current, p.Position.Character)
+ <span class="cov6" title="14">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="22">{
+func computeWordStart(current string, at int) int <span class="cov7" title="23">{
if at &gt; len(current) </span><span class="cov0" title="0">{
at = len(current)
}</span>
- <span class="cov7" title="22">for at &gt; 0 </span><span class="cov8" title="38">{
+ <span class="cov7" title="23">for at &gt; 0 </span><span class="cov8" title="39">{
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="cov6" title="20">{
+ 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="cov6" title="21">{
at--
continue</span>
}
<span class="cov6" title="18">break</span>
}
- <span class="cov7" title="22">return at</span>
+ <span class="cov7" title="23">return at</span>
}
func isIdentChar(ch byte) bool <span class="cov7" title="24">{
@@ -4205,7 +4701,7 @@ func isBareDoubleOpen(line string) bool <span class="cov6" title="19">{
}
// stripDuplicateAssignmentPrefix removes a duplicated assignment prefix from the suggestion.
-func stripDuplicateAssignmentPrefix(prefixBeforeCursor, suggestion string) string <span class="cov6" title="18">{
+func stripDuplicateAssignmentPrefix(prefixBeforeCursor, suggestion string) string <span class="cov6" title="19">{
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">{
@@ -4223,7 +4719,7 @@ func stripDuplicateAssignmentPrefix(prefixBeforeCursor, suggestion string) strin
}
}
// Fallback to plain '=' if present
- <span class="cov6" title="14">if idx := strings.LastIndex(prefixBeforeCursor, "="); idx &gt;= 0 </span><span class="cov2" title="2">{
+ <span class="cov6" title="15">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">{
@@ -4239,20 +4735,20 @@ func stripDuplicateAssignmentPrefix(prefixBeforeCursor, suggestion string) strin
}
}
}
- <span class="cov5" title="12">return suggestion</span>
+ <span class="cov6" title="13">return suggestion</span>
}
// stripDuplicateGeneralPrefix removes any already-typed prefix that the model repeated.
-func stripDuplicateGeneralPrefix(prefixBeforeCursor, suggestion string) string <span class="cov6" title="18">{
+func stripDuplicateGeneralPrefix(prefixBeforeCursor, suggestion string) string <span class="cov6" title="19">{
if suggestion == "" </span><span class="cov0" title="0">{
return suggestion
}</span>
- <span class="cov6" title="18">s := strings.TrimLeft(suggestion, " \t")
+ <span class="cov6" title="19">s := strings.TrimLeft(suggestion, " \t")
p := strings.TrimRight(prefixBeforeCursor, " \t")
if p != "" &amp;&amp; strings.HasPrefix(s, p) </span><span class="cov4" title="5">{
return strings.TrimLeft(s[len(p):], " \t")
}</span>
- <span class="cov6" title="13">for k := len(p) - 1; k &gt; 0; k-- </span><span class="cov10" title="100">{
+ <span class="cov6" title="14">for k := len(p) - 1; k &gt; 0; k-- </span><span class="cov10" title="100">{
if !isIdentBoundary(p[k-1]) </span><span class="cov9" title="77">{
continue</span>
}
@@ -4264,7 +4760,7 @@ func stripDuplicateGeneralPrefix(prefixBeforeCursor, suggestion string) string <
return strings.TrimLeft(s[len(suf):], " \t")
}</span>
}
- <span class="cov6" title="13">return suggestion</span>
+ <span class="cov6" title="14">return suggestion</span>
}
func isIdentBoundary(ch byte) bool <span class="cov10" title="100">{
@@ -4272,30 +4768,30 @@ func isIdentBoundary(ch byte) bool <span class="cov10" title="100">{
}</span>
// stripCodeFences removes surrounding Markdown code fences from a model response.
-func stripCodeFences(s string) string <span class="cov7" title="31">{
+func stripCodeFences(s string) string <span class="cov8" title="36">{
t := strings.TrimSpace(s)
if t == "" </span><span class="cov0" title="0">{
return t
}</span>
- <span class="cov7" title="31">lines := splitLines(t)
+ <span class="cov8" title="36">lines := splitLines(t)
start := 0
for start &lt; len(lines) &amp;&amp; strings.TrimSpace(lines[start]) == "" </span><span class="cov0" title="0">{
start++
}</span>
- <span class="cov7" title="31">end := len(lines) - 1
+ <span class="cov8" title="36">end := len(lines) - 1
for end &gt;= 0 &amp;&amp; strings.TrimSpace(lines[end]) == "" </span><span class="cov0" title="0">{
end--
}</span>
- <span class="cov7" title="31">if start &gt;= len(lines) || end &lt; 0 || start &gt; end </span><span class="cov0" title="0">{
+ <span class="cov8" title="36">if start &gt;= len(lines) || end &lt; 0 || start &gt; end </span><span class="cov0" title="0">{
return t
}</span>
- <span class="cov7" title="31">first := strings.TrimSpace(lines[start])
+ <span class="cov8" title="36">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="cov5" title="8">{
inner := strings.Join(lines[start+1:end], "\n")
return inner
}</span>
- <span class="cov7" title="23">return t</span>
+ <span class="cov7" title="28">return t</span>
}
// stripInlineCodeSpan returns the contents of the first inline backtick code span if present.
@@ -4317,9 +4813,9 @@ func stripInlineCodeSpan(s string) string <span class="cov5" title="10">{
}
// labelForCompletion picks a short, readable label for the completion list.
-func labelForCompletion(cleaned, filter string) string <span class="cov6" title="17">{
+func labelForCompletion(cleaned, filter string) string <span class="cov6" title="18">{
label := trimLen(firstLine(cleaned))
- if filter != "" &amp;&amp; !strings.HasPrefix(strings.ToLower(label), strings.ToLower(filter)) </span><span class="cov3" title="3">{
+ if filter != "" &amp;&amp; !strings.HasPrefix(strings.ToLower(label), strings.ToLower(filter)) </span><span class="cov3" title="4">{
return filter
}</span>
<span class="cov6" title="14">return label</span>
@@ -4371,32 +4867,32 @@ func extractRangeText(d *document, r Range) string <span class="cov3" title="4">
}
// collectPromptRemovalEdits returns edits to remove all inline prompt markers.
-func (s *Server) collectPromptRemovalEdits(uri string) []TextEdit <span class="cov5" title="12">{
+func (s *Server) collectPromptRemovalEdits(uri string) []TextEdit <span class="cov6" title="13">{
d := s.getDocument(uri)
if d == nil || len(d.lines) == 0 </span><span class="cov5" title="11">{
return nil
}</span>
- <span class="cov1" title="1">var edits []TextEdit
- for i, line := range d.lines </span><span class="cov3" title="4">{
+ <span class="cov2" title="2">var edits []TextEdit
+ for i, line := range d.lines </span><span class="cov4" title="7">{
edits = append(edits, promptRemovalEditsForLine(line, i)...)
}</span>
- <span class="cov1" title="1">return edits</span>
+ <span class="cov2" title="2">return edits</span>
}
-func promptRemovalEditsForLine(line string, lineNum int) []TextEdit <span class="cov4" title="7">{
+func promptRemovalEditsForLine(line string, lineNum int) []TextEdit <span class="cov5" title="10">{
if hasDoubleOpenTrigger(line) </span><span class="cov3" title="3">{
return []TextEdit{{Range: Range{Start: Position{Line: lineNum, Character: 0}, End: Position{Line: lineNum, Character: len(line)}}, NewText: ""}}
}</span>
- <span class="cov3" title="4">return collectSemicolonMarkers(line, lineNum)</span>
+ <span class="cov4" title="7">return collectSemicolonMarkers(line, lineNum)</span>
}
-func hasDoubleOpenTrigger(line string) bool <span class="cov8" title="51">{
+func hasDoubleOpenTrigger(line string) bool <span class="cov8" title="55">{
pos := 0
- for pos &lt; len(line) </span><span class="cov8" title="53">{
+ for pos &lt; len(line) </span><span class="cov8" title="57">{
// look for double-open sequence
dbl := string([]byte{inlineOpenChar, inlineOpenChar})
j := strings.Index(line[pos:], dbl)
- if j &lt; 0 </span><span class="cov7" title="32">{
+ if j &lt; 0 </span><span class="cov8" title="36">{
return false
}</span>
<span class="cov6" title="21">j += pos
@@ -4424,12 +4920,12 @@ func hasDoubleOpenTrigger(line string) bool <span class="cov8" title="51">{
<span class="cov3" title="3">return false</span>
}
-func collectSemicolonMarkers(line string, lineNum int) []TextEdit <span class="cov4" title="5">{
+func collectSemicolonMarkers(line string, lineNum int) []TextEdit <span class="cov5" title="8">{
var edits []TextEdit
startSemi := 0
- for startSemi &lt; len(line) </span><span class="cov5" title="9">{
+ for startSemi &lt; len(line) </span><span class="cov5" title="12">{
j := strings.IndexByte(line[startSemi:], inlineOpenChar)
- if j &lt; 0 </span><span class="cov3" title="4">{
+ if j &lt; 0 </span><span class="cov4" title="7">{
break</span>
}
<span class="cov4" title="5">j += startSemi
@@ -4461,7 +4957,7 @@ func collectSemicolonMarkers(line string, lineNum int) []TextEdit <span class="c
<span class="cov4" title="5">edits = append(edits, TextEdit{Range: Range{Start: Position{Line: lineNum, Character: j}, End: Position{Line: lineNum, Character: endChar}}, NewText: ""})
startSemi = endChar</span>
}
- <span class="cov4" title="5">return edits</span>
+ <span class="cov5" title="8">return edits</span>
}
</pre>
@@ -4525,7 +5021,29 @@ type Server struct {
inlineOpen string
inlineClose string
chatSuffix string
- chatPrefixes []string
+ chatPrefixes []string
+
+ // Prompt templates
+ // Completion
+ promptCompSysGeneral string
+ promptCompSysParams string
+ promptCompSysInline string
+ promptCompUserGeneral string
+ promptCompUserParams string
+ promptCompExtraHeader string
+ // Provider-native code completion
+ promptNativeCompletion string
+ // In-editor chat
+ promptChatSystem string
+ // Code actions
+ promptRewriteSystem string
+ promptDiagnosticsSystem string
+ promptDocumentSystem string
+ promptRewriteUser string
+ promptDiagnosticsUser string
+ promptDocumentUser string
+ promptGoTestSystem string
+ promptGoTestUser string
}
// ServerOptions collects configuration for NewServer to avoid long parameter lists.
@@ -4546,8 +5064,26 @@ type ServerOptions struct {
// Inline/chat triggers
InlineOpen string
InlineClose string
- ChatSuffix string
- ChatPrefixes []string
+ ChatSuffix string
+ ChatPrefixes []string
+
+ // Prompt templates
+ PromptCompSysGeneral string
+ PromptCompSysParams string
+ PromptCompSysInline string
+ PromptCompUserGeneral string
+ PromptCompUserParams string
+ PromptCompExtraHeader string
+ PromptNativeCompletion string
+ PromptChatSystem string
+ PromptRewriteSystem string
+ PromptDiagnosticsSystem string
+ PromptDocumentSystem string
+ PromptRewriteUser string
+ PromptDiagnosticsUser string
+ PromptDocumentUser string
+ PromptGoTestSystem string
+ PromptGoTestUser string
}
func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server <span class="cov10" title="6">{
@@ -4606,14 +5142,32 @@ func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions)
}</span> else<span class="cov6" title="3"> {
s.chatSuffix = opts.ChatSuffix
}</span>
- <span class="cov10" title="6">if len(opts.ChatPrefixes) == 0 </span><span class="cov6" title="3">{
- s.chatPrefixes = []string{"?", "!", ":", ";"}
- }</span> else<span class="cov6" title="3"> {
- s.chatPrefixes = append([]string{}, opts.ChatPrefixes...)
- }</span>
+ <span class="cov10" title="6">if len(opts.ChatPrefixes) == 0 </span><span class="cov6" title="3">{
+ s.chatPrefixes = []string{"?", "!", ":", ";"}
+ }</span> else<span class="cov6" title="3"> {
+ s.chatPrefixes = append([]string{}, opts.ChatPrefixes...)
+ }</span>
+
+ // Prompts
+ <span class="cov10" title="6">s.promptCompSysGeneral = opts.PromptCompSysGeneral
+ s.promptCompSysParams = opts.PromptCompSysParams
+ s.promptCompSysInline = opts.PromptCompSysInline
+ s.promptCompUserGeneral = opts.PromptCompUserGeneral
+ s.promptCompUserParams = opts.PromptCompUserParams
+ s.promptCompExtraHeader = opts.PromptCompExtraHeader
+ s.promptNativeCompletion = opts.PromptNativeCompletion
+ s.promptChatSystem = opts.PromptChatSystem
+ s.promptRewriteSystem = opts.PromptRewriteSystem
+ s.promptDiagnosticsSystem = opts.PromptDiagnosticsSystem
+ s.promptDocumentSystem = opts.PromptDocumentSystem
+ s.promptRewriteUser = opts.PromptRewriteUser
+ s.promptDiagnosticsUser = opts.PromptDiagnosticsUser
+ s.promptDocumentUser = opts.PromptDocumentUser
+ s.promptGoTestSystem = opts.PromptGoTestSystem
+ s.promptGoTestUser = opts.PromptGoTestUser
// Assign package-level inline trigger chars for free helper functions
- <span class="cov10" title="6">if s.inlineOpen != "" </span><span class="cov10" title="6">{
+ if s.inlineOpen != "" </span><span class="cov10" title="6">{
inlineOpenChar = s.inlineOpen[0]
}</span>
<span class="cov10" title="6">if s.inlineClose != "" </span><span class="cov10" title="6">{
@@ -4718,18 +5272,18 @@ func (s *Server) readMessage() ([]byte, error) <span class="cov3" title="2">{
<span class="cov1" title="1">return buf, nil</span>
}
-func (s *Server) writeMessage(v any) <span class="cov10" title="17">{
+func (s *Server) writeMessage(v any) <span class="cov10" title="18">{
data, err := json.Marshal(v)
if err != nil </span><span class="cov0" title="0">{
logging.Logf("lsp ", "marshal error: %v", err)
return
}</span>
- <span class="cov10" title="17">header := fmt.Sprintf("Content-Length: %d\r\n\r\n", len(data))
+ <span class="cov10" title="18">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="17">if _, err := s.out.Write(data); err != nil </span><span class="cov0" title="0">{
+ <span class="cov10" title="18">if _, err := s.out.Write(data); err != nil </span><span class="cov0" title="0">{
logging.Logf("lsp ", "write body error: %v", err)
return
}</span>
diff --git a/docs/coverage.out b/docs/coverage.out
index 8d4bdb0..379cd96 100644
--- a/docs/coverage.out
+++ b/docs/coverage.out
@@ -15,190 +15,311 @@ codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:13.13,17.18 4 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.2,22.79 1 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.79,24.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:63.29,86.2 2 5
-codeberg.org/snonux/hexai/internal/appconfig/config.go:90.35,92.19 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:92.19,94.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.2,97.16 2 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:97.16,100.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:100.8,101.85 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:101.85,103.4 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.2,109.50 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.50,111.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:112.2,112.12 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.66,118.16 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:118.16,119.43 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.43,121.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:122.3,122.18 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.2,128.45 4 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:128.45,129.20 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:129.20,131.4 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:132.3,132.18 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.19 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.19,136.3 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.22 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.37,143.2 2 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,147.25 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:147.25,149.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.2,150.56 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.56,152.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.2,153.34 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.34,155.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.2,156.32 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.32,158.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.32 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.32,161.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.36 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.36,164.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.2,165.38 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.38,167.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.2,168.36 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.36,170.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.2,171.36 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.36,173.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.2,174.38 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.38,176.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.2,177.55 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.55,179.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.2,180.56 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.56,182.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.2,183.55 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.55,185.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.2,186.33 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.33,188.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.2,189.53 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.53,191.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.47,196.58 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:196.58,198.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.2,199.56 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.56,201.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.2,202.36 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.36,204.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.2,205.58 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.58,207.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.2,208.56 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.56,210.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.2,211.36 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.36,213.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.2,214.59 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.59,216.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.2,217.57 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.57,219.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.2,220.37 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.37,222.3 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:225.38,227.72 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.72,229.3 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.8,231.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:231.17,233.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:234.3,234.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:236.2,236.24 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:243.43,248.34 3 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:248.34,248.76 1 72
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.2,249.41 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.41,251.14 2 21
-codeberg.org/snonux/hexai/internal/appconfig/config.go:251.14,253.4 1 14
-codeberg.org/snonux/hexai/internal/appconfig/config.go:254.3,255.17 2 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:255.17,256.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.21,258.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.4,259.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:261.3,261.17 1 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.2,263.51 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.51,265.14 2 12
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.14,267.4 1 8
-codeberg.org/snonux/hexai/internal/appconfig/config.go:268.3,269.17 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:269.17,270.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.21,272.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:273.4,273.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:275.3,275.18 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.2,278.47 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.47,281.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.2,282.48 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.48,285.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.2,286.57 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.2,290.55 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.55,293.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.2,294.54 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.54,297.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.2,298.61 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.61,301.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.2,302.59 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.59,305.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.2,306.59 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.59,309.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.2,310.60 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.60,313.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.2,314.54 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,317.27 3 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:317.27,318.42 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:318.42,320.5 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:322.3,322.13 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.2,324.47 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.47,327.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.2,328.48 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.48,331.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.2,332.47 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.47,335.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.2,336.49 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.49,339.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:339.27,340.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:340.42,342.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:344.3,344.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.2,346.44 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.44,349.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.2,352.51 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.51,355.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.2,356.48 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.48,359.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.2,360.60 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.60,363.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.2,365.51 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.51,368.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.2,369.48 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.48,372.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.2,373.60 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.60,376.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.2,378.52 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.52,381.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.2,382.49 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.49,385.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.2,386.61 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.61,389.3 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.2,391.10 1 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.10,393.3 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:394.2,394.13 1 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.16 4 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.16,30.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.124,39.16 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.16,42.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.2,45.74 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:45.74,48.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:49.2,49.12 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:53.64,55.82 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:55.82,58.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:59.2,60.9 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:61.40,62.59 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:63.23,64.24 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:65.21,66.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:67.10,68.91 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:73.65,88.36 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:88.36,90.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:92.2,93.36 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:93.36,95.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:96.2,96.48 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:100.48,103.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.40,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:106.2,109.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:113.125,116.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:116.40,118.56 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:118.56,121.4 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:121.18,123.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.3,124.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:125.8,127.17 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.17,129.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:130.3,131.26 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.2,136.12 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:140.59,142.2 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.29,136.2 2 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:140.35,142.19 2 6
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.19,144.3 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,147.16 2 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:147.16,150.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:150.8,151.85 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:151.85,153.4 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.50 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.50,161.3 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.12 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:278.35,282.80 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:282.80,291.6 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.5,294.41 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.41,297.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.5,300.47 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.47,307.6 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.5,310.47 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.47,313.6 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.39 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.39,319.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.85 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.85,325.6 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.5,328.50 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.50,331.6 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.5,334.71 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.71,341.6 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.5,344.74 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.74,351.6 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.5,354.71 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.71,361.6 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.5,365.62 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.62,366.73 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:366.73,368.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.9,369.72 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.72,371.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.9,372.72 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.72,374.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.9,375.71 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.71,377.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.9,378.70 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.70,380.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.9,381.71 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.71,383.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.5,386.56 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.56,388.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.5,390.62 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.62,391.73 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:391.73,393.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.9,394.77 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.77,396.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.9,397.74 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.74,399.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.9,400.71 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.71,402.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.9,403.75 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.75,405.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.9,406.72 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.72,408.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.9,409.72 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.72,411.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.9,412.70 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.70,414.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.5,417.48 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.48,418.66 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:418.66,420.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.9,421.66 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.66,423.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.5,426.70 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.70,428.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:430.5,430.15 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:433.66,435.19 2 6
+codeberg.org/snonux/hexai/internal/appconfig/config.go:435.19,436.49 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:436.49,438.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:439.9,439.24 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:442.5,447.25 5 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:447.25,448.26 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:448.26,450.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:451.9,451.30 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:455.5,464.24 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:464.24,465.222 1 27
+codeberg.org/snonux/hexai/internal/appconfig/config.go:465.222,466.21 1 27
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.9,468.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.47,470.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.5,473.22 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.22,475.6 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:479.5,481.56 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:481.56,482.65 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:482.65,483.35 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:484.24,485.52 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:486.22,487.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:488.26,489.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.5,493.53 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.53,494.58 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:494.58,495.35 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:496.24,497.46 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:498.22,499.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:500.26,501.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:505.5,505.21 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:508.37,512.2 3 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:515.39,516.25 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:516.25,518.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.2,519.56 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.56,521.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.2,522.34 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.34,524.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.2,525.32 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.32,527.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.2,528.32 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.32,530.3 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.2,531.36 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.36,533.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.2,534.38 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.38,536.3 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.2,537.36 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.36,539.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.2,540.36 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.36,542.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.2,543.38 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.38,545.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.2,546.55 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.55,548.3 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.2,549.56 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.56,551.3 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.2,552.55 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.55,554.3 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.2,555.33 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.33,557.3 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.2,558.53 1 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.53,560.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:564.40,566.69 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:566.69,568.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.5,569.68 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.68,571.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.5,572.68 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.68,574.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.5,575.67 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.67,577.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.5,578.66 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.66,580.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.5,581.67 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.67,583.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.5,585.62 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.62,587.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.5,589.56 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.56,591.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.5,593.69 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.69,595.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.5,596.73 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.73,598.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.5,599.70 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.70,601.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.5,602.67 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.67,604.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.5,605.71 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.71,607.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.5,608.68 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.68,610.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.5,611.68 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.68,613.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.5,614.66 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.66,616.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.5,618.62 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.62,620.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.5,621.62 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.62,623.6 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:627.47,628.58 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:628.58,630.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.2,631.56 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.56,633.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.2,634.36 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.36,636.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.2,637.58 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.58,639.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.2,640.56 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.56,642.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.2,643.36 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.36,645.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.2,646.59 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.59,648.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.2,649.57 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.57,651.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.2,652.37 1 14
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.37,654.3 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:657.38,659.72 2 6
+codeberg.org/snonux/hexai/internal/appconfig/config.go:659.72,661.3 1 6
+codeberg.org/snonux/hexai/internal/appconfig/config.go:661.8,663.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:663.17,665.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:666.3,666.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:668.2,668.24 1 6
+codeberg.org/snonux/hexai/internal/appconfig/config.go:675.43,680.34 3 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:680.34,680.76 1 120
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.2,681.41 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.41,683.14 2 35
+codeberg.org/snonux/hexai/internal/appconfig/config.go:683.14,685.4 1 28
+codeberg.org/snonux/hexai/internal/appconfig/config.go:686.3,687.17 2 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:687.17,688.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:688.21,690.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:691.4,691.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:693.3,693.17 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.2,695.51 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.51,697.14 2 20
+codeberg.org/snonux/hexai/internal/appconfig/config.go:697.14,699.4 1 16
+codeberg.org/snonux/hexai/internal/appconfig/config.go:700.3,701.17 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:701.17,702.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:702.21,704.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:705.4,705.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:707.3,707.18 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.2,710.47 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.47,713.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.2,714.48 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.48,717.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.2,718.57 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.57,721.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.2,722.55 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.55,725.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.2,726.54 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.54,729.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.2,730.61 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.61,733.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.2,734.59 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.59,737.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.2,738.59 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.59,741.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.2,742.60 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.60,745.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.2,746.54 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.54,749.27 3 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:749.27,750.42 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:750.42,752.5 1 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:754.3,754.13 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.2,756.47 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.47,759.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.2,760.48 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.48,763.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.2,764.47 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.47,767.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.2,768.49 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.49,771.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:771.27,772.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:772.42,774.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:776.3,776.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.2,778.44 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.44,781.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.2,784.51 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.51,787.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.2,788.48 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.48,791.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.2,792.60 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.60,795.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.2,797.51 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.51,800.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.2,801.48 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.48,804.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.2,805.60 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.60,808.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.2,810.52 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.52,813.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.2,814.49 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.49,817.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.2,818.61 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.61,821.3 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.2,823.10 1 5
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.10,825.3 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:826.2,826.13 1 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.5,33.20 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:33.20,36.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.5,39.77 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.77,42.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.5,43.15 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:48.124,50.16 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:50.16,53.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:54.2,56.74 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:56.74,59.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:60.2,60.12 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:64.64,66.82 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:66.82,69.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:70.2,71.9 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:72.40,73.59 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:74.23,75.24 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:76.21,77.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:78.10,79.91 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:84.65,99.36 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:99.36,101.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.2,104.36 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:104.36,106.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:107.2,107.48 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:111.48,114.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:114.40,116.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:117.2,120.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.77,127.43 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.43,128.64 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:128.64,130.10 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:132.5,135.6 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:139.125,142.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:142.40,144.56 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:144.56,147.4 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:147.18,149.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:150.3,150.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:151.8,153.17 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:153.17,155.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:156.3,157.26 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:159.2,162.12 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:166.59,168.2 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:29.17,31.4 1 0
@@ -222,7 +343,7 @@ codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,144.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -713,153 +834,153 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:86.45,88.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:89.2,97.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:97.58,99.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:100.2,100.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.17,108.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.20,108.72 7 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:108.72,109.66 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:109.66,113.5 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:114.9,116.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.21,121.43 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.43,122.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:122.24,124.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:124.10,126.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:128.3,134.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.72,135.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:135.66,139.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:140.9,142.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:143.18,150.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.72,151.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:151.66,155.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:156.9,158.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.17,160.92 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:160.92,168.4 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:170.2,170.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:173.55,175.56 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.56,176.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:176.23,178.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:179.3,179.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.2,181.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.49,184.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:185.2,185.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.85,192.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:192.22,194.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.2,196.53 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:196.53,198.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.2,199.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.31,201.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.2,203.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.36,204.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:204.34,206.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:208.2,208.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:212.37,214.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:214.32,216.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.2,217.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.32,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.2,221.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.29,223.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.2,225.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.29,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:228.2,228.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.34,232.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:232.22,234.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:235.2,235.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.37,239.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:239.22,241.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:242.2,242.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:247.76,249.80 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:249.80,251.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.2,253.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.71,255.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.2,258.41 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:258.41,260.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:261.2,268.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.86,273.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:273.24,275.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.2,276.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.34,278.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:279.2,287.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:290.95,292.76 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:292.76,294.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.2,297.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:297.21,299.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:300.2,302.36 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:302.36,304.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:305.2,307.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:307.39,309.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:311.2,315.26 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:315.26,321.22 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:321.22,324.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:325.3,327.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:327.102,329.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:330.3,337.40 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:337.40,339.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:340.3,342.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:342.19,344.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:345.3,346.33 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.2,350.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:350.15,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:353.2,368.13 13 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:368.13,371.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:372.2,373.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.62,378.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:378.39,380.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:381.2,383.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:383.16,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:386.2,387.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.35,391.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:391.41,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:394.2,394.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.48,399.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:399.27,401.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:401.39,404.45 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:404.45,406.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.4,407.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.46,409.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.4,410.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.46,412.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:413.4,413.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:416.2,416.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.63,421.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:421.13,423.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.2,424.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.23,426.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.2,429.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.28,430.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:430.42,432.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.3,434.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.38,435.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.2,438.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.17,440.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:442.2,444.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:444.38,446.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:446.32,447.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:448.13,450.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.13,452.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:452.18,454.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.5,455.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.31,457.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.2,462.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.15,464.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:465.2,465.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.65,470.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:470.24,477.71 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:477.71,479.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:479.21,481.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:482.9,484.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.2,488.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:488.16,490.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:491.2,491.115 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:495.43,499.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:499.39,501.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:502.2,504.34 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:504.34,506.63 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:506.63,508.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.2,511.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.42,513.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:514.2,514.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.37,518.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:518.16,520.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.2,522.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:522.32,524.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:525.2,525.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.24,120.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:120.49,121.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.33,123.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:123.19,125.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:127.9,133.78 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:133.78,134.75 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.75,138.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:139.15,141.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:142.21,149.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:149.72,150.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.66,154.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:155.9,157.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:158.17,159.92 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.92,167.4 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:169.2,169.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:172.55,174.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:174.56,175.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.23,177.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:178.3,178.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.2,180.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.49,183.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:184.2,184.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:190.85,191.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.22,193.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:194.2,195.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.53,197.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.2,198.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.31,200.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:201.2,202.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.36,203.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.34,205.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:207.2,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:211.37,213.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:213.32,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.2,216.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.32,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.2,220.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.29,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:227.2,227.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:230.34,231.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.22,233.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:234.2,234.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:237.37,238.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.22,240.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:241.2,241.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:246.76,248.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:248.80,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.2,252.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.71,254.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:256.2,257.41 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.41,259.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:260.2,267.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:271.86,272.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.24,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.2,275.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.34,277.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:278.2,286.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:289.95,291.76 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:291.76,293.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:295.2,296.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.21,298.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:299.2,301.36 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:301.36,303.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:304.2,306.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:306.39,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:310.2,314.26 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:314.26,320.22 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:320.22,323.4 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:324.3,326.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:326.102,328.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:329.3,336.40 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:336.40,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:339.3,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:341.19,343.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:344.3,345.33 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:348.2,349.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.15,351.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:352.2,367.13 13 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:367.13,370.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:371.2,372.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:376.62,377.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.39,379.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:380.2,382.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:382.16,384.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:385.2,386.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:389.35,390.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.41,392.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:393.2,393.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:397.48,398.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.27,400.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:400.39,403.45 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:403.45,405.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.4,406.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.46,408.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.4,409.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.46,411.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:412.4,412.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:415.2,415.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:419.63,420.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.13,422.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.2,423.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.23,425.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:427.2,428.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.28,429.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.42,431.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.3,433.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.38,434.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.2,437.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.17,439.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:441.2,443.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:443.38,445.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:445.32,446.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:447.13,449.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:450.13,451.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.18,453.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.5,454.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.31,456.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.2,461.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.15,463.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:464.2,464.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:468.65,469.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.27,476.71 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:476.71,478.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:478.21,480.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:481.9,483.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:486.2,487.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.16,489.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:490.2,490.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:494.43,498.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:498.39,500.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:501.2,503.34 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:503.34,505.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:505.63,507.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.2,510.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.42,512.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:513.2,513.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:516.37,517.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.16,519.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:520.2,521.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.32,523.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:524.2,524.18 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:15.48,18.55 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:18.55,25.19 5 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:25.19,27.4 1 0
@@ -929,58 +1050,62 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:216.50,218.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:219.2,219.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.193,225.9 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:225.9,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.2,233.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:233.32,235.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.2,237.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.24,239.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,246.30 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:246.30,248.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.2,250.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.40,252.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.20,254.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.4,257.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.54,259.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.21,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.4,263.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.40,267.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.8,269.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.23,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.2,272.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.55,279.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.12,281.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.2,282.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.6,286.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.20,288.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.3,290.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.17,292.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,295.10 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:296.21,298.10 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.18,299.18 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.60,309.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:309.19,311.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.2,313.6 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.6,317.23 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.23,321.11 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:322.22,324.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:325.19,327.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:331.3,333.14 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:338.177,344.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.33,346.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.2,347.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.18,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:350.2,350.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.101,356.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.57,357.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.78,359.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.2,361.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.19,363.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.2,364.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.19,366.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.56 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.56,368.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.57,370.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:372.2,372.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.5,237.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.32,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,241.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.24,243.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.2,250.30 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.30,252.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.2,254.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.40,256.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:256.20,258.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.21,260.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.4,261.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.54,263.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.21,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.4,267.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.40,271.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.8,273.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.23,275.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.2,276.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.55,283.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.12,285.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.2,286.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.6,290.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.20,292.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,294.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.17,296.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.3,299.10 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:300.21,302.10 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.18,303.18 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:311.60,313.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.19,315.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:316.2,317.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.6,321.23 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.23,325.11 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.22,328.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:329.19,331.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:335.3,337.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.177,354.17 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.17,357.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.5,358.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.71,360.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.5,363.55 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.55,365.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:365.43,367.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.9,368.79 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:370.5,370.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:374.101,376.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:376.57,377.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:377.78,379.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.2,381.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.19,383.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.2,384.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.19,386.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.2,387.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.56,388.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:388.57,390.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:392.2,392.16 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.45,23.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,26.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.47,31.55 2 0
@@ -1096,238 +1221,240 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:16.2,27.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:30.38,32.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:34.46,36.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:38.31,41.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:21.55,23.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.32,25.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:26.2,26.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:30.41,35.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:37.41,42.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.32,47.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.23,49.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.2,51.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.24,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.2,57.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.15,59.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.2,63.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.51,68.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.41,70.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:71.2,73.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.110,77.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.14,81.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:82.2,84.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:87.118,88.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.14,91.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.16,94.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.35,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.36,99.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.4,102.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.59,104.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.4,105.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:108.2,111.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:114.51,115.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.23,117.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.13,120.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:120.100,122.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:124.3,124.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.2,126.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:129.32,131.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:134.44,135.50 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.50,137.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.2,138.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:143.20,144.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.40,146.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.3,148.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.12,152.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.2,153.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:156.52,157.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.38,159.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.2,161.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.27,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.34,163.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.36,166.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:168.3,168.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:170.2,170.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.64,180.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.22,183.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.12,185.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:186.3,188.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.74,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.12,196.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:197.3,198.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.48,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:202.3,203.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.18,205.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.3,208.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:210.2,210.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:216.41,220.31 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.31,222.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.2,223.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.29,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.2,226.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.31,228.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.32,230.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.2,232.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.83,239.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:239.102,241.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:241.36,243.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.136,245.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.4,248.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.34,250.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.2,254.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.65,255.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.53,257.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:257.37,259.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.137,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:262.5,264.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.35,266.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:270.2,270.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:274.80,275.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.22,277.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:278.2,280.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.40,282.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.2,283.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.34,284.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.31,285.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.3,288.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.16,289.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.3,291.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.32,293.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.2,295.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:298.36,300.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.39,305.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.13,307.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.2,310.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.66,312.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:313.2,314.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.54,316.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,317.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.51,319.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:320.2,322.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:322.69,325.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:326.2,326.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:330.43,332.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.13,334.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:335.2,336.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.11,338.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.2,340.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.14,342.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:343.2,344.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:348.56,350.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.89,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:353.2,353.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.52,358.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.32,360.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.28,362.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.34,365.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.42,368.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.3,369.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.2,374.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.27,376.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,377.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.36,379.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.2,383.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.49,385.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:385.24,387.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:390.2,391.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.25,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,394.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.33,396.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.2,398.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:402.67,404.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.35,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,408.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.31,410.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.2,411.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.69,415.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.32,417.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.2,418.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:421.45,423.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.22,427.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.12,429.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:430.3,432.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.32,434.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:435.3,436.46 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.46,438.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.3,442.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.12,444.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:445.3,446.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.49,448.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:450.3,450.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.2,452.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.67,458.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.28,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.12,461.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.3,465.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.12,466.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.3,468.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.43,470.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.3,472.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.34,474.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:476.3,477.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.48,479.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.3,481.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.25,483.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:485.3,486.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.50,488.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.3,490.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:492.2,492.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:86.90,89.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:89.20,91.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:92.2,94.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:94.23,96.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.2,98.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:98.22,100.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:101.2,102.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:102.27,104.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:105.2,111.38 6 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:111.38,114.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:114.8,116.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.2,120.35 4 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:120.35,122.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.2,123.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.35,125.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.2,127.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.46,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.8,131.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,132.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.47,134.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:134.8,136.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,137.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.46,139.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.8,141.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.2,142.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.33,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:144.8,146.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.2,149.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.24,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.2,152.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.25,154.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.2,155.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.24,157.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.2,158.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.29,160.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:162.2,164.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:164.47,164.72 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:166.47,166.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:175.2,175.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:178.30,179.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:179.6,181.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:181.20,183.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.3,184.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.17,186.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:187.3,188.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:188.52,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.3,192.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.23,194.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:196.3,197.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:197.15,199.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.55,22.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.32,24.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:25.2,25.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.41,41.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.32,46.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.23,48.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.2,50.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.24,52.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:53.2,56.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:56.15,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.2,62.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:66.51,67.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.41,69.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:70.2,72.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.62,77.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.16,79.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.5,81.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:81.28,84.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.5,85.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.118,89.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.14,92.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.16,95.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:95.35,97.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.4,98.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.36,100.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:101.4,103.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:103.59,105.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.4,106.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:109.2,112.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.51,116.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.23,118.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.2,119.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.13,121.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.100,123.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:125.3,125.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.2,127.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.32,132.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.44,136.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.50,138.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:139.2,139.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.40,144.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.20,145.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.40,147.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.3,149.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.2,151.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.12,153.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.2,154.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.52,158.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.38,160.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.2,162.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.27,163.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:163.34,164.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.3,166.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.36,167.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:169.3,169.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.2,171.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:179.64,181.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:181.22,184.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.12,186.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:187.3,189.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.74,191.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.3,195.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.12,197.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.48,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.3,204.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.18,206.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:208.3,209.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:211.2,211.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.41,221.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.31,223.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.2,227.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.31,229.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.32,231.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.2,233.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.83,240.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.102,242.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:242.36,244.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.136,246.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:247.4,249.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:249.34,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.2,255.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.65,256.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.53,258.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:258.37,260.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:260.137,262.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.5,265.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:265.35,267.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.2,271.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.80,276.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.22,278.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:279.2,281.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.40,283.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.34,285.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.31,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,289.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:289.16,290.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.3,292.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.32,294.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:296.2,296.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.36,301.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:304.39,306.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.13,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.66,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,315.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.54,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.2,318.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.51,320.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.2,323.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.69,326.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.2,327.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:331.43,333.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.13,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.11,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:341.14,343.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:344.2,345.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.56,351.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:351.89,353.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.2,354.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.52,359.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:359.32,361.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:361.28,363.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.3,364.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.34,366.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.3,367.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.42,369.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:370.3,370.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.2,375.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:375.27,377.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.2,378.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.36,380.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:381.2,384.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:384.49,386.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.24,388.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,392.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:392.25,394.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.2,395.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.33,397.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:398.2,399.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.67,405.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.35,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,409.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:409.31,411.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.2,412.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.69,416.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:416.32,418.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.2,419.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.45,424.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.22,428.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,433.32 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.32,435.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,437.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:437.46,439.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.3,443.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.12,445.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.3,447.49 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.49,449.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.3,451.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:453.2,453.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:456.67,459.28 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:459.28,461.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:461.12,462.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:464.3,466.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:466.12,467.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.3,469.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.43,471.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.3,473.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.34,475.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.3,478.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.48,480.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.3,482.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.25,484.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.3,487.50 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:487.50,489.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:490.3,491.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:493.2,493.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.90,129.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.20,131.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,134.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.23,136.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,138.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:138.22,140.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.2,142.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:142.27,144.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:145.2,151.38 6 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:151.38,154.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.8,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:157.2,160.35 4 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:160.35,162.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.2,163.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.35,165.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.2,167.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.46,169.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:169.8,171.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.2,172.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.47,174.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:174.8,176.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.2,177.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.46,179.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:179.8,181.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.5,182.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.36,184.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:184.11,186.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:189.5,207.24 17 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:207.24,209.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.2,210.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.25,212.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.2,213.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.24,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.2,216.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.29,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:220.2,222.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:222.47,222.72 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:224.47,224.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:233.2,233.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:236.30,237.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:237.6,239.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:239.20,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.3,242.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.17,244.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:245.3,246.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:246.52,248.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.3,250.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.23,252.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:254.3,255.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:255.15,257.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:15.48,18.6 3 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:18.6,20.17 2 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:20.17,22.4 1 0
@@ -1363,190 +1490,311 @@ codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:13.13,17.18 4 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.2,22.79 1 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.79,24.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:63.29,86.2 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:90.35,92.19 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:92.19,94.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.2,97.16 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:97.16,100.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:100.8,101.85 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:101.85,103.4 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.2,109.50 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.50,111.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:112.2,112.12 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.66,118.16 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:118.16,119.43 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.43,121.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:122.3,122.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.2,128.45 4 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:128.45,129.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:129.20,131.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:132.3,132.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.19 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.19,136.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.22 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.37,143.2 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,147.25 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:147.25,149.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.2,150.56 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.56,152.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.2,153.34 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.34,155.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.2,156.32 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.32,158.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.32 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.32,161.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.36 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.36,164.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.2,165.38 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.38,167.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.2,168.36 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.36,170.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.2,171.36 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.36,173.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.2,174.38 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.38,176.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.2,177.55 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.55,179.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.2,180.56 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.56,182.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.2,183.55 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.55,185.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.2,186.33 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.33,188.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.2,189.53 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.53,191.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.47,196.58 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:196.58,198.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.2,199.56 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.56,201.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.2,202.36 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.36,204.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.2,205.58 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.58,207.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.2,208.56 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.56,210.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.2,211.36 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.36,213.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.2,214.59 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.59,216.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.2,217.57 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.57,219.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.2,220.37 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.37,222.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:225.38,227.72 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.72,229.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.8,231.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:231.17,233.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:234.3,234.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:236.2,236.24 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:243.43,248.34 3 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:248.34,248.76 1 24
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.2,249.41 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.41,251.14 2 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:251.14,253.4 1 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:254.3,255.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:255.17,256.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.21,258.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.4,259.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:261.3,261.17 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.2,263.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.51,265.14 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.14,267.4 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:268.3,269.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:269.17,270.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.21,272.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:273.4,273.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:275.3,275.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.2,278.47 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.47,281.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.2,282.48 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.48,285.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.2,286.57 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.2,290.55 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.55,293.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.2,294.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.54,297.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.2,298.61 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.61,301.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.2,302.59 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.59,305.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.2,306.59 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.59,309.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.2,310.60 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.60,313.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.2,314.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,317.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:317.27,318.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:318.42,320.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:322.3,322.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.2,324.47 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.47,327.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.2,328.48 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.48,331.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.2,332.47 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.47,335.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.2,336.49 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.49,339.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:339.27,340.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:340.42,342.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:344.3,344.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.2,346.44 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.44,349.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.2,352.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.51,355.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.2,356.48 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.48,359.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.2,360.60 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.60,363.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.2,365.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.51,368.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.2,369.48 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.48,372.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.2,373.60 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.60,376.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.2,378.52 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.52,381.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.2,382.49 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.49,385.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.2,386.61 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.61,389.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.2,391.10 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.10,393.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:394.2,394.13 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.16 4 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.16,30.3 2 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.124,39.16 2 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.16,42.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.2,45.74 3 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:45.74,48.3 2 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:49.2,49.12 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:53.64,55.82 2 5
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:55.82,58.3 2 4
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:59.2,60.9 2 5
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:61.40,62.59 1 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:63.23,64.24 1 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:65.21,66.22 1 2
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:67.10,68.91 1 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:73.65,88.36 3 3
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:88.36,90.3 1 3
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:92.2,93.36 2 3
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:93.36,95.3 1 3
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:96.2,96.48 1 3
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:100.48,103.40 3 6
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.40,105.3 1 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:106.2,109.3 1 6
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:113.125,116.40 3 4
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:116.40,118.56 2 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:118.56,121.4 2 3
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:121.18,123.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.3,124.22 1 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:125.8,127.17 2 3
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.17,129.4 1 2
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:130.3,131.26 2 1
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.2,136.12 3 2
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:140.59,142.2 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.29,136.2 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:140.35,142.19 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.19,144.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,147.16 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:147.16,150.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:150.8,151.85 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:151.85,153.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.50 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.50,161.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.12 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:278.35,282.80 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:282.80,291.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.5,294.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.41,297.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.5,300.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.47,307.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.5,310.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.47,313.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.39,319.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.85,325.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.5,328.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.50,331.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.5,334.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.71,341.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.5,344.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.74,351.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.5,354.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.71,361.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.5,365.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.62,366.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:366.73,368.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.9,369.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.72,371.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.9,372.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.72,374.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.9,375.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.71,377.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.9,378.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.70,380.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.9,381.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.71,383.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.5,386.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.56,388.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.5,390.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.62,391.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:391.73,393.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.9,394.77 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.77,396.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.9,397.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.74,399.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.9,400.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.71,402.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.9,403.75 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.75,405.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.9,406.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.72,408.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.9,409.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.72,411.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.9,412.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.70,414.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.5,417.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.48,418.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:418.66,420.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.9,421.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.66,423.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.5,426.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.70,428.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:430.5,430.15 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:433.66,435.19 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:435.19,436.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:436.49,438.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:439.9,439.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:442.5,447.25 5 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:447.25,448.26 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:448.26,450.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:451.9,451.30 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:455.5,464.24 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:464.24,465.222 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:465.222,466.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.9,468.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.47,470.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.5,473.22 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.22,475.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:479.5,481.56 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:481.56,482.65 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:482.65,483.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:484.24,485.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:486.22,487.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:488.26,489.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.5,493.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.53,494.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:494.58,495.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:496.24,497.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:498.22,499.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:500.26,501.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:505.5,505.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:508.37,512.2 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:515.39,516.25 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:516.25,518.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.2,519.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.56,521.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.2,522.34 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.34,524.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.2,525.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.32,527.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.2,528.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.32,530.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.2,531.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.36,533.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.2,534.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.38,536.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.2,537.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.36,539.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.2,540.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.36,542.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.2,543.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.38,545.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.2,546.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.55,548.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.2,549.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.56,551.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.2,552.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.55,554.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.2,555.33 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.33,557.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.2,558.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.53,560.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:564.40,566.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:566.69,568.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.5,569.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.68,571.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.5,572.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.68,574.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.5,575.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.67,577.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.5,578.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.66,580.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.5,581.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.67,583.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.5,585.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.62,587.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.5,589.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.56,591.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.5,593.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.69,595.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.5,596.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.73,598.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.5,599.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.70,601.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.5,602.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.67,604.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.5,605.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.71,607.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.5,608.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.68,610.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.5,611.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.68,613.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.5,614.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.66,616.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.5,618.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.62,620.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.5,621.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.62,623.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:627.47,628.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:628.58,630.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.2,631.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.56,633.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.2,634.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.36,636.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.2,637.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.58,639.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.2,640.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.56,642.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.2,643.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.36,645.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.2,646.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.59,648.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.2,649.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.57,651.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.2,652.37 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.37,654.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:657.38,659.72 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:659.72,661.3 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:661.8,663.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:663.17,665.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:666.3,666.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:668.2,668.24 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:675.43,680.34 3 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:680.34,680.76 1 24
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.2,681.41 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.41,683.14 2 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:683.14,685.4 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:686.3,687.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:687.17,688.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:688.21,690.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:691.4,691.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:693.3,693.17 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.2,695.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.51,697.14 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:697.14,699.4 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:700.3,701.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:701.17,702.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:702.21,704.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:705.4,705.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:707.3,707.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.2,710.47 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.47,713.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.2,714.48 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.48,717.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.2,718.57 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.57,721.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.2,722.55 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.55,725.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.2,726.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.54,729.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.2,730.61 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.61,733.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.2,734.59 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.59,737.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.2,738.59 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.59,741.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.2,742.60 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.60,745.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.2,746.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.54,749.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:749.27,750.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:750.42,752.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:754.3,754.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.2,756.47 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.47,759.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.2,760.48 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.48,763.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.2,764.47 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.47,767.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.2,768.49 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.49,771.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:771.27,772.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:772.42,774.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:776.3,776.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.2,778.44 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.44,781.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.2,784.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.51,787.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.2,788.48 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.48,791.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.2,792.60 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.60,795.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.2,797.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.51,800.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.2,801.48 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.48,804.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.2,805.60 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.60,808.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.2,810.52 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.52,813.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.2,814.49 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.49,817.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.2,818.61 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.61,821.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.2,823.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.10,825.3 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:826.2,826.13 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.5,33.20 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:33.20,36.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.5,39.77 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.77,42.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.5,43.15 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:48.124,50.16 2 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:50.16,53.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:54.2,56.74 3 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:56.74,59.3 2 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:60.2,60.12 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:64.64,66.82 2 5
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:66.82,69.3 2 4
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:70.2,71.9 2 5
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:72.40,73.59 1 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:74.23,75.24 1 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:76.21,77.22 1 2
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:78.10,79.91 1 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:84.65,99.36 3 3
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:99.36,101.3 1 3
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.2,104.36 2 3
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:104.36,106.3 1 3
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:107.2,107.48 1 3
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:111.48,114.40 3 6
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:114.40,116.3 1 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:117.2,120.3 1 6
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.77,127.43 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.43,128.64 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:128.64,130.10 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:132.5,135.6 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:139.125,142.40 3 4
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:142.40,144.56 2 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:144.56,147.4 2 3
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:147.18,149.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:150.3,150.22 1 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:151.8,153.17 2 3
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:153.17,155.4 1 2
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:156.3,157.26 2 1
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:159.2,162.12 3 2
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:166.59,168.2 1 2
codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:29.17,31.4 1 0
@@ -1570,7 +1818,7 @@ codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,144.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -1841,7 +2089,7 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:60.73,60.92 1 0
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
codeberg.org/snonux/hexai/internal/llm/provider.go:85.84,87.13 2 3
-codeberg.org/snonux/hexai/internal/llm/provider.go:87.13,89.3 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:87.13,89.3 1 1
codeberg.org/snonux/hexai/internal/llm/provider.go:90.2,90.11 1 3
codeberg.org/snonux/hexai/internal/llm/provider.go:91.16,92.44 1 2
codeberg.org/snonux/hexai/internal/llm/provider.go:92.44,94.4 1 2
@@ -2061,153 +2309,153 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:86.45,88.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:89.2,97.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:97.58,99.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:100.2,100.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.17,108.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.20,108.72 7 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:108.72,109.66 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:109.66,113.5 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:114.9,116.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.21,121.43 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.43,122.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:122.24,124.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:124.10,126.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:128.3,134.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.72,135.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:135.66,139.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:140.9,142.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:143.18,150.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.72,151.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:151.66,155.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:156.9,158.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.17,160.92 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:160.92,168.4 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:170.2,170.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:173.55,175.56 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.56,176.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:176.23,178.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:179.3,179.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.2,181.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.49,184.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:185.2,185.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.85,192.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:192.22,194.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.2,196.53 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:196.53,198.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.2,199.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.31,201.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.2,203.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.36,204.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:204.34,206.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:208.2,208.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:212.37,214.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:214.32,216.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.2,217.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.32,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.2,221.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.29,223.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.2,225.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.29,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:228.2,228.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.34,232.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:232.22,234.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:235.2,235.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.37,239.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:239.22,241.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:242.2,242.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:247.76,249.80 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:249.80,251.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.2,253.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.71,255.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.2,258.41 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:258.41,260.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:261.2,268.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.86,273.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:273.24,275.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.2,276.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.34,278.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:279.2,287.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:290.95,292.76 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:292.76,294.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.2,297.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:297.21,299.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:300.2,302.36 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:302.36,304.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:305.2,307.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:307.39,309.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:311.2,315.26 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:315.26,321.22 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:321.22,324.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:325.3,327.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:327.102,329.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:330.3,337.40 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:337.40,339.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:340.3,342.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:342.19,344.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:345.3,346.33 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.2,350.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:350.15,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:353.2,368.13 13 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:368.13,371.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:372.2,373.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.62,378.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:378.39,380.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:381.2,383.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:383.16,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:386.2,387.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.35,391.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:391.41,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:394.2,394.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.48,399.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:399.27,401.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:401.39,404.45 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:404.45,406.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.4,407.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.46,409.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.4,410.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.46,412.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:413.4,413.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:416.2,416.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.63,421.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:421.13,423.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.2,424.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.23,426.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.2,429.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.28,430.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:430.42,432.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.3,434.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.38,435.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.2,438.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.17,440.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:442.2,444.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:444.38,446.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:446.32,447.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:448.13,450.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.13,452.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:452.18,454.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.5,455.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.31,457.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.2,462.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.15,464.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:465.2,465.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.65,470.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:470.24,477.71 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:477.71,479.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:479.21,481.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:482.9,484.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.2,488.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:488.16,490.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:491.2,491.115 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:495.43,499.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:499.39,501.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:502.2,504.34 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:504.34,506.63 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:506.63,508.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.2,511.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.42,513.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:514.2,514.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.37,518.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:518.16,520.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.2,522.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:522.32,524.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:525.2,525.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.24,120.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:120.49,121.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.33,123.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:123.19,125.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:127.9,133.78 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:133.78,134.75 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.75,138.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:139.15,141.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:142.21,149.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:149.72,150.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.66,154.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:155.9,157.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:158.17,159.92 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.92,167.4 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:169.2,169.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:172.55,174.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:174.56,175.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.23,177.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:178.3,178.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.2,180.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.49,183.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:184.2,184.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:190.85,191.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.22,193.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:194.2,195.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.53,197.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.2,198.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.31,200.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:201.2,202.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.36,203.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.34,205.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:207.2,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:211.37,213.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:213.32,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.2,216.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.32,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.2,220.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.29,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:227.2,227.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:230.34,231.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.22,233.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:234.2,234.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:237.37,238.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.22,240.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:241.2,241.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:246.76,248.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:248.80,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.2,252.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.71,254.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:256.2,257.41 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.41,259.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:260.2,267.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:271.86,272.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.24,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.2,275.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.34,277.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:278.2,286.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:289.95,291.76 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:291.76,293.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:295.2,296.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.21,298.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:299.2,301.36 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:301.36,303.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:304.2,306.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:306.39,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:310.2,314.26 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:314.26,320.22 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:320.22,323.4 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:324.3,326.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:326.102,328.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:329.3,336.40 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:336.40,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:339.3,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:341.19,343.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:344.3,345.33 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:348.2,349.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.15,351.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:352.2,367.13 13 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:367.13,370.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:371.2,372.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:376.62,377.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.39,379.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:380.2,382.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:382.16,384.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:385.2,386.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:389.35,390.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.41,392.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:393.2,393.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:397.48,398.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.27,400.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:400.39,403.45 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:403.45,405.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.4,406.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.46,408.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.4,409.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.46,411.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:412.4,412.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:415.2,415.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:419.63,420.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.13,422.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.2,423.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.23,425.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:427.2,428.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.28,429.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.42,431.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.3,433.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.38,434.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.2,437.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.17,439.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:441.2,443.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:443.38,445.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:445.32,446.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:447.13,449.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:450.13,451.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.18,453.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.5,454.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.31,456.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.2,461.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.15,463.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:464.2,464.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:468.65,469.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.27,476.71 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:476.71,478.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:478.21,480.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:481.9,483.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:486.2,487.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.16,489.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:490.2,490.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:494.43,498.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:498.39,500.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:501.2,503.34 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:503.34,505.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:505.63,507.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.2,510.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.42,512.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:513.2,513.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:516.37,517.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.16,519.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:520.2,521.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.32,523.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:524.2,524.18 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:15.48,18.55 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:18.55,25.19 5 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:25.19,27.4 1 0
@@ -2277,58 +2525,62 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:216.50,218.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:219.2,219.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.193,225.9 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:225.9,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.2,233.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:233.32,235.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.2,237.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.24,239.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,246.30 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:246.30,248.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.2,250.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.40,252.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.20,254.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.4,257.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.54,259.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.21,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.4,263.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.40,267.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.8,269.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.23,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.2,272.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.55,279.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.12,281.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.2,282.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.6,286.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.20,288.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.3,290.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.17,292.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,295.10 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:296.21,298.10 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.18,299.18 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.60,309.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:309.19,311.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.2,313.6 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.6,317.23 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.23,321.11 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:322.22,324.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:325.19,327.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:331.3,333.14 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:338.177,344.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.33,346.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.2,347.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.18,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:350.2,350.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.101,356.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.57,357.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.78,359.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.2,361.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.19,363.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.2,364.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.19,366.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.56 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.56,368.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.57,370.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:372.2,372.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.5,237.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.32,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,241.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.24,243.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.2,250.30 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.30,252.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.2,254.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.40,256.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:256.20,258.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.21,260.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.4,261.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.54,263.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.21,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.4,267.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.40,271.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.8,273.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.23,275.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.2,276.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.55,283.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.12,285.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.2,286.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.6,290.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.20,292.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,294.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.17,296.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.3,299.10 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:300.21,302.10 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.18,303.18 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:311.60,313.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.19,315.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:316.2,317.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.6,321.23 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.23,325.11 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.22,328.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:329.19,331.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:335.3,337.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.177,354.17 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.17,357.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.5,358.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.71,360.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.5,363.55 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.55,365.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:365.43,367.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.9,368.79 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:370.5,370.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:374.101,376.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:376.57,377.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:377.78,379.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.2,381.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.19,383.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.2,384.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.19,386.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.2,387.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.56,388.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:388.57,390.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:392.2,392.16 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.45,23.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,26.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.47,31.55 2 0
@@ -2444,238 +2696,240 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:16.2,27.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:30.38,32.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:34.46,36.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:38.31,41.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:21.55,23.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.32,25.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:26.2,26.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:30.41,35.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:37.41,42.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.32,47.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.23,49.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.2,51.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.24,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.2,57.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.15,59.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.2,63.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.51,68.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.41,70.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:71.2,73.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.110,77.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.14,81.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:82.2,84.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:87.118,88.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.14,91.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.16,94.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.35,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.36,99.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.4,102.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.59,104.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.4,105.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:108.2,111.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:114.51,115.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.23,117.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.13,120.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:120.100,122.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:124.3,124.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.2,126.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:129.32,131.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:134.44,135.50 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.50,137.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.2,138.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:143.20,144.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.40,146.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.3,148.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.12,152.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.2,153.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:156.52,157.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.38,159.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.2,161.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.27,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.34,163.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.36,166.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:168.3,168.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:170.2,170.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.64,180.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.22,183.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.12,185.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:186.3,188.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.74,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.12,196.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:197.3,198.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.48,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:202.3,203.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.18,205.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.3,208.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:210.2,210.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:216.41,220.31 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.31,222.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.2,223.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.29,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.2,226.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.31,228.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.32,230.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.2,232.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.83,239.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:239.102,241.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:241.36,243.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.136,245.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.4,248.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.34,250.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.2,254.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.65,255.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.53,257.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:257.37,259.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.137,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:262.5,264.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.35,266.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:270.2,270.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:274.80,275.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.22,277.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:278.2,280.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.40,282.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.2,283.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.34,284.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.31,285.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.3,288.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.16,289.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.3,291.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.32,293.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.2,295.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:298.36,300.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.39,305.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.13,307.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.2,310.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.66,312.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:313.2,314.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.54,316.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,317.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.51,319.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:320.2,322.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:322.69,325.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:326.2,326.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:330.43,332.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.13,334.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:335.2,336.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.11,338.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.2,340.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.14,342.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:343.2,344.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:348.56,350.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.89,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:353.2,353.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.52,358.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.32,360.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.28,362.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.34,365.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.42,368.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.3,369.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.2,374.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.27,376.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,377.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.36,379.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.2,383.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.49,385.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:385.24,387.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:390.2,391.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.25,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,394.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.33,396.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.2,398.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:402.67,404.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.35,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,408.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.31,410.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.2,411.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.69,415.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.32,417.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.2,418.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:421.45,423.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.22,427.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.12,429.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:430.3,432.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.32,434.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:435.3,436.46 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.46,438.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.3,442.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.12,444.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:445.3,446.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.49,448.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:450.3,450.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.2,452.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.67,458.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.28,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.12,461.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.3,465.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.12,466.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.3,468.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.43,470.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.3,472.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.34,474.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:476.3,477.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.48,479.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.3,481.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.25,483.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:485.3,486.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.50,488.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.3,490.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:492.2,492.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:86.90,89.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:89.20,91.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:92.2,94.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:94.23,96.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.2,98.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:98.22,100.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:101.2,102.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:102.27,104.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:105.2,111.38 6 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:111.38,114.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:114.8,116.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.2,120.35 4 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:120.35,122.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.2,123.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.35,125.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.2,127.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.46,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.8,131.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,132.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.47,134.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:134.8,136.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,137.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.46,139.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.8,141.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.2,142.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.33,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:144.8,146.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.2,149.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.24,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.2,152.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.25,154.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.2,155.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.24,157.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.2,158.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.29,160.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:162.2,164.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:164.47,164.72 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:166.47,166.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:175.2,175.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:178.30,179.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:179.6,181.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:181.20,183.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.3,184.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.17,186.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:187.3,188.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:188.52,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.3,192.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.23,194.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:196.3,197.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:197.15,199.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.55,22.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.32,24.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:25.2,25.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.41,41.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.32,46.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.23,48.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.2,50.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.24,52.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:53.2,56.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:56.15,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.2,62.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:66.51,67.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.41,69.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:70.2,72.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.62,77.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.16,79.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.5,81.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:81.28,84.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.5,85.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.118,89.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.14,92.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.16,95.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:95.35,97.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.4,98.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.36,100.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:101.4,103.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:103.59,105.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.4,106.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:109.2,112.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.51,116.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.23,118.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.2,119.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.13,121.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.100,123.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:125.3,125.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.2,127.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.32,132.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.44,136.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.50,138.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:139.2,139.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.40,144.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.20,145.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.40,147.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.3,149.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.2,151.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.12,153.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.2,154.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.52,158.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.38,160.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.2,162.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.27,163.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:163.34,164.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.3,166.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.36,167.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:169.3,169.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.2,171.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:179.64,181.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:181.22,184.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.12,186.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:187.3,189.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.74,191.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.3,195.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.12,197.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.48,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.3,204.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.18,206.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:208.3,209.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:211.2,211.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.41,221.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.31,223.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.2,227.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.31,229.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.32,231.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.2,233.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.83,240.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.102,242.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:242.36,244.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.136,246.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:247.4,249.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:249.34,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.2,255.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.65,256.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.53,258.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:258.37,260.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:260.137,262.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.5,265.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:265.35,267.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.2,271.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.80,276.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.22,278.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:279.2,281.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.40,283.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.34,285.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.31,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,289.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:289.16,290.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.3,292.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.32,294.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:296.2,296.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.36,301.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:304.39,306.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.13,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.66,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,315.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.54,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.2,318.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.51,320.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.2,323.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.69,326.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.2,327.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:331.43,333.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.13,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.11,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:341.14,343.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:344.2,345.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.56,351.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:351.89,353.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.2,354.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.52,359.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:359.32,361.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:361.28,363.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.3,364.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.34,366.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.3,367.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.42,369.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:370.3,370.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.2,375.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:375.27,377.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.2,378.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.36,380.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:381.2,384.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:384.49,386.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.24,388.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,392.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:392.25,394.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.2,395.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.33,397.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:398.2,399.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.67,405.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.35,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,409.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:409.31,411.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.2,412.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.69,416.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:416.32,418.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.2,419.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.45,424.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.22,428.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,433.32 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.32,435.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,437.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:437.46,439.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.3,443.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.12,445.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.3,447.49 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.49,449.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.3,451.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:453.2,453.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:456.67,459.28 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:459.28,461.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:461.12,462.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:464.3,466.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:466.12,467.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.3,469.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.43,471.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.3,473.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.34,475.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.3,478.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.48,480.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.3,482.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.25,484.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.3,487.50 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:487.50,489.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:490.3,491.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:493.2,493.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.90,129.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.20,131.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,134.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.23,136.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,138.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:138.22,140.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.2,142.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:142.27,144.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:145.2,151.38 6 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:151.38,154.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.8,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:157.2,160.35 4 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:160.35,162.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.2,163.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.35,165.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.2,167.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.46,169.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:169.8,171.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.2,172.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.47,174.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:174.8,176.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.2,177.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.46,179.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:179.8,181.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.5,182.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.36,184.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:184.11,186.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:189.5,207.24 17 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:207.24,209.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.2,210.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.25,212.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.2,213.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.24,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.2,216.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.29,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:220.2,222.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:222.47,222.72 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:224.47,224.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:233.2,233.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:236.30,237.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:237.6,239.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:239.20,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.3,242.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.17,244.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:245.3,246.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:246.52,248.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.3,250.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.23,252.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:254.3,255.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:255.15,257.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:15.48,18.6 3 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:18.6,20.17 2 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:20.17,22.4 1 0
@@ -2711,214 +2965,335 @@ codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:13.13,17.18 4 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.2,22.79 1 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.79,24.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:63.29,86.2 2 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:90.35,92.19 2 3
-codeberg.org/snonux/hexai/internal/appconfig/config.go:92.19,94.3 1 2
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.2,97.16 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:97.16,100.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:100.8,101.85 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:101.85,103.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.2,109.50 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.50,111.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:112.2,112.12 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.66,118.16 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:118.16,119.43 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.43,121.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:122.3,122.18 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.2,128.45 4 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:128.45,129.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:129.20,131.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:132.3,132.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.19,136.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.22 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.37,143.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,147.25 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:147.25,149.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.2,150.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.56,152.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.2,153.34 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.34,155.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.2,156.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.32,158.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.32,161.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.36,164.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.2,165.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.38,167.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.2,168.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.36,170.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.2,171.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.36,173.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.2,174.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.38,176.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.2,177.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.55,179.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.2,180.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.56,182.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.2,183.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.55,185.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.2,186.33 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.33,188.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.2,189.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.53,191.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.47,196.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:196.58,198.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.2,199.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.56,201.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.2,202.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.36,204.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.2,205.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.58,207.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.2,208.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.56,210.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.2,211.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.36,213.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.2,214.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.59,216.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.2,217.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.57,219.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.2,220.37 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.37,222.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:225.38,227.72 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.72,229.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.8,231.17 2 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:231.17,233.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:234.3,234.70 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:236.2,236.24 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:243.43,248.34 3 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:248.34,248.76 1 24
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.2,249.41 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.41,251.14 2 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:251.14,253.4 1 7
-codeberg.org/snonux/hexai/internal/appconfig/config.go:254.3,255.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:255.17,256.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.21,258.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.4,259.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:261.3,261.17 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.2,263.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.51,265.14 2 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.14,267.4 1 4
-codeberg.org/snonux/hexai/internal/appconfig/config.go:268.3,269.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:269.17,270.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.21,272.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:273.4,273.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:275.3,275.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.2,278.47 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.47,281.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.2,282.48 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.48,285.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.2,286.57 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.2,290.55 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.55,293.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.2,294.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.54,297.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.2,298.61 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.61,301.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.2,302.59 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.59,305.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.2,306.59 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.59,309.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.2,310.60 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.60,313.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.2,314.54 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,317.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:317.27,318.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:318.42,320.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:322.3,322.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.2,324.47 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.47,327.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.2,328.48 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.48,331.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.2,332.47 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.47,335.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.2,336.49 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.49,339.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:339.27,340.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:340.42,342.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:344.3,344.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.2,346.44 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.44,349.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.2,352.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.51,355.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.2,356.48 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.48,359.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.2,360.60 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.60,363.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.2,365.51 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.51,368.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.2,369.48 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.48,372.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.2,373.60 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.60,376.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.2,378.52 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.52,381.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.2,382.49 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.49,385.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.2,386.61 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.61,389.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.2,391.10 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.10,393.3 1 1
-codeberg.org/snonux/hexai/internal/appconfig/config.go:394.2,394.13 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.16 4 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.16,30.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.124,39.16 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.16,42.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.2,45.74 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:45.74,48.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:49.2,49.12 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:53.64,55.82 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:55.82,58.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:59.2,60.9 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:61.40,62.59 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:63.23,64.24 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:65.21,66.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:67.10,68.91 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:73.65,88.36 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:88.36,90.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:92.2,93.36 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:93.36,95.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:96.2,96.48 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:100.48,103.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.40,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:106.2,109.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:113.125,116.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:116.40,118.56 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:118.56,121.4 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:121.18,123.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.3,124.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:125.8,127.17 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.17,129.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:130.3,131.26 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.2,136.12 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:140.59,142.2 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.29,136.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:140.35,142.19 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.19,144.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,147.16 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:147.16,150.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:150.8,151.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:151.85,153.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.50,161.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.12 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:278.35,282.80 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:282.80,291.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.5,294.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.41,297.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.5,300.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.47,307.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.5,310.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.47,313.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.39,319.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.85,325.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.5,328.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.50,331.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.5,334.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.71,341.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.5,344.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.74,351.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.5,354.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.71,361.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.5,365.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.62,366.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:366.73,368.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.9,369.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.72,371.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.9,372.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.72,374.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.9,375.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.71,377.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.9,378.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.70,380.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.9,381.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.71,383.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.5,386.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.56,388.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.5,390.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.62,391.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:391.73,393.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.9,394.77 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.77,396.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.9,397.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.74,399.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.9,400.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.71,402.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.9,403.75 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.75,405.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.9,406.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.72,408.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.9,409.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.72,411.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.9,412.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.70,414.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.5,417.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.48,418.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:418.66,420.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.9,421.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.66,423.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.5,426.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.70,428.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:430.5,430.15 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:433.66,435.19 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:435.19,436.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:436.49,438.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:439.9,439.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:442.5,447.25 5 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:447.25,448.26 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:448.26,450.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:451.9,451.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:455.5,464.24 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:464.24,465.222 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:465.222,466.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.9,468.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.47,470.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.5,473.22 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.22,475.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:479.5,481.56 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:481.56,482.65 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:482.65,483.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:484.24,485.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:486.22,487.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:488.26,489.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.5,493.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.53,494.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:494.58,495.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:496.24,497.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:498.22,499.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:500.26,501.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:505.5,505.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:508.37,512.2 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:515.39,516.25 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:516.25,518.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.2,519.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.56,521.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.2,522.34 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.34,524.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.2,525.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.32,527.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.2,528.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.32,530.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.2,531.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.36,533.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.2,534.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.38,536.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.2,537.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.36,539.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.2,540.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.36,542.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.2,543.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.38,545.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.2,546.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.55,548.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.2,549.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.56,551.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.2,552.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.55,554.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.2,555.33 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.33,557.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.2,558.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.53,560.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:564.40,566.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:566.69,568.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.5,569.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.68,571.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.5,572.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.68,574.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.5,575.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.67,577.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.5,578.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.66,580.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.5,581.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.67,583.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.5,585.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.62,587.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.5,589.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.56,591.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.5,593.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.69,595.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.5,596.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.73,598.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.5,599.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.70,601.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.5,602.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.67,604.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.5,605.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.71,607.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.5,608.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.68,610.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.5,611.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.68,613.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.5,614.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.66,616.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.5,618.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.62,620.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.5,621.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.62,623.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:627.47,628.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:628.58,630.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.2,631.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.56,633.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.2,634.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.36,636.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.2,637.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.58,639.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.2,640.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.56,642.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.2,643.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.36,645.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.2,646.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.59,648.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.2,649.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.57,651.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.2,652.37 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.37,654.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:657.38,659.72 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:659.72,661.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:661.8,663.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:663.17,665.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:666.3,666.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:668.2,668.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:675.43,680.34 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:680.34,680.76 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.2,681.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.41,683.14 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:683.14,685.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:686.3,687.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:687.17,688.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:688.21,690.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:691.4,691.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:693.3,693.17 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.2,695.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.51,697.14 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:697.14,699.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:700.3,701.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:701.17,702.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:702.21,704.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:705.4,705.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:707.3,707.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.2,710.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.47,713.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.2,714.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.48,717.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.2,718.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.57,721.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.2,722.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.55,725.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.2,726.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.54,729.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.2,730.61 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.61,733.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.2,734.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.59,737.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.2,738.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.59,741.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.2,742.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.60,745.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.2,746.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.54,749.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:749.27,750.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:750.42,752.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:754.3,754.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.2,756.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.47,759.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.2,760.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.48,763.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.2,764.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.47,767.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.2,768.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.49,771.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:771.27,772.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:772.42,774.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:776.3,776.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.2,778.44 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.44,781.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.2,784.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.51,787.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.2,788.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.48,791.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.2,792.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.60,795.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.2,797.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.51,800.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.2,801.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.48,804.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.2,805.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.60,808.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.2,810.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.52,813.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.2,814.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.49,817.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.2,818.61 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.61,821.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.2,823.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.10,825.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:826.2,826.13 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.5,33.20 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:33.20,36.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.5,39.77 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.77,42.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.5,43.15 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:48.124,50.16 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:50.16,53.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:54.2,56.74 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:56.74,59.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:60.2,60.12 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:64.64,66.82 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:66.82,69.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:70.2,71.9 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:72.40,73.59 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:74.23,75.24 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:76.21,77.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:78.10,79.91 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:84.65,99.36 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:99.36,101.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.2,104.36 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:104.36,106.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:107.2,107.48 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:111.48,114.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:114.40,116.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:117.2,120.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.77,127.43 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.43,128.64 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:128.64,130.10 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:132.5,135.6 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:139.125,142.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:142.40,144.56 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:144.56,147.4 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:147.18,149.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:150.3,150.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:151.8,153.17 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:153.17,155.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:156.3,157.26 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:159.2,162.12 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:166.59,168.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:29.17,31.4 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:32.3,33.22 2 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:35.2,37.70 3 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:42.159,49.37 6 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:32.3,33.22 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:35.2,37.70 3 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:42.159,49.37 6 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:49.37,51.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:52.2,52.12 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:57.49,59.30 2 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:59.30,61.3 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:64.72,65.19 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:52.2,52.12 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:57.49,59.30 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:59.30,61.3 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:64.72,65.19 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:65.19,67.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:68.2,82.36 3 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:82.36,84.3 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:86.2,87.36 2 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:87.36,89.3 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.2,90.67 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.67,93.3 2 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:93.8,96.3 2 5
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 6
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 5
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 1
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:68.2,82.36 3 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:82.36,84.3 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:86.2,87.36 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:87.36,89.3 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.2,90.67 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.67,93.3 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:93.8,96.3 2 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,144.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -3093,11 +3468,11 @@ codeberg.org/snonux/hexai/internal/llm/ollama.go:205.53,207.3 1 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:208.2,210.43 3 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:210.43,213.3 2 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:214.2,215.68 2 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:78.76,79.38 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:79.38,81.3 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:82.2,82.36 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:82.36,84.3 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:85.2,92.3 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:78.76,79.38 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:79.38,81.3 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:82.2,82.36 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:82.36,84.3 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:85.2,92.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:95.108,96.20 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:96.20,98.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:99.2,100.27 2 0
@@ -3115,8 +3490,8 @@ codeberg.org/snonux/hexai/internal/llm/openai.go:128.16,130.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:131.2,131.27 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:131.27,134.3 2 0
codeberg.org/snonux/hexai/internal/llm/openai.go:135.2,137.21 3 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:141.45,141.64 1 5
-codeberg.org/snonux/hexai/internal/llm/openai.go:142.45,142.70 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:141.45,141.64 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:142.45,142.70 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:146.126,147.20 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:147.20,149.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:150.2,151.27 2 0
@@ -3188,14 +3563,14 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:60.47,60.73 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:60.73,60.92 1 0
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
-codeberg.org/snonux/hexai/internal/llm/provider.go:85.84,87.13 2 6
-codeberg.org/snonux/hexai/internal/llm/provider.go:87.13,89.3 1 6
-codeberg.org/snonux/hexai/internal/llm/provider.go:90.2,90.11 1 6
-codeberg.org/snonux/hexai/internal/llm/provider.go:91.16,92.44 1 6
-codeberg.org/snonux/hexai/internal/llm/provider.go:92.44,94.4 1 1
-codeberg.org/snonux/hexai/internal/llm/provider.go:96.3,96.35 1 5
-codeberg.org/snonux/hexai/internal/llm/provider.go:96.35,99.4 2 3
-codeberg.org/snonux/hexai/internal/llm/provider.go:100.3,100.97 1 5
+codeberg.org/snonux/hexai/internal/llm/provider.go:85.84,87.13 2 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:87.13,89.3 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:90.2,90.11 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:91.16,92.44 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:92.44,94.4 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:96.3,96.35 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:96.35,99.4 2 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:100.3,100.97 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:101.16,102.35 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:102.35,105.4 2 0
codeberg.org/snonux/hexai/internal/llm/provider.go:106.3,106.83 1 0
@@ -3206,21 +3581,21 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:111.36,114.4 2 0
codeberg.org/snonux/hexai/internal/llm/provider.go:115.3,115.102 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:116.10,117.55 1 0
codeberg.org/snonux/hexai/internal/llm/util.go:6.47,6.77 1 0
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:9.48,11.2 1 5
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:18.3,20.12 2 0
-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 6
-codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 2
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:9.48,11.2 1 1
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:18.3,20.12 2 1
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:20.12,22.3 1 1
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:23.2,25.29 2 1
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:25.29,28.3 1 2
+codeberg.org/snonux/hexai/internal/logging/logging.go:27.26,27.37 1 2
+codeberg.org/snonux/hexai/internal/logging/logging.go:30.47,31.16 1 4
+codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 0
codeberg.org/snonux/hexai/internal/logging/logging.go:34.2,35.48 2 4
-codeberg.org/snonux/hexai/internal/logging/logging.go:43.32,43.55 1 7
-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 1
-codeberg.org/snonux/hexai/internal/logging/logging.go:48.32,50.4 1 0
-codeberg.org/snonux/hexai/internal/logging/logging.go:51.3,51.37 1 1
-codeberg.org/snonux/hexai/internal/logging/logging.go:53.2,53.10 1 0
+codeberg.org/snonux/hexai/internal/logging/logging.go:43.32,43.55 1 3
+codeberg.org/snonux/hexai/internal/logging/logging.go:46.37,47.25 1 5
+codeberg.org/snonux/hexai/internal/logging/logging.go:47.25,48.32 1 4
+codeberg.org/snonux/hexai/internal/logging/logging.go:48.32,50.4 1 2
+codeberg.org/snonux/hexai/internal/logging/logging.go:51.3,51.37 1 2
+codeberg.org/snonux/hexai/internal/logging/logging.go:53.2,53.10 1 1
codeberg.org/snonux/hexai/internal/lsp/context.go:16.96,18.14 2 0
codeberg.org/snonux/hexai/internal/lsp/context.go:19.17,20.19 1 0
codeberg.org/snonux/hexai/internal/lsp/context.go:21.16,22.41 1 0
@@ -3409,153 +3784,153 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:86.45,88.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:89.2,97.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:97.58,99.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:100.2,100.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.17,108.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.20,108.72 7 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:108.72,109.66 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:109.66,113.5 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:114.9,116.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.21,121.43 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.43,122.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:122.24,124.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:124.10,126.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:128.3,134.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.72,135.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:135.66,139.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:140.9,142.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:143.18,150.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.72,151.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:151.66,155.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:156.9,158.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.17,160.92 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:160.92,168.4 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:170.2,170.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:173.55,175.56 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.56,176.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:176.23,178.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:179.3,179.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.2,181.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.49,184.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:185.2,185.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.85,192.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:192.22,194.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.2,196.53 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:196.53,198.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.2,199.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.31,201.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.2,203.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.36,204.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:204.34,206.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:208.2,208.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:212.37,214.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:214.32,216.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.2,217.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.32,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.2,221.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.29,223.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.2,225.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.29,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:228.2,228.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.34,232.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:232.22,234.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:235.2,235.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.37,239.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:239.22,241.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:242.2,242.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:247.76,249.80 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:249.80,251.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.2,253.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.71,255.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.2,258.41 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:258.41,260.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:261.2,268.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.86,273.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:273.24,275.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.2,276.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.34,278.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:279.2,287.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:290.95,292.76 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:292.76,294.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.2,297.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:297.21,299.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:300.2,302.36 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:302.36,304.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:305.2,307.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:307.39,309.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:311.2,315.26 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:315.26,321.22 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:321.22,324.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:325.3,327.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:327.102,329.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:330.3,337.40 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:337.40,339.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:340.3,342.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:342.19,344.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:345.3,346.33 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.2,350.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:350.15,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:353.2,368.13 13 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:368.13,371.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:372.2,373.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.62,378.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:378.39,380.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:381.2,383.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:383.16,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:386.2,387.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.35,391.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:391.41,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:394.2,394.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.48,399.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:399.27,401.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:401.39,404.45 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:404.45,406.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.4,407.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.46,409.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.4,410.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.46,412.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:413.4,413.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:416.2,416.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.63,421.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:421.13,423.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.2,424.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.23,426.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.2,429.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.28,430.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:430.42,432.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.3,434.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.38,435.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.2,438.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.17,440.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:442.2,444.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:444.38,446.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:446.32,447.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:448.13,450.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.13,452.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:452.18,454.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.5,455.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.31,457.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.2,462.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.15,464.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:465.2,465.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.65,470.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:470.24,477.71 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:477.71,479.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:479.21,481.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:482.9,484.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.2,488.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:488.16,490.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:491.2,491.115 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:495.43,499.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:499.39,501.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:502.2,504.34 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:504.34,506.63 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:506.63,508.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.2,511.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.42,513.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:514.2,514.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.37,518.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:518.16,520.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.2,522.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:522.32,524.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:525.2,525.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.24,120.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:120.49,121.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.33,123.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:123.19,125.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:127.9,133.78 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:133.78,134.75 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.75,138.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:139.15,141.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:142.21,149.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:149.72,150.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.66,154.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:155.9,157.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:158.17,159.92 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.92,167.4 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:169.2,169.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:172.55,174.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:174.56,175.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.23,177.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:178.3,178.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.2,180.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.49,183.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:184.2,184.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:190.85,191.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.22,193.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:194.2,195.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.53,197.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.2,198.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.31,200.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:201.2,202.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.36,203.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.34,205.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:207.2,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:211.37,213.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:213.32,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.2,216.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.32,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.2,220.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.29,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:227.2,227.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:230.34,231.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.22,233.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:234.2,234.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:237.37,238.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.22,240.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:241.2,241.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:246.76,248.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:248.80,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.2,252.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.71,254.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:256.2,257.41 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.41,259.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:260.2,267.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:271.86,272.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.24,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.2,275.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.34,277.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:278.2,286.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:289.95,291.76 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:291.76,293.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:295.2,296.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.21,298.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:299.2,301.36 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:301.36,303.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:304.2,306.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:306.39,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:310.2,314.26 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:314.26,320.22 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:320.22,323.4 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:324.3,326.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:326.102,328.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:329.3,336.40 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:336.40,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:339.3,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:341.19,343.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:344.3,345.33 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:348.2,349.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.15,351.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:352.2,367.13 13 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:367.13,370.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:371.2,372.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:376.62,377.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.39,379.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:380.2,382.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:382.16,384.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:385.2,386.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:389.35,390.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.41,392.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:393.2,393.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:397.48,398.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.27,400.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:400.39,403.45 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:403.45,405.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.4,406.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.46,408.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.4,409.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.46,411.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:412.4,412.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:415.2,415.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:419.63,420.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.13,422.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.2,423.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.23,425.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:427.2,428.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.28,429.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.42,431.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.3,433.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.38,434.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.2,437.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.17,439.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:441.2,443.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:443.38,445.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:445.32,446.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:447.13,449.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:450.13,451.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.18,453.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.5,454.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.31,456.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.2,461.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.15,463.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:464.2,464.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:468.65,469.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.27,476.71 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:476.71,478.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:478.21,480.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:481.9,483.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:486.2,487.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.16,489.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:490.2,490.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:494.43,498.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:498.39,500.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:501.2,503.34 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:503.34,505.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:505.63,507.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.2,510.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.42,512.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:513.2,513.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:516.37,517.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.16,519.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:520.2,521.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.32,523.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:524.2,524.18 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:15.48,18.55 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:18.55,25.19 5 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:25.19,27.4 1 0
@@ -3625,58 +4000,62 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:216.50,218.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:219.2,219.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.193,225.9 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:225.9,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.2,233.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:233.32,235.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.2,237.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.24,239.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,246.30 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:246.30,248.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.2,250.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.40,252.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.20,254.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.4,257.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.54,259.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.21,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.4,263.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.40,267.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.8,269.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.23,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.2,272.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.55,279.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.12,281.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.2,282.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.6,286.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.20,288.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.3,290.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.17,292.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,295.10 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:296.21,298.10 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.18,299.18 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.60,309.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:309.19,311.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.2,313.6 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.6,317.23 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.23,321.11 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:322.22,324.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:325.19,327.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:331.3,333.14 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:338.177,344.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.33,346.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.2,347.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.18,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:350.2,350.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.101,356.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.57,357.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.78,359.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.2,361.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.19,363.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.2,364.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.19,366.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.56 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.56,368.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.57,370.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:372.2,372.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.5,237.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.32,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,241.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.24,243.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.2,250.30 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.30,252.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.2,254.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.40,256.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:256.20,258.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.21,260.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.4,261.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.54,263.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.21,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.4,267.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.40,271.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.8,273.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.23,275.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.2,276.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.55,283.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.12,285.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.2,286.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.6,290.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.20,292.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,294.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.17,296.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.3,299.10 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:300.21,302.10 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.18,303.18 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:311.60,313.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.19,315.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:316.2,317.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.6,321.23 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.23,325.11 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.22,328.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:329.19,331.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:335.3,337.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.177,354.17 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.17,357.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.5,358.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.71,360.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.5,363.55 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.55,365.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:365.43,367.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.9,368.79 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:370.5,370.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:374.101,376.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:376.57,377.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:377.78,379.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.2,381.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.19,383.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.2,384.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.19,386.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.2,387.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.56,388.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:388.57,390.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:392.2,392.16 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.45,23.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,26.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.47,31.55 2 0
@@ -3792,241 +4171,243 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:16.2,27.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:30.38,32.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:34.46,36.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:38.31,41.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:21.55,23.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.32,25.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:26.2,26.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:30.41,35.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:37.41,42.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.32,47.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.23,49.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.2,51.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.24,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.2,57.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.15,59.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.2,63.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.51,68.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.41,70.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:71.2,73.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.110,77.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.14,81.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:82.2,84.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:87.118,88.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.14,91.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.16,94.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.35,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.36,99.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.4,102.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.59,104.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.4,105.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:108.2,111.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:114.51,115.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.23,117.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.13,120.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:120.100,122.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:124.3,124.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.2,126.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:129.32,131.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:134.44,135.50 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.50,137.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.2,138.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:143.20,144.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.40,146.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.3,148.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.12,152.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.2,153.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:156.52,157.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.38,159.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.2,161.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.27,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.34,163.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.36,166.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:168.3,168.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:170.2,170.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.64,180.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.22,183.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.12,185.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:186.3,188.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.74,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.12,196.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:197.3,198.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.48,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:202.3,203.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.18,205.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.3,208.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:210.2,210.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:216.41,220.31 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.31,222.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.2,223.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.29,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.2,226.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.31,228.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.32,230.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.2,232.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.83,239.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:239.102,241.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:241.36,243.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.136,245.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.4,248.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.34,250.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.2,254.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.65,255.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.53,257.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:257.37,259.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.137,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:262.5,264.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.35,266.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:270.2,270.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:274.80,275.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.22,277.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:278.2,280.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.40,282.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.2,283.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.34,284.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.31,285.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.3,288.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.16,289.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.3,291.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.32,293.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.2,295.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:298.36,300.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.39,305.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.13,307.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.2,310.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.66,312.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:313.2,314.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.54,316.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,317.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.51,319.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:320.2,322.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:322.69,325.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:326.2,326.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:330.43,332.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.13,334.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:335.2,336.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.11,338.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.2,340.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.14,342.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:343.2,344.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:348.56,350.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.89,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:353.2,353.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.52,358.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.32,360.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.28,362.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.34,365.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.42,368.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.3,369.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.2,374.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.27,376.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,377.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.36,379.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.2,383.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.49,385.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:385.24,387.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:390.2,391.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.25,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,394.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.33,396.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.2,398.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:402.67,404.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.35,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,408.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.31,410.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.2,411.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.69,415.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.32,417.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.2,418.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:421.45,423.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.22,427.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.12,429.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:430.3,432.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.32,434.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:435.3,436.46 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.46,438.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.3,442.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.12,444.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:445.3,446.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.49,448.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:450.3,450.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.2,452.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.67,458.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.28,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.12,461.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.3,465.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.12,466.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.3,468.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.43,470.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.3,472.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.34,474.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:476.3,477.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.48,479.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.3,481.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.25,483.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:485.3,486.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.50,488.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.3,490.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:492.2,492.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:86.90,89.20 3 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:89.20,91.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:92.2,94.23 3 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:94.23,96.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.2,98.22 2 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:98.22,100.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:101.2,102.27 2 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:102.27,104.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:105.2,111.38 6 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:111.38,114.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:114.8,116.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.2,120.35 4 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:120.35,122.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.2,123.35 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.35,125.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.2,127.46 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.46,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.8,131.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,132.47 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.47,134.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:134.8,136.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,137.46 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.46,139.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.8,141.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.2,142.33 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.33,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:144.8,146.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.2,149.24 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.24,151.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.2,152.25 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.25,154.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.2,155.24 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.24,157.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.2,158.29 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.29,160.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:162.2,164.47 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:164.47,164.72 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:166.47,166.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:175.2,175.10 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:178.30,179.6 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:179.6,181.20 2 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:181.20,183.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.3,184.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.17,186.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:187.3,188.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:188.52,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.3,192.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.23,194.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:196.3,197.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:197.15,199.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:15.48,18.6 3 1
-codeberg.org/snonux/hexai/internal/lsp/transport.go:18.6,20.17 2 1
-codeberg.org/snonux/hexai/internal/lsp/transport.go:20.17,22.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.55,22.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.32,24.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:25.2,25.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.41,41.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.32,46.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.23,48.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.2,50.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.24,52.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:53.2,56.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:56.15,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.2,62.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:66.51,67.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.41,69.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:70.2,72.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.62,77.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.16,79.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.5,81.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:81.28,84.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.5,85.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.118,89.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.14,92.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.16,95.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:95.35,97.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.4,98.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.36,100.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:101.4,103.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:103.59,105.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.4,106.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:109.2,112.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.51,116.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.23,118.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.2,119.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.13,121.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.100,123.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:125.3,125.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.2,127.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.32,132.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.44,136.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.50,138.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:139.2,139.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.40,144.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.20,145.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.40,147.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.3,149.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.2,151.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.12,153.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.2,154.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.52,158.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.38,160.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.2,162.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.27,163.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:163.34,164.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.3,166.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.36,167.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:169.3,169.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.2,171.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:179.64,181.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:181.22,184.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.12,186.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:187.3,189.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.74,191.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.3,195.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.12,197.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.48,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.3,204.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.18,206.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:208.3,209.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:211.2,211.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.41,221.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.31,223.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.2,227.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.31,229.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.32,231.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.2,233.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.83,240.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.102,242.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:242.36,244.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.136,246.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:247.4,249.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:249.34,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.2,255.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.65,256.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.53,258.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:258.37,260.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:260.137,262.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.5,265.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:265.35,267.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.2,271.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.80,276.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.22,278.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:279.2,281.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.40,283.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.34,285.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.31,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,289.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:289.16,290.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.3,292.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.32,294.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:296.2,296.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.36,301.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:304.39,306.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.13,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.66,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,315.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.54,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.2,318.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.51,320.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.2,323.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.69,326.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.2,327.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:331.43,333.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.13,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.11,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:341.14,343.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:344.2,345.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.56,351.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:351.89,353.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.2,354.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.52,359.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:359.32,361.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:361.28,363.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.3,364.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.34,366.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.3,367.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.42,369.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:370.3,370.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.2,375.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:375.27,377.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.2,378.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.36,380.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:381.2,384.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:384.49,386.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.24,388.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,392.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:392.25,394.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.2,395.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.33,397.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:398.2,399.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.67,405.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.35,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,409.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:409.31,411.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.2,412.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.69,416.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:416.32,418.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.2,419.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.45,424.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.22,428.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,433.32 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.32,435.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,437.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:437.46,439.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.3,443.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.12,445.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.3,447.49 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.49,449.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.3,451.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:453.2,453.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:456.67,459.28 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:459.28,461.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:461.12,462.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:464.3,466.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:466.12,467.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.3,469.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.43,471.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.3,473.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.34,475.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.3,478.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.48,480.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.3,482.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.25,484.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.3,487.50 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:487.50,489.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:490.3,491.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:493.2,493.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.90,129.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.20,131.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,134.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.23,136.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,138.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:138.22,140.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.2,142.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:142.27,144.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:145.2,151.38 6 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:151.38,154.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.8,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:157.2,160.35 4 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:160.35,162.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.2,163.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.35,165.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.2,167.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.46,169.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:169.8,171.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.2,172.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.47,174.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:174.8,176.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.2,177.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.46,179.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:179.8,181.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.5,182.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.36,184.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:184.11,186.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:189.5,207.24 17 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:207.24,209.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.2,210.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.25,212.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.2,213.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.24,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.2,216.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.29,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:220.2,222.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:222.47,222.72 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:224.47,224.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:233.2,233.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:236.30,237.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:237.6,239.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:239.20,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.3,242.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.17,244.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:245.3,246.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:246.52,248.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.3,250.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.23,252.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:254.3,255.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:255.15,257.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/transport.go:15.48,18.6 3 0
+codeberg.org/snonux/hexai/internal/lsp/transport.go:18.6,20.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/transport.go:20.17,22.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:23.3,23.17 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:23.17,24.9 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:26.3,27.22 2 0
@@ -4059,214 +4440,335 @@ codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:13.13,17.18 4 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.2,22.79 1 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.79,24.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:63.29,86.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:90.35,92.19 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:92.19,94.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.2,97.16 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:97.16,100.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:100.8,101.85 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:101.85,103.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.2,109.50 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.50,111.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:112.2,112.12 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.66,118.16 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:118.16,119.43 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.43,121.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:122.3,122.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.2,128.45 4 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:128.45,129.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:129.20,131.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:132.3,132.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.19,136.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.22 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.37,143.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,147.25 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:147.25,149.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.2,150.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.56,152.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.2,153.34 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.34,155.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.2,156.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.32,158.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.32,161.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.36,164.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.2,165.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.38,167.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.2,168.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.36,170.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.2,171.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.36,173.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.2,174.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.38,176.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.2,177.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.55,179.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.2,180.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.56,182.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.2,183.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.55,185.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.2,186.33 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.33,188.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.2,189.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.53,191.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.47,196.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:196.58,198.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.2,199.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.56,201.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.2,202.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.36,204.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.2,205.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.58,207.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.2,208.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.56,210.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.2,211.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.36,213.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.2,214.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.59,216.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.2,217.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.57,219.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.2,220.37 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.37,222.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:225.38,227.72 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.72,229.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.8,231.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:231.17,233.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:234.3,234.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:236.2,236.24 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:243.43,248.34 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:248.34,248.76 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.2,249.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.41,251.14 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:251.14,253.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:254.3,255.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:255.17,256.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.21,258.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.4,259.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:261.3,261.17 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.2,263.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.51,265.14 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.14,267.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:268.3,269.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:269.17,270.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.21,272.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:273.4,273.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:275.3,275.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.2,278.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.47,281.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.2,282.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.48,285.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.2,286.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.2,290.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.55,293.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.2,294.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.54,297.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.2,298.61 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.61,301.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.2,302.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.59,305.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.2,306.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.59,309.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.2,310.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.60,313.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.2,314.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,317.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:317.27,318.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:318.42,320.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:322.3,322.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.2,324.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.47,327.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.2,328.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.48,331.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.2,332.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.47,335.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.2,336.49 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.49,339.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:339.27,340.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:340.42,342.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:344.3,344.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.2,346.44 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.44,349.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.2,352.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.51,355.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.2,356.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.48,359.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.2,360.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.60,363.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.2,365.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.51,368.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.2,369.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.48,372.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.2,373.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.60,376.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.2,378.52 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.52,381.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.2,382.49 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.49,385.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.2,386.61 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.61,389.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.2,391.10 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.10,393.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:394.2,394.13 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.16 4 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.16,30.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.124,39.16 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.16,42.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.2,45.74 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:45.74,48.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:49.2,49.12 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:53.64,55.82 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:55.82,58.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:59.2,60.9 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:61.40,62.59 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:63.23,64.24 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:65.21,66.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:67.10,68.91 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:73.65,88.36 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:88.36,90.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:92.2,93.36 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:93.36,95.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:96.2,96.48 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:100.48,103.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.40,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:106.2,109.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:113.125,116.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:116.40,118.56 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:118.56,121.4 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:121.18,123.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.3,124.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:125.8,127.17 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.17,129.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:130.3,131.26 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.2,136.12 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:140.59,142.2 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.29,136.2 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:140.35,142.19 2 3
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.19,144.3 1 2
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,147.16 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:147.16,150.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:150.8,151.85 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:151.85,153.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.50 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.50,161.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.12 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:278.35,282.80 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:282.80,291.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.5,294.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.41,297.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.5,300.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.47,307.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.5,310.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.47,313.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.39,319.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.85,325.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.5,328.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.50,331.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.5,334.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.71,341.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.5,344.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.74,351.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.5,354.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.71,361.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.5,365.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.62,366.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:366.73,368.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.9,369.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.72,371.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.9,372.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.72,374.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.9,375.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.71,377.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.9,378.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.70,380.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.9,381.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.71,383.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.5,386.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.56,388.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.5,390.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.62,391.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:391.73,393.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.9,394.77 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.77,396.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.9,397.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.74,399.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.9,400.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.71,402.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.9,403.75 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.75,405.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.9,406.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.72,408.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.9,409.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.72,411.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.9,412.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.70,414.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.5,417.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.48,418.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:418.66,420.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.9,421.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.66,423.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.5,426.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.70,428.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:430.5,430.15 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:433.66,435.19 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:435.19,436.49 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:436.49,438.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:439.9,439.24 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:442.5,447.25 5 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:447.25,448.26 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:448.26,450.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:451.9,451.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:455.5,464.24 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:464.24,465.222 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:465.222,466.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.9,468.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.47,470.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.5,473.22 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.22,475.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:479.5,481.56 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:481.56,482.65 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:482.65,483.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:484.24,485.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:486.22,487.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:488.26,489.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.5,493.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.53,494.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:494.58,495.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:496.24,497.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:498.22,499.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:500.26,501.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:505.5,505.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:508.37,512.2 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:515.39,516.25 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:516.25,518.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.2,519.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.56,521.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.2,522.34 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.34,524.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.2,525.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.32,527.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.2,528.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.32,530.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.2,531.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.36,533.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.2,534.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.38,536.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.2,537.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.36,539.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.2,540.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.36,542.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.2,543.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.38,545.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.2,546.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.55,548.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.2,549.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.56,551.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.2,552.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.55,554.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.2,555.33 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.33,557.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.2,558.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.53,560.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:564.40,566.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:566.69,568.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.5,569.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.68,571.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.5,572.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.68,574.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.5,575.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.67,577.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.5,578.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.66,580.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.5,581.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.67,583.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.5,585.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.62,587.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.5,589.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.56,591.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.5,593.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.69,595.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.5,596.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.73,598.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.5,599.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.70,601.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.5,602.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.67,604.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.5,605.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.71,607.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.5,608.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.68,610.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.5,611.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.68,613.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.5,614.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.66,616.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.5,618.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.62,620.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.5,621.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.62,623.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:627.47,628.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:628.58,630.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.2,631.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.56,633.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.2,634.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.36,636.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.2,637.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.58,639.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.2,640.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.56,642.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.2,643.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.36,645.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.2,646.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.59,648.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.2,649.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.57,651.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.2,652.37 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.37,654.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:657.38,659.72 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:659.72,661.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:661.8,663.17 2 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:663.17,665.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:666.3,666.70 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:668.2,668.24 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:675.43,680.34 3 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:680.34,680.76 1 24
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.2,681.41 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.41,683.14 2 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:683.14,685.4 1 7
+codeberg.org/snonux/hexai/internal/appconfig/config.go:686.3,687.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:687.17,688.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:688.21,690.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:691.4,691.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:693.3,693.17 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.2,695.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.51,697.14 2 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:697.14,699.4 1 4
+codeberg.org/snonux/hexai/internal/appconfig/config.go:700.3,701.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:701.17,702.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:702.21,704.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:705.4,705.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:707.3,707.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.2,710.47 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.47,713.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.2,714.48 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.48,717.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.2,718.57 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.57,721.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.2,722.55 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.55,725.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.2,726.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.54,729.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.2,730.61 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.61,733.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.2,734.59 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.59,737.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.2,738.59 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.59,741.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.2,742.60 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.60,745.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.2,746.54 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.54,749.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:749.27,750.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:750.42,752.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:754.3,754.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.2,756.47 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.47,759.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.2,760.48 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.48,763.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.2,764.47 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.47,767.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.2,768.49 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.49,771.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:771.27,772.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:772.42,774.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:776.3,776.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.2,778.44 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.44,781.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.2,784.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.51,787.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.2,788.48 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.48,791.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.2,792.60 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.60,795.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.2,797.51 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.51,800.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.2,801.48 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.48,804.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.2,805.60 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.60,808.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.2,810.52 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.52,813.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.2,814.49 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.49,817.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.2,818.61 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.61,821.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.2,823.10 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.10,825.3 1 1
+codeberg.org/snonux/hexai/internal/appconfig/config.go:826.2,826.13 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.5,33.20 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:33.20,36.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.5,39.77 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.77,42.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.5,43.15 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:48.124,50.16 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:50.16,53.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:54.2,56.74 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:56.74,59.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:60.2,60.12 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:64.64,66.82 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:66.82,69.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:70.2,71.9 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:72.40,73.59 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:74.23,75.24 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:76.21,77.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:78.10,79.91 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:84.65,99.36 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:99.36,101.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.2,104.36 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:104.36,106.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:107.2,107.48 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:111.48,114.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:114.40,116.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:117.2,120.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.77,127.43 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.43,128.64 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:128.64,130.10 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:132.5,135.6 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:139.125,142.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:142.40,144.56 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:144.56,147.4 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:147.18,149.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:150.3,150.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:151.8,153.17 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:153.17,155.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:156.3,157.26 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:159.2,162.12 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:166.59,168.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 1
codeberg.org/snonux/hexai/internal/hexailsp/run.go:29.17,31.4 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:32.3,33.22 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:35.2,37.70 3 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:42.159,49.37 6 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:32.3,33.22 2 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:35.2,37.70 3 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:42.159,49.37 6 6
codeberg.org/snonux/hexai/internal/hexailsp/run.go:49.37,51.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:52.2,52.12 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:57.49,59.30 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:59.30,61.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:64.72,65.19 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:52.2,52.12 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:57.49,59.30 2 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:59.30,61.3 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:64.72,65.19 1 6
codeberg.org/snonux/hexai/internal/hexailsp/run.go:65.19,67.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:68.2,82.36 3 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:82.36,84.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:86.2,87.36 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:87.36,89.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.2,90.67 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.67,93.3 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:93.8,96.3 2 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:68.2,82.36 3 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:82.36,84.3 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:86.2,87.36 2 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:87.36,89.3 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.2,90.67 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:90.67,93.3 2 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:93.8,96.3 2 5
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 6
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 5
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 1
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,144.2 1 6
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -4441,11 +4943,11 @@ codeberg.org/snonux/hexai/internal/llm/ollama.go:205.53,207.3 1 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:208.2,210.43 3 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:210.43,213.3 2 0
codeberg.org/snonux/hexai/internal/llm/ollama.go:214.2,215.68 2 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:78.76,79.38 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:79.38,81.3 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:82.2,82.36 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:82.36,84.3 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:85.2,92.3 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:78.76,79.38 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:79.38,81.3 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:82.2,82.36 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:82.36,84.3 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:85.2,92.3 1 5
codeberg.org/snonux/hexai/internal/llm/openai.go:95.108,96.20 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:96.20,98.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:99.2,100.27 2 0
@@ -4463,8 +4965,8 @@ codeberg.org/snonux/hexai/internal/llm/openai.go:128.16,130.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:131.2,131.27 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:131.27,134.3 2 0
codeberg.org/snonux/hexai/internal/llm/openai.go:135.2,137.21 3 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:141.45,141.64 1 0
-codeberg.org/snonux/hexai/internal/llm/openai.go:142.45,142.70 1 0
+codeberg.org/snonux/hexai/internal/llm/openai.go:141.45,141.64 1 5
+codeberg.org/snonux/hexai/internal/llm/openai.go:142.45,142.70 1 5
codeberg.org/snonux/hexai/internal/llm/openai.go:146.126,147.20 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:147.20,149.3 1 0
codeberg.org/snonux/hexai/internal/llm/openai.go:150.2,151.27 2 0
@@ -4536,14 +5038,14 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:60.47,60.73 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:60.73,60.92 1 0
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
-codeberg.org/snonux/hexai/internal/llm/provider.go:85.84,87.13 2 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:87.13,89.3 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:90.2,90.11 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:91.16,92.44 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:92.44,94.4 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:96.3,96.35 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:96.35,99.4 2 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:100.3,100.97 1 0
+codeberg.org/snonux/hexai/internal/llm/provider.go:85.84,87.13 2 6
+codeberg.org/snonux/hexai/internal/llm/provider.go:87.13,89.3 1 6
+codeberg.org/snonux/hexai/internal/llm/provider.go:90.2,90.11 1 6
+codeberg.org/snonux/hexai/internal/llm/provider.go:91.16,92.44 1 6
+codeberg.org/snonux/hexai/internal/llm/provider.go:92.44,94.4 1 1
+codeberg.org/snonux/hexai/internal/llm/provider.go:96.3,96.35 1 5
+codeberg.org/snonux/hexai/internal/llm/provider.go:96.35,99.4 2 3
+codeberg.org/snonux/hexai/internal/llm/provider.go:100.3,100.97 1 5
codeberg.org/snonux/hexai/internal/llm/provider.go:101.16,102.35 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:102.35,105.4 2 0
codeberg.org/snonux/hexai/internal/llm/provider.go:106.3,106.83 1 0
@@ -4554,21 +5056,21 @@ codeberg.org/snonux/hexai/internal/llm/provider.go:111.36,114.4 2 0
codeberg.org/snonux/hexai/internal/llm/provider.go:115.3,115.102 1 0
codeberg.org/snonux/hexai/internal/llm/provider.go:116.10,117.55 1 0
codeberg.org/snonux/hexai/internal/llm/util.go:6.47,6.77 1 0
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:9.48,11.2 1 1
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:18.3,20.12 2 1
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:20.12,22.3 1 1
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:23.2,25.29 2 1
-codeberg.org/snonux/hexai/internal/logging/chatlogger.go:25.29,28.3 1 2
-codeberg.org/snonux/hexai/internal/logging/logging.go:27.26,27.37 1 2
-codeberg.org/snonux/hexai/internal/logging/logging.go:30.47,31.16 1 4
-codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 0
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:9.48,11.2 1 5
+codeberg.org/snonux/hexai/internal/logging/chatlogger.go:18.3,20.12 2 0
+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 6
+codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 2
codeberg.org/snonux/hexai/internal/logging/logging.go:34.2,35.48 2 4
-codeberg.org/snonux/hexai/internal/logging/logging.go:43.32,43.55 1 3
-codeberg.org/snonux/hexai/internal/logging/logging.go:46.37,47.25 1 5
-codeberg.org/snonux/hexai/internal/logging/logging.go:47.25,48.32 1 4
-codeberg.org/snonux/hexai/internal/logging/logging.go:48.32,50.4 1 2
-codeberg.org/snonux/hexai/internal/logging/logging.go:51.3,51.37 1 2
-codeberg.org/snonux/hexai/internal/logging/logging.go:53.2,53.10 1 1
+codeberg.org/snonux/hexai/internal/logging/logging.go:43.32,43.55 1 7
+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 1
+codeberg.org/snonux/hexai/internal/logging/logging.go:48.32,50.4 1 0
+codeberg.org/snonux/hexai/internal/logging/logging.go:51.3,51.37 1 1
+codeberg.org/snonux/hexai/internal/logging/logging.go:53.2,53.10 1 0
codeberg.org/snonux/hexai/internal/lsp/context.go:16.96,18.14 2 0
codeberg.org/snonux/hexai/internal/lsp/context.go:19.17,20.19 1 0
codeberg.org/snonux/hexai/internal/lsp/context.go:21.16,22.41 1 0
@@ -4757,153 +5259,153 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:86.45,88.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:89.2,97.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:97.58,99.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:100.2,100.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.17,108.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.20,108.72 7 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:108.72,109.66 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:109.66,113.5 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:114.9,116.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.21,121.43 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.43,122.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:122.24,124.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:124.10,126.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:128.3,134.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.72,135.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:135.66,139.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:140.9,142.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:143.18,150.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.72,151.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:151.66,155.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:156.9,158.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.17,160.92 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:160.92,168.4 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:170.2,170.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:173.55,175.56 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.56,176.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:176.23,178.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:179.3,179.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.2,181.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.49,184.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:185.2,185.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.85,192.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:192.22,194.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.2,196.53 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:196.53,198.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.2,199.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.31,201.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.2,203.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.36,204.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:204.34,206.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:208.2,208.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:212.37,214.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:214.32,216.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.2,217.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.32,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.2,221.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.29,223.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.2,225.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.29,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:228.2,228.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.34,232.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:232.22,234.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:235.2,235.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.37,239.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:239.22,241.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:242.2,242.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:247.76,249.80 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:249.80,251.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.2,253.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.71,255.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.2,258.41 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:258.41,260.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:261.2,268.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.86,273.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:273.24,275.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.2,276.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.34,278.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:279.2,287.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:290.95,292.76 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:292.76,294.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.2,297.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:297.21,299.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:300.2,302.36 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:302.36,304.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:305.2,307.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:307.39,309.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:311.2,315.26 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:315.26,321.22 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:321.22,324.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:325.3,327.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:327.102,329.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:330.3,337.40 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:337.40,339.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:340.3,342.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:342.19,344.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:345.3,346.33 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.2,350.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:350.15,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:353.2,368.13 13 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:368.13,371.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:372.2,373.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.62,378.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:378.39,380.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:381.2,383.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:383.16,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:386.2,387.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.35,391.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:391.41,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:394.2,394.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.48,399.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:399.27,401.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:401.39,404.45 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:404.45,406.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.4,407.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.46,409.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.4,410.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.46,412.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:413.4,413.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:416.2,416.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.63,421.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:421.13,423.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.2,424.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.23,426.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.2,429.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.28,430.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:430.42,432.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.3,434.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.38,435.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.2,438.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.17,440.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:442.2,444.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:444.38,446.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:446.32,447.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:448.13,450.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.13,452.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:452.18,454.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.5,455.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.31,457.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.2,462.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.15,464.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:465.2,465.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.65,470.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:470.24,477.71 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:477.71,479.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:479.21,481.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:482.9,484.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.2,488.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:488.16,490.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:491.2,491.115 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:495.43,499.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:499.39,501.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:502.2,504.34 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:504.34,506.63 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:506.63,508.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.2,511.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.42,513.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:514.2,514.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.37,518.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:518.16,520.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.2,522.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:522.32,524.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:525.2,525.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.24,120.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:120.49,121.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.33,123.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:123.19,125.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:127.9,133.78 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:133.78,134.75 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.75,138.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:139.15,141.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:142.21,149.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:149.72,150.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.66,154.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:155.9,157.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:158.17,159.92 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.92,167.4 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:169.2,169.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:172.55,174.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:174.56,175.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.23,177.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:178.3,178.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.2,180.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.49,183.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:184.2,184.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:190.85,191.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.22,193.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:194.2,195.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.53,197.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.2,198.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.31,200.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:201.2,202.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.36,203.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.34,205.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:207.2,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:211.37,213.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:213.32,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.2,216.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.32,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.2,220.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.29,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:227.2,227.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:230.34,231.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.22,233.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:234.2,234.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:237.37,238.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.22,240.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:241.2,241.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:246.76,248.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:248.80,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.2,252.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.71,254.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:256.2,257.41 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.41,259.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:260.2,267.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:271.86,272.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.24,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.2,275.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.34,277.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:278.2,286.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:289.95,291.76 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:291.76,293.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:295.2,296.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.21,298.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:299.2,301.36 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:301.36,303.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:304.2,306.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:306.39,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:310.2,314.26 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:314.26,320.22 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:320.22,323.4 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:324.3,326.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:326.102,328.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:329.3,336.40 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:336.40,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:339.3,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:341.19,343.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:344.3,345.33 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:348.2,349.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.15,351.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:352.2,367.13 13 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:367.13,370.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:371.2,372.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:376.62,377.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.39,379.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:380.2,382.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:382.16,384.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:385.2,386.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:389.35,390.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.41,392.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:393.2,393.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:397.48,398.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.27,400.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:400.39,403.45 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:403.45,405.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.4,406.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.46,408.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.4,409.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.46,411.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:412.4,412.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:415.2,415.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:419.63,420.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.13,422.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.2,423.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.23,425.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:427.2,428.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.28,429.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.42,431.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.3,433.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.38,434.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.2,437.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.17,439.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:441.2,443.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:443.38,445.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:445.32,446.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:447.13,449.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:450.13,451.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.18,453.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.5,454.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.31,456.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.2,461.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.15,463.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:464.2,464.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:468.65,469.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.27,476.71 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:476.71,478.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:478.21,480.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:481.9,483.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:486.2,487.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.16,489.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:490.2,490.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:494.43,498.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:498.39,500.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:501.2,503.34 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:503.34,505.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:505.63,507.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.2,510.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.42,512.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:513.2,513.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:516.37,517.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.16,519.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:520.2,521.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.32,523.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:524.2,524.18 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:15.48,18.55 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:18.55,25.19 5 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:25.19,27.4 1 0
@@ -4973,58 +5475,62 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:216.50,218.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:219.2,219.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.193,225.9 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:225.9,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.2,233.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:233.32,235.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.2,237.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.24,239.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,246.30 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:246.30,248.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.2,250.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.40,252.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.20,254.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.4,257.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.54,259.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.21,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.4,263.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.40,267.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.8,269.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.23,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.2,272.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.55,279.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.12,281.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.2,282.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.6,286.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.20,288.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.3,290.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.17,292.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,295.10 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:296.21,298.10 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.18,299.18 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.60,309.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:309.19,311.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.2,313.6 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.6,317.23 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.23,321.11 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:322.22,324.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:325.19,327.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:331.3,333.14 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:338.177,344.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.33,346.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.2,347.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.18,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:350.2,350.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.101,356.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.57,357.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.78,359.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.2,361.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.19,363.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.2,364.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.19,366.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.56 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.56,368.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.57,370.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:372.2,372.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.5,237.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.32,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,241.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.24,243.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.2,250.30 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.30,252.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.2,254.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.40,256.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:256.20,258.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.21,260.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.4,261.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.54,263.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.21,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.4,267.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.40,271.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.8,273.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.23,275.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.2,276.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.55,283.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.12,285.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.2,286.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.6,290.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.20,292.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,294.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.17,296.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.3,299.10 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:300.21,302.10 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.18,303.18 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:311.60,313.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.19,315.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:316.2,317.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.6,321.23 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.23,325.11 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.22,328.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:329.19,331.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:335.3,337.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.177,354.17 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.17,357.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.5,358.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.71,360.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.5,363.55 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.55,365.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:365.43,367.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.9,368.79 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:370.5,370.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:374.101,376.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:376.57,377.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:377.78,379.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.2,381.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.19,383.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.2,384.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.19,386.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.2,387.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.56,388.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:388.57,390.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:392.2,392.16 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.45,23.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,26.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.47,31.55 2 0
@@ -5140,241 +5646,243 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:16.2,27.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:30.38,32.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:34.46,36.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:38.31,41.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:21.55,23.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.32,25.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:26.2,26.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:30.41,35.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:37.41,42.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.32,47.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.23,49.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.2,51.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.24,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.2,57.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.15,59.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.2,63.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.51,68.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.41,70.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:71.2,73.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.110,77.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.14,81.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:82.2,84.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:87.118,88.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.14,91.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.16,94.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.35,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.36,99.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.4,102.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.59,104.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.4,105.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:108.2,111.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:114.51,115.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.23,117.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.13,120.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:120.100,122.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:124.3,124.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.2,126.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:129.32,131.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:134.44,135.50 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.50,137.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.2,138.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:143.20,144.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.40,146.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.3,148.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.12,152.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.2,153.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:156.52,157.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.38,159.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.2,161.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.27,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.34,163.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.36,166.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:168.3,168.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:170.2,170.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.64,180.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.22,183.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.12,185.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:186.3,188.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.74,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.12,196.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:197.3,198.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.48,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:202.3,203.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.18,205.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.3,208.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:210.2,210.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:216.41,220.31 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.31,222.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.2,223.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.29,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.2,226.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.31,228.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.32,230.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.2,232.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.83,239.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:239.102,241.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:241.36,243.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.136,245.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.4,248.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.34,250.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.2,254.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.65,255.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.53,257.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:257.37,259.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.137,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:262.5,264.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.35,266.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:270.2,270.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:274.80,275.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.22,277.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:278.2,280.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.40,282.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.2,283.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.34,284.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.31,285.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.3,288.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.16,289.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.3,291.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.32,293.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.2,295.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:298.36,300.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.39,305.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.13,307.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.2,310.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.66,312.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:313.2,314.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.54,316.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,317.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.51,319.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:320.2,322.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:322.69,325.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:326.2,326.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:330.43,332.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.13,334.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:335.2,336.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.11,338.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.2,340.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.14,342.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:343.2,344.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:348.56,350.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.89,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:353.2,353.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.52,358.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.32,360.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.28,362.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.34,365.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.42,368.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.3,369.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.2,374.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.27,376.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,377.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.36,379.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.2,383.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.49,385.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:385.24,387.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:390.2,391.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.25,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,394.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.33,396.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.2,398.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:402.67,404.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.35,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,408.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.31,410.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.2,411.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.69,415.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.32,417.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.2,418.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:421.45,423.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.22,427.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.12,429.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:430.3,432.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.32,434.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:435.3,436.46 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.46,438.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.3,442.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.12,444.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:445.3,446.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.49,448.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:450.3,450.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.2,452.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.67,458.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.28,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.12,461.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.3,465.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.12,466.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.3,468.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.43,470.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.3,472.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.34,474.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:476.3,477.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.48,479.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.3,481.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.25,483.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:485.3,486.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.50,488.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.3,490.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:492.2,492.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:86.90,89.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:89.20,91.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:92.2,94.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:94.23,96.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.2,98.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:98.22,100.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:101.2,102.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:102.27,104.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:105.2,111.38 6 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:111.38,114.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:114.8,116.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.2,120.35 4 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:120.35,122.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.2,123.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.35,125.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.2,127.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.46,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.8,131.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,132.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.47,134.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:134.8,136.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,137.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.46,139.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.8,141.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.2,142.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.33,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:144.8,146.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.2,149.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.24,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.2,152.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.25,154.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.2,155.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.24,157.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.2,158.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.29,160.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:162.2,164.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:164.47,164.72 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:166.47,166.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:175.2,175.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:178.30,179.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:179.6,181.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:181.20,183.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.3,184.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.17,186.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:187.3,188.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:188.52,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.3,192.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.23,194.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:196.3,197.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:197.15,199.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:15.48,18.6 3 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:18.6,20.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:20.17,22.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.55,22.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.32,24.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:25.2,25.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.41,41.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.32,46.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.23,48.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.2,50.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.24,52.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:53.2,56.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:56.15,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.2,62.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:66.51,67.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.41,69.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:70.2,72.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.62,77.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.16,79.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.5,81.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:81.28,84.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.5,85.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.118,89.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.14,92.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.16,95.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:95.35,97.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.4,98.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.36,100.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:101.4,103.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:103.59,105.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.4,106.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:109.2,112.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.51,116.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.23,118.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.2,119.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.13,121.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.100,123.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:125.3,125.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.2,127.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.32,132.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.44,136.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.50,138.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:139.2,139.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.40,144.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.20,145.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.40,147.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.3,149.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.2,151.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.12,153.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.2,154.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.52,158.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.38,160.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.2,162.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.27,163.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:163.34,164.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.3,166.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.36,167.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:169.3,169.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.2,171.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:179.64,181.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:181.22,184.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.12,186.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:187.3,189.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.74,191.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.3,195.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.12,197.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.48,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.3,204.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.18,206.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:208.3,209.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:211.2,211.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.41,221.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.31,223.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.2,227.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.31,229.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.32,231.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.2,233.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.83,240.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.102,242.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:242.36,244.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.136,246.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:247.4,249.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:249.34,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.2,255.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.65,256.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.53,258.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:258.37,260.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:260.137,262.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.5,265.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:265.35,267.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.2,271.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.80,276.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.22,278.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:279.2,281.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.40,283.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.34,285.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.31,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,289.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:289.16,290.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.3,292.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.32,294.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:296.2,296.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.36,301.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:304.39,306.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.13,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.66,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,315.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.54,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.2,318.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.51,320.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.2,323.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.69,326.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.2,327.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:331.43,333.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.13,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.11,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:341.14,343.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:344.2,345.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.56,351.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:351.89,353.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.2,354.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.52,359.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:359.32,361.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:361.28,363.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.3,364.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.34,366.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.3,367.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.42,369.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:370.3,370.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.2,375.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:375.27,377.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.2,378.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.36,380.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:381.2,384.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:384.49,386.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.24,388.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,392.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:392.25,394.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.2,395.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.33,397.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:398.2,399.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.67,405.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.35,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,409.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:409.31,411.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.2,412.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.69,416.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:416.32,418.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.2,419.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.45,424.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.22,428.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,433.32 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.32,435.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,437.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:437.46,439.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.3,443.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.12,445.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.3,447.49 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.49,449.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.3,451.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:453.2,453.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:456.67,459.28 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:459.28,461.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:461.12,462.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:464.3,466.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:466.12,467.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.3,469.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.43,471.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.3,473.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.34,475.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.3,478.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.48,480.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.3,482.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.25,484.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.3,487.50 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:487.50,489.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:490.3,491.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:493.2,493.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.90,129.20 3 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.20,131.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,134.23 3 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.23,136.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,138.22 2 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:138.22,140.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.2,142.27 2 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:142.27,144.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:145.2,151.38 6 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:151.38,154.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.8,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:157.2,160.35 4 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:160.35,162.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.2,163.35 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.35,165.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.2,167.46 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.46,169.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:169.8,171.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.2,172.47 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.47,174.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:174.8,176.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.2,177.46 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.46,179.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:179.8,181.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.5,182.36 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.36,184.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:184.11,186.6 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:189.5,207.24 17 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:207.24,209.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.2,210.25 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.25,212.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.2,213.24 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.24,215.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.2,216.29 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.29,218.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:220.2,222.47 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:222.47,222.72 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:224.47,224.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:233.2,233.10 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:236.30,237.6 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:237.6,239.20 2 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:239.20,241.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.3,242.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.17,244.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:245.3,246.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:246.52,248.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.3,250.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.23,252.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:254.3,255.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:255.15,257.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/transport.go:15.48,18.6 3 1
+codeberg.org/snonux/hexai/internal/lsp/transport.go:18.6,20.17 2 1
+codeberg.org/snonux/hexai/internal/lsp/transport.go:20.17,22.4 1 1
codeberg.org/snonux/hexai/internal/lsp/transport.go:23.3,23.17 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:23.17,24.9 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:26.3,27.22 2 0
@@ -5407,190 +5915,311 @@ codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:13.13,17.18 4 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.2,22.79 1 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.79,24.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:63.29,86.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:90.35,92.19 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:92.19,94.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.2,97.16 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:97.16,100.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:100.8,101.85 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:101.85,103.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.2,109.50 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.50,111.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:112.2,112.12 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.66,118.16 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:118.16,119.43 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.43,121.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:122.3,122.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.2,128.45 4 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:128.45,129.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:129.20,131.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:132.3,132.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.19,136.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.22 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.37,143.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,147.25 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:147.25,149.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.2,150.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.56,152.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.2,153.34 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.34,155.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.2,156.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.32,158.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.32,161.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.36,164.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.2,165.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.38,167.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.2,168.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.36,170.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.2,171.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.36,173.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.2,174.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.38,176.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.2,177.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.55,179.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.2,180.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.56,182.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.2,183.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.55,185.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.2,186.33 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.33,188.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.2,189.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.53,191.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.47,196.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:196.58,198.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.2,199.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.56,201.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.2,202.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.36,204.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.2,205.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.58,207.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.2,208.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.56,210.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.2,211.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.36,213.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.2,214.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.59,216.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.2,217.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.57,219.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.2,220.37 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.37,222.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:225.38,227.72 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.72,229.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.8,231.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:231.17,233.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:234.3,234.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:236.2,236.24 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:243.43,248.34 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:248.34,248.76 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.2,249.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.41,251.14 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:251.14,253.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:254.3,255.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:255.17,256.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.21,258.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.4,259.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:261.3,261.17 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.2,263.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.51,265.14 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.14,267.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:268.3,269.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:269.17,270.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.21,272.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:273.4,273.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:275.3,275.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.2,278.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.47,281.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.2,282.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.48,285.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.2,286.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.2,290.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.55,293.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.2,294.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.54,297.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.2,298.61 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.61,301.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.2,302.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.59,305.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.2,306.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.59,309.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.2,310.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.60,313.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.2,314.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,317.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:317.27,318.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:318.42,320.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:322.3,322.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.2,324.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.47,327.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.2,328.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.48,331.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.2,332.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.47,335.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.2,336.49 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.49,339.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:339.27,340.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:340.42,342.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:344.3,344.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.2,346.44 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.44,349.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.2,352.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.51,355.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.2,356.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.48,359.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.2,360.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.60,363.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.2,365.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.51,368.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.2,369.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.48,372.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.2,373.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.60,376.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.2,378.52 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.52,381.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.2,382.49 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.49,385.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.2,386.61 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.61,389.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.2,391.10 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.10,393.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:394.2,394.13 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.16 4 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.16,30.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.124,39.16 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.16,42.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.2,45.74 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:45.74,48.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:49.2,49.12 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:53.64,55.82 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:55.82,58.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:59.2,60.9 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:61.40,62.59 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:63.23,64.24 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:65.21,66.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:67.10,68.91 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:73.65,88.36 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:88.36,90.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:92.2,93.36 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:93.36,95.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:96.2,96.48 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:100.48,103.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.40,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:106.2,109.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:113.125,116.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:116.40,118.56 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:118.56,121.4 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:121.18,123.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.3,124.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:125.8,127.17 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.17,129.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:130.3,131.26 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.2,136.12 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:140.59,142.2 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.29,136.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:140.35,142.19 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.19,144.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,147.16 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:147.16,150.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:150.8,151.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:151.85,153.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.50,161.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.12 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:278.35,282.80 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:282.80,291.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.5,294.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.41,297.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.5,300.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.47,307.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.5,310.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.47,313.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.39,319.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.85,325.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.5,328.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.50,331.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.5,334.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.71,341.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.5,344.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.74,351.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.5,354.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.71,361.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.5,365.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.62,366.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:366.73,368.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.9,369.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.72,371.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.9,372.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.72,374.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.9,375.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.71,377.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.9,378.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.70,380.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.9,381.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.71,383.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.5,386.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.56,388.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.5,390.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.62,391.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:391.73,393.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.9,394.77 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.77,396.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.9,397.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.74,399.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.9,400.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.71,402.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.9,403.75 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.75,405.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.9,406.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.72,408.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.9,409.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.72,411.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.9,412.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.70,414.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.5,417.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.48,418.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:418.66,420.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.9,421.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.66,423.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.5,426.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.70,428.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:430.5,430.15 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:433.66,435.19 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:435.19,436.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:436.49,438.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:439.9,439.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:442.5,447.25 5 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:447.25,448.26 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:448.26,450.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:451.9,451.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:455.5,464.24 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:464.24,465.222 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:465.222,466.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.9,468.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.47,470.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.5,473.22 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.22,475.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:479.5,481.56 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:481.56,482.65 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:482.65,483.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:484.24,485.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:486.22,487.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:488.26,489.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.5,493.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.53,494.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:494.58,495.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:496.24,497.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:498.22,499.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:500.26,501.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:505.5,505.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:508.37,512.2 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:515.39,516.25 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:516.25,518.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.2,519.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.56,521.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.2,522.34 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.34,524.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.2,525.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.32,527.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.2,528.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.32,530.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.2,531.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.36,533.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.2,534.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.38,536.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.2,537.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.36,539.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.2,540.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.36,542.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.2,543.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.38,545.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.2,546.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.55,548.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.2,549.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.56,551.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.2,552.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.55,554.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.2,555.33 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.33,557.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.2,558.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.53,560.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:564.40,566.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:566.69,568.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.5,569.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.68,571.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.5,572.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.68,574.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.5,575.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.67,577.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.5,578.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.66,580.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.5,581.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.67,583.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.5,585.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.62,587.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.5,589.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.56,591.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.5,593.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.69,595.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.5,596.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.73,598.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.5,599.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.70,601.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.5,602.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.67,604.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.5,605.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.71,607.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.5,608.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.68,610.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.5,611.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.68,613.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.5,614.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.66,616.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.5,618.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.62,620.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.5,621.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.62,623.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:627.47,628.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:628.58,630.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.2,631.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.56,633.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.2,634.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.36,636.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.2,637.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.58,639.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.2,640.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.56,642.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.2,643.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.36,645.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.2,646.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.59,648.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.2,649.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.57,651.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.2,652.37 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.37,654.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:657.38,659.72 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:659.72,661.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:661.8,663.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:663.17,665.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:666.3,666.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:668.2,668.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:675.43,680.34 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:680.34,680.76 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.2,681.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.41,683.14 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:683.14,685.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:686.3,687.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:687.17,688.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:688.21,690.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:691.4,691.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:693.3,693.17 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.2,695.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.51,697.14 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:697.14,699.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:700.3,701.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:701.17,702.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:702.21,704.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:705.4,705.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:707.3,707.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.2,710.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.47,713.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.2,714.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.48,717.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.2,718.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.57,721.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.2,722.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.55,725.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.2,726.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.54,729.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.2,730.61 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.61,733.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.2,734.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.59,737.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.2,738.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.59,741.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.2,742.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.60,745.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.2,746.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.54,749.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:749.27,750.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:750.42,752.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:754.3,754.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.2,756.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.47,759.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.2,760.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.48,763.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.2,764.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.47,767.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.2,768.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.49,771.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:771.27,772.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:772.42,774.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:776.3,776.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.2,778.44 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.44,781.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.2,784.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.51,787.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.2,788.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.48,791.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.2,792.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.60,795.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.2,797.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.51,800.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.2,801.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.48,804.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.2,805.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.60,808.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.2,810.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.52,813.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.2,814.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.49,817.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.2,818.61 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.61,821.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.2,823.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.10,825.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:826.2,826.13 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.5,33.20 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:33.20,36.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.5,39.77 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.77,42.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.5,43.15 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:48.124,50.16 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:50.16,53.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:54.2,56.74 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:56.74,59.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:60.2,60.12 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:64.64,66.82 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:66.82,69.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:70.2,71.9 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:72.40,73.59 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:74.23,75.24 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:76.21,77.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:78.10,79.91 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:84.65,99.36 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:99.36,101.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.2,104.36 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:104.36,106.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:107.2,107.48 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:111.48,114.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:114.40,116.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:117.2,120.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.77,127.43 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.43,128.64 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:128.64,130.10 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:132.5,135.6 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:139.125,142.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:142.40,144.56 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:144.56,147.4 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:147.18,149.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:150.3,150.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:151.8,153.17 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:153.17,155.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:156.3,157.26 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:159.2,162.12 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:166.59,168.2 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:29.17,31.4 1 0
@@ -5614,7 +6243,7 @@ codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,144.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 8
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 8
@@ -6105,153 +6734,153 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:86.45,88.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:89.2,97.58 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:97.58,99.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:100.2,100.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.17,108.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.20,108.72 7 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:108.72,109.66 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:109.66,113.5 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:114.9,116.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.21,121.43 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.43,122.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:122.24,124.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:124.10,126.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:128.3,134.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.72,135.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:135.66,139.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:140.9,142.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:143.18,150.72 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.72,151.66 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:151.66,155.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:156.9,158.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.17,160.92 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:160.92,168.4 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:170.2,170.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:173.55,175.56 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.56,176.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:176.23,178.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:179.3,179.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.2,181.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.49,184.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:185.2,185.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.85,192.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:192.22,194.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.2,196.53 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:196.53,198.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.2,199.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.31,201.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.2,203.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.36,204.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:204.34,206.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:208.2,208.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:212.37,214.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:214.32,216.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.2,217.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.32,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.2,221.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.29,223.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.2,225.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.29,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:228.2,228.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.34,232.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:232.22,234.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:235.2,235.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.37,239.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:239.22,241.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:242.2,242.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:247.76,249.80 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:249.80,251.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.2,253.71 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.71,255.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.2,258.41 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:258.41,260.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:261.2,268.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.86,273.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:273.24,275.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.2,276.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.34,278.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:279.2,287.12 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:290.95,292.76 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:292.76,294.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.2,297.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:297.21,299.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:300.2,302.36 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:302.36,304.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:305.2,307.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:307.39,309.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:311.2,315.26 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:315.26,321.22 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:321.22,324.4 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:325.3,327.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:327.102,329.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:330.3,337.40 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:337.40,339.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:340.3,342.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:342.19,344.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:345.3,346.33 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.2,350.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:350.15,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:353.2,368.13 13 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:368.13,371.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:372.2,373.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.62,378.39 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:378.39,380.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:381.2,383.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:383.16,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:386.2,387.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.35,391.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:391.41,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:394.2,394.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.48,399.27 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:399.27,401.39 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:401.39,404.45 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:404.45,406.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.4,407.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.46,409.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.4,410.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.46,412.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:413.4,413.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:416.2,416.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.63,421.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:421.13,423.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.2,424.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.23,426.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.2,429.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.28,430.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:430.42,432.9 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.3,434.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.38,435.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.2,438.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.17,440.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:442.2,444.38 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:444.38,446.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:446.32,447.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:448.13,450.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.13,452.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:452.18,454.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.5,455.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.31,457.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.2,462.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.15,464.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:465.2,465.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.65,470.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:470.24,477.71 7 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:477.71,479.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:479.21,481.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:482.9,484.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.2,488.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:488.16,490.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:491.2,491.115 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:495.43,499.39 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:499.39,501.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:502.2,504.34 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:504.34,506.63 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:506.63,508.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.2,511.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.42,513.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:514.2,514.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.37,518.16 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:518.16,520.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.2,522.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:522.32,524.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:525.2,525.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.24,120.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:120.49,121.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.33,123.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:123.19,125.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:127.9,133.78 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:133.78,134.75 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.75,138.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:139.15,141.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:142.21,149.72 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:149.72,150.66 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.66,154.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:155.9,157.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:158.17,159.92 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.92,167.4 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:169.2,169.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:172.55,174.56 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:174.56,175.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.23,177.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:178.3,178.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.2,180.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.49,183.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:184.2,184.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:190.85,191.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.22,193.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:194.2,195.53 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.53,197.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.2,198.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.31,200.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:201.2,202.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.36,203.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.34,205.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:207.2,207.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:211.37,213.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:213.32,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.2,216.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.32,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.2,220.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.29,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:227.2,227.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:230.34,231.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.22,233.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:234.2,234.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:237.37,238.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.22,240.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:241.2,241.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:246.76,248.80 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:248.80,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.2,252.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.71,254.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:256.2,257.41 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.41,259.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:260.2,267.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:271.86,272.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.24,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.2,275.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.34,277.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:278.2,286.12 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:289.95,291.76 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:291.76,293.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:295.2,296.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.21,298.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:299.2,301.36 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:301.36,303.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:304.2,306.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:306.39,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:310.2,314.26 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:314.26,320.22 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:320.22,323.4 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:324.3,326.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:326.102,328.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:329.3,336.40 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:336.40,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:339.3,341.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:341.19,343.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:344.3,345.33 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:348.2,349.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.15,351.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:352.2,367.13 13 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:367.13,370.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:371.2,372.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:376.62,377.39 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.39,379.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:380.2,382.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:382.16,384.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:385.2,386.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:389.35,390.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.41,392.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:393.2,393.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:397.48,398.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.27,400.39 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:400.39,403.45 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:403.45,405.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.4,406.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.46,408.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.4,409.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.46,411.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:412.4,412.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:415.2,415.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:419.63,420.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.13,422.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.2,423.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.23,425.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:427.2,428.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.28,429.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.42,431.9 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.3,433.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.38,434.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.2,437.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.17,439.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:441.2,443.38 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:443.38,445.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:445.32,446.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:447.13,449.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:450.13,451.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.18,453.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.5,454.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.31,456.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.2,461.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.15,463.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:464.2,464.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:468.65,469.27 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.27,476.71 7 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:476.71,478.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:478.21,480.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:481.9,483.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:486.2,487.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.16,489.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:490.2,490.115 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:494.43,498.39 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:498.39,500.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:501.2,503.34 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:503.34,505.63 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:505.63,507.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.2,510.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.42,512.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:513.2,513.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:516.37,517.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.16,519.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:520.2,521.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.32,523.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:524.2,524.18 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:15.48,18.55 3 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:18.55,25.19 5 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:25.19,27.4 1 0
@@ -6321,58 +6950,62 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:216.50,218.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:219.2,219.23 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.193,225.9 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:225.9,227.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.2,233.32 6 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:233.32,235.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.2,237.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.24,239.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,246.30 5 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:246.30,248.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.2,250.40 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.40,252.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.20,254.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.4,257.54 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.54,259.21 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.21,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.4,263.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.40,267.5 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.8,269.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.23,271.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.2,272.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.55,279.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.12,281.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.2,282.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.6,286.20 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.20,288.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.3,290.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.17,292.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,295.10 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:296.21,298.10 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.18,299.18 0 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.60,309.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:309.19,311.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.2,313.6 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.6,317.23 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.23,321.11 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:322.22,324.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:325.19,327.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:331.3,333.14 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:338.177,344.33 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.33,346.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.2,347.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.18,349.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:350.2,350.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.101,356.57 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.57,357.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.78,359.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.2,361.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.19,363.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.2,364.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.19,366.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.56 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.56,368.57 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.57,370.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:372.2,372.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.5,237.32 6 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.32,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,241.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.24,243.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.2,250.30 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.30,252.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.2,254.40 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.40,256.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:256.20,258.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.21,260.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.4,261.54 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.54,263.21 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.21,265.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.4,267.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.40,271.5 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.8,273.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.23,275.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.2,276.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.55,283.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.12,285.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.2,286.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.6,290.20 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.20,292.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,294.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.17,296.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.3,299.10 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:300.21,302.10 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.18,303.18 0 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:311.60,313.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.19,315.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:316.2,317.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.6,321.23 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.23,325.11 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.22,328.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:329.19,331.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:335.3,337.14 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.177,354.17 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.17,357.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.5,358.71 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.71,360.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.5,363.55 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.55,365.43 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:365.43,367.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.9,368.79 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:370.5,370.20 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:374.101,376.57 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:376.57,377.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:377.78,379.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.2,381.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.19,383.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.2,384.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.19,386.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.2,387.56 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.56,388.57 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:388.57,390.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:392.2,392.16 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.45,23.55 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,26.3 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.47,31.55 2 0
@@ -6488,238 +7121,240 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:16.2,27.27 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:30.38,32.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:34.46,36.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:38.31,41.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:21.55,23.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.32,25.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:26.2,26.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:30.41,35.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:37.41,42.2 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.32,47.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.23,49.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.2,51.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.24,53.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.2,57.15 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.15,59.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.2,63.211 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.51,68.41 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.41,70.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:71.2,73.71 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.110,77.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.14,81.3 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:82.2,84.18 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:87.118,88.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.14,91.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.16,94.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.35,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.36,99.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.4,102.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.59,104.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.4,105.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:108.2,111.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:114.51,115.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.23,117.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.13,120.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:120.100,122.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:124.3,124.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.2,126.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:129.32,131.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:134.44,135.50 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.50,137.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.2,138.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:143.20,144.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.40,146.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.3,148.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.12,152.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.2,153.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:156.52,157.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.38,159.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.2,161.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.27,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.34,163.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.36,166.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:168.3,168.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:170.2,170.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.64,180.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.22,183.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.12,185.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:186.3,188.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.74,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.12,196.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:197.3,198.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.48,200.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:202.3,203.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.18,205.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.3,208.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:210.2,210.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:216.41,220.31 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.31,222.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.2,223.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.29,225.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.2,226.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.31,228.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.32,230.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.2,232.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.83,239.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:239.102,241.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:241.36,243.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.136,245.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.4,248.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.34,250.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.2,254.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.65,255.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.53,257.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:257.37,259.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.137,261.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:262.5,264.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.35,266.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:270.2,270.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:274.80,275.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.22,277.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:278.2,280.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.40,282.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.2,283.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.34,284.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.31,285.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.3,288.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.16,289.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.3,291.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.32,293.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.2,295.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:298.36,300.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.39,305.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.13,307.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.2,310.66 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.66,312.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:313.2,314.54 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.54,316.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,317.51 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.51,319.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:320.2,322.69 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:322.69,325.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:326.2,326.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:330.43,332.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.13,334.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:335.2,336.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.11,338.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.2,340.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.14,342.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:343.2,344.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:348.56,350.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.89,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:353.2,353.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.52,358.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.32,360.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.28,362.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.34,365.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.42,368.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.3,369.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.2,374.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.27,376.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,377.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.36,379.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.2,383.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.49,385.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:385.24,387.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:390.2,391.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.25,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,394.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.33,396.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.2,398.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:402.67,404.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.35,406.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,408.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.31,410.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.2,411.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.69,415.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.32,417.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.2,418.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:421.45,423.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.22,427.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.12,429.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:430.3,432.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.32,434.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:435.3,436.46 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.46,438.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.3,442.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.12,444.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:445.3,446.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.49,448.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:450.3,450.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.2,452.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.67,458.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.28,460.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.12,461.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.3,465.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.12,466.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.3,468.43 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.43,470.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.3,472.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.34,474.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:476.3,477.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.48,479.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.3,481.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.25,483.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:485.3,486.50 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.50,488.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.3,490.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:492.2,492.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:86.90,89.20 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:89.20,91.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:92.2,94.23 3 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:94.23,96.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.2,98.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:98.22,100.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:101.2,102.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:102.27,104.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:105.2,111.38 6 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:111.38,114.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:114.8,116.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.2,120.35 4 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:120.35,122.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.2,123.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.35,125.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.2,127.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.46,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.8,131.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,132.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.47,134.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:134.8,136.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,137.46 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.46,139.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.8,141.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.2,142.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.33,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:144.8,146.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.2,149.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.24,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.2,152.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.25,154.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.2,155.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.24,157.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.2,158.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.29,160.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:162.2,164.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:164.47,164.72 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:166.47,166.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:175.2,175.10 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:178.30,179.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:179.6,181.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:181.20,183.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.3,184.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.17,186.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:187.3,188.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:188.52,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.3,192.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.23,194.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:196.3,197.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:197.15,199.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.55,22.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.32,24.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:25.2,25.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.41,41.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.32,46.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.23,48.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.2,50.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.24,52.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:53.2,56.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:56.15,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.2,62.211 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:66.51,67.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.41,69.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:70.2,72.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.62,77.16 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.16,79.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.5,81.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:81.28,84.6 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.5,85.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.118,89.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.14,92.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.16,95.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:95.35,97.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.4,98.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.36,100.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:101.4,103.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:103.59,105.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.4,106.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:109.2,112.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.51,116.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.23,118.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.2,119.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.13,121.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.100,123.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:125.3,125.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.2,127.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.32,132.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.44,136.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.50,138.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:139.2,139.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.40,144.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.20,145.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.40,147.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.3,149.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.2,151.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.12,153.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.2,154.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.52,158.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.38,160.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.2,162.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.27,163.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:163.34,164.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.3,166.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.36,167.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:169.3,169.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.2,171.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:179.64,181.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:181.22,184.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.12,186.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:187.3,189.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.74,191.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.3,195.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.12,197.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.48,201.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.3,204.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.18,206.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:208.3,209.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:211.2,211.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.41,221.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.31,223.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.2,224.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.29,226.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.2,227.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.31,229.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.32,231.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.2,233.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.83,240.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.102,242.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:242.36,244.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.136,246.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:247.4,249.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:249.34,251.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.2,255.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.65,256.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.53,258.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:258.37,260.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:260.137,262.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.5,265.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:265.35,267.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.2,271.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.80,276.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.22,278.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:279.2,281.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.40,283.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.34,285.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.31,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,289.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:289.16,290.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.3,292.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.32,294.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:296.2,296.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.36,301.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:304.39,306.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.13,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.66 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.66,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,315.54 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.54,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.2,318.51 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.51,320.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.2,323.69 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.69,326.3 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.2,327.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:331.43,333.13 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.13,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.11 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.11,339.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.14 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:341.14,343.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:344.2,345.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.56,351.89 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:351.89,353.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.2,354.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.52,359.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:359.32,361.28 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:361.28,363.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.3,364.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.34,366.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.3,367.42 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.42,369.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:370.3,370.49 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.2,375.27 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:375.27,377.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.2,378.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.36,380.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:381.2,384.49 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:384.49,386.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.24,388.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,392.25 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:392.25,394.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.2,395.33 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.33,397.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:398.2,399.19 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.67,405.35 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.35,407.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,409.31 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:409.31,411.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.2,412.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.69,416.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:416.32,418.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.2,419.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.45,424.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.22,428.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,433.32 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.32,435.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,437.46 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:437.46,439.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.3,443.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.12,445.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.3,447.49 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.49,449.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.3,451.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:453.2,453.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:456.67,459.28 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:459.28,461.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:461.12,462.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:464.3,466.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:466.12,467.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.3,469.43 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.43,471.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.3,473.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.34,475.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.3,478.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.48,480.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.3,482.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.25,484.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.3,487.50 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:487.50,489.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:490.3,491.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:493.2,493.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.90,129.20 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.20,131.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,134.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.23,136.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,138.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:138.22,140.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.2,142.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:142.27,144.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:145.2,151.38 6 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:151.38,154.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.8,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:157.2,160.35 4 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:160.35,162.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.2,163.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.35,165.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.2,167.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.46,169.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:169.8,171.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.2,172.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.47,174.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:174.8,176.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.2,177.46 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.46,179.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:179.8,181.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.5,182.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.36,184.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:184.11,186.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:189.5,207.24 17 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:207.24,209.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.2,210.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.25,212.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.2,213.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.24,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.2,216.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.29,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:220.2,222.47 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:222.47,222.72 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:224.47,224.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:233.2,233.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:236.30,237.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:237.6,239.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:239.20,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.3,242.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.17,244.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:245.3,246.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:246.52,248.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.3,250.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.23,252.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:254.3,255.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:255.15,257.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:15.48,18.6 3 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:18.6,20.17 2 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:20.17,22.4 1 0
@@ -6760,190 +7395,311 @@ codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:13.13,17.18 4 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:17.18,20.3 2 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.2,22.79 1 0
codeberg.org/snonux/hexai/cmd/hexai-lsp/main.go:22.79,24.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:63.29,86.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:90.35,92.19 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:92.19,94.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:96.2,97.16 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:97.16,100.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:100.8,101.85 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:101.85,103.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.2,109.50 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:109.50,111.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:112.2,112.12 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:116.66,118.16 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:118.16,119.43 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:119.43,121.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:122.3,122.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:124.2,128.45 4 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:128.45,129.20 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:129.20,131.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:132.3,132.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.2,134.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:134.19,136.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:137.2,137.22 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:140.37,143.2 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:146.39,147.25 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:147.25,149.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.2,150.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:150.56,152.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.2,153.34 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:153.34,155.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.2,156.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:156.32,158.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.32 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:159.32,161.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:162.36,164.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.2,165.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:165.38,167.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.2,168.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:168.36,170.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.2,171.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:171.36,173.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.2,174.38 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:174.38,176.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.2,177.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:177.55,179.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.2,180.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:180.56,182.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.2,183.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:183.55,185.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.2,186.33 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:186.33,188.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.2,189.53 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:189.53,191.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:195.47,196.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:196.58,198.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.2,199.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:199.56,201.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.2,202.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:202.36,204.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.2,205.58 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:205.58,207.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.2,208.56 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:208.56,210.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.2,211.36 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:211.36,213.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.2,214.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:214.59,216.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.2,217.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:217.57,219.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.2,220.37 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:220.37,222.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:225.38,227.72 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:227.72,229.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:229.8,231.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:231.17,233.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:234.3,234.70 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:236.2,236.24 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:243.43,248.34 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:248.34,248.76 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.2,249.41 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:249.41,251.14 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:251.14,253.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:254.3,255.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:255.17,256.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:256.21,258.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:259.4,259.19 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:261.3,261.17 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.2,263.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:263.51,265.14 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:265.14,267.4 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:268.3,269.17 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:269.17,270.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:270.21,272.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:273.4,273.21 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:275.3,275.18 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.2,278.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:278.47,281.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.2,282.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:282.48,285.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.2,286.57 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:286.57,289.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.2,290.55 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:290.55,293.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.2,294.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:294.54,297.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.2,298.61 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:298.61,301.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.2,302.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:302.59,305.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.2,306.59 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:306.59,309.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.2,310.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:310.60,313.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.2,314.54 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:314.54,317.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:317.27,318.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:318.42,320.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:322.3,322.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.2,324.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:324.47,327.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.2,328.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:328.48,331.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.2,332.47 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:332.47,335.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.2,336.49 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:336.49,339.27 3 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:339.27,340.42 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:340.42,342.5 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:344.3,344.13 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.2,346.44 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:346.44,349.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.2,352.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:352.51,355.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.2,356.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:356.48,359.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.2,360.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:360.60,363.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.2,365.51 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:365.51,368.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.2,369.48 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:369.48,372.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.2,373.60 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:373.60,376.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.2,378.52 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:378.52,381.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.2,382.49 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:382.49,385.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.2,386.61 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:386.61,389.3 2 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.2,391.10 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:391.10,393.3 1 0
-codeberg.org/snonux/hexai/internal/appconfig/config.go:394.2,394.13 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.16 4 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.16,30.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.2,32.64 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.124,39.16 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.16,42.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.2,45.74 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:45.74,48.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:49.2,49.12 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:53.64,55.82 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:55.82,58.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:59.2,60.9 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:61.40,62.59 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:63.23,64.24 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:65.21,66.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:67.10,68.91 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:73.65,88.36 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:88.36,90.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:92.2,93.36 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:93.36,95.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:96.2,96.48 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:100.48,103.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.40,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:106.2,109.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:113.125,116.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:116.40,118.56 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:118.56,121.4 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:121.18,123.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.3,124.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:125.8,127.17 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.17,129.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:130.3,131.26 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.2,136.12 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:140.59,142.2 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:89.29,136.2 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:140.35,142.19 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:142.19,144.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:146.2,147.16 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:147.16,150.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:150.8,151.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:151.85,153.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.2,159.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:159.50,161.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:162.2,162.12 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:278.35,282.80 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:282.80,291.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.5,294.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:294.41,297.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.5,300.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:300.47,307.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.5,310.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:310.47,313.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.5,316.39 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:316.39,319.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.5,322.85 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:322.85,325.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.5,328.50 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:328.50,331.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.5,334.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:334.71,341.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.5,344.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:344.74,351.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.5,354.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:354.71,361.6 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.5,365.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:365.62,366.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:366.73,368.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.9,369.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:369.72,371.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.9,372.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:372.72,374.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.9,375.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:375.71,377.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.9,378.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:378.70,380.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.9,381.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:381.71,383.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.5,386.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:386.56,388.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.5,390.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:390.62,391.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:391.73,393.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.9,394.77 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:394.77,396.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.9,397.74 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:397.74,399.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.9,400.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:400.71,402.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.9,403.75 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:403.75,405.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.9,406.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:406.72,408.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.9,409.72 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:409.72,411.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.9,412.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:412.70,414.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.5,417.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:417.48,418.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:418.66,420.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.9,421.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:421.66,423.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.5,426.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:426.70,428.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:430.5,430.15 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:433.66,435.19 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:435.19,436.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:436.49,438.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:439.9,439.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:442.5,447.25 5 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:447.25,448.26 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:448.26,450.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:451.9,451.30 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:455.5,464.24 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:464.24,465.222 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:465.222,466.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.9,468.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:468.47,470.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.5,473.22 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:473.22,475.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:479.5,481.56 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:481.56,482.65 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:482.65,483.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:484.24,485.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:486.22,487.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:488.26,489.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.5,493.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:493.53,494.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:494.58,495.35 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:496.24,497.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:498.22,499.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:500.26,501.46 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:505.5,505.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:508.37,512.2 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:515.39,516.25 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:516.25,518.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.2,519.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:519.56,521.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.2,522.34 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:522.34,524.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.2,525.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:525.32,527.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.2,528.32 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:528.32,530.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.2,531.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:531.36,533.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.2,534.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:534.38,536.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.2,537.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:537.36,539.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.2,540.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:540.36,542.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.2,543.38 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:543.38,545.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.2,546.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:546.55,548.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.2,549.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:549.56,551.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.2,552.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:552.55,554.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.2,555.33 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:555.33,557.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.2,558.53 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:558.53,560.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:564.40,566.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:566.69,568.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.5,569.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:569.68,571.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.5,572.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:572.68,574.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.5,575.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:575.67,577.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.5,578.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:578.66,580.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.5,581.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:581.67,583.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.5,585.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:585.62,587.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.5,589.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:589.56,591.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.5,593.69 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:593.69,595.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.5,596.73 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:596.73,598.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.5,599.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:599.70,601.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.5,602.67 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:602.67,604.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.5,605.71 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:605.71,607.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.5,608.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:608.68,610.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.5,611.68 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:611.68,613.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.5,614.66 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:614.66,616.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.5,618.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:618.62,620.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.5,621.62 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:621.62,623.6 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:627.47,628.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:628.58,630.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.2,631.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:631.56,633.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.2,634.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:634.36,636.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.2,637.58 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:637.58,639.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.2,640.56 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:640.56,642.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.2,643.36 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:643.36,645.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.2,646.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:646.59,648.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.2,649.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:649.57,651.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.2,652.37 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:652.37,654.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:657.38,659.72 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:659.72,661.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:661.8,663.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:663.17,665.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:666.3,666.70 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:668.2,668.24 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:675.43,680.34 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:680.34,680.76 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.2,681.41 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:681.41,683.14 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:683.14,685.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:686.3,687.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:687.17,688.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:688.21,690.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:691.4,691.19 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:693.3,693.17 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.2,695.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:695.51,697.14 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:697.14,699.4 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:700.3,701.17 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:701.17,702.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:702.21,704.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:705.4,705.21 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:707.3,707.18 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.2,710.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:710.47,713.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.2,714.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:714.48,717.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.2,718.57 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:718.57,721.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.2,722.55 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:722.55,725.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.2,726.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:726.54,729.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.2,730.61 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:730.61,733.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.2,734.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:734.59,737.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.2,738.59 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:738.59,741.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.2,742.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:742.60,745.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.2,746.54 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:746.54,749.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:749.27,750.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:750.42,752.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:754.3,754.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.2,756.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:756.47,759.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.2,760.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:760.48,763.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.2,764.47 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:764.47,767.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.2,768.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:768.49,771.27 3 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:771.27,772.42 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:772.42,774.5 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:776.3,776.13 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.2,778.44 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:778.44,781.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.2,784.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:784.51,787.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.2,788.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:788.48,791.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.2,792.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:792.60,795.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.2,797.51 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:797.51,800.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.2,801.48 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:801.48,804.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.2,805.60 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:805.60,808.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.2,810.52 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:810.52,813.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.2,814.49 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:814.49,817.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.2,818.61 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:818.61,821.3 2 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.2,823.10 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:823.10,825.3 1 0
+codeberg.org/snonux/hexai/internal/appconfig/config.go:826.2,826.13 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:22.95,27.19 4 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:27.19,30.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:32.5,33.20 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:33.20,36.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.5,39.77 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:39.77,42.6 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.5,43.15 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:48.124,50.16 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:50.16,53.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:54.2,56.74 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:56.74,59.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:60.2,60.12 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:64.64,66.82 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:66.82,69.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:70.2,71.9 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:72.40,73.59 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:74.23,75.24 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:76.21,77.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:78.10,79.91 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:84.65,99.36 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:99.36,101.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.2,104.36 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:104.36,106.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:107.2,107.48 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:111.48,114.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:114.40,116.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:117.2,120.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:124.77,127.43 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:127.43,128.64 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:128.64,130.10 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:132.5,135.6 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:139.125,142.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:142.40,144.56 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:144.56,147.4 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:147.18,149.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:150.3,150.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:151.8,153.17 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:153.17,155.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:156.3,157.26 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:159.2,162.12 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:166.59,168.2 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:25.85,27.38 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:27.38,29.17 2 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:29.17,31.4 1 0
@@ -6967,7 +7723,7 @@ codeberg.org/snonux/hexai/internal/hexailsp/run.go:99.57,100.20 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:100.20,102.3 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.2,103.97 1 0
codeberg.org/snonux/hexai/internal/hexailsp/run.go:103.97,105.3 1 0
-codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,126.2 1 0
+codeberg.org/snonux/hexai/internal/hexailsp/run.go:108.97,144.2 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:66.77,67.38 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:67.38,69.3 1 0
codeberg.org/snonux/hexai/internal/llm/copilot.go:70.2,70.36 1 0
@@ -7233,7 +7989,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 0
codeberg.org/snonux/hexai/internal/llm/provider.go:59.73,59.94 1 0
-codeberg.org/snonux/hexai/internal/llm/provider.go:60.47,60.73 1 19
+codeberg.org/snonux/hexai/internal/llm/provider.go:60.47,60.73 1 24
codeberg.org/snonux/hexai/internal/llm/provider.go:60.73,60.92 1 0
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
@@ -7261,9 +8017,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 36
-codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 4
-codeberg.org/snonux/hexai/internal/logging/logging.go:34.2,35.48 2 32
+codeberg.org/snonux/hexai/internal/logging/logging.go:30.47,31.16 1 38
+codeberg.org/snonux/hexai/internal/logging/logging.go:31.16,33.3 1 5
+codeberg.org/snonux/hexai/internal/logging/logging.go:34.2,35.48 2 33
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
@@ -7297,11 +8053,11 @@ 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 27
+codeberg.org/snonux/hexai/internal/lsp/document.go:15.48,19.2 3 32
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 46
-codeberg.org/snonux/hexai/internal/lsp/document.go:40.37,43.2 2 66
+codeberg.org/snonux/hexai/internal/lsp/document.go:33.52,37.2 3 51
+codeberg.org/snonux/hexai/internal/lsp/document.go:40.37,43.2 2 76
codeberg.org/snonux/hexai/internal/lsp/document.go:45.96,47.35 2 5
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 4
@@ -7340,12 +8096,12 @@ codeberg.org/snonux/hexai/internal/lsp/document.go:122.46,123.28 1 6
codeberg.org/snonux/hexai/internal/lsp/document.go:123.28,124.29 1 16
codeberg.org/snonux/hexai/internal/lsp/document.go:124.29,126.4 1 4
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 39
+codeberg.org/snonux/hexai/internal/lsp/document.go:131.31,133.18 2 40
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 38
-codeberg.org/snonux/hexai/internal/lsp/document.go:139.33,141.49 2 21
+codeberg.org/snonux/hexai/internal/lsp/document.go:136.2,136.10 1 39
+codeberg.org/snonux/hexai/internal/lsp/document.go:139.33,141.49 2 22
codeberg.org/snonux/hexai/internal/lsp/document.go:141.49,143.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/document.go:144.2,144.10 1 16
+codeberg.org/snonux/hexai/internal/lsp/document.go:144.2,144.10 1 17
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
@@ -7375,26 +8131,26 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:87.30,88.63 1 4
codeberg.org/snonux/hexai/internal/lsp/handlers.go:88.63,90.4 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers.go:92.2,93.33 2 16
codeberg.org/snonux/hexai/internal/lsp/handlers.go:117.72,120.2 2 11
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:191.151,194.24 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:191.151,194.24 2 14
codeberg.org/snonux/hexai/internal/lsp/handlers.go:194.24,196.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:197.2,199.24 3 13
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:199.24,201.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:202.2,204.24 3 13
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:204.24,207.3 2 13
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:208.2,209.32 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:197.2,199.24 3 14
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:199.24,201.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:202.2,204.24 3 14
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:204.24,207.3 2 14
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:208.2,209.32 2 14
codeberg.org/snonux/hexai/internal/lsp/handlers.go:209.32,211.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:212.2,213.14 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:212.2,213.14 2 14
codeberg.org/snonux/hexai/internal/lsp/handlers.go:213.14,215.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:217.2,231.12 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:217.2,231.12 1 14
codeberg.org/snonux/hexai/internal/lsp/handlers.go:234.64,238.9 4 10
codeberg.org/snonux/hexai/internal/lsp/handlers.go:238.9,240.3 1 9
codeberg.org/snonux/hexai/internal/lsp/handlers.go:242.2,243.16 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:246.56,249.24 3 10
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:249.24,251.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:252.2,252.44 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:252.44,255.33 3 10
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:246.56,249.24 3 11
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:249.24,251.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:252.2,252.44 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:252.44,255.33 3 11
codeberg.org/snonux/hexai/internal/lsp/handlers.go:255.33,260.4 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:261.3,261.9 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:261.3,261.9 1 11
codeberg.org/snonux/hexai/internal/lsp/handlers.go:264.2,265.29 2 0
codeberg.org/snonux/hexai/internal/lsp/handlers.go:268.51,272.37 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers.go:272.37,273.15 1 1
@@ -7425,9 +8181,9 @@ codeberg.org/snonux/hexai/internal/lsp/handlers.go:334.2,335.35 2 14
codeberg.org/snonux/hexai/internal/lsp/handlers.go:335.35,336.14 1 36
codeberg.org/snonux/hexai/internal/lsp/handlers.go:336.14,338.4 1 6
codeberg.org/snonux/hexai/internal/lsp/handlers.go:340.2,340.14 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:343.137,348.24 5 11
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:348.24,350.3 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.2,361.4 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:343.137,348.24 5 12
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:348.24,350.3 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers.go:351.2,361.4 1 12
codeberg.org/snonux/hexai/internal/lsp/handlers.go:436.74,445.2 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:17.48,19.55 2 3
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:19.55,20.23 1 0
@@ -7453,158 +8209,158 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:65.2,65.12 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:68.89,70.21 2 4
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:70.21,72.3 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:73.2,82.12 4 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:85.70,86.45 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:85.70,86.45 1 12
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:86.45,88.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:89.2,97.58 2 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:89.2,97.58 2 12
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:97.58,99.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:100.2,100.22 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.17,108.72 7 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:108.72,109.66 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:109.66,113.5 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:100.2,100.22 1 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:101.20,108.72 7 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:108.72,109.66 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:109.66,113.5 3 4
codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:114.9,116.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.21,121.43 4 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.43,122.24 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:122.24,124.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:124.10,126.5 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:128.3,134.72 7 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.72,135.66 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:135.66,139.5 3 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:140.9,142.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:143.18,150.72 7 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.72,151.66 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:151.66,155.5 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:156.9,158.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.17,160.92 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:160.92,168.4 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:170.2,170.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:173.55,175.56 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.56,176.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:176.23,178.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:179.3,179.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.2,181.49 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:181.49,184.3 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:185.2,185.26 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.85,192.22 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:192.22,194.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.2,196.53 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:196.53,198.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.2,199.31 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:199.31,201.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.2,203.36 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.36,204.34 1 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:204.34,206.4 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:208.2,208.12 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:212.37,214.32 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:214.32,216.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.2,217.32 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:217.32,219.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.2,221.29 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:221.29,223.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.2,225.29 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:225.29,227.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:228.2,228.13 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.34,232.22 1 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:232.22,234.3 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:235.2,235.34 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.37,239.22 1 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:239.22,241.3 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:242.2,242.34 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:247.76,249.80 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:249.80,251.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.2,253.71 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:253.71,255.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.2,258.41 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:258.41,260.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:261.2,268.12 4 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.86,273.24 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:273.24,275.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.2,276.34 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:276.34,278.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:279.2,287.12 4 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:290.95,292.76 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:292.76,294.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.2,297.21 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:297.21,299.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:300.2,302.36 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:302.36,304.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:305.2,307.39 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:307.39,309.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:311.2,315.26 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:315.26,321.22 4 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:321.22,324.4 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:325.3,327.102 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:327.102,329.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:330.3,337.40 6 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:337.40,339.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:340.3,342.19 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:342.19,344.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:345.3,346.33 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.2,350.15 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:350.15,352.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:353.2,368.13 13 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:368.13,371.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:372.2,373.32 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.62,378.39 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:378.39,380.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:381.2,383.16 3 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:383.16,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:386.2,387.29 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.35,391.41 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:391.41,393.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:394.2,394.14 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.48,399.27 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:399.27,401.39 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:401.39,404.45 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:404.45,406.5 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.4,407.46 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:407.46,409.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.4,410.46 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:410.46,412.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:413.4,413.15 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:416.2,416.11 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.63,421.13 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:421.13,423.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.2,424.23 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:424.23,426.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.2,429.28 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.28,430.42 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:430.42,432.9 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.3,434.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:434.38,435.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.2,438.17 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:438.17,440.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:442.2,444.38 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:444.38,446.32 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:446.32,447.17 1 47
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:448.13,450.20 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.13,452.18 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:452.18,454.6 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.5,455.31 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:455.31,457.6 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.2,462.15 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:462.15,464.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:465.2,465.18 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.65,470.24 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:470.24,477.71 7 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:477.71,479.21 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:479.21,481.5 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:482.9,484.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.2,488.16 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:488.16,490.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:491.2,491.115 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:495.43,499.39 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:499.39,501.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:502.2,504.34 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:504.34,506.63 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:506.63,508.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.2,511.42 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:511.42,513.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:514.2,514.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.37,518.16 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:518.16,520.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.2,522.32 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:522.32,524.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:525.2,525.18 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:117.24,120.49 3 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:120.49,121.33 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:121.33,123.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:123.19,125.14 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:127.9,133.78 7 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:133.78,134.75 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:134.75,138.14 3 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:139.15,141.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:142.21,149.72 7 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:149.72,150.66 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:150.66,154.5 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:155.9,157.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:158.17,159.92 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:159.92,167.4 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:169.2,169.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:172.55,174.56 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:174.56,175.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:175.23,177.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:178.3,178.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.2,180.49 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:180.49,183.3 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:184.2,184.26 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:190.85,191.22 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:191.22,193.3 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:194.2,195.53 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:195.53,197.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.2,198.31 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:198.31,200.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:201.2,202.36 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:202.36,203.34 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:203.34,205.4 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:207.2,207.12 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:211.37,213.32 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:213.32,215.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.2,216.32 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:216.32,218.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.2,220.29 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:220.29,222.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.2,224.29 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:224.29,226.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:227.2,227.13 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:230.34,231.22 1 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:231.22,233.3 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:234.2,234.34 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:237.37,238.22 1 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:238.22,240.3 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:241.2,241.34 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:246.76,248.80 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:248.80,250.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.2,252.71 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:252.71,254.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:256.2,257.41 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:257.41,259.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:260.2,267.12 4 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:271.86,272.24 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:272.24,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.2,275.34 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:275.34,277.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:278.2,286.12 4 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:289.95,291.76 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:291.76,293.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:295.2,296.21 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:296.21,298.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:299.2,301.36 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:301.36,303.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:304.2,306.39 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:306.39,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:310.2,314.26 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:314.26,320.22 4 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:320.22,323.4 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:324.3,326.102 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:326.102,328.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:329.3,336.40 6 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:336.40,338.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:339.3,341.19 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:341.19,343.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:344.3,345.33 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:348.2,349.15 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:349.15,351.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:352.2,367.13 13 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:367.13,370.3 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:371.2,372.32 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:376.62,377.39 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:377.39,379.3 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:380.2,382.16 3 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:382.16,384.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:385.2,386.29 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:389.35,390.41 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:390.41,392.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:393.2,393.14 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:397.48,398.27 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:398.27,400.39 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:400.39,403.45 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:403.45,405.5 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.4,406.46 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:406.46,408.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.4,409.46 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:409.46,411.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:412.4,412.15 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:415.2,415.11 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:419.63,420.13 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:420.13,422.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.2,423.23 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:423.23,425.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:427.2,428.28 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:428.28,429.42 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:429.42,431.9 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.3,433.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:433.38,434.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.2,437.17 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:437.17,439.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:441.2,443.38 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:443.38,445.32 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:445.32,446.17 1 47
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:447.13,449.20 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:450.13,451.18 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:451.18,453.6 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.5,454.31 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:454.31,456.6 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.2,461.15 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:461.15,463.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:464.2,464.18 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:468.65,469.27 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:469.27,476.71 7 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:476.71,478.21 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:478.21,480.5 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:481.9,483.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:486.2,487.16 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:487.16,489.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:490.2,490.115 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:494.43,498.39 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:498.39,500.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:501.2,503.34 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:503.34,505.63 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:505.63,507.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.2,510.42 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:510.42,512.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:513.2,513.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:516.37,517.16 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:517.16,519.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:520.2,521.32 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:521.32,523.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_codeaction.go:524.2,524.18 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:15.48,18.55 3 1
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:18.55,25.19 5 1
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:25.19,27.4 1 0
@@ -7672,60 +8428,64 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:212.3,212.8 1 6
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:214.2,216.50 3 7
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:216.50,218.3 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:219.2,219.23 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.193,225.9 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:223.193,225.9 2 11
codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:225.9,227.3 1 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.2,233.32 6 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:233.32,235.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:236.2,237.24 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.24,239.3 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,246.30 5 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:246.30,248.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:249.2,250.40 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.40,252.20 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:252.20,254.21 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.21,256.5 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.4,257.54 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:257.54,259.21 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:259.21,261.6 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.4,263.40 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.40,267.5 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.8,269.23 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:269.23,271.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:272.2,272.19 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:277.55,279.12 2 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:279.12,281.3 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.2,282.6 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:282.6,286.20 4 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.20,288.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:289.3,290.17 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.17,292.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,295.10 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:296.21,298.10 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:299.18,299.18 0 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:307.60,309.19 2 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:309.19,311.3 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:312.2,313.6 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.6,317.23 4 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.23,321.11 4 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:322.22,324.17 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:325.19,327.13 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:331.3,333.14 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:338.177,344.33 3 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:344.33,346.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.2,347.18 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:347.18,349.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:350.2,350.17 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.101,356.57 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:356.57,357.78 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:357.78,359.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.2,361.19 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.19,363.3 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.2,364.19 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:364.19,366.3 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.2,367.56 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:367.56,368.57 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.57,370.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:372.2,372.16 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:228.5,237.32 6 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:237.32,239.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:240.2,241.24 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:241.24,243.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:244.2,250.30 5 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:250.30,252.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:253.2,254.40 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:254.40,256.20 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:256.20,258.21 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:258.21,260.5 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.4,261.54 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:261.54,263.21 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:263.21,265.6 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.4,267.40 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:267.40,271.5 3 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.8,273.23 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:273.23,275.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:276.2,276.19 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:281.55,283.12 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:283.12,285.3 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.2,286.6 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:286.6,290.20 4 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:290.20,292.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:293.3,294.17 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:294.17,296.4 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:297.3,299.10 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:300.21,302.10 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:303.18,303.18 0 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:311.60,313.19 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:313.19,315.3 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:316.2,317.6 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:317.6,321.23 4 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:321.23,325.11 4 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:326.22,328.17 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:329.19,331.13 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:335.3,337.14 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:342.177,354.17 4 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:354.17,357.6 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.5,358.71 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:358.71,360.6 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:361.5,363.55 3 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:363.55,365.43 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:365.43,367.10 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:368.9,368.79 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:370.5,370.20 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:374.101,376.57 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:376.57,377.78 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:377.78,379.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.2,381.19 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:381.19,383.3 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.2,384.19 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:384.19,386.3 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.2,387.56 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:387.56,388.57 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:388.57,390.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_completion.go:392.2,392.16 1 10
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:21.45,23.55 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:23.55,26.3 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:29.47,31.55 2 1
@@ -7734,62 +8494,62 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:32.32,34.4 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:35.3,37.44 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:41.46,43.55 2 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:43.55,46.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:52.76,54.14 2 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:52.76,54.14 2 7
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:54.14,56.3 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:58.2,59.14 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:58.2,59.14 2 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:59.14,61.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:62.2,62.26 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:62.2,62.26 1 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:62.26,64.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:65.2,66.13 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:65.2,66.13 2 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:66.13,68.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:69.2,69.30 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:69.2,69.30 1 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:69.30,71.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:73.2,74.28 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:74.28,77.3 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:78.2,83.43 5 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:83.43,86.3 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:87.2,87.27 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.50,96.24 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:73.2,74.28 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:74.28,77.3 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:78.2,83.43 5 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:83.43,86.3 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:87.2,87.27 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:95.50,96.24 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:96.24,98.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:99.2,100.35 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:99.2,100.35 2 4
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:100.35,102.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.2,103.30 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.30,106.14 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.14,107.39 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.2,103.30 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:103.30,106.14 2 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:106.14,107.39 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:107.39,109.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:111.4,111.9 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:113.3,113.12 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:111.4,111.9 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:113.3,113.12 1 6
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:113.12,114.12 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:117.3,117.25 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:117.3,117.25 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:117.25,118.12 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.3,121.37 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.3,121.37 1 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:121.37,122.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,125.12 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.3,125.12 1 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:125.12,126.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.3,130.38 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.38,131.19 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.19,133.10 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:136.3,136.17 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:128.3,130.38 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:130.38,131.19 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:131.19,133.10 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:136.3,136.17 1 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:136.17,137.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.3,141.63 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.63,143.4 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,144.80 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:140.3,141.63 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:141.63,143.4 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.3,144.80 1 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:144.80,145.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,151.19 4 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:148.3,151.19 4 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:151.19,152.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:154.3,156.38 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.38,166.18 9 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:154.3,156.38 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:156.38,166.18 9 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:166.18,169.5 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:170.4,171.17 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:170.4,171.17 2 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:171.17,173.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,174.61 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:177.3,177.8 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:183.110,185.14 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:174.4,174.61 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:177.3,177.8 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:183.110,185.14 2 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:185.14,187.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:189.2,200.54 8 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:205.96,207.14 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:189.2,200.54 8 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:205.96,207.14 2 4
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:207.14,209.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.2,213.31 4 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:210.2,213.31 4 4
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:213.31,214.53 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:214.53,216.4 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:217.3,217.12 1 2
@@ -7805,12 +8565,12 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:233.53,235.4 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.3,236.12 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:236.12,237.9 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:239.3,242.6 4 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:244.2,245.26 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:244.2,245.26 2 4
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:245.26,246.35 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:246.35,248.4 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.3,249.35 1 2
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:249.35,251.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:253.2,254.13 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:253.2,254.13 2 4
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:258.45,260.17 2 8
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:260.17,262.3 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:264.2,264.50 1 8
@@ -7820,8 +8580,8 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:267.18,269.5 1 5
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:273.2,274.14 2 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:275.21,276.48 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:277.10,278.12 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:283.68,290.2 6 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:293.46,300.2 6 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:283.68,290.2 6 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:293.46,300.2 6 6
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:303.61,318.2 9 3
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:322.59,323.12 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_document.go:323.12,326.3 2 1
@@ -7841,238 +8601,240 @@ codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:16.2,27.27 2 2
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:30.38,32.2 1 0
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:34.46,36.2 1 1
codeberg.org/snonux/hexai/internal/lsp/handlers_init.go:38.31,41.2 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:21.55,23.32 2 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:23.32,25.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:26.2,26.13 1 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:30.41,35.2 4 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:37.41,42.2 4 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:44.32,47.23 3 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:47.23,49.3 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.2,51.24 2 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.24,53.3 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:54.2,57.15 4 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:57.15,59.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:60.2,63.211 4 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.51,68.41 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:68.41,70.3 1 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:71.2,73.71 3 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.110,77.14 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.14,81.3 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:82.2,84.18 3 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:87.118,88.14 1 16
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.14,91.16 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.16,94.35 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.35,96.5 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.36 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.36,99.5 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.4,102.59 3 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.59,104.5 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.4,105.21 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:108.2,111.19 4 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:114.51,115.23 1 22
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.23,117.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.13 1 22
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.13,120.100 2 38
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:120.100,122.12 2 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:124.3,124.8 1 18
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.2,126.11 1 22
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:129.32,131.2 1 24
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:134.44,135.50 1 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.50,137.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.2,138.35 1 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.20 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:143.20,144.40 1 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.40,146.12 2 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.3,148.8 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.12 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.12,152.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.2,153.17 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:156.52,157.38 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.38,159.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.2,161.27 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.27,162.34 1 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.34,163.12 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.36 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.36,166.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:168.3,168.25 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:170.2,170.34 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.64,180.22 2 49
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.22,183.12 2 64
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.12,185.4 1 27
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:186.3,188.74 2 37
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:188.74,190.12 2 21
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:193.3,194.12 2 16
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.12,196.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:197.3,198.48 2 15
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.48,200.12 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:202.3,203.18 2 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.18,205.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.3,208.29 2 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:210.2,210.24 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:216.41,220.31 3 19
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.31,222.3 1 16
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.2,223.29 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.29,225.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.2,226.31 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:226.31,228.32 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.32,230.4 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:232.2,232.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.83,239.102 2 18
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:239.102,241.36 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:241.36,243.136 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.136,245.5 1 20
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.4,248.34 3 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:248.34,250.5 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.2,254.65 1 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.65,255.53 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.53,257.37 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:257.37,259.137 2 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.137,261.6 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:262.5,264.35 3 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:264.35,266.6 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:270.2,270.19 1 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:274.80,275.22 1 18
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.22,277.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:278.2,280.40 3 18
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.40,282.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.2,283.34 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.34,284.31 1 100
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.31,285.12 1 77
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.3,288.16 2 23
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.16,289.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.3,291.32 1 23
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:291.32,293.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.2,295.19 1 13
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:298.36,300.2 1 100
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.39,305.13 2 31
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:305.13,307.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.2,310.66 3 31
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:310.66,312.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:313.2,314.54 2 31
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.54,316.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.2,317.51 1 31
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:317.51,319.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:320.2,322.69 3 31
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:322.69,325.3 2 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:326.2,326.10 1 23
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:330.43,332.13 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:332.13,334.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:335.2,336.11 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.11,338.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.2,340.14 2 8
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.14,342.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:343.2,344.19 2 6
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:348.56,350.89 2 17
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:350.89,352.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:353.2,353.14 1 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:357.52,358.32 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.32,360.28 2 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:360.28,362.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.3,363.34 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:363.34,365.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.3,366.42 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:366.42,368.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:369.3,369.49 1 2
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:371.2,374.27 3 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:374.27,376.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.2,377.36 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:377.36,379.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:380.2,383.49 3 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.49,385.24 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:385.24,387.4 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:390.2,391.25 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.25,393.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.2,394.33 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:394.33,396.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:397.2,398.19 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:402.67,404.35 2 12
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.35,406.3 1 11
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:407.2,408.31 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.31,410.3 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:411.2,411.14 1 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.69,415.32 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.32,417.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.2,418.47 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:421.45,423.22 2 51
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.22,427.12 3 53
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:427.12,429.4 1 32
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:430.3,432.32 3 21
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:432.32,434.4 1 7
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:435.3,436.46 2 14
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.46,438.12 2 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:441.3,442.12 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.12,444.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:445.3,446.49 2 10
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.49,448.12 2 1
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:450.3,450.14 1 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:452.2,452.14 1 3
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:455.67,458.28 3 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:458.28,460.12 2 9
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:460.12,461.9 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:463.3,465.12 3 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:465.12,466.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.3,468.43 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:468.43,470.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.3,472.34 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:472.34,474.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:476.3,477.48 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.48,479.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.3,481.25 1 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:481.25,483.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:485.3,486.50 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.50,488.4 1 4
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:489.3,490.22 2 5
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:492.2,492.14 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:86.90,89.20 3 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:89.20,91.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:92.2,94.23 3 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:94.23,96.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:97.2,98.22 2 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:98.22,100.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:101.2,102.27 2 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:102.27,104.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:105.2,111.38 6 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:111.38,114.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:114.8,116.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:117.2,120.35 4 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:120.35,122.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.2,123.35 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:123.35,125.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.2,127.46 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:127.46,129.3 1 4
-codeberg.org/snonux/hexai/internal/lsp/server.go:129.8,131.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,132.47 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:132.47,134.3 1 4
-codeberg.org/snonux/hexai/internal/lsp/server.go:134.8,136.3 1 1
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,137.46 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:137.46,139.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/server.go:139.8,141.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.2,142.33 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:142.33,144.3 1 3
-codeberg.org/snonux/hexai/internal/lsp/server.go:144.8,146.3 1 2
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.2,149.24 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:149.24,151.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.2,152.25 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:152.25,154.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.2,155.24 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:155.24,157.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.2,158.29 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:158.29,160.3 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:162.2,164.47 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:164.47,164.72 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:166.47,166.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:175.2,175.10 1 5
-codeberg.org/snonux/hexai/internal/lsp/server.go:178.30,179.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:179.6,181.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:181.20,183.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.3,184.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:184.17,186.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:187.3,188.52 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:188.52,190.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.3,192.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:192.23,194.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:196.3,197.15 2 0
-codeberg.org/snonux/hexai/internal/lsp/server.go:197.15,199.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:20.55,22.32 2 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.32,24.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:25.2,25.13 1 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:29.41,34.2 4 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:36.41,41.2 4 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:43.32,46.23 3 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:46.23,48.3 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:49.2,50.24 2 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:50.24,52.3 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:53.2,56.15 4 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:56.15,58.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:59.2,62.211 4 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:66.51,67.41 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:67.41,69.3 1 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:70.2,72.71 3 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.62,77.16 1 33
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:77.16,79.6 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.5,81.28 2 24
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:81.28,84.6 2 79
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.5,85.15 1 24
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.118,89.14 1 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.14,92.16 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.16,95.35 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:95.35,97.5 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.4,98.36 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:98.36,100.5 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:101.4,103.59 3 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:103.59,105.5 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.4,106.21 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:109.2,112.19 4 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.51,116.23 1 23
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.23,118.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.2,119.13 1 23
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:119.13,121.100 2 39
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.100,123.12 2 21
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:125.3,125.8 1 18
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.2,127.11 1 23
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.32,132.2 1 24
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.44,136.50 1 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.50,138.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:139.2,139.35 1 17
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.40,144.20 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:144.20,145.40 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.40,147.12 2 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.3,149.8 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.2,151.12 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:151.12,153.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.2,154.17 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.52,158.38 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.38,160.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:161.2,162.27 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.27,163.34 1 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:163.34,164.12 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.3,166.36 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:166.36,167.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:169.3,169.25 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:171.2,171.34 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:179.64,181.22 2 49
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:181.22,184.12 2 64
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:184.12,186.4 1 27
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:187.3,189.74 2 37
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.74,191.12 2 21
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.3,195.12 2 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.12,197.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:198.3,199.48 2 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.48,201.12 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:203.3,204.18 2 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.18,206.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:208.3,209.29 2 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:211.2,211.24 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.41,221.31 3 19
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:221.31,223.3 1 16
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.2,224.29 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.29,226.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.2,227.31 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:227.31,229.32 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.32,231.4 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.2,233.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:237.83,240.102 2 19
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.102,242.36 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:242.36,244.136 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:244.136,246.5 1 20
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:247.4,249.34 3 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:249.34,251.5 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.2,255.65 1 15
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:255.65,256.53 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.53,258.37 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:258.37,260.137 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:260.137,262.6 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:263.5,265.35 3 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:265.35,267.6 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.2,271.19 1 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.80,276.22 1 19
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.22,278.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:279.2,281.40 3 19
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.40,283.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.2,284.34 1 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.34,285.31 1 100
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.31,286.12 1 77
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,289.16 2 23
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:289.16,290.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.3,292.32 1 23
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:292.32,294.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:296.2,296.19 1 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:299.36,301.2 1 100
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:304.39,306.13 2 36
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:306.13,308.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:309.2,311.66 3 36
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.66,313.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:314.2,315.54 2 36
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:315.54,317.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.2,318.51 1 36
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.51,320.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.2,323.69 3 36
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:323.69,326.3 2 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:327.2,327.10 1 28
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:331.43,333.13 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:333.13,335.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:336.2,337.11 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.11,339.3 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:340.2,341.14 2 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:341.14,343.3 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:344.2,345.19 2 6
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:349.56,351.89 2 18
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:351.89,353.3 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:354.2,354.14 1 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.52,359.32 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:359.32,361.28 2 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:361.28,363.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.3,364.34 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:364.34,366.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.3,367.42 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:367.42,369.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:370.3,370.49 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.2,375.27 3 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:375.27,377.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.2,378.36 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:378.36,380.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:381.2,384.49 3 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:384.49,386.24 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.24,388.4 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.2,392.25 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:392.25,394.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.2,395.33 1 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.33,397.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:398.2,399.19 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.67,405.35 2 13
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:405.35,407.3 1 11
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:408.2,409.31 2 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:409.31,411.3 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:412.2,412.14 1 2
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:415.69,416.32 1 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:416.32,418.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:419.2,419.47 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:422.45,424.22 2 55
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:424.22,428.12 3 57
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,430.4 1 36
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,433.32 3 21
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:433.32,435.4 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:436.3,437.46 2 14
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:437.46,439.12 2 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:442.3,443.12 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:443.12,445.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:446.3,447.49 2 10
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:447.49,449.12 2 1
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:451.3,451.14 1 9
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:453.2,453.14 1 3
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:456.67,459.28 3 8
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:459.28,461.12 2 12
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:461.12,462.9 1 7
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:464.3,466.12 3 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:466.12,467.9 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.3,469.43 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:469.43,471.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.3,473.34 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:473.34,475.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:477.3,478.48 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:478.48,480.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.3,482.25 1 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:482.25,484.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:486.3,487.50 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:487.50,489.4 1 4
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:490.3,491.22 2 5
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:493.2,493.14 1 8
+codeberg.org/snonux/hexai/internal/lsp/server.go:126.90,129.20 3 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:129.20,131.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:132.2,134.23 3 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:134.23,136.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:137.2,138.22 2 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:138.22,140.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:141.2,142.27 2 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:142.27,144.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:145.2,151.38 6 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:151.38,154.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:154.8,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:157.2,160.35 4 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:160.35,162.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.2,163.35 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:163.35,165.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.2,167.46 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:167.46,169.3 1 4
+codeberg.org/snonux/hexai/internal/lsp/server.go:169.8,171.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.2,172.47 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:172.47,174.3 1 4
+codeberg.org/snonux/hexai/internal/lsp/server.go:174.8,176.3 1 1
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.2,177.46 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:177.46,179.3 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:179.8,181.3 1 2
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.5,182.36 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:182.36,184.6 1 3
+codeberg.org/snonux/hexai/internal/lsp/server.go:184.11,186.6 1 2
+codeberg.org/snonux/hexai/internal/lsp/server.go:189.5,207.24 17 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:207.24,209.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.2,210.25 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:210.25,212.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.2,213.24 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:213.24,215.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.2,216.29 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:216.29,218.3 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:220.2,222.47 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:222.47,222.72 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:224.47,224.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:233.2,233.10 1 5
+codeberg.org/snonux/hexai/internal/lsp/server.go:236.30,237.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:237.6,239.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:239.20,241.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.3,242.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:242.17,244.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:245.3,246.52 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:246.52,248.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.3,250.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:250.23,252.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:254.3,255.15 2 0
+codeberg.org/snonux/hexai/internal/lsp/server.go:255.15,257.4 1 0
codeberg.org/snonux/hexai/internal/lsp/transport.go:15.48,18.6 3 1
codeberg.org/snonux/hexai/internal/lsp/transport.go:18.6,20.17 2 2
codeberg.org/snonux/hexai/internal/lsp/transport.go:20.17,22.4 1 0
@@ -8089,11 +8851,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,53.16 2 17
+codeberg.org/snonux/hexai/internal/lsp/transport.go:51.38,53.16 2 18
codeberg.org/snonux/hexai/internal/lsp/transport.go:53.16,56.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:57.2,58.57 2 17
+codeberg.org/snonux/hexai/internal/lsp/transport.go:57.2,58.57 2 18
codeberg.org/snonux/hexai/internal/lsp/transport.go:58.57,61.3 2 0
-codeberg.org/snonux/hexai/internal/lsp/transport.go:62.2,62.45 1 17
+codeberg.org/snonux/hexai/internal/lsp/transport.go:62.2,62.45 1 18
codeberg.org/snonux/hexai/internal/lsp/transport.go:62.45,65.3 2 0
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:4.33,6.2 1 1
codeberg.org/snonux/hexai/internal/testutil/fixtures.go:9.34,11.2 1 1
diff --git a/internal/appconfig/config.go b/internal/appconfig/config.go
index 9404607..9941cf8 100644
--- a/internal/appconfig/config.go
+++ b/internal/appconfig/config.go
@@ -54,9 +54,35 @@ type App struct {
// Default temperature for Ollama requests (nil means use provider default)
OllamaTemperature *float64 `json:"ollama_temperature" toml:"ollama_temperature"`
CopilotBaseURL string `json:"copilot_base_url" toml:"copilot_base_url"`
- CopilotModel string `json:"copilot_model" toml:"copilot_model"`
- // Default temperature for Copilot requests (nil means use provider default)
- CopilotTemperature *float64 `json:"copilot_temperature" toml:"copilot_temperature"`
+ CopilotModel string `json:"copilot_model" toml:"copilot_model"`
+ // Default temperature for Copilot requests (nil means use provider default)
+ CopilotTemperature *float64 `json:"copilot_temperature" toml:"copilot_temperature"`
+
+ // Prompt templates (configured only via file; no env overrides)
+ // Completion/chat/code action/CLI prompt strings. See config.toml.example for placeholders.
+ // Completion
+ PromptCompletionSystemGeneral string `json:"-" toml:"-"`
+ PromptCompletionSystemParams string `json:"-" toml:"-"`
+ PromptCompletionSystemInline string `json:"-" toml:"-"`
+ PromptCompletionUserGeneral string `json:"-" toml:"-"`
+ PromptCompletionUserParams string `json:"-" toml:"-"`
+ PromptCompletionExtraHeader string `json:"-" toml:"-"`
+ // Provider-native code-completer
+ PromptNativeCompletion string `json:"-" toml:"-"`
+ // In-editor chat
+ PromptChatSystem string `json:"-" toml:"-"`
+ // Code actions
+ PromptCodeActionRewriteSystem string `json:"-" toml:"-"`
+ PromptCodeActionDiagnosticsSystem string `json:"-" toml:"-"`
+ PromptCodeActionDocumentSystem string `json:"-" toml:"-"`
+ PromptCodeActionRewriteUser string `json:"-" toml:"-"`
+ PromptCodeActionDiagnosticsUser string `json:"-" toml:"-"`
+ PromptCodeActionDocumentUser string `json:"-" toml:"-"`
+ PromptCodeActionGoTestSystem string `json:"-" toml:"-"`
+ PromptCodeActionGoTestUser string `json:"-" toml:"-"`
+ // CLI
+ PromptCLIDefaultSystem string `json:"-" toml:"-"`
+ PromptCLIExplainSystem string `json:"-" toml:"-"`
}
// Constructor: defaults for App (kept first among functions)
@@ -64,7 +90,7 @@ func newDefaultConfig() App {
// Coding-friendly default temperature across providers
// Users can override per provider in config.toml (including 0.0).
t := 0.2
- return App{
+ return App{
MaxTokens: 4000,
ContextMode: "always-full",
ContextWindowLines: 120,
@@ -81,8 +107,32 @@ func newDefaultConfig() App {
InlineOpen: ">",
InlineClose: ">",
ChatSuffix: ">",
- ChatPrefixes: []string{"?", "!", ":", ";"},
- }
+ ChatPrefixes: []string{"?", "!", ":", ";"},
+
+ // Default prompt templates (match current hard-coded strings)
+ PromptCompletionSystemParams: "You are a code completion engine for function signatures. Return only the parameter list contents (without parentheses), no braces, no prose. Prefer idiomatic names and types.",
+ PromptCompletionUserParams: "Cursor is inside the function parameter list. Suggest only the parameter list (no parentheses).\nFunction line: {{function}}\nCurrent line (cursor at {{char}}): {{current}}",
+ PromptCompletionSystemGeneral: "You are a terse code completion engine. Return only the code to insert, no surrounding prose or backticks. Only continue from the cursor; never repeat characters already present to the left of the cursor on the current line (e.g., if 'name :=' is already typed, only return the right-hand side expression).",
+ PromptCompletionUserGeneral: "Provide the next likely code to insert at the cursor.\nFile: {{file}}\nFunction/context: {{function}}\nAbove line: {{above}}\nCurrent line (cursor at character {{char}}): {{current}}\nBelow line: {{below}}\nOnly return the completion snippet.",
+ PromptCompletionSystemInline: "You are a precise code completion/refactoring engine. Output only the code to insert with no prose, no comments, and no backticks. Return raw code only.",
+ PromptCompletionExtraHeader: "Additional context:\n{{context}}",
+
+ PromptNativeCompletion: "// Path: {{path}}\n{{before}}",
+
+ PromptChatSystem: "You are a helpful coding assistant. Answer concisely and clearly.",
+
+ PromptCodeActionRewriteSystem: "You are a precise code refactoring engine. Rewrite the given code strictly according to the instruction. Return only the updated code with no prose or backticks. Preserve formatting where reasonable.",
+ PromptCodeActionDiagnosticsSystem: "You are a precise code fixer. Resolve the given diagnostics by editing only the selected code. Return only the corrected code with no prose or backticks. Keep behavior and style, and avoid unrelated changes.",
+ PromptCodeActionDocumentSystem: "You are a precise code documentation engine. Add idiomatic documentation comments to the given code. Preserve exact behavior and formatting as much as possible. Return only the updated code with comments, no prose or backticks.",
+ PromptCodeActionRewriteUser: "Instruction: {{instruction}}\n\nSelected code to transform:\n{{selection}}",
+ PromptCodeActionDiagnosticsUser: "Diagnostics to resolve (selection only):\n{{diagnostics}}\n\nSelected code:\n{{selection}}",
+ PromptCodeActionDocumentUser: "Add documentation comments to this code:\n{{selection}}",
+ PromptCodeActionGoTestSystem: "You are a precise Go unit test generator. Given a Go function, write one or more Test* functions using the testing package. Do NOT include package or imports, only the test function(s). Prefer table-driven tests. Keep it minimal and idiomatic.",
+ PromptCodeActionGoTestUser: "Function under test:\n{{function}}",
+
+ PromptCLIDefaultSystem: "You are Hexai CLI. Default to very short, concise answers. If the user asks for commands, output only the commands (one per line) with no commentary or explanation. Only when the word 'explain' appears in the prompt, produce a verbose explanation.",
+ PromptCLIExplainSystem: "You are Hexai CLI. The user requested an explanation. Provide a clear, verbose explanation with reasoning and details. If commands are needed, include them with brief context.",
+ }
}
// Load reads configuration from a file and merges with defaults.
@@ -113,33 +163,352 @@ func Load(logger *log.Logger) App {
}
// Private helpers
+// Sectioned (table-based) file format only.
+type fileConfig struct {
+ // Section tables only (flat keys are not allowed)
+ General sectionGeneral `toml:"general"`
+ Logging sectionLogging `toml:"logging"`
+ Completion sectionCompletion `toml:"completion"`
+ Triggers sectionTriggers `toml:"triggers"`
+ Inline sectionInline `toml:"inline"`
+ Chat sectionChat `toml:"chat"`
+ Provider sectionProvider `toml:"provider"`
+ OpenAI sectionOpenAI `toml:"openai"`
+ Copilot sectionCopilot `toml:"copilot"`
+ Ollama sectionOllama `toml:"ollama"`
+ Prompts sectionPrompts `toml:"prompts"`
+}
+
+type sectionGeneral struct {
+ MaxTokens int `toml:"max_tokens"`
+ ContextMode string `toml:"context_mode"`
+ ContextWindowLines int `toml:"context_window_lines"`
+ MaxContextTokens int `toml:"max_context_tokens"`
+ CodingTemperature *float64 `toml:"coding_temperature"`
+}
+
+type sectionLogging struct {
+ LogPreviewLimit int `toml:"log_preview_limit"`
+}
+
+type sectionCompletion struct {
+ CompletionDebounceMs int `toml:"completion_debounce_ms"`
+ CompletionThrottleMs int `toml:"completion_throttle_ms"`
+ ManualInvokeMinPrefix int `toml:"manual_invoke_min_prefix"`
+}
+
+type sectionTriggers struct {
+ TriggerCharacters []string `toml:"trigger_characters"`
+}
+
+type sectionInline struct {
+ InlineOpen string `toml:"inline_open"`
+ InlineClose string `toml:"inline_close"`
+}
+
+type sectionChat struct {
+ ChatSuffix string `toml:"chat_suffix"`
+ ChatPrefixes []string `toml:"chat_prefixes"`
+}
+
+type sectionProvider struct {
+ Name string `toml:"name"`
+}
+
+type sectionOpenAI struct {
+ Model string `toml:"model"`
+ BaseURL string `toml:"base_url"`
+ Temperature *float64 `toml:"temperature"`
+}
+
+type sectionCopilot struct {
+ Model string `toml:"model"`
+ BaseURL string `toml:"base_url"`
+ Temperature *float64 `toml:"temperature"`
+}
+
+type sectionOllama struct {
+ Model string `toml:"model"`
+ BaseURL string `toml:"base_url"`
+ Temperature *float64 `toml:"temperature"`
+}
+
+// Prompts sections
+type sectionPrompts struct {
+ Completion sectionPromptsCompletion `toml:"completion"`
+ Chat sectionPromptsChat `toml:"chat"`
+ CodeAction sectionPromptsCodeAction `toml:"code_action"`
+ CLI sectionPromptsCLI `toml:"cli"`
+ ProviderNative sectionPromptsProviderNative `toml:"provider_native"`
+}
+
+type sectionPromptsCompletion struct {
+ SystemGeneral string `toml:"system_general"`
+ SystemParams string `toml:"system_params"`
+ SystemInline string `toml:"system_inline"`
+ UserGeneral string `toml:"user_general"`
+ UserParams string `toml:"user_params"`
+ ExtraHeader string `toml:"additional_context"`
+}
+
+type sectionPromptsChat struct {
+ System string `toml:"system"`
+}
+
+type sectionPromptsCodeAction struct {
+ RewriteSystem string `toml:"rewrite_system"`
+ DiagnosticsSystem string `toml:"diagnostics_system"`
+ DocumentSystem string `toml:"document_system"`
+ RewriteUser string `toml:"rewrite_user"`
+ DiagnosticsUser string `toml:"diagnostics_user"`
+ DocumentUser string `toml:"document_user"`
+ GoTestSystem string `toml:"go_test_system"`
+ GoTestUser string `toml:"go_test_user"`
+}
+
+type sectionPromptsCLI struct {
+ DefaultSystem string `toml:"default_system"`
+ ExplainSystem string `toml:"explain_system"`
+}
+
+type sectionPromptsProviderNative struct {
+ Completion string `toml:"completion"`
+}
+
+func (fc *fileConfig) toApp() App {
+ out := App{}
+
+ // Merge section: general
+ if (fc.General != sectionGeneral{}) || fc.General.CodingTemperature != nil {
+ tmp := App{
+ MaxTokens: fc.General.MaxTokens,
+ ContextMode: fc.General.ContextMode,
+ ContextWindowLines: fc.General.ContextWindowLines,
+ MaxContextTokens: fc.General.MaxContextTokens,
+ CodingTemperature: fc.General.CodingTemperature,
+ }
+ out.mergeBasics(&tmp)
+ }
+
+ // logging
+ if (fc.Logging != sectionLogging{}) {
+ tmp := App{LogPreviewLimit: fc.Logging.LogPreviewLimit}
+ out.mergeBasics(&tmp)
+ }
+
+ // completion
+ if (fc.Completion != sectionCompletion{}) {
+ tmp := App{
+ CompletionDebounceMs: fc.Completion.CompletionDebounceMs,
+ CompletionThrottleMs: fc.Completion.CompletionThrottleMs,
+ ManualInvokeMinPrefix: fc.Completion.ManualInvokeMinPrefix,
+ }
+ out.mergeBasics(&tmp)
+ }
+
+ // triggers
+ if len(fc.Triggers.TriggerCharacters) > 0 {
+ tmp := App{TriggerCharacters: fc.Triggers.TriggerCharacters}
+ out.mergeBasics(&tmp)
+ }
+
+ // inline
+ if (fc.Inline != sectionInline{}) {
+ tmp := App{InlineOpen: fc.Inline.InlineOpen, InlineClose: fc.Inline.InlineClose}
+ out.mergeBasics(&tmp)
+ }
+
+ // chat
+ if strings.TrimSpace(fc.Chat.ChatSuffix) != "" || len(fc.Chat.ChatPrefixes) > 0 {
+ tmp := App{ChatSuffix: fc.Chat.ChatSuffix, ChatPrefixes: fc.Chat.ChatPrefixes}
+ out.mergeBasics(&tmp)
+ }
+
+ // provider
+ if strings.TrimSpace(fc.Provider.Name) != "" {
+ tmp := App{Provider: fc.Provider.Name}
+ out.mergeBasics(&tmp)
+ }
+
+ // openai
+ if (fc.OpenAI != sectionOpenAI{}) || fc.OpenAI.Temperature != nil {
+ tmp := App{
+ OpenAIBaseURL: fc.OpenAI.BaseURL,
+ OpenAIModel: fc.OpenAI.Model,
+ OpenAITemperature: fc.OpenAI.Temperature,
+ }
+ out.mergeProviderFields(&tmp)
+ }
+
+ // copilot
+ if (fc.Copilot != sectionCopilot{}) || fc.Copilot.Temperature != nil {
+ tmp := App{
+ CopilotBaseURL: fc.Copilot.BaseURL,
+ CopilotModel: fc.Copilot.Model,
+ CopilotTemperature: fc.Copilot.Temperature,
+ }
+ out.mergeProviderFields(&tmp)
+ }
+
+ // ollama
+ if (fc.Ollama != sectionOllama{}) || fc.Ollama.Temperature != nil {
+ tmp := App{
+ OllamaBaseURL: fc.Ollama.BaseURL,
+ OllamaModel: fc.Ollama.Model,
+ OllamaTemperature: fc.Ollama.Temperature,
+ }
+ out.mergeProviderFields(&tmp)
+ }
+
+ // prompts
+ // completion
+ if (fc.Prompts.Completion != sectionPromptsCompletion{}) {
+ if strings.TrimSpace(fc.Prompts.Completion.SystemGeneral) != "" {
+ out.PromptCompletionSystemGeneral = fc.Prompts.Completion.SystemGeneral
+ }
+ if strings.TrimSpace(fc.Prompts.Completion.SystemParams) != "" {
+ out.PromptCompletionSystemParams = fc.Prompts.Completion.SystemParams
+ }
+ if strings.TrimSpace(fc.Prompts.Completion.SystemInline) != "" {
+ out.PromptCompletionSystemInline = fc.Prompts.Completion.SystemInline
+ }
+ if strings.TrimSpace(fc.Prompts.Completion.UserGeneral) != "" {
+ out.PromptCompletionUserGeneral = fc.Prompts.Completion.UserGeneral
+ }
+ if strings.TrimSpace(fc.Prompts.Completion.UserParams) != "" {
+ out.PromptCompletionUserParams = fc.Prompts.Completion.UserParams
+ }
+ if strings.TrimSpace(fc.Prompts.Completion.ExtraHeader) != "" {
+ out.PromptCompletionExtraHeader = fc.Prompts.Completion.ExtraHeader
+ }
+ }
+ // chat
+ if strings.TrimSpace(fc.Prompts.Chat.System) != "" {
+ out.PromptChatSystem = fc.Prompts.Chat.System
+ }
+ // code action
+ if (fc.Prompts.CodeAction != sectionPromptsCodeAction{}) {
+ if strings.TrimSpace(fc.Prompts.CodeAction.RewriteSystem) != "" {
+ out.PromptCodeActionRewriteSystem = fc.Prompts.CodeAction.RewriteSystem
+ }
+ if strings.TrimSpace(fc.Prompts.CodeAction.DiagnosticsSystem) != "" {
+ out.PromptCodeActionDiagnosticsSystem = fc.Prompts.CodeAction.DiagnosticsSystem
+ }
+ if strings.TrimSpace(fc.Prompts.CodeAction.DocumentSystem) != "" {
+ out.PromptCodeActionDocumentSystem = fc.Prompts.CodeAction.DocumentSystem
+ }
+ if strings.TrimSpace(fc.Prompts.CodeAction.RewriteUser) != "" {
+ out.PromptCodeActionRewriteUser = fc.Prompts.CodeAction.RewriteUser
+ }
+ if strings.TrimSpace(fc.Prompts.CodeAction.DiagnosticsUser) != "" {
+ out.PromptCodeActionDiagnosticsUser = fc.Prompts.CodeAction.DiagnosticsUser
+ }
+ if strings.TrimSpace(fc.Prompts.CodeAction.DocumentUser) != "" {
+ out.PromptCodeActionDocumentUser = fc.Prompts.CodeAction.DocumentUser
+ }
+ if strings.TrimSpace(fc.Prompts.CodeAction.GoTestSystem) != "" {
+ out.PromptCodeActionGoTestSystem = fc.Prompts.CodeAction.GoTestSystem
+ }
+ if strings.TrimSpace(fc.Prompts.CodeAction.GoTestUser) != "" {
+ out.PromptCodeActionGoTestUser = fc.Prompts.CodeAction.GoTestUser
+ }
+ }
+ // cli
+ if (fc.Prompts.CLI != sectionPromptsCLI{}) {
+ if strings.TrimSpace(fc.Prompts.CLI.DefaultSystem) != "" {
+ out.PromptCLIDefaultSystem = fc.Prompts.CLI.DefaultSystem
+ }
+ if strings.TrimSpace(fc.Prompts.CLI.ExplainSystem) != "" {
+ out.PromptCLIExplainSystem = fc.Prompts.CLI.ExplainSystem
+ }
+ }
+ // provider-native
+ if strings.TrimSpace(fc.Prompts.ProviderNative.Completion) != "" {
+ out.PromptNativeCompletion = fc.Prompts.ProviderNative.Completion
+ }
+
+ return out
+}
+
func loadFromFile(path string, logger *log.Logger) (*App, error) {
- f, err := os.Open(path)
- if err != nil {
- if !os.IsNotExist(err) && logger != nil {
- logger.Printf("cannot open TOML config file %s: %v", path, err)
- }
- return nil, err
- }
- defer f.Close()
+ b, err := os.ReadFile(path)
+ if err != nil {
+ if !os.IsNotExist(err) && logger != nil {
+ logger.Printf("cannot open TOML config file %s: %v", path, err)
+ }
+ return nil, err
+ }
- dec := toml.NewDecoder(f)
- var fileCfg App
- if err := dec.Decode(&fileCfg); err != nil {
- if logger != nil {
- logger.Printf("invalid TOML config file %s: %v", path, err)
- }
- return nil, err
- }
- if logger != nil {
- logger.Printf("loaded configuration from %s (TOML)", path)
- }
- return &fileCfg, nil
+ var tables fileConfig
+ errTables := toml.NewDecoder(strings.NewReader(string(b))).Decode(&tables)
+ // Raw map for validation/presence checks
+ var raw map[string]any
+ _ = toml.Unmarshal(b, &raw)
+ if errTables != nil {
+ if logger != nil {
+ logger.Printf("invalid TOML config file %s: %v", path, errTables)
+ }
+ return nil, errTables
+ }
+
+ // Reject legacy flat keys at top-level (sectioned-only config is allowed)
+ legacy := map[string]struct{}{
+ "max_tokens": {}, "context_mode": {}, "context_window_lines": {}, "max_context_tokens": {},
+ "log_preview_limit": {}, "completion_debounce_ms": {}, "completion_throttle_ms": {},
+ "manual_invoke_min_prefix": {}, "trigger_characters": {}, "inline_open": {}, "inline_close": {},
+ "chat_suffix": {}, "chat_prefixes": {}, "coding_temperature": {}, "provider": {},
+ "openai_model": {}, "openai_base_url": {}, "openai_temperature": {},
+ "ollama_model": {}, "ollama_base_url": {}, "ollama_temperature": {},
+ "copilot_model": {}, "copilot_base_url": {}, "copilot_temperature": {},
+ }
+ for k := range raw {
+ if _, isTable := map[string]struct{}{"general": {}, "logging": {}, "completion": {}, "triggers": {}, "inline": {}, "chat": {}, "provider": {}, "openai": {}, "copilot": {}, "ollama": {}, "prompts": {}}[k]; isTable {
+ continue
+ }
+ if _, isLegacy := legacy[k]; isLegacy {
+ return nil, fmt.Errorf("unsupported flat key '%s' in config; use sectioned tables (see config.toml.example)", k)
+ }
+ }
+
+ if logger != nil {
+ logger.Printf("loaded configuration from %s (TOML)", path)
+ }
+
+ // Merge order: flat first, then tables (so tables win over zero flat values)
+ // Build App from tables only
+ tab := tables.toApp()
+ // Ensure explicit values from raw map are respected (defensive for ints)
+ if t, ok := raw["completion"].(map[string]any); ok {
+ if v, present := t["manual_invoke_min_prefix"]; present {
+ switch vv := v.(type) {
+ case int64:
+ tab.ManualInvokeMinPrefix = int(vv)
+ case int:
+ tab.ManualInvokeMinPrefix = vv
+ case float64:
+ tab.ManualInvokeMinPrefix = int(vv)
+ }
+ }
+ }
+ if t, ok := raw["logging"].(map[string]any); ok {
+ if v, present := t["log_preview_limit"]; present {
+ switch vv := v.(type) {
+ case int64:
+ tab.LogPreviewLimit = int(vv)
+ case int:
+ tab.LogPreviewLimit = vv
+ case float64:
+ tab.LogPreviewLimit = int(vv)
+ }
+ }
+ }
+ return &tab, nil
}
func (a *App) mergeWith(other *App) {
- a.mergeBasics(other)
- a.mergeProviderFields(other)
+ a.mergeBasics(other)
+ a.mergeProviderFields(other)
+ a.mergePrompts(other)
}
// mergeBasics merges general (non-provider) fields.
@@ -191,6 +560,69 @@ func (a *App) mergeBasics(other *App) {
}
}
+// mergePrompts copies non-empty prompt templates from other.
+func (a *App) mergePrompts(other *App) {
+ // Completion
+ if strings.TrimSpace(other.PromptCompletionSystemGeneral) != "" {
+ a.PromptCompletionSystemGeneral = other.PromptCompletionSystemGeneral
+ }
+ if strings.TrimSpace(other.PromptCompletionSystemParams) != "" {
+ a.PromptCompletionSystemParams = other.PromptCompletionSystemParams
+ }
+ if strings.TrimSpace(other.PromptCompletionSystemInline) != "" {
+ a.PromptCompletionSystemInline = other.PromptCompletionSystemInline
+ }
+ if strings.TrimSpace(other.PromptCompletionUserGeneral) != "" {
+ a.PromptCompletionUserGeneral = other.PromptCompletionUserGeneral
+ }
+ if strings.TrimSpace(other.PromptCompletionUserParams) != "" {
+ a.PromptCompletionUserParams = other.PromptCompletionUserParams
+ }
+ if strings.TrimSpace(other.PromptCompletionExtraHeader) != "" {
+ a.PromptCompletionExtraHeader = other.PromptCompletionExtraHeader
+ }
+ // Provider-native
+ if strings.TrimSpace(other.PromptNativeCompletion) != "" {
+ a.PromptNativeCompletion = other.PromptNativeCompletion
+ }
+ // Chat
+ if strings.TrimSpace(other.PromptChatSystem) != "" {
+ a.PromptChatSystem = other.PromptChatSystem
+ }
+ // Code actions
+ if strings.TrimSpace(other.PromptCodeActionRewriteSystem) != "" {
+ a.PromptCodeActionRewriteSystem = other.PromptCodeActionRewriteSystem
+ }
+ if strings.TrimSpace(other.PromptCodeActionDiagnosticsSystem) != "" {
+ a.PromptCodeActionDiagnosticsSystem = other.PromptCodeActionDiagnosticsSystem
+ }
+ if strings.TrimSpace(other.PromptCodeActionDocumentSystem) != "" {
+ a.PromptCodeActionDocumentSystem = other.PromptCodeActionDocumentSystem
+ }
+ if strings.TrimSpace(other.PromptCodeActionRewriteUser) != "" {
+ a.PromptCodeActionRewriteUser = other.PromptCodeActionRewriteUser
+ }
+ if strings.TrimSpace(other.PromptCodeActionDiagnosticsUser) != "" {
+ a.PromptCodeActionDiagnosticsUser = other.PromptCodeActionDiagnosticsUser
+ }
+ if strings.TrimSpace(other.PromptCodeActionDocumentUser) != "" {
+ a.PromptCodeActionDocumentUser = other.PromptCodeActionDocumentUser
+ }
+ if strings.TrimSpace(other.PromptCodeActionGoTestSystem) != "" {
+ a.PromptCodeActionGoTestSystem = other.PromptCodeActionGoTestSystem
+ }
+ if strings.TrimSpace(other.PromptCodeActionGoTestUser) != "" {
+ a.PromptCodeActionGoTestUser = other.PromptCodeActionGoTestUser
+ }
+ // CLI
+ if strings.TrimSpace(other.PromptCLIDefaultSystem) != "" {
+ a.PromptCLIDefaultSystem = other.PromptCLIDefaultSystem
+ }
+ if strings.TrimSpace(other.PromptCLIExplainSystem) != "" {
+ a.PromptCLIExplainSystem = other.PromptCLIExplainSystem
+ }
+}
+
// mergeProviderFields merges per-provider configuration.
func (a *App) mergeProviderFields(other *App) {
if s := strings.TrimSpace(other.OpenAIBaseURL); s != "" {
diff --git a/internal/appconfig/config_test.go b/internal/appconfig/config_test.go
index bdf86da..65e6283 100644
--- a/internal/appconfig/config_test.go
+++ b/internal/appconfig/config_test.go
@@ -52,29 +52,44 @@ func TestLoad_Defaults_WithLogger_NoFile_NoEnv(t *testing.T) {
func TestLoad_FileMerge_And_EnvOverride(t *testing.T) {
dir := t.TempDir()
t.Setenv("XDG_CONFIG_HOME", dir)
- cfgPath := filepath.Join(dir, "hexai", "config.toml")
- // file configuration in TOML
- writeFile(t, cfgPath, `
+ cfgPath := filepath.Join(dir, "hexai", "config.toml")
+ // file configuration in TOML (sectioned)
+ writeFile(t, cfgPath, `
+[general]
max_tokens = 123
context_mode = "file-on-new-func"
context_window_lines = 50
max_context_tokens = 999
-log_preview_limit = 0
coding_temperature = 0.0
+
+[logging]
+log_preview_limit = 0
+
+[completion]
manual_invoke_min_prefix = 2
completion_debounce_ms = 150
completion_throttle_ms = 300
+
+[triggers]
trigger_characters = [".", ":"]
-provider = "openai"
-openai_base_url = "https://api.example"
-openai_model = "gpt-x"
-openai_temperature = 0.0
-ollama_base_url = "http://ollama"
-ollama_model = "llama"
-ollama_temperature = 0.0
-copilot_base_url = "http://copilot"
-copilot_model = "ghost"
-copilot_temperature = 0.0
+
+[provider]
+name = "openai"
+
+[openai]
+base_url = "https://api.example"
+model = "gpt-x"
+temperature = 0.0
+
+[ollama]
+base_url = "http://ollama"
+model = "llama"
+temperature = 0.0
+
+[copilot]
+base_url = "http://copilot"
+model = "ghost"
+temperature = 0.0
`)
// Env overrides take precedence
@@ -129,13 +144,13 @@ copilot_temperature = 0.0
t.Fatalf("copilot overrides not applied: %+v", cfg)
}
- // Ensure file values would have applied absent env
- // Spot-check: reset env and reload
- for _, k := range []string{
- "HEXAI_MAX_TOKENS", "HEXAI_CONTEXT_MODE", "HEXAI_CONTEXT_WINDOW_LINES", "HEXAI_MAX_CONTEXT_TOKENS", "HEXAI_LOG_PREVIEW_LIMIT", "HEXAI_CODING_TEMPERATURE", "HEXAI_MANUAL_INVOKE_MIN_PREFIX", "HEXAI_COMPLETION_DEBOUNCE_MS", "HEXAI_COMPLETION_THROTTLE_MS", "HEXAI_TRIGGER_CHARACTERS", "HEXAI_PROVIDER", "HEXAI_OPENAI_BASE_URL", "HEXAI_OPENAI_MODEL", "HEXAI_OPENAI_TEMPERATURE", "HEXAI_OLLAMA_BASE_URL", "HEXAI_OLLAMA_MODEL", "HEXAI_OLLAMA_TEMPERATURE", "HEXAI_COPILOT_BASE_URL", "HEXAI_COPILOT_MODEL", "HEXAI_COPILOT_TEMPERATURE",
- } {
- t.Setenv(k, "")
- }
+ // Ensure file values would have applied absent env
+ // Spot-check: reset env and reload
+ for _, k := range []string{
+ "HEXAI_MAX_TOKENS", "HEXAI_CONTEXT_MODE", "HEXAI_CONTEXT_WINDOW_LINES", "HEXAI_MAX_CONTEXT_TOKENS", "HEXAI_LOG_PREVIEW_LIMIT", "HEXAI_CODING_TEMPERATURE", "HEXAI_MANUAL_INVOKE_MIN_PREFIX", "HEXAI_COMPLETION_DEBOUNCE_MS", "HEXAI_COMPLETION_THROTTLE_MS", "HEXAI_TRIGGER_CHARACTERS", "HEXAI_PROVIDER", "HEXAI_OPENAI_BASE_URL", "HEXAI_OPENAI_MODEL", "HEXAI_OPENAI_TEMPERATURE", "HEXAI_OLLAMA_BASE_URL", "HEXAI_OLLAMA_MODEL", "HEXAI_OLLAMA_TEMPERATURE", "HEXAI_COPILOT_BASE_URL", "HEXAI_COPILOT_MODEL", "HEXAI_COPILOT_TEMPERATURE",
+ } {
+ t.Setenv(k, "")
+ }
cfg2 := Load(logger)
if cfg2.MaxTokens != 123 || cfg2.ContextMode != "file-on-new-func" || cfg2.ContextWindowLines != 50 || cfg2.MaxContextTokens != 999 || cfg2.LogPreviewLimit != 0 {
t.Fatalf("file merge not applied: %+v", cfg2)
@@ -175,3 +190,153 @@ func TestLoadFromFile_InvalidTOML(t *testing.T) {
t.Fatalf("expected error for invalid TOML")
}
}
+
+func TestLoad_FileTables_Sectioned(t *testing.T) {
+ dir := t.TempDir()
+ t.Setenv("XDG_CONFIG_HOME", dir)
+ cfgPath := filepath.Join(dir, "hexai", "config.toml")
+ content := `
+[general]
+max_tokens = 111
+context_mode = "window"
+context_window_lines = 42
+max_context_tokens = 777
+coding_temperature = 0.1
+
+[logging]
+log_preview_limit = 9
+
+[completion]
+completion_debounce_ms = 123
+completion_throttle_ms = 456
+manual_invoke_min_prefix = 3
+
+[triggers]
+trigger_characters = [".", ":"]
+
+[inline]
+inline_open = ">"
+inline_close = ">"
+
+[chat]
+chat_suffix = ">"
+chat_prefixes = ["?", "!"]
+
+[provider]
+name = "openai"
+
+[openai]
+model = "gpt-x"
+base_url = "https://api.example"
+temperature = 0.0
+
+[ollama]
+model = "mistral"
+base_url = "http://ollama"
+temperature = 0.0
+
+[copilot]
+model = "ghost"
+base_url = "http://copilot"
+temperature = 0.0
+`
+ writeFile(t, cfgPath, content)
+
+ // Ensure no env override interferes with manual_invoke_min_prefix in this test
+ t.Setenv("HEXAI_MANUAL_INVOKE_MIN_PREFIX", "")
+ logger := newLogger()
+ cfg := Load(logger)
+
+ if cfg.MaxTokens != 111 || cfg.ContextMode != "window" || cfg.ContextWindowLines != 42 || cfg.MaxContextTokens != 777 {
+ t.Fatalf("sectioned basics wrong: %+v", cfg)
+ }
+ if cfg.LogPreviewLimit != 9 || cfg.CompletionDebounceMs != 123 || cfg.CompletionThrottleMs != 456 || cfg.ManualInvokeMinPrefix != 3 {
+ t.Fatalf("sectioned ints wrong: %+v", cfg)
+ }
+ if cfg.CodingTemperature == nil || *cfg.CodingTemperature != 0.1 {
+ t.Fatalf("sectioned coding_temperature wrong: %+v", cfg.CodingTemperature)
+ }
+ if want := []string{".", ":"}; !reflect.DeepEqual(cfg.TriggerCharacters, want) {
+ t.Fatalf("sectioned trigger chars wrong: got %v", cfg.TriggerCharacters)
+ }
+ if cfg.Provider != "openai" {
+ t.Fatalf("sectioned provider name wrong: %q", cfg.Provider)
+ }
+ if cfg.OpenAIModel != "gpt-x" || cfg.OpenAIBaseURL != "https://api.example" || cfg.OpenAITemperature == nil || *cfg.OpenAITemperature != 0.0 {
+ t.Fatalf("sectioned openai wrong: %+v", cfg)
+ }
+ if cfg.OllamaModel != "mistral" || cfg.OllamaBaseURL != "http://ollama" || cfg.OllamaTemperature == nil || *cfg.OllamaTemperature != 0.0 {
+ t.Fatalf("sectioned ollama wrong: %+v", cfg)
+ }
+ if cfg.CopilotModel != "ghost" || cfg.CopilotBaseURL != "http://copilot" || cfg.CopilotTemperature == nil || *cfg.CopilotTemperature != 0.0 {
+ t.Fatalf("sectioned copilot wrong: %+v", cfg)
+ }
+}
+
+func TestLoad_FileTables_Prompts_AllSections(t *testing.T) {
+ dir := t.TempDir()
+ t.Setenv("XDG_CONFIG_HOME", dir)
+ cfgPath := filepath.Join(dir, "hexai", "config.toml")
+ content := `
+[prompts.completion]
+system_general = "SYS-GENERAL"
+system_params = "SYS-PARAMS"
+system_inline = "SYS-INLINE"
+user_general = "USER-GENERAL {{file}} {{char}}"
+user_params = "USER-PARAMS {{function}}"
+additional_context = "EXTRA {{context}}"
+
+[prompts.provider_native]
+completion = "NATIVE {{path}} {{before}}"
+
+[prompts.chat]
+system = "CHAT-SYS"
+
+[prompts.code_action]
+rewrite_system = "REWRITE-SYS"
+diagnostics_system = "DIAG-SYS"
+document_system = "DOC-SYS"
+rewrite_user = "REWRITE-USER {{instruction}} {{selection}}"
+diagnostics_user = "DIAG-USER {{diagnostics}} {{selection}}"
+document_user = "DOC-USER {{selection}}"
+go_test_system = "GOTEST-SYS"
+go_test_user = "GOTEST-USER {{function}}"
+
+[prompts.cli]
+default_system = "CLI-DEFAULT"
+explain_system = "CLI-EXPLAIN"
+`
+ writeFile(t, cfgPath, content)
+
+ cfg := Load(newLogger())
+
+ // completion
+ if cfg.PromptCompletionSystemGeneral != "SYS-GENERAL" || cfg.PromptCompletionSystemParams != "SYS-PARAMS" || cfg.PromptCompletionSystemInline != "SYS-INLINE" {
+ t.Fatalf("completion system prompts wrong: %+v", cfg)
+ }
+ if cfg.PromptCompletionUserGeneral == "" || cfg.PromptCompletionUserParams == "" || cfg.PromptCompletionExtraHeader == "" {
+ t.Fatalf("completion user/extra prompts not loaded")
+ }
+ // provider-native
+ if cfg.PromptNativeCompletion != "NATIVE {{path}} {{before}}" {
+ t.Fatalf("provider-native prompt wrong: %q", cfg.PromptNativeCompletion)
+ }
+ // chat
+ if cfg.PromptChatSystem != "CHAT-SYS" {
+ t.Fatalf("chat system wrong: %q", cfg.PromptChatSystem)
+ }
+ // code action
+ if cfg.PromptCodeActionRewriteSystem != "REWRITE-SYS" || cfg.PromptCodeActionDiagnosticsSystem != "DIAG-SYS" || cfg.PromptCodeActionDocumentSystem != "DOC-SYS" {
+ t.Fatalf("code action system prompts wrong")
+ }
+ if cfg.PromptCodeActionRewriteUser == "" || cfg.PromptCodeActionDiagnosticsUser == "" || cfg.PromptCodeActionDocumentUser == "" {
+ t.Fatalf("code action user prompts not loaded")
+ }
+ if cfg.PromptCodeActionGoTestSystem != "GOTEST-SYS" || cfg.PromptCodeActionGoTestUser == "" {
+ t.Fatalf("go test prompts wrong")
+ }
+ // CLI
+ if cfg.PromptCLIDefaultSystem != "CLI-DEFAULT" || cfg.PromptCLIExplainSystem != "CLI-EXPLAIN" {
+ t.Fatalf("cli prompts wrong: %q %q", cfg.PromptCLIDefaultSystem, cfg.PromptCLIExplainSystem)
+ }
+}
diff --git a/internal/hexaicli/run.go b/internal/hexaicli/run.go
index 54cb3ff..ca561bb 100644
--- a/internal/hexaicli/run.go
+++ b/internal/hexaicli/run.go
@@ -23,13 +23,24 @@ func Run(ctx context.Context, args []string, stdin io.Reader, stdout, stderr io.
// Load configuration with a logger so file-based config is respected.
logger := log.New(stderr, "hexai ", log.LstdFlags|log.Lmsgprefix)
cfg := appconfig.Load(logger)
- client, err := newClientFromConfig(cfg)
- if err != nil {
- fmt.Fprintf(stderr, logging.AnsiBase+"hexai: LLM disabled: %v"+logging.AnsiReset+"\n", err)
- return err
- }
-
- return RunWithClient(ctx, args, stdin, stdout, stderr, client)
+ client, err := newClientFromConfig(cfg)
+ if err != nil {
+ fmt.Fprintf(stderr, logging.AnsiBase+"hexai: LLM disabled: %v"+logging.AnsiReset+"\n", err)
+ return err
+ }
+ // Inline the flow here to use configured CLI prompts.
+ input, rerr := readInput(stdin, args)
+ if rerr != nil {
+ fmt.Fprintln(stderr, logging.AnsiBase+rerr.Error()+logging.AnsiReset)
+ return rerr
+ }
+ printProviderInfo(stderr, client)
+ msgs := buildMessagesFromConfig(cfg, input)
+ if err := runChat(ctx, client, msgs, input, stdout, stderr); err != nil {
+ fmt.Fprintf(stderr, logging.AnsiBase+"hexai: error: %v"+logging.AnsiReset+"\n", err)
+ return err
+ }
+ return nil
}
// RunWithClient executes the CLI flow using an already-constructed client.
@@ -41,7 +52,7 @@ func RunWithClient(ctx context.Context, args []string, stdin io.Reader, stdout,
return err
}
printProviderInfo(stderr, client)
- msgs := buildMessages(input)
+ msgs := buildMessages(input)
if err := runChat(ctx, client, msgs, input, stdout, stderr); err != nil {
fmt.Fprintf(stderr, logging.AnsiBase+"hexai: error: %v"+logging.AnsiReset+"\n", err)
return err
@@ -109,6 +120,21 @@ func buildMessages(input string) []llm.Message {
}
}
+// buildMessagesFromConfig uses configured CLI system prompts.
+func buildMessagesFromConfig(cfg appconfig.App, input string) []llm.Message {
+ lower := strings.ToLower(input)
+ system := cfg.PromptCLIDefaultSystem
+ if strings.Contains(lower, "explain") {
+ if strings.TrimSpace(cfg.PromptCLIExplainSystem) != "" {
+ system = cfg.PromptCLIExplainSystem
+ }
+ }
+ return []llm.Message{
+ {Role: "system", Content: system},
+ {Role: "user", Content: input},
+ }
+}
+
// runChat executes the chat request, handling streaming and summary output.
func runChat(ctx context.Context, client llm.Client, msgs []llm.Message, input string, out io.Writer, errw io.Writer) error {
start := time.Now()
diff --git a/internal/hexailsp/run.go b/internal/hexailsp/run.go
index a1be5aa..9a69e51 100644
--- a/internal/hexailsp/run.go
+++ b/internal/hexailsp/run.go
@@ -106,21 +106,39 @@ func ensureFactory(factory ServerFactory) ServerFactory {
}
func makeServerOptions(cfg appconfig.App, logContext bool, client llm.Client) lsp.ServerOptions {
- return lsp.ServerOptions{
- LogContext: logContext,
- MaxTokens: cfg.MaxTokens,
- ContextMode: cfg.ContextMode,
- WindowLines: cfg.ContextWindowLines,
- MaxContextTokens: cfg.MaxContextTokens,
- CodingTemperature: cfg.CodingTemperature,
- Client: client,
- TriggerCharacters: cfg.TriggerCharacters,
- ManualInvokeMinPrefix: cfg.ManualInvokeMinPrefix,
- CompletionDebounceMs: cfg.CompletionDebounceMs,
- CompletionThrottleMs: cfg.CompletionThrottleMs,
- InlineOpen: cfg.InlineOpen,
- InlineClose: cfg.InlineClose,
- ChatSuffix: cfg.ChatSuffix,
- ChatPrefixes: cfg.ChatPrefixes,
- }
+ return lsp.ServerOptions{
+ LogContext: logContext,
+ MaxTokens: cfg.MaxTokens,
+ ContextMode: cfg.ContextMode,
+ WindowLines: cfg.ContextWindowLines,
+ MaxContextTokens: cfg.MaxContextTokens,
+ CodingTemperature: cfg.CodingTemperature,
+ Client: client,
+ TriggerCharacters: cfg.TriggerCharacters,
+ ManualInvokeMinPrefix: cfg.ManualInvokeMinPrefix,
+ CompletionDebounceMs: cfg.CompletionDebounceMs,
+ CompletionThrottleMs: cfg.CompletionThrottleMs,
+ InlineOpen: cfg.InlineOpen,
+ InlineClose: cfg.InlineClose,
+ ChatSuffix: cfg.ChatSuffix,
+ ChatPrefixes: cfg.ChatPrefixes,
+
+ // Prompts
+ PromptCompSysGeneral: cfg.PromptCompletionSystemGeneral,
+ PromptCompSysParams: cfg.PromptCompletionSystemParams,
+ PromptCompSysInline: cfg.PromptCompletionSystemInline,
+ PromptCompUserGeneral: cfg.PromptCompletionUserGeneral,
+ PromptCompUserParams: cfg.PromptCompletionUserParams,
+ PromptCompExtraHeader: cfg.PromptCompletionExtraHeader,
+ PromptNativeCompletion: cfg.PromptNativeCompletion,
+ PromptChatSystem: cfg.PromptChatSystem,
+ PromptRewriteSystem: cfg.PromptCodeActionRewriteSystem,
+ PromptDiagnosticsSystem: cfg.PromptCodeActionDiagnosticsSystem,
+ PromptDocumentSystem: cfg.PromptCodeActionDocumentSystem,
+ PromptRewriteUser: cfg.PromptCodeActionRewriteUser,
+ PromptDiagnosticsUser: cfg.PromptCodeActionDiagnosticsUser,
+ PromptDocumentUser: cfg.PromptCodeActionDocumentUser,
+ PromptGoTestSystem: cfg.PromptCodeActionGoTestSystem,
+ PromptGoTestUser: cfg.PromptCodeActionGoTestUser,
+ }
}
diff --git a/internal/lsp/build_prompts_table_test.go b/internal/lsp/build_prompts_table_test.go
index 7e8e5e7..06a3743 100644
--- a/internal/lsp/build_prompts_table_test.go
+++ b/internal/lsp/build_prompts_table_test.go
@@ -3,18 +3,22 @@ package lsp
import "testing"
func TestBuildPrompts_Table(t *testing.T) {
- p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: "file:///x.go"}, Position: Position{Line: 5, Character: 7}}
- cases := []struct {
- name string
- inParams bool
- }{
- {"generic", false},
- {"in_params", true},
- }
- for _, c := range cases {
- sys, user := buildPrompts(c.inParams, p, "above", "current", "below", "func ctx")
- if sys == "" || user == "" {
- t.Fatalf("%s: prompts empty", c.name)
- }
- }
+ p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: "file:///x.go"}, Position: Position{Line: 5, Character: 7}}
+ cases := []struct {
+ name string
+ inParams bool
+ }{
+ {"generic", false},
+ {"in_params", true},
+ }
+ for _, c := range cases {
+ s := newTestServer()
+ msgs := s.buildCompletionMessages(false, false, "", c.inParams, p, "above", "current", "below", "func ctx")
+ if len(msgs) < 2 || msgs[0].Role != "system" || msgs[1].Role != "user" {
+ t.Fatalf("%s: unexpected messages", c.name)
+ }
+ if msgs[0].Content == "" || msgs[1].Content == "" {
+ t.Fatalf("%s: prompts empty", c.name)
+ }
+ }
}
diff --git a/internal/lsp/chat_prompt_test.go b/internal/lsp/chat_prompt_test.go
new file mode 100644
index 0000000..f0f5446
--- /dev/null
+++ b/internal/lsp/chat_prompt_test.go
@@ -0,0 +1,36 @@
+package lsp
+
+import (
+ "bytes"
+ "testing"
+ "time"
+)
+
+func TestDetectAndHandleChat_UsesConfiguredSystemPrompt(t *testing.T) {
+ s := newTestServer()
+ cap := &captureLLM{}
+ s.llmClient = cap
+ s.promptChatSystem = "CHAT-SYS"
+ uri := "file:///chat.txt"
+ // Avoid nil writer in applyChatEdits
+ var out bytes.Buffer
+ s.out = &out
+ // Line that should trigger chat: ends with '>' and previous char in prefixes
+ s.setDocument(uri, "help?>\n")
+ s.detectAndHandleChat(uri)
+ // Wait briefly for async goroutine to call Chat
+ for i := 0; i < 20 && len(cap.msgs) == 0; i++ {
+ time.Sleep(10 * time.Millisecond)
+ }
+ if len(cap.msgs) == 0 {
+ t.Fatalf("expected Chat to be called")
+ }
+ if cap.msgs[0].Role != "system" || cap.msgs[0].Content != "CHAT-SYS" {
+ t.Fatalf("unexpected system msg: %+v", cap.msgs[0])
+ }
+ // Last should be user with prompt without trailing '>'
+ last := cap.msgs[len(cap.msgs)-1]
+ if last.Role != "user" || last.Content != "help?" {
+ t.Fatalf("unexpected last user msg: %+v", last)
+ }
+}
diff --git a/internal/lsp/codeaction_prompts_test.go b/internal/lsp/codeaction_prompts_test.go
new file mode 100644
index 0000000..6b2ce8c
--- /dev/null
+++ b/internal/lsp/codeaction_prompts_test.go
@@ -0,0 +1,102 @@
+package lsp
+
+import (
+ "encoding/json"
+ "testing"
+)
+
+func TestResolveCodeAction_UsesRewritePrompts(t *testing.T) {
+ s := newTestServer()
+ cap := &captureLLM{}
+ s.llmClient = cap
+ s.promptRewriteSystem = "RSYS"
+ s.promptRewriteUser = "RUSER {{instruction}} {{selection}}"
+ uri := "file:///x.go"
+ s.setDocument(uri, "package p\nvar a=1\n")
+ payload := struct {
+ Type string `json:"type"`
+ URI string `json:"uri"`
+ Range Range `json:"range"`
+ Instruction string `json:"instruction"`
+ Selection string `json:"selection"`
+ }{Type: "rewrite", URI: uri, Range: Range{Start: Position{Line: 1}, End: Position{Line: 1, Character: 5}}, Instruction: "do it", Selection: "var a"}
+ raw, _ := json.Marshal(payload)
+ ca := CodeAction{Title: "Hexai: rewrite selection", Data: raw}
+ _, _ = s.resolveCodeAction(ca)
+ if len(cap.msgs) < 2 {
+ t.Fatalf("expected chat messages")
+ }
+ if cap.msgs[0].Content != "RSYS" || cap.msgs[1].Role != "user" || cap.msgs[1].Content != "RUSER do it var a" {
+ t.Fatalf("unexpected rewrite prompts: %#v", cap.msgs)
+ }
+}
+
+func TestResolveCodeAction_UsesDiagnosticsPrompts(t *testing.T) {
+ s := newTestServer()
+ cap := &captureLLM{}
+ s.llmClient = cap
+ s.promptDiagnosticsSystem = "DSYS"
+ s.promptDiagnosticsUser = "DUSER {{diagnostics}} {{selection}}"
+ uri := "file:///x.go"
+ s.setDocument(uri, "package p\nvar a=1\n")
+ payload := struct {
+ Type string `json:"type"`
+ URI string `json:"uri"`
+ Range Range `json:"range"`
+ Selection string `json:"selection"`
+ Diagnostics []Diagnostic `json:"diagnostics"`
+ }{Type: "diagnostics", URI: uri, Range: Range{Start: Position{Line: 1}}, Selection: "var a", Diagnostics: []Diagnostic{{Message: "oops1"}, {Message: "oops2"}}}
+ raw, _ := json.Marshal(payload)
+ ca := CodeAction{Title: "Hexai: resolve diagnostics", Data: raw}
+ _, _ = s.resolveCodeAction(ca)
+ if len(cap.msgs) < 2 {
+ t.Fatalf("expected chat messages")
+ }
+ if cap.msgs[0].Content != "DSYS" || cap.msgs[1].Role != "user" {
+ t.Fatalf("unexpected diagnostics prompts: %#v", cap.msgs)
+ }
+ if got := cap.msgs[1].Content; !(contains(got, "oops1") && contains(got, "oops2") && contains(got, "var a")) {
+ t.Fatalf("diagnostics/user content mismatch: %q", got)
+ }
+}
+
+func TestResolveCodeAction_UsesDocumentPrompts(t *testing.T) {
+ s := newTestServer()
+ cap := &captureLLM{}
+ s.llmClient = cap
+ s.promptDocumentSystem = "DOCSYS"
+ s.promptDocumentUser = "DOCUSER {{selection}}"
+ uri := "file:///x.go"
+ s.setDocument(uri, "package p\nvar a=1\n")
+ payload := struct {
+ Type string `json:"type"`
+ URI string `json:"uri"`
+ Range Range `json:"range"`
+ Selection string `json:"selection"`
+ }{Type: "document", URI: uri, Range: Range{Start: Position{Line: 1}}, Selection: "var a"}
+ raw, _ := json.Marshal(payload)
+ ca := CodeAction{Title: "Hexai: document selection", Data: raw}
+ _, _ = s.resolveCodeAction(ca)
+ if len(cap.msgs) < 2 {
+ t.Fatalf("expected chat messages")
+ }
+ if cap.msgs[0].Content != "DOCSYS" || cap.msgs[1].Content != "DOCUSER var a" {
+ t.Fatalf("unexpected document prompts: %#v", cap.msgs)
+ }
+}
+
+func TestGenerateGoTest_UsesPrompts(t *testing.T) {
+ s := newTestServer()
+ cap := &captureLLM{}
+ s.llmClient = cap
+ s.promptGoTestSystem = "GTSYS"
+ s.promptGoTestUser = "GTUSER {{function}}"
+ _ = s.generateGoTestFunction("func Add(a,b int) int {return a+b}")
+ if len(cap.msgs) < 2 {
+ t.Fatalf("expected chat messages")
+ }
+ if cap.msgs[0].Content != "GTSYS" || !contains(cap.msgs[1].Content, "func Add") {
+ t.Fatalf("unexpected gotest prompts: %#v", cap.msgs)
+ }
+}
+
diff --git a/internal/lsp/completion_messages_test.go b/internal/lsp/completion_messages_test.go
index 28908d5..37d4a8d 100644
--- a/internal/lsp/completion_messages_test.go
+++ b/internal/lsp/completion_messages_test.go
@@ -58,12 +58,16 @@ func TestBuildDocString_Contents(t *testing.T) {
}
}
-func TestBuildPrompts_InParams(t *testing.T) {
- p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: "file:///x"}, Position: Position{Line: 0, Character: 5}}
- sys, user := buildPrompts(true, p, "a", "func f(x)", "c", "func f(x)")
- if !contains(sys, "function signatures") || !contains(user, "parameter list") {
- t.Fatalf("unexpected in-params prompts")
- }
+func TestBuildCompletionMessages_InParams_UsesParamPrompts(t *testing.T) {
+ s := newTestServer()
+ p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: "file:///x"}, Position: Position{Line: 0, Character: 5}}
+ msgs := s.buildCompletionMessages(false, false, "", true, p, "a", "func f(x)", "c", "func f(x)")
+ if len(msgs) < 2 || msgs[0].Role != "system" || msgs[1].Role != "user" {
+ t.Fatalf("unexpected messages")
+ }
+ if !contains(msgs[0].Content, "function signatures") || !contains(msgs[1].Content, "parameter list") {
+ t.Fatalf("unexpected in-params prompts: %#v", msgs)
+ }
}
func TestPostProcessCompletion_CodeFencesAndDuplicates(t *testing.T) {
diff --git a/internal/lsp/document_test.go b/internal/lsp/document_test.go
index 00e4548..c8b6e2e 100644
--- a/internal/lsp/document_test.go
+++ b/internal/lsp/document_test.go
@@ -9,15 +9,32 @@ import (
)
func newTestServer() *Server {
- s := &Server{
- logger: log.New(io.Discard, "", 0),
- docs: make(map[string]*document),
- inlineOpen: ">",
- inlineClose: ">",
- chatSuffix: ">",
- chatPrefixes: []string{"?", "!", ":", ";"},
- }
- // Keep package-level helpers in sync for tests using free functions
+ s := &Server{
+ logger: log.New(io.Discard, "", 0),
+ docs: make(map[string]*document),
+ inlineOpen: ">",
+ inlineClose: ">",
+ chatSuffix: ">",
+ chatPrefixes: []string{"?", "!", ":", ";"},
+ }
+ // Default prompt templates (mirror app defaults)
+ s.promptCompSysParams = "You are a code completion engine for function signatures. Return only the parameter list contents (without parentheses), no braces, no prose. Prefer idiomatic names and types."
+ s.promptCompUserParams = "Cursor is inside the function parameter list. Suggest only the parameter list (no parentheses).\nFunction line: {{function}}\nCurrent line (cursor at {{char}}): {{current}}"
+ s.promptCompSysGeneral = "You are a terse code completion engine. Return only the code to insert, no surrounding prose or backticks. Only continue from the cursor; never repeat characters already present to the left of the cursor on the current line (e.g., if 'name :=' is already typed, only return the right-hand side expression)."
+ s.promptCompUserGeneral = "Provide the next likely code to insert at the cursor.\nFile: {{file}}\nFunction/context: {{function}}\nAbove line: {{above}}\nCurrent line (cursor at character {{char}}): {{current}}\nBelow line: {{below}}\nOnly return the completion snippet."
+ s.promptCompSysInline = "You are a precise code completion/refactoring engine. Output only the code to insert with no prose, no comments, and no backticks. Return raw code only."
+ s.promptCompExtraHeader = "Additional context:\n{{context}}"
+ s.promptNativeCompletion = "// Path: {{path}}\n{{before}}"
+ s.promptChatSystem = "You are a helpful coding assistant. Answer concisely and clearly."
+ s.promptRewriteSystem = "You are a precise code refactoring engine. Rewrite the given code strictly according to the instruction. Return only the updated code with no prose or backticks. Preserve formatting where reasonable."
+ s.promptDiagnosticsSystem = "You are a precise code fixer. Resolve the given diagnostics by editing only the selected code. Return only the corrected code with no prose or backticks. Keep behavior and style, and avoid unrelated changes."
+ s.promptDocumentSystem = "You are a precise code documentation engine. Add idiomatic documentation comments to the given code. Preserve exact behavior and formatting as much as possible. Return only the updated code with comments, no prose or backticks."
+ s.promptRewriteUser = "Instruction: {{instruction}}\n\nSelected code to transform:\n{{selection}}"
+ s.promptDiagnosticsUser = "Diagnostics to resolve (selection only):\n{{diagnostics}}\n\nSelected code:\n{{selection}}"
+ s.promptDocumentUser = "Add documentation comments to this code:\n{{selection}}"
+ s.promptGoTestSystem = "You are a precise Go unit test generator. Given a Go function, write one or more Test* functions using the testing package. Do NOT include package or imports, only the test function(s). Prefer table-driven tests. Keep it minimal and idiomatic."
+ s.promptGoTestUser = "Function under test:\n{{function}}"
+ // Keep package-level helpers in sync for tests using free functions
inlineOpenChar = '>'
inlineCloseChar = '>'
chatSuffixChar = '>'
diff --git a/internal/lsp/handlers_codeaction.go b/internal/lsp/handlers_codeaction.go
index 27020a0..762190f 100644
--- a/internal/lsp/handlers_codeaction.go
+++ b/internal/lsp/handlers_codeaction.go
@@ -98,12 +98,12 @@ func (s *Server) resolveCodeAction(ca CodeAction) (CodeAction, bool) {
return ca, false
}
switch payload.Type {
- case "rewrite":
- sys := "You are a precise code refactoring engine. Rewrite the given code strictly according to the instruction. Return only the updated code with no prose or backticks. Preserve formatting where reasonable."
- user := fmt.Sprintf("Instruction: %s\n\nSelected code to transform:\n%s", payload.Instruction, payload.Selection)
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
+ case "rewrite":
+ sys := s.promptRewriteSystem
+ user := renderTemplate(s.promptRewriteUser, map[string]string{"instruction": payload.Instruction, "selection": payload.Selection})
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer cancel()
+ messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
opts := s.llmRequestOpts()
if text, err := s.llmClient.Chat(ctx, messages, opts...); err == nil {
if out := stripCodeFences(strings.TrimSpace(text)); out != "" {
@@ -114,38 +114,37 @@ func (s *Server) resolveCodeAction(ca CodeAction) (CodeAction, bool) {
} else {
logging.Logf("lsp ", "codeAction rewrite llm error: %v", err)
}
- case "diagnostics":
- sys := "You are a precise code fixer. Resolve the given diagnostics by editing only the selected code. Return only the corrected code with no prose or backticks. Keep behavior and style, and avoid unrelated changes."
- var b strings.Builder
- b.WriteString("Diagnostics to resolve (selection only):\n")
- for i, dgn := range payload.Diagnostics {
- if dgn.Source != "" {
- fmt.Fprintf(&b, "%d. [%s] %s\n", i+1, dgn.Source, dgn.Message)
- } else {
- fmt.Fprintf(&b, "%d. %s\n", i+1, dgn.Message)
- }
- }
- b.WriteString("\nSelected code:\n")
- b.WriteString(payload.Selection)
- ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second)
- defer cancel()
- messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: b.String()}}
- opts := s.llmRequestOpts()
- if text, err := s.llmClient.Chat(ctx, messages, opts...); err == nil {
- if out := stripCodeFences(strings.TrimSpace(text)); out != "" {
- edit := WorkspaceEdit{Changes: map[string][]TextEdit{payload.URI: {{Range: payload.Range, NewText: out}}}}
- ca.Edit = &edit
- return ca, true
- }
- } else {
- logging.Logf("lsp ", "codeAction diagnostics llm error: %v", err)
- }
- case "document":
- sys := "You are a precise code documentation engine. Add idiomatic documentation comments to the given code. Preserve exact behavior and formatting as much as possible. Return only the updated code with comments, no prose or backticks."
- user := "Add documentation comments to this code:\n" + payload.Selection
- ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
- defer cancel()
- messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
+ case "diagnostics":
+ sys := s.promptDiagnosticsSystem
+ var b strings.Builder
+ for i, dgn := range payload.Diagnostics {
+ if dgn.Source != "" {
+ fmt.Fprintf(&b, "%d. [%s] %s\n", i+1, dgn.Source, dgn.Message)
+ } else {
+ fmt.Fprintf(&b, "%d. %s\n", i+1, dgn.Message)
+ }
+ }
+ diagList := b.String()
+ user := renderTemplate(s.promptDiagnosticsUser, map[string]string{"diagnostics": diagList, "selection": payload.Selection})
+ ctx, cancel := context.WithTimeout(context.Background(), 12*time.Second)
+ defer cancel()
+ messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
+ opts := s.llmRequestOpts()
+ if text, err := s.llmClient.Chat(ctx, messages, opts...); err == nil {
+ if out := stripCodeFences(strings.TrimSpace(text)); out != "" {
+ edit := WorkspaceEdit{Changes: map[string][]TextEdit{payload.URI: {{Range: payload.Range, NewText: out}}}}
+ ca.Edit = &edit
+ return ca, true
+ }
+ } else {
+ logging.Logf("lsp ", "codeAction diagnostics llm error: %v", err)
+ }
+ case "document":
+ sys := s.promptDocumentSystem
+ user := renderTemplate(s.promptDocumentUser, map[string]string{"selection": payload.Selection})
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer cancel()
+ messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
opts := s.llmRequestOpts()
if text, err := s.llmClient.Chat(ctx, messages, opts...); err == nil {
if out := stripCodeFences(strings.TrimSpace(text)); out != "" {
@@ -467,13 +466,13 @@ func findGoFunctionAtLine(lines []string, idx int) (int, int) {
// generateGoTestFunction uses LLM to produce a test function; falls back to a stub when unavailable.
func (s *Server) generateGoTestFunction(funcCode string) string {
- if s.llmClient != nil {
- sys := "You are a precise Go unit test generator. Given a Go function, write one or more Test* functions using the testing package. Do NOT include package or imports, only the test function(s). Prefer table-driven tests. Keep it minimal and idiomatic."
- user := "Function under test:\n" + funcCode
- ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second)
- defer cancel()
- messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
- opts := s.llmRequestOpts()
+ if s.llmClient != nil {
+ sys := s.promptGoTestSystem
+ user := renderTemplate(s.promptGoTestUser, map[string]string{"function": funcCode})
+ ctx, cancel := context.WithTimeout(context.Background(), 8*time.Second)
+ defer cancel()
+ messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
+ opts := s.llmRequestOpts()
if out, err := s.llmClient.Chat(ctx, messages, opts...); err == nil {
cleaned := strings.TrimSpace(stripCodeFences(out))
if cleaned != "" {
diff --git a/internal/lsp/handlers_completion.go b/internal/lsp/handlers_completion.go
index c6b7d3d..0d48bc0 100644
--- a/internal/lsp/handlers_completion.go
+++ b/internal/lsp/handlers_completion.go
@@ -225,9 +225,13 @@ func (s *Server) tryProviderNativeCompletion(current string, p CompletionParams,
if !ok {
return nil, false
}
- before, after := s.docBeforeAfter(p.TextDocument.URI, p.Position)
- path := strings.TrimPrefix(p.TextDocument.URI, "file://")
- prompt := "// Path: " + path + "\n" + before
+ before, after := s.docBeforeAfter(p.TextDocument.URI, p.Position)
+ path := strings.TrimPrefix(p.TextDocument.URI, "file://")
+ // Build provider-native prompt from template
+ prompt := renderTemplate(s.promptNativeCompletion, map[string]string{
+ "path": path,
+ "before": before,
+ })
lang := ""
temp := 0.0
if s.codingTemperature != nil {
@@ -336,18 +340,34 @@ func (s *Server) waitForThrottle(ctx context.Context) bool {
// 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 {
- sysPrompt, userPrompt := buildPrompts(inParams, p, above, current, below, funcCtx)
- messages := []llm.Message{
- {Role: "system", Content: sysPrompt},
- {Role: "user", Content: userPrompt},
- }
- if hasExtra && extraText != "" {
- messages = append(messages, llm.Message{Role: "user", Content: "Additional context:\n" + extraText})
- }
- if inlinePrompt {
- messages[0].Content = "You are a precise code completion/refactoring engine. Output only the code to insert with no prose, no comments, and no backticks. Return raw code only."
- }
- return messages
+ // Vars for templates
+ vars := map[string]string{
+ "file": p.TextDocument.URI,
+ "function": funcCtx,
+ "above": above,
+ "current": current,
+ "below": below,
+ "char": fmt.Sprintf("%d", p.Position.Character),
+ }
+ sys := s.promptCompSysGeneral
+ userTpl := s.promptCompUserGeneral
+ if inParams {
+ sys = s.promptCompSysParams
+ userTpl = s.promptCompUserParams
+ }
+ if inlinePrompt && strings.TrimSpace(s.promptCompSysInline) != "" {
+ sys = s.promptCompSysInline
+ }
+ user := renderTemplate(userTpl, vars)
+ messages := []llm.Message{{Role: "system", Content: sys}, {Role: "user", Content: user}}
+ if hasExtra && strings.TrimSpace(extraText) != "" {
+ extra := renderTemplate(s.promptCompExtraHeader, map[string]string{"context": extraText})
+ if strings.TrimSpace(extra) == "" {
+ extra = extraText
+ }
+ messages = append(messages, llm.Message{Role: "user", Content: extra})
+ }
+ return messages
}
// postProcessCompletion normalizes and deduplicates completion text and applies indentation rules.
diff --git a/internal/lsp/handlers_document.go b/internal/lsp/handlers_document.go
index 6a90919..26b78c0 100644
--- a/internal/lsp/handlers_document.go
+++ b/internal/lsp/handlers_document.go
@@ -156,9 +156,9 @@ func (s *Server) detectAndHandleChat(uri string) {
go func(prompt string, remove int) {
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel()
- sys := "You are a helpful coding assistant. Answer concisely and clearly."
- // Build short conversation history from the document above this line
- history := s.buildChatHistory(uri, lineIdx, prompt)
+ sys := s.promptChatSystem
+ // Build short conversation history from the document above this line
+ history := s.buildChatHistory(uri, lineIdx, prompt)
msgs := append([]llm.Message{{Role: "system", Content: sys}}, history...)
opts := s.llmRequestOpts()
logging.Logf("lsp ", "chat llm=requesting model=%s", s.llmClient.DefaultModel())
diff --git a/internal/lsp/handlers_utils.go b/internal/lsp/handlers_utils.go
index 30a21a5..eafd058 100644
--- a/internal/lsp/handlers_utils.go
+++ b/internal/lsp/handlers_utils.go
@@ -2,12 +2,11 @@
package lsp
import (
- "fmt"
- "strings"
- "time"
+ "strings"
+ "time"
- "codeberg.org/snonux/hexai/internal/llm"
- "codeberg.org/snonux/hexai/internal/logging"
+ "codeberg.org/snonux/hexai/internal/llm"
+ "codeberg.org/snonux/hexai/internal/logging"
)
// Configurable inline trigger characters (default to '>') used by free helpers below.
@@ -73,15 +72,17 @@ func inParamList(current string, cursor int) bool {
return open >= 0 && cursor > open && (close == -1 || cursor <= close)
}
-func buildPrompts(inParams bool, p CompletionParams, above, current, below, funcCtx string) (string, string) {
- if inParams {
- sys := "You are a code completion engine for function signatures. Return only the parameter list contents (without parentheses), no braces, no prose. Prefer idiomatic names and types."
- user := fmt.Sprintf("Cursor is inside the function parameter list. Suggest only the parameter list (no parentheses).\nFunction line: %s\nCurrent line (cursor at %d): %s", funcCtx, p.Position.Character, current)
- return sys, user
- }
- sys := "You are a terse code completion engine. Return only the code to insert, no surrounding prose or backticks. Only continue from the cursor; never repeat characters already present to the left of the cursor on the current line (e.g., if 'name :=' is already typed, only return the right-hand side expression)."
- user := fmt.Sprintf("Provide the next likely code to insert at the cursor.\nFile: %s\nFunction/context: %s\nAbove line: %s\nCurrent line (cursor at character %d): %s\nBelow line: %s\nOnly return the completion snippet.", p.TextDocument.URI, funcCtx, above, p.Position.Character, current, below)
- return sys, user
+// renderTemplate performs simple {{var}} replacement in a template string.
+func renderTemplate(t string, vars map[string]string) string {
+ if t == "" {
+ return t
+ }
+ out := t
+ for k, v := range vars {
+ placeholder := "{{" + k + "}}"
+ out = strings.ReplaceAll(out, placeholder, v)
+ }
+ return out
}
func computeTextEditAndFilter(cleaned string, inParams bool, current string, p CompletionParams) (*TextEdit, string) {
diff --git a/internal/lsp/helpers_more_test.go b/internal/lsp/helpers_more_test.go
index a0b0c26..1bd56d0 100644
--- a/internal/lsp/helpers_more_test.go
+++ b/internal/lsp/helpers_more_test.go
@@ -101,16 +101,17 @@ func TestCollectPromptRemovalEdits_MultiLine(t *testing.T) {
}
}
-func TestInParamListAndBuildPrompts(t *testing.T) {
- cur := "func add(a int, b string) int"
- if !inParamList(cur, 12) {
- t.Fatalf("expected in param list")
- }
- p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: "file:///x.go"}, Position: Position{Line: 0, Character: 5}}
- sys, user := buildPrompts(false, p, "above", "current", "below", "func add")
- if sys == "" || user == "" {
- t.Fatalf("prompts empty")
- }
+func TestInParamListAndBuildCompletionMessages(t *testing.T) {
+ cur := "func add(a int, b string) int"
+ if !inParamList(cur, 12) {
+ t.Fatalf("expected in param list")
+ }
+ s := newTestServer()
+ p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: "file:///x.go"}, Position: Position{Line: 0, Character: 5}}
+ msgs := s.buildCompletionMessages(false, false, "", false, p, "above", "current", "below", "func add")
+ if len(msgs) < 2 || msgs[0].Content == "" || msgs[1].Content == "" {
+ t.Fatalf("messages empty")
+ }
}
func TestLabelForCompletion(t *testing.T) {
diff --git a/internal/lsp/provider_native_success_test.go b/internal/lsp/provider_native_success_test.go
index dd1abcd..bfcb0b6 100644
--- a/internal/lsp/provider_native_success_test.go
+++ b/internal/lsp/provider_native_success_test.go
@@ -60,3 +60,34 @@ func TestProviderNativeCompletion_IndentWithDoubleOpen(t *testing.T) {
t.Fatalf("expected indentation applied, got %q", got)
}
}
+
+type fakeCompleterCapture struct{ lastPrompt string }
+
+func (fakeCompleterCapture) Chat(context.Context, []llm.Message, ...llm.RequestOption) (string, error) { return "", nil }
+func (fakeCompleterCapture) Name() string { return "prov" }
+func (fakeCompleterCapture) DefaultModel() string { return "m" }
+func (f *fakeCompleterCapture) CodeCompletion(_ context.Context, prompt string, suffix string, n int, language string, temperature float64) ([]string, error) {
+ f.lastPrompt = prompt
+ return []string{"SUG"}, nil
+}
+
+func TestProviderNativeCompletion_UsesPromptTemplate(t *testing.T) {
+ s := newTestServer()
+ cap := &fakeCompleterCapture{}
+ s.llmClient = cap
+ s.promptNativeCompletion = "NATIVE {{path}} {{before}}"
+ uri := "file:///x.go"
+ s.setDocument(uri, "AAA\nBBB\nCCC")
+ current := "fmt."
+ // Cursor at line 1, char 1 -> before should be "AAA\nB"
+ p := CompletionParams{TextDocument: TextDocumentIdentifier{URI: uri}, Position: Position{Line: 1, Character: 1}}
+ if _, ok := s.tryProviderNativeCompletion(current, p, "", "", "func f(){}", "doc", false, "", false); !ok {
+ t.Fatalf("expected provider-native path")
+ }
+ if cap.lastPrompt == "" {
+ t.Fatalf("expected captured prompt")
+ }
+ if cap.lastPrompt != "NATIVE /x.go AAA\nB" {
+ t.Fatalf("unexpected prompt: %q", cap.lastPrompt)
+ }
+}
diff --git a/internal/lsp/server.go b/internal/lsp/server.go
index fa4467b..caaac29 100644
--- a/internal/lsp/server.go
+++ b/internal/lsp/server.go
@@ -58,7 +58,29 @@ type Server struct {
inlineOpen string
inlineClose string
chatSuffix string
- chatPrefixes []string
+ chatPrefixes []string
+
+ // Prompt templates
+ // Completion
+ promptCompSysGeneral string
+ promptCompSysParams string
+ promptCompSysInline string
+ promptCompUserGeneral string
+ promptCompUserParams string
+ promptCompExtraHeader string
+ // Provider-native code completion
+ promptNativeCompletion string
+ // In-editor chat
+ promptChatSystem string
+ // Code actions
+ promptRewriteSystem string
+ promptDiagnosticsSystem string
+ promptDocumentSystem string
+ promptRewriteUser string
+ promptDiagnosticsUser string
+ promptDocumentUser string
+ promptGoTestSystem string
+ promptGoTestUser string
}
// ServerOptions collects configuration for NewServer to avoid long parameter lists.
@@ -79,8 +101,26 @@ type ServerOptions struct {
// Inline/chat triggers
InlineOpen string
InlineClose string
- ChatSuffix string
- ChatPrefixes []string
+ ChatSuffix string
+ ChatPrefixes []string
+
+ // Prompt templates
+ PromptCompSysGeneral string
+ PromptCompSysParams string
+ PromptCompSysInline string
+ PromptCompUserGeneral string
+ PromptCompUserParams string
+ PromptCompExtraHeader string
+ PromptNativeCompletion string
+ PromptChatSystem string
+ PromptRewriteSystem string
+ PromptDiagnosticsSystem string
+ PromptDocumentSystem string
+ PromptRewriteUser string
+ PromptDiagnosticsUser string
+ PromptDocumentUser string
+ PromptGoTestSystem string
+ PromptGoTestUser string
}
func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions) *Server {
@@ -139,11 +179,29 @@ func NewServer(r io.Reader, w io.Writer, logger *log.Logger, opts ServerOptions)
} else {
s.chatSuffix = opts.ChatSuffix
}
- if len(opts.ChatPrefixes) == 0 {
- s.chatPrefixes = []string{"?", "!", ":", ";"}
- } else {
- s.chatPrefixes = append([]string{}, opts.ChatPrefixes...)
- }
+ if len(opts.ChatPrefixes) == 0 {
+ s.chatPrefixes = []string{"?", "!", ":", ";"}
+ } else {
+ s.chatPrefixes = append([]string{}, opts.ChatPrefixes...)
+ }
+
+ // Prompts
+ s.promptCompSysGeneral = opts.PromptCompSysGeneral
+ s.promptCompSysParams = opts.PromptCompSysParams
+ s.promptCompSysInline = opts.PromptCompSysInline
+ s.promptCompUserGeneral = opts.PromptCompUserGeneral
+ s.promptCompUserParams = opts.PromptCompUserParams
+ s.promptCompExtraHeader = opts.PromptCompExtraHeader
+ s.promptNativeCompletion = opts.PromptNativeCompletion
+ s.promptChatSystem = opts.PromptChatSystem
+ s.promptRewriteSystem = opts.PromptRewriteSystem
+ s.promptDiagnosticsSystem = opts.PromptDiagnosticsSystem
+ s.promptDocumentSystem = opts.PromptDocumentSystem
+ s.promptRewriteUser = opts.PromptRewriteUser
+ s.promptDiagnosticsUser = opts.PromptDiagnosticsUser
+ s.promptDocumentUser = opts.PromptDocumentUser
+ s.promptGoTestSystem = opts.PromptGoTestSystem
+ s.promptGoTestUser = opts.PromptGoTestUser
// Assign package-level inline trigger chars for free helper functions
if s.inlineOpen != "" {
diff --git a/internal/lsp/testhelper_capture_llm_test.go b/internal/lsp/testhelper_capture_llm_test.go
new file mode 100644
index 0000000..3274141
--- /dev/null
+++ b/internal/lsp/testhelper_capture_llm_test.go
@@ -0,0 +1,18 @@
+package lsp
+
+import (
+ "context"
+
+ "codeberg.org/snonux/hexai/internal/llm"
+)
+
+// captureLLM captures messages sent to Chat for assertions.
+type captureLLM struct{ msgs []llm.Message }
+
+func (c *captureLLM) Chat(_ context.Context, m []llm.Message, _ ...llm.RequestOption) (string, error) {
+ c.msgs = append([]llm.Message{}, m...)
+ return "OK", nil
+}
+func (*captureLLM) Name() string { return "cap" }
+func (*captureLLM) DefaultModel() string { return "m" }
+
diff --git a/internal/version.go b/internal/version.go
index abeac2b..39ed42e 100644
--- a/internal/version.go
+++ b/internal/version.go
@@ -1,4 +1,4 @@
// Summary: Hexai semantic version identifier used by CLI and LSP binaries.
package internal
-const Version = "0.5.0"
+const Version = "0.6.0"