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.
- package/README.md +29 -12
- package/dist/adapters/lmstudio/embedding-provider.d.ts +37 -0
- package/dist/adapters/lmstudio/embedding-provider.d.ts.map +1 -0
- package/dist/adapters/lmstudio/embedding-provider.js +174 -0
- package/dist/adapters/lmstudio/embedding-provider.js.map +1 -0
- package/dist/adapters/lmstudio/index.d.ts +3 -0
- package/dist/adapters/lmstudio/index.d.ts.map +1 -0
- package/dist/adapters/lmstudio/index.js +2 -0
- package/dist/adapters/lmstudio/index.js.map +1 -0
- package/dist/adapters/lsp/index.d.ts +4 -0
- package/dist/adapters/lsp/index.d.ts.map +1 -0
- package/dist/adapters/lsp/index.js +3 -0
- package/dist/adapters/lsp/index.js.map +1 -0
- package/dist/adapters/lsp/jsonrpc.d.ts +12 -0
- package/dist/adapters/lsp/jsonrpc.d.ts.map +1 -0
- package/dist/adapters/lsp/jsonrpc.js +30 -0
- package/dist/adapters/lsp/jsonrpc.js.map +1 -0
- package/dist/adapters/lsp/typescript-lsp.d.ts +25 -0
- package/dist/adapters/lsp/typescript-lsp.d.ts.map +1 -0
- package/dist/adapters/lsp/typescript-lsp.js +131 -0
- package/dist/adapters/lsp/typescript-lsp.js.map +1 -0
- package/dist/adapters/neo4j/client.d.ts +11 -0
- package/dist/adapters/neo4j/client.d.ts.map +1 -0
- package/dist/adapters/neo4j/client.js +14 -0
- package/dist/adapters/neo4j/client.js.map +1 -0
- package/dist/adapters/neo4j/cypher.d.ts +23 -0
- package/dist/adapters/neo4j/cypher.d.ts.map +1 -0
- package/dist/adapters/neo4j/cypher.js +138 -0
- package/dist/adapters/neo4j/cypher.js.map +1 -0
- package/dist/adapters/neo4j/graph-store.d.ts +33 -0
- package/dist/adapters/neo4j/graph-store.d.ts.map +1 -0
- package/dist/adapters/neo4j/graph-store.js +282 -0
- package/dist/adapters/neo4j/graph-store.js.map +1 -0
- package/dist/adapters/neo4j/index.d.ts +4 -0
- package/dist/adapters/neo4j/index.d.ts.map +1 -0
- package/dist/adapters/neo4j/index.js +3 -0
- package/dist/adapters/neo4j/index.js.map +1 -0
- package/dist/adapters/neo4j/mapper.d.ts +5 -0
- package/dist/adapters/neo4j/mapper.d.ts.map +1 -0
- package/dist/adapters/neo4j/mapper.js +49 -0
- package/dist/adapters/neo4j/mapper.js.map +1 -0
- package/dist/adapters/postgres/code-meta.d.ts +21 -0
- package/dist/adapters/postgres/code-meta.d.ts.map +1 -0
- package/dist/adapters/postgres/code-meta.js +150 -0
- package/dist/adapters/postgres/code-meta.js.map +1 -0
- package/dist/adapters/postgres/index.d.ts +1 -0
- package/dist/adapters/postgres/index.d.ts.map +1 -1
- package/dist/adapters/postgres/index.js +1 -0
- package/dist/adapters/postgres/index.js.map +1 -1
- package/dist/adapters/postgres/schema.d.ts.map +1 -1
- package/dist/adapters/postgres/schema.js +38 -0
- package/dist/adapters/postgres/schema.js.map +1 -1
- package/dist/adapters/postgres/storage.d.ts +3 -3
- package/dist/adapters/postgres/storage.d.ts.map +1 -1
- package/dist/adapters/postgres/storage.js +4 -4
- package/dist/adapters/postgres/storage.js.map +1 -1
- package/dist/adapters/qdrant/client.d.ts +8 -0
- package/dist/adapters/qdrant/client.d.ts.map +1 -0
- package/dist/adapters/qdrant/client.js +12 -0
- package/dist/adapters/qdrant/client.js.map +1 -0
- package/dist/adapters/qdrant/index.d.ts +4 -0
- package/dist/adapters/qdrant/index.d.ts.map +1 -0
- package/dist/adapters/qdrant/index.js +3 -0
- package/dist/adapters/qdrant/index.js.map +1 -0
- package/dist/adapters/qdrant/mapper.d.ts +16 -0
- package/dist/adapters/qdrant/mapper.d.ts.map +1 -0
- package/dist/adapters/qdrant/mapper.js +52 -0
- package/dist/adapters/qdrant/mapper.js.map +1 -0
- package/dist/adapters/qdrant/vector-store.d.ts +19 -0
- package/dist/adapters/qdrant/vector-store.d.ts.map +1 -0
- package/dist/adapters/qdrant/vector-store.js +114 -0
- package/dist/adapters/qdrant/vector-store.js.map +1 -0
- package/dist/adapters/tree-sitter/index.d.ts +4 -0
- package/dist/adapters/tree-sitter/index.d.ts.map +1 -0
- package/dist/adapters/tree-sitter/index.js +3 -0
- package/dist/adapters/tree-sitter/index.js.map +1 -0
- package/dist/adapters/tree-sitter/parser.d.ts +15 -0
- package/dist/adapters/tree-sitter/parser.d.ts.map +1 -0
- package/dist/adapters/tree-sitter/parser.js +186 -0
- package/dist/adapters/tree-sitter/parser.js.map +1 -0
- package/dist/adapters/tree-sitter/queries.d.ts +14 -0
- package/dist/adapters/tree-sitter/queries.d.ts.map +1 -0
- package/dist/adapters/tree-sitter/queries.js +14 -0
- package/dist/adapters/tree-sitter/queries.js.map +1 -0
- package/dist/adapters/voyage/embedding-provider.d.ts +25 -0
- package/dist/adapters/voyage/embedding-provider.d.ts.map +1 -0
- package/dist/adapters/voyage/embedding-provider.js +105 -0
- package/dist/adapters/voyage/embedding-provider.js.map +1 -0
- package/dist/adapters/voyage/index.d.ts +3 -0
- package/dist/adapters/voyage/index.d.ts.map +1 -0
- package/dist/adapters/voyage/index.js +2 -0
- package/dist/adapters/voyage/index.js.map +1 -0
- package/dist/cli/code.d.ts +3 -0
- package/dist/cli/code.d.ts.map +1 -0
- package/dist/cli/code.js +565 -0
- package/dist/cli/code.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/index.d.ts.map +1 -1
- package/dist/cli/init/index.js +5 -2
- package/dist/cli/init/index.js.map +1 -1
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +3 -0
- package/dist/cli/sync.js.map +1 -1
- package/dist/code-intel/chunker.d.ts +15 -0
- package/dist/code-intel/chunker.d.ts.map +1 -0
- package/dist/code-intel/chunker.js +39 -0
- package/dist/code-intel/chunker.js.map +1 -0
- package/dist/code-intel/file-discovery.d.ts +19 -0
- package/dist/code-intel/file-discovery.d.ts.map +1 -0
- package/dist/code-intel/file-discovery.js +80 -0
- package/dist/code-intel/file-discovery.js.map +1 -0
- package/dist/code-intel/hash.d.ts +2 -0
- package/dist/code-intel/hash.d.ts.map +1 -0
- package/dist/code-intel/hash.js +5 -0
- package/dist/code-intel/hash.js.map +1 -0
- package/dist/code-intel/index.d.ts +17 -0
- package/dist/code-intel/index.d.ts.map +1 -0
- package/dist/code-intel/index.js +11 -0
- package/dist/code-intel/index.js.map +1 -0
- package/dist/code-intel/indexer.d.ts +43 -0
- package/dist/code-intel/indexer.d.ts.map +1 -0
- package/dist/code-intel/indexer.js +234 -0
- package/dist/code-intel/indexer.js.map +1 -0
- package/dist/code-intel/job-lock.d.ts +7 -0
- package/dist/code-intel/job-lock.d.ts.map +1 -0
- package/dist/code-intel/job-lock.js +18 -0
- package/dist/code-intel/job-lock.js.map +1 -0
- package/dist/code-intel/layer-detector.d.ts +9 -0
- package/dist/code-intel/layer-detector.d.ts.map +1 -0
- package/dist/code-intel/layer-detector.js +31 -0
- package/dist/code-intel/layer-detector.js.map +1 -0
- package/dist/code-intel/lsp-resolver.d.ts +24 -0
- package/dist/code-intel/lsp-resolver.d.ts.map +1 -0
- package/dist/code-intel/lsp-resolver.js +125 -0
- package/dist/code-intel/lsp-resolver.js.map +1 -0
- package/dist/code-intel/ranker.d.ts +28 -0
- package/dist/code-intel/ranker.d.ts.map +1 -0
- package/dist/code-intel/ranker.js +69 -0
- package/dist/code-intel/ranker.js.map +1 -0
- package/dist/code-intel/resolver.d.ts +14 -0
- package/dist/code-intel/resolver.d.ts.map +1 -0
- package/dist/code-intel/resolver.js +59 -0
- package/dist/code-intel/resolver.js.map +1 -0
- package/dist/code-intel/tsconfig-paths.d.ts +11 -0
- package/dist/code-intel/tsconfig-paths.d.ts.map +1 -0
- package/dist/code-intel/tsconfig-paths.js +67 -0
- package/dist/code-intel/tsconfig-paths.js.map +1 -0
- package/dist/code-intel/watcher.d.ts +27 -0
- package/dist/code-intel/watcher.d.ts.map +1 -0
- package/dist/code-intel/watcher.js +93 -0
- package/dist/code-intel/watcher.js.map +1 -0
- package/dist/core/ports/code-embedding.d.ts +42 -0
- package/dist/core/ports/code-embedding.d.ts.map +1 -0
- package/dist/core/ports/code-embedding.js +2 -0
- package/dist/core/ports/code-embedding.js.map +1 -0
- package/dist/core/ports/code-graph.d.ts +56 -0
- package/dist/core/ports/code-graph.d.ts.map +1 -0
- package/dist/core/ports/code-graph.js +2 -0
- package/dist/core/ports/code-graph.js.map +1 -0
- package/dist/core/ports/code-meta.d.ts +33 -0
- package/dist/core/ports/code-meta.d.ts.map +1 -0
- package/dist/core/ports/code-meta.js +2 -0
- package/dist/core/ports/code-meta.js.map +1 -0
- package/dist/core/ports/code-parser.d.ts +13 -0
- package/dist/core/ports/code-parser.d.ts.map +1 -0
- package/dist/core/ports/code-parser.js +2 -0
- package/dist/core/ports/code-parser.js.map +1 -0
- package/dist/core/ports/code-vector-store.d.ts +37 -0
- package/dist/core/ports/code-vector-store.d.ts.map +1 -0
- package/dist/core/ports/code-vector-store.js +2 -0
- package/dist/core/ports/code-vector-store.js.map +1 -0
- package/dist/core/ports/index.d.ts +6 -0
- package/dist/core/ports/index.d.ts.map +1 -1
- package/dist/core/ports/lsp-client.d.ts +22 -0
- package/dist/core/ports/lsp-client.d.ts.map +1 -0
- package/dist/core/ports/lsp-client.js +2 -0
- package/dist/core/ports/lsp-client.js.map +1 -0
- package/dist/core/types/code.d.ts +153 -0
- package/dist/core/types/code.d.ts.map +1 -0
- package/dist/core/types/code.js +2 -0
- package/dist/core/types/code.js.map +1 -0
- package/dist/core/types/config.d.ts +1 -1
- package/dist/core/types/config.d.ts.map +1 -1
- package/dist/core/types/config.js +8 -1
- package/dist/core/types/config.js.map +1 -1
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/mcp/helpers.d.ts +21 -0
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +157 -3
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +6 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/code-graph.d.ts +3 -0
- package/dist/mcp/tools/code-graph.d.ts.map +1 -0
- package/dist/mcp/tools/code-graph.js +295 -0
- package/dist/mcp/tools/code-graph.js.map +1 -0
- package/dist/mcp/tools/code-hybrid.d.ts +3 -0
- package/dist/mcp/tools/code-hybrid.d.ts.map +1 -0
- package/dist/mcp/tools/code-hybrid.js +118 -0
- package/dist/mcp/tools/code-hybrid.js.map +1 -0
- package/dist/mcp/tools/code-search.d.ts +3 -0
- package/dist/mcp/tools/code-search.d.ts.map +1 -0
- package/dist/mcp/tools/code-search.js +95 -0
- package/dist/mcp/tools/code-search.js.map +1 -0
- package/dist/mcp/tools/workspace.js +1 -1
- package/dist/mcp/tools/workspace.js.map +1 -1
- package/dist/use-cases/code-search.d.ts +36 -0
- package/dist/use-cases/code-search.d.ts.map +1 -0
- package/dist/use-cases/code-search.js +74 -0
- package/dist/use-cases/code-search.js.map +1 -0
- package/dist/use-cases/index-code.d.ts +24 -0
- package/dist/use-cases/index-code.d.ts.map +1 -0
- package/dist/use-cases/index-code.js +43 -0
- package/dist/use-cases/index-code.js.map +1 -0
- package/dist/use-cases/register-code-project.d.ts +21 -0
- package/dist/use-cases/register-code-project.d.ts.map +1 -0
- package/dist/use-cases/register-code-project.js +19 -0
- package/dist/use-cases/register-code-project.js.map +1 -0
- package/dist/use-cases/unregister-code-project.d.ts +11 -0
- package/dist/use-cases/unregister-code-project.d.ts.map +1 -0
- package/dist/use-cases/unregister-code-project.js +19 -0
- package/dist/use-cases/unregister-code-project.js.map +1 -0
- package/dist/use-cases/watch-code.d.ts +33 -0
- package/dist/use-cases/watch-code.d.ts.map +1 -0
- package/dist/use-cases/watch-code.js +52 -0
- package/dist/use-cases/watch-code.js.map +1 -0
- package/package.json +10 -3
- package/templates/code-docker-compose.yml +51 -0
- 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.
|
|
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/
|
|
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:
|
package/templates/env.example
CHANGED
|
@@ -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
|