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
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Resolve raw call sites (callee identifier text) into qualified-name edges
3
+ * by matching against the symbol index built so far.
4
+ *
5
+ * v1 implementation: name-based lookup. LSP-based exact resolution is wired
6
+ * via `ISymbolResolver` in code-intel/ when LSP is available.
7
+ */
8
+ export class SymbolResolver {
9
+ index = new Map();
10
+ constructor(symbols) {
11
+ for (const sym of symbols) {
12
+ const list = this.index.get(sym.name);
13
+ if (list) {
14
+ list.push(sym);
15
+ }
16
+ else {
17
+ this.index.set(sym.name, [sym]);
18
+ }
19
+ }
20
+ }
21
+ resolveCalls(projectId, parsed) {
22
+ const edges = [];
23
+ const counts = new Map();
24
+ for (const call of parsed.rawCalls) {
25
+ const calleeName = extractIdentifier(call.calleeText);
26
+ if (!calleeName) {
27
+ continue;
28
+ }
29
+ const candidates = this.index.get(calleeName);
30
+ if (!candidates || candidates.length === 0) {
31
+ continue;
32
+ }
33
+ const sameFile = candidates.find((c) => c.filePath === parsed.filePath);
34
+ const target = sameFile ?? candidates[0];
35
+ if (!target) {
36
+ continue;
37
+ }
38
+ const key = `${call.fromQn}->${target.qualifiedName}`;
39
+ counts.set(key, (counts.get(key) ?? 0) + 1);
40
+ }
41
+ for (const [key, count] of counts) {
42
+ const sep = key.indexOf('->');
43
+ const fromQn = key.slice(0, sep);
44
+ const toQn = key.slice(sep + 2);
45
+ edges.push({ projectId, fromQn, toQn, count });
46
+ }
47
+ return edges;
48
+ }
49
+ }
50
+ function extractIdentifier(calleeText) {
51
+ const trimmed = calleeText.trim();
52
+ const lastDot = trimmed.lastIndexOf('.');
53
+ const name = lastDot === -1 ? trimmed : trimmed.slice(lastDot + 1);
54
+ if (!/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name)) {
55
+ return null;
56
+ }
57
+ return name;
58
+ }
59
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/code-intel/resolver.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IACR,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEzD,YAAY,OAAqB;QAC/B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,MAAkB;QAChD,MAAM,KAAK,GAAmB,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAAA,SAAS;YAAA,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAAA,SAAS;YAAA,CAAC;YACvD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,QAAQ,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAAA,SAAS;YAAA,CAAC;YACxB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;YACtD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAAA,OAAO,IAAI,CAAC;IAAA,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface PathAlias {
2
+ pattern: RegExp;
3
+ targets: string[];
4
+ }
5
+ /**
6
+ * Parse `tsconfig.json` paths (and `extends`) into regex aliases.
7
+ * Returns empty array when no tsconfig or no paths field — caller falls back
8
+ * to relative-path resolution.
9
+ */
10
+ export declare function loadTsconfigPaths(projectRoot: string): Promise<PathAlias[]>;
11
+ //# sourceMappingURL=tsconfig-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig-paths.d.ts","sourceRoot":"","sources":["../../src/code-intel/tsconfig-paths.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAYjF"}
@@ -0,0 +1,67 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join, resolve, dirname } from 'node:path';
3
+ /**
4
+ * Parse `tsconfig.json` paths (and `extends`) into regex aliases.
5
+ * Returns empty array when no tsconfig or no paths field — caller falls back
6
+ * to relative-path resolution.
7
+ */
8
+ export async function loadTsconfigPaths(projectRoot) {
9
+ const merged = await readMerged(join(projectRoot, 'tsconfig.json'), new Set());
10
+ const baseUrl = merged?.compilerOptions?.baseUrl ?? '.';
11
+ const paths = merged?.compilerOptions?.paths ?? {};
12
+ const absBase = resolve(projectRoot, baseUrl);
13
+ const aliases = [];
14
+ for (const [key, targets] of Object.entries(paths)) {
15
+ const pattern = aliasToRegex(key);
16
+ const absTargets = targets.map((t) => resolve(absBase, t));
17
+ aliases.push({ pattern, targets: absTargets });
18
+ }
19
+ return aliases;
20
+ }
21
+ async function readMerged(path, visited) {
22
+ if (visited.has(path)) {
23
+ return null;
24
+ }
25
+ visited.add(path);
26
+ let raw;
27
+ try {
28
+ raw = await readFile(path, 'utf8');
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ let json;
34
+ try {
35
+ json = JSON.parse(stripJsonComments(raw));
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ if (json.extends) {
41
+ const parentPath = resolve(dirname(path), json.extends);
42
+ const parent = await readMerged(parentPath, visited);
43
+ if (parent) {
44
+ return {
45
+ compilerOptions: {
46
+ ...parent.compilerOptions,
47
+ ...json.compilerOptions,
48
+ paths: {
49
+ ...(parent.compilerOptions?.paths ?? {}),
50
+ ...(json.compilerOptions?.paths ?? {}),
51
+ },
52
+ },
53
+ };
54
+ }
55
+ }
56
+ return json;
57
+ }
58
+ function aliasToRegex(key) {
59
+ const escaped = key.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '(.*)');
60
+ return new RegExp(`^${escaped}$`);
61
+ }
62
+ function stripJsonComments(input) {
63
+ return input
64
+ .replace(/\/\*[\s\S]*?\*\//g, '')
65
+ .replace(/(^|[^:])\/\/.*$/gm, '$1');
66
+ }
67
+ //# sourceMappingURL=tsconfig-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsconfig-paths.js","sourceRoot":"","sources":["../../src/code-intel/tsconfig-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import type { CodeIndexer } from './indexer.js';
3
+ export interface CodeWatcherEvents {
4
+ started: () => void;
5
+ ready: () => void;
6
+ 'fileIndexed': (relPath: string) => void;
7
+ 'fileRemoved': (relPath: string) => void;
8
+ error: (err: Error) => void;
9
+ }
10
+ export interface CodeWatcherOptions {
11
+ root: string;
12
+ indexer: CodeIndexer;
13
+ debounceMs?: number;
14
+ }
15
+ export declare class CodeWatcher extends EventEmitter {
16
+ private readonly opts;
17
+ private watcher;
18
+ private readonly pending;
19
+ private readonly debounce;
20
+ constructor(opts: CodeWatcherOptions);
21
+ start(): void;
22
+ stop(): Promise<void>;
23
+ private queueIndex;
24
+ private queueRemove;
25
+ private schedule;
26
+ }
27
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/code-intel/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAehD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAY,SAAQ,YAAY;IAK/B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJjC,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEL,IAAI,EAAE,kBAAkB;IAKrD,KAAK,IAAI,IAAI;IAmBP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,QAAQ;CASjB"}
@@ -0,0 +1,93 @@
1
+ import { EventEmitter } from 'node:events';
2
+ import chokidar from 'chokidar';
3
+ const DEBOUNCE_MS = 500;
4
+ const SUPPORTED_EXT = /\.(?:m|c)?(?:t|j)sx?$/;
5
+ const IGNORED_PATTERNS = [
6
+ /(^|[/\\])node_modules([/\\]|$)/,
7
+ /(^|[/\\])\.git([/\\]|$)/,
8
+ /(^|[/\\])\.next([/\\]|$)/,
9
+ /(^|[/\\])dist([/\\]|$)/,
10
+ /(^|[/\\])\.argustack([/\\]|$)/,
11
+ /\.swp$/,
12
+ /\.tmp$/,
13
+ /~$/,
14
+ ];
15
+ export class CodeWatcher extends EventEmitter {
16
+ opts;
17
+ watcher = null;
18
+ pending = new Map();
19
+ debounce;
20
+ constructor(opts) {
21
+ super();
22
+ this.opts = opts;
23
+ this.debounce = opts.debounceMs ?? DEBOUNCE_MS;
24
+ }
25
+ start() {
26
+ if (this.watcher) {
27
+ return;
28
+ }
29
+ const watcher = chokidar.watch(this.opts.root, {
30
+ ignored: (path) => IGNORED_PATTERNS.some((p) => p.test(path)),
31
+ ignoreInitial: true,
32
+ persistent: true,
33
+ awaitWriteFinish: { stabilityThreshold: 100, pollInterval: 50 },
34
+ });
35
+ watcher.on('add', (path) => { this.queueIndex(path); });
36
+ watcher.on('change', (path) => { this.queueIndex(path); });
37
+ watcher.on('unlink', (path) => { this.queueRemove(path); });
38
+ watcher.on('error', (err) => this.emit('error', err));
39
+ watcher.on('ready', () => this.emit('ready'));
40
+ this.watcher = watcher;
41
+ this.emit('started');
42
+ }
43
+ async stop() {
44
+ for (const timer of this.pending.values()) {
45
+ clearTimeout(timer);
46
+ }
47
+ this.pending.clear();
48
+ if (this.watcher) {
49
+ await this.watcher.close();
50
+ this.watcher = null;
51
+ }
52
+ }
53
+ queueIndex(path) {
54
+ if (!SUPPORTED_EXT.test(path)) {
55
+ return;
56
+ }
57
+ this.schedule(path, async () => {
58
+ try {
59
+ await this.opts.indexer.indexFile(path);
60
+ this.emit('fileIndexed', path);
61
+ }
62
+ catch (error) {
63
+ this.emit('error', error instanceof Error ? error : new Error(String(error)));
64
+ }
65
+ });
66
+ }
67
+ queueRemove(path) {
68
+ if (!SUPPORTED_EXT.test(path)) {
69
+ return;
70
+ }
71
+ this.schedule(path, async () => {
72
+ try {
73
+ await this.opts.indexer.removeFile(path);
74
+ this.emit('fileRemoved', path);
75
+ }
76
+ catch (error) {
77
+ this.emit('error', error instanceof Error ? error : new Error(String(error)));
78
+ }
79
+ });
80
+ }
81
+ schedule(path, fn) {
82
+ const existing = this.pending.get(path);
83
+ if (existing) {
84
+ clearTimeout(existing);
85
+ }
86
+ const timer = setTimeout(() => {
87
+ this.pending.delete(path);
88
+ void fn();
89
+ }, this.debounce);
90
+ this.pending.set(path, timer);
91
+ }
92
+ }
93
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/code-intel/watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { CodeSymbolKind } from '../types/code.js';
2
+ export interface EmbedChunkInput {
3
+ content: string;
4
+ kind: CodeSymbolKind;
5
+ }
6
+ export interface RerankDoc {
7
+ id: string;
8
+ content: string;
9
+ }
10
+ export interface RerankResult {
11
+ id: string;
12
+ score: number;
13
+ }
14
+ /**
15
+ * Port: Code Embedding — vectors + reranking for code chunks.
16
+ *
17
+ * Intentionally NOT extends `IEmbeddingProvider`: the existing OpenAI port
18
+ * uses 1536 dimensions for issue text, while voyage-code-3 uses 1024 for code.
19
+ * A shared `readonly dimensions: number` would conflict.
20
+ *
21
+ * Backed by Voyage AI (voyage-code-3 + rerank-2.5-lite) in production.
22
+ *
23
+ * @throws Error when the API is unreachable or rate-limited beyond retry budget.
24
+ */
25
+ export interface ICodeEmbedding {
26
+ readonly name: string;
27
+ readonly dimensions: number;
28
+ /**
29
+ * Embed code chunks for indexing. Uses `input_type='document'` upstream.
30
+ * Order of returned vectors matches order of input chunks.
31
+ */
32
+ embedCode(chunks: EmbedChunkInput[]): Promise<number[][]>;
33
+ /**
34
+ * Embed a single natural-language query. Uses `input_type='query'` upstream.
35
+ */
36
+ embedQuery(query: string): Promise<number[]>;
37
+ /**
38
+ * Rerank candidate documents against a query. Returns topK by relevance.
39
+ */
40
+ rerank(query: string, docs: RerankDoc[], topK: number): Promise<RerankResult[]>;
41
+ }
42
+ //# sourceMappingURL=code-embedding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-embedding.d.ts","sourceRoot":"","sources":["../../../src/core/ports/code-embedding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1D;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAE7C;;OAEG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,EAAE,EACjB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=code-embedding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-embedding.js","sourceRoot":"","sources":["../../../src/core/ports/code-embedding.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import type { CodeProject, CodeFile, CodeSymbol, CodeSymbolKind, CodeLayer, CodeImport, CodeCallEdge, CodeImplementsEdge, CodeExtendsEdge, CodeInjectsEdge } from '../types/code.js';
2
+ export interface FindSymbolOptions {
3
+ projectId: string;
4
+ query: string;
5
+ kind?: CodeSymbolKind;
6
+ layer?: CodeLayer;
7
+ limit?: number;
8
+ }
9
+ /**
10
+ * Port: Code Graph — structural store for files, symbols and relationships.
11
+ *
12
+ * Backed by Neo4j in production, by FakeCodeGraph in tests.
13
+ * Adapters must respect the (projectId, qualifiedName) uniqueness for symbols
14
+ * and (projectId, path) for files.
15
+ *
16
+ * @throws Error when the underlying store is unreachable.
17
+ */
18
+ export interface ICodeGraph {
19
+ readonly name: string;
20
+ initialize(): Promise<void>;
21
+ ensureProject(project: CodeProject): Promise<void>;
22
+ deleteProject(projectId: string): Promise<void>;
23
+ upsertFiles(projectId: string, files: CodeFile[]): Promise<void>;
24
+ deleteFile(projectId: string, path: string): Promise<void>;
25
+ /**
26
+ * Replace ALL symbols defined in a file atomically.
27
+ * Deletes existing symbols + their edges, then inserts new ones.
28
+ */
29
+ replaceFileSymbols(projectId: string, filePath: string, symbols: CodeSymbol[]): Promise<void>;
30
+ upsertImports(edges: CodeImport[]): Promise<void>;
31
+ upsertCalls(edges: CodeCallEdge[]): Promise<void>;
32
+ upsertImplements(edges: CodeImplementsEdge[]): Promise<void>;
33
+ upsertExtends(edges: CodeExtendsEdge[]): Promise<void>;
34
+ upsertInjects(edges: CodeInjectsEdge[]): Promise<void>;
35
+ findSymbol(opts: FindSymbolOptions): Promise<CodeSymbol[]>;
36
+ getDependencies(projectId: string, file: string, depth: number): Promise<CodeFile[]>;
37
+ getDependents(projectId: string, file: string, depth: number): Promise<CodeFile[]>;
38
+ getCallers(projectId: string, qualifiedName: string, depth: number): Promise<CodeSymbol[]>;
39
+ getCallees(projectId: string, qualifiedName: string, depth: number): Promise<CodeSymbol[]>;
40
+ /**
41
+ * Shortest path of CALLS edges from one symbol to another.
42
+ * Returns null when no path exists.
43
+ */
44
+ getCallPath(projectId: string, fromQn: string, toQn: string): Promise<CodeSymbol[] | null>;
45
+ /**
46
+ * Cross-layer dependency violations.
47
+ * Default layerOrder forbids: domain → infrastructure/presentation,
48
+ * application → presentation.
49
+ */
50
+ findArchViolations(projectId: string, layerOrder?: CodeLayer[]): Promise<CodeCallEdge[]>;
51
+ findUnusedExports(projectId: string): Promise<CodeSymbol[]>;
52
+ getImplementers(projectId: string, interfaceQn: string): Promise<CodeSymbol[]>;
53
+ getLayerSymbols(projectId: string, layer: CodeLayer): Promise<CodeSymbol[]>;
54
+ close(): Promise<void>;
55
+ }
56
+ //# sourceMappingURL=code-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-graph.d.ts","sourceRoot":"","sources":["../../../src/core/ports/code-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,UAAU,EACV,cAAc,EACd,SAAS,EACT,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3D;;;OAGG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,UAAU,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,aAAa,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAE3D,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEvB,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEvB,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzB,UAAU,CACR,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzB;;;OAGG;IACH,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IAEhC;;;;OAIG;IACH,kBAAkB,CAChB,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,SAAS,EAAE,GACvB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAE3B,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAE5D,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzB,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=code-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-graph.js","sourceRoot":"","sources":["../../../src/core/ports/code-graph.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import type { CodeProject, CodeFileHash, IndexJob, IndexJobType, IndexStats } from '../types/code.js';
2
+ /**
3
+ * Port: Code Metadata Store — projects registry, file hashes, index jobs.
4
+ *
5
+ * Backed by the existing Argustack Postgres instance (new `code_*` tables).
6
+ * Deliberately split from `IStorage` (issue-side) to avoid bloating that port.
7
+ *
8
+ * Used by indexer for idempotency (hash compare), job logging, and
9
+ * advisory locks to prevent concurrent watch + manual index.
10
+ *
11
+ * @throws Error when the database is unreachable.
12
+ */
13
+ export interface ICodeMetaStore {
14
+ registerProject(project: CodeProject): Promise<void>;
15
+ unregisterProject(projectId: string): Promise<void>;
16
+ listProjects(): Promise<CodeProject[]>;
17
+ getProjectByRoot(root: string): Promise<CodeProject | null>;
18
+ getProjectById(projectId: string): Promise<CodeProject | null>;
19
+ upsertFileHashes(projectId: string, hashes: CodeFileHash[]): Promise<void>;
20
+ getFileHashes(projectId: string): Promise<Map<string, string>>;
21
+ startIndexJob(projectId: string, type: IndexJobType): Promise<number>;
22
+ completeIndexJob(jobId: number, stats: IndexStats): Promise<void>;
23
+ failIndexJob(jobId: number, error: string): Promise<void>;
24
+ getLatestJob(projectId: string): Promise<IndexJob | null>;
25
+ /**
26
+ * Acquire a session-scoped Postgres advisory lock for the project.
27
+ * Returns true on success, false when another process holds it.
28
+ * Caller MUST call `releaseLock` in a finally block.
29
+ */
30
+ tryAcquireLock(projectId: string): Promise<boolean>;
31
+ releaseLock(projectId: string): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=code-meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-meta.d.ts","sourceRoot":"","sources":["../../../src/core/ports/code-meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,YAAY,EACZ,UAAU,EACX,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;GAUG;AACH,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD,YAAY,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAEvC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE5D,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE/D,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE3E,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAE/D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtE,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAE1D;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=code-meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-meta.js","sourceRoot":"","sources":["../../../src/core/ports/code-meta.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { CodeLanguage, ParsedFile } from '../types/code.js';
2
+ /**
3
+ * Port: Code Parser — extracts symbols, imports and raw call sites from source.
4
+ *
5
+ * Backed by tree-sitter in production. Pure CPU; no I/O beyond input string.
6
+ * Cross-file resolution (qualifying call site identifiers) is done by
7
+ * `ISymbolResolver` in the indexer, not here.
8
+ */
9
+ export interface ICodeParser {
10
+ readonly languages: readonly CodeLanguage[];
11
+ parseFile(absPath: string, content: string, language: CodeLanguage): Promise<ParsedFile>;
12
+ }
13
+ //# sourceMappingURL=code-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-parser.d.ts","sourceRoot":"","sources":["../../../src/core/ports/code-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;IAE5C,SAAS,CACP,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,UAAU,CAAC,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=code-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-parser.js","sourceRoot":"","sources":["../../../src/core/ports/code-parser.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import type { CodeChunk, CodeSymbolKind, CodeLayer, SemanticHit } from '../types/code.js';
2
+ export interface SearchSemanticOptions {
3
+ layer?: CodeLayer;
4
+ kind?: CodeSymbolKind;
5
+ filePath?: string;
6
+ topK: number;
7
+ }
8
+ export interface CollectionStats {
9
+ pointCount: number;
10
+ vectorDim: number;
11
+ }
12
+ /**
13
+ * Port: Code Vector Store — semantic search over code chunks.
14
+ *
15
+ * Backed by Qdrant in production. One collection per project: `code_{projectId}`.
16
+ * Payload contains symbolId, filePath, layer, kind, name, startLine/endLine.
17
+ *
18
+ * @throws Error when the store is unreachable or the collection is missing.
19
+ */
20
+ export interface ICodeVectorStore {
21
+ readonly name: string;
22
+ initialize(): Promise<void>;
23
+ ensureCollection(projectId: string, dim: number): Promise<void>;
24
+ upsertChunks(projectId: string, chunks: CodeChunk[], vectors: number[][]): Promise<void>;
25
+ deleteByFile(projectId: string, filePath: string): Promise<void>;
26
+ deleteBySymbol(projectId: string, symbolId: string): Promise<void>;
27
+ searchSemantic(projectId: string, vector: number[], opts: SearchSemanticOptions): Promise<SemanticHit[]>;
28
+ /**
29
+ * Find symbols whose vectors are similar to the seed symbol.
30
+ * Returns results excluding the seed itself.
31
+ */
32
+ findSimilar(projectId: string, symbolId: string, topK: number): Promise<SemanticHit[]>;
33
+ getCollectionStats(projectId: string): Promise<CollectionStats>;
34
+ deleteCollection(projectId: string): Promise<void>;
35
+ close(): Promise<void>;
36
+ }
37
+ //# sourceMappingURL=code-vector-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-vector-store.d.ts","sourceRoot":"","sources":["../../../src/core/ports/code-vector-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE,YAAY,CACV,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,EAAE,MAAM,EAAE,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnE,cAAc,CACZ,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1B;;;OAGG;IACH,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1B,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEhE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=code-vector-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-vector-store.js","sourceRoot":"","sources":["../../../src/core/ports/code-vector-store.ts"],"names":[],"mappings":""}
@@ -4,4 +4,10 @@ export type { IGitHubProvider } from './github-provider.js';
4
4
  export type { IStorage, QueryResult } from './storage.js';
5
5
  export type { IEmbeddingProvider } from './embedding-provider.js';
6
6
  export type { IDbProvider } from './db-provider.js';
7
+ export type { ICodeGraph, FindSymbolOptions } from './code-graph.js';
8
+ export type { ICodeVectorStore, SearchSemanticOptions, CollectionStats, } from './code-vector-store.js';
9
+ export type { ICodeParser } from './code-parser.js';
10
+ export type { ILspClient } from './lsp-client.js';
11
+ export type { ICodeEmbedding, EmbedChunkInput, RerankDoc, RerankResult, } from './code-embedding.js';
12
+ export type { ICodeMetaStore } from './code-meta.js';
7
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/ports/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/ports/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACrE,YAAY,EACV,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EACV,cAAc,EACd,eAAe,EACf,SAAS,EACT,YAAY,GACb,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { LspSymbol, LspLocation } from '../types/code.js';
2
+ /**
3
+ * Port: Language Server Protocol client — cross-file symbol resolution.
4
+ *
5
+ * Backed by `typescript-language-server` spawned as a subprocess.
6
+ * Used by `SymbolResolver` in code-intel/ to upgrade tree-sitter raw call sites
7
+ * (callee identifier text) into qualified-name edges.
8
+ *
9
+ * @throws Error when the LSP subprocess crashes irrecoverably.
10
+ */
11
+ export interface ILspClient {
12
+ start(projectRoot: string): Promise<void>;
13
+ didOpen(uri: string, text: string): Promise<void>;
14
+ didChange(uri: string, text: string): Promise<void>;
15
+ documentSymbols(uri: string): Promise<LspSymbol[]>;
16
+ references(uri: string, line: number, character: number): Promise<LspLocation[]>;
17
+ definition(uri: string, line: number, character: number): Promise<LspLocation[]>;
18
+ implementations(uri: string, line: number, character: number): Promise<LspLocation[]>;
19
+ typeDefinition(uri: string, line: number, character: number): Promise<LspLocation[]>;
20
+ stop(): Promise<void>;
21
+ }
22
+ //# sourceMappingURL=lsp-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-client.d.ts","sourceRoot":"","sources":["../../../src/core/ports/lsp-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/D;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpD,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAEnD,UAAU,CACR,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1B,UAAU,CACR,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1B,eAAe,CACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1B,cAAc,CACZ,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE1B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lsp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../../../src/core/ports/lsp-client.ts"],"names":[],"mappings":""}