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 @@
1
+ {"version":3,"file":"code-search.d.ts","sourceRoot":"","sources":["../../src/use-cases/code-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEvE,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;gBAG1B,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,cAAc;IAGtC,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAYhE,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC;QACxD,OAAO,EAAE,MAAM,CAAC,SAAS,GAAG,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IAsBI,gBAAgB,CACpB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,sBAAsB,CAAC;CAqBnC"}
@@ -0,0 +1,74 @@
1
+ import { HybridRanker } from '../code-intel/ranker.js';
2
+ export class CodeSearchUseCase {
3
+ graph;
4
+ vec;
5
+ embedding;
6
+ ranker = new HybridRanker();
7
+ constructor(graph, vec, embedding) {
8
+ this.graph = graph;
9
+ this.vec = vec;
10
+ this.embedding = embedding;
11
+ }
12
+ async searchSemantic(input) {
13
+ const topK = input.topK ?? 10;
14
+ const vector = await this.embedding.embedQuery(input.query);
15
+ const searchOpts = {
16
+ topK: Math.max(topK * 5, 30),
17
+ };
18
+ if (input.layer) {
19
+ searchOpts.layer = input.layer;
20
+ }
21
+ if (input.kind) {
22
+ searchOpts.kind = input.kind;
23
+ }
24
+ const candidates = await this.vec.searchSemantic(input.projectId, vector, searchOpts);
25
+ return this.ranker.rankSemantic(input.query, candidates, this.embedding, topK);
26
+ }
27
+ async explainFeature(input) {
28
+ const topK = input.topK ?? 10;
29
+ const vector = await this.embedding.embedQuery(input.query);
30
+ const candidates = await this.vec.searchSemantic(input.projectId, vector, { topK: 50 });
31
+ const reranked = await this.ranker.rankSemantic(input.query, candidates, this.embedding, topK);
32
+ const neighborhood = await this.ranker.expandGraph(this.graph, input.projectId, reranked.map((h) => h.symbolId), 1);
33
+ return {
34
+ byLayer: this.ranker.clusterByLayer(reranked),
35
+ expandedFiles: Array.from(neighborhood.files),
36
+ };
37
+ }
38
+ async planFeatureFiles(input) {
39
+ const topKPerLayer = input.topKPerLayer ?? 5;
40
+ const vector = await this.embedding.embedQuery(input.description);
41
+ const candidates = await this.vec.searchSemantic(input.projectId, vector, {
42
+ topK: 50,
43
+ });
44
+ const reranked = await this.ranker.rankSemantic(input.description, candidates, this.embedding, 30);
45
+ const grouped = this.ranker.clusterByLayer(reranked);
46
+ return {
47
+ domain: pickFiles(grouped.domain, topKPerLayer),
48
+ application: pickFiles(grouped.application, topKPerLayer),
49
+ infrastructure: pickFiles(grouped.infrastructure, topKPerLayer),
50
+ presentation: pickFiles(grouped.presentation, topKPerLayer),
51
+ };
52
+ }
53
+ }
54
+ function pickFiles(hits, limit) {
55
+ const seen = new Set();
56
+ const out = [];
57
+ for (const hit of hits) {
58
+ if (seen.has(hit.payload.filePath)) {
59
+ continue;
60
+ }
61
+ seen.add(hit.payload.filePath);
62
+ out.push({
63
+ filePath: hit.payload.filePath,
64
+ reason: `Matches '${hit.payload.name}' (${hit.payload.kind})`,
65
+ similarTo: hit.payload.name,
66
+ score: hit.score,
67
+ });
68
+ if (out.length >= limit) {
69
+ break;
70
+ }
71
+ }
72
+ return out;
73
+ }
74
+ //# sourceMappingURL=code-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-search.js","sourceRoot":"","sources":["../../src/use-cases/code-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ICodeGraph } from '../core/ports/code-graph.js';
2
+ import type { ICodeVectorStore } from '../core/ports/code-vector-store.js';
3
+ import type { ICodeParser } from '../core/ports/code-parser.js';
4
+ import type { ICodeEmbedding } from '../core/ports/code-embedding.js';
5
+ import type { ICodeMetaStore } from '../core/ports/code-meta.js';
6
+ import type { ILspClient } from '../core/ports/lsp-client.js';
7
+ import type { CodeProject, IndexStats } from '../core/types/code.js';
8
+ import { type IndexProgress } from '../code-intel/index.js';
9
+ export interface IndexCodeInput {
10
+ project: CodeProject;
11
+ full?: boolean;
12
+ onProgress?: (event: IndexProgress) => void;
13
+ }
14
+ export declare class IndexCodeUseCase {
15
+ private readonly parser;
16
+ private readonly graph;
17
+ private readonly vec;
18
+ private readonly embedding;
19
+ private readonly meta;
20
+ private readonly lsp;
21
+ constructor(parser: ICodeParser, graph: ICodeGraph, vec: ICodeVectorStore, embedding: ICodeEmbedding, meta: ICodeMetaStore, lsp?: ILspClient | null);
22
+ execute(input: IndexCodeInput): Promise<IndexStats>;
23
+ }
24
+ //# sourceMappingURL=index-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-code.d.ts","sourceRoot":"","sources":["../../src/use-cases/index-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGzE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;CAC7C;AAED,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBALH,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,cAAc,EACpB,GAAG,GAAE,UAAU,GAAG,IAAW;IAG1C,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC;CAoB1D"}
@@ -0,0 +1,43 @@
1
+ import { CodeIndexer } from '../code-intel/index.js';
2
+ import { withJobLock } from '../code-intel/job-lock.js';
3
+ export class IndexCodeUseCase {
4
+ parser;
5
+ graph;
6
+ vec;
7
+ embedding;
8
+ meta;
9
+ lsp;
10
+ constructor(parser, graph, vec, embedding, meta, lsp = null) {
11
+ this.parser = parser;
12
+ this.graph = graph;
13
+ this.vec = vec;
14
+ this.embedding = embedding;
15
+ this.meta = meta;
16
+ this.lsp = lsp;
17
+ }
18
+ async execute(input) {
19
+ return withJobLock(input.project.id, this.meta, async () => {
20
+ const indexerOpts = {
21
+ project: input.project,
22
+ parser: this.parser,
23
+ graph: this.graph,
24
+ vec: this.vec,
25
+ embedding: this.embedding,
26
+ meta: this.meta,
27
+ };
28
+ if (this.lsp) {
29
+ indexerOpts.lsp = this.lsp;
30
+ }
31
+ const indexer = new CodeIndexer(indexerOpts);
32
+ const opts = {};
33
+ if (input.full !== undefined) {
34
+ opts.full = input.full;
35
+ }
36
+ if (input.onProgress) {
37
+ opts.onProgress = input.onProgress;
38
+ }
39
+ return indexer.indexProject(opts);
40
+ });
41
+ }
42
+ }
43
+ //# sourceMappingURL=index-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-code.js","sourceRoot":"","sources":["../../src/use-cases/index-code.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAsB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAQxD,MAAM,OAAO,gBAAgB;IAER;IACA;IACA;IACA;IACA;IACA;IANnB,YACmB,MAAmB,EACnB,KAAiB,EACjB,GAAqB,EACrB,SAAyB,EACzB,IAAoB,EACpB,MAAyB,IAAI;QAL7B,WAAM,GAAN,MAAM,CAAa;QACnB,UAAK,GAAL,KAAK,CAAY;QACjB,QAAG,GAAH,GAAG,CAAkB;QACrB,cAAS,GAAT,SAAS,CAAgB;QACzB,SAAI,GAAJ,IAAI,CAAgB;QACpB,QAAG,GAAH,GAAG,CAA0B;IAC7C,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAAqB;QACjC,OAAO,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,WAAW,GAAiD;gBAChE,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;YACF,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACb,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YAC7B,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC;YAC7C,MAAM,IAAI,GAA+C,EAAE,CAAC;YAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;YAAA,CAAC;YACvD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;gBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAAA,CAAC;YAC3D,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ import type { ICodeGraph } from '../core/ports/code-graph.js';
2
+ import type { ICodeVectorStore } from '../core/ports/code-vector-store.js';
3
+ import type { ICodeMetaStore } from '../core/ports/code-meta.js';
4
+ import type { ICodeEmbedding } from '../core/ports/code-embedding.js';
5
+ import type { CodeProject } from '../core/types/code.js';
6
+ export interface RegisterCodeProjectInput {
7
+ id: string;
8
+ name: string;
9
+ root: string;
10
+ language: CodeProject['language'];
11
+ layerConfig?: Record<string, CodeProject['language'] extends infer _ ? string : never>;
12
+ }
13
+ export declare class RegisterCodeProjectUseCase {
14
+ private readonly meta;
15
+ private readonly graph;
16
+ private readonly vec;
17
+ private readonly embedding;
18
+ constructor(meta: ICodeMetaStore, graph: ICodeGraph, vec: ICodeVectorStore, embedding: ICodeEmbedding);
19
+ execute(input: CodeProject): Promise<CodeProject>;
20
+ }
21
+ //# sourceMappingURL=register-code-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-code-project.d.ts","sourceRoot":"","sources":["../../src/use-cases/register-code-project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;CACxF;AAED,qBAAa,0BAA0B;IAEnC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHT,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,cAAc;IAGtC,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;CAMxD"}
@@ -0,0 +1,19 @@
1
+ export class RegisterCodeProjectUseCase {
2
+ meta;
3
+ graph;
4
+ vec;
5
+ embedding;
6
+ constructor(meta, graph, vec, embedding) {
7
+ this.meta = meta;
8
+ this.graph = graph;
9
+ this.vec = vec;
10
+ this.embedding = embedding;
11
+ }
12
+ async execute(input) {
13
+ await this.meta.registerProject(input);
14
+ await this.graph.ensureProject(input);
15
+ await this.vec.ensureCollection(input.id, this.embedding.dimensions);
16
+ return input;
17
+ }
18
+ }
19
+ //# sourceMappingURL=register-code-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register-code-project.js","sourceRoot":"","sources":["../../src/use-cases/register-code-project.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,0BAA0B;IAElB;IACA;IACA;IACA;IAJnB,YACmB,IAAoB,EACpB,KAAiB,EACjB,GAAqB,EACrB,SAAyB;QAHzB,SAAI,GAAJ,IAAI,CAAgB;QACpB,UAAK,GAAL,KAAK,CAAY;QACjB,QAAG,GAAH,GAAG,CAAkB;QACrB,cAAS,GAAT,SAAS,CAAgB;IACzC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,KAAkB;QAC9B,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { ICodeGraph } from '../core/ports/code-graph.js';
2
+ import type { ICodeVectorStore } from '../core/ports/code-vector-store.js';
3
+ import type { ICodeMetaStore } from '../core/ports/code-meta.js';
4
+ export declare class UnregisterCodeProjectUseCase {
5
+ private readonly meta;
6
+ private readonly graph;
7
+ private readonly vec;
8
+ constructor(meta: ICodeMetaStore, graph: ICodeGraph, vec: ICodeVectorStore);
9
+ execute(projectId: string): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=unregister-code-project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unregister-code-project.d.ts","sourceRoot":"","sources":["../../src/use-cases/unregister-code-project.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,qBAAa,4BAA4B;IAErC,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAFH,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,gBAAgB;IAGlC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOhD"}
@@ -0,0 +1,19 @@
1
+ export class UnregisterCodeProjectUseCase {
2
+ meta;
3
+ graph;
4
+ vec;
5
+ constructor(meta, graph, vec) {
6
+ this.meta = meta;
7
+ this.graph = graph;
8
+ this.vec = vec;
9
+ }
10
+ async execute(projectId) {
11
+ await this.graph.deleteProject(projectId);
12
+ try {
13
+ await this.vec.deleteCollection(projectId);
14
+ }
15
+ catch { /* collection may already be gone */ }
16
+ await this.meta.unregisterProject(projectId);
17
+ }
18
+ }
19
+ //# sourceMappingURL=unregister-code-project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unregister-code-project.js","sourceRoot":"","sources":["../../src/use-cases/unregister-code-project.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,4BAA4B;IAEpB;IACA;IACA;IAHnB,YACmB,IAAoB,EACpB,KAAiB,EACjB,GAAqB;QAFrB,SAAI,GAAJ,IAAI,CAAgB;QACpB,UAAK,GAAL,KAAK,CAAY;QACjB,QAAG,GAAH,GAAG,CAAkB;IACrC,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC,CAAC,oCAAoC,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ import type { ICodeGraph } from '../core/ports/code-graph.js';
2
+ import type { ICodeVectorStore } from '../core/ports/code-vector-store.js';
3
+ import type { ICodeParser } from '../core/ports/code-parser.js';
4
+ import type { ICodeEmbedding } from '../core/ports/code-embedding.js';
5
+ import type { ICodeMetaStore } from '../core/ports/code-meta.js';
6
+ import type { CodeProject } from '../core/types/code.js';
7
+ export interface WatchCodeInput {
8
+ project: CodeProject;
9
+ signal?: AbortSignal;
10
+ onEvent?: (event: WatchEvent) => void;
11
+ }
12
+ export type WatchEvent = {
13
+ type: 'ready';
14
+ } | {
15
+ type: 'fileIndexed';
16
+ path: string;
17
+ } | {
18
+ type: 'fileRemoved';
19
+ path: string;
20
+ } | {
21
+ type: 'error';
22
+ error: Error;
23
+ };
24
+ export declare class WatchCodeUseCase {
25
+ private readonly parser;
26
+ private readonly graph;
27
+ private readonly vec;
28
+ private readonly embedding;
29
+ private readonly meta;
30
+ constructor(parser: ICodeParser, graph: ICodeGraph, vec: ICodeVectorStore, embedding: ICodeEmbedding, meta: ICodeMetaStore);
31
+ start(input: WatchCodeInput): Promise<void>;
32
+ }
33
+ //# sourceMappingURL=watch-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-code.d.ts","sourceRoot":"","sources":["../../src/use-cases/watch-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpC,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAJJ,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,cAAc,EACzB,IAAI,EAAE,cAAc;IAGjC,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAyClD"}
@@ -0,0 +1,52 @@
1
+ import { CodeIndexer, CodeWatcher } from '../code-intel/index.js';
2
+ export class WatchCodeUseCase {
3
+ parser;
4
+ graph;
5
+ vec;
6
+ embedding;
7
+ meta;
8
+ constructor(parser, graph, vec, embedding, meta) {
9
+ this.parser = parser;
10
+ this.graph = graph;
11
+ this.vec = vec;
12
+ this.embedding = embedding;
13
+ this.meta = meta;
14
+ }
15
+ async start(input) {
16
+ const acquired = await this.meta.tryAcquireLock(input.project.id);
17
+ if (!acquired) {
18
+ throw new Error(`Another job is running for project '${input.project.id}'`);
19
+ }
20
+ const indexer = new CodeIndexer({
21
+ project: input.project,
22
+ parser: this.parser,
23
+ graph: this.graph,
24
+ vec: this.vec,
25
+ embedding: this.embedding,
26
+ meta: this.meta,
27
+ });
28
+ const watcher = new CodeWatcher({ root: input.project.root, indexer });
29
+ watcher.on('ready', () => input.onEvent?.({ type: 'ready' }));
30
+ watcher.on('fileIndexed', (path) => input.onEvent?.({ type: 'fileIndexed', path }));
31
+ watcher.on('fileRemoved', (path) => input.onEvent?.({ type: 'fileRemoved', path }));
32
+ watcher.on('error', (error) => input.onEvent?.({ type: 'error', error }));
33
+ watcher.start();
34
+ return new Promise((resolve) => {
35
+ const cleanup = () => {
36
+ void (async () => {
37
+ await watcher.stop();
38
+ await this.meta.releaseLock(input.project.id);
39
+ resolve();
40
+ })();
41
+ };
42
+ if (input.signal) {
43
+ if (input.signal.aborted) {
44
+ cleanup();
45
+ return;
46
+ }
47
+ input.signal.addEventListener('abort', cleanup, { once: true });
48
+ }
49
+ });
50
+ }
51
+ }
52
+ //# sourceMappingURL=watch-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-code.js","sourceRoot":"","sources":["../../src/use-cases/watch-code.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAclE,MAAM,OAAO,gBAAgB;IAER;IACA;IACA;IACA;IACA;IALnB,YACmB,MAAmB,EACnB,KAAiB,EACjB,GAAqB,EACrB,SAAyB,EACzB,IAAoB;QAJpB,WAAM,GAAN,MAAM,CAAa;QACnB,UAAK,GAAL,KAAK,CAAY;QACjB,QAAG,GAAH,GAAG,CAAkB;QACrB,cAAS,GAAT,SAAS,CAAgB;QACzB,SAAI,GAAJ,IAAI,CAAgB;IACpC,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,KAAqB;QAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;YAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CACzC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CACzC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAC/C,CAAC;QACF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,GAAS,EAAE;gBACzB,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;oBACrB,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC9C,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,CAAC;YACF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACzB,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBACD,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "argustack",
3
- "version": "0.1.34",
3
+ "version": "0.2.0",
4
4
  "description": "Project analysis platform — Jira + Git + DB",
5
5
  "type": "module",
6
6
  "bin": {
@@ -54,7 +54,7 @@
54
54
  ],
55
55
  "repository": {
56
56
  "type": "git",
57
- "url": "https://github.com/InfoCodeStreamly/argustack"
57
+ "url": "https://github.com/CodeStreamly/argustack"
58
58
  },
59
59
  "license": "MIT",
60
60
  "engines": {
@@ -64,19 +64,26 @@
64
64
  "@hello-pangea/dnd": "^18.0.1",
65
65
  "@inquirer/prompts": "^8.3.0",
66
66
  "@modelcontextprotocol/sdk": "^1.27.1",
67
+ "@qdrant/js-client-rest": "^1.18.0",
67
68
  "chalk": "^5.4.1",
69
+ "chokidar": "^5.0.0",
68
70
  "commander": "^14.0.3",
69
71
  "csv-parse": "^6.2.1",
70
72
  "dotenv": "^17.3.1",
71
73
  "es-git": "^0.6.0",
74
+ "ignore": "^7.0.5",
72
75
  "jira.js": "^5.3.1",
73
76
  "knex": "^3.1.0",
74
77
  "mysql2": "^3.20.0",
78
+ "neo4j-driver": "^6.0.1",
75
79
  "octokit": "^5.0.5",
76
80
  "ora": "^9.3.0",
77
81
  "pg": "^8.13.1",
78
82
  "react": "^19.2.4",
79
- "react-dom": "^19.2.4"
83
+ "react-dom": "^19.2.4",
84
+ "tree-sitter": "^0.21.1",
85
+ "tree-sitter-typescript": "^0.23.2",
86
+ "vscode-jsonrpc": "^8.2.1"
80
87
  },
81
88
  "devDependencies": {
82
89
  "@eslint/js": "^10.0.1",
@@ -0,0 +1,51 @@
1
+ # Argustack global Code Intelligence — shared across ALL workspaces.
2
+ #
3
+ # Multi-tenant: one Neo4j + one Qdrant on standard ports, projects isolated
4
+ # by `projectId` (Neo4j) and per-project collection name (Qdrant).
5
+ #
6
+ # Usage:
7
+ # cd ~/.argustack/code && docker compose up -d
8
+ #
9
+ # Workspaces point to it via .env:
10
+ # NEO4J_URI=bolt://localhost:7687
11
+ # QDRANT_URL=http://localhost:6333
12
+
13
+ services:
14
+ neo4j:
15
+ image: neo4j:5-community
16
+ container_name: argustack-code-neo4j
17
+ ports:
18
+ - "7474:7474" # HTTP / Neo4j Browser
19
+ - "7687:7687" # Bolt
20
+ environment:
21
+ NEO4J_AUTH: neo4j/argustack_local
22
+ NEO4J_PLUGINS: '["apoc"]'
23
+ NEO4J_dbms_memory_pagecache_size: 1G
24
+ NEO4J_dbms_memory_heap_initial__size: 1G
25
+ NEO4J_dbms_memory_heap_max__size: 2G
26
+ volumes:
27
+ - argustack-code-neo4j-data:/data
28
+ - argustack-code-neo4j-logs:/logs
29
+ - argustack-code-neo4j-plugins:/plugins
30
+ healthcheck:
31
+ test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:7474 || exit 1"]
32
+ interval: 10s
33
+ timeout: 5s
34
+ retries: 15
35
+ restart: unless-stopped
36
+
37
+ qdrant:
38
+ image: qdrant/qdrant:latest
39
+ container_name: argustack-code-qdrant
40
+ ports:
41
+ - "6333:6333" # REST
42
+ - "6334:6334" # gRPC
43
+ volumes:
44
+ - argustack-code-qdrant-data:/qdrant/storage
45
+ restart: unless-stopped
46
+
47
+ volumes:
48
+ argustack-code-neo4j-data:
49
+ argustack-code-neo4j-logs:
50
+ argustack-code-neo4j-plugins:
51
+ argustack-code-qdrant-data:
@@ -15,3 +15,19 @@ DB_PORT=5434
15
15
  DB_USER=argustack
16
16
  DB_PASSWORD=argustack_local
17
17
  DB_NAME=argustack
18
+
19
+ # === Code Intelligence (optional — needed only for `argustack code`) ===
20
+ # Set these after running `argustack code init` which bootstraps the shared
21
+ # hub at ~/.argustack/code/ (Neo4j + Qdrant on standard ports).
22
+ # NEO4J_URI=bolt://localhost:7687
23
+ # NEO4J_USER=neo4j
24
+ # NEO4J_PASSWORD=argustack_local
25
+ # QDRANT_URL=http://localhost:6333
26
+
27
+ # Code embedding provider: lmstudio (default, local) or voyage (cloud)
28
+ # CODE_EMBEDDING_PROVIDER=lmstudio
29
+ # LMSTUDIO_URL=http://localhost:1234
30
+ # EMBEDDING_MODEL=text-embedding-qwen3-embedding-4b
31
+ # EMBEDDING_DIMS=1024
32
+ # RERANK_MODEL= # optional, LM Studio chat model id (e.g. Qwen3-Reranker)
33
+ # VOYAGE_API_KEY= # only if CODE_EMBEDDING_PROVIDER=voyage