@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,427 @@
1
+ "use strict";
2
+ /**
3
+ * Core setup logic — pure installation functions used by the `setup` CLI command.
4
+ *
5
+ * Each function returns a SetupResult with a step name, icon, message, and
6
+ * optional file path. Independent steps so partial failures don't cascade.
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.defaultGraphifyIgnore = defaultGraphifyIgnore;
43
+ exports.installClaudeHooks = installClaudeHooks;
44
+ exports.installCopilotInstructions = installCopilotInstructions;
45
+ exports.installVscodeMcp = installVscodeMcp;
46
+ exports.installCursorRules = installCursorRules;
47
+ exports.installGitHubWorkflow = installGitHubWorkflow;
48
+ exports.installGitHooks = installGitHooks;
49
+ exports.runInitialScan = runInitialScan;
50
+ exports.printSummary = printSummary;
51
+ const fs = __importStar(require("fs"));
52
+ const path = __importStar(require("path"));
53
+ const os = __importStar(require("os"));
54
+ const child_process_1 = require("child_process");
55
+ const installer_1 = require("../mcp/installer");
56
+ // ── 1. .graphifyignore ────────────────────────────────────
57
+ async function defaultGraphifyIgnore(opts) {
58
+ const filePath = path.join(opts.repoRoot, '.graphifyignore');
59
+ if (fs.existsSync(filePath) && !opts.force) {
60
+ return { step: 'Create .graphifyignore', icon: '⏭', message: 'Already exists (use --force to overwrite)', path: filePath };
61
+ }
62
+ const defaults = [
63
+ '# Gate Keeper — graphify ignore patterns',
64
+ '# Files matching these patterns are excluded from the dependency graph.',
65
+ '',
66
+ '# Generated files',
67
+ '*.generated.*',
68
+ '*.g.cs',
69
+ '*.Designer.cs',
70
+ '',
71
+ '# Build output',
72
+ 'dist/',
73
+ 'build/',
74
+ 'out/',
75
+ '',
76
+ '# Dependencies',
77
+ 'node_modules/',
78
+ 'vendor/',
79
+ '',
80
+ '# Test fixtures and mocks',
81
+ '**/__snapshots__/**',
82
+ '**/fixtures/**',
83
+ '',
84
+ '# Minified and bundled',
85
+ '*.min.js',
86
+ '*.bundle.js',
87
+ '*.d.ts',
88
+ ];
89
+ fs.writeFileSync(filePath, defaults.join('\n') + '\n', 'utf8');
90
+ return { step: 'Create .graphifyignore', icon: '✅', message: 'Created with defaults (8 patterns)', path: filePath };
91
+ }
92
+ // ── 2. Claude Code hooks ──────────────────────────────────
93
+ function ensureHookRegistered(hooks, event, checkStr, entry) {
94
+ if (!hooks[event])
95
+ hooks[event] = [];
96
+ const already = hooks[event].some(h => JSON.stringify(h).includes(checkStr));
97
+ if (!already)
98
+ hooks[event].push(entry);
99
+ }
100
+ function buildPreToolUseCommand(gkDir) {
101
+ const preEditScript = path.join(gkDir, 'dist', 'hook-pre-tool-use.js');
102
+ if (fs.existsSync(preEditScript))
103
+ return `node ${preEditScript}`;
104
+ return `node -e "
105
+ const http = require('http');
106
+ const payload = JSON.parse(process.argv[1] || '{}');
107
+ const fp = payload?.tool_input?.file_path || payload?.tool_input?.path;
108
+ if (!fp || !fp.match(/\\\\.(ts|tsx|js|jsx|cs)$/)) process.exit(0);
109
+ const encRepo = encodeURIComponent(require('child_process').execSync('git rev-parse --show-toplevel 2>/dev/null').toString().trim());
110
+ const body = JSON.stringify({ file_path: fp, depth: 2, repo: encRepo });
111
+ const req = http.request({ hostname:'127.0.0.1', port:5378, path:'/api/impact-set', method:'POST', headers:{'Content-Type':'application/json','Content-Length':body.length} }, res => {
112
+ let d = '';
113
+ res.on('data', c => d += c);
114
+ res.on('end', () => {
115
+ try {
116
+ const r = JSON.parse(d);
117
+ if (r.verdict === 'block' || (r.fragileCount || 0) >= 3) {
118
+ process.stderr.write('[Gate Keeper] WARNING: ' + fp + ' has ' + (r.fragileCount || 0) + ' fragile dependents — proceed with care\\n');
119
+ }
120
+ } catch (e) { process.stderr.write('[Gate Keeper] parse error: ' + e + '\\n'); }
121
+ });
122
+ });
123
+ req.write(body); req.end();
124
+ setTimeout(() => process.exit(0), 3000);
125
+ " \`cat\``.replace(/\n\s*/g, ' ');
126
+ }
127
+ async function installClaudeHooks(opts) {
128
+ const settingsPath = path.join(os.homedir(), '.claude', 'settings.json');
129
+ const hookScript = path.join(opts.gkDir, 'dist', 'hook-receiver.js');
130
+ if (!fs.existsSync(hookScript)) {
131
+ return { step: 'Install Claude Code hooks', icon: '⚠️', message: `hook-receiver not built at ${hookScript}. Run 'npm run build' first.`, path: settingsPath };
132
+ }
133
+ fs.mkdirSync(path.dirname(settingsPath), { recursive: true });
134
+ let settings;
135
+ try {
136
+ settings = fs.existsSync(settingsPath)
137
+ ? JSON.parse(fs.readFileSync(settingsPath, 'utf8'))
138
+ : {};
139
+ }
140
+ catch {
141
+ settings = {};
142
+ }
143
+ const hooks = settings['hooks'] ?? {};
144
+ const nodeHook = (cmd) => ({ hooks: [{ type: 'command', command: cmd }] });
145
+ const nodeHookMatcher = (cmd) => ({ matcher: 'Write|Edit', hooks: [{ type: 'command', command: cmd }] });
146
+ ensureHookRegistered(hooks, 'SessionStart', 'hook-receiver', nodeHook(`node ${hookScript}`));
147
+ ensureHookRegistered(hooks, 'PreToolUse', 'hook-pre-tool-use', nodeHookMatcher(buildPreToolUseCommand(opts.gkDir)));
148
+ ensureHookRegistered(hooks, 'PostToolUse', 'hook-receiver', nodeHookMatcher(`node ${hookScript}`));
149
+ ensureHookRegistered(hooks, 'UserPromptSubmit', 'hook-receiver', nodeHook(`node ${hookScript}`));
150
+ settings['hooks'] = hooks;
151
+ const dirs = settings['additionalDirectories'] ?? [];
152
+ if (!dirs.includes(opts.repoRoot)) {
153
+ dirs.push(opts.repoRoot);
154
+ settings['additionalDirectories'] = dirs;
155
+ }
156
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2), 'utf8');
157
+ return { step: 'Install Claude Code hooks', icon: '✅', message: 'SessionStart + PreToolUse + PostToolUse + UserPromptSubmit configured', path: settingsPath };
158
+ }
159
+ // ── 3. Copilot instructions (.github/copilot-instructions.md) ──
160
+ async function installCopilotInstructions(opts) {
161
+ const config = (0, installer_1.copilotConfig)(opts.repoRoot);
162
+ const targetPath = config.filePath;
163
+ if (fs.existsSync(targetPath) && !opts.force) {
164
+ return { step: 'Create Copilot instructions', icon: '⏭', message: 'Already exists (use --force to overwrite)', path: targetPath };
165
+ }
166
+ fs.mkdirSync(path.dirname(targetPath), { recursive: true });
167
+ fs.writeFileSync(targetPath, config.content, 'utf8');
168
+ return { step: 'Create Copilot instructions', icon: '✅', message: `.github/copilot-instructions.md created (${config.content.length} bytes)`, path: targetPath };
169
+ }
170
+ // ── 4. VS Code / Copilot MCP ─────────────────────────────
171
+ async function installVscodeMcp(opts) {
172
+ const mcpDir = path.join(opts.repoRoot, '.vscode');
173
+ const mcpFile = path.join(mcpDir, 'mcp.json');
174
+ fs.mkdirSync(mcpDir, { recursive: true });
175
+ const config = {
176
+ servers: {
177
+ 'gate-keeper': {
178
+ command: 'node',
179
+ args: [path.join(opts.gkDir, 'dist', 'mcp', 'server.js')],
180
+ cwd: opts.gkDir,
181
+ env: {},
182
+ },
183
+ },
184
+ };
185
+ // Check if copilot-insights.yml exists
186
+ const insightsFile = path.join(opts.repoRoot, '.github', 'copilot-insights.yml');
187
+ const hasInsights = fs.existsSync(insightsFile);
188
+ if (fs.existsSync(mcpFile) && !opts.force) {
189
+ return { step: 'Configure VS Code / Copilot MCP', icon: '⏭', message: 'Already exists (use --force to overwrite)', path: mcpFile };
190
+ }
191
+ fs.writeFileSync(mcpFile, JSON.stringify(config, null, 2), 'utf8');
192
+ const extras = hasInsights ? ' + copilot-insights.yml found' : '';
193
+ return { step: 'Configure VS Code / Copilot MCP', icon: '✅', message: `.vscode/mcp.json created${extras}`, path: mcpFile };
194
+ }
195
+ // ── 4. Cursor rules ───────────────────────────────────────
196
+ async function installCursorRules(opts) {
197
+ const cursorFile = path.join(opts.repoRoot, '.cursorrules');
198
+ if (fs.existsSync(cursorFile) && !opts.force) {
199
+ return { step: 'Configure Cursor rules', icon: '⏭', message: 'Already exists (use --force to overwrite)', path: cursorFile };
200
+ }
201
+ const rules = [
202
+ '# Gate Keeper — Cursor Rules',
203
+ '',
204
+ '## Before editing any file',
205
+ '- Call `check_pre_edit_safety` with the file path',
206
+ '- If verdict is "warn": also call `get_impact_set` to see affected files',
207
+ '- If verdict is "block": fix fragile dependents first',
208
+ '',
209
+ '## Architecture awareness',
210
+ '- Call `get_graph_report` once per session',
211
+ '- Use `summarize_file` instead of reading raw files for context',
212
+ '- Use `find_callers` before renaming any export',
213
+ '',
214
+ '## Quality gates',
215
+ '- After every edit: `analyze_file` → target ≥ 7.0/10',
216
+ '- If rating < 7.0: `suggest_refactoring` → fix → re-analyze',
217
+ '',
218
+ '## MCP Server: node dist/mcp/server.js (in repo root)',
219
+ '',
220
+ ];
221
+ fs.writeFileSync(cursorFile, rules.join('\n'), 'utf8');
222
+ return { step: 'Configure Cursor rules', icon: '✅', message: '.cursorrules created', path: cursorFile };
223
+ }
224
+ // ── 5. GitHub Actions workflow ────────────────────────────
225
+ async function installGitHubWorkflow(opts) {
226
+ const workflowDir = path.join(opts.repoRoot, '.github', 'workflows');
227
+ const workflowFile = path.join(workflowDir, 'gate-keeper.yml');
228
+ if (fs.existsSync(workflowFile) && !opts.force) {
229
+ return { step: 'Create GitHub Actions workflow', icon: '⏭', message: 'Already exists (use --force to overwrite)', path: workflowFile };
230
+ }
231
+ fs.mkdirSync(workflowDir, { recursive: true });
232
+ const workflow = `name: Gate Keeper — Quality Gate
233
+
234
+ on:
235
+ push:
236
+ branches: ["**"]
237
+ pull_request:
238
+ branches: [main, master]
239
+
240
+ permissions:
241
+ contents: read
242
+ pull-requests: write
243
+
244
+ jobs:
245
+ quality-gate:
246
+ name: Gate Keeper analysis
247
+ runs-on: ubuntu-latest
248
+ steps:
249
+ - uses: actions/checkout@v4
250
+ - uses: actions/setup-node@v4
251
+ with:
252
+ node-version: '20'
253
+ cache: 'npm'
254
+
255
+ - run: npm ci
256
+
257
+ - name: Build gate-keeper
258
+ run: npm run build
259
+
260
+ - name: Run quality analysis
261
+ id: analysis
262
+ run: |
263
+ node -e "
264
+ const { findSourceFiles } = require('${opts.gkDir}/dist/mcp/helpers');
265
+ const { UniversalAnalyzer } = require('${opts.gkDir}/dist/analyzer/universal-analyzer');
266
+ const files = findSourceFiles('.', 200);
267
+ Promise.all(files.map(f => new UniversalAnalyzer().analyze(f).catch(() => null)))
268
+ .then(results => {
269
+ const valid = results.filter(Boolean);
270
+ const avg = valid.reduce((s, r) => s + r.rating, 0) / (valid.length || 1);
271
+ const below = valid.filter(r => r.rating < 7.0);
272
+ console.log('overall_rating=' + avg.toFixed(1));
273
+ console.log('files_analyzed=' + valid.length);
274
+ console.log('below_threshold=' + below.length);
275
+ below.forEach(r => console.log(' FAIL: ' + r.path.split('/').pop() + ' — ' + r.rating + '/10'));
276
+ });
277
+ " 2>&1 | tee -a \$GITHUB_OUTPUT
278
+
279
+ - name: Post PR comment
280
+ if: github.event_name == 'pull_request'
281
+ uses: actions/github-script@v7
282
+ with:
283
+ github-token: \${{ github.token }}
284
+ script: |
285
+ const fs = require('fs');
286
+ const env = require('process').env;
287
+ github.rest.issues.createComment({
288
+ issue_number: context.issue.number,
289
+ owner: context.repo.owner,
290
+ repo: context.repo.repo,
291
+ body: \`## Gate Keeper Quality Report
292
+ **Overall rating:** \${env.overall_rating || 'N/A'}/10
293
+ **Files analyzed:** \${env.files_analyzed || 0}
294
+ **Files below threshold:** \${env.below_threshold || 0}
295
+
296
+ *Analysis by Gate Keeper MCP server.*\`
297
+ });
298
+ `;
299
+ fs.writeFileSync(workflowFile, workflow, 'utf8');
300
+ return { step: 'Create GitHub Actions workflow', icon: '✅', message: '.github/workflows/gate-keeper.yml created', path: workflowFile };
301
+ }
302
+ // ── 6. Git hooks ──────────────────────────────────────────
303
+ async function installGitHooks(opts) {
304
+ const hooksDir = path.join(opts.repoRoot, '.git', 'hooks');
305
+ if (!fs.existsSync(hooksDir)) {
306
+ return { step: 'Install git hooks', icon: '⚠️', message: 'Not a git repository — skipping', path: null };
307
+ }
308
+ const hookScript = path.join(opts.gkDir, 'dist', 'hook-receiver.js');
309
+ if (!fs.existsSync(hookScript)) {
310
+ return { step: 'Install git hooks', icon: '⚠️', message: 'hook-receiver not built — skipping', path: hooksDir };
311
+ }
312
+ const hooks = [
313
+ {
314
+ name: 'post-commit',
315
+ content: `#!/bin/sh
316
+ # Gate Keeper — post-commit hook (non-blocking)
317
+ HOOK="${hookScript}"
318
+ if [ ! -f "$HOOK" ]; then exit 0; fi
319
+ git diff-tree --no-commit-id -r --name-only HEAD | grep -E '\\.(ts|tsx|js|jsx|cs)$' | while read -r file; do
320
+ FP="$(git rev-parse --show-toplevel)/$file"
321
+ [ -f "$FP" ] && echo '{"tool_name":"Write","tool_input":{"file_path":"'"$FP"'"}}' | node "$HOOK" 2>/dev/null &
322
+ done
323
+ exit 0
324
+ `,
325
+ },
326
+ {
327
+ name: 'post-checkout',
328
+ content: `#!/bin/sh
329
+ # Gate Keeper — post-checkout hook (non-blocking)
330
+ PREV="$1"; NEW="$2"; BRANCH="$3"
331
+ if [ "$BRANCH" != "1" ]; then exit 0; fi
332
+ HOOK="${hookScript}"
333
+ if [ ! -f "$HOOK" ]; then exit 0; fi
334
+ git diff --name-only "$PREV" "$NEW" | grep -E '\\.(ts|tsx|js|jsx|cs)$' | head -20 | while read -r file; do
335
+ FP="$(git rev-parse --show-toplevel)/$file"
336
+ [ -f "$FP" ] && echo '{"tool_name":"Write","tool_input":{"file_path":"'"$FP"'"}}' | node "$HOOK" 2>/dev/null &
337
+ done
338
+ exit 0
339
+ `,
340
+ },
341
+ ];
342
+ let created = 0;
343
+ let skipped = 0;
344
+ for (const { name, content } of hooks) {
345
+ const hookPath = path.join(hooksDir, name);
346
+ if (fs.existsSync(hookPath) && !opts.force) {
347
+ skipped++;
348
+ continue;
349
+ }
350
+ fs.writeFileSync(hookPath, content, { mode: 0o755 });
351
+ created++;
352
+ }
353
+ if (created === 0 && skipped > 0) {
354
+ return { step: 'Install git hooks', icon: '⏭', message: `${skipped} hook(s) already exist (use --force to overwrite)`, path: hooksDir };
355
+ }
356
+ return { step: 'Install git hooks', icon: '✅', message: `${created} hook(s) installed (${skipped} skipped)`, path: hooksDir };
357
+ }
358
+ // ── 7. Initial scan ───────────────────────────────────────
359
+ async function runInitialScan(opts) {
360
+ const daemonScript = path.join(opts.gkDir, 'dist', 'daemon.js');
361
+ if (!fs.existsSync(daemonScript)) {
362
+ return { step: 'Start daemon & run initial scan', icon: '⚠️', message: `Daemon not built at ${daemonScript}. Run 'npm run build' first.`, path: null };
363
+ }
364
+ // Kill any existing daemon first
365
+ const pidFile = path.join(os.homedir(), '.gate-keeper', 'daemon.pid');
366
+ if (fs.existsSync(pidFile)) {
367
+ try {
368
+ const pid = parseInt(fs.readFileSync(pidFile, 'utf8').trim(), 10);
369
+ if (!isNaN(pid)) {
370
+ try {
371
+ process.kill(pid, 0);
372
+ process.kill(pid);
373
+ }
374
+ catch { /* not running */ }
375
+ }
376
+ }
377
+ catch { /* ignore */ }
378
+ try {
379
+ fs.unlinkSync(pidFile);
380
+ }
381
+ catch { /* ignore */ }
382
+ }
383
+ // Start the daemon
384
+ const child = (0, child_process_1.spawn)(process.execPath, [daemonScript, '--no-scan'], {
385
+ cwd: opts.gkDir,
386
+ detached: true,
387
+ stdio: 'ignore',
388
+ env: { ...process.env },
389
+ });
390
+ child.unref();
391
+ // Wait for it to start
392
+ await sleep(1500);
393
+ // Trigger scan via API
394
+ const scanResult = (0, child_process_1.spawnSync)('curl', [
395
+ '-s', '-X', 'POST',
396
+ 'http://127.0.0.1:5379/scan',
397
+ '-H', 'Content-Type: application/json',
398
+ '-d', JSON.stringify({}),
399
+ ], { timeout: 5000, encoding: 'utf8' });
400
+ if (scanResult.status !== 0) {
401
+ return { step: 'Start daemon & run initial scan', icon: '⚠️', message: 'Daemon started but scan trigger failed (try `npm run dev` manually)', path: null };
402
+ }
403
+ return { step: 'Start daemon & run initial scan', icon: '✅', message: 'Daemon started, initial scan triggered (check dashboard at http://localhost:5378/viz)', path: null };
404
+ }
405
+ // ── Summary ───────────────────────────────────────────────
406
+ function printSummary(results, repoRoot) {
407
+ const successes = results.filter(r => r.icon === '✅').length;
408
+ const warnings = results.filter(r => r.icon === '⚠️').length;
409
+ const skipped = results.filter(r => r.icon === '⏭').length;
410
+ const failures = results.filter(r => r.icon === '❌').length;
411
+ const out = process.stdout.write.bind(process.stdout);
412
+ out(`\n ═══════════════════════════════════\n`);
413
+ out(` Setup complete for ${path.basename(repoRoot)}\n`);
414
+ out(` ${successes} installed · ${skipped} skipped · ${warnings} warnings · ${failures} failed\n`);
415
+ out(` ═══════════════════════════════════\n\n`);
416
+ if (successes > 0) {
417
+ out(' Next steps:\n');
418
+ out(' - Open the dashboard: http://localhost:5378/viz\n');
419
+ out(' - Run npm run dev to restart the daemon manually\n');
420
+ out(' - Use `get_graph_report` in your AI assistant\n');
421
+ out(' - The PostToolUse hook will auto-analyze files on Write/Edit\n\n');
422
+ }
423
+ }
424
+ function sleep(ms) {
425
+ return new Promise(resolve => setTimeout(resolve, ms));
426
+ }
427
+ //# sourceMappingURL=setup-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup-core.js","sourceRoot":"","sources":["../../src/cli/setup-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * gate-keeper setup — one-shot installation for all platforms.
4
+ *
5
+ * Usage:
6
+ * npx tsx src/cli/setup.ts ← auto-detect, ask for targets
7
+ * npx tsx src/cli/setup.ts --dir=/path/to/repo --all
8
+ * npx tsx src/cli/setup.ts --claude --copilot --git-hooks
9
+ *
10
+ * What it does:
11
+ * 1. Detects repo root and writes .graphifyignore with defaults
12
+ * 2. Installs Claude Code hooks in ~/.claude/settings.json
13
+ * 3. Creates .vscode/mcp.json for Copilot / VS Code
14
+ * 4. Creates .cursorrules for Cursor
15
+ * 5. Creates .github/workflows/gate-keeper.yml for CI
16
+ * 6. Installs post-commit + post-checkout git hooks
17
+ * 7. Starts the daemon and runs an initial scan
18
+ * 8. Generates the first graph report
19
+ */
20
+ import { InstallationStep, SetupOptions } from './setup-core';
21
+ export declare function main(): Promise<void>;
22
+ export declare function findArg(args: string[], name: string): string | null;
23
+ export declare function findGitRoot(dir: string): string;
24
+ export declare function buildSteps(opts: SetupOptions): InstallationStep[];
25
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,EACL,gBAAgB,EAUhB,YAAY,EAEb,MAAM,cAAc,CAAC;AAItB,wBAAsB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAiD1C;AAID,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMnE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,gBAAgB,EAAE,CAiCjE"}
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * gate-keeper setup — one-shot installation for all platforms.
5
+ *
6
+ * Usage:
7
+ * npx tsx src/cli/setup.ts ← auto-detect, ask for targets
8
+ * npx tsx src/cli/setup.ts --dir=/path/to/repo --all
9
+ * npx tsx src/cli/setup.ts --claude --copilot --git-hooks
10
+ *
11
+ * What it does:
12
+ * 1. Detects repo root and writes .graphifyignore with defaults
13
+ * 2. Installs Claude Code hooks in ~/.claude/settings.json
14
+ * 3. Creates .vscode/mcp.json for Copilot / VS Code
15
+ * 4. Creates .cursorrules for Cursor
16
+ * 5. Creates .github/workflows/gate-keeper.yml for CI
17
+ * 6. Installs post-commit + post-checkout git hooks
18
+ * 7. Starts the daemon and runs an initial scan
19
+ * 8. Generates the first graph report
20
+ */
21
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
22
+ if (k2 === undefined) k2 = k;
23
+ var desc = Object.getOwnPropertyDescriptor(m, k);
24
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
25
+ desc = { enumerable: true, get: function() { return m[k]; } };
26
+ }
27
+ Object.defineProperty(o, k2, desc);
28
+ }) : (function(o, m, k, k2) {
29
+ if (k2 === undefined) k2 = k;
30
+ o[k2] = m[k];
31
+ }));
32
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
33
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
34
+ }) : function(o, v) {
35
+ o["default"] = v;
36
+ });
37
+ var __importStar = (this && this.__importStar) || (function () {
38
+ var ownKeys = function(o) {
39
+ ownKeys = Object.getOwnPropertyNames || function (o) {
40
+ var ar = [];
41
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
42
+ return ar;
43
+ };
44
+ return ownKeys(o);
45
+ };
46
+ return function (mod) {
47
+ if (mod && mod.__esModule) return mod;
48
+ var result = {};
49
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
50
+ __setModuleDefault(result, mod);
51
+ return result;
52
+ };
53
+ })();
54
+ Object.defineProperty(exports, "__esModule", { value: true });
55
+ exports.main = main;
56
+ exports.findArg = findArg;
57
+ exports.findGitRoot = findGitRoot;
58
+ exports.buildSteps = buildSteps;
59
+ const path = __importStar(require("path"));
60
+ const child_process_1 = require("child_process");
61
+ const setup_core_1 = require("./setup-core");
62
+ // ── Main ───────────────────────────────────────────────────
63
+ async function main() {
64
+ const args = process.argv.slice(2);
65
+ const repoDir = findArg(args, '--dir') ?? process.cwd();
66
+ const repoRoot = findGitRoot(repoDir);
67
+ const gkDir = path.resolve(__dirname, '..', '..');
68
+ const flags = {
69
+ all: args.includes('--all'),
70
+ claude: args.includes('--claude'),
71
+ copilot: args.includes('--copilot') || args.includes('--vscode'),
72
+ cursor: args.includes('--cursor'),
73
+ gitHooks: args.includes('--git-hooks'),
74
+ githubAction: args.includes('--github-action'),
75
+ scan: !args.includes('--no-scan'),
76
+ force: args.includes('--force'),
77
+ repoRoot,
78
+ gkDir,
79
+ };
80
+ // If no specific flags, prompt for targets
81
+ if (!flags.all && !flags.claude && !flags.copilot && !flags.cursor && !flags.gitHooks && !flags.githubAction) {
82
+ process.stdout.write('\n ⬡ Gate Keeper Setup\n\n');
83
+ process.stdout.write(` Repository: ${repoRoot}\n`);
84
+ process.stdout.write(` Gate Keeper: ${gkDir}\n\n`);
85
+ process.stdout.write(' Installing with defaults for detected environment...\n\n');
86
+ flags.all = true;
87
+ }
88
+ const results = [];
89
+ const steps = buildSteps(flags);
90
+ for (const step of steps) {
91
+ process.stdout.write(` [ ] ${step.label}... `);
92
+ try {
93
+ const result = await step.run();
94
+ results.push(result);
95
+ process.stdout.clearLine(0);
96
+ process.stdout.cursorTo(0);
97
+ process.stdout.write(` ${result.icon} ${result.message}\n`);
98
+ }
99
+ catch (err) {
100
+ process.stdout.clearLine(0);
101
+ process.stdout.cursorTo(0);
102
+ const msg = err instanceof Error ? err.message : String(err);
103
+ process.stdout.write(` ❌ ${step.label}: ${msg}\n`);
104
+ results.push({ step: step.label, icon: '❌', message: msg, path: null });
105
+ }
106
+ }
107
+ (0, setup_core_1.printSummary)(results, repoRoot);
108
+ }
109
+ // ── CLI helpers ───────────────────────────────────────────
110
+ function findArg(args, name) {
111
+ for (const a of args) {
112
+ if (a.startsWith(`${name}=`))
113
+ return a.slice(name.length + 1);
114
+ if (a === name)
115
+ return args[args.indexOf(a) + 1] ?? null;
116
+ }
117
+ return null;
118
+ }
119
+ function findGitRoot(dir) {
120
+ const result = (0, child_process_1.spawnSync)('git', ['rev-parse', '--show-toplevel'], {
121
+ cwd: dir, encoding: 'utf8', timeout: 3000,
122
+ });
123
+ return result.status === 0 && result.stdout.trim() ? result.stdout.trim() : dir;
124
+ }
125
+ function buildSteps(opts) {
126
+ const steps = [];
127
+ if (opts.all || true) {
128
+ steps.push({ label: 'Create .graphifyignore', run: () => (0, setup_core_1.defaultGraphifyIgnore)(opts) });
129
+ }
130
+ if (opts.all || opts.claude) {
131
+ steps.push({ label: 'Install Claude Code hooks', run: () => (0, setup_core_1.installClaudeHooks)(opts) });
132
+ }
133
+ if (opts.all || opts.copilot) {
134
+ steps.push({ label: 'Create Copilot instructions', run: () => (0, setup_core_1.installCopilotInstructions)(opts) });
135
+ steps.push({ label: 'Configure VS Code / Copilot MCP', run: () => (0, setup_core_1.installVscodeMcp)(opts) });
136
+ }
137
+ if (opts.all || opts.cursor) {
138
+ steps.push({ label: 'Configure Cursor rules', run: () => (0, setup_core_1.installCursorRules)(opts) });
139
+ }
140
+ if (opts.all || opts.githubAction) {
141
+ steps.push({ label: 'Create GitHub Actions workflow', run: () => (0, setup_core_1.installGitHubWorkflow)(opts) });
142
+ }
143
+ if (opts.all || opts.gitHooks) {
144
+ steps.push({ label: 'Install git hooks', run: () => (0, setup_core_1.installGitHooks)(opts) });
145
+ }
146
+ if (opts.all || opts.scan) {
147
+ steps.push({ label: 'Start daemon & run initial scan', run: () => (0, setup_core_1.runInitialScan)(opts) });
148
+ }
149
+ return steps;
150
+ }
151
+ // ── Entry point ───────────────────────────────────────────
152
+ if (require.main === module) {
153
+ main().catch(err => {
154
+ const msg = err instanceof Error ? err.message : String(err);
155
+ process.stderr.write(` ❌ Setup failed: ${msg}\n`);
156
+ process.exit(1);
157
+ });
158
+ }
159
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}