summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-09-08 12:02:40 +0300
committerPaul Buetow <paul@buetow.org>2025-09-08 12:02:40 +0300
commit75cf6abd55bfb60324fc47cf91eac08dbb8b87b4 (patch)
tree6ef90d8014fe4d9a757d3f7e95bf736b70e4c685 /docs
parent0dcf347c3fbc6e4ffb7e46294f5dd92dbbcd98ef (diff)
docs: move tmux documentation to its own file
Diffstat (limited to 'docs')
-rw-r--r--docs/configuration.md19
-rw-r--r--docs/coverage.html89
-rw-r--r--docs/coverage.out10580
-rw-r--r--docs/helix-tmux-quickstart.md68
-rw-r--r--docs/tmux.md109
5 files changed, 5537 insertions, 5328 deletions
diff --git a/docs/configuration.md b/docs/configuration.md
index 95b65de..0b9e204 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -64,24 +64,7 @@ Editor integration
Tmux status line
-- Hexai can update a tmux user option during LLM activity. Add this to your `~/.tmux.conf` to display it:
-
- - `set -g status-right '#{@hexai_status} #[fg=colour8]| %H:%M'`
-
-- Status content is updated best‑effort at key moments:
- - CLI: start (⏳ provider:model) and completion with compact stats (↑sent, ↓recv, rpm, reqs)
- - LSP: initial heartbeat on client initialize, and periodic compact stats (provider, model, rpm, reqs, bytes)
- - TUI action runner: ready (provider:model) and completion with compact stats
-
-- Toggle via environment:
- - Enable (default): unset or `HEXAI_TMUX_STATUS=1`
- - Disable: `HEXAI_TMUX_STATUS=0`
-
-- Theme and colors:
- - Preset: `HEXAI_TMUX_STATUS_THEME=white-on-purple` (white fg on purple/magenta bg)
- - Explicit: `HEXAI_TMUX_STATUS_FG=<color>`, `HEXAI_TMUX_STATUS_BG=<color>` (e.g., `white`, `magenta`, `colour5`)
- - Colors use tmux’s `fg`/`bg` names; both methods wrap the entire `@hexai_status` segment.
- - If truncated, increase width: `set -g status-right-length 120`
+See the [tmux integration guide](docs/tmux.md) for details on configuring the status line.
Code action prompts
diff --git a/docs/coverage.html b/docs/coverage.html
index 8560a58..059834b 100644
--- a/docs/coverage.html
+++ b/docs/coverage.html
@@ -71,13 +71,13 @@
<option value="file7">codeberg.org/snonux/hexai/internal/hexaiaction/prompts.go (85.0%)</option>
- <option value="file8">codeberg.org/snonux/hexai/internal/hexaiaction/run.go (67.3%)</option>
+ <option value="file8">codeberg.org/snonux/hexai/internal/hexaiaction/run.go (69.2%)</option>
<option value="file9">codeberg.org/snonux/hexai/internal/hexaiaction/tui.go (65.5%)</option>
<option value="file10">codeberg.org/snonux/hexai/internal/hexaiaction/tui_delegate.go (100.0%)</option>
- <option value="file11">codeberg.org/snonux/hexai/internal/hexaicli/run.go (88.4%)</option>
+ <option value="file11">codeberg.org/snonux/hexai/internal/hexaicli/run.go (88.7%)</option>
<option value="file12">codeberg.org/snonux/hexai/internal/hexailsp/run.go (92.5%)</option>
@@ -113,7 +113,7 @@
<option value="file28">codeberg.org/snonux/hexai/internal/lsp/handlers_init.go (66.7%)</option>
- <option value="file29">codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go (89.0%)</option>
+ <option value="file29">codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go (89.1%)</option>
<option value="file30">codeberg.org/snonux/hexai/internal/lsp/server.go (82.6%)</option>
@@ -123,7 +123,9 @@
<option value="file33">codeberg.org/snonux/hexai/internal/textutil/textutil.go (89.0%)</option>
- <option value="file34">codeberg.org/snonux/hexai/internal/tmux/tmux.go (88.6%)</option>
+ <option value="file34">codeberg.org/snonux/hexai/internal/tmux/status.go (66.7%)</option>
+
+ <option value="file35">codeberg.org/snonux/hexai/internal/tmux/tmux.go (88.6%)</option>
</select>
</div>
@@ -1485,6 +1487,7 @@ import (
"codeberg.org/snonux/hexai/internal/editor"
"codeberg.org/snonux/hexai/internal/logging"
"codeberg.org/snonux/hexai/internal/llmutils"
+ "codeberg.org/snonux/hexai/internal/tmux"
)
// Run executes the hexai-tmux-action command flow.
@@ -1495,12 +1498,14 @@ var newClientFromApp = llmutils.NewClientFromApp
func Run(ctx context.Context, stdin io.Reader, stdout, stderr io.Writer) error <span class="cov7" title="4">{
logger := log.New(stderr, "hexai-tmux-action ", log.LstdFlags|log.Lmsgprefix)
cfg := appconfig.Load(logger)
- client, err := newClientFromApp(cfg)
+ cli, err := newClientFromApp(cfg)
if err != nil </span><span class="cov1" title="1">{
fmt.Fprintf(stderr, logging.AnsiBase+"hexai-tmux-action: LLM disabled: %v"+logging.AnsiReset+"\n", err)
return err
}</span>
- <span class="cov6" title="3">parts, err := ParseInput(stdin)
+ <span class="cov6" title="3">_ = tmux.SetStatus("hexai action ready " + cli.DefaultModel())
+ var client chatDoer = cli
+ parts, err := ParseInput(stdin)
if err != nil </span><span class="cov0" title="0">{
fmt.Fprintln(stderr, logging.AnsiBase+"hexai-tmux-action: failed to read input"+logging.AnsiReset)
return err
@@ -1512,12 +1517,13 @@ func Run(ctx context.Context, stdin io.Reader, stdout, stderr io.Writer) error <
if err != nil </span><span class="cov0" title="0">{
return err
}</span>
- <span class="cov6" title="3">out, err := executeAction(ctx, kind, parts, cfg, client, stderr)
- if err != nil </span><span class="cov0" title="0">{
- return err
- }</span>
- <span class="cov6" title="3">io.WriteString(stdout, out)
- return nil</span>
+ <span class="cov6" title="3">out, err := executeAction(ctx, kind, parts, cfg, client, stderr)
+ if err != nil </span><span class="cov0" title="0">{
+ return err
+ }</span>
+ <span class="cov6" title="3">io.WriteString(stdout, out)
+ _ = tmux.SetStatus("✅ " + cli.DefaultModel())
+ return nil</span>
}
func executeAction(ctx context.Context, kind ActionKind, parts InputParts, cfg appconfig.App, client chatDoer, stderr io.Writer) (string, error) <span class="cov10" title="7">{
@@ -1745,6 +1751,7 @@ import (
"codeberg.org/snonux/hexai/internal/logging"
"codeberg.org/snonux/hexai/internal/llm"
"codeberg.org/snonux/hexai/internal/llmutils"
+ "codeberg.org/snonux/hexai/internal/tmux"
)
// Run executes the Hexai CLI behavior given arguments and I/O streams.
@@ -1851,8 +1858,10 @@ func buildMessagesFromConfig(cfg appconfig.App, input string) []llm.Message <spa
// 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="cov10" title="7">{
- start := time.Now()
- var output string
+ start := time.Now()
+ // Best-effort tmux status update
+ _ = tmux.SetStatus("⏳ " + client.Name() + ":" + client.DefaultModel())
+ var output string
if s, ok := client.(llm.Streamer); ok </span><span class="cov4" title="2">{
var b strings.Builder
if err := s.ChatStream(ctx, msgs, func(chunk string) </span><span class="cov8" title="5">{
@@ -1870,10 +1879,11 @@ func runChat(ctx context.Context, client llm.Client, msgs []llm.Message, input s
<span class="cov6" title="3">output = txt
fmt.Fprint(out, output)</span>
}
- <span class="cov8" title="5">dur := time.Since(start)
- fmt.Fprintf(errw, "\n"+logging.AnsiBase+"done provider=%s model=%s time=%s in_bytes=%d out_bytes=%d"+logging.AnsiReset+"\n",
- client.Name(), client.DefaultModel(), dur.Round(time.Millisecond), len(input), len(output))
- return nil</span>
+ <span class="cov8" title="5">dur := time.Since(start)
+ fmt.Fprintf(errw, "\n"+logging.AnsiBase+"done provider=%s model=%s time=%s in_bytes=%d out_bytes=%d"+logging.AnsiReset+"\n",
+ client.Name(), client.DefaultModel(), dur.Round(time.Millisecond), len(input), len(output))
+ _ = tmux.SetStatus("✅ " + client.DefaultModel() + " " + dur.Round(time.Millisecond).String())
+ return nil</span>
}
// printProviderInfo writes the provider/model line to stderr.
@@ -5260,6 +5270,7 @@ import (
"codeberg.org/snonux/hexai/internal/llm"
"codeberg.org/snonux/hexai/internal/logging"
"codeberg.org/snonux/hexai/internal/textutil"
+ tmx "codeberg.org/snonux/hexai/internal/tmux"
)
// Configurable inline trigger characters (default to '&gt;') used by free helpers below.
@@ -5312,7 +5323,11 @@ func (s *Server) logLLMStats() <span class="cov5" title="8">{
<span class="cov5" title="8">rpm := float64(reqs) / mins
sentPerMin := float64(sentTot) / mins
recvPerMin := float64(recvTot) / mins
- logging.Logf("lsp ", "llm stats reqs=%d avg_sent=%d avg_recv=%d sent_total=%d recv_total=%d rpm=%.2f sent_per_min=%.0f recv_per_min=%.0f", reqs, avgSent, avgRecv, sentTot, recvTot, rpm, sentPerMin, recvPerMin)</span>
+ logging.Logf("lsp ", "llm stats reqs=%d avg_sent=%d avg_recv=%d sent_total=%d recv_total=%d rpm=%.2f sent_per_min=%.0f recv_per_min=%.0f", reqs, avgSent, avgRecv, sentTot, recvTot, rpm, sentPerMin, recvPerMin)
+ // Best-effort tmux status update
+ if s.llmClient != nil </span><span class="cov4" title="7">{
+ _ = tmx.SetStatus("LLM:" + s.llmClient.DefaultModel())
+ }</span>
}
// Completion prompt builders and filters
@@ -6197,6 +6212,36 @@ func FindStrictInlineTag(line string) (text string, left, right int, ok bool) <s
import (
"os"
"os/exec"
+ "strings"
+)
+
+// Enabled reports whether tmux status updates are enabled via env (default: on).
+func Enabled() bool <span class="cov10" title="25">{
+ v := strings.TrimSpace(os.Getenv("HEXAI_TMUX_STATUS"))
+ if v == "" </span><span class="cov10" title="25">{ return true }</span>
+ <span class="cov0" title="0">v = strings.ToLower(v)
+ return v == "1" || v == "true" || v == "yes" || v == "on"</span>
+}
+
+// SetUserOption sets a global tmux user option like @hexai_status to value.
+func SetUserOption(key, value string) error <span class="cov10" title="25">{
+ if !Enabled() || !HasBinary() || !InSession() </span><span class="cov0" title="0">{ return nil }</span>
+ <span class="cov10" title="25">k := strings.TrimPrefix(strings.TrimSpace(key), "@")
+ if k == "" </span><span class="cov0" title="0">{ return nil }</span>
+ // Use set-option -g so it appears for all windows
+ <span class="cov10" title="25">return exec.Command("tmux", "set-option", "-g", "@"+k, value).Run()</span>
+}
+
+// SetStatus is a convenience for setting @hexai_status.
+func SetStatus(value string) error <span class="cov10" title="25">{ return SetUserOption("hexai_status", value) }</span>
+
+</pre>
+
+ <pre class="file" id="file35" style="display: none">package tmux
+
+import (
+ "os"
+ "os/exec"
"strconv"
"strings"
)
@@ -6208,10 +6253,10 @@ func Available() bool <span class="cov2" title="2">{ return HasBinary() &amp;&am
var lookPath = exec.LookPath
var command = exec.Command
-func HasBinary() bool <span class="cov4" title="4">{ _, err := lookPath("tmux"); return err == nil }</span>
+func HasBinary() bool <span class="cov10" title="29">{ _, err := lookPath("tmux"); return err == nil }</span>
// InSession reports whether we seem to be running inside a tmux session.
-func InSession() bool <span class="cov4" title="3">{ return strings.TrimSpace(os.Getenv("TMUX")) != "" }</span>
+func InSession() bool <span class="cov9" title="28">{ return strings.TrimSpace(os.Getenv("TMUX")) != "" }</span>
// SplitOpts controls how a new pane is created for running a command.
type SplitOpts struct {
@@ -6268,7 +6313,7 @@ func shellJoin(argv []string) string <span class="cov1" title="1">{
// isSafeBare returns true if a contains only safe characters for bare words.
func isSafeBare(s string) bool <span class="cov4" title="4">{
- for i := 0; i &lt; len(s); i++ </span><span class="cov10" title="27">{
+ for i := 0; i &lt; len(s); i++ </span><span class="cov9" title="27">{
b := s[i]
if (b &gt;= 'a' &amp;&amp; b &lt;= 'z') || (b &gt;= 'A' &amp;&amp; b &lt;= 'Z') || (b &gt;= '0' &amp;&amp; b &lt;= '9') || b == '-' || b == '_' || b == '.' || b == '/' || b == ':' </span><span class="cov9" title="25">{
continue</span>
diff --git a/docs/coverage.out b/docs/coverage.out
index 29c09e0..45ffbdd 100644
--- a/docs/coverage.out
+++ b/docs/coverage.out
@@ -425,30 +425,30 @@ codeberg.org/snonux/hexai/internal/hexaiaction/prompts.go:84.37,86.6 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/prompts.go:87.5,87.16 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/prompts.go:91.79,93.2 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/prompts.go:95.78,97.2 1 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:21.80,25.19 4 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:25.19,28.6 2 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:29.5,30.16 2 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:30.16,33.3 2 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:34.2,34.46 1 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:34.46,36.3 1 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:37.5,38.19 2 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:38.19,40.6 1 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:41.2,42.16 2 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:42.16,44.3 1 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:45.2,46.12 2 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:49.146,50.17 1 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:51.21,52.36 1 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:53.24,55.37 2 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:55.37,58.4 2 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:59.3,61.55 3 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:62.25,65.79 3 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:66.25,69.63 3 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:70.23,73.61 3 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:74.25,77.63 3 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:78.23,83.58 4 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:83.58,86.10 2 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:87.9,87.70 1 0
-codeberg.org/snonux/hexai/internal/hexaiaction/run.go:88.13,89.36 1 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:22.80,26.19 4 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:26.19,29.6 2 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:30.5,33.16 4 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:33.16,36.3 2 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:37.2,37.46 1 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:37.46,39.3 1 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:40.5,41.19 2 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:41.19,43.6 1 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:44.5,45.19 2 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:45.19,47.6 1 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:48.5,50.15 3 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:53.146,54.17 1 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:55.21,56.36 1 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:57.24,59.37 2 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:59.37,62.4 2 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:63.3,65.55 3 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:66.25,69.79 3 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:70.25,73.63 3 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:74.23,77.61 3 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:78.25,81.63 3 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:82.23,87.58 4 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:87.58,90.10 2 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:91.9,91.70 1 0
+codeberg.org/snonux/hexai/internal/hexaiaction/run.go:92.13,93.36 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/tui.go:18.36,18.54 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/tui.go:19.36,19.53 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/tui.go:20.36,20.54 1 0
@@ -492,47 +492,47 @@ codeberg.org/snonux/hexai/internal/hexaiaction/tui_delegate.go:26.38,28.6 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/tui_delegate.go:29.5,31.27 3 0
codeberg.org/snonux/hexai/internal/hexaiaction/tui_delegate.go:31.27,33.6 1 0
codeberg.org/snonux/hexai/internal/hexaiaction/tui_delegate.go:34.5,34.49 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:24.95,29.16 4 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:29.16,32.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:34.5,34.23 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:34.23,35.104 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:35.104,37.10 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:37.16,39.10 0 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:42.5,43.17 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.17,46.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:47.2,49.74 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:49.74,52.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:53.2,53.12 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:58.124,60.16 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:60.16,63.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:64.2,66.74 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:66.74,69.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:70.2,70.12 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:74.64,76.82 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:76.82,79.3 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:80.2,81.9 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:82.40,83.59 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:84.23,85.24 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:86.21,87.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:88.10,89.91 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:97.48,100.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:100.40,102.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:103.2,106.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:110.77,113.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:113.40,114.58 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:114.58,116.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:118.2,121.3 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:125.125,128.40 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:128.40,130.56 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:130.56,133.4 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.18,135.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:136.3,136.22 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:137.8,139.17 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:139.17,141.4 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:142.3,143.26 2 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:145.2,148.12 3 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:152.59,154.2 1 0
-codeberg.org/snonux/hexai/internal/hexaicli/run.go:160.65,160.97 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:25.95,30.16 4 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:30.16,33.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:35.5,35.23 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:35.23,36.104 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:36.104,38.10 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:38.16,40.10 0 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:43.5,44.17 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:44.17,47.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:48.2,50.74 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:50.74,53.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:54.2,54.12 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:59.124,61.16 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:61.16,64.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:65.2,67.74 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:67.74,70.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:71.2,71.12 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:75.64,77.82 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:77.82,80.3 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:81.2,82.9 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:83.40,84.59 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:85.23,86.24 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:87.21,88.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:89.10,90.91 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:98.48,101.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:101.40,103.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:104.2,107.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:111.77,114.40 3 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:114.40,115.58 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:115.58,117.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:119.2,122.3 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:126.125,131.40 4 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:131.40,133.56 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:133.56,136.4 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:136.18,138.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:139.3,139.22 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:140.8,142.17 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:142.17,144.4 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:145.3,146.26 2 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:148.5,152.15 4 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:156.59,158.2 1 0
+codeberg.org/snonux/hexai/internal/hexaicli/run.go:164.65,164.97 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
@@ -1448,176 +1448,177 @@ 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:77.62,77.105 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:79.118,80.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:80.14,83.16 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:83.16,86.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:86.35,88.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.4,89.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:89.36,91.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:92.4,94.59 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.59,96.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,97.21 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:100.2,103.19 4 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:106.51,107.23 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:107.23,109.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.2,110.13 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:110.13,112.100 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.100,114.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:116.3,116.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:118.2,118.11 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.32,123.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.44,127.50 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:127.50,129.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:130.2,130.35 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:133.40,135.20 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.20,136.40 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:136.40,138.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.3,140.8 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.2,142.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:142.12,144.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.2,145.17 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:148.52,149.38 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:149.38,151.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:152.2,153.27 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.27,154.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.34,155.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.3,157.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.36,158.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:160.3,160.25 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.2,162.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:170.64,172.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:172.22,175.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.12,177.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:178.3,180.74 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.74,182.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.3,186.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:186.12,188.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:189.3,190.48 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:190.48,192.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.3,195.18 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.18,197.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.3,200.29 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:202.2,202.24 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:208.41,212.31 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:212.31,214.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.2,215.29 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:215.29,217.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:218.2,218.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:218.31,220.32 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.32,222.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:224.2,224.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:228.83,231.102 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:231.102,233.36 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.36,235.136 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:235.136,237.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:238.4,240.34 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.34,242.5 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.2,246.65 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:246.65,247.53 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:247.53,249.37 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:249.37,251.137 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.137,253.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.5,256.35 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.35,258.6 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:262.2,262.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:266.80,267.22 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.22,269.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:270.2,272.40 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.40,274.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.2,275.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.34,276.31 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:276.31,277.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:279.3,280.16 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.16,281.12 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.3,283.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:283.32,285.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:287.2,287.19 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:290.36,292.2 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:295.39,295.77 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:298.43,300.13 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:300.13,302.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:303.2,304.11 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:304.11,306.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:307.2,308.14 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:308.14,310.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:311.2,312.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:316.56,318.89 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:318.89,320.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:321.2,321.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:325.52,326.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:326.32,328.28 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:328.28,330.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:331.3,331.34 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:331.34,333.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:334.3,334.42 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:334.42,336.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:337.3,337.49 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:339.2,342.27 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:342.27,344.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.2,345.36 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:345.36,347.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:348.2,351.49 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:351.49,353.24 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:353.24,355.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:358.2,359.25 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:359.25,361.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:362.2,362.33 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:362.33,364.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:365.2,366.19 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:370.67,372.35 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:372.35,374.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:375.2,376.31 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:376.31,378.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:379.2,379.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:382.69,383.32 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:383.32,385.3 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:386.2,386.47 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:389.45,391.22 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:391.22,395.12 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:395.12,397.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:398.3,400.32 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:400.32,402.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:403.3,404.46 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:404.46,406.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:409.3,410.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:410.12,412.4 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:413.3,414.49 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:414.49,416.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:418.3,418.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:420.2,420.14 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:423.67,426.28 3 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:426.28,428.12 2 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:428.12,429.9 1 0
-codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:431.3,433.12 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:22.55,24.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:24.32,26.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:27.2,27.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:31.41,36.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:38.41,43.2 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:45.32,48.23 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:48.23,50.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:51.2,52.24 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:52.24,54.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:55.2,58.15 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:58.15,60.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:61.2,66.27 5 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:66.27,68.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:72.51,73.41 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:73.41,75.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:76.2,78.71 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:82.62,82.105 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:84.118,85.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:85.14,88.16 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:88.16,91.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:91.35,93.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.4,94.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:94.36,96.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:97.4,99.59 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:99.59,101.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:102.4,102.21 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:105.2,108.19 4 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:111.51,112.23 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:112.23,114.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.2,115.13 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:115.13,117.100 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:117.100,119.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:121.3,121.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:123.2,123.11 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:126.32,128.2 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:131.44,132.50 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:132.50,134.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:135.2,135.35 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:138.40,140.20 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:140.20,141.40 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:141.40,143.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:145.3,145.8 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.2,147.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:147.12,149.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:150.2,150.17 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:153.52,154.38 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:154.38,156.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:157.2,158.27 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:158.27,159.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:159.34,160.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.3,162.36 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:162.36,163.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:165.3,165.25 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:167.2,167.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:175.64,177.22 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:177.22,180.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:180.12,182.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:183.3,185.74 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:185.74,187.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:190.3,191.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:191.12,193.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:194.3,195.48 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:195.48,197.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:199.3,200.18 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:200.18,202.12 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:204.3,205.29 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:207.2,207.24 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:213.41,217.31 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:217.31,219.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.2,220.29 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:220.29,222.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.2,223.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:223.31,225.32 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:225.32,227.4 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:229.2,229.14 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:233.83,236.102 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:236.102,238.36 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:238.36,240.136 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:240.136,242.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:243.4,245.34 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:245.34,247.5 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.2,251.65 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:251.65,252.53 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:252.53,254.37 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:254.37,256.137 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:256.137,258.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:259.5,261.35 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:261.35,263.6 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:267.2,267.19 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:271.80,272.22 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:272.22,274.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:275.2,277.40 3 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:277.40,279.3 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.2,280.34 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:280.34,281.31 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:281.31,282.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:284.3,285.16 2 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:285.16,286.12 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.3,288.32 1 0
+codeberg.org/snonux/hexai/internal/lsp/handlers_utils.go:288.32,290.4 1 0