pindex 1.3.0 → 1.5.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 +35 -12
- package/dist/cli/federate.d.ts +6 -0
- package/dist/cli/federate.d.ts.map +1 -0
- package/dist/cli/federate.js +128 -0
- package/dist/cli/federate.js.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +13 -7
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/project-detector.d.ts +9 -3
- package/dist/cli/project-detector.d.ts.map +1 -1
- package/dist/cli/project-detector.js +55 -6
- package/dist/cli/project-detector.js.map +1 -1
- package/dist/federation/merge.d.ts +4 -0
- package/dist/federation/merge.d.ts.map +1 -0
- package/dist/federation/merge.js +15 -0
- package/dist/federation/merge.js.map +1 -0
- package/dist/federation/registry-name.d.ts +6 -0
- package/dist/federation/registry-name.d.ts.map +1 -0
- package/dist/federation/registry-name.js +17 -0
- package/dist/federation/registry-name.js.map +1 -0
- package/dist/federation/repo-set.d.ts +27 -0
- package/dist/federation/repo-set.d.ts.map +1 -0
- package/dist/federation/repo-set.js +39 -0
- package/dist/federation/repo-set.js.map +1 -0
- package/dist/index.js +20 -3
- package/dist/index.js.map +1 -1
- package/dist/indexer/index.d.ts +3 -0
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +25 -0
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/lsp-mapper.d.ts +6 -0
- package/dist/indexer/lsp-mapper.d.ts.map +1 -0
- package/dist/indexer/lsp-mapper.js +40 -0
- package/dist/indexer/lsp-mapper.js.map +1 -0
- package/dist/indexer/lsp-python.d.ts +43 -0
- package/dist/indexer/lsp-python.d.ts.map +1 -0
- package/dist/indexer/lsp-python.js +234 -0
- package/dist/indexer/lsp-python.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +16 -13
- package/dist/server.js.map +1 -1
- package/dist/tools/find_usages.d.ts +2 -2
- package/dist/tools/find_usages.d.ts.map +1 -1
- package/dist/tools/find_usages.js +24 -10
- package/dist/tools/find_usages.js.map +1 -1
- package/dist/tools/get_context.d.ts +2 -2
- package/dist/tools/get_context.d.ts.map +1 -1
- package/dist/tools/get_context.js +54 -50
- package/dist/tools/get_context.js.map +1 -1
- package/dist/tools/get_dependencies.d.ts +2 -2
- package/dist/tools/get_dependencies.d.ts.map +1 -1
- package/dist/tools/get_dependencies.js +21 -11
- package/dist/tools/get_dependencies.js.map +1 -1
- package/dist/tools/get_doc_chunk.d.ts +2 -2
- package/dist/tools/get_doc_chunk.d.ts.map +1 -1
- package/dist/tools/get_doc_chunk.js +35 -29
- package/dist/tools/get_doc_chunk.js.map +1 -1
- package/dist/tools/get_file_summary.d.ts +2 -2
- package/dist/tools/get_file_summary.d.ts.map +1 -1
- package/dist/tools/get_file_summary.js +43 -37
- package/dist/tools/get_file_summary.js.map +1 -1
- package/dist/tools/get_project_overview.d.ts +2 -3
- package/dist/tools/get_project_overview.d.ts.map +1 -1
- package/dist/tools/get_project_overview.js +22 -22
- package/dist/tools/get_project_overview.js.map +1 -1
- package/dist/tools/get_symbol.d.ts +2 -2
- package/dist/tools/get_symbol.d.ts.map +1 -1
- package/dist/tools/get_symbol.js +33 -27
- package/dist/tools/get_symbol.js.map +1 -1
- package/dist/tools/schemas.d.ts +9 -0
- package/dist/tools/schemas.d.ts.map +1 -1
- package/dist/tools/schemas.js +10 -0
- package/dist/tools/schemas.js.map +1 -1
- package/dist/tools/search_docs.d.ts +2 -2
- package/dist/tools/search_docs.d.ts.map +1 -1
- package/dist/tools/search_docs.js +40 -28
- package/dist/tools/search_docs.js.map +1 -1
- package/dist/tools/search_symbols.d.ts +2 -3
- package/dist/tools/search_symbols.d.ts.map +1 -1
- package/dist/tools/search_symbols.js +35 -46
- package/dist/tools/search_symbols.js.map +1 -1
- package/dist/types.d.ts +24 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_dependencies.d.ts","sourceRoot":"","sources":["../../src/tools/get_dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"get_dependencies.d.ts","sourceRoot":"","sources":["../../src/tools/get_dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,oBAAoB,GAC1B,qBAAqB,EAAE,CA0BzB"}
|
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
import { getFileByPath, getDependenciesByFile, getImportedByFile } from '../db/queries.js';
|
|
2
|
-
export function getDependencies(
|
|
2
|
+
export function getDependencies(repoSet, input) {
|
|
3
|
+
const repos = repoSet.filter(input.repos);
|
|
3
4
|
const direction = input.direction ?? 'both';
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
const out = [];
|
|
6
|
+
for (const repo of repos) {
|
|
7
|
+
const file = getFileByPath(repo.db, input.target);
|
|
8
|
+
if (!file)
|
|
9
|
+
continue;
|
|
10
|
+
const result = {
|
|
11
|
+
file: input.target,
|
|
12
|
+
project: repo.name,
|
|
13
|
+
imports: [],
|
|
14
|
+
importedBy: [],
|
|
15
|
+
};
|
|
16
|
+
if (direction === 'imports' || direction === 'both') {
|
|
17
|
+
result.imports = getDependenciesByFile(repo.db, file.id);
|
|
18
|
+
}
|
|
19
|
+
if (direction === 'imported_by' || direction === 'both') {
|
|
20
|
+
result.importedBy = getImportedByFile(repo.db, file.id);
|
|
21
|
+
}
|
|
22
|
+
out.push(result);
|
|
7
23
|
}
|
|
8
|
-
|
|
9
|
-
? getDependenciesByFile(db, file.id)
|
|
10
|
-
: [];
|
|
11
|
-
const importedBy = direction === 'imported_by' || direction === 'both'
|
|
12
|
-
? getImportedByFile(db, file.id)
|
|
13
|
-
: [];
|
|
14
|
-
return { imports, importedBy };
|
|
24
|
+
return out;
|
|
15
25
|
}
|
|
16
26
|
//# sourceMappingURL=get_dependencies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_dependencies.js","sourceRoot":"","sources":["../../src/tools/get_dependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_dependencies.js","sourceRoot":"","sources":["../../src/tools/get_dependencies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG3F,MAAM,UAAU,eAAe,CAC7B,OAAgB,EAChB,KAA2B;IAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC;IAC5C,MAAM,GAAG,GAA4B,EAAE,CAAC;IAExC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,MAAM,GAA0B;YACpC,IAAI,EAAE,KAAK,CAAC,MAAM;YAClB,OAAO,EAAE,IAAI,CAAC,IAAI;YAClB,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,EAAE;SACf,CAAC;QAEF,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACpD,MAAM,CAAC,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,SAAS,KAAK,aAAa,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YACxD,MAAM,CAAC,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type Database from 'better-sqlite3';
|
|
2
1
|
import type { GetDocChunkInput, GetDocChunkOutput } from '../types.js';
|
|
3
|
-
|
|
2
|
+
import type { RepoSet } from '../federation/repo-set.js';
|
|
3
|
+
export declare function getDocChunk(repoSet: RepoSet, input: GetDocChunkInput): GetDocChunkOutput[];
|
|
4
4
|
//# sourceMappingURL=get_doc_chunk.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_doc_chunk.d.ts","sourceRoot":"","sources":["../../src/tools/get_doc_chunk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"get_doc_chunk.d.ts","sourceRoot":"","sources":["../../src/tools/get_doc_chunk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAY,MAAM,aAAa,CAAC;AAEjF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,EAAE,CAuC1F"}
|
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
import { getFileByPath, getDocumentChunksByFileId } from '../db/queries.js';
|
|
2
|
-
export function getDocChunk(
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
2
|
+
export function getDocChunk(repoSet, input) {
|
|
3
|
+
const repos = repoSet.filter(input.repos);
|
|
4
|
+
const out = [];
|
|
5
|
+
for (const repo of repos) {
|
|
6
|
+
const fileRecord = getFileByPath(repo.db, input.file);
|
|
7
|
+
if (!fileRecord)
|
|
8
|
+
continue;
|
|
9
|
+
const allChunks = getDocumentChunksByFileId(repo.db, fileRecord.id);
|
|
10
|
+
if (allChunks.length === 0)
|
|
11
|
+
continue;
|
|
12
|
+
const chunks = input.chunk_index !== undefined
|
|
13
|
+
? allChunks
|
|
14
|
+
.filter((c) => c.chunk_index === input.chunk_index)
|
|
15
|
+
.map((c) => ({
|
|
16
|
+
index: c.chunk_index,
|
|
17
|
+
heading: c.heading,
|
|
18
|
+
start_line: c.start_line,
|
|
19
|
+
end_line: c.end_line,
|
|
20
|
+
content: c.content,
|
|
21
|
+
}))
|
|
22
|
+
: allChunks.map((c) => ({
|
|
23
|
+
index: c.chunk_index,
|
|
24
|
+
heading: c.heading,
|
|
25
|
+
start_line: c.start_line,
|
|
26
|
+
end_line: c.end_line,
|
|
27
|
+
content: c.content,
|
|
28
|
+
}));
|
|
29
|
+
out.push({
|
|
30
|
+
file: input.file,
|
|
31
|
+
total_chunks: allChunks.length,
|
|
32
|
+
chunks,
|
|
33
|
+
project: repo.name,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
31
37
|
}
|
|
32
38
|
//# sourceMappingURL=get_doc_chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_doc_chunk.js","sourceRoot":"","sources":["../../src/tools/get_doc_chunk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_doc_chunk.js","sourceRoot":"","sources":["../../src/tools/get_doc_chunk.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,MAAM,UAAU,WAAW,CAAC,OAAgB,EAAE,KAAuB;IACnE,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAwB,EAAE,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,MAAM,SAAS,GAAG,yBAAyB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAErC,MAAM,MAAM,GACV,KAAK,CAAC,WAAW,KAAK,SAAS;YAC7B,CAAC,CAAC,SAAS;iBACN,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC;iBAClD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,KAAK,EAAE,CAAC,CAAC,WAAW;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACP,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpB,KAAK,EAAE,CAAC,CAAC,WAAW;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC,CAAC;QAEV,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,YAAY,EAAE,SAAS,CAAC,MAAM;YAC9B,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type Database from 'better-sqlite3';
|
|
2
1
|
import type { GetFileSummaryInput, GetFileSummaryOutput } from '../types.js';
|
|
3
|
-
|
|
2
|
+
import type { RepoSet } from '../federation/repo-set.js';
|
|
3
|
+
export declare function getFileSummary(repoSet: RepoSet, input: GetFileSummaryInput): GetFileSummaryOutput[];
|
|
4
4
|
//# sourceMappingURL=get_file_summary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_file_summary.d.ts","sourceRoot":"","sources":["../../src/tools/get_file_summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"get_file_summary.d.ts","sourceRoot":"","sources":["../../src/tools/get_file_summary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAc,MAAM,aAAa,CAAC;AAOzF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,mBAAmB,GACzB,oBAAoB,EAAE,CAmDxB"}
|
|
@@ -1,42 +1,48 @@
|
|
|
1
1
|
import { getFileByPath, getSymbolsByFileId, getDependenciesByFile, getObservationsByFile, } from '../db/queries.js';
|
|
2
|
-
export function getFileSummary(
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// For files that have been indexed, we can read the line count from the DB.
|
|
25
|
-
// Since line count is not stored, derive an estimate: ~80 chars per line.
|
|
26
|
-
if (file.raw_token_estimate != null) {
|
|
27
|
-
const estimatedChars = file.raw_token_estimate * 4;
|
|
28
|
-
output.lineCount = Math.round(estimatedChars / 50); // ~50 chars per line avg
|
|
29
|
-
}
|
|
30
|
-
// Attach memory context if prior observations exist for this file
|
|
31
|
-
const observations = getObservationsByFile(db, input.file, 3);
|
|
32
|
-
if (observations.length > 0) {
|
|
33
|
-
const hasStale = observations.some((o) => o.stale === 1);
|
|
34
|
-
output.memory_context = {
|
|
35
|
-
last_seen_session: observations[0]?.session_id ?? null,
|
|
36
|
-
observations: observations.map((o) => o.observation),
|
|
37
|
-
stale: hasStale,
|
|
2
|
+
export function getFileSummary(repoSet, input) {
|
|
3
|
+
const repos = repoSet.filter(input.repos);
|
|
4
|
+
const out = [];
|
|
5
|
+
for (const repo of repos) {
|
|
6
|
+
const file = getFileByPath(repo.db, input.file);
|
|
7
|
+
if (!file)
|
|
8
|
+
continue;
|
|
9
|
+
const symbols = getSymbolsByFileId(repo.db, file.id);
|
|
10
|
+
const imports = getDependenciesByFile(repo.db, file.id);
|
|
11
|
+
const exports = symbols.filter((s) => s.is_exported === 1).map((s) => s.name);
|
|
12
|
+
const summary = {
|
|
13
|
+
summary: file.summary,
|
|
14
|
+
language: file.language,
|
|
15
|
+
symbols: symbols.map((s) => ({
|
|
16
|
+
name: s.name,
|
|
17
|
+
kind: s.kind,
|
|
18
|
+
signature: s.signature,
|
|
19
|
+
})),
|
|
20
|
+
imports,
|
|
21
|
+
exports,
|
|
22
|
+
tokenEstimate: file.raw_token_estimate ?? undefined,
|
|
23
|
+
project: repo.name,
|
|
38
24
|
};
|
|
25
|
+
// Compute line count from token estimate (rough: 1 token ≈ 4 chars ≈ 0.5 lines)
|
|
26
|
+
// Better: count lines stored via raw_token_estimate proxy. We expose both.
|
|
27
|
+
// raw_token_estimate is already stored; derive line count from it if needed.
|
|
28
|
+
// For files that have been indexed, we can read the line count from the DB.
|
|
29
|
+
// Since line count is not stored, derive an estimate: ~80 chars per line.
|
|
30
|
+
if (file.raw_token_estimate != null) {
|
|
31
|
+
const estimatedChars = file.raw_token_estimate * 4;
|
|
32
|
+
summary.lineCount = Math.round(estimatedChars / 50); // ~50 chars per line avg
|
|
33
|
+
}
|
|
34
|
+
// Attach memory context if prior observations exist for this file
|
|
35
|
+
const observations = getObservationsByFile(repo.db, input.file, 3);
|
|
36
|
+
if (observations.length > 0) {
|
|
37
|
+
const hasStale = observations.some((o) => o.stale === 1);
|
|
38
|
+
summary.memory_context = {
|
|
39
|
+
last_seen_session: observations[0]?.session_id ?? null,
|
|
40
|
+
observations: observations.map((o) => o.observation),
|
|
41
|
+
stale: hasStale,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
out.push(summary);
|
|
39
45
|
}
|
|
40
|
-
return
|
|
46
|
+
return out;
|
|
41
47
|
}
|
|
42
48
|
//# sourceMappingURL=get_file_summary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_file_summary.js","sourceRoot":"","sources":["../../src/tools/get_file_summary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_file_summary.js","sourceRoot":"","sources":["../../src/tools/get_file_summary.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAG1B,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,KAA0B;IAE1B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE9E,MAAM,OAAO,GAAyB;YACpC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,IAAI,EAAE,CAAC,CAAC,IAAkB;gBAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC;YACH,OAAO;YACP,OAAO;YACP,aAAa,EAAE,IAAI,CAAC,kBAAkB,IAAI,SAAS;YACnD,OAAO,EAAE,IAAI,CAAC,IAAI;SACnB,CAAC;QAEF,gFAAgF;QAChF,2EAA2E;QAC3E,6EAA6E;QAC7E,4EAA4E;QAC5E,0EAA0E;QAC1E,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC;YACpC,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;YACnD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,yBAAyB;QAChF,CAAC;QAED,kEAAkE;QAClE,MAAM,YAAY,GAAG,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,cAAc,GAAG;gBACvB,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,IAAI;gBACtD,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;gBACpD,KAAK,EAAE,QAAQ;aAChB,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type Database from 'better-sqlite3';
|
|
2
1
|
import type { GetProjectOverviewInput, GetProjectOverviewOutput } from '../types.js';
|
|
3
|
-
import type {
|
|
4
|
-
export declare function getProjectOverview(
|
|
2
|
+
import type { RepoSet } from '../federation/repo-set.js';
|
|
3
|
+
export declare function getProjectOverview(repoSet: RepoSet, primaryProjectRoot: string, sessionId?: string, input?: GetProjectOverviewInput): GetProjectOverviewOutput;
|
|
5
4
|
//# sourceMappingURL=get_project_overview.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_project_overview.d.ts","sourceRoot":"","sources":["../../src/tools/get_project_overview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_project_overview.d.ts","sourceRoot":"","sources":["../../src/tools/get_project_overview.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,uBAAuB,EACvB,wBAAwB,EAIzB,MAAM,aAAa,CAAC;AAOrB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAkHzD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,kBAAkB,EAAE,MAAM,EAC1B,SAAS,GAAE,MAAkB,EAC7B,KAAK,CAAC,EAAE,uBAAuB,GAC9B,wBAAwB,CAsB1B"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { getAllFiles, countStaleObservations, countPriorSessions, getAntiPatternEvents, } from '../db/queries.js';
|
|
2
|
-
|
|
3
|
-
const mode = input?.mode ?? 'full';
|
|
2
|
+
function buildSnapshot(db, name, sessionId, projectRoot, mode = 'full') {
|
|
4
3
|
const files = getAllFiles(db);
|
|
5
4
|
if (files.length === 0) {
|
|
6
5
|
return {
|
|
7
|
-
|
|
6
|
+
project: name,
|
|
7
|
+
rootPath: projectRoot ?? '',
|
|
8
8
|
language: 'unknown',
|
|
9
9
|
entryPoints: [],
|
|
10
10
|
modules: [],
|
|
@@ -45,14 +45,15 @@ export function getProjectOverview(db, projectRoot, federatedDbs = [], sessionId
|
|
|
45
45
|
symbolCount: symbolCounts.get(f.id) ?? 0,
|
|
46
46
|
}));
|
|
47
47
|
}
|
|
48
|
-
const
|
|
49
|
-
|
|
48
|
+
const snapshot = {
|
|
49
|
+
project: name,
|
|
50
|
+
rootPath: projectRoot ?? '',
|
|
50
51
|
language,
|
|
51
52
|
entryPoints,
|
|
52
53
|
modules,
|
|
53
54
|
stats: { totalFiles: files.length, totalSymbols },
|
|
54
55
|
};
|
|
55
|
-
// Session memory summary (passive surfacing)
|
|
56
|
+
// Session memory summary (passive surfacing) — only for primary
|
|
56
57
|
if (sessionId) {
|
|
57
58
|
const staleCount = countStaleObservations(db);
|
|
58
59
|
const priorSessions = countPriorSessions(db, sessionId);
|
|
@@ -67,18 +68,13 @@ export function getProjectOverview(db, projectRoot, federatedDbs = [], sessionId
|
|
|
67
68
|
active_anti_patterns: antiPatterns,
|
|
68
69
|
hint: hasContext ? 'call get_session_memory for details' : null,
|
|
69
70
|
};
|
|
70
|
-
|
|
71
|
+
snapshot.session_memory = session_memory;
|
|
71
72
|
}
|
|
72
73
|
// ── Index recommendation ──────────────────────────────────────────────────
|
|
73
|
-
// Estimate whether using PindeX tools saves tokens vs direct file reads.
|
|
74
|
-
// Break-even: tool-def overhead (~800 tokens/turn × ~6 turns = ~5K) vs
|
|
75
|
-
// savings from avoiding full-file reads (avgFileTokens × avoidsPerSession).
|
|
76
|
-
// Heuristic thresholds tuned against benchmark data.
|
|
77
74
|
const BREAK_EVEN_FILES = 40;
|
|
78
75
|
const BREAK_EVEN_AVG_LINES = 150;
|
|
79
76
|
const tokenRow = db.prepare('SELECT COALESCE(SUM(raw_token_estimate), 0) as total FROM files').get();
|
|
80
77
|
const avgFileTokens = files.length > 0 ? tokenRow.total / files.length : 0;
|
|
81
|
-
// 1 token ≈ 4 chars ≈ 1/50 line (assuming ~200 chars/line avg)
|
|
82
78
|
const avgFileLinesEstimate = Math.round(avgFileTokens * 4 / 50);
|
|
83
79
|
const worthwhile = files.length >= BREAK_EVEN_FILES || avgFileLinesEstimate >= BREAK_EVEN_AVG_LINES;
|
|
84
80
|
const recommendation = {
|
|
@@ -89,15 +85,19 @@ export function getProjectOverview(db, projectRoot, federatedDbs = [], sessionId
|
|
|
89
85
|
avgFileLinesEstimate,
|
|
90
86
|
breakEvenFiles: BREAK_EVEN_FILES,
|
|
91
87
|
};
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
snapshot.index_recommendation = recommendation;
|
|
89
|
+
return snapshot;
|
|
90
|
+
}
|
|
91
|
+
export function getProjectOverview(repoSet, primaryProjectRoot, sessionId = 'default', input) {
|
|
92
|
+
const mode = input?.mode ?? 'full';
|
|
93
|
+
const repos = repoSet.filter(input?.repos);
|
|
94
|
+
const primary = repoSet.primary;
|
|
95
|
+
const snapshots = repos.map((repo) => buildSnapshot(repo.db, repo.name, repo.isPrimary ? sessionId : '', repo.isPrimary ? primaryProjectRoot : repo.path, mode));
|
|
96
|
+
const primarySnap = snapshots.find((s) => s.project === primary.name) ?? snapshots[0];
|
|
97
|
+
const federated = snapshots.filter((s) => s !== primarySnap);
|
|
98
|
+
return {
|
|
99
|
+
...primarySnap,
|
|
100
|
+
federated_projects: federated.length > 0 ? federated : undefined,
|
|
101
|
+
};
|
|
102
102
|
}
|
|
103
103
|
//# sourceMappingURL=get_project_overview.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_project_overview.js","sourceRoot":"","sources":["../../src/tools/get_project_overview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_project_overview.js","sourceRoot":"","sources":["../../src/tools/get_project_overview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type Database from 'better-sqlite3';
|
|
2
1
|
import type { GetSymbolInput, GetSymbolOutput } from '../types.js';
|
|
3
|
-
|
|
2
|
+
import type { RepoSet } from '../federation/repo-set.js';
|
|
3
|
+
export declare function getSymbol(repoSet: RepoSet, input: GetSymbolInput): GetSymbolOutput[];
|
|
4
4
|
//# sourceMappingURL=get_symbol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_symbol.d.ts","sourceRoot":"","sources":["../../src/tools/get_symbol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"get_symbol.d.ts","sourceRoot":"","sources":["../../src/tools/get_symbol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAOnE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEzD,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,GAAG,eAAe,EAAE,CAwCpF"}
|
package/dist/tools/get_symbol.js
CHANGED
|
@@ -1,32 +1,38 @@
|
|
|
1
1
|
import { getSymbolByName, getDependenciesByFile, getFileByPath, getObservationsByFileSymbol, } from '../db/queries.js';
|
|
2
|
-
export function getSymbol(
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const hasStale = observations.some((o) => o.stale === 1);
|
|
24
|
-
output.memory_context = {
|
|
25
|
-
last_seen_session: observations[0]?.session_id ?? null,
|
|
26
|
-
observations: observations.map((o) => o.observation),
|
|
27
|
-
stale: hasStale,
|
|
2
|
+
export function getSymbol(repoSet, input) {
|
|
3
|
+
const repos = repoSet.filter(input.repos);
|
|
4
|
+
const out = [];
|
|
5
|
+
for (const repo of repos) {
|
|
6
|
+
const symbol = getSymbolByName(repo.db, input.name, input.file);
|
|
7
|
+
if (!symbol)
|
|
8
|
+
continue;
|
|
9
|
+
// Get the file's import dependencies as context for this symbol
|
|
10
|
+
const file = getFileByPath(repo.db, symbol.file_path);
|
|
11
|
+
const dependencies = file ? getDependenciesByFile(repo.db, file.id) : [];
|
|
12
|
+
const detail = {
|
|
13
|
+
name: symbol.name,
|
|
14
|
+
kind: symbol.kind,
|
|
15
|
+
signature: symbol.signature,
|
|
16
|
+
summary: symbol.summary,
|
|
17
|
+
file: symbol.file_path,
|
|
18
|
+
startLine: symbol.start_line,
|
|
19
|
+
endLine: symbol.end_line,
|
|
20
|
+
isExported: symbol.is_exported === 1,
|
|
21
|
+
dependencies,
|
|
22
|
+
project: repo.name,
|
|
28
23
|
};
|
|
24
|
+
// Attach memory context if prior observations exist for this symbol
|
|
25
|
+
const observations = getObservationsByFileSymbol(repo.db, symbol.file_path, symbol.name, 3);
|
|
26
|
+
if (observations.length > 0) {
|
|
27
|
+
const hasStale = observations.some((o) => o.stale === 1);
|
|
28
|
+
detail.memory_context = {
|
|
29
|
+
last_seen_session: observations[0]?.session_id ?? null,
|
|
30
|
+
observations: observations.map((o) => o.observation),
|
|
31
|
+
stale: hasStale,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
out.push(detail);
|
|
29
35
|
}
|
|
30
|
-
return
|
|
36
|
+
return out;
|
|
31
37
|
}
|
|
32
38
|
//# sourceMappingURL=get_symbol.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_symbol.js","sourceRoot":"","sources":["../../src/tools/get_symbol.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get_symbol.js","sourceRoot":"","sources":["../../src/tools/get_symbol.ts"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAG1B,MAAM,UAAU,SAAS,CAAC,OAAgB,EAAE,KAAqB;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAsB,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,gEAAgE;QAChE,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEzE,MAAM,MAAM,GAAoB;YAC9B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,SAAS;YACtB,SAAS,EAAE,MAAM,CAAC,UAAU;YAC5B,OAAO,EAAE,MAAM,CAAC,QAAQ;YACxB,UAAU,EAAE,MAAM,CAAC,WAAW,KAAK,CAAC;YACpC,YAAY;YACZ,OAAO,EAAE,IAAI,CAAC,IAAI;SACnB,CAAC;QAEF,oEAAoE;QACpE,MAAM,YAAY,GAAG,2BAA2B,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5F,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,cAAc,GAAG;gBACtB,iBAAiB,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,IAAI;gBACtD,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;gBACpD,KAAK,EAAE,QAAQ;aAChB,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/tools/schemas.d.ts
CHANGED
|
@@ -5,21 +5,26 @@ export declare const SearchSymbolsSchema: z.ZodObject<{
|
|
|
5
5
|
isAsync: z.ZodOptional<z.ZodBoolean>;
|
|
6
6
|
hasTryCatch: z.ZodOptional<z.ZodBoolean>;
|
|
7
7
|
snippet: z.ZodOptional<z.ZodBoolean>;
|
|
8
|
+
repos: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
8
9
|
}, z.core.$strip>;
|
|
9
10
|
export declare const GetSymbolSchema: z.ZodObject<{
|
|
10
11
|
name: z.ZodString;
|
|
11
12
|
file: z.ZodOptional<z.ZodString>;
|
|
13
|
+
repos: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
12
14
|
}, z.core.$strip>;
|
|
13
15
|
export declare const GetContextSchema: z.ZodObject<{
|
|
14
16
|
file: z.ZodString;
|
|
15
17
|
line: z.ZodNumber;
|
|
16
18
|
range: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
repos: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
20
|
}, z.core.$strip>;
|
|
18
21
|
export declare const GetFileSummarySchema: z.ZodObject<{
|
|
19
22
|
file: z.ZodString;
|
|
23
|
+
repos: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
20
24
|
}, z.core.$strip>;
|
|
21
25
|
export declare const FindUsagesSchema: z.ZodObject<{
|
|
22
26
|
symbol: z.ZodString;
|
|
27
|
+
repos: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
23
28
|
}, z.core.$strip>;
|
|
24
29
|
export declare const GetDependenciesSchema: z.ZodObject<{
|
|
25
30
|
target: z.ZodString;
|
|
@@ -28,12 +33,14 @@ export declare const GetDependenciesSchema: z.ZodObject<{
|
|
|
28
33
|
imported_by: "imported_by";
|
|
29
34
|
both: "both";
|
|
30
35
|
}>>;
|
|
36
|
+
repos: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
37
|
}, z.core.$strip>;
|
|
32
38
|
export declare const GetProjectOverviewSchema: z.ZodObject<{
|
|
33
39
|
mode: z.ZodOptional<z.ZodEnum<{
|
|
34
40
|
brief: "brief";
|
|
35
41
|
full: "full";
|
|
36
42
|
}>>;
|
|
43
|
+
repos: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
37
44
|
}, z.core.$strip>;
|
|
38
45
|
export declare const ReindexSchema: z.ZodObject<{
|
|
39
46
|
target: z.ZodOptional<z.ZodString>;
|
|
@@ -56,10 +63,12 @@ export declare const SearchDocsSchema: z.ZodObject<{
|
|
|
56
63
|
context: "context";
|
|
57
64
|
all: "all";
|
|
58
65
|
}>>;
|
|
66
|
+
repos: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
59
67
|
}, z.core.$strip>;
|
|
60
68
|
export declare const GetDocChunkSchema: z.ZodObject<{
|
|
61
69
|
file: z.ZodString;
|
|
62
70
|
chunk_index: z.ZodOptional<z.ZodNumber>;
|
|
71
|
+
repos: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
63
72
|
}, z.core.$strip>;
|
|
64
73
|
export declare const SaveContextSchema: z.ZodObject<{
|
|
65
74
|
content: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,mBAAmB;;;;;;;iBAO9B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;iBAI1B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;iBAK3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;iBAG/B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;iBAG3B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;iBAIhC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;iBAGnC,CAAC;AAEH,eAAO,MAAM,aAAa;;iBAExB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;iBAGhC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;iBAK3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;iBAG5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;iBAKjC,CAAC;AAKH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAepD,CAAC"}
|
package/dist/tools/schemas.js
CHANGED
|
@@ -1,33 +1,41 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
// ─── Zod Schemas for MCP Tool Input Validation ──────────────────────────────
|
|
3
|
+
const reposField = z.array(z.string()).optional();
|
|
3
4
|
export const SearchSymbolsSchema = z.object({
|
|
4
5
|
query: z.string().min(1),
|
|
5
6
|
limit: z.number().int().positive().optional(),
|
|
6
7
|
isAsync: z.boolean().optional(),
|
|
7
8
|
hasTryCatch: z.boolean().optional(),
|
|
8
9
|
snippet: z.boolean().optional(),
|
|
10
|
+
repos: reposField,
|
|
9
11
|
});
|
|
10
12
|
export const GetSymbolSchema = z.object({
|
|
11
13
|
name: z.string().min(1),
|
|
12
14
|
file: z.string().optional(),
|
|
15
|
+
repos: reposField,
|
|
13
16
|
});
|
|
14
17
|
export const GetContextSchema = z.object({
|
|
15
18
|
file: z.string().min(1),
|
|
16
19
|
line: z.number().int().positive(),
|
|
17
20
|
range: z.number().int().positive().optional(),
|
|
21
|
+
repos: reposField,
|
|
18
22
|
});
|
|
19
23
|
export const GetFileSummarySchema = z.object({
|
|
20
24
|
file: z.string().min(1),
|
|
25
|
+
repos: reposField,
|
|
21
26
|
});
|
|
22
27
|
export const FindUsagesSchema = z.object({
|
|
23
28
|
symbol: z.string().min(1),
|
|
29
|
+
repos: reposField,
|
|
24
30
|
});
|
|
25
31
|
export const GetDependenciesSchema = z.object({
|
|
26
32
|
target: z.string().min(1),
|
|
27
33
|
direction: z.enum(['imports', 'imported_by', 'both']).optional(),
|
|
34
|
+
repos: reposField,
|
|
28
35
|
});
|
|
29
36
|
export const GetProjectOverviewSchema = z.object({
|
|
30
37
|
mode: z.enum(['brief', 'full']).optional(),
|
|
38
|
+
repos: reposField,
|
|
31
39
|
});
|
|
32
40
|
export const ReindexSchema = z.object({
|
|
33
41
|
target: z.string().optional(),
|
|
@@ -43,10 +51,12 @@ export const SearchDocsSchema = z.object({
|
|
|
43
51
|
query: z.string().min(1),
|
|
44
52
|
limit: z.number().int().positive().optional(),
|
|
45
53
|
type: z.enum(['docs', 'context', 'all']).optional(),
|
|
54
|
+
repos: reposField,
|
|
46
55
|
});
|
|
47
56
|
export const GetDocChunkSchema = z.object({
|
|
48
57
|
file: z.string().min(1),
|
|
49
58
|
chunk_index: z.number().int().nonnegative().optional(),
|
|
59
|
+
repos: reposField,
|
|
50
60
|
});
|
|
51
61
|
export const SaveContextSchema = z.object({
|
|
52
62
|
content: z.string().min(1),
|