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.
Files changed (223) hide show
  1. package/README.md +97 -101
  2. package/dist/constants.d.ts +1 -1
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +54 -4
  5. package/dist/constants.js.map +1 -1
  6. package/dist/index.d.ts +3 -2
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +198 -119
  9. package/dist/index.js.map +1 -1
  10. package/dist/install.d.ts +0 -0
  11. package/dist/install.d.ts.map +0 -0
  12. package/dist/install.js +2 -2
  13. package/dist/install.js.map +1 -1
  14. package/dist/profiles.d.ts +28 -0
  15. package/dist/profiles.d.ts.map +1 -0
  16. package/dist/profiles.js +89 -0
  17. package/dist/profiles.js.map +1 -0
  18. package/dist/schemas/index.d.ts +1441 -126
  19. package/dist/schemas/index.d.ts.map +1 -1
  20. package/dist/schemas/index.js +221 -10
  21. package/dist/schemas/index.js.map +1 -1
  22. package/dist/security/guard.d.ts +15 -2
  23. package/dist/security/guard.d.ts.map +1 -1
  24. package/dist/security/guard.js +42 -8
  25. package/dist/security/guard.js.map +1 -1
  26. package/dist/services/code-chunker.d.ts +50 -0
  27. package/dist/services/code-chunker.d.ts.map +1 -0
  28. package/dist/services/code-chunker.js +148 -0
  29. package/dist/services/code-chunker.js.map +1 -0
  30. package/dist/services/code-searcher.d.ts +6 -2
  31. package/dist/services/code-searcher.d.ts.map +1 -1
  32. package/dist/services/code-searcher.js +111 -17
  33. package/dist/services/code-searcher.js.map +1 -1
  34. package/dist/services/context-builder.d.ts +0 -11
  35. package/dist/services/context-builder.d.ts.map +1 -1
  36. package/dist/services/context-builder.js +74 -128
  37. package/dist/services/context-builder.js.map +1 -1
  38. package/dist/services/embedding-runtime.d.ts +41 -0
  39. package/dist/services/embedding-runtime.d.ts.map +1 -0
  40. package/dist/services/embedding-runtime.js +636 -0
  41. package/dist/services/embedding-runtime.js.map +1 -0
  42. package/dist/services/embedding.d.ts +79 -0
  43. package/dist/services/embedding.d.ts.map +1 -0
  44. package/dist/services/embedding.js +257 -0
  45. package/dist/services/embedding.js.map +1 -0
  46. package/dist/services/index-state.d.ts +74 -0
  47. package/dist/services/index-state.d.ts.map +1 -0
  48. package/dist/services/index-state.js +151 -0
  49. package/dist/services/index-state.js.map +1 -0
  50. package/dist/services/index-worker.d.ts +60 -0
  51. package/dist/services/index-worker.d.ts.map +1 -0
  52. package/dist/services/index-worker.js +182 -0
  53. package/dist/services/index-worker.js.map +1 -0
  54. package/dist/services/logger.d.ts +48 -0
  55. package/dist/services/logger.d.ts.map +1 -0
  56. package/dist/services/logger.js +106 -0
  57. package/dist/services/logger.js.map +1 -0
  58. package/dist/services/memory-store.d.ts +9 -7
  59. package/dist/services/memory-store.d.ts.map +1 -1
  60. package/dist/services/memory-store.js +93 -7
  61. package/dist/services/memory-store.js.map +1 -1
  62. package/dist/services/repository-parser.d.ts +0 -0
  63. package/dist/services/repository-parser.d.ts.map +0 -0
  64. package/dist/services/repository-parser.js +0 -0
  65. package/dist/services/repository-parser.js.map +0 -0
  66. package/dist/services/symbol-indexer.d.ts +0 -0
  67. package/dist/services/symbol-indexer.d.ts.map +1 -1
  68. package/dist/services/symbol-indexer.js +25 -13
  69. package/dist/services/symbol-indexer.js.map +1 -1
  70. package/dist/services/tree-sitter.d.ts +0 -0
  71. package/dist/services/tree-sitter.d.ts.map +0 -0
  72. package/dist/services/tree-sitter.js +0 -0
  73. package/dist/services/tree-sitter.js.map +0 -0
  74. package/dist/services/validation-runner.d.ts +0 -0
  75. package/dist/services/validation-runner.d.ts.map +1 -1
  76. package/dist/services/validation-runner.js +9 -9
  77. package/dist/services/validation-runner.js.map +1 -1
  78. package/dist/services/vector-indexer.d.ts +53 -0
  79. package/dist/services/vector-indexer.d.ts.map +1 -0
  80. package/dist/services/vector-indexer.js +230 -0
  81. package/dist/services/vector-indexer.js.map +1 -0
  82. package/dist/store/index.d.ts +0 -0
  83. package/dist/store/index.d.ts.map +0 -0
  84. package/dist/store/index.js +0 -0
  85. package/dist/store/index.js.map +0 -0
  86. package/dist/store/interface.d.ts +70 -1
  87. package/dist/store/interface.d.ts.map +1 -1
  88. package/dist/store/interface.js +0 -0
  89. package/dist/store/interface.js.map +0 -0
  90. package/dist/store/memory.d.ts +0 -0
  91. package/dist/store/memory.d.ts.map +0 -0
  92. package/dist/store/memory.js +0 -0
  93. package/dist/store/memory.js.map +0 -0
  94. package/dist/store/service.d.ts +49 -0
  95. package/dist/store/service.d.ts.map +1 -0
  96. package/dist/store/service.js +147 -0
  97. package/dist/store/service.js.map +1 -0
  98. package/dist/store/sqlite.d.ts +68 -3
  99. package/dist/store/sqlite.d.ts.map +1 -1
  100. package/dist/store/sqlite.js +708 -58
  101. package/dist/store/sqlite.js.map +1 -1
  102. package/dist/store/vector-store.d.ts +66 -0
  103. package/dist/store/vector-store.d.ts.map +1 -0
  104. package/dist/store/vector-store.js +330 -0
  105. package/dist/store/vector-store.js.map +1 -0
  106. package/dist/tools/analyze-impact.d.ts +0 -0
  107. package/dist/tools/analyze-impact.d.ts.map +1 -1
  108. package/dist/tools/analyze-impact.js +101 -39
  109. package/dist/tools/analyze-impact.js.map +1 -1
  110. package/dist/tools/deep-explore.d.ts +0 -0
  111. package/dist/tools/deep-explore.d.ts.map +1 -1
  112. package/dist/tools/deep-explore.js +18 -4
  113. package/dist/tools/deep-explore.js.map +1 -1
  114. package/dist/tools/detect-cycles.d.ts +3 -0
  115. package/dist/tools/detect-cycles.d.ts.map +1 -0
  116. package/dist/tools/detect-cycles.js +61 -0
  117. package/dist/tools/detect-cycles.js.map +1 -0
  118. package/dist/tools/detect-dead-code.d.ts +0 -0
  119. package/dist/tools/detect-dead-code.d.ts.map +1 -1
  120. package/dist/tools/detect-dead-code.js +1 -0
  121. package/dist/tools/detect-dead-code.js.map +1 -1
  122. package/dist/tools/explore.d.ts +13 -0
  123. package/dist/tools/explore.d.ts.map +1 -1
  124. package/dist/tools/explore.js +122 -88
  125. package/dist/tools/explore.js.map +1 -1
  126. package/dist/tools/get-context.d.ts +15 -0
  127. package/dist/tools/get-context.d.ts.map +1 -1
  128. package/dist/tools/get-context.js +66 -61
  129. package/dist/tools/get-context.js.map +1 -1
  130. package/dist/tools/graph-explain.d.ts +3 -0
  131. package/dist/tools/graph-explain.d.ts.map +1 -0
  132. package/dist/tools/graph-explain.js +140 -0
  133. package/dist/tools/graph-explain.js.map +1 -0
  134. package/dist/tools/graph-stats.d.ts +3 -0
  135. package/dist/tools/graph-stats.d.ts.map +1 -0
  136. package/dist/tools/graph-stats.js +73 -0
  137. package/dist/tools/graph-stats.js.map +1 -0
  138. package/dist/tools/inspect-symbol.d.ts +10 -0
  139. package/dist/tools/inspect-symbol.d.ts.map +1 -1
  140. package/dist/tools/inspect-symbol.js +112 -101
  141. package/dist/tools/inspect-symbol.js.map +1 -1
  142. package/dist/tools/ping.d.ts +0 -0
  143. package/dist/tools/ping.d.ts.map +1 -1
  144. package/dist/tools/ping.js +2 -3
  145. package/dist/tools/ping.js.map +1 -1
  146. package/dist/tools/profile.d.ts +9 -0
  147. package/dist/tools/profile.d.ts.map +1 -0
  148. package/dist/tools/profile.js +101 -0
  149. package/dist/tools/profile.js.map +1 -0
  150. package/dist/tools/query-graph.d.ts +3 -0
  151. package/dist/tools/query-graph.d.ts.map +1 -0
  152. package/dist/tools/query-graph.js +157 -0
  153. package/dist/tools/query-graph.js.map +1 -0
  154. package/dist/tools/recall-experience.d.ts +0 -0
  155. package/dist/tools/recall-experience.d.ts.map +1 -1
  156. package/dist/tools/recall-experience.js +5 -5
  157. package/dist/tools/recall-experience.js.map +1 -1
  158. package/dist/tools/record-experience.d.ts +0 -0
  159. package/dist/tools/record-experience.d.ts.map +1 -1
  160. package/dist/tools/record-experience.js +2 -5
  161. package/dist/tools/record-experience.js.map +1 -1
  162. package/dist/tools/reflect.d.ts +4 -0
  163. package/dist/tools/reflect.d.ts.map +1 -0
  164. package/dist/tools/reflect.js +99 -0
  165. package/dist/tools/reflect.js.map +1 -0
  166. package/dist/tools/register.d.ts +5 -2
  167. package/dist/tools/register.d.ts.map +1 -1
  168. package/dist/tools/register.js +31 -1
  169. package/dist/tools/register.js.map +1 -1
  170. package/dist/tools/reindex.d.ts +0 -0
  171. package/dist/tools/reindex.d.ts.map +1 -1
  172. package/dist/tools/reindex.js +102 -21
  173. package/dist/tools/reindex.js.map +1 -1
  174. package/dist/tools/repo-overview.d.ts +0 -0
  175. package/dist/tools/repo-overview.d.ts.map +1 -1
  176. package/dist/tools/repo-overview.js +8 -6
  177. package/dist/tools/repo-overview.js.map +1 -1
  178. package/dist/tools/run-validation.d.ts +0 -0
  179. package/dist/tools/run-validation.d.ts.map +1 -1
  180. package/dist/tools/run-validation.js +15 -1
  181. package/dist/tools/run-validation.js.map +1 -1
  182. package/dist/tools/search-code.d.ts +0 -0
  183. package/dist/tools/search-code.d.ts.map +1 -1
  184. package/dist/tools/search-code.js +11 -4
  185. package/dist/tools/search-code.js.map +1 -1
  186. package/dist/tools/search-history.d.ts +0 -0
  187. package/dist/tools/search-history.d.ts.map +0 -0
  188. package/dist/tools/search-history.js +0 -0
  189. package/dist/tools/search-history.js.map +0 -0
  190. package/dist/tools/session-heartbeat.d.ts +0 -0
  191. package/dist/tools/session-heartbeat.d.ts.map +1 -1
  192. package/dist/tools/session-heartbeat.js +1 -0
  193. package/dist/tools/session-heartbeat.js.map +1 -1
  194. package/dist/tools/session-status.d.ts +0 -0
  195. package/dist/tools/session-status.d.ts.map +1 -1
  196. package/dist/tools/session-status.js +1 -0
  197. package/dist/tools/session-status.js.map +1 -1
  198. package/dist/tools/status.d.ts +0 -0
  199. package/dist/tools/status.d.ts.map +1 -1
  200. package/dist/tools/status.js +87 -24
  201. package/dist/tools/status.js.map +1 -1
  202. package/dist/tools/trace-bfs.d.ts +13 -0
  203. package/dist/tools/trace-bfs.d.ts.map +1 -0
  204. package/dist/tools/trace-bfs.js +251 -0
  205. package/dist/tools/trace-bfs.js.map +1 -0
  206. package/dist/tools/trace-flow.d.ts +1 -1
  207. package/dist/tools/trace-flow.d.ts.map +1 -1
  208. package/dist/tools/trace-flow.js +113 -69
  209. package/dist/tools/trace-flow.js.map +1 -1
  210. package/dist/types.d.ts +75 -13
  211. package/dist/types.d.ts.map +1 -1
  212. package/dist/types.js +15 -0
  213. package/dist/types.js.map +1 -1
  214. package/grammars/tree-sitter-c.wasm +0 -0
  215. package/grammars/tree-sitter-cpp.wasm +0 -0
  216. package/grammars/tree-sitter-go.wasm +0 -0
  217. package/grammars/tree-sitter-java.wasm +0 -0
  218. package/grammars/tree-sitter-javascript.wasm +0 -0
  219. package/grammars/tree-sitter-python.wasm +0 -0
  220. package/grammars/tree-sitter-rust.wasm +0 -0
  221. package/grammars/tree-sitter-tsx.wasm +0 -0
  222. package/grammars/tree-sitter-typescript.wasm +0 -0
  223. package/package.json +8 -6
