argustack 0.1.34 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +29 -12
  2. package/dist/adapters/lmstudio/embedding-provider.d.ts +37 -0
  3. package/dist/adapters/lmstudio/embedding-provider.d.ts.map +1 -0
  4. package/dist/adapters/lmstudio/embedding-provider.js +174 -0
  5. package/dist/adapters/lmstudio/embedding-provider.js.map +1 -0
  6. package/dist/adapters/lmstudio/index.d.ts +3 -0
  7. package/dist/adapters/lmstudio/index.d.ts.map +1 -0
  8. package/dist/adapters/lmstudio/index.js +2 -0
  9. package/dist/adapters/lmstudio/index.js.map +1 -0
  10. package/dist/adapters/lsp/index.d.ts +4 -0
  11. package/dist/adapters/lsp/index.d.ts.map +1 -0
  12. package/dist/adapters/lsp/index.js +3 -0
  13. package/dist/adapters/lsp/index.js.map +1 -0
  14. package/dist/adapters/lsp/jsonrpc.d.ts +12 -0
  15. package/dist/adapters/lsp/jsonrpc.d.ts.map +1 -0
  16. package/dist/adapters/lsp/jsonrpc.js +30 -0
  17. package/dist/adapters/lsp/jsonrpc.js.map +1 -0
  18. package/dist/adapters/lsp/typescript-lsp.d.ts +25 -0
  19. package/dist/adapters/lsp/typescript-lsp.d.ts.map +1 -0
  20. package/dist/adapters/lsp/typescript-lsp.js +131 -0
  21. package/dist/adapters/lsp/typescript-lsp.js.map +1 -0
  22. package/dist/adapters/neo4j/client.d.ts +11 -0
  23. package/dist/adapters/neo4j/client.d.ts.map +1 -0
  24. package/dist/adapters/neo4j/client.js +14 -0
  25. package/dist/adapters/neo4j/client.js.map +1 -0
  26. package/dist/adapters/neo4j/cypher.d.ts +23 -0
  27. package/dist/adapters/neo4j/cypher.d.ts.map +1 -0
  28. package/dist/adapters/neo4j/cypher.js +138 -0
  29. package/dist/adapters/neo4j/cypher.js.map +1 -0
  30. package/dist/adapters/neo4j/graph-store.d.ts +33 -0
  31. package/dist/adapters/neo4j/graph-store.d.ts.map +1 -0
  32. package/dist/adapters/neo4j/graph-store.js +282 -0
  33. package/dist/adapters/neo4j/graph-store.js.map +1 -0
  34. package/dist/adapters/neo4j/index.d.ts +4 -0
  35. package/dist/adapters/neo4j/index.d.ts.map +1 -0
  36. package/dist/adapters/neo4j/index.js +3 -0
  37. package/dist/adapters/neo4j/index.js.map +1 -0
  38. package/dist/adapters/neo4j/mapper.d.ts +5 -0
  39. package/dist/adapters/neo4j/mapper.d.ts.map +1 -0
  40. package/dist/adapters/neo4j/mapper.js +49 -0
  41. package/dist/adapters/neo4j/mapper.js.map +1 -0
  42. package/dist/adapters/postgres/code-meta.d.ts +21 -0
  43. package/dist/adapters/postgres/code-meta.d.ts.map +1 -0
  44. package/dist/adapters/postgres/code-meta.js +150 -0
  45. package/dist/adapters/postgres/code-meta.js.map +1 -0
  46. package/dist/adapters/postgres/index.d.ts +1 -0
  47. package/dist/adapters/postgres/index.d.ts.map +1 -1
  48. package/dist/adapters/postgres/index.js +1 -0
  49. package/dist/adapters/postgres/index.js.map +1 -1
  50. package/dist/adapters/postgres/schema.d.ts.map +1 -1
  51. package/dist/adapters/postgres/schema.js +38 -0
  52. package/dist/adapters/postgres/schema.js.map +1 -1
  53. package/dist/adapters/postgres/storage.d.ts +3 -3
  54. package/dist/adapters/postgres/storage.d.ts.map +1 -1
  55. package/dist/adapters/postgres/storage.js +4 -4
  56. package/dist/adapters/postgres/storage.js.map +1 -1
  57. package/dist/adapters/qdrant/client.d.ts +8 -0
  58. package/dist/adapters/qdrant/client.d.ts.map +1 -0
  59. package/dist/adapters/qdrant/client.js +12 -0
  60. package/dist/adapters/qdrant/client.js.map +1 -0
  61. package/dist/adapters/qdrant/index.d.ts +4 -0
  62. package/dist/adapters/qdrant/index.d.ts.map +1 -0
  63. package/dist/adapters/qdrant/index.js +3 -0
  64. package/dist/adapters/qdrant/index.js.map +1 -0
  65. package/dist/adapters/qdrant/mapper.d.ts +16 -0
  66. package/dist/adapters/qdrant/mapper.d.ts.map +1 -0
  67. package/dist/adapters/qdrant/mapper.js +52 -0
  68. package/dist/adapters/qdrant/mapper.js.map +1 -0
  69. package/dist/adapters/qdrant/vector-store.d.ts +19 -0
  70. package/dist/adapters/qdrant/vector-store.d.ts.map +1 -0
  71. package/dist/adapters/qdrant/vector-store.js +114 -0
  72. package/dist/adapters/qdrant/vector-store.js.map +1 -0
  73. package/dist/adapters/tree-sitter/index.d.ts +4 -0
  74. package/dist/adapters/tree-sitter/index.d.ts.map +1 -0
  75. package/dist/adapters/tree-sitter/index.js +3 -0
  76. package/dist/adapters/tree-sitter/index.js.map +1 -0
  77. package/dist/adapters/tree-sitter/parser.d.ts +15 -0
  78. package/dist/adapters/tree-sitter/parser.d.ts.map +1 -0
  79. package/dist/adapters/tree-sitter/parser.js +186 -0
  80. package/dist/adapters/tree-sitter/parser.js.map +1 -0
  81. package/dist/adapters/tree-sitter/queries.d.ts +14 -0
  82. package/dist/adapters/tree-sitter/queries.d.ts.map +1 -0
  83. package/dist/adapters/tree-sitter/queries.js +14 -0
  84. package/dist/adapters/tree-sitter/queries.js.map +1 -0
  85. package/dist/adapters/voyage/embedding-provider.d.ts +25 -0
  86. package/dist/adapters/voyage/embedding-provider.d.ts.map +1 -0
  87. package/dist/adapters/voyage/embedding-provider.js +105 -0
  88. package/dist/adapters/voyage/embedding-provider.js.map +1 -0
  89. package/dist/adapters/voyage/index.d.ts +3 -0
  90. package/dist/adapters/voyage/index.d.ts.map +1 -0
  91. package/dist/adapters/voyage/index.js +2 -0
  92. package/dist/adapters/voyage/index.js.map +1 -0
  93. package/dist/cli/code.d.ts +3 -0
  94. package/dist/cli/code.d.ts.map +1 -0
  95. package/dist/cli/code.js +565 -0
  96. package/dist/cli/code.js.map +1 -0
  97. package/dist/cli/index.js +2 -0
  98. package/dist/cli/index.js.map +1 -1
  99. package/dist/cli/init/index.d.ts.map +1 -1
  100. package/dist/cli/init/index.js +5 -2
  101. package/dist/cli/init/index.js.map +1 -1
  102. package/dist/cli/sync.d.ts.map +1 -1
  103. package/dist/cli/sync.js +3 -0
  104. package/dist/cli/sync.js.map +1 -1
  105. package/dist/code-intel/chunker.d.ts +15 -0
  106. package/dist/code-intel/chunker.d.ts.map +1 -0
  107. package/dist/code-intel/chunker.js +39 -0
  108. package/dist/code-intel/chunker.js.map +1 -0
  109. package/dist/code-intel/file-discovery.d.ts +19 -0
  110. package/dist/code-intel/file-discovery.d.ts.map +1 -0
  111. package/dist/code-intel/file-discovery.js +80 -0
  112. package/dist/code-intel/file-discovery.js.map +1 -0
  113. package/dist/code-intel/hash.d.ts +2 -0
  114. package/dist/code-intel/hash.d.ts.map +1 -0
  115. package/dist/code-intel/hash.js +5 -0
  116. package/dist/code-intel/hash.js.map +1 -0
  117. package/dist/code-intel/index.d.ts +17 -0
  118. package/dist/code-intel/index.d.ts.map +1 -0
  119. package/dist/code-intel/index.js +11 -0
  120. package/dist/code-intel/index.js.map +1 -0
  121. package/dist/code-intel/indexer.d.ts +43 -0
  122. package/dist/code-intel/indexer.d.ts.map +1 -0
  123. package/dist/code-intel/indexer.js +234 -0
  124. package/dist/code-intel/indexer.js.map +1 -0
  125. package/dist/code-intel/job-lock.d.ts +7 -0
  126. package/dist/code-intel/job-lock.d.ts.map +1 -0
  127. package/dist/code-intel/job-lock.js +18 -0
  128. package/dist/code-intel/job-lock.js.map +1 -0
  129. package/dist/code-intel/layer-detector.d.ts +9 -0
  130. package/dist/code-intel/layer-detector.d.ts.map +1 -0
  131. package/dist/code-intel/layer-detector.js +31 -0
  132. package/dist/code-intel/layer-detector.js.map +1 -0
  133. package/dist/code-intel/lsp-resolver.d.ts +24 -0
  134. package/dist/code-intel/lsp-resolver.d.ts.map +1 -0
  135. package/dist/code-intel/lsp-resolver.js +125 -0
  136. package/dist/code-intel/lsp-resolver.js.map +1 -0
  137. package/dist/code-intel/ranker.d.ts +28 -0
  138. package/dist/code-intel/ranker.d.ts.map +1 -0
  139. package/dist/code-intel/ranker.js +69 -0
  140. package/dist/code-intel/ranker.js.map +1 -0
  141. package/dist/code-intel/resolver.d.ts +14 -0
  142. package/dist/code-intel/resolver.d.ts.map +1 -0
  143. package/dist/code-intel/resolver.js +59 -0
  144. package/dist/code-intel/resolver.js.map +1 -0
  145. package/dist/code-intel/tsconfig-paths.d.ts +11 -0
  146. package/dist/code-intel/tsconfig-paths.d.ts.map +1 -0
  147. package/dist/code-intel/tsconfig-paths.js +67 -0
  148. package/dist/code-intel/tsconfig-paths.js.map +1 -0
  149. package/dist/code-intel/watcher.d.ts +27 -0
  150. package/dist/code-intel/watcher.d.ts.map +1 -0
  151. package/dist/code-intel/watcher.js +93 -0
  152. package/dist/code-intel/watcher.js.map +1 -0
  153. package/dist/core/ports/code-embedding.d.ts +42 -0
  154. package/dist/core/ports/code-embedding.d.ts.map +1 -0
  155. package/dist/core/ports/code-embedding.js +2 -0
  156. package/dist/core/ports/code-embedding.js.map +1 -0
  157. package/dist/core/ports/code-graph.d.ts +56 -0
  158. package/dist/core/ports/code-graph.d.ts.map +1 -0
  159. package/dist/core/ports/code-graph.js +2 -0
  160. package/dist/core/ports/code-graph.js.map +1 -0
  161. package/dist/core/ports/code-meta.d.ts +33 -0
  162. package/dist/core/ports/code-meta.d.ts.map +1 -0
  163. package/dist/core/ports/code-meta.js +2 -0
  164. package/dist/core/ports/code-meta.js.map +1 -0
  165. package/dist/core/ports/code-parser.d.ts +13 -0
  166. package/dist/core/ports/code-parser.d.ts.map +1 -0
  167. package/dist/core/ports/code-parser.js +2 -0
  168. package/dist/core/ports/code-parser.js.map +1 -0
  169. package/dist/core/ports/code-vector-store.d.ts +37 -0
  170. package/dist/core/ports/code-vector-store.d.ts.map +1 -0
  171. package/dist/core/ports/code-vector-store.js +2 -0
  172. package/dist/core/ports/code-vector-store.js.map +1 -0
  173. package/dist/core/ports/index.d.ts +6 -0
  174. package/dist/core/ports/index.d.ts.map +1 -1
  175. package/dist/core/ports/lsp-client.d.ts +22 -0
  176. package/dist/core/ports/lsp-client.d.ts.map +1 -0
  177. package/dist/core/ports/lsp-client.js +2 -0
  178. package/dist/core/ports/lsp-client.js.map +1 -0
  179. package/dist/core/types/code.d.ts +153 -0
  180. package/dist/core/types/code.d.ts.map +1 -0
  181. package/dist/core/types/code.js +2 -0
  182. package/dist/core/types/code.js.map +1 -0
  183. package/dist/core/types/config.d.ts +1 -1
  184. package/dist/core/types/config.d.ts.map +1 -1
  185. package/dist/core/types/config.js +8 -1
  186. package/dist/core/types/config.js.map +1 -1
  187. package/dist/core/types/index.d.ts +1 -0
  188. package/dist/core/types/index.d.ts.map +1 -1
  189. package/dist/mcp/helpers.d.ts +21 -0
  190. package/dist/mcp/helpers.d.ts.map +1 -1
  191. package/dist/mcp/helpers.js +157 -3
  192. package/dist/mcp/helpers.js.map +1 -1
  193. package/dist/mcp/server.d.ts.map +1 -1
  194. package/dist/mcp/server.js +6 -0
  195. package/dist/mcp/server.js.map +1 -1
  196. package/dist/mcp/tools/code-graph.d.ts +3 -0
  197. package/dist/mcp/tools/code-graph.d.ts.map +1 -0
  198. package/dist/mcp/tools/code-graph.js +295 -0
  199. package/dist/mcp/tools/code-graph.js.map +1 -0
  200. package/dist/mcp/tools/code-hybrid.d.ts +3 -0
  201. package/dist/mcp/tools/code-hybrid.d.ts.map +1 -0
  202. package/dist/mcp/tools/code-hybrid.js +118 -0
  203. package/dist/mcp/tools/code-hybrid.js.map +1 -0
  204. package/dist/mcp/tools/code-search.d.ts +3 -0
  205. package/dist/mcp/tools/code-search.d.ts.map +1 -0
  206. package/dist/mcp/tools/code-search.js +95 -0
  207. package/dist/mcp/tools/code-search.js.map +1 -0
  208. package/dist/mcp/tools/workspace.js +1 -1
  209. package/dist/mcp/tools/workspace.js.map +1 -1
  210. package/dist/use-cases/code-search.d.ts +36 -0
  211. package/dist/use-cases/code-search.d.ts.map +1 -0
  212. package/dist/use-cases/code-search.js +74 -0
  213. package/dist/use-cases/code-search.js.map +1 -0
  214. package/dist/use-cases/index-code.d.ts +24 -0
  215. package/dist/use-cases/index-code.d.ts.map +1 -0
  216. package/dist/use-cases/index-code.js +43 -0
  217. package/dist/use-cases/index-code.js.map +1 -0
  218. package/dist/use-cases/register-code-project.d.ts +21 -0
  219. package/dist/use-cases/register-code-project.d.ts.map +1 -0
  220. package/dist/use-cases/register-code-project.js +19 -0
  221. package/dist/use-cases/register-code-project.js.map +1 -0
  222. package/dist/use-cases/unregister-code-project.d.ts +11 -0
  223. package/dist/use-cases/unregister-code-project.d.ts.map +1 -0
  224. package/dist/use-cases/unregister-code-project.js +19 -0
  225. package/dist/use-cases/unregister-code-project.js.map +1 -0
  226. package/dist/use-cases/watch-code.d.ts +33 -0
  227. package/dist/use-cases/watch-code.d.ts.map +1 -0
  228. package/dist/use-cases/watch-code.js +52 -0
  229. package/dist/use-cases/watch-code.js.map +1 -0
  230. package/package.json +10 -3
  231. package/templates/code-docker-compose.yml +51 -0
  232. package/templates/env.example +16 -0
