@mohantn/gate-keeper 2.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.
Files changed (272) hide show
  1. package/.github/instructions/dotnet-api-integration.instructions.md +416 -0
  2. package/.github/instructions/dotnet-development.instructions.md +353 -0
  3. package/.github/instructions/dotnet-testing.instructions.md +406 -0
  4. package/.github/instructions/gate-keeper.instructions.md +91 -0
  5. package/.github/instructions/react-development.instructions.md +315 -0
  6. package/.github/instructions/react-testing-optimization.instructions.md +373 -0
  7. package/.github/instructions/uiux.instructions.md +261 -0
  8. package/LICENSE +21 -0
  9. package/README.md +181 -0
  10. package/dist/analyzer/coverage-analyzer.d.ts +126 -0
  11. package/dist/analyzer/coverage-analyzer.d.ts.map +1 -0
  12. package/dist/analyzer/coverage-analyzer.js +633 -0
  13. package/dist/analyzer/coverage-analyzer.js.map +1 -0
  14. package/dist/analyzer/csharp-analyzer.d.ts +28 -0
  15. package/dist/analyzer/csharp-analyzer.d.ts.map +1 -0
  16. package/dist/analyzer/csharp-analyzer.js +437 -0
  17. package/dist/analyzer/csharp-analyzer.js.map +1 -0
  18. package/dist/analyzer/pattern-detector.d.ts +5 -0
  19. package/dist/analyzer/pattern-detector.d.ts.map +1 -0
  20. package/dist/analyzer/pattern-detector.js +74 -0
  21. package/dist/analyzer/pattern-detector.js.map +1 -0
  22. package/dist/analyzer/refactoring-advisor.d.ts +7 -0
  23. package/dist/analyzer/refactoring-advisor.d.ts.map +1 -0
  24. package/dist/analyzer/refactoring-advisor.js +280 -0
  25. package/dist/analyzer/refactoring-advisor.js.map +1 -0
  26. package/dist/analyzer/sonar-eslint-runner.d.ts +3 -0
  27. package/dist/analyzer/sonar-eslint-runner.d.ts.map +1 -0
  28. package/dist/analyzer/sonar-eslint-runner.js +136 -0
  29. package/dist/analyzer/sonar-eslint-runner.js.map +1 -0
  30. package/dist/analyzer/sonar-rule-map.d.ts +19 -0
  31. package/dist/analyzer/sonar-rule-map.d.ts.map +1 -0
  32. package/dist/analyzer/sonar-rule-map.js +67 -0
  33. package/dist/analyzer/sonar-rule-map.js.map +1 -0
  34. package/dist/analyzer/string-analyzer.d.ts +27 -0
  35. package/dist/analyzer/string-analyzer.d.ts.map +1 -0
  36. package/dist/analyzer/string-analyzer.js +274 -0
  37. package/dist/analyzer/string-analyzer.js.map +1 -0
  38. package/dist/analyzer/typescript-analyzer.d.ts +27 -0
  39. package/dist/analyzer/typescript-analyzer.d.ts.map +1 -0
  40. package/dist/analyzer/typescript-analyzer.js +437 -0
  41. package/dist/analyzer/typescript-analyzer.js.map +1 -0
  42. package/dist/analyzer/universal-analyzer.d.ts +10 -0
  43. package/dist/analyzer/universal-analyzer.d.ts.map +1 -0
  44. package/dist/analyzer/universal-analyzer.js +155 -0
  45. package/dist/analyzer/universal-analyzer.js.map +1 -0
  46. package/dist/cache/quality-cache.d.ts +119 -0
  47. package/dist/cache/quality-cache.d.ts.map +1 -0
  48. package/dist/cache/quality-cache.js +130 -0
  49. package/dist/cache/quality-cache.js.map +1 -0
  50. package/dist/cache/sqlite-cache.d.ts +43 -0
  51. package/dist/cache/sqlite-cache.d.ts.map +1 -0
  52. package/dist/cache/sqlite-cache.js +346 -0
  53. package/dist/cache/sqlite-cache.js.map +1 -0
  54. package/dist/cli/query-repl.d.ts +37 -0
  55. package/dist/cli/query-repl.d.ts.map +1 -0
  56. package/dist/cli/query-repl.js +298 -0
  57. package/dist/cli/query-repl.js.map +1 -0
  58. package/dist/cli/repl-algorithms.d.ts +49 -0
  59. package/dist/cli/repl-algorithms.d.ts.map +1 -0
  60. package/dist/cli/repl-algorithms.js +147 -0
  61. package/dist/cli/repl-algorithms.js.map +1 -0
  62. package/dist/cli/setup-core.d.ts +38 -0
  63. package/dist/cli/setup-core.d.ts.map +1 -0
  64. package/dist/cli/setup-core.js +427 -0
  65. package/dist/cli/setup-core.js.map +1 -0
  66. package/dist/cli/setup.d.ts +25 -0
  67. package/dist/cli/setup.d.ts.map +1 -0
  68. package/dist/cli/setup.js +159 -0
  69. package/dist/cli/setup.js.map +1 -0
  70. package/dist/cli-entry.d.ts +19 -0
  71. package/dist/cli-entry.d.ts.map +1 -0
  72. package/dist/cli-entry.js +178 -0
  73. package/dist/cli-entry.js.map +1 -0
  74. package/dist/daemon/watch-mode.d.ts +41 -0
  75. package/dist/daemon/watch-mode.d.ts.map +1 -0
  76. package/dist/daemon/watch-mode.js +163 -0
  77. package/dist/daemon/watch-mode.js.map +1 -0
  78. package/dist/daemon.d.ts +24 -0
  79. package/dist/daemon.d.ts.map +1 -0
  80. package/dist/daemon.js +357 -0
  81. package/dist/daemon.js.map +1 -0
  82. package/dist/github/app.d.ts +34 -0
  83. package/dist/github/app.d.ts.map +1 -0
  84. package/dist/github/app.js +261 -0
  85. package/dist/github/app.js.map +1 -0
  86. package/dist/github/commenter.d.ts +67 -0
  87. package/dist/github/commenter.d.ts.map +1 -0
  88. package/dist/github/commenter.js +155 -0
  89. package/dist/github/commenter.js.map +1 -0
  90. package/dist/graph/dependency-graph.d.ts +28 -0
  91. package/dist/graph/dependency-graph.d.ts.map +1 -0
  92. package/dist/graph/dependency-graph.js +198 -0
  93. package/dist/graph/dependency-graph.js.map +1 -0
  94. package/dist/graph/global-graph.d.ts +65 -0
  95. package/dist/graph/global-graph.d.ts.map +1 -0
  96. package/dist/graph/global-graph.js +153 -0
  97. package/dist/graph/global-graph.js.map +1 -0
  98. package/dist/graph/graph-algorithms.d.ts +90 -0
  99. package/dist/graph/graph-algorithms.d.ts.map +1 -0
  100. package/dist/graph/graph-algorithms.js +180 -0
  101. package/dist/graph/graph-algorithms.js.map +1 -0
  102. package/dist/graph/graph-export.d.ts +68 -0
  103. package/dist/graph/graph-export.d.ts.map +1 -0
  104. package/dist/graph/graph-export.js +264 -0
  105. package/dist/graph/graph-export.js.map +1 -0
  106. package/dist/graph/graph-report.d.ts +34 -0
  107. package/dist/graph/graph-report.d.ts.map +1 -0
  108. package/dist/graph/graph-report.js +136 -0
  109. package/dist/graph/graph-report.js.map +1 -0
  110. package/dist/graph/graph-summary.d.ts +68 -0
  111. package/dist/graph/graph-summary.d.ts.map +1 -0
  112. package/dist/graph/graph-summary.js +213 -0
  113. package/dist/graph/graph-summary.js.map +1 -0
  114. package/dist/graph/graphify-ignore.d.ts +32 -0
  115. package/dist/graph/graphify-ignore.d.ts.map +1 -0
  116. package/dist/graph/graphify-ignore.js +124 -0
  117. package/dist/graph/graphify-ignore.js.map +1 -0
  118. package/dist/graph/question-suggester.d.ts +30 -0
  119. package/dist/graph/question-suggester.d.ts.map +1 -0
  120. package/dist/graph/question-suggester.js +113 -0
  121. package/dist/graph/question-suggester.js.map +1 -0
  122. package/dist/graph/relationship-extractor.d.ts +40 -0
  123. package/dist/graph/relationship-extractor.d.ts.map +1 -0
  124. package/dist/graph/relationship-extractor.js +254 -0
  125. package/dist/graph/relationship-extractor.js.map +1 -0
  126. package/dist/graph/relationship-types.d.ts +24 -0
  127. package/dist/graph/relationship-types.d.ts.map +1 -0
  128. package/dist/graph/relationship-types.js +21 -0
  129. package/dist/graph/relationship-types.js.map +1 -0
  130. package/dist/graph/surprising-connections.d.ts +39 -0
  131. package/dist/graph/surprising-connections.d.ts.map +1 -0
  132. package/dist/graph/surprising-connections.js +127 -0
  133. package/dist/graph/surprising-connections.js.map +1 -0
  134. package/dist/hook-pre-tool-use.d.ts +14 -0
  135. package/dist/hook-pre-tool-use.d.ts.map +1 -0
  136. package/dist/hook-pre-tool-use.js +167 -0
  137. package/dist/hook-pre-tool-use.js.map +1 -0
  138. package/dist/hook-receiver.d.ts +29 -0
  139. package/dist/hook-receiver.d.ts.map +1 -0
  140. package/dist/hook-receiver.js +327 -0
  141. package/dist/hook-receiver.js.map +1 -0
  142. package/dist/hooks/git-hooks.d.ts +30 -0
  143. package/dist/hooks/git-hooks.d.ts.map +1 -0
  144. package/dist/hooks/git-hooks.js +179 -0
  145. package/dist/hooks/git-hooks.js.map +1 -0
  146. package/dist/mcp/cache-preload.d.ts +29 -0
  147. package/dist/mcp/cache-preload.d.ts.map +1 -0
  148. package/dist/mcp/cache-preload.js +103 -0
  149. package/dist/mcp/cache-preload.js.map +1 -0
  150. package/dist/mcp/handlers/analysis.d.ts +4 -0
  151. package/dist/mcp/handlers/analysis.d.ts.map +1 -0
  152. package/dist/mcp/handlers/analysis.js +196 -0
  153. package/dist/mcp/handlers/analysis.js.map +1 -0
  154. package/dist/mcp/handlers/context.d.ts +25 -0
  155. package/dist/mcp/handlers/context.d.ts.map +1 -0
  156. package/dist/mcp/handlers/context.js +382 -0
  157. package/dist/mcp/handlers/context.js.map +1 -0
  158. package/dist/mcp/handlers/graph-intelligence.d.ts +26 -0
  159. package/dist/mcp/handlers/graph-intelligence.d.ts.map +1 -0
  160. package/dist/mcp/handlers/graph-intelligence.js +371 -0
  161. package/dist/mcp/handlers/graph-intelligence.js.map +1 -0
  162. package/dist/mcp/handlers/graph-query.d.ts +25 -0
  163. package/dist/mcp/handlers/graph-query.d.ts.map +1 -0
  164. package/dist/mcp/handlers/graph-query.js +410 -0
  165. package/dist/mcp/handlers/graph-query.js.map +1 -0
  166. package/dist/mcp/handlers/graph.d.ts +5 -0
  167. package/dist/mcp/handlers/graph.d.ts.map +1 -0
  168. package/dist/mcp/handlers/graph.js +283 -0
  169. package/dist/mcp/handlers/graph.js.map +1 -0
  170. package/dist/mcp/handlers/impact-format.d.ts +9 -0
  171. package/dist/mcp/handlers/impact-format.d.ts.map +1 -0
  172. package/dist/mcp/handlers/impact-format.js +189 -0
  173. package/dist/mcp/handlers/impact-format.js.map +1 -0
  174. package/dist/mcp/handlers/impact.d.ts +4 -0
  175. package/dist/mcp/handlers/impact.d.ts.map +1 -0
  176. package/dist/mcp/handlers/impact.js +139 -0
  177. package/dist/mcp/handlers/impact.js.map +1 -0
  178. package/dist/mcp/handlers/improvement.d.ts +4 -0
  179. package/dist/mcp/handlers/improvement.d.ts.map +1 -0
  180. package/dist/mcp/handlers/improvement.js +136 -0
  181. package/dist/mcp/handlers/improvement.js.map +1 -0
  182. package/dist/mcp/handlers/index.d.ts +14 -0
  183. package/dist/mcp/handlers/index.d.ts.map +1 -0
  184. package/dist/mcp/handlers/index.js +36 -0
  185. package/dist/mcp/handlers/index.js.map +1 -0
  186. package/dist/mcp/handlers/platform-installer.d.ts +10 -0
  187. package/dist/mcp/handlers/platform-installer.d.ts.map +1 -0
  188. package/dist/mcp/handlers/platform-installer.js +168 -0
  189. package/dist/mcp/handlers/platform-installer.js.map +1 -0
  190. package/dist/mcp/handlers/pr-review.d.ts +33 -0
  191. package/dist/mcp/handlers/pr-review.d.ts.map +1 -0
  192. package/dist/mcp/handlers/pr-review.js +170 -0
  193. package/dist/mcp/handlers/pr-review.js.map +1 -0
  194. package/dist/mcp/handlers/shared.d.ts +20 -0
  195. package/dist/mcp/handlers/shared.d.ts.map +1 -0
  196. package/dist/mcp/handlers/shared.js +27 -0
  197. package/dist/mcp/handlers/shared.js.map +1 -0
  198. package/dist/mcp/handlers/types.d.ts +46 -0
  199. package/dist/mcp/handlers/types.d.ts.map +1 -0
  200. package/dist/mcp/handlers/types.js +3 -0
  201. package/dist/mcp/handlers/types.js.map +1 -0
  202. package/dist/mcp/helpers.d.ts +36 -0
  203. package/dist/mcp/helpers.d.ts.map +1 -0
  204. package/dist/mcp/helpers.js +199 -0
  205. package/dist/mcp/helpers.js.map +1 -0
  206. package/dist/mcp/installer.d.ts +22 -0
  207. package/dist/mcp/installer.d.ts.map +1 -0
  208. package/dist/mcp/installer.js +341 -0
  209. package/dist/mcp/installer.js.map +1 -0
  210. package/dist/mcp/server.d.ts +111 -0
  211. package/dist/mcp/server.d.ts.map +1 -0
  212. package/dist/mcp/server.js +216 -0
  213. package/dist/mcp/server.js.map +1 -0
  214. package/dist/mcp/token-tracker.d.ts +47 -0
  215. package/dist/mcp/token-tracker.d.ts.map +1 -0
  216. package/dist/mcp/token-tracker.js +93 -0
  217. package/dist/mcp/token-tracker.js.map +1 -0
  218. package/dist/quality-loop/file-lock.d.ts +12 -0
  219. package/dist/quality-loop/file-lock.d.ts.map +1 -0
  220. package/dist/quality-loop/file-lock.js +38 -0
  221. package/dist/quality-loop/file-lock.js.map +1 -0
  222. package/dist/quality-loop/fix-worker.d.ts +44 -0
  223. package/dist/quality-loop/fix-worker.d.ts.map +1 -0
  224. package/dist/quality-loop/fix-worker.js +414 -0
  225. package/dist/quality-loop/fix-worker.js.map +1 -0
  226. package/dist/quality-loop/orchestrator.d.ts +137 -0
  227. package/dist/quality-loop/orchestrator.d.ts.map +1 -0
  228. package/dist/quality-loop/orchestrator.js +894 -0
  229. package/dist/quality-loop/orchestrator.js.map +1 -0
  230. package/dist/quality-loop/queue-manager.d.ts +45 -0
  231. package/dist/quality-loop/queue-manager.d.ts.map +1 -0
  232. package/dist/quality-loop/queue-manager.js +173 -0
  233. package/dist/quality-loop/queue-manager.js.map +1 -0
  234. package/dist/rating/rating-calculator.d.ts +15 -0
  235. package/dist/rating/rating-calculator.d.ts.map +1 -0
  236. package/dist/rating/rating-calculator.js +136 -0
  237. package/dist/rating/rating-calculator.js.map +1 -0
  238. package/dist/types/agent.d.ts +49 -0
  239. package/dist/types/agent.d.ts.map +1 -0
  240. package/dist/types/agent.js +7 -0
  241. package/dist/types/agent.js.map +1 -0
  242. package/dist/types.d.ts +156 -0
  243. package/dist/types.d.ts.map +1 -0
  244. package/dist/types.js +3 -0
  245. package/dist/types.js.map +1 -0
  246. package/dist/util/fix-text.d.ts +7 -0
  247. package/dist/util/fix-text.d.ts.map +1 -0
  248. package/dist/util/fix-text.js +13 -0
  249. package/dist/util/fix-text.js.map +1 -0
  250. package/dist/viz/graph-viz.d.ts +40 -0
  251. package/dist/viz/graph-viz.d.ts.map +1 -0
  252. package/dist/viz/graph-viz.js +332 -0
  253. package/dist/viz/graph-viz.js.map +1 -0
  254. package/dist/viz/viz-helpers.d.ts +13 -0
  255. package/dist/viz/viz-helpers.d.ts.map +1 -0
  256. package/dist/viz/viz-helpers.js +134 -0
  257. package/dist/viz/viz-helpers.js.map +1 -0
  258. package/dist/viz/viz-routes.d.ts +28 -0
  259. package/dist/viz/viz-routes.d.ts.map +1 -0
  260. package/dist/viz/viz-routes.js +333 -0
  261. package/dist/viz/viz-routes.js.map +1 -0
  262. package/dist/viz/viz-scanner.d.ts +20 -0
  263. package/dist/viz/viz-scanner.d.ts.map +1 -0
  264. package/dist/viz/viz-scanner.js +241 -0
  265. package/dist/viz/viz-scanner.js.map +1 -0
  266. package/dist/viz/viz-server.d.ts +38 -0
  267. package/dist/viz/viz-server.d.ts.map +1 -0
  268. package/dist/viz/viz-server.js +240 -0
  269. package/dist/viz/viz-server.js.map +1 -0
  270. package/package.json +89 -0
  271. package/scripts/postinstall.js +28 -0
  272. package/scripts/setup.sh +113 -0
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.handleImpactAnalysis = handleImpactAnalysis;
37
+ exports.handlePredictImpactWithRemediation = handlePredictImpactWithRemediation;
38
+ const path = __importStar(require("path"));
39
+ const helpers_1 = require("../helpers");
40
+ const shared_1 = require("./shared");
41
+ const impact_format_1 = require("./impact-format");
42
+ // ── Graph traversal helpers ─────────────────────────────────
43
+ function buildReverseAdjacency(graph) {
44
+ const reverseAdj = new Map();
45
+ for (const edge of graph.edges) {
46
+ const sources = reverseAdj.get(edge.target) ?? [];
47
+ sources.push(edge.source);
48
+ reverseAdj.set(edge.target, sources);
49
+ }
50
+ return reverseAdj;
51
+ }
52
+ function collectTransitiveDependents(reverseAdj, filePath) {
53
+ const direct = new Set(reverseAdj.get(filePath) ?? []);
54
+ const all = new Set();
55
+ const stack = [...direct];
56
+ while (stack.length > 0) {
57
+ const current = stack.pop();
58
+ if (all.has(current))
59
+ continue;
60
+ all.add(current);
61
+ for (const next of reverseAdj.get(current) ?? []) {
62
+ if (!all.has(next))
63
+ stack.push(next);
64
+ }
65
+ }
66
+ return { direct, all };
67
+ }
68
+ // ── Handlers ───────────────────────────────────────────────
69
+ async function handleImpactAnalysis(args) {
70
+ const filePath = String(args.file_path ?? '');
71
+ if (!filePath)
72
+ return (0, shared_1.text)('Error: file_path is required.');
73
+ const repo = String(args.repo ?? (0, helpers_1.findGitRoot)(path.dirname(filePath)));
74
+ const encodedRepo = encodeURIComponent(repo);
75
+ const graphRaw = await (0, helpers_1.fetchDaemonApi)(`/api/graph?repo=${encodedRepo}`);
76
+ if (!graphRaw) {
77
+ return (0, shared_1.text)('Error: Gate Keeper daemon is not running. Start it with `npm run daemon` or `npm run dev`.');
78
+ }
79
+ const graph = graphRaw;
80
+ const reverseAdj = buildReverseAdjacency(graph);
81
+ const { direct: directDeps, all: allDeps } = collectTransitiveDependents(reverseAdj, filePath);
82
+ const transitiveDeps = [...allDeps].filter(d => !directDeps.has(d));
83
+ const lines = [
84
+ `## Impact Analysis: ${path.basename(filePath)}`,
85
+ `**Path:** ${filePath}`,
86
+ `**Direct dependents:** ${directDeps.size} | **Total affected (transitive):** ${allDeps.size}`,
87
+ '',
88
+ ...(0, impact_format_1.renderDirectDependents)(graph, directDeps, repo),
89
+ ...(0, impact_format_1.renderTransitiveDependents)(graph, transitiveDeps, repo),
90
+ ...(0, impact_format_1.renderAtRiskDependents)(graph, allDeps, repo),
91
+ ];
92
+ if (allDeps.size === 0) {
93
+ lines.push('No other files depend on this file. Changes here have no downstream impact.');
94
+ }
95
+ const affectedNodes = graph.nodes.filter(n => allDeps.has(n.id));
96
+ const atRisk = affectedNodes.filter(n => n.rating < 6).sort((a, b) => a.rating - b.rating);
97
+ const data = {
98
+ filePath,
99
+ direct: [...directDeps],
100
+ transitive: transitiveDeps,
101
+ atRisk,
102
+ };
103
+ return (0, shared_1.envelope)('get_impact_analysis', data, lines.join('\n'));
104
+ }
105
+ async function handlePredictImpactWithRemediation(args) {
106
+ const filePath = String(args.file_path ?? '');
107
+ if (!filePath)
108
+ return (0, shared_1.text)('Error: file_path is required.');
109
+ const repo = String(args.repo ?? (0, helpers_1.findGitRoot)(path.dirname(filePath)));
110
+ const encodedRepo = encodeURIComponent(repo);
111
+ const [graphRaw, cyclesRaw] = await Promise.all([
112
+ (0, helpers_1.fetchDaemonApi)(`/api/graph?repo=${encodedRepo}`),
113
+ (0, helpers_1.fetchDaemonApi)(`/api/cycles?repo=${encodedRepo}`),
114
+ ]);
115
+ if (!graphRaw) {
116
+ return (0, shared_1.text)('Error: Gate Keeper daemon is not running. Start it with `npm run daemon` or `npm run dev`.');
117
+ }
118
+ const graph = graphRaw;
119
+ const cycles = (cyclesRaw ?? []);
120
+ const reverseAdj = buildReverseAdjacency(graph);
121
+ const { direct: directDeps, all: allDeps } = collectTransitiveDependents(reverseAdj, filePath);
122
+ const transitiveDeps = [...allDeps].filter(d => !directDeps.has(d));
123
+ const remediation = await (0, impact_format_1.renderRemediationPlan)(graph, allDeps, cycles, repo);
124
+ const plan = await (0, impact_format_1.buildRemediationPlan)(filePath, graph, directDeps, allDeps);
125
+ const lines = [
126
+ `## Impact + Remediation: ${path.basename(filePath)}`,
127
+ `**Path:** ${filePath}`,
128
+ `**Direct dependents:** ${directDeps.size} | **Total affected (transitive):** ${allDeps.size}`,
129
+ '',
130
+ ...(0, impact_format_1.renderDirectDependents)(graph, directDeps, repo),
131
+ ...(0, impact_format_1.renderTransitiveDependents)(graph, transitiveDeps, repo),
132
+ ...remediation,
133
+ ];
134
+ if (allDeps.size === 0) {
135
+ lines.push('No other files depend on this file. Changes here have no downstream impact.');
136
+ }
137
+ return (0, shared_1.envelope)('predict_impact_with_remediation', plan, lines.join('\n'));
138
+ }
139
+ //# sourceMappingURL=impact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impact.js","sourceRoot":"","sources":["../../../src/mcp/handlers/impact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { McpResponse } from './shared';
2
+ export declare function handleSuggestRefactoring(args: Record<string, unknown>): Promise<McpResponse>;
3
+ export declare function handleViolationPatterns(args: Record<string, unknown>): Promise<McpResponse>;
4
+ //# sourceMappingURL=improvement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improvement.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/improvement.ts"],"names":[],"mappings":"AAQA,OAAO,EAAkB,WAAW,EAAE,MAAM,UAAU,CAAC;AAUvD,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAiDlG;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CA4DjG"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.handleSuggestRefactoring = handleSuggestRefactoring;
37
+ exports.handleViolationPatterns = handleViolationPatterns;
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const universal_analyzer_1 = require("../../analyzer/universal-analyzer");
41
+ const refactoring_advisor_1 = require("../../analyzer/refactoring-advisor");
42
+ const pattern_detector_1 = require("../../analyzer/pattern-detector");
43
+ const helpers_1 = require("../helpers");
44
+ const shared_1 = require("./shared");
45
+ // ── Shared instances ───────────────────────────────────────
46
+ const fileAnalyzer = new universal_analyzer_1.UniversalAnalyzer();
47
+ const refactoringAdvisor = new refactoring_advisor_1.RefactoringAdvisor();
48
+ const patternDetector = new pattern_detector_1.PatternDetector();
49
+ // ── Handlers ───────────────────────────────────────────────
50
+ async function handleSuggestRefactoring(args) {
51
+ const filePath = String(args.file_path ?? '');
52
+ if (!filePath)
53
+ return (0, shared_1.text)('Error: file_path is required.');
54
+ if (!fs.existsSync(filePath))
55
+ return (0, shared_1.text)(`Error: File not found: ${filePath}`);
56
+ if (!fileAnalyzer.isSupportedFile(filePath)) {
57
+ return (0, shared_1.text)('Error: Unsupported file type. Supported: .ts, .tsx, .jsx, .js, .cs');
58
+ }
59
+ const analysis = await fileAnalyzer.analyze(filePath);
60
+ if (!analysis)
61
+ return (0, shared_1.text)('Error: Analysis returned no results.');
62
+ const repo = (0, helpers_1.findGitRoot)(path.dirname(filePath));
63
+ const encodedRepo = encodeURIComponent(repo);
64
+ const cyclesRaw = await (0, helpers_1.fetchDaemonApi)(`/api/cycles?repo=${encodedRepo}`);
65
+ const cycles = (cyclesRaw ?? []);
66
+ const hints = refactoringAdvisor.suggest(analysis, cycles);
67
+ if (hints.length === 0) {
68
+ return (0, shared_1.envelope)('suggest_refactoring', { file: analysis, hints: [], rating: analysis.rating, totalPotentialGain: 0 }, `## Refactoring Suggestions: ${path.basename(filePath)}\n\nNo refactoring hints — file looks clean!`);
69
+ }
70
+ const lines = [
71
+ `## Refactoring Suggestions: ${path.basename(filePath)}`,
72
+ `**Current Rating: ${analysis.rating}/10** | **${hints.length} hint(s) found**`,
73
+ `**Total Potential Gain: +${Math.round(hints.reduce((s, h) => s + h.estimatedRatingGain, 0) * 10) / 10} pts**`,
74
+ '',
75
+ ];
76
+ hints.forEach((hint, i) => {
77
+ const priorityIcon = hint.priority === 'high' ? '🔴' : hint.priority === 'medium' ? '🟡' : '🟢';
78
+ lines.push(`### ${i + 1}. ${hint.patternName} ${priorityIcon}`);
79
+ lines.push(`**Pattern:** \`${hint.violationType}\` | **Estimated Gain:** +${hint.estimatedRatingGain} pts`);
80
+ lines.push(`**Why:** ${hint.rationale}`);
81
+ lines.push('**Steps:**');
82
+ hint.steps.forEach((step, j) => lines.push(`${j + 1}. ${step}`));
83
+ lines.push('');
84
+ });
85
+ const totalPotentialGain = Math.round(hints.reduce((s, h) => s + h.estimatedRatingGain, 0) * 10) / 10;
86
+ return (0, shared_1.envelope)('suggest_refactoring', { file: analysis, hints, rating: analysis.rating, totalPotentialGain }, lines.join('\n'));
87
+ }
88
+ async function handleViolationPatterns(args) {
89
+ const repo = String(args.repo ?? (0, helpers_1.findGitRoot)(process.cwd()));
90
+ const encodedRepo = encodeURIComponent(repo);
91
+ let reports = null;
92
+ const daemonRaw = await (0, helpers_1.fetchDaemonApi)(`/api/patterns?repo=${encodedRepo}`);
93
+ if (daemonRaw && Array.isArray(daemonRaw)) {
94
+ reports = daemonRaw;
95
+ }
96
+ if (!reports) {
97
+ const files = (0, helpers_1.findSourceFiles)(repo, 200);
98
+ const analyses = [];
99
+ for (const f of files) {
100
+ const a = await fileAnalyzer.analyze(f);
101
+ if (a)
102
+ analyses.push(a);
103
+ }
104
+ reports = patternDetector.detect(analyses);
105
+ }
106
+ if (reports.length === 0) {
107
+ return (0, shared_1.envelope)('get_violation_patterns', { repo, patterns: [], totalGain: 0, fixOrder: [] }, '## Violation Patterns\n\nNo violations found across the codebase. Everything looks clean!');
108
+ }
109
+ const totalGain = Math.round(reports.reduce((s, r) => s + r.estimatedRatingGain, 0) * 10) / 10;
110
+ const lines = [
111
+ `## Violation Patterns — ${path.basename(repo)}`,
112
+ `**${reports.length} distinct violation types** across the codebase | **Total estimated gain if all fixed: +${totalGain} pts**`,
113
+ '',
114
+ '| Rank | Pattern | Severity | Files | Occurrences | Est. Gain |',
115
+ '|------|---------|----------|-------|-------------|-----------|',
116
+ ];
117
+ reports.forEach((r, i) => {
118
+ const sev = r.severity === 'error' ? '🔴 error' : r.severity === 'warning' ? '🟡 warning' : '🟢 info';
119
+ lines.push(`| ${i + 1} | \`${r.violationType}\` | ${sev} | ${r.fileCount} | ${r.totalOccurrences} | +${r.estimatedRatingGain} |`);
120
+ });
121
+ lines.push('');
122
+ lines.push('### Module-Wide Fix Suggestions (top 5 by impact)');
123
+ for (const r of reports.slice(0, 5)) {
124
+ lines.push(`**\`${r.violationType}\`** — ${r.moduleSuggestion}`);
125
+ lines.push(` Affects: ${r.affectedFiles.slice(0, 3).map(f => path.relative(repo, f)).join(', ')}${r.fileCount > 3 ? ` ... and ${r.fileCount - 3} more` : ''}`);
126
+ lines.push('');
127
+ }
128
+ // Aggregate files across all patterns to give the queue a single fix order.
129
+ const fileSet = new Set();
130
+ for (const r of reports)
131
+ for (const f of r.affectedFiles)
132
+ fileSet.add(f);
133
+ const fixOrder = [...fileSet];
134
+ return (0, shared_1.envelope)('get_violation_patterns', { repo, patterns: reports, totalGain, fixOrder }, lines.join('\n'));
135
+ }
136
+ //# sourceMappingURL=improvement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"improvement.js","sourceRoot":"","sources":["../../../src/mcp/handlers/improvement.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * MCP Tool Handlers — barrel module
3
+ *
4
+ * Re-exports handler functions and provides the tool-call router
5
+ * used by the JSON-RPC message handler.
6
+ */
7
+ import { text, McpResponse } from './shared';
8
+ import { handleCodebaseHealth, handleQualityRules } from './analysis';
9
+ import { handleFileContext, handleDependencyGraph, handleGraphSummary } from './graph';
10
+ export { text };
11
+ export { handleCodebaseHealth, handleQualityRules };
12
+ export { handleFileContext, handleDependencyGraph, handleGraphSummary };
13
+ export declare function handleToolCall(name: string, args: Record<string, unknown>): Promise<McpResponse>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC;AAExE,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,WAAW,CAAC,CAetB"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Tool Handlers — barrel module
4
+ *
5
+ * Re-exports handler functions and provides the tool-call router
6
+ * used by the JSON-RPC message handler.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.handleGraphSummary = exports.handleDependencyGraph = exports.handleFileContext = exports.handleQualityRules = exports.handleCodebaseHealth = exports.text = void 0;
10
+ exports.handleToolCall = handleToolCall;
11
+ const shared_1 = require("./shared");
12
+ Object.defineProperty(exports, "text", { enumerable: true, get: function () { return shared_1.text; } });
13
+ const analysis_1 = require("./analysis");
14
+ Object.defineProperty(exports, "handleCodebaseHealth", { enumerable: true, get: function () { return analysis_1.handleCodebaseHealth; } });
15
+ Object.defineProperty(exports, "handleQualityRules", { enumerable: true, get: function () { return analysis_1.handleQualityRules; } });
16
+ const graph_1 = require("./graph");
17
+ Object.defineProperty(exports, "handleFileContext", { enumerable: true, get: function () { return graph_1.handleFileContext; } });
18
+ Object.defineProperty(exports, "handleDependencyGraph", { enumerable: true, get: function () { return graph_1.handleDependencyGraph; } });
19
+ Object.defineProperty(exports, "handleGraphSummary", { enumerable: true, get: function () { return graph_1.handleGraphSummary; } });
20
+ async function handleToolCall(name, args) {
21
+ switch (name) {
22
+ case 'get_codebase_health':
23
+ return (0, analysis_1.handleCodebaseHealth)(args);
24
+ case 'get_quality_rules':
25
+ return (0, analysis_1.handleQualityRules)();
26
+ case 'get_file_context':
27
+ return (0, graph_1.handleFileContext)(args);
28
+ case 'get_dependency_graph':
29
+ return (0, graph_1.handleDependencyGraph)(args);
30
+ case 'get_graph_summary':
31
+ return (0, graph_1.handleGraphSummary)(args);
32
+ default:
33
+ return (0, shared_1.text)(`Unknown tool: ${name}`);
34
+ }
35
+ }
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/handlers/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAiBH,wCAkBC;AAjCD,qCAA6C;AAWpC,qFAXA,aAAI,OAWA;AAVb,yCAGoB;AAQX,qGAVP,+BAAoB,OAUO;AAAE,mGAT7B,6BAAkB,OAS6B;AAPjD,mCAIiB;AAIR,kGAPP,yBAAiB,OAOO;AAAE,sGAN1B,6BAAqB,OAM0B;AAAE,mGALjD,0BAAkB,OAKiD;AAE9D,KAAK,UAAU,cAAc,CAClC,IAAY,EACZ,IAA6B;IAE7B,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,qBAAqB;YACxB,OAAO,IAAA,+BAAoB,EAAC,IAAI,CAAC,CAAC;QACpC,KAAK,mBAAmB;YACtB,OAAO,IAAA,6BAAkB,GAAE,CAAC;QAC9B,KAAK,kBAAkB;YACrB,OAAO,IAAA,yBAAiB,EAAC,IAAI,CAAC,CAAC;QACjC,KAAK,sBAAsB;YACzB,OAAO,IAAA,6BAAqB,EAAC,IAAI,CAAC,CAAC;QACrC,KAAK,mBAAmB;YACtB,OAAO,IAAA,0BAAkB,EAAC,IAAI,CAAC,CAAC;QAClC;YACE,OAAO,IAAA,aAAI,EAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * MCP handlers for platform integration and git hook installation.
3
+ *
4
+ * install_platform — writes AI assistant config files (CLAUDE.md, copilot-instructions.md, etc.)
5
+ * install_git_hooks — installs post-commit / post-checkout hooks into .git/hooks/
6
+ */
7
+ import { McpResponse } from './shared';
8
+ export declare function handleInstallPlatform(args: Record<string, unknown>): Promise<McpResponse>;
9
+ export declare function handleInstallGitHooks(args: Record<string, unknown>): Promise<McpResponse>;
10
+ //# sourceMappingURL=platform-installer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-installer.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/platform-installer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAkB,WAAW,EAAE,MAAM,UAAU,CAAC;AAQvD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAyD/F;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAwC/F"}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ /**
3
+ * MCP handlers for platform integration and git hook installation.
4
+ *
5
+ * install_platform — writes AI assistant config files (CLAUDE.md, copilot-instructions.md, etc.)
6
+ * install_git_hooks — installs post-commit / post-checkout hooks into .git/hooks/
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.handleInstallPlatform = handleInstallPlatform;
43
+ exports.handleInstallGitHooks = handleInstallGitHooks;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const helpers_1 = require("../helpers");
47
+ const shared_1 = require("./shared");
48
+ const installer_1 = require("../installer");
49
+ const git_hooks_1 = require("../../hooks/git-hooks");
50
+ const GATE_KEEPER_DIR = path.join(__dirname, '..', '..', '..');
51
+ const SUPPORTED_PLATFORMS = ['claude-code', 'copilot', 'cursor', 'vscode', 'github-action'];
52
+ async function handleInstallPlatform(args) {
53
+ const platform = String(args.platform ?? '');
54
+ if (!SUPPORTED_PLATFORMS.includes(platform)) {
55
+ return (0, shared_1.text)(`Error: unknown platform "${platform}". ` +
56
+ `Supported: ${SUPPORTED_PLATFORMS.join(', ')}.`);
57
+ }
58
+ const repo = String(args.repo ?? (0, helpers_1.findGitRoot)(process.cwd()));
59
+ const force = Boolean(args.force ?? false);
60
+ const gkPath = String(args.gate_keeper_path ?? GATE_KEEPER_DIR);
61
+ const config = (0, installer_1.getPlatformConfig)(platform, repo, gkPath);
62
+ const targetPath = config.filePath;
63
+ const exists = fs.existsSync(targetPath);
64
+ if (exists && !force && !config.append) {
65
+ return (0, shared_1.text)(`File already exists: ${targetPath}\n` +
66
+ `Pass force=true to overwrite, or use append mode if available.`);
67
+ }
68
+ try {
69
+ const dir = path.dirname(targetPath);
70
+ fs.mkdirSync(dir, { recursive: true });
71
+ if (config.append && exists) {
72
+ const current = fs.readFileSync(targetPath, 'utf8');
73
+ if (current.includes('Gate Keeper')) {
74
+ return (0, shared_1.text)(`Gate Keeper section already present in ${targetPath}. No changes made.`);
75
+ }
76
+ fs.appendFileSync(targetPath, config.content, 'utf8');
77
+ }
78
+ else {
79
+ fs.writeFileSync(targetPath, config.content, 'utf8');
80
+ }
81
+ }
82
+ catch (err) {
83
+ const msg = err instanceof Error ? err.message : String(err);
84
+ return (0, shared_1.text)(`Error writing ${targetPath}: ${msg}`);
85
+ }
86
+ const action = config.append ? 'appended to' : (exists ? 'updated' : 'created');
87
+ const lines = [
88
+ `## Platform Integration: ${platform}`,
89
+ `**${action}:** ${targetPath}`,
90
+ `**Description:** ${config.description}`,
91
+ '',
92
+ config.append
93
+ ? `Content appended to existing file.`
94
+ : `File written (${config.content.length} bytes).`,
95
+ '',
96
+ '**Next steps:**',
97
+ ...nextSteps(platform, repo),
98
+ ];
99
+ return (0, shared_1.envelope)('install_platform', { platform, filePath: targetPath, action }, lines.join('\n'));
100
+ }
101
+ async function handleInstallGitHooks(args) {
102
+ const repo = String(args.repo ?? (0, helpers_1.findGitRoot)(process.cwd()));
103
+ const force = Boolean(args.force ?? false);
104
+ const gkPath = String(args.gate_keeper_path ?? GATE_KEEPER_DIR);
105
+ let results;
106
+ try {
107
+ results = (0, git_hooks_1.installGitHooks)(repo, gkPath, force);
108
+ }
109
+ catch (err) {
110
+ const msg = err instanceof Error ? err.message : String(err);
111
+ return (0, shared_1.text)(`Error installing git hooks: ${msg}`);
112
+ }
113
+ const created = results.filter(r => r.action === 'created').length;
114
+ const updated = results.filter(r => r.action === 'updated').length;
115
+ const skipped = results.filter(r => r.action === 'skipped').length;
116
+ const lines = [
117
+ '## Git Hooks Installation',
118
+ `**Repository:** ${repo}`,
119
+ `**Created:** ${created} | **Updated:** ${updated} | **Skipped:** ${skipped}`,
120
+ '',
121
+ '| Hook | Path | Action |',
122
+ '|------|------|--------|',
123
+ ...results.map(r => `| ${r.hook} | ${path.relative(repo, r.path)} | ${r.action} |`),
124
+ '',
125
+ '**Merge driver (optional):**',
126
+ 'To prevent merge conflicts in graph.json, add to .gitattributes:',
127
+ '```',
128
+ (0, git_hooks_1.gitAttributesEntry)().trim(),
129
+ '```',
130
+ 'And to .git/config:',
131
+ '```',
132
+ (0, git_hooks_1.gitConfigEntry)(gkPath).trim(),
133
+ '```',
134
+ '',
135
+ '_Hooks run non-blocking after commits/checkouts — they do not slow down git operations._',
136
+ ];
137
+ return (0, shared_1.envelope)('install_git_hooks', { repo, results }, lines.join('\n'));
138
+ }
139
+ function nextSteps(platform, repo) {
140
+ switch (platform) {
141
+ case 'claude-code':
142
+ return [
143
+ '- Restart Claude Code to load the updated CLAUDE.md.',
144
+ '- The session-start protocol will now automatically call `get_graph_report`.',
145
+ ];
146
+ case 'copilot':
147
+ return [
148
+ '- GitHub Copilot will read .github/copilot-instructions.md automatically.',
149
+ '- Ensure the gate-keeper MCP server is running: `npm run mcp`.',
150
+ ];
151
+ case 'cursor':
152
+ return [
153
+ '- Cursor reads .cursorrules automatically on project open.',
154
+ '- Ensure the gate-keeper MCP server is registered in Cursor settings.',
155
+ ];
156
+ case 'vscode':
157
+ return [
158
+ '- Open VS Code and accept the MCP server popup.',
159
+ '- Or run: `npm run mcp` and check the MCP panel.',
160
+ ];
161
+ case 'github-action':
162
+ return [
163
+ `- Commit .github/workflows/gate-keeper.yml to activate the workflow.`,
164
+ '- The workflow runs on push and PR, posting quality summaries as comments.',
165
+ ];
166
+ }
167
+ }
168
+ //# sourceMappingURL=platform-installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-installer.js","sourceRoot":"","sources":["../../../src/mcp/handlers/platform-installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * PR review handler — risk-scores a set of changed files against the graph.
3
+ *
4
+ * Each changed file gets a traffic-light verdict:
5
+ * GREEN — leaf node, no dependents, rating ≥ 7
6
+ * YELLOW — some dependents OR rating 5–7
7
+ * RED — god node with fragile dependents OR rating < 5
8
+ *
9
+ * Returns an overall risk summary plus per-file breakdown.
10
+ */
11
+ import { GraphResponse } from './types';
12
+ import { McpResponse } from './shared';
13
+ export type FileVerdict = 'GREEN' | 'YELLOW' | 'RED';
14
+ export interface FileRisk {
15
+ file: string;
16
+ verdict: FileVerdict;
17
+ rating: number | null;
18
+ directDependents: number;
19
+ fragileImpacted: number;
20
+ reasons: string[];
21
+ }
22
+ export interface PRReviewResult {
23
+ overallVerdict: FileVerdict;
24
+ changedFiles: number;
25
+ redFiles: number;
26
+ yellowFiles: number;
27
+ greenFiles: number;
28
+ fileRisks: FileRisk[];
29
+ recommendation: string;
30
+ }
31
+ export declare function assessFile(filePath: string, graph: GraphResponse, revAdj: Map<string, string[]>, ratings: Map<string, number>): FileRisk;
32
+ export declare function handlePRReview(args: Record<string, unknown>): Promise<McpResponse>;
33
+ //# sourceMappingURL=pr-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-review.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/pr-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAkB,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAErD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,WAAW,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAQD,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC7B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,QAAQ,CAsCV;AAgBD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CA6ExF"}