codestrate 0.6.1 → 0.6.3
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 +97 -101
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +54 -4
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +198 -119
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +0 -0
- package/dist/install.d.ts.map +0 -0
- package/dist/install.js +2 -2
- package/dist/install.js.map +1 -1
- package/dist/profiles.d.ts +28 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +89 -0
- package/dist/profiles.js.map +1 -0
- package/dist/schemas/index.d.ts +1441 -126
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +221 -10
- package/dist/schemas/index.js.map +1 -1
- package/dist/security/guard.d.ts +15 -2
- package/dist/security/guard.d.ts.map +1 -1
- package/dist/security/guard.js +42 -8
- package/dist/security/guard.js.map +1 -1
- package/dist/services/code-chunker.d.ts +50 -0
- package/dist/services/code-chunker.d.ts.map +1 -0
- package/dist/services/code-chunker.js +148 -0
- package/dist/services/code-chunker.js.map +1 -0
- package/dist/services/code-searcher.d.ts +6 -2
- package/dist/services/code-searcher.d.ts.map +1 -1
- package/dist/services/code-searcher.js +111 -17
- package/dist/services/code-searcher.js.map +1 -1
- package/dist/services/context-builder.d.ts +0 -11
- package/dist/services/context-builder.d.ts.map +1 -1
- package/dist/services/context-builder.js +74 -128
- package/dist/services/context-builder.js.map +1 -1
- package/dist/services/embedding-runtime.d.ts +41 -0
- package/dist/services/embedding-runtime.d.ts.map +1 -0
- package/dist/services/embedding-runtime.js +636 -0
- package/dist/services/embedding-runtime.js.map +1 -0
- package/dist/services/embedding.d.ts +79 -0
- package/dist/services/embedding.d.ts.map +1 -0
- package/dist/services/embedding.js +257 -0
- package/dist/services/embedding.js.map +1 -0
- package/dist/services/index-state.d.ts +74 -0
- package/dist/services/index-state.d.ts.map +1 -0
- package/dist/services/index-state.js +151 -0
- package/dist/services/index-state.js.map +1 -0
- package/dist/services/index-worker.d.ts +60 -0
- package/dist/services/index-worker.d.ts.map +1 -0
- package/dist/services/index-worker.js +182 -0
- package/dist/services/index-worker.js.map +1 -0
- package/dist/services/logger.d.ts +48 -0
- package/dist/services/logger.d.ts.map +1 -0
- package/dist/services/logger.js +106 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/memory-store.d.ts +9 -7
- package/dist/services/memory-store.d.ts.map +1 -1
- package/dist/services/memory-store.js +93 -7
- package/dist/services/memory-store.js.map +1 -1
- package/dist/services/repository-parser.d.ts +0 -0
- package/dist/services/repository-parser.d.ts.map +0 -0
- package/dist/services/repository-parser.js +0 -0
- package/dist/services/repository-parser.js.map +0 -0
- package/dist/services/symbol-indexer.d.ts +0 -0
- package/dist/services/symbol-indexer.d.ts.map +1 -1
- package/dist/services/symbol-indexer.js +25 -13
- package/dist/services/symbol-indexer.js.map +1 -1
- package/dist/services/tree-sitter.d.ts +0 -0
- package/dist/services/tree-sitter.d.ts.map +0 -0
- package/dist/services/tree-sitter.js +0 -0
- package/dist/services/tree-sitter.js.map +0 -0
- package/dist/services/validation-runner.d.ts +0 -0
- package/dist/services/validation-runner.d.ts.map +1 -1
- package/dist/services/validation-runner.js +9 -9
- package/dist/services/validation-runner.js.map +1 -1
- package/dist/services/vector-indexer.d.ts +53 -0
- package/dist/services/vector-indexer.d.ts.map +1 -0
- package/dist/services/vector-indexer.js +230 -0
- package/dist/services/vector-indexer.js.map +1 -0
- package/dist/store/index.d.ts +0 -0
- package/dist/store/index.d.ts.map +0 -0
- package/dist/store/index.js +0 -0
- package/dist/store/index.js.map +0 -0
- package/dist/store/interface.d.ts +70 -1
- package/dist/store/interface.d.ts.map +1 -1
- package/dist/store/interface.js +0 -0
- package/dist/store/interface.js.map +0 -0
- package/dist/store/memory.d.ts +0 -0
- package/dist/store/memory.d.ts.map +0 -0
- package/dist/store/memory.js +0 -0
- package/dist/store/memory.js.map +0 -0
- package/dist/store/service.d.ts +49 -0
- package/dist/store/service.d.ts.map +1 -0
- package/dist/store/service.js +147 -0
- package/dist/store/service.js.map +1 -0
- package/dist/store/sqlite.d.ts +68 -3
- package/dist/store/sqlite.d.ts.map +1 -1
- package/dist/store/sqlite.js +708 -58
- package/dist/store/sqlite.js.map +1 -1
- package/dist/store/vector-store.d.ts +66 -0
- package/dist/store/vector-store.d.ts.map +1 -0
- package/dist/store/vector-store.js +330 -0
- package/dist/store/vector-store.js.map +1 -0
- package/dist/tools/analyze-impact.d.ts +0 -0
- package/dist/tools/analyze-impact.d.ts.map +1 -1
- package/dist/tools/analyze-impact.js +101 -39
- package/dist/tools/analyze-impact.js.map +1 -1
- package/dist/tools/deep-explore.d.ts +0 -0
- package/dist/tools/deep-explore.d.ts.map +1 -1
- package/dist/tools/deep-explore.js +18 -4
- package/dist/tools/deep-explore.js.map +1 -1
- package/dist/tools/detect-cycles.d.ts +3 -0
- package/dist/tools/detect-cycles.d.ts.map +1 -0
- package/dist/tools/detect-cycles.js +61 -0
- package/dist/tools/detect-cycles.js.map +1 -0
- package/dist/tools/detect-dead-code.d.ts +0 -0
- package/dist/tools/detect-dead-code.d.ts.map +1 -1
- package/dist/tools/detect-dead-code.js +1 -0
- package/dist/tools/detect-dead-code.js.map +1 -1
- package/dist/tools/explore.d.ts +13 -0
- package/dist/tools/explore.d.ts.map +1 -1
- package/dist/tools/explore.js +122 -88
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/get-context.d.ts +15 -0
- package/dist/tools/get-context.d.ts.map +1 -1
- package/dist/tools/get-context.js +66 -61
- package/dist/tools/get-context.js.map +1 -1
- package/dist/tools/graph-explain.d.ts +3 -0
- package/dist/tools/graph-explain.d.ts.map +1 -0
- package/dist/tools/graph-explain.js +140 -0
- package/dist/tools/graph-explain.js.map +1 -0
- package/dist/tools/graph-stats.d.ts +3 -0
- package/dist/tools/graph-stats.d.ts.map +1 -0
- package/dist/tools/graph-stats.js +73 -0
- package/dist/tools/graph-stats.js.map +1 -0
- package/dist/tools/inspect-symbol.d.ts +10 -0
- package/dist/tools/inspect-symbol.d.ts.map +1 -1
- package/dist/tools/inspect-symbol.js +112 -101
- package/dist/tools/inspect-symbol.js.map +1 -1
- package/dist/tools/ping.d.ts +0 -0
- package/dist/tools/ping.d.ts.map +1 -1
- package/dist/tools/ping.js +2 -3
- package/dist/tools/ping.js.map +1 -1
- package/dist/tools/profile.d.ts +9 -0
- package/dist/tools/profile.d.ts.map +1 -0
- package/dist/tools/profile.js +101 -0
- package/dist/tools/profile.js.map +1 -0
- package/dist/tools/query-graph.d.ts +3 -0
- package/dist/tools/query-graph.d.ts.map +1 -0
- package/dist/tools/query-graph.js +157 -0
- package/dist/tools/query-graph.js.map +1 -0
- package/dist/tools/recall-experience.d.ts +0 -0
- package/dist/tools/recall-experience.d.ts.map +1 -1
- package/dist/tools/recall-experience.js +5 -5
- package/dist/tools/recall-experience.js.map +1 -1
- package/dist/tools/record-experience.d.ts +0 -0
- package/dist/tools/record-experience.d.ts.map +1 -1
- package/dist/tools/record-experience.js +2 -5
- package/dist/tools/record-experience.js.map +1 -1
- package/dist/tools/reflect.d.ts +4 -0
- package/dist/tools/reflect.d.ts.map +1 -0
- package/dist/tools/reflect.js +99 -0
- package/dist/tools/reflect.js.map +1 -0
- package/dist/tools/register.d.ts +5 -2
- package/dist/tools/register.d.ts.map +1 -1
- package/dist/tools/register.js +31 -1
- package/dist/tools/register.js.map +1 -1
- package/dist/tools/reindex.d.ts +0 -0
- package/dist/tools/reindex.d.ts.map +1 -1
- package/dist/tools/reindex.js +102 -21
- package/dist/tools/reindex.js.map +1 -1
- package/dist/tools/repo-overview.d.ts +0 -0
- package/dist/tools/repo-overview.d.ts.map +1 -1
- package/dist/tools/repo-overview.js +8 -6
- package/dist/tools/repo-overview.js.map +1 -1
- package/dist/tools/run-validation.d.ts +0 -0
- package/dist/tools/run-validation.d.ts.map +1 -1
- package/dist/tools/run-validation.js +15 -1
- package/dist/tools/run-validation.js.map +1 -1
- package/dist/tools/search-code.d.ts +0 -0
- package/dist/tools/search-code.d.ts.map +1 -1
- package/dist/tools/search-code.js +11 -4
- package/dist/tools/search-code.js.map +1 -1
- package/dist/tools/search-history.d.ts +0 -0
- package/dist/tools/search-history.d.ts.map +0 -0
- package/dist/tools/search-history.js +0 -0
- package/dist/tools/search-history.js.map +0 -0
- package/dist/tools/session-heartbeat.d.ts +0 -0
- package/dist/tools/session-heartbeat.d.ts.map +1 -1
- package/dist/tools/session-heartbeat.js +1 -0
- package/dist/tools/session-heartbeat.js.map +1 -1
- package/dist/tools/session-status.d.ts +0 -0
- package/dist/tools/session-status.d.ts.map +1 -1
- package/dist/tools/session-status.js +1 -0
- package/dist/tools/session-status.js.map +1 -1
- package/dist/tools/status.d.ts +0 -0
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +87 -24
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/trace-bfs.d.ts +13 -0
- package/dist/tools/trace-bfs.d.ts.map +1 -0
- package/dist/tools/trace-bfs.js +251 -0
- package/dist/tools/trace-bfs.js.map +1 -0
- package/dist/tools/trace-flow.d.ts +1 -1
- package/dist/tools/trace-flow.d.ts.map +1 -1
- package/dist/tools/trace-flow.js +113 -69
- package/dist/tools/trace-flow.js.map +1 -1
- package/dist/types.d.ts +75 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -1
- package/grammars/tree-sitter-c.wasm +0 -0
- package/grammars/tree-sitter-cpp.wasm +0 -0
- package/grammars/tree-sitter-go.wasm +0 -0
- package/grammars/tree-sitter-java.wasm +0 -0
- package/grammars/tree-sitter-javascript.wasm +0 -0
- package/grammars/tree-sitter-python.wasm +0 -0
- package/grammars/tree-sitter-rust.wasm +0 -0
- package/grammars/tree-sitter-tsx.wasm +0 -0
- package/grammars/tree-sitter-typescript.wasm +0 -0
- package/package.json +8 -6
package/dist/tools/status.js
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
import { registerCiTool } from "./register.js";
|
|
2
2
|
import { StatusSchema, StatusOutputSchema, ResponseFormat } from "../schemas/index.js";
|
|
3
|
-
import {
|
|
3
|
+
import { getStore } from "../store/sqlite.js";
|
|
4
|
+
import { getSnapshot } from "../store/service.js";
|
|
5
|
+
import { asStructured } from "../types.js";
|
|
4
6
|
import { loadConfig } from "../constants.js";
|
|
7
|
+
import { getIndexState, markIndexStale } from "../services/index-state.js";
|
|
8
|
+
import { getVectorStore } from "../store/vector-store.js";
|
|
9
|
+
import { getEmbeddingRuntimeStatus } from "../services/embedding-runtime.js";
|
|
5
10
|
import { execFileSync } from "child_process";
|
|
6
|
-
import { asStructured } from "../types.js";
|
|
7
11
|
export function registerStatus(server) {
|
|
8
12
|
registerCiTool(server, "ci_status", {
|
|
9
13
|
title: "Index Status",
|
|
10
|
-
description: "Report the current repository index state — fingerprint, commit, age, symbol count, and
|
|
14
|
+
description: "Report the current repository index state — lifecycle, fingerprint, commit, age, symbol count, readiness, and staleness",
|
|
11
15
|
inputSchema: StatusSchema,
|
|
12
16
|
outputSchema: StatusOutputSchema,
|
|
13
17
|
annotations: { readOnlyHint: true, idempotentHint: true },
|
|
14
18
|
}, async (params) => {
|
|
15
19
|
try {
|
|
16
20
|
const config = loadConfig();
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const repoFingerprint = index.repoFingerprint || snapshot?.repoFingerprint;
|
|
23
|
-
// Compute filesByLanguage from snapshot files
|
|
21
|
+
const snapshot = getSnapshot();
|
|
22
|
+
const idx = getIndexState();
|
|
23
|
+
const repoFingerprint = getStore().getRepoFingerprint() ?? snapshot?.repoFingerprint ?? idx.snapshotId ?? null;
|
|
24
|
+
const branch = snapshot?.branch ?? null;
|
|
25
|
+
const commitSha = snapshot?.commitSha ?? null;
|
|
24
26
|
const filesByLanguage = {};
|
|
25
27
|
if (snapshot?.files) {
|
|
26
28
|
for (const file of snapshot.files) {
|
|
@@ -28,7 +30,7 @@ export function registerStatus(server) {
|
|
|
28
30
|
filesByLanguage[lang] = (filesByLanguage[lang] || 0) + 1;
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
|
-
let stale =
|
|
33
|
+
let stale = idx.stale;
|
|
32
34
|
let staleReason;
|
|
33
35
|
const repoPath = params.path || config.repoPath;
|
|
34
36
|
if (params.checkStaleness && commitSha && repoPath) {
|
|
@@ -37,8 +39,11 @@ export function registerStatus(server) {
|
|
|
37
39
|
cwd: repoPath,
|
|
38
40
|
encoding: "utf-8",
|
|
39
41
|
timeout: 5000,
|
|
40
|
-
})
|
|
42
|
+
})
|
|
43
|
+
.toString()
|
|
44
|
+
.trim();
|
|
41
45
|
stale = headSha !== commitSha;
|
|
46
|
+
markIndexStale(stale);
|
|
42
47
|
if (stale) {
|
|
43
48
|
staleReason = `HEAD (${headSha.slice(0, 7)}) differs from indexed commit (${commitSha.slice(0, 7)})`;
|
|
44
49
|
}
|
|
@@ -47,13 +52,21 @@ export function registerStatus(server) {
|
|
|
47
52
|
staleReason = "Could not check — not a git repository or git unavailable";
|
|
48
53
|
}
|
|
49
54
|
}
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
|
|
55
|
+
// Prefer live store counts; fall back to index-state
|
|
56
|
+
const symbolCount = getStore().getSymbols().length || idx.symbolCount;
|
|
57
|
+
const relationCount = getStore().getRelations().length || idx.relationCount;
|
|
58
|
+
const lastIndexed = getStore().getIndexedAt() ?? idx.indexedAt ?? null;
|
|
59
|
+
const indexAge = lastIndexed
|
|
60
|
+
? Math.round((Date.now() - new Date(lastIndexed).getTime()) / 1000 / 60) + " minutes"
|
|
54
61
|
: "unknown";
|
|
62
|
+
const vstore = getVectorStore();
|
|
63
|
+
const vectorStats = vstore?.stats() ?? null;
|
|
55
64
|
const statusData = {
|
|
56
|
-
indexed: !!snapshot,
|
|
65
|
+
indexed: idx.lifecycle === "ready" || idx.lifecycle === "empty" || !!snapshot,
|
|
66
|
+
indexLifecycle: idx.lifecycle,
|
|
67
|
+
indexReady: idx.ready,
|
|
68
|
+
partial: idx.partial,
|
|
69
|
+
errorMessage: idx.errorMessage ?? null,
|
|
57
70
|
repoFingerprint: repoFingerprint ?? null,
|
|
58
71
|
commitSha: commitSha ?? null,
|
|
59
72
|
branch: branch ?? null,
|
|
@@ -63,6 +76,24 @@ export function registerStatus(server) {
|
|
|
63
76
|
stale,
|
|
64
77
|
staleReason,
|
|
65
78
|
indexAge,
|
|
79
|
+
profile: config.profile ?? "core",
|
|
80
|
+
embeddingMode: config.embeddingMode ?? "auto",
|
|
81
|
+
embeddingRuntime: getEmbeddingRuntimeStatus(),
|
|
82
|
+
vectorStore: vectorStats
|
|
83
|
+
? {
|
|
84
|
+
backend: vectorStats.backend,
|
|
85
|
+
docCount: vectorStats.docCount,
|
|
86
|
+
dim: vectorStats.dim,
|
|
87
|
+
ready: vectorStats.ready,
|
|
88
|
+
path: vectorStats.path,
|
|
89
|
+
}
|
|
90
|
+
: {
|
|
91
|
+
backend: config.vectorStore ?? "zvec",
|
|
92
|
+
docCount: 0,
|
|
93
|
+
dim: config.embeddingDim ?? 1024,
|
|
94
|
+
ready: false,
|
|
95
|
+
path: null,
|
|
96
|
+
},
|
|
66
97
|
};
|
|
67
98
|
if (params.responseFormat === ResponseFormat.JSON) {
|
|
68
99
|
return {
|
|
@@ -70,30 +101,62 @@ export function registerStatus(server) {
|
|
|
70
101
|
structuredContent: asStructured(statusData),
|
|
71
102
|
};
|
|
72
103
|
}
|
|
73
|
-
// ── Markdown ──
|
|
74
104
|
const lines = [];
|
|
75
105
|
lines.push("# Index Status");
|
|
76
|
-
lines.push(`**
|
|
106
|
+
lines.push(`**Lifecycle:** ${statusData.indexLifecycle}`);
|
|
107
|
+
lines.push(`**Ready:** ${statusData.indexReady ? "Yes" : "No"}`);
|
|
108
|
+
lines.push(`**Partial:** ${statusData.partial ? "Yes" : "No"}`);
|
|
109
|
+
lines.push(`**Profile:** ${statusData.profile}`);
|
|
77
110
|
lines.push(`**Repo:** ${statusData.repoFingerprint ?? "N/A"}`);
|
|
78
111
|
lines.push(`**Commit:** ${statusData.commitSha ? statusData.commitSha.slice(0, 7) : "N/A"}`);
|
|
79
112
|
lines.push(`**Branch:** ${statusData.branch ?? "N/A"}`);
|
|
80
113
|
lines.push(`**Age:** ${statusData.indexAge}`);
|
|
81
114
|
lines.push(`**Symbols:** ${statusData.symbolCount}`);
|
|
82
115
|
lines.push(`**Relations:** ${statusData.relationCount}`);
|
|
116
|
+
lines.push(`**Embedding:** ${statusData.embeddingMode}`);
|
|
117
|
+
const rt = statusData.embeddingRuntime;
|
|
118
|
+
if (rt) {
|
|
119
|
+
lines.push(`**Embed runtime:** ${rt.mode}${rt.ready ? " ✅" : " ⏳"} — ${rt.message}${rt.url ? ` (${rt.url})` : ""}`);
|
|
120
|
+
}
|
|
121
|
+
const vs = statusData.vectorStore;
|
|
122
|
+
if (vs) {
|
|
123
|
+
lines.push(`**Vectors:** ${vs.backend} — ${vs.docCount} docs, dim ${vs.dim}${vs.ready ? "" : " (not ready)"}`);
|
|
124
|
+
}
|
|
83
125
|
lines.push("");
|
|
84
|
-
|
|
126
|
+
if (statusData.indexLifecycle === "failed") {
|
|
127
|
+
lines.push(`## Status: ❌ Index failed`);
|
|
128
|
+
if (statusData.errorMessage)
|
|
129
|
+
lines.push(statusData.errorMessage);
|
|
130
|
+
}
|
|
131
|
+
else if (statusData.indexLifecycle === "indexing") {
|
|
132
|
+
lines.push(`## Status: ⏳ Indexing…`);
|
|
133
|
+
}
|
|
134
|
+
else if (statusData.indexLifecycle === "empty") {
|
|
135
|
+
lines.push(`## Status: ⚠️ Empty index`);
|
|
136
|
+
}
|
|
137
|
+
else if (stale) {
|
|
138
|
+
lines.push(`## Status: ⚠️ Stale — run ci_reindex (full profile)`);
|
|
139
|
+
}
|
|
140
|
+
else if (statusData.indexReady) {
|
|
141
|
+
lines.push(`## Status: ✅ Current`);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
lines.push(`## Status: ⚠️ Not ready`);
|
|
145
|
+
}
|
|
85
146
|
if (staleReason) {
|
|
86
147
|
lines.push("", staleReason);
|
|
87
148
|
}
|
|
88
|
-
const text = lines.join("\n");
|
|
89
149
|
return {
|
|
90
|
-
content: [{ type: "text", text }],
|
|
150
|
+
content: [{ type: "text", text: lines.join("\n") }],
|
|
91
151
|
structuredContent: asStructured(statusData),
|
|
92
152
|
};
|
|
93
153
|
}
|
|
94
154
|
catch (error) {
|
|
95
|
-
const
|
|
96
|
-
return {
|
|
155
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
156
|
+
return {
|
|
157
|
+
content: [{ type: "text", text: `Error reading index status: ${message}` }],
|
|
158
|
+
isError: true,
|
|
159
|
+
};
|
|
97
160
|
}
|
|
98
161
|
});
|
|
99
162
|
}
|
package/dist/tools/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAoB,MAAM,qBAAqB,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace BFS — multi-hop graph traversal using recursive CTEs.
|
|
3
|
+
*
|
|
4
|
+
* Two modes:
|
|
5
|
+
* - explore: traverse all reachable nodes/edges from a starting symbol
|
|
6
|
+
* - path: find the shortest directed path between two symbols
|
|
7
|
+
*
|
|
8
|
+
* Uses the SQLiteStore's new traverseBFS / traverseBFSCallPath methods,
|
|
9
|
+
* which leverage recursive WITH CTEs for efficient graph walking.
|
|
10
|
+
*/
|
|
11
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
12
|
+
export declare function registerTraceBfs(server: McpServer): void;
|
|
13
|
+
//# sourceMappingURL=trace-bfs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-bfs.d.ts","sourceRoot":"","sources":["../../src/tools/trace-bfs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgOxD"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { registerCiTool } from "./register.js";
|
|
2
|
+
import { TraceBfsSchema, TraceBfsOutputSchema, ResponseFormat, } from "../schemas/index.js";
|
|
3
|
+
import { getStore } from "../store/sqlite.js";
|
|
4
|
+
import { MAX_RESPONSE_CHARS } from "../constants.js";
|
|
5
|
+
import { asStructured } from "../types.js";
|
|
6
|
+
export function registerTraceBfs(server) {
|
|
7
|
+
registerCiTool(server, "ci_trace_bfs", {
|
|
8
|
+
title: "Trace Graph BFS",
|
|
9
|
+
description: "Multi-hop BFS traversal of the symbol dependency graph. " +
|
|
10
|
+
"Use 'explore' mode to discover all nodes reachable from a symbol, " +
|
|
11
|
+
"or 'path' mode to find the shortest connection between two symbols. " +
|
|
12
|
+
"Filters edge kind, node kind, direction, and depth. " +
|
|
13
|
+
"Replaces multiple calls to ci_inspect_symbol + ci_trace_flow for graph analysis.",
|
|
14
|
+
inputSchema: TraceBfsSchema,
|
|
15
|
+
outputSchema: TraceBfsOutputSchema,
|
|
16
|
+
annotations: {
|
|
17
|
+
readOnlyHint: true,
|
|
18
|
+
idempotentHint: true,
|
|
19
|
+
openWorldHint: false,
|
|
20
|
+
},
|
|
21
|
+
}, async (params) => {
|
|
22
|
+
try {
|
|
23
|
+
const store = getStore();
|
|
24
|
+
if (params.mode === "path") {
|
|
25
|
+
if (!params.targetSymbol) {
|
|
26
|
+
return {
|
|
27
|
+
content: [
|
|
28
|
+
{
|
|
29
|
+
type: "text",
|
|
30
|
+
text: "Error: targetSymbol is required when mode is 'path'.",
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
isError: true,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const path = store.traverseBFSCallPath(params.symbol, params.targetSymbol, {
|
|
37
|
+
maxDepth: params.maxDepth,
|
|
38
|
+
direction: params.direction,
|
|
39
|
+
});
|
|
40
|
+
if (!path) {
|
|
41
|
+
const text = [
|
|
42
|
+
`# BFS Path: No Connection`,
|
|
43
|
+
``,
|
|
44
|
+
`No path found between **\`${params.symbol}\`** and **\`${params.targetSymbol}\`** within ${params.maxDepth} hops (direction: ${params.direction}).`,
|
|
45
|
+
``,
|
|
46
|
+
`Possible causes:`,
|
|
47
|
+
`- The symbols exist in the index but have no directed connection within the depth limit.`,
|
|
48
|
+
`- One or both symbols are not indexed as graph nodes (run \`ci_reindex\` first).`,
|
|
49
|
+
`- The edge direction filter (${params.direction}) excludes the actual connections.`,
|
|
50
|
+
`- Try increasing \`maxDepth\` or changing \`direction\` to "both".`,
|
|
51
|
+
].join("\n");
|
|
52
|
+
return {
|
|
53
|
+
content: [{ type: "text", text }],
|
|
54
|
+
structuredContent: asStructured({ path: null, nodes: [], edges: [], stats: { pathFound: false } }),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// Collect all unique node IDs from the path edges
|
|
58
|
+
const nodeIds = new Set();
|
|
59
|
+
for (const e of path) {
|
|
60
|
+
nodeIds.add(e.sourceNodeId);
|
|
61
|
+
nodeIds.add(e.targetNodeId);
|
|
62
|
+
}
|
|
63
|
+
// Fetch the node details
|
|
64
|
+
const nodes = [...nodeIds].map((id) => store.getGraphNode(id)).filter(Boolean);
|
|
65
|
+
// Build path rendering
|
|
66
|
+
const pathLines = [];
|
|
67
|
+
for (let i = 0; i < path.length; i++) {
|
|
68
|
+
const edge = path[i];
|
|
69
|
+
const sourceNode = nodes.find((n) => n && n.id === edge.sourceNodeId);
|
|
70
|
+
const targetNode = nodes.find((n) => n && n.id === edge.targetNodeId);
|
|
71
|
+
const indent = " ".repeat(i);
|
|
72
|
+
if (i === 0) {
|
|
73
|
+
pathLines.push(`${indent}${sourceNode ? sourceNode.name : "#" + edge.sourceNodeId} --[${edge.kind}]--> ${targetNode ? targetNode.name : "#" + edge.targetNodeId}`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
pathLines.push(`${indent} --[${edge.kind}]--> ${targetNode ? targetNode.name : "#" + edge.targetNodeId}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const nodeDetails = nodes
|
|
80
|
+
.map((n) => ` - **${n.name}** (\`${n.kind}\`) — ${n.file}:${n.line ?? "?"}`)
|
|
81
|
+
.join("\n");
|
|
82
|
+
const text = [
|
|
83
|
+
`# BFS Path: ${params.symbol} → ${params.targetSymbol}`,
|
|
84
|
+
``,
|
|
85
|
+
`**Path** (${path.length} hops, direction: ${params.direction}):`,
|
|
86
|
+
``,
|
|
87
|
+
"```",
|
|
88
|
+
...pathLines,
|
|
89
|
+
"```",
|
|
90
|
+
``,
|
|
91
|
+
`**Nodes along path:**`,
|
|
92
|
+
nodeDetails,
|
|
93
|
+
``,
|
|
94
|
+
`**Edge kinds:** ${Array.from(new Set(path.map((e) => e.kind))).join(", ")}`,
|
|
95
|
+
].join("\n");
|
|
96
|
+
const result = {
|
|
97
|
+
path,
|
|
98
|
+
nodes: nodes.filter(Boolean),
|
|
99
|
+
edges: path,
|
|
100
|
+
stats: { pathFound: true, hopCount: path.length },
|
|
101
|
+
};
|
|
102
|
+
if (params.responseFormat === ResponseFormat.JSON) {
|
|
103
|
+
return {
|
|
104
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
105
|
+
structuredContent: asStructured(result),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
content: [{ type: "text", text: text.slice(0, MAX_RESPONSE_CHARS) }],
|
|
110
|
+
structuredContent: asStructured(result),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// ── Explore mode (default) ───────────────────────
|
|
114
|
+
const subgraph = store.traverseBFS(params.symbol, {
|
|
115
|
+
maxDepth: params.maxDepth,
|
|
116
|
+
limit: params.limit,
|
|
117
|
+
direction: params.direction,
|
|
118
|
+
edgeKinds: params.edgeKinds,
|
|
119
|
+
nodeKinds: params.nodeKinds,
|
|
120
|
+
});
|
|
121
|
+
if (subgraph.nodes.length === 0) {
|
|
122
|
+
const text = [
|
|
123
|
+
`# BFS Explore: No Results`,
|
|
124
|
+
``,
|
|
125
|
+
`No nodes found reachable from **\`${params.symbol}\`** with the given filters.`,
|
|
126
|
+
``,
|
|
127
|
+
`- Check that the symbol exists in the index (run \`ci_status\` then \`ci_reindex\` if stale).`,
|
|
128
|
+
`- Try increasing \`maxDepth\` (current: ${params.maxDepth}).`,
|
|
129
|
+
`- Try changing \`direction\` (current: ${params.direction}).`,
|
|
130
|
+
`- Remove \`edgeKinds\` or \`nodeKinds\` filters.`,
|
|
131
|
+
].join("\n");
|
|
132
|
+
return {
|
|
133
|
+
content: [{ type: "text", text }],
|
|
134
|
+
structuredContent: asStructured(subgraph),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
// Build markdown output
|
|
138
|
+
const stats = subgraph.stats;
|
|
139
|
+
const lines = [
|
|
140
|
+
`# BFS Explore: ${params.symbol}`,
|
|
141
|
+
``,
|
|
142
|
+
`**Stats:** ${stats.nodeCount} nodes, ${stats.edgeCount} edges, depth ${stats.depth}${stats.truncated ? " (truncated)" : ""}`,
|
|
143
|
+
`**Filters:** direction=${params.direction}, maxDepth=${params.maxDepth}${params.edgeKinds ? ", edgeKinds=" + params.edgeKinds.join(",") : ""}${params.nodeKinds ? ", nodeKinds=" + params.nodeKinds.join(",") : ""}`,
|
|
144
|
+
``,
|
|
145
|
+
`## Nodes by Depth`,
|
|
146
|
+
``,
|
|
147
|
+
];
|
|
148
|
+
// Group nodes by depth
|
|
149
|
+
const byDepth = new Map();
|
|
150
|
+
// Re-query nodes with depth info from the CTE output (nodeRows isn't available here)
|
|
151
|
+
// We estimate depth from edge paths
|
|
152
|
+
for (const n of subgraph.nodes) {
|
|
153
|
+
// Find min depth by checking edges
|
|
154
|
+
const depth = 0; // placeholder - actual depth from edge path
|
|
155
|
+
if (!byDepth.has(depth))
|
|
156
|
+
byDepth.set(depth, []);
|
|
157
|
+
byDepth.get(depth).push(n);
|
|
158
|
+
}
|
|
159
|
+
// Better: rebuild depth by BFS on the result subgraph
|
|
160
|
+
const nodeDepths = computeDepths(params.symbol, subgraph.nodes, subgraph.edges, params.direction);
|
|
161
|
+
const depthGroups = new Map();
|
|
162
|
+
for (const n of subgraph.nodes) {
|
|
163
|
+
const d = nodeDepths.get(n.id) ?? 0;
|
|
164
|
+
if (!depthGroups.has(d))
|
|
165
|
+
depthGroups.set(d, []);
|
|
166
|
+
depthGroups.get(d).push(n);
|
|
167
|
+
}
|
|
168
|
+
for (const [depth, nodesAtDepth] of [...depthGroups.entries()].sort((a, b) => a[0] - b[0])) {
|
|
169
|
+
lines.push(`### Depth ${depth}`);
|
|
170
|
+
for (const n of nodesAtDepth) {
|
|
171
|
+
lines.push(`- **${n.name}** (\`${n.kind}\`) — ${n.file}:${n.line ?? "?"}`);
|
|
172
|
+
}
|
|
173
|
+
lines.push(``);
|
|
174
|
+
}
|
|
175
|
+
// Edge summary
|
|
176
|
+
const edgeKindCounts = new Map();
|
|
177
|
+
for (const e of subgraph.edges) {
|
|
178
|
+
edgeKindCounts.set(e.kind, (edgeKindCounts.get(e.kind) ?? 0) + 1);
|
|
179
|
+
}
|
|
180
|
+
lines.push(`## Edge Summary`);
|
|
181
|
+
lines.push(``);
|
|
182
|
+
for (const [kind, count] of edgeKindCounts) {
|
|
183
|
+
lines.push(`- **${kind}**: ${count}`);
|
|
184
|
+
}
|
|
185
|
+
const text = lines.join("\n");
|
|
186
|
+
if (params.responseFormat === ResponseFormat.JSON) {
|
|
187
|
+
return {
|
|
188
|
+
content: [{ type: "text", text: JSON.stringify(subgraph, null, 2) }],
|
|
189
|
+
structuredContent: asStructured(subgraph),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
return {
|
|
193
|
+
content: [{ type: "text", text: text.slice(0, MAX_RESPONSE_CHARS) }],
|
|
194
|
+
structuredContent: asStructured(subgraph),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
199
|
+
return {
|
|
200
|
+
content: [{ type: "text", text: `BFS graph traversal error: ${message}` }],
|
|
201
|
+
isError: true,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Compute minimum depth of each node from the start symbol in a subgraph,
|
|
208
|
+
* using BFS on the returned edges.
|
|
209
|
+
*/
|
|
210
|
+
function computeDepths(startName, nodes, edges, direction) {
|
|
211
|
+
const startNode = nodes.find((n) => n.name === startName);
|
|
212
|
+
if (!startNode)
|
|
213
|
+
return new Map();
|
|
214
|
+
// Build adjacency
|
|
215
|
+
const outgoing = new Map();
|
|
216
|
+
const incoming = new Map();
|
|
217
|
+
for (const n of nodes) {
|
|
218
|
+
outgoing.set(n.id, []);
|
|
219
|
+
incoming.set(n.id, []);
|
|
220
|
+
}
|
|
221
|
+
for (const e of edges) {
|
|
222
|
+
outgoing.get(e.sourceNodeId)?.push(e.targetNodeId);
|
|
223
|
+
incoming.get(e.targetNodeId)?.push(e.sourceNodeId);
|
|
224
|
+
}
|
|
225
|
+
const depths = new Map();
|
|
226
|
+
const queue = [{ id: startNode.id, depth: 0 }];
|
|
227
|
+
let head = 0; // index pointer instead of shift() → O(1) dequeue
|
|
228
|
+
depths.set(startNode.id, 0);
|
|
229
|
+
while (head < queue.length) {
|
|
230
|
+
const { id, depth } = queue[head++];
|
|
231
|
+
const nextDepth = depth + 1;
|
|
232
|
+
let neighbors;
|
|
233
|
+
if (direction === "incoming") {
|
|
234
|
+
neighbors = incoming.get(id) ?? [];
|
|
235
|
+
}
|
|
236
|
+
else if (direction === "both") {
|
|
237
|
+
neighbors = [...(outgoing.get(id) ?? []), ...(incoming.get(id) ?? [])];
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
neighbors = outgoing.get(id) ?? [];
|
|
241
|
+
}
|
|
242
|
+
for (const nid of neighbors) {
|
|
243
|
+
if (!depths.has(nid)) {
|
|
244
|
+
depths.set(nid, nextDepth);
|
|
245
|
+
queue.push({ id: nid, depth: nextDepth });
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return depths;
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=trace-bfs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-bfs.js","sourceRoot":"","sources":["../../src/tools/trace-bfs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-flow.d.ts","sourceRoot":"","sources":["../../src/tools/trace-flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"trace-flow.d.ts","sourceRoot":"","sources":["../../src/tools/trace-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8GzD"}
|