package/README.md CHANGED
@@ -3,13 +3,10 @@
3
3
  [![npm version](https://img.shields.io/npm/v/argustack.svg)](https://www.npmjs.com/package/argustack)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/argustack.svg)](https://www.npmjs.com/package/argustack)
5
5
  [![license](https://img.shields.io/npm/l/argustack.svg)](LICENSE)
6
- [![docs](https://img.shields.io/badge/docs-DataRoom-blue)](https://app.paperlink.online/s/0aa7d2d6/argustack)
7
6
 
8
7
  **Ask AI about your Jira, Git, and GitHub — powered by local data, not cloud APIs.**
9
8
 
10
- [**Documentation & Examples →**](https://app.paperlink.online/s/0aa7d2d6/argustack)
11
-
12
- Argustack downloads your project data into local PostgreSQL, cross-references everything, and gives Claude direct access via 32 MCP tools. All data stays on your machine.
9
+ Argustack downloads your project data into local PostgreSQL, indexes your codebases into Neo4j + Qdrant, and gives Claude direct access via 46 MCP tools. All data stays on your machine.
13
10
 
14
11
  > *Was ticket PROJ-123 implemented as described?*
15
12
  > *Who reviewed the PR and what was the feedback?*
@@ -29,7 +26,8 @@ Argustack downloads your project data into local PostgreSQL, cross-references ev
29
26
  - **Update & push** — modify issues locally, push changes back to Jira (Markdown descriptions auto-converted to rich ADF)
30
27
  - **Global workspace registry** — `~/.argustack/workspaces.json`, switch between workspaces from any directory
31
28
  - **Knowledge graph** — entity-relationship graph (issues, developers, modules, PRs) with impact analysis and code dependencies
32
- - **32 MCP tools** — Claude queries your data directly via SQL
29
+ - **Code intelligence** — Cursor-style RAG: tree-sitter AST + Neo4j call graph + Qdrant semantic search over your codebases (TypeScript first). Local embeddings via LM Studio (Qwen3-Embedding-4B), no cloud APIs.
30
+ - **46 MCP tools** — Claude queries your data directly via SQL + Cypher + vector search
33
31
  - **IDE Plugin** — kanban board for JetBrains IDEs where columns are Claude Code skills
34
32
  - **100% local** — no cloud, no accounts, no telemetry
35
33
 
@@ -77,6 +75,12 @@ argustack status # workspace info
77
75
  argustack workspaces # list all known workspaces
78
76
  argustack graph build # build knowledge graph from synced data
79
77
  argustack graph stats # show graph entity/relationship counts
78
+ argustack code init # generate ~/.argustack/code/docker-compose.yml + start Neo4j + Qdrant
79
+ argustack code register --name X # register a codebase for indexing
80
+ argustack code index # incremental index of registered project (--full / --status / --lsp)
81
+ argustack code watch # real-time re-index on file save (--daemon for background)
82
+ argustack code list # list registered code projects
83
+ argustack code stats <projectId> # symbols, vectors, last job
80
84
  ```
81
85
 
82
86
  ## MCP Tools
@@ -116,6 +120,20 @@ After sync, Claude queries your data through these tools:
116
120
  | `build_business_graph` | Claude identifies business processes from issue data |
117
121
  | `add_relationship` | Manually add semantic relationships (survives rebuild) |
118
122
  | `add_observation` | Add knowledge notes to any entity |
123
+ | `find_symbol` | Locate functions, classes, methods, types by name fragment (with layer/kind filter) |
124
+ | `get_dependencies` | Files this file imports (transitive) |
125
+ | `get_dependents` | Files that import this file (upstream) |
126
+ | `get_callers` | Symbols that call this qualified name (transitively) |
127
+ | `get_callees` | Symbols called by this qualified name (transitively) |
128
+ | `get_call_path` | Shortest call path between two symbols |
129
+ | `find_arch_violations` | Clean Architecture violations (domain → infra, etc.) |
130
+ | `find_unused_exports` | Exported symbols with no incoming references |
131
+ | `get_implementers` | Classes implementing an interface |
132
+ | `get_layer_symbols` | All symbols in a layer (domain / application / infrastructure / presentation) |
133
+ | `search_semantic` | Code chunks by intent (embedding-based, layer/kind filter) |
134
+ | `find_similar_code` | Chunks similar to a given symbol |
135
+ | `explain_feature` | 4-stage pipeline (semantic → graph expand → rerank → cluster by layer) |
136
+ | `plan_feature_files` | Files Claude should consider when planning a new feature, grouped by layer |
119
137
 
120
138
  ## IDE Plugin
121
139
 
@@ -126,7 +144,7 @@ Kanban board inside JetBrains IDEs (IntelliJ, WebStorm, PyCharm, etc.) where col
126
144
  - Workflows group skills into pipelines (plan, implement, test, review)
127
145
  - Done column has configurable time filter
128
146
 
129
- Download from [GitHub Releases](https://github.com/InfoCodeStreamly/argustack/releases) and install via Settings, Plugins, Install from Disk.
147
+ Download from [GitHub Releases](https://github.com/CodeStreamly/argustack/releases) and install via Settings, Plugins, Install from Disk.
130
148
 
131
149
  The CLI and IDE plugin are independent. The plugin works without the CLI. The CLI adds analytics when configured.
132
150
 
@@ -136,13 +154,12 @@ Argustack is a CLI tool with no backend, no cloud, no accounts. Credentials stay
136
154
 
137
155
  ## Documentation
138
156
 
139
- Full documentation available at **[Argustack DataRoom](https://app.paperlink.online/s/0aa7d2d6/argustack)**:
157
+ - [`llms.txt`](./llms.txt) full project summary for AI agents (read this if you're Claude)
158
+ - [`CLAUDE.md`](./CLAUDE.md) — architecture, tech stack, conventions for contributors
159
+ - [`AGENTS.md`](./AGENTS.md) — build commands, file map, debugging tips
160
+ - [`Docs/Tasks/`](./Docs/Tasks/) — business requirements (ARG-XXX) and technical plans
140
161
 
141
- - **Quick Start Guide**from zero to first query in 5 minutes
142
- - **Use Cases & Examples** — real scenarios for PMs, team leads, developers, CTOs
143
- - **MCP Tools Reference** — all 32 tools with parameters and examples
144
- - **Estimate Tool Deep Dive** — algorithm, scoring, data sources
145
- - **Architecture Guide** — hexagonal architecture, directory structure, extending
162
+ MCP tools are self-documentingeach `server.registerTool()` call in `src/mcp/tools/*.ts` includes a description that Claude reads at runtime.
146
163
 
147
164
  ## License
148
165
 
@@ -0,0 +1,37 @@
1
+ import type { ICodeEmbedding, EmbedChunkInput, RerankDoc, RerankResult } from '../../core/ports/code-embedding.js';
2
+ export interface LmStudioConfig {
3
+ url?: string;
4
+ model?: string;
5
+ dimensions?: number;
6
+ batchSize?: number;
7
+ maxRetries?: number;
8
+ /** When set, rerank() calls /v1/chat/completions with this model (e.g. Qwen3-Reranker). Omit for stub. */
9
+ rerankModel?: string;
10
+ }
11
+ /**
12
+ * LM Studio adapter — runs Qwen3-Embedding-4B (or any embedding GGUF) locally.
13
+ *
14
+ * Exposes the OpenAI-compatible `/v1/embeddings` endpoint on `http://localhost:1234`.
15
+ * Native Qwen3 output is 2560-d; we Matryoshka-slice client-side to `dimensions`
16
+ * (default 1024) so the Qdrant schema matches the original voyage-code-3 plan.
17
+ *
18
+ * The reranker stub returns documents in their original order — Qwen3-Reranker
19
+ * is a separate model and is deferred to v0.2.
20
+ */
21
+ export declare class LmStudioCodeEmbeddingProvider implements ICodeEmbedding {
22
+ readonly name = "LmStudio";
23
+ readonly dimensions: number;
24
+ private readonly url;
25
+ private readonly model;
26
+ private readonly maxRetries;
27
+ private readonly rerankModel;
28
+ constructor(config?: LmStudioConfig);
29
+ embedCode(chunks: EmbedChunkInput[]): Promise<number[][]>;
30
+ embedQuery(query: string): Promise<number[]>;
31
+ rerank(query: string, docs: RerankDoc[], topK: number): Promise<RerankResult[]>;
32
+ private scoreRelevance;
33
+ private embedBatched;
34
+ private sliceMatryoshka;
35
+ private postWithRetry;
36
+ }
37
+ //# sourceMappingURL=embedding-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../../../src/adapters/lmstudio/embedding-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,YAAY,EACb,MAAM,oCAAoC,CAAC;AAE5C,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0GAA0G;IAC1G,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA0BD;;;;;;;;;GASG;AACH,qBAAa,6BAA8B,YAAW,cAAc;IAClE,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;gBAEhC,MAAM,GAAE,cAAmB;IAUjC,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAMzD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YA4BvE,cAAc;YAkCd,YAAY;IAe1B,OAAO,CAAC,eAAe;YAKT,aAAa;CAqC5B"}
@@ -0,0 +1,174 @@
1
+ const RERANK_SYSTEM_PROMPT = 'You are a relevance judge. Given a search query and a code document, output ONLY a single number between 0 and 1 indicating how relevant the document is to the query. 1.0 = highly relevant, 0.0 = irrelevant. No other text.';
2
+ const DEFAULT_URL = 'http://localhost:1234';
3
+ const DEFAULT_MODEL = 'text-embedding-qwen3-embedding-4b';
4
+ const DEFAULT_DIMENSIONS = 1024;
5
+ const DEFAULT_BATCH = 1;
6
+ const DEFAULT_MAX_RETRIES = 3;
7
+ const MAX_CHARS_PER_INPUT = 6000;
8
+ const QUERY_INSTRUCTION = 'Instruct: Given a code search query, retrieve relevant code snippets\nQuery: ';
9
+ /**
10
+ * LM Studio adapter — runs Qwen3-Embedding-4B (or any embedding GGUF) locally.
11
+ *
12
+ * Exposes the OpenAI-compatible `/v1/embeddings` endpoint on `http://localhost:1234`.
13
+ * Native Qwen3 output is 2560-d; we Matryoshka-slice client-side to `dimensions`
14
+ * (default 1024) so the Qdrant schema matches the original voyage-code-3 plan.
15
+ *
16
+ * The reranker stub returns documents in their original order — Qwen3-Reranker
17
+ * is a separate model and is deferred to v0.2.
18
+ */
19
+ export class LmStudioCodeEmbeddingProvider {
20
+ name = 'LmStudio';
21
+ dimensions;
22
+ url;
23
+ model;
24
+ maxRetries;
25
+ rerankModel;
26
+ constructor(config = {}) {
27
+ this.url = (config.url ?? DEFAULT_URL).replace(/\/$/, '');
28
+ this.model = config.model ?? DEFAULT_MODEL;
29
+ this.dimensions = config.dimensions ?? DEFAULT_DIMENSIONS;
30
+ void config.batchSize;
31
+ void DEFAULT_BATCH;
32
+ this.maxRetries = config.maxRetries ?? DEFAULT_MAX_RETRIES;
33
+ this.rerankModel = config.rerankModel ?? null;
34
+ }
35
+ async embedCode(chunks) {
36
+ if (chunks.length === 0) {
37
+ return [];
38
+ }
39
+ const texts = chunks.map((c) => c.content);
40
+ return this.embedBatched(texts);
41
+ }
42
+ async embedQuery(query) {
43
+ const vectors = await this.embedBatched([QUERY_INSTRUCTION + query]);
44
+ return vectors[0] ?? [];
45
+ }
46
+ async rerank(query, docs, topK) {
47
+ if (docs.length === 0) {
48
+ return [];
49
+ }
50
+ if (!this.rerankModel) {
51
+ const limit = Math.min(topK, docs.length);
52
+ const results = [];
53
+ for (let i = 0; i < limit; i++) {
54
+ const doc = docs[i];
55
+ if (!doc) {
56
+ continue;
57
+ }
58
+ results.push({ id: doc.id, score: 1 - i / Math.max(1, docs.length) });
59
+ }
60
+ return results;
61
+ }
62
+ const scored = [];
63
+ for (const doc of docs) {
64
+ try {
65
+ const score = await this.scoreRelevance(query, doc.content);
66
+ scored.push({ id: doc.id, score });
67
+ }
68
+ catch {
69
+ scored.push({ id: doc.id, score: 0 });
70
+ }
71
+ }
72
+ scored.sort((a, b) => b.score - a.score);
73
+ return scored.slice(0, topK);
74
+ }
75
+ async scoreRelevance(query, document) {
76
+ const truncated = document.length > MAX_CHARS_PER_INPUT
77
+ ? document.slice(0, MAX_CHARS_PER_INPUT)
78
+ : document;
79
+ const body = {
80
+ model: this.rerankModel,
81
+ messages: [
82
+ { role: 'system', content: RERANK_SYSTEM_PROMPT },
83
+ { role: 'user', content: `Query: ${query}\n\nDocument:\n${truncated}\n\nRelevance score (0.0 to 1.0):` },
84
+ ],
85
+ temperature: 0,
86
+ max_tokens: 8,
87
+ };
88
+ const response = await fetch(`${this.url}/v1/chat/completions`, {
89
+ method: 'POST',
90
+ headers: { 'Content-Type': 'application/json' },
91
+ body: JSON.stringify(body),
92
+ });
93
+ if (!response.ok) {
94
+ throw new LmStudioClientError(`LM Studio rerank error ${String(response.status)}`);
95
+ }
96
+ const json = (await response.json());
97
+ const text = json.choices[0]?.message.content ?? '';
98
+ const match = /([0-9]*\.?[0-9]+)/.exec(text);
99
+ if (!match) {
100
+ return 0;
101
+ }
102
+ const parsed = Number(match[1]);
103
+ if (Number.isNaN(parsed)) {
104
+ return 0;
105
+ }
106
+ return Math.max(0, Math.min(1, parsed));
107
+ }
108
+ async embedBatched(texts) {
109
+ const out = [];
110
+ for (let i = 0; i < texts.length; i++) {
111
+ const raw = texts[i] ?? '';
112
+ const truncated = raw.length > MAX_CHARS_PER_INPUT ? raw.slice(0, MAX_CHARS_PER_INPUT) : raw;
113
+ const json = await this.postWithRetry(truncated);
114
+ const vec = json.data[0]?.embedding ?? [];
115
+ out.push(this.sliceMatryoshka(vec));
116
+ if (i % 25 === 0) {
117
+ process.stderr.write(`[embed] ${String(i + 1)}/${String(texts.length)}\n`);
118
+ }
119
+ }
120
+ return out;
121
+ }
122
+ sliceMatryoshka(vec) {
123
+ if (vec.length <= this.dimensions) {
124
+ return vec;
125
+ }
126
+ return vec.slice(0, this.dimensions);
127
+ }
128
+ async postWithRetry(input) {
129
+ let attempt = 0;
130
+ let lastError = null;
131
+ while (attempt <= this.maxRetries) {
132
+ try {
133
+ const response = await fetch(`${this.url}/v1/embeddings`, {
134
+ method: 'POST',
135
+ headers: { 'Content-Type': 'application/json' },
136
+ body: JSON.stringify({ model: this.model, input }),
137
+ });
138
+ if (response.ok) {
139
+ return (await response.json());
140
+ }
141
+ if (response.status >= 500) {
142
+ attempt += 1;
143
+ lastError = new Error(`LM Studio HTTP ${String(response.status)}`);
144
+ await sleep(500 * 2 ** attempt);
145
+ continue;
146
+ }
147
+ const text = await response.text();
148
+ throw new LmStudioClientError(`LM Studio error ${String(response.status)}: ${text}`);
149
+ }
150
+ catch (error) {
151
+ if (error instanceof LmStudioClientError) {
152
+ throw error;
153
+ }
154
+ if (attempt >= this.maxRetries) {
155
+ throw error instanceof Error ? error : new Error(String(error));
156
+ }
157
+ lastError = error;
158
+ attempt += 1;
159
+ await sleep(500 * 2 ** attempt);
160
+ }
161
+ }
162
+ throw new Error(`LM Studio exhausted retries (${String(this.maxRetries)}): ${String(lastError)}`);
163
+ }
164
+ }
165
+ function sleep(ms) {
166
+ return new Promise((resolve) => setTimeout(resolve, ms));
167
+ }
168
+ class LmStudioClientError extends Error {
169
+ constructor(message) {
170
+ super(message);
171
+ this.name = 'LmStudioClientError';
172
+ }
173
+ }
174
+ //# sourceMappingURL=embedding-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-provider.js","sourceRoot":"","sources":["../../../src/adapters/lmstudio/embedding-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { LmStudioCodeEmbeddingProvider } from './embedding-provider.js';
2
+ export type { LmStudioConfig } from './embedding-provider.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/lmstudio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,YAAY,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { LmStudioCodeEmbeddingProvider } from './embedding-provider.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/lmstudio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { TypeScriptLspClient } from './typescript-lsp.js';
2
+ export type { TypeScriptLspOptions } from './typescript-lsp.js';
3
+ export { encodeMessage, tryDecodeMessage } from './jsonrpc.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/lsp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,YAAY,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { TypeScriptLspClient } from './typescript-lsp.js';
2
+ export { encodeMessage, tryDecodeMessage } from './jsonrpc.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/lsp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * LSP framing helpers (Content-Length + body).
3
+ * `vscode-jsonrpc` does the heavy lifting at runtime; this module is here
4
+ * for a low-level fallback / future migration off the dependency.
5
+ */
6
+ export declare function encodeMessage(payload: unknown): Buffer;
7
+ export interface DecodedMessage {
8
+ payload: unknown;
9
+ consumed: number;
10
+ }
11
+ export declare function tryDecodeMessage(buffer: Buffer): DecodedMessage | null;
12
+ //# sourceMappingURL=jsonrpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonrpc.d.ts","sourceRoot":"","sources":["../../../src/adapters/lsp/jsonrpc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAKtD;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAiBtE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * LSP framing helpers (Content-Length + body).
3
+ * `vscode-jsonrpc` does the heavy lifting at runtime; this module is here
4
+ * for a low-level fallback / future migration off the dependency.
5
+ */
6
+ export function encodeMessage(payload) {
7
+ const json = JSON.stringify(payload);
8
+ const body = Buffer.from(json, 'utf8');
9
+ const header = `Content-Length: ${String(body.byteLength)}\r\n\r\n`;
10
+ return Buffer.concat([Buffer.from(header, 'utf8'), body]);
11
+ }
12
+ export function tryDecodeMessage(buffer) {
13
+ const headerEnd = buffer.indexOf('\r\n\r\n');
14
+ if (headerEnd === -1) {
15
+ return null;
16
+ }
17
+ const header = buffer.subarray(0, headerEnd).toString('utf8');
18
+ const match = /Content-Length: (\d+)/i.exec(header);
19
+ if (!match?.[1]) {
20
+ return null;
21
+ }
22
+ const length = Number(match[1]);
23
+ const bodyStart = headerEnd + 4;
24
+ if (buffer.length < bodyStart + length) {
25
+ return null;
26
+ }
27
+ const body = buffer.subarray(bodyStart, bodyStart + length).toString('utf8');
28
+ return { payload: JSON.parse(body), consumed: bodyStart + length };
29
+ }
30
+ //# sourceMappingURL=jsonrpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonrpc.js","sourceRoot":"","sources":["../../../src/adapters/lsp/jsonrpc.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,mBAAmB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IACpE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAOD,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,MAAM,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { ILspClient } from '../../core/ports/lsp-client.js';
2
+ import type { LspSymbol, LspLocation } from '../../core/types/code.js';
3
+ export interface TypeScriptLspOptions {
4
+ command?: string;
5
+ args?: string[];
6
+ }
7
+ export declare class TypeScriptLspClient implements ILspClient {
8
+ private process;
9
+ private connection;
10
+ private readonly command;
11
+ private readonly args;
12
+ constructor(options?: TypeScriptLspOptions);
13
+ start(projectRoot: string): Promise<void>;
14
+ stop(): Promise<void>;
15
+ didOpen(uri: string, text: string): Promise<void>;
16
+ didChange(uri: string, text: string): Promise<void>;
17
+ documentSymbols(uri: string): Promise<LspSymbol[]>;
18
+ references(uri: string, line: number, character: number): Promise<LspLocation[]>;
19
+ definition(uri: string, line: number, character: number): Promise<LspLocation[]>;
20
+ implementations(uri: string, line: number, character: number): Promise<LspLocation[]>;
21
+ typeDefinition(uri: string, line: number, character: number): Promise<LspLocation[]>;
22
+ private locationRequest;
23
+ private requireConnection;
24
+ }
25
+ //# sourceMappingURL=typescript-lsp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-lsp.d.ts","sourceRoot":"","sources":["../../../src/adapters/lsp/typescript-lsp.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAwBvE,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,qBAAa,mBAAoB,YAAW,UAAU;IACpD,OAAO,CAAC,OAAO,CAA+C;IAC9D,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;gBAEpB,OAAO,GAAE,oBAAyB;IAKxC,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAerB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IASlD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAahF,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAIhF,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAIrF,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAI5E,eAAe;IAgB7B,OAAO,CAAC,iBAAiB;CAM1B"}
@@ -0,0 +1,131 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { pathToFileURL } from 'node:url';
3
+ import { createMessageConnection, StreamMessageReader, StreamMessageWriter, } from 'vscode-jsonrpc/node.js';
4
+ export class TypeScriptLspClient {
5
+ process = null;
6
+ connection = null;
7
+ command;
8
+ args;
9
+ constructor(options = {}) {
10
+ this.command = options.command ?? 'typescript-language-server';
11
+ this.args = options.args ?? ['--stdio'];
12
+ }
13
+ async start(projectRoot) {
14
+ if (this.process) {
15
+ return;
16
+ }
17
+ const child = spawn(this.command, this.args, { cwd: projectRoot });
18
+ this.process = child;
19
+ const reader = new StreamMessageReader(child.stdout);
20
+ const writer = new StreamMessageWriter(child.stdin);
21
+ const connection = createMessageConnection(reader, writer);
22
+ this.connection = connection;
23
+ connection.listen();
24
+ child.stderr.on('data', () => { });
25
+ await connection.sendRequest('initialize', {
26
+ processId: process.pid,
27
+ rootUri: pathToFileURL(projectRoot).toString(),
28
+ capabilities: {},
29
+ workspaceFolders: [
30
+ { uri: pathToFileURL(projectRoot).toString(), name: 'workspace' },
31
+ ],
32
+ });
33
+ await connection.sendNotification('initialized', {});
34
+ }
35
+ async stop() {
36
+ if (this.connection) {
37
+ try {
38
+ await this.connection.sendRequest('shutdown');
39
+ await this.connection.sendNotification('exit');
40
+ }
41
+ catch { /* server may already be dead */ }
42
+ this.connection.dispose();
43
+ this.connection = null;
44
+ }
45
+ if (this.process) {
46
+ this.process.kill();
47
+ this.process = null;
48
+ }
49
+ }
50
+ async didOpen(uri, text) {
51
+ const conn = this.requireConnection();
52
+ await conn.sendNotification('textDocument/didOpen', {
53
+ textDocument: { uri, languageId: 'typescript', version: 1, text },
54
+ });
55
+ }
56
+ async didChange(uri, text) {
57
+ const conn = this.requireConnection();
58
+ await conn.sendNotification('textDocument/didChange', {
59
+ textDocument: { uri, version: Date.now() },
60
+ contentChanges: [{ text }],
61
+ });
62
+ }
63
+ async documentSymbols(uri) {
64
+ const conn = this.requireConnection();
65
+ const result = await conn.sendRequest('textDocument/documentSymbol', { textDocument: { uri } });
66
+ return flattenSymbols(result ?? [], uri);
67
+ }
68
+ async references(uri, line, character) {
69
+ const conn = this.requireConnection();
70
+ const result = await conn.sendRequest('textDocument/references', {
71
+ textDocument: { uri },
72
+ position: { line, character },
73
+ context: { includeDeclaration: false },
74
+ });
75
+ return (result ?? []).map(toLspLocation);
76
+ }
77
+ async definition(uri, line, character) {
78
+ return this.locationRequest('textDocument/definition', uri, line, character);
79
+ }
80
+ async implementations(uri, line, character) {
81
+ return this.locationRequest('textDocument/implementation', uri, line, character);
82
+ }
83
+ async typeDefinition(uri, line, character) {
84
+ return this.locationRequest('textDocument/typeDefinition', uri, line, character);
85
+ }
86
+ async locationRequest(method, uri, line, character) {
87
+ const conn = this.requireConnection();
88
+ const result = await conn.sendRequest(method, { textDocument: { uri }, position: { line, character } });
89
+ if (!result) {
90
+ return [];
91
+ }
92
+ const raw = Array.isArray(result) ? result : [result];
93
+ return raw.map(toLspLocation);
94
+ }
95
+ requireConnection() {
96
+ if (!this.connection) {
97
+ throw new Error('LSP client not started — call start() first');
98
+ }
99
+ return this.connection;
100
+ }
101
+ }
102
+ function toLspLocation(raw) {
103
+ return {
104
+ uri: raw.uri,
105
+ startLine: raw.range.start.line,
106
+ startChar: raw.range.start.character,
107
+ endLine: raw.range.end.line,
108
+ endChar: raw.range.end.character,
109
+ };
110
+ }
111
+ function flattenSymbols(symbols, uri, container) {
112
+ const out = [];
113
+ for (const sym of symbols) {
114
+ const lspSymbol = {
115
+ name: sym.name,
116
+ kind: sym.kind,
117
+ filePath: uri,
118
+ startLine: sym.range.start.line + 1,
119
+ endLine: sym.range.end.line + 1,
120
+ };
121
+ if (container) {
122
+ lspSymbol.containerName = container;
123
+ }
124
+ out.push(lspSymbol);
125
+ if (sym.children && sym.children.length > 0) {
126
+ out.push(...flattenSymbols(sym.children, uri, sym.name));
127
+ }
128
+ }
129
+ return out;
130
+ }
131
+ //# sourceMappingURL=typescript-lsp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-lsp.js","sourceRoot":"","sources":["../../../src/adapters/lsp/typescript-lsp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type Driver, type Session } from 'neo4j-driver';
2
+ export interface Neo4jConfig {
3
+ uri: string;
4
+ user: string;
5
+ password: string;
6
+ database?: string;
7
+ }
8
+ export declare function createDriver(config: Neo4jConfig): Driver;
9
+ export declare function openSession(driver: Driver, database?: string): Session;
10
+ export declare function verifyConnectivity(driver: Driver): Promise<void>;
11
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/adapters/neo4j/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAKxD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE"}
@@ -0,0 +1,14 @@
1
+ import neo4j from 'neo4j-driver';
2
+ export function createDriver(config) {
3
+ return neo4j.driver(config.uri, neo4j.auth.basic(config.user, config.password), {
4
+ maxConnectionPoolSize: 50,
5
+ connectionAcquisitionTimeout: 30_000,
6
+ });
7
+ }
8
+ export function openSession(driver, database) {
9
+ return database ? driver.session({ database }) : driver.session();
10
+ }
11
+ export async function verifyConnectivity(driver) {
12
+ await driver.verifyConnectivity();
13
+ }
14
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/adapters/neo4j/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,cAAc,CAAC;AAShE,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE;QAC9E,qBAAqB,EAAE,EAAE;QACzB,4BAA4B,EAAE,MAAM;KACrC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,QAAiB;IAC3D,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAc;IACrD,MAAM,MAAM,CAAC,kBAAkB,EAAE,CAAC;AACpC,CAAC"}