purecontext-mcp 1.5.2 → 1.11.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/AGENT_INSTRUCTIONS.md +18 -10
- package/AGENT_REFERENCE.md +684 -561
- package/CHANGELOG.md +567 -445
- package/CODE-HISTORY.md +29 -1
- package/FRAMEWORK-ADAPTERS.md +368 -351
- package/FULL-INSTALLATION-GUIDE.md +351 -341
- package/README.md +411 -339
- package/REFACTORING-SAFELY.md +338 -279
- package/SAFE-CHANGES.md +208 -156
- package/USER-GUIDE.md +3 -1
- package/WHY-PURECONTEXT.md +103 -73
- package/WORKFLOW-PR-REVIEW.md +245 -199
- package/dist/adapters/astro-preprocessor.d.ts +25 -0
- package/dist/adapters/astro-preprocessor.d.ts.map +1 -0
- package/dist/adapters/astro-preprocessor.js +50 -0
- package/dist/adapters/astro-preprocessor.js.map +1 -0
- package/dist/adapters/astro.d.ts +13 -0
- package/dist/adapters/astro.d.ts.map +1 -0
- package/dist/adapters/astro.js +83 -0
- package/dist/adapters/astro.js.map +1 -0
- package/dist/adapters/detect-utils.d.ts +38 -0
- package/dist/adapters/detect-utils.d.ts.map +1 -0
- package/dist/adapters/detect-utils.js +95 -0
- package/dist/adapters/detect-utils.js.map +1 -0
- package/dist/adapters/nuxt.d.ts +20 -0
- package/dist/adapters/nuxt.d.ts.map +1 -1
- package/dist/adapters/nuxt.js +128 -13
- package/dist/adapters/nuxt.js.map +1 -1
- package/dist/adapters/svelte-preprocessor.d.ts +29 -0
- package/dist/adapters/svelte-preprocessor.d.ts.map +1 -0
- package/dist/adapters/svelte-preprocessor.js +83 -0
- package/dist/adapters/svelte-preprocessor.js.map +1 -0
- package/dist/adapters/svelte.d.ts +13 -0
- package/dist/adapters/svelte.d.ts.map +1 -0
- package/dist/adapters/svelte.js +96 -0
- package/dist/adapters/svelte.js.map +1 -0
- package/dist/adapters/vue.d.ts.map +1 -1
- package/dist/adapters/vue.js +87 -20
- package/dist/adapters/vue.js.map +1 -1
- package/dist/bin.d.ts +16 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +21 -0
- package/dist/bin.js.map +1 -0
- package/dist/cli/hooks.d.ts +2 -2
- package/dist/cli/hooks.d.ts.map +1 -1
- package/dist/cli/hooks.js +123 -135
- package/dist/cli/hooks.js.map +1 -1
- package/dist/cli/install-writers.d.ts.map +1 -1
- package/dist/cli/install-writers.js +281 -36
- package/dist/cli/install-writers.js.map +1 -1
- package/dist/cli/resolve-node.d.ts +53 -0
- package/dist/cli/resolve-node.d.ts.map +1 -0
- package/dist/cli/resolve-node.js +84 -0
- package/dist/cli/resolve-node.js.map +1 -0
- package/dist/config/config-loader.js +24 -0
- package/dist/config/config-loader.js.map +1 -1
- package/dist/config/config-schema.d.ts +71 -0
- package/dist/config/config-schema.d.ts.map +1 -1
- package/dist/config/config-schema.js +102 -0
- package/dist/config/config-schema.js.map +1 -1
- package/dist/core/db/api-keys.d.ts +1 -1
- package/dist/core/db/api-keys.d.ts.map +1 -1
- package/dist/core/db/api-keys.js +39 -39
- package/dist/core/db/api-keys.js.map +1 -1
- package/dist/core/db/co-change-store.d.ts +34 -0
- package/dist/core/db/co-change-store.d.ts.map +1 -0
- package/dist/core/db/co-change-store.js +78 -0
- package/dist/core/db/co-change-store.js.map +1 -0
- package/dist/core/db/schema.d.ts +3 -3
- package/dist/core/db/schema.d.ts.map +1 -1
- package/dist/core/db/schema.js +12 -30
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/db/sqlite-loader.d.ts +51 -0
- package/dist/core/db/sqlite-loader.d.ts.map +1 -0
- package/dist/core/db/sqlite-loader.js +94 -0
- package/dist/core/db/sqlite-loader.js.map +1 -0
- package/dist/core/db/wasm-sqlite.d.ts +4 -0
- package/dist/core/db/wasm-sqlite.d.ts.map +1 -0
- package/dist/core/db/wasm-sqlite.js +270 -0
- package/dist/core/db/wasm-sqlite.js.map +1 -0
- package/dist/core/diff-parser.d.ts.map +1 -1
- package/dist/core/diff-parser.js +6 -1
- package/dist/core/diff-parser.js.map +1 -1
- package/dist/core/git-log-reader.d.ts +28 -0
- package/dist/core/git-log-reader.d.ts.map +1 -1
- package/dist/core/git-log-reader.js +74 -3
- package/dist/core/git-log-reader.js.map +1 -1
- package/dist/core/index-manager.d.ts.map +1 -1
- package/dist/core/index-manager.js +29 -3
- package/dist/core/index-manager.js.map +1 -1
- package/dist/core/indexing-worker.d.ts +2 -0
- package/dist/core/indexing-worker.d.ts.map +1 -1
- package/dist/core/indexing-worker.js +2 -0
- package/dist/core/indexing-worker.js.map +1 -1
- package/dist/core/watcher/file-watcher.d.ts +6 -0
- package/dist/core/watcher/file-watcher.d.ts.map +1 -1
- package/dist/core/watcher/file-watcher.js +11 -1
- package/dist/core/watcher/file-watcher.js.map +1 -1
- package/dist/graph/path-resolver.js +86 -17
- package/dist/graph/path-resolver.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/node-guard.d.ts +15 -0
- package/dist/node-guard.d.ts.map +1 -0
- package/dist/node-guard.js +33 -0
- package/dist/node-guard.js.map +1 -0
- package/dist/server/admin-api.d.ts +1 -1
- package/dist/server/admin-api.d.ts.map +1 -1
- package/dist/server/admin-api.js +2 -2
- package/dist/server/admin-api.js.map +1 -1
- package/dist/server/auth/api-key.d.ts +1 -1
- package/dist/server/auth/api-key.d.ts.map +1 -1
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +25 -0
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/tools/analyze-diff.d.ts +8 -0
- package/dist/server/tools/analyze-diff.d.ts.map +1 -1
- package/dist/server/tools/analyze-diff.js +80 -16
- package/dist/server/tools/analyze-diff.js.map +1 -1
- package/dist/server/tools/change-synthesis.d.ts +90 -0
- package/dist/server/tools/change-synthesis.d.ts.map +1 -0
- package/dist/server/tools/change-synthesis.js +236 -0
- package/dist/server/tools/change-synthesis.js.map +1 -0
- package/dist/server/tools/co-change.d.ts +65 -0
- package/dist/server/tools/co-change.d.ts.map +1 -0
- package/dist/server/tools/co-change.js +146 -0
- package/dist/server/tools/co-change.js.map +1 -0
- package/dist/server/tools/compare-change-impact.d.ts +58 -0
- package/dist/server/tools/compare-change-impact.d.ts.map +1 -0
- package/dist/server/tools/compare-change-impact.js +0 -0
- package/dist/server/tools/compare-change-impact.js.map +1 -0
- package/dist/server/tools/find-refactoring-opportunities.d.ts +1 -1
- package/dist/server/tools/get-architecture-snapshot.d.ts.map +1 -1
- package/dist/server/tools/get-architecture-snapshot.js +28 -14
- package/dist/server/tools/get-architecture-snapshot.js.map +1 -1
- package/dist/server/tools/get-churn-metrics.d.ts.map +1 -1
- package/dist/server/tools/get-churn-metrics.js +1 -12
- package/dist/server/tools/get-churn-metrics.js.map +1 -1
- package/dist/server/tools/get-co-change.d.ts +37 -0
- package/dist/server/tools/get-co-change.d.ts.map +1 -0
- package/dist/server/tools/get-co-change.js +120 -0
- package/dist/server/tools/get-co-change.js.map +1 -0
- package/dist/server/tools/get-context-bundle.d.ts.map +1 -1
- package/dist/server/tools/get-context-bundle.js +56 -3
- package/dist/server/tools/get-context-bundle.js.map +1 -1
- package/dist/server/tools/get-entry-points.d.ts +1 -1
- package/dist/server/tools/get-symbol-risk.d.ts +25 -0
- package/dist/server/tools/get-symbol-risk.d.ts.map +1 -0
- package/dist/server/tools/get-symbol-risk.js +60 -0
- package/dist/server/tools/get-symbol-risk.js.map +1 -0
- package/dist/server/tools/get-symbol-source.d.ts +2 -0
- package/dist/server/tools/get-symbol-source.d.ts.map +1 -1
- package/dist/server/tools/get-symbol-source.js +18 -1
- package/dist/server/tools/get-symbol-source.js.map +1 -1
- package/dist/server/tools/index-repo.d.ts.map +1 -1
- package/dist/server/tools/index-repo.js +8 -2
- package/dist/server/tools/index-repo.js.map +1 -1
- package/dist/server/tools/prepare-change.d.ts +61 -0
- package/dist/server/tools/prepare-change.d.ts.map +1 -0
- package/dist/server/tools/prepare-change.js +262 -0
- package/dist/server/tools/prepare-change.js.map +1 -0
- package/dist/server/tools/search-symbols.d.ts +2 -0
- package/dist/server/tools/search-symbols.d.ts.map +1 -1
- package/dist/server/tools/search-symbols.js +33 -0
- package/dist/server/tools/search-symbols.js.map +1 -1
- package/dist/server/tools/symbol-lines.d.ts +25 -0
- package/dist/server/tools/symbol-lines.d.ts.map +1 -0
- package/dist/server/tools/symbol-lines.js +40 -0
- package/dist/server/tools/symbol-lines.js.map +1 -0
- package/dist/server/tools/symbol-risk.d.ts +109 -0
- package/dist/server/tools/symbol-risk.d.ts.map +1 -0
- package/dist/server/tools/symbol-risk.js +251 -0
- package/dist/server/tools/symbol-risk.js.map +1 -0
- package/dist/server/tools/verify-change.d.ts +40 -0
- package/dist/server/tools/verify-change.d.ts.map +1 -0
- package/dist/server/tools/verify-change.js +149 -0
- package/dist/server/tools/verify-change.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/docs/01-introduction.md +2 -2
- package/docs/02-installation.md +97 -89
- package/docs/03-quick-start.md +138 -135
- package/docs/04-configuration.md +247 -214
- package/docs/05-cli-reference.md +236 -219
- package/docs/06-tools-reference.md +902 -499
- package/docs/14-transport-modes.md +170 -167
- package/docs/18-git-history.md +43 -0
- package/docs/23-performance.md +123 -121
- package/docs/26-troubleshooting.md +249 -234
- package/grammars/README.md +88 -0
- package/package.json +7 -25
- package/AGENT_INSTRUCTIONS_SHORT.md +0 -150
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* co-change.ts
|
|
3
|
+
*
|
|
4
|
+
* Pure query/scoring functions for temporal coupling (co-change) — files that
|
|
5
|
+
* historically change together in the same commits. Unit-testable without MCP.
|
|
6
|
+
*
|
|
7
|
+
* Data source: the `commit_files` table (repo-level commit→files capture, see
|
|
8
|
+
* co-change-store.ts). Co-change of two files is a self-join on `commit_sha`.
|
|
9
|
+
*
|
|
10
|
+
* Explainable association metrics (not raw counts):
|
|
11
|
+
* support — number of shared commits (after noise filtering)
|
|
12
|
+
* confidence — support / commits(target) (directional A→B; the signal agents want)
|
|
13
|
+
* lift — support × N / (commits(A) × commits(B))
|
|
14
|
+
*
|
|
15
|
+
* Noise handling (the part generic "churn dashboards" skip):
|
|
16
|
+
* - Mega-commit filter: commits touching > megaCommitThreshold files are
|
|
17
|
+
* excluded entirely (reformats, lockfile sweeps, codemods).
|
|
18
|
+
* - Mega-commit down-weighting: each retained shared commit contributes
|
|
19
|
+
* 1/(k−1) (k = files in commit), so a 25-file commit counts far less than a
|
|
20
|
+
* focused 2-file commit. `weightedSupport` ranks partners.
|
|
21
|
+
* - Min-support floor drops one-off coincidences.
|
|
22
|
+
* - signalQuality:"low" flags sparse/shallow histories rather than presenting
|
|
23
|
+
* weak ratios as strong.
|
|
24
|
+
*/
|
|
25
|
+
import { countCommits, countCommitsForFile } from '../../core/db/co-change-store.js';
|
|
26
|
+
function round(n, dp = 3) {
|
|
27
|
+
const f = 10 ** dp;
|
|
28
|
+
return Math.round(n * f) / f;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Compute ranked co-change partners for a target file.
|
|
32
|
+
*
|
|
33
|
+
* Returns an empty partner list (never throws) when the repo has no co-change
|
|
34
|
+
* data or the target file has no recorded commits.
|
|
35
|
+
*/
|
|
36
|
+
export function getCoChange(db, repoId, targetFilePath, opts = {}) {
|
|
37
|
+
const minSupport = opts.minSupport ?? 2;
|
|
38
|
+
const megaThreshold = opts.megaCommitThreshold ?? 30;
|
|
39
|
+
const topN = opts.topN ?? 20;
|
|
40
|
+
const windowCommits = countCommits(db, repoId);
|
|
41
|
+
const targetCommits = countCommitsForFile(db, repoId, targetFilePath);
|
|
42
|
+
const empty = {
|
|
43
|
+
targetFilePath,
|
|
44
|
+
targetCommits,
|
|
45
|
+
windowCommits,
|
|
46
|
+
signalQuality: targetCommits < 5 || windowCommits < 20 ? 'low' : 'ok',
|
|
47
|
+
partners: [],
|
|
48
|
+
};
|
|
49
|
+
if (windowCommits === 0 || targetCommits === 0)
|
|
50
|
+
return empty;
|
|
51
|
+
const sinceTs = opts.dayWindow && opts.dayWindow > 0
|
|
52
|
+
? Math.floor(Date.now() / 1000) - opts.dayWindow * 86_400
|
|
53
|
+
: null;
|
|
54
|
+
// 1. Commits touching the target, each annotated with its total file count k.
|
|
55
|
+
const dateClause = sinceTs !== null ? 'AND cf.commit_date >= ?' : '';
|
|
56
|
+
const sharedRows = db
|
|
57
|
+
.prepare(`
|
|
58
|
+
SELECT cf.commit_sha AS commit_sha,
|
|
59
|
+
cf.commit_date AS commit_date,
|
|
60
|
+
(SELECT COUNT(*) FROM commit_files c2
|
|
61
|
+
WHERE c2.repo_id = ? AND c2.commit_sha = cf.commit_sha) AS k
|
|
62
|
+
FROM commit_files cf
|
|
63
|
+
WHERE cf.repo_id = ? AND cf.file_path = ? ${dateClause}
|
|
64
|
+
`)
|
|
65
|
+
.all(sinceTs !== null
|
|
66
|
+
? [repoId, repoId, targetFilePath, sinceTs]
|
|
67
|
+
: [repoId, repoId, targetFilePath]);
|
|
68
|
+
// Keep only non-mega commits that touched at least one other file (k >= 2).
|
|
69
|
+
const retained = sharedRows.filter((r) => r.k >= 2 && r.k <= megaThreshold);
|
|
70
|
+
if (retained.length === 0)
|
|
71
|
+
return empty;
|
|
72
|
+
const shaToWeight = new Map(); // 1/(k-1)
|
|
73
|
+
const shaToDate = new Map();
|
|
74
|
+
for (const r of retained) {
|
|
75
|
+
shaToWeight.set(r.commit_sha, 1 / (r.k - 1));
|
|
76
|
+
shaToDate.set(r.commit_sha, r.commit_date);
|
|
77
|
+
}
|
|
78
|
+
// 2. All (commit, file) pairs for the retained commits — partners are the
|
|
79
|
+
// non-target files in those commits.
|
|
80
|
+
const shas = [...shaToWeight.keys()];
|
|
81
|
+
const placeholders = shas.map(() => '?').join(', ');
|
|
82
|
+
const partnerRows = db
|
|
83
|
+
.prepare(`
|
|
84
|
+
SELECT commit_sha, file_path
|
|
85
|
+
FROM commit_files
|
|
86
|
+
WHERE repo_id = ? AND commit_sha IN (${placeholders})
|
|
87
|
+
`)
|
|
88
|
+
.all([repoId, ...shas]);
|
|
89
|
+
const byPartner = new Map();
|
|
90
|
+
for (const row of partnerRows) {
|
|
91
|
+
if (row.file_path === targetFilePath)
|
|
92
|
+
continue;
|
|
93
|
+
let acc = byPartner.get(row.file_path);
|
|
94
|
+
if (!acc) {
|
|
95
|
+
acc = { support: 0, weighted: 0, latest: 0 };
|
|
96
|
+
byPartner.set(row.file_path, acc);
|
|
97
|
+
}
|
|
98
|
+
acc.support += 1;
|
|
99
|
+
acc.weighted += shaToWeight.get(row.commit_sha) ?? 0;
|
|
100
|
+
const d = shaToDate.get(row.commit_sha) ?? 0;
|
|
101
|
+
if (d > acc.latest)
|
|
102
|
+
acc.latest = d;
|
|
103
|
+
}
|
|
104
|
+
// 3. commits(partner) for lift — batched distinct-commit counts.
|
|
105
|
+
const candidatePartners = [...byPartner.entries()].filter(([, acc]) => acc.support >= minSupport);
|
|
106
|
+
const partnerCommitCounts = new Map();
|
|
107
|
+
if (candidatePartners.length > 0) {
|
|
108
|
+
const ph = candidatePartners.map(() => '?').join(', ');
|
|
109
|
+
const counts = db
|
|
110
|
+
.prepare(`
|
|
111
|
+
SELECT file_path, COUNT(DISTINCT commit_sha) AS n
|
|
112
|
+
FROM commit_files
|
|
113
|
+
WHERE repo_id = ? AND file_path IN (${ph})
|
|
114
|
+
GROUP BY file_path
|
|
115
|
+
`)
|
|
116
|
+
.all([repoId, ...candidatePartners.map(([fp]) => fp)]);
|
|
117
|
+
for (const c of counts)
|
|
118
|
+
partnerCommitCounts.set(c.file_path, c.n);
|
|
119
|
+
}
|
|
120
|
+
// 4. Build ranked partners.
|
|
121
|
+
const partners = [];
|
|
122
|
+
for (const [filePath, acc] of candidatePartners) {
|
|
123
|
+
const commitsPartner = partnerCommitCounts.get(filePath) ?? acc.support;
|
|
124
|
+
const confidence = targetCommits > 0 ? acc.support / targetCommits : 0;
|
|
125
|
+
const lift = targetCommits > 0 && commitsPartner > 0
|
|
126
|
+
? (acc.support * windowCommits) / (targetCommits * commitsPartner)
|
|
127
|
+
: 0;
|
|
128
|
+
partners.push({
|
|
129
|
+
filePath,
|
|
130
|
+
support: acc.support,
|
|
131
|
+
weightedSupport: round(acc.weighted),
|
|
132
|
+
confidence: round(Math.min(confidence, 1)),
|
|
133
|
+
lift: round(lift),
|
|
134
|
+
coChangeDate: acc.latest > 0 ? new Date(acc.latest * 1000).toISOString() : null,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
partners.sort((a, b) => b.weightedSupport - a.weightedSupport || b.support - a.support || b.confidence - a.confidence);
|
|
138
|
+
return {
|
|
139
|
+
targetFilePath,
|
|
140
|
+
targetCommits,
|
|
141
|
+
windowCommits,
|
|
142
|
+
signalQuality: targetCommits < 5 || windowCommits < 20 ? 'low' : 'ok',
|
|
143
|
+
partners: partners.slice(0, topN),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=co-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"co-change.js","sourceRoot":"","sources":["../../../src/server/tools/co-change.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* compare-change-impact.ts
|
|
3
|
+
*
|
|
4
|
+
* MCP tool: compare_change_impact (Phase 79, Group C)
|
|
5
|
+
*
|
|
6
|
+
* Architecture *regression* detection — the before/after delta, distinct from
|
|
7
|
+
* analyze_diff's current-state `architecturalFlags`. Given a baseline snapshot
|
|
8
|
+
* (created with get_architecture_snapshot BEFORE the change) and the current
|
|
9
|
+
* live index (the "after"), it reports what the change INTRODUCED:
|
|
10
|
+
*
|
|
11
|
+
* newCycles — import cycles present now but not in the baseline
|
|
12
|
+
* newLayerViolations — layer-boundary crossings introduced since the baseline
|
|
13
|
+
* resolvedCycles — cycles the change removed (improvement)
|
|
14
|
+
* resolvedLayerViolations — violations the change removed (improvement)
|
|
15
|
+
* verdict: regressed | improved | unchanged | no_baseline
|
|
16
|
+
*
|
|
17
|
+
* It never claims a PRE-EXISTING cycle was "introduced" — that distinction
|
|
18
|
+
* (flag vs regression) is the whole point. The "before" comes from a snapshot
|
|
19
|
+
* (Task 473 decision: reuse get_architecture_snapshot, never checkout+reindex);
|
|
20
|
+
* with no usable baseline it degrades to `no_baseline` + current-state flags.
|
|
21
|
+
*
|
|
22
|
+
* The compute helpers are exported so get_architecture_snapshot stores the exact
|
|
23
|
+
* same cycle/violation representation it will later be diffed against.
|
|
24
|
+
*/
|
|
25
|
+
import { z } from 'zod';
|
|
26
|
+
import type Database from 'better-sqlite3';
|
|
27
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
28
|
+
export declare const name = "compare_change_impact";
|
|
29
|
+
export declare const description: string;
|
|
30
|
+
export declare const inputSchema: {
|
|
31
|
+
repoId: z.ZodString;
|
|
32
|
+
baselineSnapshotId: z.ZodOptional<z.ZodString>;
|
|
33
|
+
};
|
|
34
|
+
export interface StoredCycle {
|
|
35
|
+
/** Cycle member files, in graph order. */
|
|
36
|
+
files: string[];
|
|
37
|
+
}
|
|
38
|
+
export interface StoredLayerViolation {
|
|
39
|
+
from: string;
|
|
40
|
+
to: string;
|
|
41
|
+
fromFile: string;
|
|
42
|
+
toFile: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Current import cycles as stored cycles (capped). Same representation the
|
|
46
|
+
* snapshot persists, so before/after sets are directly comparable.
|
|
47
|
+
*/
|
|
48
|
+
export declare function computeCurrentCycles(db: Database.Database, repoId: string): StoredCycle[];
|
|
49
|
+
/**
|
|
50
|
+
* Current layer-boundary violations (capped). Empty when no layer config exists
|
|
51
|
+
* (the dimension is simply not evaluated, not "no violations").
|
|
52
|
+
*/
|
|
53
|
+
export declare function computeCurrentLayerViolations(db: Database.Database, repoId: string): StoredLayerViolation[];
|
|
54
|
+
export declare function handler(args: {
|
|
55
|
+
repoId: string;
|
|
56
|
+
baselineSnapshotId?: string;
|
|
57
|
+
}): CallToolResult;
|
|
58
|
+
//# sourceMappingURL=compare-change-impact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-change-impact.d.ts","sourceRoot":"","sources":["../../../src/server/tools/compare-change-impact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAO3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,eAAO,MAAM,IAAI,0BAA0B,CAAC;AAE5C,eAAO,MAAM,WAAW,QAQW,CAAC;AAEpC,eAAO,MAAM,WAAW;;;CASvB,CAAC;AAIF,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAcD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CAGzF;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,GACb,oBAAoB,EAAE,CAwBxB;AA6BD,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CA0I7F"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-change-impact.js","sourceRoot":"","sources":["../../../src/server/tools/compare-change-impact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-architecture-snapshot.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-architecture-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"get-architecture-snapshot.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-architecture-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,eAAO,MAAM,IAAI,8BAA8B,CAAC;AAEhD,eAAO,MAAM,WAAW,QAOqB,CAAC;AAE9C,eAAO,MAAM,WAAW;;;;;;;;;;;CAiBvB,CAAC;AA4KF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,cAAc,CAAC,CAwM1B"}
|
|
@@ -22,6 +22,7 @@ import { randomBytes } from 'crypto';
|
|
|
22
22
|
import { openDatabase, getRepo } from '../../core/db/schema.js';
|
|
23
23
|
import { getCouplingMap } from '../../core/db/dep-store.js';
|
|
24
24
|
import { findImportCycles } from '../../graph/graph-traversal.js';
|
|
25
|
+
import { computeCurrentCycles, computeCurrentLayerViolations, } from './compare-change-impact.js';
|
|
25
26
|
import { buildMeta } from './_meta.js';
|
|
26
27
|
export const name = 'get_architecture_snapshot';
|
|
27
28
|
export const description = 'Freeze the current architecture state into a named snapshot, then diff two snapshots ' +
|
|
@@ -50,16 +51,16 @@ export const inputSchema = {
|
|
|
50
51
|
.describe('Human-readable label for the snapshot (e.g. "before-auth-refactor")'),
|
|
51
52
|
};
|
|
52
53
|
function ensureSnapshotsTable(db) {
|
|
53
|
-
db.exec(`
|
|
54
|
-
CREATE TABLE IF NOT EXISTS snapshots (
|
|
55
|
-
snapshot_id TEXT NOT NULL,
|
|
56
|
-
repo_id TEXT NOT NULL,
|
|
57
|
-
label TEXT NOT NULL DEFAULT '',
|
|
58
|
-
created_at INTEGER NOT NULL,
|
|
59
|
-
metrics TEXT NOT NULL,
|
|
60
|
-
PRIMARY KEY (snapshot_id, repo_id),
|
|
61
|
-
FOREIGN KEY (repo_id) REFERENCES repos(id) ON DELETE CASCADE
|
|
62
|
-
)
|
|
54
|
+
db.exec(`
|
|
55
|
+
CREATE TABLE IF NOT EXISTS snapshots (
|
|
56
|
+
snapshot_id TEXT NOT NULL,
|
|
57
|
+
repo_id TEXT NOT NULL,
|
|
58
|
+
label TEXT NOT NULL DEFAULT '',
|
|
59
|
+
created_at INTEGER NOT NULL,
|
|
60
|
+
metrics TEXT NOT NULL,
|
|
61
|
+
PRIMARY KEY (snapshot_id, repo_id),
|
|
62
|
+
FOREIGN KEY (repo_id) REFERENCES repos(id) ON DELETE CASCADE
|
|
63
|
+
)
|
|
63
64
|
`);
|
|
64
65
|
try {
|
|
65
66
|
db.exec('CREATE INDEX IF NOT EXISTS idx_snapshots_repo ON snapshots(repo_id, created_at)');
|
|
@@ -121,7 +122,20 @@ function computeMetrics(db, repoId) {
|
|
|
121
122
|
const avgComplexity = complexityRow?.avg != null
|
|
122
123
|
? Math.round(complexityRow.avg * 100) / 100
|
|
123
124
|
: 0;
|
|
124
|
-
|
|
125
|
+
// Cycle membership + layer violations (Phase 79) — the diffable baseline data.
|
|
126
|
+
const cycles = computeCurrentCycles(db, repoId);
|
|
127
|
+
const layerViolations = computeCurrentLayerViolations(db, repoId);
|
|
128
|
+
return {
|
|
129
|
+
fileCount,
|
|
130
|
+
symbolCount,
|
|
131
|
+
edgeCount,
|
|
132
|
+
cycleCount,
|
|
133
|
+
avgCoupling,
|
|
134
|
+
avgComplexity,
|
|
135
|
+
files: filePaths,
|
|
136
|
+
cycles,
|
|
137
|
+
layerViolations,
|
|
138
|
+
};
|
|
125
139
|
}
|
|
126
140
|
// ─── Handler ──────────────────────────────────────────────────────────────────
|
|
127
141
|
export async function handler(args) {
|
|
@@ -147,9 +161,9 @@ export async function handler(args) {
|
|
|
147
161
|
const metrics = computeMetrics(db, repoId);
|
|
148
162
|
const snapId = randomBytes(6).toString('hex'); // 12-char hex
|
|
149
163
|
const now = Date.now();
|
|
150
|
-
db.prepare(`
|
|
151
|
-
INSERT INTO snapshots (snapshot_id, repo_id, label, created_at, metrics)
|
|
152
|
-
VALUES (?, ?, ?, ?, ?)
|
|
164
|
+
db.prepare(`
|
|
165
|
+
INSERT INTO snapshots (snapshot_id, repo_id, label, created_at, metrics)
|
|
166
|
+
VALUES (?, ?, ?, ?, ?)
|
|
153
167
|
`).run(snapId, repoId, label, now, JSON.stringify(metrics));
|
|
154
168
|
const record = {
|
|
155
169
|
snapshotId: snapId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-architecture-snapshot.js","sourceRoot":"","sources":["../../../src/server/tools/get-architecture-snapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,CAAC,MAAM,IAAI,GAAG,2BAA2B,CAAC;AAEhD,MAAM,CAAC,MAAM,WAAW,GACtB,uFAAuF;IACvF,0CAA0C;IAC1C,uFAAuF;IACvF,uDAAuD;IACvD,kEAAkE;IAClE,0GAA0G;IAC1G,2CAA2C,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACxE,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC1C,QAAQ,CAAC,uCAAuC,CAAC;IACpD,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gEAAgE,CAAC;IAC7E,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,+DAA+D,CAAC;IAC5E,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qEAAqE,CAAC;CACnF,CAAC;
|
|
1
|
+
{"version":3,"file":"get-architecture-snapshot.js","sourceRoot":"","sources":["../../../src/server/tools/get-architecture-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-churn-metrics.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-churn-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"get-churn-metrics.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-churn-metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,eAAO,MAAM,IAAI,sBAAsB,CAAC;AAExC,eAAO,MAAM,WAAW,QAM4C,CAAC;AAErE,eAAO,MAAM,WAAW;;;;;;;;;CAuBvB,CAAC;AAIF,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;CACzD;AAwOD,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC;CAChC,GAAG,OAAO,CAAC,cAAc,CAAC,CAuE1B"}
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
import { z } from 'zod';
|
|
15
15
|
import { openDatabase } from '../../core/db/schema.js';
|
|
16
16
|
import { getCommitsInWindow } from '../../core/db/git-metadata-store.js';
|
|
17
|
+
import { byteOffsetToLine } from './symbol-lines.js';
|
|
17
18
|
import { buildMeta } from './_meta.js';
|
|
18
19
|
export const name = 'get_churn_metrics';
|
|
19
20
|
export const description = 'Report code churn (change frequency) across an entire repo or a specific ' +
|
|
@@ -99,18 +100,6 @@ function buildFileChurn(commits, dayWindow, topN) {
|
|
|
99
100
|
records.sort((a, b) => b.churnScore - a.churnScore || b.commitCount - a.commitCount);
|
|
100
101
|
return records.slice(0, topN);
|
|
101
102
|
}
|
|
102
|
-
/**
|
|
103
|
-
* Convert a byte offset to a 1-based line number.
|
|
104
|
-
*/
|
|
105
|
-
function byteOffsetToLine(content, byteOffset) {
|
|
106
|
-
let line = 1;
|
|
107
|
-
const cap = Math.min(byteOffset, content.length);
|
|
108
|
-
for (let i = 0; i < cap; i++) {
|
|
109
|
-
if (content[i] === 0x0a)
|
|
110
|
-
line++;
|
|
111
|
-
}
|
|
112
|
-
return line;
|
|
113
|
-
}
|
|
114
103
|
function buildSymbolChurn(db, repoId, commits, dayWindow, topN, scope) {
|
|
115
104
|
// 1. Collect all distinct file paths that have commits
|
|
116
105
|
const filePaths = [...new Set(commits.map((c) => c.filePath))];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-churn-metrics.js","sourceRoot":"","sources":["../../../src/server/tools/get-churn-metrics.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"get-churn-metrics.js","sourceRoot":"","sources":["../../../src/server/tools/get-churn-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get-co-change.ts
|
|
3
|
+
*
|
|
4
|
+
* MCP tool: get_co_change
|
|
5
|
+
*
|
|
6
|
+
* Report temporal coupling — files that historically change together with a
|
|
7
|
+
* target file/symbol — using the repo-level commit→files capture (Phase 76).
|
|
8
|
+
*
|
|
9
|
+
* Surfaces the "second-order edits the import graph can't see": a route and its
|
|
10
|
+
* test, or a feature flag and the code it gates, that move together without
|
|
11
|
+
* importing each other. Returns explainable association metrics (support,
|
|
12
|
+
* confidence, lift) with mega-commit noise filtered out.
|
|
13
|
+
*
|
|
14
|
+
* Granularity is FILE-level (git tracks files, not symbols): a `symbolId`
|
|
15
|
+
* resolves to its containing file before analysis.
|
|
16
|
+
*/
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
19
|
+
export declare const name = "get_co_change";
|
|
20
|
+
export declare const description: string;
|
|
21
|
+
export declare const inputSchema: {
|
|
22
|
+
repoId: z.ZodString;
|
|
23
|
+
filePath: z.ZodOptional<z.ZodString>;
|
|
24
|
+
symbolId: z.ZodOptional<z.ZodString>;
|
|
25
|
+
minSupport: z.ZodOptional<z.ZodNumber>;
|
|
26
|
+
dayWindow: z.ZodOptional<z.ZodNumber>;
|
|
27
|
+
topN: z.ZodOptional<z.ZodNumber>;
|
|
28
|
+
};
|
|
29
|
+
export declare function handler(args: {
|
|
30
|
+
repoId: string;
|
|
31
|
+
filePath?: string;
|
|
32
|
+
symbolId?: string;
|
|
33
|
+
minSupport?: number;
|
|
34
|
+
dayWindow?: number;
|
|
35
|
+
topN?: number;
|
|
36
|
+
}): Promise<CallToolResult>;
|
|
37
|
+
//# sourceMappingURL=get-co-change.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-co-change.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-co-change.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,eAAO,MAAM,IAAI,kBAAkB,CAAC;AAEpC,eAAO,MAAM,WAAW,QAS4C,CAAC;AAErE,eAAO,MAAM,WAAW;;;;;;;CAsBvB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,cAAc,CAAC,CAkE1B"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* get-co-change.ts
|
|
3
|
+
*
|
|
4
|
+
* MCP tool: get_co_change
|
|
5
|
+
*
|
|
6
|
+
* Report temporal coupling — files that historically change together with a
|
|
7
|
+
* target file/symbol — using the repo-level commit→files capture (Phase 76).
|
|
8
|
+
*
|
|
9
|
+
* Surfaces the "second-order edits the import graph can't see": a route and its
|
|
10
|
+
* test, or a feature flag and the code it gates, that move together without
|
|
11
|
+
* importing each other. Returns explainable association metrics (support,
|
|
12
|
+
* confidence, lift) with mega-commit noise filtered out.
|
|
13
|
+
*
|
|
14
|
+
* Granularity is FILE-level (git tracks files, not symbols): a `symbolId`
|
|
15
|
+
* resolves to its containing file before analysis.
|
|
16
|
+
*/
|
|
17
|
+
import { z } from 'zod';
|
|
18
|
+
import { openDatabase, getRepo } from '../../core/db/schema.js';
|
|
19
|
+
import { getSymbolById } from '../../core/db/symbol-store.js';
|
|
20
|
+
import { countCommits } from '../../core/db/co-change-store.js';
|
|
21
|
+
import { getCoChange } from './co-change.js';
|
|
22
|
+
import { getConfig } from '../../config/config-loader.js';
|
|
23
|
+
import { buildMeta } from './_meta.js';
|
|
24
|
+
export const name = 'get_co_change';
|
|
25
|
+
export const description = 'Report temporal coupling: files that historically change together with a ' +
|
|
26
|
+
'target file or symbol, derived from git commit history (the commit_files ' +
|
|
27
|
+
'capture). Reveals coupling the import graph cannot — e.g. a route and its ' +
|
|
28
|
+
'test, or a feature flag and the code it gates. Returns explainable metrics ' +
|
|
29
|
+
'(support = shared commits; confidence = directional A→B probability; ' +
|
|
30
|
+
'lift = association strength) with mega-commits (reformats/lockfile sweeps) ' +
|
|
31
|
+
'filtered out. Granularity is FILE-level: a symbolId resolves to its file. ' +
|
|
32
|
+
'Requires git.coChangeDepth > 0 at index time; returns signalQuality:"low" ' +
|
|
33
|
+
'on shallow/sparse histories rather than overstating weak ratios.';
|
|
34
|
+
export const inputSchema = {
|
|
35
|
+
repoId: z.string().describe('Repo ID from index_folder or resolve_repo'),
|
|
36
|
+
filePath: z
|
|
37
|
+
.string()
|
|
38
|
+
.optional()
|
|
39
|
+
.describe('Target file path (repo-relative). Provide this OR symbolId.'),
|
|
40
|
+
symbolId: z
|
|
41
|
+
.string()
|
|
42
|
+
.optional()
|
|
43
|
+
.describe('Target symbol ID — resolved to its containing file (git is file-granular).'),
|
|
44
|
+
minSupport: z
|
|
45
|
+
.number().int().min(1)
|
|
46
|
+
.optional()
|
|
47
|
+
.describe('Drop partners with fewer than this many shared commits (default 2).'),
|
|
48
|
+
dayWindow: z
|
|
49
|
+
.number().int().min(1).max(3650)
|
|
50
|
+
.optional()
|
|
51
|
+
.describe('Look back N days (default: entire captured commit window).'),
|
|
52
|
+
topN: z
|
|
53
|
+
.number().int().min(1).max(200)
|
|
54
|
+
.optional()
|
|
55
|
+
.describe('Maximum co-changing partners to return (default 20).'),
|
|
56
|
+
};
|
|
57
|
+
export async function handler(args) {
|
|
58
|
+
const t0 = Date.now();
|
|
59
|
+
const { repoId, symbolId, minSupport, dayWindow, topN } = args;
|
|
60
|
+
const db = openDatabase(repoId);
|
|
61
|
+
try {
|
|
62
|
+
const repo = getRepo(db, repoId);
|
|
63
|
+
if (!repo) {
|
|
64
|
+
return {
|
|
65
|
+
content: [{ type: 'text', text: JSON.stringify({ error: `Repo "${repoId}" not found. Run index_folder first.` }) }],
|
|
66
|
+
isError: true,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// Resolve target file (from filePath or symbolId).
|
|
70
|
+
let targetFilePath = args.filePath;
|
|
71
|
+
if (!targetFilePath && symbolId) {
|
|
72
|
+
const sym = getSymbolById(db, repoId, symbolId);
|
|
73
|
+
if (!sym) {
|
|
74
|
+
return {
|
|
75
|
+
content: [{ type: 'text', text: JSON.stringify({ error: `Symbol "${symbolId}" not found.` }) }],
|
|
76
|
+
isError: true,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
targetFilePath = sym.filePath;
|
|
80
|
+
}
|
|
81
|
+
if (!targetFilePath) {
|
|
82
|
+
return {
|
|
83
|
+
content: [{ type: 'text', text: JSON.stringify({ error: 'Provide either filePath or symbolId.' }) }],
|
|
84
|
+
isError: true,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// No co-change data captured (coChangeDepth=0 or non-git / never indexed with it).
|
|
88
|
+
if (countCommits(db, repoId) === 0) {
|
|
89
|
+
return {
|
|
90
|
+
content: [{
|
|
91
|
+
type: 'text',
|
|
92
|
+
text: JSON.stringify({
|
|
93
|
+
repoId,
|
|
94
|
+
targetFilePath,
|
|
95
|
+
signalQuality: 'low',
|
|
96
|
+
partners: [],
|
|
97
|
+
hint: 'No co-change data found. Re-index a git repo with config git.coChangeDepth > 0 (default 300).',
|
|
98
|
+
_meta: buildMeta({ timingMs: Date.now() - t0 }),
|
|
99
|
+
}, null, 2),
|
|
100
|
+
}],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
const result = getCoChange(db, repoId, targetFilePath, {
|
|
104
|
+
minSupport,
|
|
105
|
+
dayWindow,
|
|
106
|
+
topN,
|
|
107
|
+
megaCommitThreshold: getConfig().git?.megaCommitThreshold ?? 30,
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
content: [{
|
|
111
|
+
type: 'text',
|
|
112
|
+
text: JSON.stringify({ repoId, ...result, _meta: buildMeta({ timingMs: Date.now() - t0 }) }, null, 2),
|
|
113
|
+
}],
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
db.close();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=get-co-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-co-change.js","sourceRoot":"","sources":["../../../src/server/tools/get-co-change.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-context-bundle.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-context-bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"get-context-bundle.d.ts","sourceRoot":"","sources":["../../../src/server/tools/get-context-bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,eAAO,MAAM,IAAI,uBAAuB,CAAC;AAEzC,eAAO,MAAM,WAAW,QAMiD,CAAC;AAE1E,eAAO,MAAM,WAAW;;;;CASvB,CAAC;AAgEF,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CA0DlG"}
|