codesift-mcp 0.1.0 → 0.2.1

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 (299) hide show
  1. package/LICENSE +66 -21
  2. package/README.md +402 -56
  3. package/dist/cli/args.d.ts +2 -0
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +11 -0
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/commands.d.ts.map +1 -1
  8. package/dist/cli/commands.js +177 -67
  9. package/dist/cli/commands.js.map +1 -1
  10. package/dist/cli/help.d.ts +1 -1
  11. package/dist/cli/help.d.ts.map +1 -1
  12. package/dist/cli/help.js +157 -0
  13. package/dist/cli/help.js.map +1 -1
  14. package/dist/cli/hooks.d.ts +3 -0
  15. package/dist/cli/hooks.d.ts.map +1 -0
  16. package/dist/cli/hooks.js +163 -0
  17. package/dist/cli/hooks.js.map +1 -0
  18. package/dist/cli/setup.d.ts +25 -0
  19. package/dist/cli/setup.d.ts.map +1 -0
  20. package/dist/cli/setup.js +400 -0
  21. package/dist/cli/setup.js.map +1 -0
  22. package/dist/config.d.ts +2 -0
  23. package/dist/config.d.ts.map +1 -1
  24. package/dist/config.js +2 -0
  25. package/dist/config.js.map +1 -1
  26. package/dist/formatters-shortening.d.ts +7 -0
  27. package/dist/formatters-shortening.d.ts.map +1 -0
  28. package/dist/formatters-shortening.js +68 -0
  29. package/dist/formatters-shortening.js.map +1 -0
  30. package/dist/formatters.d.ts +314 -0
  31. package/dist/formatters.d.ts.map +1 -0
  32. package/dist/formatters.js +396 -0
  33. package/dist/formatters.js.map +1 -0
  34. package/dist/instructions.d.ts +6 -0
  35. package/dist/instructions.d.ts.map +1 -0
  36. package/dist/instructions.js +72 -0
  37. package/dist/instructions.js.map +1 -0
  38. package/dist/lsp/lsp-client.d.ts +21 -0
  39. package/dist/lsp/lsp-client.d.ts.map +1 -0
  40. package/dist/lsp/lsp-client.js +122 -0
  41. package/dist/lsp/lsp-client.js.map +1 -0
  42. package/dist/lsp/lsp-manager.d.ts +12 -0
  43. package/dist/lsp/lsp-manager.d.ts.map +1 -0
  44. package/dist/lsp/lsp-manager.js +82 -0
  45. package/dist/lsp/lsp-manager.js.map +1 -0
  46. package/dist/lsp/lsp-servers.d.ts +13 -0
  47. package/dist/lsp/lsp-servers.d.ts.map +1 -0
  48. package/dist/lsp/lsp-servers.js +57 -0
  49. package/dist/lsp/lsp-servers.js.map +1 -0
  50. package/dist/lsp/lsp-tools.d.ts +67 -0
  51. package/dist/lsp/lsp-tools.d.ts.map +1 -0
  52. package/dist/lsp/lsp-tools.js +359 -0
  53. package/dist/lsp/lsp-tools.js.map +1 -0
  54. package/dist/parser/extractors/_shared.d.ts +11 -0
  55. package/dist/parser/extractors/_shared.d.ts.map +1 -0
  56. package/dist/parser/extractors/_shared.js +38 -0
  57. package/dist/parser/extractors/_shared.js.map +1 -0
  58. package/dist/parser/extractors/astro.d.ts +15 -0
  59. package/dist/parser/extractors/astro.d.ts.map +1 -0
  60. package/dist/parser/extractors/astro.js +104 -0
  61. package/dist/parser/extractors/astro.js.map +1 -0
  62. package/dist/parser/extractors/conversation.d.ts +16 -0
  63. package/dist/parser/extractors/conversation.d.ts.map +1 -0
  64. package/dist/parser/extractors/conversation.js +196 -0
  65. package/dist/parser/extractors/conversation.js.map +1 -0
  66. package/dist/parser/extractors/go.d.ts.map +1 -1
  67. package/dist/parser/extractors/go.js +22 -45
  68. package/dist/parser/extractors/go.js.map +1 -1
  69. package/dist/parser/extractors/python.d.ts +1 -1
  70. package/dist/parser/extractors/python.d.ts.map +1 -1
  71. package/dist/parser/extractors/python.js +19 -50
  72. package/dist/parser/extractors/python.js.map +1 -1
  73. package/dist/parser/extractors/rust.d.ts +1 -1
  74. package/dist/parser/extractors/rust.d.ts.map +1 -1
  75. package/dist/parser/extractors/rust.js +7 -34
  76. package/dist/parser/extractors/rust.js.map +1 -1
  77. package/dist/parser/extractors/typescript.d.ts +1 -1
  78. package/dist/parser/extractors/typescript.d.ts.map +1 -1
  79. package/dist/parser/extractors/typescript.js +99 -68
  80. package/dist/parser/extractors/typescript.js.map +1 -1
  81. package/dist/parser/parser-manager.d.ts.map +1 -1
  82. package/dist/parser/parser-manager.js +12 -2
  83. package/dist/parser/parser-manager.js.map +1 -1
  84. package/dist/parser/symbol-extractor.d.ts +2 -0
  85. package/dist/parser/symbol-extractor.d.ts.map +1 -1
  86. package/dist/parser/symbol-extractor.js +2 -0
  87. package/dist/parser/symbol-extractor.js.map +1 -1
  88. package/dist/register-tools.d.ts +127 -0
  89. package/dist/register-tools.d.ts.map +1 -0
  90. package/dist/register-tools.js +1453 -0
  91. package/dist/register-tools.js.map +1 -0
  92. package/dist/retrieval/codebase-retrieval.d.ts +4 -26
  93. package/dist/retrieval/codebase-retrieval.d.ts.map +1 -1
  94. package/dist/retrieval/codebase-retrieval.js +105 -403
  95. package/dist/retrieval/codebase-retrieval.js.map +1 -1
  96. package/dist/retrieval/retrieval-constants.d.ts +27 -0
  97. package/dist/retrieval/retrieval-constants.d.ts.map +1 -0
  98. package/dist/retrieval/retrieval-constants.js +27 -0
  99. package/dist/retrieval/retrieval-constants.js.map +1 -0
  100. package/dist/retrieval/retrieval-schemas.d.ts +107 -0
  101. package/dist/retrieval/retrieval-schemas.d.ts.map +1 -0
  102. package/dist/retrieval/retrieval-schemas.js +102 -0
  103. package/dist/retrieval/retrieval-schemas.js.map +1 -0
  104. package/dist/retrieval/retrieval-utils.d.ts +40 -0
  105. package/dist/retrieval/retrieval-utils.d.ts.map +1 -0
  106. package/dist/retrieval/retrieval-utils.js +139 -0
  107. package/dist/retrieval/retrieval-utils.js.map +1 -0
  108. package/dist/retrieval/semantic-handlers.d.ts +8 -0
  109. package/dist/retrieval/semantic-handlers.d.ts.map +1 -0
  110. package/dist/retrieval/semantic-handlers.js +152 -0
  111. package/dist/retrieval/semantic-handlers.js.map +1 -0
  112. package/dist/search/bm25.d.ts +6 -1
  113. package/dist/search/bm25.d.ts.map +1 -1
  114. package/dist/search/bm25.js +95 -32
  115. package/dist/search/bm25.js.map +1 -1
  116. package/dist/search/chunker.d.ts +10 -0
  117. package/dist/search/chunker.d.ts.map +1 -1
  118. package/dist/search/chunker.js +63 -11
  119. package/dist/search/chunker.js.map +1 -1
  120. package/dist/search/reranker.d.ts +15 -0
  121. package/dist/search/reranker.d.ts.map +1 -0
  122. package/dist/search/reranker.js +126 -0
  123. package/dist/search/reranker.js.map +1 -0
  124. package/dist/search/semantic.d.ts +1 -1
  125. package/dist/search/semantic.d.ts.map +1 -1
  126. package/dist/search/semantic.js +40 -45
  127. package/dist/search/semantic.js.map +1 -1
  128. package/dist/server-helpers.d.ts +29 -0
  129. package/dist/server-helpers.d.ts.map +1 -0
  130. package/dist/server-helpers.js +312 -0
  131. package/dist/server-helpers.js.map +1 -0
  132. package/dist/server.d.ts +1 -1
  133. package/dist/server.d.ts.map +1 -1
  134. package/dist/server.js +11 -271
  135. package/dist/server.js.map +1 -1
  136. package/dist/storage/_shared.d.ts +9 -0
  137. package/dist/storage/_shared.d.ts.map +1 -0
  138. package/dist/storage/_shared.js +26 -0
  139. package/dist/storage/_shared.js.map +1 -0
  140. package/dist/storage/chunk-store.d.ts.map +1 -1
  141. package/dist/storage/chunk-store.js +23 -63
  142. package/dist/storage/chunk-store.js.map +1 -1
  143. package/dist/storage/embedding-store.d.ts +6 -3
  144. package/dist/storage/embedding-store.d.ts.map +1 -1
  145. package/dist/storage/embedding-store.js +54 -30
  146. package/dist/storage/embedding-store.js.map +1 -1
  147. package/dist/storage/graph-store.d.ts +48 -0
  148. package/dist/storage/graph-store.d.ts.map +1 -0
  149. package/dist/storage/graph-store.js +52 -0
  150. package/dist/storage/graph-store.js.map +1 -0
  151. package/dist/storage/index-store.d.ts +5 -0
  152. package/dist/storage/index-store.d.ts.map +1 -1
  153. package/dist/storage/index-store.js +28 -16
  154. package/dist/storage/index-store.js.map +1 -1
  155. package/dist/storage/registry.d.ts +4 -0
  156. package/dist/storage/registry.d.ts.map +1 -1
  157. package/dist/storage/registry.js +16 -16
  158. package/dist/storage/registry.js.map +1 -1
  159. package/dist/storage/usage-stats.d.ts +6 -0
  160. package/dist/storage/usage-stats.d.ts.map +1 -1
  161. package/dist/storage/usage-stats.js +59 -11
  162. package/dist/storage/usage-stats.js.map +1 -1
  163. package/dist/storage/usage-tracker.d.ts +3 -0
  164. package/dist/storage/usage-tracker.d.ts.map +1 -1
  165. package/dist/storage/usage-tracker.js +50 -132
  166. package/dist/storage/usage-tracker.js.map +1 -1
  167. package/dist/storage/watcher.d.ts +2 -1
  168. package/dist/storage/watcher.d.ts.map +1 -1
  169. package/dist/storage/watcher.js +16 -16
  170. package/dist/storage/watcher.js.map +1 -1
  171. package/dist/tools/ast-query-tools.d.ts +29 -0
  172. package/dist/tools/ast-query-tools.d.ts.map +1 -0
  173. package/dist/tools/ast-query-tools.js +110 -0
  174. package/dist/tools/ast-query-tools.js.map +1 -0
  175. package/dist/tools/boundary-tools.d.ts +31 -0
  176. package/dist/tools/boundary-tools.d.ts.map +1 -0
  177. package/dist/tools/boundary-tools.js +62 -0
  178. package/dist/tools/boundary-tools.js.map +1 -0
  179. package/dist/tools/clone-tools.d.ts +35 -0
  180. package/dist/tools/clone-tools.d.ts.map +1 -0
  181. package/dist/tools/clone-tools.js +181 -0
  182. package/dist/tools/clone-tools.js.map +1 -0
  183. package/dist/tools/community-tools.d.ts +23 -0
  184. package/dist/tools/community-tools.d.ts.map +1 -0
  185. package/dist/tools/community-tools.js +297 -0
  186. package/dist/tools/community-tools.js.map +1 -0
  187. package/dist/tools/complexity-tools.d.ts +34 -0
  188. package/dist/tools/complexity-tools.d.ts.map +1 -0
  189. package/dist/tools/complexity-tools.js +135 -0
  190. package/dist/tools/complexity-tools.js.map +1 -0
  191. package/dist/tools/context-tools.d.ts +44 -3
  192. package/dist/tools/context-tools.d.ts.map +1 -1
  193. package/dist/tools/context-tools.js +329 -99
  194. package/dist/tools/context-tools.js.map +1 -1
  195. package/dist/tools/conversation-tools.d.ts +107 -0
  196. package/dist/tools/conversation-tools.d.ts.map +1 -0
  197. package/dist/tools/conversation-tools.js +419 -0
  198. package/dist/tools/conversation-tools.js.map +1 -0
  199. package/dist/tools/coordinator-tools.d.ts +73 -0
  200. package/dist/tools/coordinator-tools.d.ts.map +1 -0
  201. package/dist/tools/coordinator-tools.js +153 -0
  202. package/dist/tools/coordinator-tools.js.map +1 -0
  203. package/dist/tools/cross-repo-tools.d.ts +43 -0
  204. package/dist/tools/cross-repo-tools.d.ts.map +1 -0
  205. package/dist/tools/cross-repo-tools.js +55 -0
  206. package/dist/tools/cross-repo-tools.js.map +1 -0
  207. package/dist/tools/diff-tools.d.ts +4 -1
  208. package/dist/tools/diff-tools.d.ts.map +1 -1
  209. package/dist/tools/diff-tools.js +23 -5
  210. package/dist/tools/diff-tools.js.map +1 -1
  211. package/dist/tools/frequency-tools.d.ts +46 -0
  212. package/dist/tools/frequency-tools.d.ts.map +1 -0
  213. package/dist/tools/frequency-tools.js +184 -0
  214. package/dist/tools/frequency-tools.js.map +1 -0
  215. package/dist/tools/generate-tools.d.ts.map +1 -1
  216. package/dist/tools/generate-tools.js +13 -2
  217. package/dist/tools/generate-tools.js.map +1 -1
  218. package/dist/tools/graph-tools.d.ts +44 -11
  219. package/dist/tools/graph-tools.d.ts.map +1 -1
  220. package/dist/tools/graph-tools.js +147 -104
  221. package/dist/tools/graph-tools.js.map +1 -1
  222. package/dist/tools/hotspot-tools.d.ts +24 -0
  223. package/dist/tools/hotspot-tools.d.ts.map +1 -0
  224. package/dist/tools/hotspot-tools.js +122 -0
  225. package/dist/tools/hotspot-tools.js.map +1 -0
  226. package/dist/tools/impact-tools.d.ts +13 -0
  227. package/dist/tools/impact-tools.d.ts.map +1 -0
  228. package/dist/tools/impact-tools.js +238 -0
  229. package/dist/tools/impact-tools.js.map +1 -0
  230. package/dist/tools/index-tools.d.ts +44 -3
  231. package/dist/tools/index-tools.d.ts.map +1 -1
  232. package/dist/tools/index-tools.js +530 -222
  233. package/dist/tools/index-tools.js.map +1 -1
  234. package/dist/tools/memory-tools.d.ts +35 -0
  235. package/dist/tools/memory-tools.d.ts.map +1 -0
  236. package/dist/tools/memory-tools.js +229 -0
  237. package/dist/tools/memory-tools.js.map +1 -0
  238. package/dist/tools/outline-tools.d.ts +24 -13
  239. package/dist/tools/outline-tools.d.ts.map +1 -1
  240. package/dist/tools/outline-tools.js +113 -87
  241. package/dist/tools/outline-tools.js.map +1 -1
  242. package/dist/tools/pattern-tools.d.ts +32 -0
  243. package/dist/tools/pattern-tools.d.ts.map +1 -0
  244. package/dist/tools/pattern-tools.js +116 -0
  245. package/dist/tools/pattern-tools.js.map +1 -0
  246. package/dist/tools/report-tools.d.ts +5 -0
  247. package/dist/tools/report-tools.d.ts.map +1 -0
  248. package/dist/tools/report-tools.js +167 -0
  249. package/dist/tools/report-tools.js.map +1 -0
  250. package/dist/tools/review-diff-tools.d.ts +148 -0
  251. package/dist/tools/review-diff-tools.d.ts.map +1 -0
  252. package/dist/tools/review-diff-tools.js +852 -0
  253. package/dist/tools/review-diff-tools.js.map +1 -0
  254. package/dist/tools/route-tools.d.ts +32 -0
  255. package/dist/tools/route-tools.d.ts.map +1 -0
  256. package/dist/tools/route-tools.js +276 -0
  257. package/dist/tools/route-tools.js.map +1 -0
  258. package/dist/tools/search-ranker.d.ts +5 -0
  259. package/dist/tools/search-ranker.d.ts.map +1 -0
  260. package/dist/tools/search-ranker.js +142 -0
  261. package/dist/tools/search-ranker.js.map +1 -0
  262. package/dist/tools/search-tools.d.ts +24 -1
  263. package/dist/tools/search-tools.d.ts.map +1 -1
  264. package/dist/tools/search-tools.js +459 -225
  265. package/dist/tools/search-tools.js.map +1 -1
  266. package/dist/tools/secret-tools.d.ts +104 -0
  267. package/dist/tools/secret-tools.d.ts.map +1 -0
  268. package/dist/tools/secret-tools.js +410 -0
  269. package/dist/tools/secret-tools.js.map +1 -0
  270. package/dist/tools/symbol-tools.d.ts +90 -2
  271. package/dist/tools/symbol-tools.d.ts.map +1 -1
  272. package/dist/tools/symbol-tools.js +576 -42
  273. package/dist/tools/symbol-tools.js.map +1 -1
  274. package/dist/types.d.ts +34 -1
  275. package/dist/types.d.ts.map +1 -1
  276. package/dist/utils/framework-detect.d.ts +5 -0
  277. package/dist/utils/framework-detect.d.ts.map +1 -0
  278. package/dist/utils/framework-detect.js +36 -0
  279. package/dist/utils/framework-detect.js.map +1 -0
  280. package/dist/utils/glob.d.ts +19 -0
  281. package/dist/utils/glob.d.ts.map +1 -0
  282. package/dist/utils/glob.js +74 -0
  283. package/dist/utils/glob.js.map +1 -0
  284. package/dist/utils/import-graph.d.ts +29 -0
  285. package/dist/utils/import-graph.d.ts.map +1 -0
  286. package/dist/utils/import-graph.js +125 -0
  287. package/dist/utils/import-graph.js.map +1 -0
  288. package/dist/utils/test-file.d.ts.map +1 -1
  289. package/dist/utils/test-file.js +1 -0
  290. package/dist/utils/test-file.js.map +1 -1
  291. package/dist/utils/walk.d.ts +45 -0
  292. package/dist/utils/walk.d.ts.map +1 -0
  293. package/dist/utils/walk.js +87 -0
  294. package/dist/utils/walk.js.map +1 -0
  295. package/package.json +12 -5
  296. package/rules/codesift.md +187 -0
  297. package/rules/codesift.mdc +192 -0
  298. package/rules/codex.md +187 -0
  299. package/rules/gemini.md +187 -0
