codesift-mcp 0.5.7 → 0.5.9

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 (84) hide show
  1. package/dist/cli/commands.d.ts.map +1 -1
  2. package/dist/cli/commands.js +16 -0
  3. package/dist/cli/commands.js.map +1 -1
  4. package/dist/cli/help.d.ts +1 -1
  5. package/dist/cli/help.d.ts.map +1 -1
  6. package/dist/cli/help.js +4 -0
  7. package/dist/cli/help.js.map +1 -1
  8. package/dist/cli/hooks.d.ts +2 -0
  9. package/dist/cli/hooks.d.ts.map +1 -1
  10. package/dist/cli/hooks.js +141 -1
  11. package/dist/cli/hooks.js.map +1 -1
  12. package/dist/cli/setup.d.ts.map +1 -1
  13. package/dist/cli/setup.js +2 -0
  14. package/dist/cli/setup.js.map +1 -1
  15. package/dist/cli/wiki-commands.d.ts +4 -0
  16. package/dist/cli/wiki-commands.d.ts.map +1 -0
  17. package/dist/cli/wiki-commands.js +53 -0
  18. package/dist/cli/wiki-commands.js.map +1 -0
  19. package/dist/formatters.d.ts.map +1 -1
  20. package/dist/formatters.js +9 -8
  21. package/dist/formatters.js.map +1 -1
  22. package/dist/instructions.d.ts +1 -1
  23. package/dist/instructions.d.ts.map +1 -1
  24. package/dist/instructions.js +3 -0
  25. package/dist/instructions.js.map +1 -1
  26. package/dist/register-tool-loaders.d.ts +1 -0
  27. package/dist/register-tool-loaders.d.ts.map +1 -1
  28. package/dist/register-tool-loaders.js +2 -0
  29. package/dist/register-tool-loaders.js.map +1 -1
  30. package/dist/register-tools.d.ts +10 -0
  31. package/dist/register-tools.d.ts.map +1 -1
  32. package/dist/register-tools.js +42 -7
  33. package/dist/register-tools.js.map +1 -1
  34. package/dist/search/tool-ranker.js +1 -1
  35. package/dist/server-helpers.d.ts.map +1 -1
  36. package/dist/server-helpers.js +12 -0
  37. package/dist/server-helpers.js.map +1 -1
  38. package/dist/tools/lens-template.d.ts +37 -0
  39. package/dist/tools/lens-template.d.ts.map +1 -0
  40. package/dist/tools/lens-template.js +326 -0
  41. package/dist/tools/lens-template.js.map +1 -0
  42. package/dist/tools/lens-tools.d.ts +12 -0
  43. package/dist/tools/lens-tools.d.ts.map +1 -0
  44. package/dist/tools/lens-tools.js +17 -0
  45. package/dist/tools/lens-tools.js.map +1 -0
  46. package/dist/tools/nextjs-component-readers.d.ts.map +1 -1
  47. package/dist/tools/nextjs-component-readers.js +1 -0
  48. package/dist/tools/nextjs-component-readers.js.map +1 -1
  49. package/dist/tools/nextjs-component-tools.js +1 -0
  50. package/dist/tools/nextjs-component-tools.js.map +1 -1
  51. package/dist/tools/nextjs-framework-audit-tools.d.ts +2 -2
  52. package/dist/tools/nextjs-framework-audit-tools.d.ts.map +1 -1
  53. package/dist/tools/plan-turn-tools.d.ts.map +1 -1
  54. package/dist/tools/plan-turn-tools.js +10 -7
  55. package/dist/tools/plan-turn-tools.js.map +1 -1
  56. package/dist/tools/wiki-escape.d.ts +11 -0
  57. package/dist/tools/wiki-escape.d.ts.map +1 -0
  58. package/dist/tools/wiki-escape.js +21 -0
  59. package/dist/tools/wiki-escape.js.map +1 -0
  60. package/dist/tools/wiki-links.d.ts +23 -0
  61. package/dist/tools/wiki-links.d.ts.map +1 -0
  62. package/dist/tools/wiki-links.js +57 -0
  63. package/dist/tools/wiki-links.js.map +1 -0
  64. package/dist/tools/wiki-lint.d.ts +13 -0
  65. package/dist/tools/wiki-lint.d.ts.map +1 -0
  66. package/dist/tools/wiki-lint.js +70 -0
  67. package/dist/tools/wiki-lint.js.map +1 -0
  68. package/dist/tools/wiki-manifest.d.ts +44 -0
  69. package/dist/tools/wiki-manifest.d.ts.map +1 -0
  70. package/dist/tools/wiki-manifest.js +72 -0
  71. package/dist/tools/wiki-manifest.js.map +1 -0
  72. package/dist/tools/wiki-page-generators.d.ts +38 -0
  73. package/dist/tools/wiki-page-generators.d.ts.map +1 -0
  74. package/dist/tools/wiki-page-generators.js +129 -0
  75. package/dist/tools/wiki-page-generators.js.map +1 -0
  76. package/dist/tools/wiki-surprise.d.ts +31 -0
  77. package/dist/tools/wiki-surprise.d.ts.map +1 -0
  78. package/dist/tools/wiki-surprise.js +77 -0
  79. package/dist/tools/wiki-surprise.js.map +1 -0
  80. package/dist/tools/wiki-tools.d.ts +14 -0
  81. package/dist/tools/wiki-tools.d.ts.map +1 -0
  82. package/dist/tools/wiki-tools.js +251 -0
  83. package/dist/tools/wiki-tools.js.map +1 -0
  84. package/package.json +1 -1
