@opencodehub/mcp 0.1.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 +62 -0
- package/dist/analysis-bridge.d.ts +23 -0
- package/dist/analysis-bridge.d.ts.map +1 -0
- package/dist/analysis-bridge.js +83 -0
- package/dist/analysis-bridge.js.map +1 -0
- package/dist/connection-pool.d.ts +76 -0
- package/dist/connection-pool.d.ts.map +1 -0
- package/dist/connection-pool.js +179 -0
- package/dist/connection-pool.js.map +1 -0
- package/dist/error-envelope.d.ts +97 -0
- package/dist/error-envelope.d.ts.map +1 -0
- package/dist/error-envelope.js +75 -0
- package/dist/error-envelope.js.map +1 -0
- package/dist/group-resolver.d.ts +29 -0
- package/dist/group-resolver.d.ts.map +1 -0
- package/dist/group-resolver.js +100 -0
- package/dist/group-resolver.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/next-step-hints.d.ts +24 -0
- package/dist/next-step-hints.d.ts.map +1 -0
- package/dist/next-step-hints.js +41 -0
- package/dist/next-step-hints.js.map +1 -0
- package/dist/repo-resolver.d.ts +88 -0
- package/dist/repo-resolver.d.ts.map +1 -0
- package/dist/repo-resolver.js +211 -0
- package/dist/repo-resolver.js.map +1 -0
- package/dist/repo-uri-for-entry.d.ts +25 -0
- package/dist/repo-uri-for-entry.d.ts.map +1 -0
- package/dist/repo-uri-for-entry.js +64 -0
- package/dist/repo-uri-for-entry.js.map +1 -0
- package/dist/resources/repo-cluster.d.ts +19 -0
- package/dist/resources/repo-cluster.d.ts.map +1 -0
- package/dist/resources/repo-cluster.js +203 -0
- package/dist/resources/repo-cluster.js.map +1 -0
- package/dist/resources/repo-clusters.d.ts +14 -0
- package/dist/resources/repo-clusters.d.ts.map +1 -0
- package/dist/resources/repo-clusters.js +97 -0
- package/dist/resources/repo-clusters.js.map +1 -0
- package/dist/resources/repo-context.d.ts +12 -0
- package/dist/resources/repo-context.d.ts.map +1 -0
- package/dist/resources/repo-context.js +84 -0
- package/dist/resources/repo-context.js.map +1 -0
- package/dist/resources/repo-process.d.ts +19 -0
- package/dist/resources/repo-process.d.ts.map +1 -0
- package/dist/resources/repo-process.js +220 -0
- package/dist/resources/repo-process.js.map +1 -0
- package/dist/resources/repo-processes.d.ts +13 -0
- package/dist/resources/repo-processes.d.ts.map +1 -0
- package/dist/resources/repo-processes.js +99 -0
- package/dist/resources/repo-processes.js.map +1 -0
- package/dist/resources/repo-schema.d.ts +13 -0
- package/dist/resources/repo-schema.d.ts.map +1 -0
- package/dist/resources/repo-schema.js +99 -0
- package/dist/resources/repo-schema.js.map +1 -0
- package/dist/resources/repos.d.ts +20 -0
- package/dist/resources/repos.d.ts.map +1 -0
- package/dist/resources/repos.js +58 -0
- package/dist/resources/repos.js.map +1 -0
- package/dist/resources/store-helper.d.ts +28 -0
- package/dist/resources/store-helper.d.ts.map +1 -0
- package/dist/resources/store-helper.js +58 -0
- package/dist/resources/store-helper.js.map +1 -0
- package/dist/resources/yaml.d.ts +10 -0
- package/dist/resources/yaml.d.ts.map +1 -0
- package/dist/resources/yaml.js +16 -0
- package/dist/resources/yaml.js.map +1 -0
- package/dist/server.d.ts +46 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +194 -0
- package/dist/server.js.map +1 -0
- package/dist/staleness.d.ts +19 -0
- package/dist/staleness.d.ts.map +1 -0
- package/dist/staleness.js +40 -0
- package/dist/staleness.js.map +1 -0
- package/dist/test-utils.d.ts +170 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/test-utils.js +473 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/tools/api-impact.d.ts +47 -0
- package/dist/tools/api-impact.d.ts.map +1 -0
- package/dist/tools/api-impact.js +199 -0
- package/dist/tools/api-impact.js.map +1 -0
- package/dist/tools/confidence.d.ts +39 -0
- package/dist/tools/confidence.d.ts.map +1 -0
- package/dist/tools/confidence.js +58 -0
- package/dist/tools/confidence.js.map +1 -0
- package/dist/tools/context.d.ts +47 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +577 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/dependencies.d.ts +29 -0
- package/dist/tools/dependencies.d.ts.map +1 -0
- package/dist/tools/dependencies.js +110 -0
- package/dist/tools/dependencies.js.map +1 -0
- package/dist/tools/detect-changes.d.ts +15 -0
- package/dist/tools/detect-changes.d.ts.map +1 -0
- package/dist/tools/detect-changes.js +78 -0
- package/dist/tools/detect-changes.js.map +1 -0
- package/dist/tools/group-contracts.d.ts +26 -0
- package/dist/tools/group-contracts.d.ts.map +1 -0
- package/dist/tools/group-contracts.js +251 -0
- package/dist/tools/group-contracts.js.map +1 -0
- package/dist/tools/group-cross-repo-links.d.ts +28 -0
- package/dist/tools/group-cross-repo-links.d.ts.map +1 -0
- package/dist/tools/group-cross-repo-links.js +128 -0
- package/dist/tools/group-cross-repo-links.js.map +1 -0
- package/dist/tools/group-list.d.ts +10 -0
- package/dist/tools/group-list.d.ts.map +1 -0
- package/dist/tools/group-list.js +74 -0
- package/dist/tools/group-list.js.map +1 -0
- package/dist/tools/group-query.d.ts +40 -0
- package/dist/tools/group-query.d.ts.map +1 -0
- package/dist/tools/group-query.js +209 -0
- package/dist/tools/group-query.js.map +1 -0
- package/dist/tools/group-status.d.ts +21 -0
- package/dist/tools/group-status.d.ts.map +1 -0
- package/dist/tools/group-status.js +121 -0
- package/dist/tools/group-status.js.map +1 -0
- package/dist/tools/group-sync.d.ts +23 -0
- package/dist/tools/group-sync.d.ts.map +1 -0
- package/dist/tools/group-sync.js +112 -0
- package/dist/tools/group-sync.js.map +1 -0
- package/dist/tools/impact.d.ts +36 -0
- package/dist/tools/impact.d.ts.map +1 -0
- package/dist/tools/impact.js +232 -0
- package/dist/tools/impact.js.map +1 -0
- package/dist/tools/license-audit.d.ts +34 -0
- package/dist/tools/license-audit.d.ts.map +1 -0
- package/dist/tools/license-audit.js +108 -0
- package/dist/tools/license-audit.js.map +1 -0
- package/dist/tools/list-dead-code.d.ts +26 -0
- package/dist/tools/list-dead-code.d.ts.map +1 -0
- package/dist/tools/list-dead-code.js +110 -0
- package/dist/tools/list-dead-code.js.map +1 -0
- package/dist/tools/list-findings-delta.d.ts +36 -0
- package/dist/tools/list-findings-delta.d.ts.map +1 -0
- package/dist/tools/list-findings-delta.js +274 -0
- package/dist/tools/list-findings-delta.js.map +1 -0
- package/dist/tools/list-findings.d.ts +30 -0
- package/dist/tools/list-findings.d.ts.map +1 -0
- package/dist/tools/list-findings.js +129 -0
- package/dist/tools/list-findings.js.map +1 -0
- package/dist/tools/list-repos.d.ts +17 -0
- package/dist/tools/list-repos.d.ts.map +1 -0
- package/dist/tools/list-repos.js +63 -0
- package/dist/tools/list-repos.js.map +1 -0
- package/dist/tools/owners.d.ts +23 -0
- package/dist/tools/owners.d.ts.map +1 -0
- package/dist/tools/owners.js +103 -0
- package/dist/tools/owners.js.map +1 -0
- package/dist/tools/pack-codebase.d.ts +76 -0
- package/dist/tools/pack-codebase.d.ts.map +1 -0
- package/dist/tools/pack-codebase.js +289 -0
- package/dist/tools/pack-codebase.js.map +1 -0
- package/dist/tools/project-profile.d.ts +28 -0
- package/dist/tools/project-profile.d.ts.map +1 -0
- package/dist/tools/project-profile.js +109 -0
- package/dist/tools/project-profile.js.map +1 -0
- package/dist/tools/query.d.ts +63 -0
- package/dist/tools/query.d.ts.map +1 -0
- package/dist/tools/query.js +662 -0
- package/dist/tools/query.js.map +1 -0
- package/dist/tools/remove-dead-code.d.ts +47 -0
- package/dist/tools/remove-dead-code.d.ts.map +1 -0
- package/dist/tools/remove-dead-code.js +258 -0
- package/dist/tools/remove-dead-code.js.map +1 -0
- package/dist/tools/rename.d.ts +21 -0
- package/dist/tools/rename.d.ts.map +1 -0
- package/dist/tools/rename.js +116 -0
- package/dist/tools/rename.js.map +1 -0
- package/dist/tools/risk-trends.d.ts +19 -0
- package/dist/tools/risk-trends.d.ts.map +1 -0
- package/dist/tools/risk-trends.js +73 -0
- package/dist/tools/risk-trends.js.map +1 -0
- package/dist/tools/route-map.d.ts +27 -0
- package/dist/tools/route-map.d.ts.map +1 -0
- package/dist/tools/route-map.js +119 -0
- package/dist/tools/route-map.js.map +1 -0
- package/dist/tools/scan.d.ts +27 -0
- package/dist/tools/scan.d.ts.map +1 -0
- package/dist/tools/scan.js +136 -0
- package/dist/tools/scan.js.map +1 -0
- package/dist/tools/shape-check.d.ts +53 -0
- package/dist/tools/shape-check.d.ts.map +1 -0
- package/dist/tools/shape-check.js +161 -0
- package/dist/tools/shape-check.js.map +1 -0
- package/dist/tools/shared.d.ts +101 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +114 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/signature.d.ts +38 -0
- package/dist/tools/signature.d.ts.map +1 -0
- package/dist/tools/signature.js +332 -0
- package/dist/tools/signature.js.map +1 -0
- package/dist/tools/sql.d.ts +34 -0
- package/dist/tools/sql.d.ts.map +1 -0
- package/dist/tools/sql.js +222 -0
- package/dist/tools/sql.js.map +1 -0
- package/dist/tools/tool-map.d.ts +24 -0
- package/dist/tools/tool-map.d.ts.map +1 -0
- package/dist/tools/tool-map.js +97 -0
- package/dist/tools/tool-map.js.map +1 -0
- package/dist/tools/verdict.d.ts +33 -0
- package/dist/tools/verdict.d.ts.map +1 -0
- package/dist/tools/verdict.js +102 -0
- package/dist/tools/verdict.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `context` — 360-degree view of a single symbol.
|
|
3
|
+
*
|
|
4
|
+
* Resolution order:
|
|
5
|
+
* 1. `uid` — direct node-id lookup; no disambiguation, no name match.
|
|
6
|
+
* 2. `symbol` (or `name` alias) — filtered by optional `kind` and
|
|
7
|
+
* `file_path` (snake_case, with `filePath` camelCase alias preserved
|
|
8
|
+
* for backward compat). Ambiguous names surface a ranked candidate
|
|
9
|
+
* list instead of silently picking one (EC-04 in the PRD).
|
|
10
|
+
*
|
|
11
|
+
* Once a single target is resolved we collect:
|
|
12
|
+
* - `incoming` — every edge where the target is the `to_id`, bucketed
|
|
13
|
+
* by edge type (calls, imports, accesses, has_method, has_property,
|
|
14
|
+
* extends, implements, method_overrides, method_implements).
|
|
15
|
+
* - `outgoing` — the same bucketing for edges where the target is
|
|
16
|
+
* the `from_id`.
|
|
17
|
+
* - `processes` — PROCESS_STEP participation (Process-kind partners).
|
|
18
|
+
* - `cochanges` — git-history partners for the target's enclosing file.
|
|
19
|
+
* - `operations` — OpenAPI `Operation` nodes linked to a Route target via
|
|
20
|
+
* `HANDLES_ROUTE` (cross-stack trace from the OpenAPI phase).
|
|
21
|
+
* - `confidenceBreakdown` — provenance tally over every edge surfaced.
|
|
22
|
+
* - `content` (optional) — the target's indexed source, capped at
|
|
23
|
+
* {@link CONTENT_CHAR_CAP} characters. Only returned when
|
|
24
|
+
* `include_content` is true.
|
|
25
|
+
* - `location` — `{ filePath, startLine, endLine }` for quick jump-to.
|
|
26
|
+
*
|
|
27
|
+
* The flat `callers`, `callees`, `members`, and `owner` fields are kept on
|
|
28
|
+
* the response for backward compat with pre-parity consumers; new callers
|
|
29
|
+
* should prefer the `incoming` / `outgoing` category buckets.
|
|
30
|
+
*/
|
|
31
|
+
// biome-ignore-all lint/complexity/useLiteralKeys: dot-access disallowed on Record index signatures
|
|
32
|
+
import { z } from "zod";
|
|
33
|
+
import { toolErrorFromUnknown } from "../error-envelope.js";
|
|
34
|
+
import { withNextSteps } from "../next-step-hints.js";
|
|
35
|
+
import { stalenessFromMeta } from "../staleness.js";
|
|
36
|
+
import { computeConfidenceBreakdown } from "./confidence.js";
|
|
37
|
+
import { fromToolResult, repoArgShape, toToolResult, withStore, } from "./shared.js";
|
|
38
|
+
/** Upper bound on the `content` field size when `include_content` is true. */
|
|
39
|
+
const CONTENT_CHAR_CAP = 2000;
|
|
40
|
+
/**
|
|
41
|
+
* Relation types surfaced in the categorised `incoming` / `outgoing`
|
|
42
|
+
* buckets. PROCESS_STEP / HANDLES_ROUTE / CONTAINS live in their own
|
|
43
|
+
* dedicated fields and are excluded here.
|
|
44
|
+
*/
|
|
45
|
+
const CATEGORY_EDGE_TYPES = [
|
|
46
|
+
"CALLS",
|
|
47
|
+
"IMPORTS",
|
|
48
|
+
"ACCESSES",
|
|
49
|
+
"HAS_METHOD",
|
|
50
|
+
"HAS_PROPERTY",
|
|
51
|
+
"EXTENDS",
|
|
52
|
+
"IMPLEMENTS",
|
|
53
|
+
"METHOD_OVERRIDES",
|
|
54
|
+
"METHOD_IMPLEMENTS",
|
|
55
|
+
];
|
|
56
|
+
/** Edge types aggregated into the `confidenceBreakdown` tally. */
|
|
57
|
+
const CONFIDENCE_EDGE_TYPES = [
|
|
58
|
+
...CATEGORY_EDGE_TYPES,
|
|
59
|
+
"CONTAINS",
|
|
60
|
+
"PROCESS_STEP",
|
|
61
|
+
"HANDLES_ROUTE",
|
|
62
|
+
];
|
|
63
|
+
const ContextInput = {
|
|
64
|
+
symbol: z
|
|
65
|
+
.string()
|
|
66
|
+
.min(1)
|
|
67
|
+
.optional()
|
|
68
|
+
.describe("The symbol name to inspect (function, class, method, etc.). Alias of `name`."),
|
|
69
|
+
name: z.string().min(1).optional().describe("Alias for `symbol`."),
|
|
70
|
+
uid: z
|
|
71
|
+
.string()
|
|
72
|
+
.min(1)
|
|
73
|
+
.optional()
|
|
74
|
+
.describe("Direct node id from prior tool results. When supplied, skips name-based disambiguation."),
|
|
75
|
+
...repoArgShape,
|
|
76
|
+
kind: z
|
|
77
|
+
.string()
|
|
78
|
+
.optional()
|
|
79
|
+
.describe("Optional NodeKind to disambiguate (e.g. 'Function' vs 'Method')."),
|
|
80
|
+
file_path: z
|
|
81
|
+
.string()
|
|
82
|
+
.optional()
|
|
83
|
+
.describe("Optional file path substring to disambiguate same-named symbols. Matched via LIKE '%<file_path>%'."),
|
|
84
|
+
filePath: z.string().optional().describe("camelCase alias of `file_path` for backward compat."),
|
|
85
|
+
include_content: z
|
|
86
|
+
.boolean()
|
|
87
|
+
.optional()
|
|
88
|
+
.describe(`When true, attach the target's indexed source under \`content\` (capped at ${CONTENT_CHAR_CAP} chars). Default false.`),
|
|
89
|
+
};
|
|
90
|
+
function makeBuckets() {
|
|
91
|
+
return {
|
|
92
|
+
calls: [],
|
|
93
|
+
imports: [],
|
|
94
|
+
accesses: [],
|
|
95
|
+
has_method: [],
|
|
96
|
+
has_property: [],
|
|
97
|
+
extends: [],
|
|
98
|
+
implements: [],
|
|
99
|
+
method_overrides: [],
|
|
100
|
+
method_implements: [],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export async function runContext(ctx, args) {
|
|
104
|
+
const call = await withStore(ctx, args, async (store, resolved) => {
|
|
105
|
+
try {
|
|
106
|
+
const nameInput = args.symbol ?? args.name;
|
|
107
|
+
const uid = args.uid;
|
|
108
|
+
if (!nameInput && !uid) {
|
|
109
|
+
return withNextSteps(`Either "symbol" (or "name") or "uid" is required.`, { target: null, candidates: [] }, ["call `query` to locate a symbol and re-try `context` with its uid"], stalenessFromMeta(resolved.meta));
|
|
110
|
+
}
|
|
111
|
+
const filePathHint = args.file_path ?? args.filePath;
|
|
112
|
+
const resolveArgs = {};
|
|
113
|
+
if (uid !== undefined)
|
|
114
|
+
resolveArgs.uid = uid;
|
|
115
|
+
if (nameInput !== undefined)
|
|
116
|
+
resolveArgs.name = nameInput;
|
|
117
|
+
if (args.kind !== undefined)
|
|
118
|
+
resolveArgs.kind = args.kind;
|
|
119
|
+
if (filePathHint !== undefined)
|
|
120
|
+
resolveArgs.filePath = filePathHint;
|
|
121
|
+
const resolution = await resolveTarget(store.graph, resolveArgs);
|
|
122
|
+
if (resolution.kind === "not_found") {
|
|
123
|
+
const label = nameInput ?? uid ?? "(unknown)";
|
|
124
|
+
return withNextSteps(`No symbol named "${label}" in ${resolved.name}.`, { target: null, candidates: [] }, ["call `query` with a broader phrase to locate similar symbols"], stalenessFromMeta(resolved.meta));
|
|
125
|
+
}
|
|
126
|
+
if (resolution.kind === "ambiguous") {
|
|
127
|
+
const list = resolution.candidates
|
|
128
|
+
.map((c, i) => `${i + 1}. [${c.kind}] ${c.filePath} (${c.id})`)
|
|
129
|
+
.join("\n");
|
|
130
|
+
return withNextSteps(`"${nameInput ?? uid}" is ambiguous (${resolution.candidates.length} matches):\n${list}`, { target: null, candidates: resolution.candidates }, ["re-call `context` with `uid` (from the list above) or narrow via `kind` / `file_path`"], stalenessFromMeta(resolved.meta));
|
|
131
|
+
}
|
|
132
|
+
const target = resolution.target;
|
|
133
|
+
const location = {
|
|
134
|
+
filePath: target.filePath,
|
|
135
|
+
startLine: resolution.startLine,
|
|
136
|
+
endLine: resolution.endLine,
|
|
137
|
+
};
|
|
138
|
+
const content = args.include_content === true ? capContent(resolution.content) : undefined;
|
|
139
|
+
const [incomingRows, outgoingRows, processRows, cochanges, operations, breakdownEdges, owner,] = await Promise.all([
|
|
140
|
+
fetchCategorizedEdges(store.graph, target.id, "incoming"),
|
|
141
|
+
fetchCategorizedEdges(store.graph, target.id, "outgoing"),
|
|
142
|
+
fetchProcessParticipation(store.graph, target.id),
|
|
143
|
+
fetchCochangePartners(store, target),
|
|
144
|
+
fetchLinkedOperations(store.graph, target),
|
|
145
|
+
fetchConfidenceBreakdownEdges(store.graph, target.id),
|
|
146
|
+
fetchOwner(store.graph, target.id),
|
|
147
|
+
]);
|
|
148
|
+
const confidenceBreakdown = computeConfidenceBreakdown(breakdownEdges);
|
|
149
|
+
const incoming = bucketize(incomingRows);
|
|
150
|
+
const outgoing = bucketize(outgoingRows);
|
|
151
|
+
const callers = incoming.calls;
|
|
152
|
+
const callees = outgoing.calls;
|
|
153
|
+
const members = [...outgoing.has_method, ...outgoing.has_property];
|
|
154
|
+
const lines = [];
|
|
155
|
+
lines.push(`Symbol: ${target.name} [${target.kind}] — ${target.filePath}`);
|
|
156
|
+
if (location.startLine !== null && location.endLine !== null) {
|
|
157
|
+
lines.push(`Location: lines ${location.startLine}-${location.endLine}`);
|
|
158
|
+
}
|
|
159
|
+
lines.push(`Confidence: ${confidenceBreakdown.confirmed} confirmed, ` +
|
|
160
|
+
`${confidenceBreakdown.heuristic} heuristic, ` +
|
|
161
|
+
`${confidenceBreakdown.unknown} unknown`);
|
|
162
|
+
appendCategorySection(lines, "Incoming", incoming);
|
|
163
|
+
appendCategorySection(lines, "Outgoing", outgoing);
|
|
164
|
+
if (owner.length > 0) {
|
|
165
|
+
lines.push(`Owner:`);
|
|
166
|
+
for (const o of owner)
|
|
167
|
+
lines.push(` ⊃ ${o.name} [${o.kind}] — ${o.filePath}`);
|
|
168
|
+
}
|
|
169
|
+
if (processRows.length > 0) {
|
|
170
|
+
lines.push(`Processes (${processRows.length}):`);
|
|
171
|
+
for (const p of processRows) {
|
|
172
|
+
const stepSuffix = p.step !== null ? ` (step ${p.step})` : "";
|
|
173
|
+
lines.push(` ⊿ ${p.label}${stepSuffix}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (cochanges.length > 0) {
|
|
177
|
+
lines.push(`Files often edited together with this one (by lift) — git history, NOT call dependencies (${cochanges.length}):`);
|
|
178
|
+
for (const p of cochanges) {
|
|
179
|
+
lines.push(` ⇌ ${p.file} [lift=${p.lift.toFixed(2)}, co-commits=${p.cocommitCount}, last=${p.lastCocommitAt}]`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (operations.length > 0) {
|
|
183
|
+
lines.push(`OpenAPI operations (${operations.length}):`);
|
|
184
|
+
for (const op of operations) {
|
|
185
|
+
const opSuffix = op.operationId ? ` (${op.operationId})` : "";
|
|
186
|
+
const sumSuffix = op.summary ? ` — ${op.summary}` : "";
|
|
187
|
+
lines.push(` ⇢ ${op.method} ${op.path}${opSuffix}${sumSuffix}`);
|
|
188
|
+
lines.push(` spec: ${op.filePath}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (content !== undefined) {
|
|
192
|
+
lines.push(`Content (first ${CONTENT_CHAR_CAP} chars):`);
|
|
193
|
+
lines.push(content);
|
|
194
|
+
}
|
|
195
|
+
const next = [
|
|
196
|
+
`call \`impact\` with target="${target.id}" to see downstream blast radius`,
|
|
197
|
+
];
|
|
198
|
+
if (callers.length === 0) {
|
|
199
|
+
next.push("no callers found — this may be an entry point or dead code");
|
|
200
|
+
}
|
|
201
|
+
if (cochanges.length > 0) {
|
|
202
|
+
next.push("review cochanges: files historically edited together with this one (git-history signal, not call dependencies)");
|
|
203
|
+
}
|
|
204
|
+
if (operations.length > 0) {
|
|
205
|
+
next.push("route is documented by an OpenAPI operation — consult the spec file(s) listed above");
|
|
206
|
+
}
|
|
207
|
+
const structured = {
|
|
208
|
+
target,
|
|
209
|
+
location,
|
|
210
|
+
candidates: [],
|
|
211
|
+
incoming,
|
|
212
|
+
outgoing,
|
|
213
|
+
processes: processRows,
|
|
214
|
+
// Flat legacy fields preserved for pre-parity consumers.
|
|
215
|
+
callers,
|
|
216
|
+
callees,
|
|
217
|
+
members,
|
|
218
|
+
owner,
|
|
219
|
+
cochanges,
|
|
220
|
+
operations,
|
|
221
|
+
confidenceBreakdown,
|
|
222
|
+
};
|
|
223
|
+
if (content !== undefined)
|
|
224
|
+
structured["content"] = content;
|
|
225
|
+
return withNextSteps(lines.join("\n"), structured, next, stalenessFromMeta(resolved.meta));
|
|
226
|
+
}
|
|
227
|
+
catch (err) {
|
|
228
|
+
return toolErrorFromUnknown(err);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
return toToolResult(call);
|
|
232
|
+
}
|
|
233
|
+
export function registerContextTool(server, ctx) {
|
|
234
|
+
server.registerTool("context", {
|
|
235
|
+
title: "360-degree symbol view",
|
|
236
|
+
description: "Resolve a symbol to its graph node and return categorised incoming/outgoing edges (calls, imports, accesses, has_method, has_property, extends, implements, method_overrides, method_implements), process participation, OpenAPI operation links for Route targets, and file location. Use `uid` for zero-ambiguity lookup, or narrow a common name with `file_path` and/or `kind`; when a name still matches more than one node the response is a candidate list for you to pick from. Set `include_content: true` to attach the indexed source (capped at 2000 characters). The response also carries a `confidenceBreakdown` (confirmed / heuristic / unknown) tallying the provenance tier of every edge surfaced — so callers can tell whether the neighbourhood is backed by an LSP oracle or by heuristics. Finally, a top-level `cochanges` field lists files often edited together with the target's enclosing file, ranked by lift. These come from the dedicated `cochanges` table (git history), are strictly a statistical signal, and MUST NOT be treated as static code dependencies.",
|
|
237
|
+
inputSchema: ContextInput,
|
|
238
|
+
annotations: {
|
|
239
|
+
readOnlyHint: true,
|
|
240
|
+
destructiveHint: false,
|
|
241
|
+
idempotentHint: true,
|
|
242
|
+
openWorldHint: false,
|
|
243
|
+
},
|
|
244
|
+
}, async (args) => fromToolResult(await runContext(ctx, args)));
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Resolve a symbol to a single graph node.
|
|
248
|
+
*
|
|
249
|
+
* `uid` short-circuits the resolver — we ignore name/kind/filePath hints
|
|
250
|
+
* and return the matching node if present. For name-based lookup we apply
|
|
251
|
+
* `kind` and `filePath` as filters and return every match up to 25 rows.
|
|
252
|
+
*/
|
|
253
|
+
async function resolveTarget(graph, args) {
|
|
254
|
+
if (args.uid) {
|
|
255
|
+
const list = await graph.listNodes({ ids: [args.uid], limit: 1 });
|
|
256
|
+
const node = list[0];
|
|
257
|
+
if (!node)
|
|
258
|
+
return { kind: "not_found" };
|
|
259
|
+
return {
|
|
260
|
+
kind: "resolved",
|
|
261
|
+
target: nodeToRow(node),
|
|
262
|
+
startLine: toLineOrNull(getProp(node, "startLine")),
|
|
263
|
+
endLine: toLineOrNull(getProp(node, "endLine")),
|
|
264
|
+
content: stringOrNull(getProp(node, "content")),
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
if (!args.name)
|
|
268
|
+
return { kind: "not_found" };
|
|
269
|
+
const listOpts = args.kind !== undefined ? { kinds: [args.kind] } : {};
|
|
270
|
+
let candidates = await graph.listNodesByName(args.name, listOpts);
|
|
271
|
+
if (args.filePath !== undefined) {
|
|
272
|
+
const sub = args.filePath;
|
|
273
|
+
candidates = candidates.filter((n) => n.filePath.includes(sub));
|
|
274
|
+
}
|
|
275
|
+
// Match prior ORDER BY file_path LIMIT 25.
|
|
276
|
+
const sorted = [...candidates].sort((a, b) => a.filePath < b.filePath ? -1 : a.filePath > b.filePath ? 1 : 0);
|
|
277
|
+
const sliced = sorted.slice(0, 25);
|
|
278
|
+
if (sliced.length === 0)
|
|
279
|
+
return { kind: "not_found" };
|
|
280
|
+
if (sliced.length > 1) {
|
|
281
|
+
return {
|
|
282
|
+
kind: "ambiguous",
|
|
283
|
+
candidates: sliced.map(nodeToRow),
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
const node = sliced[0];
|
|
287
|
+
if (!node)
|
|
288
|
+
return { kind: "not_found" };
|
|
289
|
+
return {
|
|
290
|
+
kind: "resolved",
|
|
291
|
+
target: nodeToRow(node),
|
|
292
|
+
startLine: toLineOrNull(getProp(node, "startLine")),
|
|
293
|
+
endLine: toLineOrNull(getProp(node, "endLine")),
|
|
294
|
+
content: stringOrNull(getProp(node, "content")),
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
function nodeToRow(n) {
|
|
298
|
+
return {
|
|
299
|
+
id: n.id,
|
|
300
|
+
name: n.name,
|
|
301
|
+
kind: n.kind,
|
|
302
|
+
filePath: n.filePath,
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
function getProp(n, key) {
|
|
306
|
+
return n[key];
|
|
307
|
+
}
|
|
308
|
+
function toLineOrNull(raw) {
|
|
309
|
+
if (raw === null || raw === undefined)
|
|
310
|
+
return null;
|
|
311
|
+
const n = Number(raw);
|
|
312
|
+
if (!Number.isFinite(n) || n <= 0)
|
|
313
|
+
return null;
|
|
314
|
+
return Math.trunc(n);
|
|
315
|
+
}
|
|
316
|
+
function stringOrNull(raw) {
|
|
317
|
+
if (typeof raw !== "string" || raw.length === 0)
|
|
318
|
+
return null;
|
|
319
|
+
return raw;
|
|
320
|
+
}
|
|
321
|
+
function capContent(raw) {
|
|
322
|
+
if (raw === null)
|
|
323
|
+
return undefined;
|
|
324
|
+
if (raw.length <= CONTENT_CHAR_CAP)
|
|
325
|
+
return raw;
|
|
326
|
+
return `${raw.slice(0, CONTENT_CHAR_CAP - 1)}…`;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Fetch every edge connected to the target in a single round-trip,
|
|
330
|
+
* projecting both the relation type and the partner node's metadata. The
|
|
331
|
+
* `direction` selects whether the target sits on the `to_id` (incoming)
|
|
332
|
+
* or `from_id` (outgoing) side of the join.
|
|
333
|
+
*/
|
|
334
|
+
async function fetchCategorizedEdges(graph, targetId, direction) {
|
|
335
|
+
const filter = direction === "incoming" ? { toIds: [targetId] } : { fromIds: [targetId] };
|
|
336
|
+
const edges = await graph.listEdges({
|
|
337
|
+
types: CATEGORY_EDGE_TYPES,
|
|
338
|
+
...filter,
|
|
339
|
+
limit: 200,
|
|
340
|
+
});
|
|
341
|
+
if (edges.length === 0)
|
|
342
|
+
return [];
|
|
343
|
+
const partnerIds = Array.from(new Set(edges.map((e) => (direction === "incoming" ? e.from : e.to))));
|
|
344
|
+
const partners = await graph.listNodes({ ids: partnerIds });
|
|
345
|
+
const byId = new Map();
|
|
346
|
+
for (const n of partners)
|
|
347
|
+
byId.set(n.id, n);
|
|
348
|
+
const out = [];
|
|
349
|
+
for (const e of edges) {
|
|
350
|
+
const partnerId = direction === "incoming" ? e.from : e.to;
|
|
351
|
+
const partner = byId.get(partnerId);
|
|
352
|
+
if (!partner)
|
|
353
|
+
continue;
|
|
354
|
+
out.push({
|
|
355
|
+
relType: e.type,
|
|
356
|
+
id: partner.id,
|
|
357
|
+
name: partner.name,
|
|
358
|
+
kind: partner.kind,
|
|
359
|
+
filePath: partner.filePath,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
return out;
|
|
363
|
+
}
|
|
364
|
+
function bucketize(rows) {
|
|
365
|
+
const buckets = makeBuckets();
|
|
366
|
+
for (const r of rows) {
|
|
367
|
+
const key = r.relType.toLowerCase();
|
|
368
|
+
const node = { id: r.id, name: r.name, kind: r.kind, filePath: r.filePath };
|
|
369
|
+
const bucket = buckets[key];
|
|
370
|
+
if (Array.isArray(bucket))
|
|
371
|
+
bucket.push(node);
|
|
372
|
+
}
|
|
373
|
+
return buckets;
|
|
374
|
+
}
|
|
375
|
+
function appendCategorySection(lines, header, buckets) {
|
|
376
|
+
const entries = [
|
|
377
|
+
["calls", buckets.calls],
|
|
378
|
+
["imports", buckets.imports],
|
|
379
|
+
["accesses", buckets.accesses],
|
|
380
|
+
["has_method", buckets.has_method],
|
|
381
|
+
["has_property", buckets.has_property],
|
|
382
|
+
["extends", buckets.extends],
|
|
383
|
+
["implements", buckets.implements],
|
|
384
|
+
["method_overrides", buckets.method_overrides],
|
|
385
|
+
["method_implements", buckets.method_implements],
|
|
386
|
+
];
|
|
387
|
+
const total = entries.reduce((acc, [, list]) => acc + list.length, 0);
|
|
388
|
+
lines.push(`${header} (${total}):`);
|
|
389
|
+
const arrow = header === "Incoming" ? "←" : "→";
|
|
390
|
+
for (const [label, list] of entries) {
|
|
391
|
+
if (list.length === 0)
|
|
392
|
+
continue;
|
|
393
|
+
lines.push(` ${label} (${list.length}):`);
|
|
394
|
+
for (const n of list) {
|
|
395
|
+
lines.push(` ${arrow} ${n.name} [${n.kind}] — ${n.filePath}`);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Find Process-kind partners reachable from the target via `PROCESS_STEP`
|
|
401
|
+
* edges. The processes phase emits symbol-to-symbol step edges under a
|
|
402
|
+
* Process node, so we accept either direction on the join and filter on
|
|
403
|
+
* `kind = 'Process'`.
|
|
404
|
+
*/
|
|
405
|
+
async function fetchProcessParticipation(graph, targetId) {
|
|
406
|
+
const [outEdges, inEdges] = await Promise.all([
|
|
407
|
+
graph.listEdgesByType("PROCESS_STEP", { fromIds: [targetId] }),
|
|
408
|
+
graph.listEdgesByType("PROCESS_STEP", { toIds: [targetId] }),
|
|
409
|
+
]);
|
|
410
|
+
const partnerIds = new Set();
|
|
411
|
+
for (const e of [...outEdges, ...inEdges]) {
|
|
412
|
+
const id = e.from === targetId ? e.to : e.from;
|
|
413
|
+
partnerIds.add(id);
|
|
414
|
+
}
|
|
415
|
+
if (partnerIds.size === 0)
|
|
416
|
+
return [];
|
|
417
|
+
const partners = await graph.listNodes({ ids: [...partnerIds] });
|
|
418
|
+
const partnerById = new Map();
|
|
419
|
+
for (const p of partners)
|
|
420
|
+
partnerById.set(p.id, p);
|
|
421
|
+
const dedup = new Map();
|
|
422
|
+
for (const e of [...outEdges, ...inEdges]) {
|
|
423
|
+
const partnerId = e.from === targetId ? e.to : e.from;
|
|
424
|
+
const partner = partnerById.get(partnerId);
|
|
425
|
+
if (!partner || partner.kind !== "Process")
|
|
426
|
+
continue;
|
|
427
|
+
if (dedup.has(partner.id))
|
|
428
|
+
continue;
|
|
429
|
+
const inferredLabel = partner.inferredLabel;
|
|
430
|
+
const label = typeof inferredLabel === "string" && inferredLabel.length > 0 ? inferredLabel : partner.name;
|
|
431
|
+
dedup.set(partner.id, { label, step: toLineOrNull(e.step) });
|
|
432
|
+
}
|
|
433
|
+
const items = Array.from(dedup.entries()).map(([id, v]) => ({
|
|
434
|
+
id,
|
|
435
|
+
label: v.label,
|
|
436
|
+
step: v.step,
|
|
437
|
+
}));
|
|
438
|
+
items.sort((a, b) => {
|
|
439
|
+
const as = a.step ?? Number.POSITIVE_INFINITY;
|
|
440
|
+
const bs = b.step ?? Number.POSITIVE_INFINITY;
|
|
441
|
+
if (as !== bs)
|
|
442
|
+
return as - bs;
|
|
443
|
+
return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
|
|
444
|
+
});
|
|
445
|
+
return items.slice(0, 20);
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Fetch the target's enclosing owner (class/module/file). Mirrors the
|
|
449
|
+
* previous tool's behaviour: any of HAS_METHOD / HAS_PROPERTY / CONTAINS
|
|
450
|
+
* pointing at the target counts as an owner edge.
|
|
451
|
+
*/
|
|
452
|
+
async function fetchOwner(graph, targetId) {
|
|
453
|
+
const edges = await graph.listEdges({
|
|
454
|
+
types: ["HAS_METHOD", "HAS_PROPERTY", "CONTAINS"],
|
|
455
|
+
toIds: [targetId],
|
|
456
|
+
limit: 5,
|
|
457
|
+
});
|
|
458
|
+
if (edges.length === 0)
|
|
459
|
+
return [];
|
|
460
|
+
const fromIds = Array.from(new Set(edges.map((e) => e.from)));
|
|
461
|
+
const partners = await graph.listNodes({ ids: fromIds });
|
|
462
|
+
const byId = new Map();
|
|
463
|
+
for (const n of partners)
|
|
464
|
+
byId.set(n.id, n);
|
|
465
|
+
const out = [];
|
|
466
|
+
const seen = new Set();
|
|
467
|
+
for (const e of edges) {
|
|
468
|
+
if (seen.has(e.from))
|
|
469
|
+
continue;
|
|
470
|
+
seen.add(e.from);
|
|
471
|
+
const node = byId.get(e.from);
|
|
472
|
+
if (!node)
|
|
473
|
+
continue;
|
|
474
|
+
out.push(nodeToRow(node));
|
|
475
|
+
}
|
|
476
|
+
return out;
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Fetch up to 10 strongest cochange partners for the target's enclosing
|
|
480
|
+
* file from the dedicated `cochanges` table. For File-kind targets we use
|
|
481
|
+
* the node's own `file_path`; for any other kind we use `target.filePath`
|
|
482
|
+
* so the caller always gets file-level cochange even when they asked about
|
|
483
|
+
* a symbol inside the file.
|
|
484
|
+
*
|
|
485
|
+
* Ranked by `lift` DESC; rows below the default lift floor (1.0 — i.e.
|
|
486
|
+
* weaker than chance) are dropped. This is a statistical (git-history)
|
|
487
|
+
* signal, not a call-graph dependency.
|
|
488
|
+
*/
|
|
489
|
+
async function fetchCochangePartners(store, target) {
|
|
490
|
+
const file = target.filePath;
|
|
491
|
+
if (file.length === 0)
|
|
492
|
+
return [];
|
|
493
|
+
const rows = await store.temporal.lookupCochangesForFile(file, { limit: 10 });
|
|
494
|
+
const out = [];
|
|
495
|
+
for (const r of rows) {
|
|
496
|
+
const partner = r.sourceFile === file ? r.targetFile : r.sourceFile;
|
|
497
|
+
out.push({
|
|
498
|
+
file: partner,
|
|
499
|
+
cocommitCount: r.cocommitCount,
|
|
500
|
+
lift: r.lift,
|
|
501
|
+
lastCocommitAt: r.lastCocommitAt,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
return out;
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* For `Route` targets, fetch all `Operation` nodes connected via
|
|
508
|
+
* `HANDLES_ROUTE` (Operation → Route direction — emitted by the OpenAPI
|
|
509
|
+
* phase). Returns an empty array for any non-Route target so the main
|
|
510
|
+
* handler can call unconditionally.
|
|
511
|
+
*/
|
|
512
|
+
async function fetchLinkedOperations(graph, target) {
|
|
513
|
+
if (target.kind !== "Route")
|
|
514
|
+
return [];
|
|
515
|
+
const edges = await graph.listEdgesByType("HANDLES_ROUTE", { toIds: [target.id], limit: 20 });
|
|
516
|
+
if (edges.length === 0)
|
|
517
|
+
return [];
|
|
518
|
+
const fromIds = Array.from(new Set(edges.map((e) => e.from)));
|
|
519
|
+
const partners = await graph.listNodes({ ids: fromIds });
|
|
520
|
+
const byId = new Map();
|
|
521
|
+
for (const p of partners)
|
|
522
|
+
byId.set(p.id, p);
|
|
523
|
+
const out = [];
|
|
524
|
+
for (const e of edges) {
|
|
525
|
+
const partner = byId.get(e.from);
|
|
526
|
+
if (!partner || partner.kind !== "Operation")
|
|
527
|
+
continue;
|
|
528
|
+
const opAny = partner;
|
|
529
|
+
const httpMethod = typeof opAny["httpMethod"] === "string" ? opAny["httpMethod"] : "";
|
|
530
|
+
const httpPath = typeof opAny["httpPath"] === "string" ? opAny["httpPath"] : "";
|
|
531
|
+
const summary = typeof opAny["summary"] === "string" ? opAny["summary"] : undefined;
|
|
532
|
+
const operationId = typeof opAny["operationId"] === "string" ? opAny["operationId"] : undefined;
|
|
533
|
+
out.push({
|
|
534
|
+
id: partner.id,
|
|
535
|
+
method: httpMethod,
|
|
536
|
+
path: httpPath,
|
|
537
|
+
filePath: partner.filePath,
|
|
538
|
+
...(typeof summary === "string" && summary.length > 0 ? { summary } : {}),
|
|
539
|
+
...(typeof operationId === "string" && operationId.length > 0 ? { operationId } : {}),
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
out.sort((a, b) => {
|
|
543
|
+
if (a.method !== b.method)
|
|
544
|
+
return a.method < b.method ? -1 : 1;
|
|
545
|
+
return a.path < b.path ? -1 : a.path > b.path ? 1 : 0;
|
|
546
|
+
});
|
|
547
|
+
return out;
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Fetch `confidence` + `reason` for every incoming and outgoing edge that
|
|
551
|
+
* the `context` response surfaces. The filter list mirrors the relation
|
|
552
|
+
* types queried above. Cochange rows live in their own table with different
|
|
553
|
+
* semantics (lift, not confidence) and never enter the confidence-breakdown
|
|
554
|
+
* tally.
|
|
555
|
+
*/
|
|
556
|
+
async function fetchConfidenceBreakdownEdges(graph, targetId) {
|
|
557
|
+
const [fromEdges, toEdges] = await Promise.all([
|
|
558
|
+
graph.listEdges({ types: CONFIDENCE_EDGE_TYPES, fromIds: [targetId] }),
|
|
559
|
+
graph.listEdges({ types: CONFIDENCE_EDGE_TYPES, toIds: [targetId] }),
|
|
560
|
+
]);
|
|
561
|
+
const out = [];
|
|
562
|
+
const seen = new Set();
|
|
563
|
+
for (const e of [...fromEdges, ...toEdges]) {
|
|
564
|
+
const key = `${e.from}|${e.to}|${e.type}|${e.step ?? 0}`;
|
|
565
|
+
if (seen.has(key))
|
|
566
|
+
continue;
|
|
567
|
+
seen.add(key);
|
|
568
|
+
const confidenceRaw = Number(e.confidence ?? 0);
|
|
569
|
+
const reasonRaw = e.reason;
|
|
570
|
+
out.push({
|
|
571
|
+
confidence: Number.isFinite(confidenceRaw) ? confidenceRaw : 0,
|
|
572
|
+
...(typeof reasonRaw === "string" && reasonRaw.length > 0 ? { reason: reasonRaw } : {}),
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
return out;
|
|
576
|
+
}
|
|
577
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dependencies` — enumerate Dependency nodes for an indexed repo.
|
|
3
|
+
*
|
|
4
|
+
* A Dependency node is produced by the `dependencies` pipeline phase
|
|
5
|
+
* from per-ecosystem manifest parsers. Every node carries
|
|
6
|
+
* `ecosystem`, `name`, `version`, and a `lockfileSource` relpath.
|
|
7
|
+
*
|
|
8
|
+
* Filters:
|
|
9
|
+
* - `ecosystem` — restrict to one ecosystem (npm, pypi, go, cargo,
|
|
10
|
+
* maven, nuget). Server does no validation beyond
|
|
11
|
+
* string compare — an unknown value returns an
|
|
12
|
+
* empty list.
|
|
13
|
+
* - `filePath` — substring match against `file_path` (alias of the
|
|
14
|
+
* lockfile source). Useful when a repo has multiple
|
|
15
|
+
* workspaces with their own manifests.
|
|
16
|
+
*/
|
|
17
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
18
|
+
import { type ToolContext, type ToolResult } from "./shared.js";
|
|
19
|
+
interface DependenciesArgs {
|
|
20
|
+
readonly repo?: string | undefined;
|
|
21
|
+
readonly repo_uri?: string | undefined;
|
|
22
|
+
readonly filePath?: string | undefined;
|
|
23
|
+
readonly ecosystem?: "npm" | "pypi" | "go" | "cargo" | "maven" | "nuget" | undefined;
|
|
24
|
+
readonly limit?: number | undefined;
|
|
25
|
+
}
|
|
26
|
+
export declare function runDependencies(ctx: ToolContext, args: DependenciesArgs): Promise<ToolResult>;
|
|
27
|
+
export declare function registerDependenciesTool(server: McpServer, ctx: ToolContext): void;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/tools/dependencies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,UAAU,EAGhB,MAAM,aAAa,CAAC;AAkCrB,UAAU,gBAAgB;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED,wBAAsB,eAAe,CACnC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,UAAU,CAAC,CA+DrB;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAiBlF"}
|