@@ -0,0 +1,359 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { getLspManager } from "./lsp-manager.js";
5
+ import { getCodeIndex, indexFile } from "../tools/index-tools.js";
6
+ import { withTimeout } from "../retrieval/retrieval-utils.js";
7
+ const LSP_TIMEOUT_MS = 10_000;
8
+ /** Map file extension to LSP language ID. */
9
+ export function detectLanguage(filePath) {
10
+ const ext = filePath.slice(filePath.lastIndexOf("."));
11
+ const map = {
12
+ ".ts": "typescript", ".tsx": "typescript", ".js": "javascript", ".jsx": "javascript",
13
+ ".py": "python", ".go": "go", ".rs": "rust", ".rb": "ruby", ".php": "php",
14
+ };
15
+ return map[ext] ?? null;
16
+ }
17
+ /** Resolve symbol name to file position. Uses provided params or searches index. */
18
+ export async function resolveSymbolPosition(index, symbolName, filePath, line, character) {
19
+ if (filePath && line !== undefined) {
20
+ return { filePath, line, character: character ?? 0 };
21
+ }
22
+ const sym = index.symbols.find((s) => s.name === symbolName);
23
+ if (!sym)
24
+ return null;
25
+ return { filePath: sym.file, line: sym.start_line - 1, character: 0 };
26
+ }
27
+ /**
28
+ * Go to the definition of a symbol.
29
+ * LSP when available, falls back to index search.
30
+ */
31
+ export async function goToDefinition(repo, symbolName, filePath, line, character) {
32
+ const index = await getCodeIndex(repo);
33
+ if (!index)
34
+ throw new Error(`Repository "${repo}" not found.`);
35
+ const pos = await resolveSymbolPosition(index, symbolName, filePath, line, character);
36
+ if (!pos)
37
+ return null;
38
+ const language = detectLanguage(pos.filePath);
39
+ if (!language)
40
+ return null;
41
+ const manager = getLspManager();
42
+ const client = await manager.getClient(index.root, language);
43
+ if (client) {
44
+ try {
45
+ const fileUri = pathToFileURL(join(index.root, pos.filePath)).href;
46
+ const content = await readFile(join(index.root, pos.filePath), "utf-8");
47
+ await client.openFile(fileUri, content, language);
48
+ const result = await withTimeout(client.request("textDocument/definition", {
49
+ textDocument: { uri: fileUri },
50
+ position: { line: pos.line, character: pos.character },
51
+ }), LSP_TIMEOUT_MS, "LSP definition");
52
+ const loc = Array.isArray(result) ? result[0] : result;
53
+ if (loc && typeof loc === "object") {
54
+ const l = loc;
55
+ const uri = l.targetUri ?? l.uri ?? "";
56
+ const range = l.targetRange ?? l.range;
57
+ const rootUri = pathToFileURL(index.root).href;
58
+ const defFile = uri.replace(rootUri + "/", "").replace(rootUri, "");
59
+ const defLine = (range?.start.line ?? 0) + 1;
60
+ let preview;
61
+ try {
62
+ const defContent = await readFile(join(index.root, defFile), "utf-8");
63
+ const lines = defContent.split("\n");
64
+ const start = Math.max(0, defLine - 2);
65
+ const end = Math.min(lines.length, defLine + 3);
66
+ preview = lines.slice(start, end).join("\n");
67
+ }
68
+ catch { /* ignore */ }
69
+ return { file: defFile, line: defLine, character: range?.start.character ?? 0, via: "lsp", ...(preview !== undefined ? { preview } : {}) };
70
+ }
71
+ }
72
+ catch {
73
+ // LSP failed — fall through to index fallback
74
+ }
75
+ }
76
+ // Fallback: search index
77
+ const sym = index.symbols.find((s) => s.name === symbolName);
78
+ if (!sym)
79
+ return null;
80
+ const hint = language ? manager.getServerName(language) : null;
81
+ return {
82
+ file: sym.file,
83
+ line: sym.start_line,
84
+ character: 0,
85
+ via: "index",
86
+ ...(sym.source ? { preview: sym.source.slice(0, 300) } : {}),
87
+ ...(hint ? { hint: `Install ${hint} for precise go-to-definition` } : {}),
88
+ };
89
+ }
90
+ /**
91
+ * Get type information for a symbol via LSP textDocument/hover.
92
+ * Returns type signature + documentation, or hint when LSP is unavailable.
93
+ */
94
+ export async function getTypeInfo(repo, symbolName, filePath, line, character) {
95
+ const index = await getCodeIndex(repo);
96
+ if (!index)
97
+ throw new Error(`Repository "${repo}" not found.`);
98
+ const pos = await resolveSymbolPosition(index, symbolName, filePath, line, character);
99
+ if (!pos)
100
+ return { via: "unavailable", hint: "Symbol not found in index" };
101
+ const language = detectLanguage(pos.filePath);
102
+ if (!language)
103
+ return { via: "unavailable", hint: "Unsupported language for LSP" };
104
+ const manager = getLspManager();
105
+ const client = await manager.getClient(index.root, language);
106
+ if (!client) {
107
+ const serverName = manager.getServerName(language);
108
+ return { via: "unavailable", hint: `Install ${serverName ?? "a language server"} for type info` };
109
+ }
110
+ try {
111
+ const fileUri = pathToFileURL(join(index.root, pos.filePath)).href;
112
+ const content = await readFile(join(index.root, pos.filePath), "utf-8");
113
+ await client.openFile(fileUri, content, language);
114
+ const result = await withTimeout(client.request("textDocument/hover", {
115
+ textDocument: { uri: fileUri },
116
+ position: { line: pos.line, character: pos.character },
117
+ }), LSP_TIMEOUT_MS, "LSP hover");
118
+ if (!result?.contents)
119
+ return { via: "unavailable", hint: "No hover info at this position" };
120
+ let typeStr;
121
+ if (typeof result.contents === "string") {
122
+ typeStr = result.contents;
123
+ }
124
+ else if (typeof result.contents === "object" && "value" in result.contents) {
125
+ typeStr = result.contents.value;
126
+ }
127
+ else if (Array.isArray(result.contents)) {
128
+ typeStr = result.contents.map((c) => typeof c === "string" ? c : c.value ?? "").join("\n");
129
+ }
130
+ else {
131
+ typeStr = String(result.contents);
132
+ }
133
+ // Split type from documentation
134
+ const parts = typeStr.split("\n---\n");
135
+ const type = parts[0]?.trim() ?? typeStr;
136
+ const documentation = parts.length > 1 ? parts.slice(1).join("\n---\n").trim() : undefined;
137
+ if (documentation) {
138
+ return { type, documentation, via: "lsp" };
139
+ }
140
+ return { type, via: "lsp" };
141
+ }
142
+ catch {
143
+ return { via: "unavailable", hint: "LSP hover request failed" };
144
+ }
145
+ }
146
+ /**
147
+ * Find references to a symbol using LSP textDocument/references.
148
+ * Returns null if LSP is unavailable (caller should fall back to grep).
149
+ */
150
+ export async function findReferencesLsp(repo, symbolName, filePath, line, character) {
151
+ const index = await getCodeIndex(repo);
152
+ if (!index)
153
+ return null;
154
+ const pos = await resolveSymbolPosition(index, symbolName, filePath, line, character);
155
+ if (!pos)
156
+ return null;
157
+ const language = detectLanguage(pos.filePath);
158
+ if (!language)
159
+ return null;
160
+ const manager = getLspManager();
161
+ const client = await manager.getClient(index.root, language);
162
+ if (!client)
163
+ return null;
164
+ try {
165
+ const fileUri = pathToFileURL(join(index.root, pos.filePath)).href;
166
+ const content = await readFile(join(index.root, pos.filePath), "utf-8");
167
+ await client.openFile(fileUri, content, language);
168
+ const result = await withTimeout(client.request("textDocument/references", {
169
+ textDocument: { uri: fileUri },
170
+ position: { line: pos.line, character: pos.character },
171
+ context: { includeDeclaration: false },
172
+ }), LSP_TIMEOUT_MS, "LSP references");
173
+ if (!Array.isArray(result))
174
+ return null;
175
+ const rootUri = pathToFileURL(index.root).href + "/";
176
+ return result.map((loc) => ({
177
+ file: (loc.uri ?? "").replace(rootUri, ""),
178
+ line: (loc.range?.start?.line ?? 0) + 1,
179
+ col: (loc.range?.start?.character ?? 0) + 1,
180
+ context: "",
181
+ }));
182
+ }
183
+ catch {
184
+ return null;
185
+ }
186
+ }
187
+ /** LSP SymbolKind enum → human-readable */
188
+ function lspSymbolKindName(kind) {
189
+ const names = {
190
+ 1: "file", 2: "module", 3: "namespace", 4: "package", 5: "class",
191
+ 6: "method", 7: "property", 8: "field", 9: "constructor", 10: "enum",
192
+ 11: "interface", 12: "function", 13: "variable", 14: "constant",
193
+ 15: "string", 16: "number", 17: "boolean", 18: "array", 19: "object",
194
+ 20: "key", 21: "null", 22: "enum_member", 23: "struct", 24: "event",
195
+ 25: "operator", 26: "type_parameter",
196
+ };
197
+ return names[kind] ?? "unknown";
198
+ }
199
+ /**
200
+ * Get call hierarchy for a symbol: who calls it (incoming) and what it calls (outgoing).
201
+ * Uses LSP textDocument/prepareCallHierarchy + callHierarchy/incomingCalls + callHierarchy/outgoingCalls.
202
+ */
203
+ export async function getCallHierarchy(repo, symbolName, filePath, line, character) {
204
+ const index = await getCodeIndex(repo);
205
+ if (!index)
206
+ throw new Error(`Repository "${repo}" not found.`);
207
+ const pos = await resolveSymbolPosition(index, symbolName, filePath, line, character);
208
+ if (!pos)
209
+ return { symbol: { name: symbolName, kind: "unknown", file: "", line: 0 }, incoming: [], outgoing: [], via: "unavailable", hint: "Symbol not found in index" };
210
+ const language = detectLanguage(pos.filePath);
211
+ if (!language)
212
+ return { symbol: { name: symbolName, kind: "unknown", file: pos.filePath, line: pos.line }, incoming: [], outgoing: [], via: "unavailable", hint: "Unsupported language for LSP" };
213
+ const manager = getLspManager();
214
+ const client = await manager.getClient(index.root, language);
215
+ if (!client) {
216
+ const serverName = manager.getServerName(language);
217
+ return { symbol: { name: symbolName, kind: "unknown", file: pos.filePath, line: pos.line }, incoming: [], outgoing: [], via: "unavailable", hint: `Install ${serverName ?? "a language server"} for call hierarchy` };
218
+ }
219
+ const fileUri = pathToFileURL(join(index.root, pos.filePath)).href;
220
+ const rootUri = pathToFileURL(index.root).href + "/";
221
+ try {
222
+ const content = await readFile(join(index.root, pos.filePath), "utf-8");
223
+ await client.openFile(fileUri, content, language);
224
+ // Prepare call hierarchy
225
+ const items = await withTimeout(client.request("textDocument/prepareCallHierarchy", {
226
+ textDocument: { uri: fileUri },
227
+ position: { line: pos.line, character: pos.character },
228
+ }), LSP_TIMEOUT_MS, "LSP prepareCallHierarchy");
229
+ if (!items || items.length === 0) {
230
+ return { symbol: { name: symbolName, kind: "unknown", file: pos.filePath, line: pos.line }, incoming: [], outgoing: [], via: "unavailable", hint: "No call hierarchy item at this position" };
231
+ }
232
+ const item = items[0];
233
+ const symbol = {
234
+ name: item.name,
235
+ kind: lspSymbolKindName(item.kind),
236
+ file: item.uri.replace(rootUri, ""),
237
+ line: item.range.start.line + 1,
238
+ ...(item.detail ? { detail: item.detail } : {}),
239
+ };
240
+ // Fetch incoming and outgoing calls in parallel
241
+ const [incomingRaw, outgoingRaw] = await Promise.all([
242
+ withTimeout(client.request("callHierarchy/incomingCalls", { item }), LSP_TIMEOUT_MS, "LSP incomingCalls").catch(() => []),
243
+ withTimeout(client.request("callHierarchy/outgoingCalls", { item }), LSP_TIMEOUT_MS, "LSP outgoingCalls").catch(() => []),
244
+ ]);
245
+ const incoming = (incomingRaw ?? []).map((c) => ({
246
+ name: c.from.name,
247
+ kind: lspSymbolKindName(c.from.kind),
248
+ file: c.from.uri.replace(rootUri, ""),
249
+ line: c.from.range.start.line + 1,
250
+ ...(c.from.detail ? { detail: c.from.detail } : {}),
251
+ }));
252
+ const outgoing = (outgoingRaw ?? []).map((c) => ({
253
+ name: c.to.name,
254
+ kind: lspSymbolKindName(c.to.kind),
255
+ file: c.to.uri.replace(rootUri, ""),
256
+ line: c.to.range.start.line + 1,
257
+ ...(c.to.detail ? { detail: c.to.detail } : {}),
258
+ }));
259
+ return { symbol, incoming, outgoing, via: "lsp" };
260
+ }
261
+ catch {
262
+ return { symbol: { name: symbolName, kind: "unknown", file: pos.filePath, line: pos.line }, incoming: [], outgoing: [], via: "unavailable", hint: "LSP call hierarchy request failed" };
263
+ }
264
+ }
265
+ export async function renameSymbol(repo, symbolName, newName, filePath, line, character) {
266
+ const index = await getCodeIndex(repo);
267
+ if (!index)
268
+ throw new Error(`Repository "${repo}" not found.`);
269
+ const pos = await resolveSymbolPosition(index, symbolName, filePath, line, character);
270
+ if (!pos)
271
+ throw new Error(`Symbol "${symbolName}" not found in index.`);
272
+ const language = detectLanguage(pos.filePath);
273
+ if (!language)
274
+ throw new Error("Unsupported language for LSP rename.");
275
+ const manager = getLspManager();
276
+ const client = await manager.getClient(index.root, language);
277
+ if (!client) {
278
+ const serverName = manager.getServerName(language);
279
+ throw new Error(`rename_symbol requires a language server. Install ${serverName ?? "a language server"}.`);
280
+ }
281
+ const fileUri = pathToFileURL(join(index.root, pos.filePath)).href;
282
+ const content = await readFile(join(index.root, pos.filePath), "utf-8");
283
+ await client.openFile(fileUri, content, language);
284
+ // Validate rename is possible
285
+ try {
286
+ await withTimeout(client.request("textDocument/prepareRename", {
287
+ textDocument: { uri: fileUri },
288
+ position: { line: pos.line, character: pos.character },
289
+ }), LSP_TIMEOUT_MS, "LSP prepareRename");
290
+ }
291
+ catch (err) {
292
+ const msg = err instanceof Error ? err.message : String(err);
293
+ throw new Error(`Cannot rename at this position: ${msg}`);
294
+ }
295
+ // Execute rename
296
+ const workspaceEdit = await withTimeout(client.request("textDocument/rename", {
297
+ textDocument: { uri: fileUri },
298
+ position: { line: pos.line, character: pos.character },
299
+ newName,
300
+ }), LSP_TIMEOUT_MS, "LSP rename");
301
+ // Normalize workspace edits
302
+ const fileEdits = new Map();
303
+ const rootUri = pathToFileURL(index.root).href + "/";
304
+ if (workspaceEdit.changes) {
305
+ for (const [uri, edits] of Object.entries(workspaceEdit.changes)) {
306
+ fileEdits.set(uri.replace(rootUri, ""), edits);
307
+ }
308
+ }
309
+ else if (workspaceEdit.documentChanges) {
310
+ for (const docChange of workspaceEdit.documentChanges) {
311
+ if ("edits" in docChange) {
312
+ fileEdits.set(docChange.textDocument.uri.replace(rootUri, ""), docChange.edits);
313
+ }
314
+ }
315
+ }
316
+ // Apply edits to disk
317
+ const results = [];
318
+ for (const [relPath, edits] of fileEdits) {
319
+ const absPath = join(index.root, relPath);
320
+ let fileContent;
321
+ try {
322
+ fileContent = await readFile(absPath, "utf-8");
323
+ }
324
+ catch {
325
+ continue;
326
+ }
327
+ const lines = fileContent.split("\n");
328
+ // Apply in reverse order to preserve line numbers
329
+ const sortedEdits = [...edits].sort((a, b) => {
330
+ const lineDiff = b.range.start.line - a.range.start.line;
331
+ return lineDiff !== 0 ? lineDiff : b.range.start.character - a.range.start.character;
332
+ });
333
+ for (const edit of sortedEdits) {
334
+ const startLine = edit.range.start.line;
335
+ const startChar = edit.range.start.character;
336
+ const endLine = edit.range.end.line;
337
+ const endChar = edit.range.end.character;
338
+ if (startLine === endLine) {
339
+ const l = lines[startLine] ?? "";
340
+ lines[startLine] = l.slice(0, startChar) + edit.newText + l.slice(endChar);
341
+ }
342
+ else {
343
+ const firstLine = (lines[startLine] ?? "").slice(0, startChar);
344
+ const lastLine = (lines[endLine] ?? "").slice(endChar);
345
+ const newLines = (firstLine + edit.newText + lastLine).split("\n");
346
+ lines.splice(startLine, endLine - startLine + 1, ...newLines);
347
+ }
348
+ }
349
+ await writeFile(absPath, lines.join("\n"), "utf-8");
350
+ results.push({ file: relPath, changes: edits.length });
351
+ // Reindex changed file
352
+ try {
353
+ await indexFile(absPath);
354
+ }
355
+ catch { /* non-fatal */ }
356
+ }
357
+ return { files_changed: results.length, edits: results };
358
+ }
359
+ //# sourceMappingURL=lsp-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-tools.js","sourceRoot":"","sources":["../../src/lsp/lsp-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type Parser from "web-tree-sitter";
2
+ import type { CodeSymbol, SymbolKind } from "../../types.js";
3
+ export declare const MAX_SOURCE_LENGTH = 5000;
4
+ export declare function getNodeName(node: Parser.SyntaxNode): string | null;
5
+ export declare function extractNodeSource(node: Parser.SyntaxNode, source: string): string;
6
+ export declare function makeSymbol(node: Parser.SyntaxNode, name: string, kind: SymbolKind, filePath: string, source: string, repo: string, opts?: {
7
+ parentId?: string | undefined;
8
+ docstring?: string | undefined;
9
+ signature?: string | undefined;
10
+ }): CodeSymbol;
11
+ //# sourceMappingURL=_shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_shared.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/_shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG7D,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,GAAG,IAAI,CAGlE;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,UAAU,EACvB,MAAM,EAAE,MAAM,GACb,MAAM,CAMR;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,CAAC,UAAU,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IACL,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,GACA,UAAU,CAuBZ"}
@@ -0,0 +1,38 @@
1
+ import { tokenizeIdentifier, makeSymbolId } from "../symbol-extractor.js";
2
+ export const MAX_SOURCE_LENGTH = 5000;
3
+ export function getNodeName(node) {
4
+ const nameNode = node.childForFieldName("name");
5
+ return nameNode?.text ?? null;
6
+ }
7
+ export function extractNodeSource(node, source) {
8
+ const text = source.slice(node.startIndex, node.endIndex);
9
+ if (text.length > MAX_SOURCE_LENGTH) {
10
+ return text.slice(0, MAX_SOURCE_LENGTH) + "...";
11
+ }
12
+ return text;
13
+ }
14
+ export function makeSymbol(node, name, kind, filePath, source, repo, opts) {
15
+ const startLine = node.startPosition.row + 1;
16
+ const endLine = node.endPosition.row + 1;
17
+ const sym = {
18
+ id: makeSymbolId(repo, filePath, name, startLine),
19
+ repo,
20
+ name,
21
+ kind,
22
+ file: filePath,
23
+ start_line: startLine,
24
+ end_line: endLine,
25
+ start_byte: node.startIndex,
26
+ end_byte: node.endIndex,
27
+ source: extractNodeSource(node, source),
28
+ tokens: tokenizeIdentifier(name),
29
+ };
30
+ if (opts?.docstring)
31
+ sym.docstring = opts.docstring;
32
+ if (opts?.parentId)
33
+ sym.parent = opts.parentId;
34
+ if (opts?.signature)
35
+ sym.signature = opts.signature;
36
+ return sym;
37
+ }
38
+ //# sourceMappingURL=_shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_shared.js","sourceRoot":"","sources":["../../../src/parser/extractors/_shared.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC,MAAM,UAAU,WAAW,CAAC,IAAuB;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAChD,OAAO,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAuB,EACvB,MAAc;IAEd,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC;IAClD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAuB,EACvB,IAAY,EACZ,IAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,IAAY,EACZ,IAIC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;IAEzC,MAAM,GAAG,GAAe;QACtB,EAAE,EAAE,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC;QACjD,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,OAAO;QACjB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,MAAM,EAAE,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC;QACvC,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC;KACjC,CAAC;IAEF,IAAI,IAAI,EAAE,SAAS;QAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACpD,IAAI,IAAI,EAAE,QAAQ;QAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/C,IAAI,IAAI,EAAE,SAAS;QAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAEpD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { CodeSymbol } from "../../types.js";
2
+ /**
3
+ * Extract symbols from Astro files.
4
+ *
5
+ * Astro files have TypeScript frontmatter between --- fences,
6
+ * followed by HTML template. We extract:
7
+ * - interface Props (component props)
8
+ * - const declarations (exported config, data)
9
+ * - function declarations
10
+ * - import statements (as metadata, not symbols)
11
+ *
12
+ * The template portion is not parsed for symbols since it's HTML.
13
+ */
14
+ export declare function extractAstroSymbols(source: string, filePath: string, repo: string): CodeSymbol[];
15
+ //# sourceMappingURL=astro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/astro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGjD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,UAAU,EAAE,CAiGd"}
@@ -0,0 +1,104 @@
1
+ import { makeSymbolId, tokenizeIdentifier } from "../symbol-extractor.js";
2
+ /**
3
+ * Extract symbols from Astro files.
4
+ *
5
+ * Astro files have TypeScript frontmatter between --- fences,
6
+ * followed by HTML template. We extract:
7
+ * - interface Props (component props)
8
+ * - const declarations (exported config, data)
9
+ * - function declarations
10
+ * - import statements (as metadata, not symbols)
11
+ *
12
+ * The template portion is not parsed for symbols since it's HTML.
13
+ */
14
+ export function extractAstroSymbols(source, filePath, repo) {
15
+ const symbols = [];
16
+ // Extract frontmatter between --- fences
17
+ const fmMatch = source.match(/^---\n([\s\S]*?)\n---/);
18
+ if (!fmMatch) {
19
+ // No frontmatter — treat as pure template, extract component name from filename
20
+ const name = filePath.split("/").pop()?.replace(".astro", "") ?? filePath;
21
+ symbols.push({
22
+ id: makeSymbolId(repo, filePath, name, 1),
23
+ repo,
24
+ name,
25
+ kind: "function", // Astro components are like functions
26
+ file: filePath,
27
+ start_line: 1,
28
+ end_line: source.split("\n").length,
29
+ source: source.slice(0, 500),
30
+ });
31
+ return symbols;
32
+ }
33
+ const frontmatter = fmMatch[1];
34
+ const fmStartLine = 2; // Line after first ---
35
+ // Extract interface Props
36
+ const propsMatch = frontmatter.match(/interface\s+Props\s*\{[\s\S]*?\}/);
37
+ if (propsMatch) {
38
+ const propsLine = frontmatter.slice(0, frontmatter.indexOf(propsMatch[0])).split("\n").length;
39
+ symbols.push({
40
+ id: makeSymbolId(repo, filePath, "Props", fmStartLine + propsLine - 1),
41
+ repo,
42
+ name: "Props",
43
+ kind: "interface",
44
+ file: filePath,
45
+ start_line: fmStartLine + propsLine - 1,
46
+ end_line: fmStartLine + propsLine - 1 + propsMatch[0].split("\n").length - 1,
47
+ source: propsMatch[0],
48
+ });
49
+ }
50
+ // Extract const declarations
51
+ const constRe = /(?:export\s+)?const\s+(\w+)\s*[=:]/g;
52
+ let match;
53
+ while ((match = constRe.exec(frontmatter)) !== null) {
54
+ const name = match[1];
55
+ const line = frontmatter.slice(0, match.index).split("\n").length;
56
+ // Get the full declaration (up to next const/function/interface or end)
57
+ const restOfFm = frontmatter.slice(match.index);
58
+ const endMatch = restOfFm.match(/\n(?:export\s+)?(?:const|let|function|interface|type)\s/);
59
+ const declEnd = endMatch ? match.index + endMatch.index : match.index + restOfFm.length;
60
+ const declSource = frontmatter.slice(match.index, declEnd).trim();
61
+ symbols.push({
62
+ id: makeSymbolId(repo, filePath, name, fmStartLine + line - 1),
63
+ repo,
64
+ name,
65
+ kind: "variable",
66
+ file: filePath,
67
+ start_line: fmStartLine + line - 1,
68
+ end_line: fmStartLine + line - 1 + declSource.split("\n").length - 1,
69
+ source: declSource.slice(0, 1000),
70
+ });
71
+ }
72
+ // Extract function declarations
73
+ const funcRe = /(?:export\s+)?(?:async\s+)?function\s+(\w+)/g;
74
+ while ((match = funcRe.exec(frontmatter)) !== null) {
75
+ const name = match[1];
76
+ const line = frontmatter.slice(0, match.index).split("\n").length;
77
+ symbols.push({
78
+ id: makeSymbolId(repo, filePath, name, fmStartLine + line - 1),
79
+ repo,
80
+ name,
81
+ kind: "function",
82
+ file: filePath,
83
+ start_line: fmStartLine + line - 1,
84
+ end_line: fmStartLine + line - 1,
85
+ source: match[0],
86
+ });
87
+ }
88
+ // Add the component itself as a symbol
89
+ const componentName = filePath.split("/").pop()?.replace(".astro", "") ?? filePath;
90
+ const totalLines = source.split("\n").length;
91
+ symbols.push({
92
+ id: makeSymbolId(repo, filePath, componentName, 1),
93
+ repo,
94
+ name: componentName,
95
+ kind: "function",
96
+ file: filePath,
97
+ start_line: 1,
98
+ end_line: totalLines,
99
+ source: frontmatter.slice(0, 500),
100
+ tokens: tokenizeIdentifier(componentName),
101
+ });
102
+ return symbols;
103
+ }
104
+ //# sourceMappingURL=astro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro.js","sourceRoot":"","sources":["../../../src/parser/extractors/astro.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Conversation extractor — JSONL format (Claude Code session files).
3
+ *
4
+ * Parses user+assistant exchange pairs from JSONL session logs and emits
5
+ * each pair as a "conversation_turn" CodeSymbol for indexing and search.
6
+ */
7
+ import type { CodeSymbol } from "../../types.js";
8
+ /**
9
+ * Extract CodeSymbol[] from a JSONL conversation session file.
10
+ *
11
+ * @param source Raw JSONL text content
12
+ * @param filePath Relative file path within the repo
13
+ * @param repo Repository identifier
14
+ */
15
+ export declare function extractConversationSymbols(source: string, filePath: string, repo: string): CodeSymbol[];
16
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/parser/extractors/conversation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA+FjD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,UAAU,EAAE,CAsId"}