@@ -0,0 +1,129 @@
1
+ import { escMd } from "./wiki-escape.js";
2
+ const MAX_FILES_DISPLAY = 15;
3
+ const SUMMARY_CHAR_BUDGET = 1600; // ~400 tokens at 4 chars/token
4
+ export function generateCommunityPage(data) {
5
+ const { community, cohesion, internal_edges, external_edges, hotspots, hub_symbols } = data;
6
+ const lines = [];
7
+ lines.push(`# ${escMd(community.name)}`);
8
+ lines.push("");
9
+ lines.push(`**Cohesion:** ${(cohesion * 100).toFixed(0)}% | ` +
10
+ `**Internal edges:** ${internal_edges} | ` +
11
+ `**External edges:** ${external_edges} | ` +
12
+ `**Files:** ${community.size}`);
13
+ lines.push("", "## Files", "");
14
+ const displayFiles = community.files.slice(0, MAX_FILES_DISPLAY);
15
+ for (const f of displayFiles)
16
+ lines.push(`- ${escMd(f)}`);
17
+ if (community.files.length > MAX_FILES_DISPLAY) {
18
+ const extra = community.files.length - MAX_FILES_DISPLAY;
19
+ lines.push(`- *+${extra} more files (use \`codesift wiki-generate --focus\` to see all)*`);
20
+ }
21
+ lines.push("");
22
+ if (hub_symbols.length > 0) {
23
+ lines.push("## Hub Symbols", "", "| Symbol | Role | Callers | Callees |", "| ------ | ---- | ------: | ------: |");
24
+ for (const h of hub_symbols) {
25
+ lines.push(`| ${escMd(h.name)} | ${escMd(h.role)} | ${h.callers} | ${h.callees} |`);
26
+ }
27
+ lines.push("");
28
+ }
29
+ if (hotspots.length > 0) {
30
+ lines.push("## Hotspots", "", "| File | Commits | Score |", "| ---- | ------: | ----: |");
31
+ for (const h of hotspots) {
32
+ lines.push(`| ${escMd(h.file)} | ${h.commits} | ${h.hotspot_score.toFixed(2)} |`);
33
+ }
34
+ lines.push("");
35
+ }
36
+ return lines.join("\n");
37
+ }
38
+ export function generateCommunitySummary(data) {
39
+ const { community, cohesion, hub_symbols } = data;
40
+ const lines = [
41
+ `**${escMd(community.name)}**`,
42
+ `Cohesion: ${(cohesion * 100).toFixed(0)}% | Files: ${community.size}`,
43
+ ];
44
+ const topFiles = community.files.slice(0, 3);
45
+ if (topFiles.length > 0)
46
+ lines.push(`Top files: ${topFiles.map(escMd).join(", ")}`);
47
+ const topHub = hub_symbols[0];
48
+ if (topHub !== undefined)
49
+ lines.push(`Top hub: ${escMd(topHub.name)} (${topHub.callers} callers)`);
50
+ const result = lines.join("\n");
51
+ return result.length <= SUMMARY_CHAR_BUDGET ? result : result.slice(0, SUMMARY_CHAR_BUDGET);
52
+ }
53
+ export function generateHubsPage(hubs) {
54
+ const lines = [
55
+ "# Hub Symbols", "",
56
+ "High-centrality symbols that act as architectural connectors.", "",
57
+ ];
58
+ if (hubs.length === 0) {
59
+ lines.push("No hub symbols detected.");
60
+ }
61
+ else {
62
+ lines.push("| Symbol | File | Role | Callers | Callees |", "| ------ | ---- | ---- | ------: | ------: |");
63
+ for (const h of hubs) {
64
+ lines.push(`| ${escMd(h.name)} | ${escMd(h.file)} | ${escMd(h.role)} | ${h.callers} | ${h.callees} |`);
65
+ }
66
+ }
67
+ lines.push("");
68
+ return lines.join("\n");
69
+ }
70
+ export function generateSurprisePage(surprises) {
71
+ const lines = [
72
+ "# Surprise Connections", "",
73
+ "Cross-community boundaries with higher coupling than expected (structural + temporal).", "",
74
+ ];
75
+ if (surprises.length === 0) {
76
+ lines.push("No surprise connections detected.");
77
+ }
78
+ else {
79
+ lines.push("| Community A | Community B | Score | Edges | Example Files |", "| ----------- | ----------- | ----: | ----: | ------------- |");
80
+ for (const s of surprises) {
81
+ const ex = `${escMd(s.example_files[0])} ↔ ${escMd(s.example_files[1])}`;
82
+ lines.push(`| ${escMd(s.community_a)} | ${escMd(s.community_b)} | ${s.combined_score.toFixed(2)} | ${s.edge_count} | ${ex} |`);
83
+ }
84
+ }
85
+ lines.push("");
86
+ return lines.join("\n");
87
+ }
88
+ export function generateHotspotsPage(hotspots) {
89
+ const lines = [
90
+ "# Hotspot Files", "",
91
+ "Files ranked by churn × complexity (commit frequency × size).", "",
92
+ ];
93
+ if (hotspots.length === 0) {
94
+ lines.push("No hotspot data available.");
95
+ }
96
+ else {
97
+ lines.push("| File | Commits | Score |", "| ---- | ------: | ----: |");
98
+ for (const h of hotspots) {
99
+ lines.push(`| ${escMd(h.file)} | ${h.commits} | ${h.hotspot_score.toFixed(2)} |`);
100
+ }
101
+ }
102
+ lines.push("");
103
+ return lines.join("\n");
104
+ }
105
+ export function generateFrameworkPage(framework) {
106
+ if (framework === null)
107
+ return "";
108
+ return [`# Framework: ${escMd(framework.name)}`, "", escMd(framework.details), ""].join("\n");
109
+ }
110
+ export function generateIndexPage(pages) {
111
+ const lines = [
112
+ "# Wiki Index", "",
113
+ "Auto-generated codebase wiki. Use the links below to navigate.", "",
114
+ ];
115
+ const byType = new Map();
116
+ for (const page of pages) {
117
+ const group = byType.get(page.type) ?? [];
118
+ group.push(page);
119
+ byType.set(page.type, group);
120
+ }
121
+ for (const [type, group] of byType) {
122
+ lines.push(`## ${escMd(type)}`, "");
123
+ for (const page of group)
124
+ lines.push(`- [[${page.slug}]] — ${escMd(page.title)}`);
125
+ lines.push("");
126
+ }
127
+ return lines.join("\n");
128
+ }
129
+ //# sourceMappingURL=wiki-page-generators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-page-generators.js","sourceRoot":"","sources":["../../src/tools/wiki-page-generators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export interface SurpriseScore {
2
+ community_a: string;
3
+ community_b: string;
4
+ structural_score: number;
5
+ temporal_score: number;
6
+ combined_score: number;
7
+ edge_count: number;
8
+ example_files: [string, string];
9
+ }
10
+ export interface CrossEdge {
11
+ from_community: string;
12
+ to_community: string;
13
+ from_file: string;
14
+ to_file: string;
15
+ }
16
+ export interface CoChangePair {
17
+ file_a: string;
18
+ file_b: string;
19
+ jaccard: number;
20
+ }
21
+ export interface CommunityInfo {
22
+ name: string;
23
+ files: string[];
24
+ size: number;
25
+ }
26
+ /**
27
+ * Pure function — computes surprise scores for cross-community boundaries.
28
+ * No async, no MCP infrastructure imports.
29
+ */
30
+ export declare function computeSurpriseScores(communities: CommunityInfo[], crossEdges: CrossEdge[], coChangePairs: CoChangePair[], globalDensity: number): SurpriseScore[];
31
+ //# sourceMappingURL=wiki-surprise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-surprise.d.ts","sourceRoot":"","sources":["../../src/tools/wiki-surprise.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,aAAa,EAAE,EAC5B,UAAU,EAAE,SAAS,EAAE,EACvB,aAAa,EAAE,YAAY,EAAE,EAC7B,aAAa,EAAE,MAAM,GACpB,aAAa,EAAE,CA0FjB"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Pure function — computes surprise scores for cross-community boundaries.
3
+ * No async, no MCP infrastructure imports.
4
+ */
5
+ export function computeSurpriseScores(communities, crossEdges, coChangePairs, globalDensity) {
6
+ if (communities.length === 0)
7
+ return [];
8
+ // Build a lookup: community name → file set
9
+ const communityFiles = new Map();
10
+ const communitySize = new Map();
11
+ for (const c of communities) {
12
+ communityFiles.set(c.name, new Set(c.files));
13
+ communitySize.set(c.name, c.size);
14
+ }
15
+ // Canonical pair key: always sort so (A,B) === (B,A)
16
+ function pairKey(a, b) {
17
+ return a < b ? `${a}\0${b}` : `${b}\0${a}`;
18
+ }
19
+ const groups = new Map();
20
+ for (const edge of crossEdges) {
21
+ const ca = edge.from_community;
22
+ const cb = edge.to_community;
23
+ if (ca === cb)
24
+ continue;
25
+ const key = pairKey(ca, cb);
26
+ if (!groups.has(key)) {
27
+ const [a, b] = ca < cb ? [ca, cb] : [cb, ca];
28
+ groups.set(key, { community_a: a, community_b: b, edges: [] });
29
+ }
30
+ groups.get(key).edges.push(edge);
31
+ }
32
+ const results = [];
33
+ for (const [, group] of groups) {
34
+ const { community_a, community_b, edges } = group;
35
+ const sizeA = communitySize.get(community_a) ?? 0;
36
+ const sizeB = communitySize.get(community_b) ?? 0;
37
+ const filesA = communityFiles.get(community_a) ?? new Set();
38
+ const filesB = communityFiles.get(community_b) ?? new Set();
39
+ const edgeCount = edges.length;
40
+ const expected = sizeA * sizeB * globalDensity;
41
+ const structuralScore = expected === 0 ? 0 : edgeCount / expected;
42
+ // Find co-change pairs crossing this boundary
43
+ let temporalScore = 0;
44
+ let bestPair = null;
45
+ for (const pair of coChangePairs) {
46
+ const aInA = filesA.has(pair.file_a);
47
+ const bInB = filesB.has(pair.file_b);
48
+ const aInB = filesB.has(pair.file_a);
49
+ const bInA = filesA.has(pair.file_b);
50
+ const crossesBoundary = (aInA && bInB) || (aInB && bInA);
51
+ if (crossesBoundary && pair.jaccard > temporalScore) {
52
+ temporalScore = pair.jaccard;
53
+ bestPair = (aInA && bInB)
54
+ ? [pair.file_a, pair.file_b]
55
+ : [pair.file_b, pair.file_a];
56
+ }
57
+ }
58
+ // Fall back to first cross edge if no co-change data
59
+ const exampleFiles = bestPair !== null
60
+ ? bestPair
61
+ : [edges[0].from_file, edges[0].to_file];
62
+ const combinedScore = 0.6 * structuralScore + 0.4 * temporalScore;
63
+ results.push({
64
+ community_a,
65
+ community_b,
66
+ structural_score: structuralScore,
67
+ temporal_score: temporalScore,
68
+ combined_score: combinedScore,
69
+ edge_count: edgeCount,
70
+ example_files: exampleFiles,
71
+ });
72
+ }
73
+ // Sort by combined_score descending
74
+ results.sort((a, b) => b.combined_score - a.combined_score);
75
+ return results;
76
+ }
77
+ //# sourceMappingURL=wiki-surprise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-surprise.js","sourceRoot":"","sources":["../../src/tools/wiki-surprise.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface WikiResult {
2
+ wiki_dir: string;
3
+ pages: number;
4
+ communities: number;
5
+ hubs: number;
6
+ surprises: number;
7
+ degraded: boolean;
8
+ degraded_reasons?: string[];
9
+ }
10
+ export declare function generateWiki(repo: string, options?: {
11
+ focus?: string;
12
+ output_dir?: string;
13
+ }): Promise<WikiResult>;
14
+ //# sourceMappingURL=wiki-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-tools.d.ts","sourceRoot":"","sources":["../../src/tools/wiki-tools.ts"],"names":[],"mappings":"AA2DA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAiDD,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,UAAU,CAAC,CAmOrB"}
@@ -0,0 +1,251 @@
1
+ import { writeFile, mkdir, readFile, readdir, rename, unlink } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { getCodeIndex } from "./index-tools.js";
4
+ import { detectCommunities } from "./community-tools.js";
5
+ import { classifySymbolRoles } from "./graph-tools.js";
6
+ import { coChangeAnalysis, fanInFanOut } from "./coupling-tools.js";
7
+ import { analyzeHotspots } from "./hotspot-tools.js";
8
+ import { analyzeProject } from "./project-tools.js";
9
+ import { computeIndexHash } from "../storage/graph-store.js";
10
+ import { computeSurpriseScores, } from "./wiki-surprise.js";
11
+ import { generateCommunityPage, generateCommunitySummary, generateHubsPage, generateSurprisePage, generateHotspotsPage, generateFrameworkPage, generateIndexPage, } from "./wiki-page-generators.js";
12
+ import { resolveWikiLinks } from "./wiki-links.js";
13
+ import { buildWikiManifest, toSlug } from "./wiki-manifest.js";
14
+ const TIMEOUT_SENTINEL = { status: "timeout" };
15
+ function withTimeout(promise, ms) {
16
+ return Promise.race([
17
+ promise,
18
+ new Promise((resolve) => setTimeout(() => resolve(TIMEOUT_SENTINEL), ms)),
19
+ ]);
20
+ }
21
+ function isTimeout(v) {
22
+ return typeof v === "object" && v !== null && "status" in v && v.status === "timeout";
23
+ }
24
+ const ANALYSIS_TIMEOUT = 15000;
25
+ // ---------------------------------------------------------------------------
26
+ // Helpers: settled-result unwrapping
27
+ // ---------------------------------------------------------------------------
28
+ function formatDegradedReason(label, result) {
29
+ if (result.status === "rejected") {
30
+ return `${label}_error: ${result.reason instanceof Error ? result.reason.message : String(result.reason)}`;
31
+ }
32
+ return `${label}_timeout`;
33
+ }
34
+ function unwrapSettled(result, label, extractor, fallback, degradedReasons) {
35
+ if (result.status === "fulfilled" && !isTimeout(result.value)) {
36
+ try {
37
+ return extractor(result.value);
38
+ }
39
+ catch (e) {
40
+ degradedReasons.push(`${label}_parse_error: ${e instanceof Error ? e.message : String(e)}`);
41
+ return fallback;
42
+ }
43
+ }
44
+ degradedReasons.push(formatDegradedReason(label, result));
45
+ return fallback;
46
+ }
47
+ // ---------------------------------------------------------------------------
48
+ // Helper: load old manifest if present
49
+ // ---------------------------------------------------------------------------
50
+ async function loadOldManifest(outputDir) {
51
+ try {
52
+ const raw = await readFile(join(outputDir, "manifest.json"), "utf-8");
53
+ return JSON.parse(raw);
54
+ }
55
+ catch {
56
+ return undefined;
57
+ }
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // Main orchestrator
61
+ // ---------------------------------------------------------------------------
62
+ export async function generateWiki(repo, options) {
63
+ const index = await getCodeIndex(repo);
64
+ if (!index)
65
+ throw new Error(`Repository "${repo}" not found.`);
66
+ const outputDir = options?.output_dir ?? join(index.root, ".codesift", "wiki");
67
+ // Path traversal guard
68
+ if (options?.output_dir) {
69
+ const resolved = resolve(options.output_dir);
70
+ const root = resolve(index.root);
71
+ if (!resolved.startsWith(root + "/") && resolved !== root) {
72
+ throw new Error(`output_dir "${options.output_dir}" is outside the repository root — path traversal not allowed`);
73
+ }
74
+ }
75
+ await mkdir(outputDir, { recursive: true });
76
+ // Lockfile: prevent concurrent wiki generation
77
+ const lockPath = join(outputDir, ".wiki-lock");
78
+ try {
79
+ await writeFile(lockPath, `${process.pid}\n${new Date().toISOString()}`, { flag: "wx" });
80
+ }
81
+ catch {
82
+ throw new Error("Wiki generation already in progress (lockfile exists)");
83
+ }
84
+ try {
85
+ // Fan out all analyses in parallel with per-analysis timeout
86
+ const [commResult, rolesResult, fanResult, coChangeResult, hotspotsResult] = await Promise.allSettled([
87
+ withTimeout(detectCommunities(repo, options?.focus), ANALYSIS_TIMEOUT),
88
+ withTimeout(classifySymbolRoles(repo, {}), ANALYSIS_TIMEOUT),
89
+ withTimeout(fanInFanOut(repo, {}), ANALYSIS_TIMEOUT),
90
+ withTimeout(coChangeAnalysis(repo, {}), ANALYSIS_TIMEOUT),
91
+ withTimeout(analyzeHotspots(repo, {}), ANALYSIS_TIMEOUT),
92
+ ]);
93
+ // analyzeProject is best-effort only (used for framework detection)
94
+ const [projectResult] = await Promise.allSettled([
95
+ withTimeout(analyzeProject(repo), ANALYSIS_TIMEOUT),
96
+ ]);
97
+ const degradedReasons = [];
98
+ const communities = unwrapSettled(commResult, "community_detection", (cr) => {
99
+ if ("communities" in cr) {
100
+ return cr.communities.map((c) => ({ name: c.name, files: c.files, size: c.files.length }));
101
+ }
102
+ return [];
103
+ }, [], degradedReasons);
104
+ const crossEdges = [];
105
+ const hubSymbols = unwrapSettled(rolesResult, "classify_roles", (roles) => roles
106
+ .filter((r) => r.role === "core" || r.role === "utility" || r.callers >= 3)
107
+ .slice(0, 30)
108
+ .map((r) => ({ name: r.name, file: r.file, role: r.role, callers: r.callers, callees: r.callees })), [], degradedReasons);
109
+ const coChangePairs = unwrapSettled(coChangeResult, "cochange", (v) => v.pairs.map((p) => ({ file_a: p.file_a, file_b: p.file_b, jaccard: p.jaccard })), [], degradedReasons);
110
+ // Fan-in/fan-out: only record degraded reason, no data extracted
111
+ unwrapSettled(fanResult, "fanin", () => null, null, degradedReasons);
112
+ const fileHotspots = unwrapSettled(hotspotsResult, "hotspots", (v) => v.hotspots.slice(0, 20).map((h) => ({ file: h.file, commits: h.commits, hotspot_score: h.hotspot_score })), [], degradedReasons);
113
+ const frameworkInfo = unwrapSettled(projectResult, "project", (v) => {
114
+ const fw = v.stack?.framework;
115
+ return fw ? { name: fw, details: `Primary framework detected: ${fw}.` } : null;
116
+ }, null, degradedReasons);
117
+ // Compute surprise scores
118
+ const globalDensity = index.files.length > 0 ? crossEdges.length / (index.files.length * index.files.length) : 0;
119
+ const surprises = computeSurpriseScores(communities, crossEdges, coChangePairs, globalDensity);
120
+ // Build community page data
121
+ const communityPages = communities.map((comm) => {
122
+ const slug = toSlug(comm.name);
123
+ const commHotspots = fileHotspots.filter((h) => comm.files.includes(h.file));
124
+ const commHubs = hubSymbols.filter((h) => comm.files.includes(h.file));
125
+ const rawComm = commResult.status === "fulfilled" && !isTimeout(commResult.value) && "communities" in commResult.value
126
+ ? commResult.value.communities.find((c) => c.name === comm.name)
127
+ : undefined;
128
+ const data = {
129
+ community: comm,
130
+ cohesion: rawComm?.cohesion ?? 0,
131
+ internal_edges: rawComm?.internal_edges ?? 0,
132
+ external_edges: rawComm?.external_edges ?? 0,
133
+ hotspots: commHotspots,
134
+ hub_symbols: commHubs,
135
+ };
136
+ const content = generateCommunityPage(data);
137
+ return { slug, title: comm.name, type: "community", file: `${slug}.md`, content };
138
+ });
139
+ // Write community summary files for hook injection
140
+ for (const comm of communityPages) {
141
+ const data = communities.find((c) => toSlug(c.name) === comm.slug);
142
+ if (!data)
143
+ continue;
144
+ const commHotspots = fileHotspots.filter((h) => data.files.includes(h.file));
145
+ const commHubs = hubSymbols.filter((h) => data.files.includes(h.file));
146
+ const rawComm = commResult.status === "fulfilled" && !isTimeout(commResult.value) && "communities" in commResult.value
147
+ ? commResult.value.communities.find((c) => c.name === data.name)
148
+ : undefined;
149
+ const summaryData = {
150
+ community: data,
151
+ cohesion: rawComm?.cohesion ?? 0,
152
+ internal_edges: rawComm?.internal_edges ?? 0,
153
+ external_edges: rawComm?.external_edges ?? 0,
154
+ hotspots: commHotspots,
155
+ hub_symbols: commHubs,
156
+ };
157
+ const summary = generateCommunitySummary(summaryData);
158
+ await writeFile(join(outputDir, `${comm.slug}.summary.md`), summary, "utf-8");
159
+ }
160
+ // Hubs page
161
+ const hubsContent = generateHubsPage(hubSymbols);
162
+ const hubsPage = { slug: "hubs", title: "Hub Symbols", type: "hubs", file: "hubs.md", content: hubsContent };
163
+ // Surprises page
164
+ const surprisesContent = generateSurprisePage(surprises);
165
+ const surprisesPage = { slug: "surprises", title: "Surprise Connections", type: "surprises", file: "surprises.md", content: surprisesContent };
166
+ // Hotspots page
167
+ const hotspotsContent = generateHotspotsPage(fileHotspots);
168
+ const hotspotsPage = { slug: "hotspots", title: "Hotspot Files", type: "hotspots", file: "hotspots.md", content: hotspotsContent };
169
+ // Framework page (only if framework detected)
170
+ const frameworkPages = [];
171
+ if (frameworkInfo) {
172
+ const content = generateFrameworkPage(frameworkInfo);
173
+ if (content) {
174
+ frameworkPages.push({ slug: "framework", title: `Framework: ${frameworkInfo.name}`, type: "framework", file: "framework.md", content });
175
+ }
176
+ }
177
+ // Collect all content pages (excluding index) for index generation
178
+ const contentPages = [
179
+ ...communityPages,
180
+ hubsPage,
181
+ surprisesPage,
182
+ hotspotsPage,
183
+ ...frameworkPages,
184
+ ];
185
+ // Index page
186
+ const indexContent = generateIndexPage(contentPages.map((p) => ({ slug: p.slug, title: p.title, type: p.type })));
187
+ const indexPage = { slug: "index", title: "Wiki Index", type: "index", file: "index.md", content: indexContent };
188
+ const allPages = [indexPage, ...contentPages];
189
+ // Resolve wiki links (two-pass backlink injection)
190
+ const pageMap = new Map(allPages.map((p) => [p.slug, p.content]));
191
+ const knownSlugs = new Set(allPages.map((p) => p.slug));
192
+ const { resolvedPages } = resolveWikiLinks(pageMap, knownSlugs);
193
+ // Update PageInfo content with resolved versions
194
+ const resolvedPageInfos = allPages.map((p) => ({
195
+ ...p,
196
+ content: resolvedPages.get(p.slug) ?? p.content,
197
+ }));
198
+ // Load old manifest for slug_redirects preservation
199
+ const oldManifest = await loadOldManifest(outputDir);
200
+ // Build manifest
201
+ const indexHash = computeIndexHash(index.files);
202
+ const manifestOptions = {
203
+ index_hash: indexHash,
204
+ git_commit: "unknown",
205
+ pages: resolvedPageInfos,
206
+ communities,
207
+ degradedReasons,
208
+ };
209
+ if (oldManifest !== undefined) {
210
+ manifestOptions.oldManifest = oldManifest;
211
+ }
212
+ const manifest = buildWikiManifest(manifestOptions);
213
+ // Write pages
214
+ for (const page of resolvedPageInfos) {
215
+ await writeFile(join(outputDir, page.file), page.content, "utf-8");
216
+ }
217
+ // Stale page cleanup: delete .md files from a previous run that are no longer generated
218
+ const existingFiles = await readdir(outputDir);
219
+ const newFiles = new Set(resolvedPageInfos.map((p) => p.file));
220
+ newFiles.add("wiki-manifest.json");
221
+ newFiles.add("wiki-manifest.json.tmp");
222
+ newFiles.add(".wiki-lock");
223
+ // Add summary files to known set so they aren't cleaned up
224
+ for (const comm of communityPages) {
225
+ newFiles.add(`${comm.slug}.summary.md`);
226
+ }
227
+ for (const f of existingFiles) {
228
+ if (f.endsWith(".md") && !newFiles.has(f)) {
229
+ await unlink(join(outputDir, f));
230
+ }
231
+ }
232
+ // Atomic manifest write: write to .tmp then rename
233
+ const manifestPath = join(outputDir, "wiki-manifest.json");
234
+ const tmpPath = manifestPath + ".tmp";
235
+ await writeFile(tmpPath, JSON.stringify(manifest, null, 2));
236
+ await rename(tmpPath, manifestPath);
237
+ return {
238
+ wiki_dir: outputDir,
239
+ pages: resolvedPageInfos.length,
240
+ communities: communities.length,
241
+ hubs: hubSymbols.length,
242
+ surprises: surprises.length,
243
+ degraded: degradedReasons.length > 0,
244
+ ...(degradedReasons.length > 0 ? { degraded_reasons: degradedReasons } : {}),
245
+ };
246
+ }
247
+ finally {
248
+ await unlink(lockPath).catch(() => { });
249
+ }
250
+ }
251
+ //# sourceMappingURL=wiki-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-tools.js","sourceRoot":"","sources":["../../src/tools/wiki-tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codesift-mcp",
3
- "version": "0.5.7",
3
+ "version": "0.5.9",
4
4
  "description": "MCP server for code intelligence — 146 tools for symbol search, call graph, semantic search, route tracing, community detection, LSP bridge, secret detection, conversation search, and Hono framework intelligence",
5
5
  "license": "BSL-1.1",
6
6
  "author": "Greg Laskowski",