@@ -1,26 +1,28 @@
1
1
  import { registerCiTool } from "./register.js";
2
2
  import { StatusSchema, StatusOutputSchema, ResponseFormat } from "../schemas/index.js";
3
- import { getIndex } from "../store/index.js";
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 stale detection",
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 index = getIndex();
18
- // Derive status fields from the persisted index
19
- const snapshot = index.snapshot;
20
- const commitSha = snapshot?.commitSha;
21
- const branch = snapshot?.branch;
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 = false;
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
- }).toString().trim();
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
- const symbolCount = index.symbols?.length ?? 0;
51
- const relationCount = index.relations?.length ?? 0;
52
- const indexAge = index.lastIndexed
53
- ? Math.round((Date.now() - new Date(index.lastIndexed).getTime()) / 1000 / 60) + " minutes"
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(`**Indexed:** ${statusData.indexed ? "Yes" : "No"}`);
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
- lines.push(`## Status: ${stale ? "⚠️ Stale — run ci_reindex" : "✅ Current"}`);
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 msg = error instanceof Error ? error.message : String(error);
96
- return { content: [{ type: "text", text: `Error getting status: ${msg}` }], isError: true };
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/tools/status.ts"],"names":[],"mappings":"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"}
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":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,cAAc,GAEf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,cAAc,CACZ,MAAM,EACN,cAAc,EACd;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EACT,0DAA0D;YAC1D,oEAAoE;YACpE,sEAAsE;YACtE,sDAAsD;YACtD,kFAAkF;QACpF,WAAW,EAAE,cAAc;QAC3B,YAAY,EAAE,oBAAoB;QAClC,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,MAAqB,EAAE,EAAE;QAC9B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;YAEzB,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;oBACzB,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,sDAAsD;6BAC7D;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBACD,MAAM,IAAI,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE;oBACzE,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC,CAAC;gBACH,IAAI,CAAC,IAAI,EAAE,CAAC;oBACV,MAAM,IAAI,GAAG;wBACX,2BAA2B;wBAC3B,EAAE;wBACF,6BAA6B,MAAM,CAAC,MAAM,gBAAgB,MAAM,CAAC,YAAY,eAAe,MAAM,CAAC,QAAQ,qBAAqB,MAAM,CAAC,SAAS,IAAI;wBACpJ,EAAE;wBACF,kBAAkB;wBAClB,0FAA0F;wBAC1F,kFAAkF;wBAClF,gCAAgC,MAAM,CAAC,SAAS,oCAAoC;wBACpF,oEAAoE;qBACrE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACb,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;wBAC1C,iBAAiB,EAAE,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;qBACnG,CAAC;gBACJ,CAAC;gBAED,kDAAkD;gBAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;gBAClC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;oBAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC9B,CAAC;gBAED,yBAAyB;gBACzB,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAE/E,uBAAuB;gBACvB,MAAM,SAAS,GAAa,EAAE,CAAC;gBAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;oBACtE,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC;oBACtE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBACZ,SAAS,CAAC,IAAI,CACZ,GAAG,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,QAAQ,IAAI,CAAC,IAAI,SAAS,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CACrJ,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,SAAS,CAAC,IAAI,CACZ,GAAG,MAAM,QAAQ,IAAI,CAAC,IAAI,SAAS,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAC5F,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,MAAM,WAAW,GAAG,KAAK;qBACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAE,CAAC,IAAI,SAAS,CAAE,CAAC,IAAI,SAAS,CAAE,CAAC,IAAI,IAAI,CAAE,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;qBAChF,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEd,MAAM,IAAI,GAAG;oBACX,eAAe,MAAM,CAAC,MAAM,MAAM,MAAM,CAAC,YAAY,EAAE;oBACvD,EAAE;oBACF,aAAa,IAAI,CAAC,MAAM,qBAAqB,MAAM,CAAC,SAAS,IAAI;oBACjE,EAAE;oBACF,KAAK;oBACL,GAAG,SAAS;oBACZ,KAAK;oBACL,EAAE;oBACF,uBAAuB;oBACvB,WAAW;oBACX,EAAE;oBACF,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC7E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEb,MAAM,MAAM,GAAG;oBACb,IAAI;oBACJ,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;oBAC5B,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;iBAClD,CAAC;gBAEF,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;oBAClD,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;wBAC3E,iBAAiB,EAAE,YAAY,CAAC,MAAM,CAAC;qBACxC,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,CAAC;oBAC7E,iBAAiB,EAAE,YAAY,CAAC,MAAM,CAAC;iBACxC,CAAC;YACJ,CAAC;YAED,oDAAoD;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE;gBAChD,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG;oBACX,2BAA2B;oBAC3B,EAAE;oBACF,qCAAqC,MAAM,CAAC,MAAM,8BAA8B;oBAChF,EAAE;oBACF,+FAA+F;oBAC/F,2CAA2C,MAAM,CAAC,QAAQ,IAAI;oBAC9D,0CAA0C,MAAM,CAAC,SAAS,IAAI;oBAC9D,kDAAkD;iBACnD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEb,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;oBAC1C,iBAAiB,EAAE,YAAY,CAAC,QAAQ,CAAC;iBAC1C,CAAC;YACJ,CAAC;YAED,wBAAwB;YACxB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC7B,MAAM,KAAK,GAAa;gBACtB,kBAAkB,MAAM,CAAC,MAAM,EAAE;gBACjC,EAAE;gBACF,cAAc,KAAK,CAAC,SAAS,WAAW,KAAK,CAAC,SAAS,iBAAiB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC7H,0BAA0B,MAAM,CAAC,SAAS,cAAc,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrN,EAAE;gBACF,mBAAmB;gBACnB,EAAE;aACH,CAAC;YAEF,uBAAuB;YACvB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiC,CAAC;YACzD,qFAAqF;YACrF,oCAAoC;YACpC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC/B,mCAAmC;gBACnC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,4CAA4C;gBAC7D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC;YAED,sDAAsD;YACtD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAClG,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiC,CAAC;YAC7D,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChD,WAAW,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,CAAC;YAED,KAAK,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3F,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;gBACjC,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;oBAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC7E,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;YAED,eAAe;YACf,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;YACjD,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAC/B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACpE,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC;gBAClD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC7E,iBAAiB,EAAE,YAAY,CAAC,QAAQ,CAAC;iBAC1C,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,CAAC;gBAC7E,iBAAiB,EAAE,YAAY,CAAC,QAAQ,CAAC;aAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,OAAO,EAAE,EAAE,CAAC;gBACnF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CACpB,SAAiB,EACjB,KAAwC,EACxC,KAAwC,EACxC,SAAiB;IAEjB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC1D,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IAEjC,kBAAkB;IAClB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QACnD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,KAAK,GAAyC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACrF,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,kDAAkD;IAChE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAE5B,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QAE5B,IAAI,SAAmB,CAAC;QACxB,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;YAC7B,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;aAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;YAChC,SAAS,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACrC,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,3 +1,3 @@
1
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  export declare function registerTraceFlow(server: McpServer): void;
3
3
  //# sourceMappingURL=trace-flow.d.ts.map
@@ -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;AAQpE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4DzD"}
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"}