argustack 0.1.33 → 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 +159 -5
- 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,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 @@
|
|
|
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":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../../../src/core/ports/lsp-client.ts"],"names":[],"mappings":""}
|