summaryrefslogtreecommitdiff
path: root/docs/source-structure.md
blob: 0c7f56f8e210cc5cb1d3cf1a183ed82c4359930f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# Source code structure

This document provides a high‑level map of the Hexai source layout and how the
main packages relate to each other.

## Diagram

```mermaid
graph TD
  %% Entrypoints
  A[cmd/hexai\nCLI entrypoint] --> B[internal/hexaicli\nCLI runner]
  C[cmd/hexai-lsp\nLSP entrypoint] --> D[internal/hexailsp\nLSP runner]

  %% Shared/internal packages
  subgraph internal/
    I[appconfig\nLoad config from file/env]
    L[llm\nClient + providers]
    G[logging\nBound logger + helpers]
    S[lsp\nJSON-RPC, server, handlers]
  end

  %% Relationships
  B --> I
  B --> L
  B --> G

  D --> I
  D --> L
  D --> G
  D --> S

  S --> L
  S --> G

  %% LLM providers
  subgraph internal/llm
    P1[openai.go]
    P2[ollama.go]
    P3[copilot.go]
  end
  L --> P1
  L --> P2
  L --> P3

  %% Version info
  V[internal/version.go\nVersion string] --> A
  V --> C
```

## Module overview

- cmd/hexai: CLI binary that parses flags, prints version via `internal.Version`,
  and delegates to `internal/hexaicli.Run`.
- cmd/hexai-lsp: LSP server binary that parses flags, prints version, and calls
  `internal/hexailsp.Run` (stdio JSON‑RPC server).
- internal/hexaicli: CLI flow — reads stdin/args, loads config, builds an LLM
  client, constructs messages, and runs a single chat request (streaming when
  supported).
- internal/hexailsp: LSP orchestration — binds logging, loads config, builds the
  LLM client, constructs `internal/lsp.ServerOptions`, and runs the server.
- internal/lsp: Minimal LSP over stdio — document store, JSON‑RPC handlers
  (initialize, completion, code action, etc.), context building, and a small
  completion cache.
- internal/llm: Provider‑agnostic client interface plus concrete providers for
  OpenAI, GitHub Copilot, and Ollama, including streaming support where
  available.
- internal/appconfig: Loads user configuration from file and environment, shared
  by both CLI and LSP paths.
- internal/logging: Central logger binding and small helpers for consistent,
  readable logs and chat summaries.
- internal/version.go: Single place for the version string used by both
  binaries.

## Typical flows

- CLI: `cmd/hexai` → `internal/hexaicli` → `internal/appconfig` → `internal/llm`
  (providers) → print output and a short summary line.
- LSP: `cmd/hexai-lsp` → `internal/hexailsp` → `internal/lsp.Server` →
  request handlers → `internal/llm` for completions/actions.