@revealui/mcp 0.0.1-pre.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/.env.example +9 -0
  2. package/MCP_MAINTENANCE.md +265 -0
  3. package/README.md +260 -0
  4. package/__tests__/crdt.integration.test.ts +156 -0
  5. package/configs/README.md +77 -0
  6. package/configs/claude-template.json +54 -0
  7. package/dist/packages/core/src/database/ssl-config.d.ts +9 -0
  8. package/dist/packages/core/src/database/ssl-config.d.ts.map +1 -0
  9. package/dist/packages/core/src/database/ssl-config.js +8 -0
  10. package/dist/packages/core/src/database/ssl-config.js.map +1 -0
  11. package/dist/packages/core/src/features.d.ts +86 -0
  12. package/dist/packages/core/src/features.d.ts.map +1 -0
  13. package/dist/packages/core/src/features.js +93 -0
  14. package/dist/packages/core/src/features.js.map +1 -0
  15. package/dist/packages/core/src/license.d.ts +75 -0
  16. package/dist/packages/core/src/license.d.ts.map +1 -0
  17. package/dist/packages/core/src/license.js +174 -0
  18. package/dist/packages/core/src/license.js.map +1 -0
  19. package/dist/packages/core/src/monitoring/alerts.d.ts +118 -0
  20. package/dist/packages/core/src/monitoring/alerts.d.ts.map +1 -0
  21. package/dist/packages/core/src/monitoring/alerts.js +325 -0
  22. package/dist/packages/core/src/monitoring/alerts.js.map +1 -0
  23. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +71 -0
  24. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +1 -0
  25. package/dist/packages/core/src/monitoring/cleanup-manager.js +227 -0
  26. package/dist/packages/core/src/monitoring/cleanup-manager.js.map +1 -0
  27. package/dist/packages/core/src/monitoring/health-monitor.d.ts +22 -0
  28. package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +1 -0
  29. package/dist/packages/core/src/monitoring/health-monitor.js +143 -0
  30. package/dist/packages/core/src/monitoring/health-monitor.js.map +1 -0
  31. package/dist/packages/core/src/monitoring/index.d.ts +14 -0
  32. package/dist/packages/core/src/monitoring/index.d.ts.map +1 -0
  33. package/dist/packages/core/src/monitoring/index.js +18 -0
  34. package/dist/packages/core/src/monitoring/index.js.map +1 -0
  35. package/dist/packages/core/src/monitoring/process-registry.d.ts +97 -0
  36. package/dist/packages/core/src/monitoring/process-registry.d.ts.map +1 -0
  37. package/dist/packages/core/src/monitoring/process-registry.js +223 -0
  38. package/dist/packages/core/src/monitoring/process-registry.js.map +1 -0
  39. package/dist/packages/core/src/monitoring/types.d.ts +231 -0
  40. package/dist/packages/core/src/monitoring/types.d.ts.map +1 -0
  41. package/dist/packages/core/src/monitoring/types.js +43 -0
  42. package/dist/packages/core/src/monitoring/types.js.map +1 -0
  43. package/dist/packages/core/src/monitoring/zombie-detector.d.ts +81 -0
  44. package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +1 -0
  45. package/dist/packages/core/src/monitoring/zombie-detector.js +232 -0
  46. package/dist/packages/core/src/monitoring/zombie-detector.js.map +1 -0
  47. package/dist/packages/core/src/observability/logger.d.ts +47 -0
  48. package/dist/packages/core/src/observability/logger.d.ts.map +1 -0
  49. package/dist/packages/core/src/observability/logger.js +141 -0
  50. package/dist/packages/core/src/observability/logger.js.map +1 -0
  51. package/dist/packages/core/src/utils/logger-server.d.ts +32 -0
  52. package/dist/packages/core/src/utils/logger-server.d.ts.map +1 -0
  53. package/dist/packages/core/src/utils/logger-server.js +69 -0
  54. package/dist/packages/core/src/utils/logger-server.js.map +1 -0
  55. package/dist/packages/core/src/utils/request-context.d.ts +143 -0
  56. package/dist/packages/core/src/utils/request-context.d.ts.map +1 -0
  57. package/dist/packages/core/src/utils/request-context.js +169 -0
  58. package/dist/packages/core/src/utils/request-context.js.map +1 -0
  59. package/dist/packages/dev/src/code-validator/index.d.ts +20 -0
  60. package/dist/packages/dev/src/code-validator/index.d.ts.map +1 -0
  61. package/dist/packages/dev/src/code-validator/index.js +20 -0
  62. package/dist/packages/dev/src/code-validator/index.js.map +1 -0
  63. package/dist/packages/dev/src/code-validator/types.d.ts +67 -0
  64. package/dist/packages/dev/src/code-validator/types.d.ts.map +1 -0
  65. package/dist/packages/dev/src/code-validator/types.js +7 -0
  66. package/dist/packages/dev/src/code-validator/types.js.map +1 -0
  67. package/dist/packages/dev/src/code-validator/validator.d.ts +48 -0
  68. package/dist/packages/dev/src/code-validator/validator.d.ts.map +1 -0
  69. package/dist/packages/dev/src/code-validator/validator.js +176 -0
  70. package/dist/packages/dev/src/code-validator/validator.js.map +1 -0
  71. package/dist/packages/mcp/src/adapters/db.d.ts +46 -0
  72. package/dist/packages/mcp/src/adapters/db.d.ts.map +1 -0
  73. package/dist/packages/mcp/src/adapters/db.js +127 -0
  74. package/dist/packages/mcp/src/adapters/db.js.map +1 -0
  75. package/dist/packages/mcp/src/config/index.d.ts +11 -0
  76. package/dist/packages/mcp/src/config/index.d.ts.map +1 -0
  77. package/dist/packages/mcp/src/config/index.js +18 -0
  78. package/dist/packages/mcp/src/config/index.js.map +1 -0
  79. package/dist/packages/mcp/src/contracts.d.ts +131 -0
  80. package/dist/packages/mcp/src/contracts.d.ts.map +1 -0
  81. package/dist/packages/mcp/src/contracts.js +153 -0
  82. package/dist/packages/mcp/src/contracts.js.map +1 -0
  83. package/dist/packages/mcp/src/hypervisor.d.ts +132 -0
  84. package/dist/packages/mcp/src/hypervisor.d.ts.map +1 -0
  85. package/dist/packages/mcp/src/hypervisor.js +359 -0
  86. package/dist/packages/mcp/src/hypervisor.js.map +1 -0
  87. package/dist/packages/mcp/src/index.d.ts +25 -0
  88. package/dist/packages/mcp/src/index.d.ts.map +1 -0
  89. package/dist/packages/mcp/src/index.js +41 -0
  90. package/dist/packages/mcp/src/index.js.map +1 -0
  91. package/dist/packages/mcp/src/servers/adapter.d.ts +199 -0
  92. package/dist/packages/mcp/src/servers/adapter.d.ts.map +1 -0
  93. package/dist/packages/mcp/src/servers/adapter.js +487 -0
  94. package/dist/packages/mcp/src/servers/adapter.js.map +1 -0
  95. package/dist/packages/mcp/src/servers/code-validator.d.ts +24 -0
  96. package/dist/packages/mcp/src/servers/code-validator.d.ts.map +1 -0
  97. package/dist/packages/mcp/src/servers/code-validator.js +156 -0
  98. package/dist/packages/mcp/src/servers/code-validator.js.map +1 -0
  99. package/dist/packages/mcp/src/servers/neon.d.ts +11 -0
  100. package/dist/packages/mcp/src/servers/neon.d.ts.map +1 -0
  101. package/dist/packages/mcp/src/servers/neon.js +90 -0
  102. package/dist/packages/mcp/src/servers/neon.js.map +1 -0
  103. package/dist/packages/mcp/src/servers/next-devtools.d.ts +11 -0
  104. package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +1 -0
  105. package/dist/packages/mcp/src/servers/next-devtools.js +215 -0
  106. package/dist/packages/mcp/src/servers/next-devtools.js.map +1 -0
  107. package/dist/packages/mcp/src/servers/playwright.d.ts +11 -0
  108. package/dist/packages/mcp/src/servers/playwright.d.ts.map +1 -0
  109. package/dist/packages/mcp/src/servers/playwright.js +68 -0
  110. package/dist/packages/mcp/src/servers/playwright.js.map +1 -0
  111. package/dist/packages/mcp/src/servers/stripe.d.ts +11 -0
  112. package/dist/packages/mcp/src/servers/stripe.d.ts.map +1 -0
  113. package/dist/packages/mcp/src/servers/stripe.js +86 -0
  114. package/dist/packages/mcp/src/servers/stripe.js.map +1 -0
  115. package/dist/packages/mcp/src/servers/supabase.d.ts +11 -0
  116. package/dist/packages/mcp/src/servers/supabase.d.ts.map +1 -0
  117. package/dist/packages/mcp/src/servers/supabase.js +144 -0
  118. package/dist/packages/mcp/src/servers/supabase.js.map +1 -0
  119. package/dist/packages/mcp/src/servers/vercel.d.ts +11 -0
  120. package/dist/packages/mcp/src/servers/vercel.d.ts.map +1 -0
  121. package/dist/packages/mcp/src/servers/vercel.js +87 -0
  122. package/dist/packages/mcp/src/servers/vercel.js.map +1 -0
  123. package/dist/packages/mcp/src/servers/vultr-test.d.ts +3 -0
  124. package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +1 -0
  125. package/dist/packages/mcp/src/servers/vultr-test.js +82 -0
  126. package/dist/packages/mcp/src/servers/vultr-test.js.map +1 -0
  127. package/dist/scripts/lib/analyzers/console-analyzer.d.ts +188 -0
  128. package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +1 -0
  129. package/dist/scripts/lib/analyzers/console-analyzer.js +432 -0
  130. package/dist/scripts/lib/analyzers/console-analyzer.js.map +1 -0
  131. package/dist/scripts/lib/analyzers/index.d.ts +11 -0
  132. package/dist/scripts/lib/analyzers/index.d.ts.map +1 -0
  133. package/dist/scripts/lib/analyzers/index.js +11 -0
  134. package/dist/scripts/lib/analyzers/index.js.map +1 -0
  135. package/dist/scripts/lib/args.d.ts +104 -0
  136. package/dist/scripts/lib/args.d.ts.map +1 -0
  137. package/dist/scripts/lib/args.js +304 -0
  138. package/dist/scripts/lib/args.js.map +1 -0
  139. package/dist/scripts/lib/cache.d.ts +185 -0
  140. package/dist/scripts/lib/cache.d.ts.map +1 -0
  141. package/dist/scripts/lib/cache.js +390 -0
  142. package/dist/scripts/lib/cache.js.map +1 -0
  143. package/dist/scripts/lib/cli/dispatch.d.ts +116 -0
  144. package/dist/scripts/lib/cli/dispatch.d.ts.map +1 -0
  145. package/dist/scripts/lib/cli/dispatch.js +206 -0
  146. package/dist/scripts/lib/cli/dispatch.js.map +1 -0
  147. package/dist/scripts/lib/cli/index.d.ts +10 -0
  148. package/dist/scripts/lib/cli/index.d.ts.map +1 -0
  149. package/dist/scripts/lib/cli/index.js +10 -0
  150. package/dist/scripts/lib/cli/index.js.map +1 -0
  151. package/dist/scripts/lib/database/ssl-config.d.ts +26 -0
  152. package/dist/scripts/lib/database/ssl-config.d.ts.map +1 -0
  153. package/dist/scripts/lib/database/ssl-config.js +47 -0
  154. package/dist/scripts/lib/database/ssl-config.js.map +1 -0
  155. package/dist/scripts/lib/errors.d.ts +218 -0
  156. package/dist/scripts/lib/errors.d.ts.map +1 -0
  157. package/dist/scripts/lib/errors.js +543 -0
  158. package/dist/scripts/lib/errors.js.map +1 -0
  159. package/dist/scripts/lib/exec.d.ts +107 -0
  160. package/dist/scripts/lib/exec.d.ts.map +1 -0
  161. package/dist/scripts/lib/exec.js +232 -0
  162. package/dist/scripts/lib/exec.js.map +1 -0
  163. package/dist/scripts/lib/index.d.ts +50 -0
  164. package/dist/scripts/lib/index.d.ts.map +1 -0
  165. package/dist/scripts/lib/index.js +65 -0
  166. package/dist/scripts/lib/index.js.map +1 -0
  167. package/dist/scripts/lib/logger.d.ts +50 -0
  168. package/dist/scripts/lib/logger.d.ts.map +1 -0
  169. package/dist/scripts/lib/logger.js +159 -0
  170. package/dist/scripts/lib/logger.js.map +1 -0
  171. package/dist/scripts/lib/output.d.ts +149 -0
  172. package/dist/scripts/lib/output.d.ts.map +1 -0
  173. package/dist/scripts/lib/output.js +263 -0
  174. package/dist/scripts/lib/output.js.map +1 -0
  175. package/dist/scripts/lib/parallel.d.ts +164 -0
  176. package/dist/scripts/lib/parallel.d.ts.map +1 -0
  177. package/dist/scripts/lib/parallel.js +355 -0
  178. package/dist/scripts/lib/parallel.js.map +1 -0
  179. package/dist/scripts/lib/paths.d.ts +92 -0
  180. package/dist/scripts/lib/paths.d.ts.map +1 -0
  181. package/dist/scripts/lib/paths.js +171 -0
  182. package/dist/scripts/lib/paths.js.map +1 -0
  183. package/dist/scripts/lib/state/adapters/memory.d.ts +42 -0
  184. package/dist/scripts/lib/state/adapters/memory.d.ts.map +1 -0
  185. package/dist/scripts/lib/state/adapters/memory.js +110 -0
  186. package/dist/scripts/lib/state/adapters/memory.js.map +1 -0
  187. package/dist/scripts/lib/state/adapters/pglite.d.ts +46 -0
  188. package/dist/scripts/lib/state/adapters/pglite.d.ts.map +1 -0
  189. package/dist/scripts/lib/state/adapters/pglite.js +256 -0
  190. package/dist/scripts/lib/state/adapters/pglite.js.map +1 -0
  191. package/dist/scripts/lib/state/index.d.ts +16 -0
  192. package/dist/scripts/lib/state/index.d.ts.map +1 -0
  193. package/dist/scripts/lib/state/index.js +16 -0
  194. package/dist/scripts/lib/state/index.js.map +1 -0
  195. package/dist/scripts/lib/state/types.d.ts +111 -0
  196. package/dist/scripts/lib/state/types.d.ts.map +1 -0
  197. package/dist/scripts/lib/state/types.js +8 -0
  198. package/dist/scripts/lib/state/types.js.map +1 -0
  199. package/dist/scripts/lib/state/workflow-state.d.ts +110 -0
  200. package/dist/scripts/lib/state/workflow-state.d.ts.map +1 -0
  201. package/dist/scripts/lib/state/workflow-state.js +331 -0
  202. package/dist/scripts/lib/state/workflow-state.js.map +1 -0
  203. package/dist/scripts/lib/telemetry.d.ts +194 -0
  204. package/dist/scripts/lib/telemetry.d.ts.map +1 -0
  205. package/dist/scripts/lib/telemetry.js +394 -0
  206. package/dist/scripts/lib/telemetry.js.map +1 -0
  207. package/dist/scripts/lib/utils.d.ts +270 -0
  208. package/dist/scripts/lib/utils.d.ts.map +1 -0
  209. package/dist/scripts/lib/utils.js +473 -0
  210. package/dist/scripts/lib/utils.js.map +1 -0
  211. package/dist/scripts/lib/validation/database.d.ts +83 -0
  212. package/dist/scripts/lib/validation/database.d.ts.map +1 -0
  213. package/dist/scripts/lib/validation/database.js +199 -0
  214. package/dist/scripts/lib/validation/database.js.map +1 -0
  215. package/dist/scripts/lib/validation/env.d.ts +80 -0
  216. package/dist/scripts/lib/validation/env.d.ts.map +1 -0
  217. package/dist/scripts/lib/validation/env.js +246 -0
  218. package/dist/scripts/lib/validation/env.js.map +1 -0
  219. package/dist/scripts/lib/validation/index.d.ts +16 -0
  220. package/dist/scripts/lib/validation/index.d.ts.map +1 -0
  221. package/dist/scripts/lib/validation/index.js +16 -0
  222. package/dist/scripts/lib/validation/index.js.map +1 -0
  223. package/dist/scripts/lib/validation/post-execution.d.ts +74 -0
  224. package/dist/scripts/lib/validation/post-execution.d.ts.map +1 -0
  225. package/dist/scripts/lib/validation/post-execution.js +110 -0
  226. package/dist/scripts/lib/validation/post-execution.js.map +1 -0
  227. package/dist/scripts/lib/validation/pre-execution.d.ts +165 -0
  228. package/dist/scripts/lib/validation/pre-execution.d.ts.map +1 -0
  229. package/dist/scripts/lib/validation/pre-execution.js +466 -0
  230. package/dist/scripts/lib/validation/pre-execution.js.map +1 -0
  231. package/dist/scripts/lib/validators/documentation-validator.d.ts +242 -0
  232. package/dist/scripts/lib/validators/documentation-validator.d.ts.map +1 -0
  233. package/dist/scripts/lib/validators/documentation-validator.js +584 -0
  234. package/dist/scripts/lib/validators/documentation-validator.js.map +1 -0
  235. package/dist/scripts/lib/validators/index.d.ts +11 -0
  236. package/dist/scripts/lib/validators/index.d.ts.map +1 -0
  237. package/dist/scripts/lib/validators/index.js +11 -0
  238. package/dist/scripts/lib/validators/index.js.map +1 -0
  239. package/docker-compose.yml +46 -0
  240. package/docs/INDEX.md +88 -0
  241. package/docs/README.md +774 -0
  242. package/docs/SETUP.md +264 -0
  243. package/docs/servers/code-validator.md +586 -0
  244. package/eslint.config.js +7 -0
  245. package/migrations/0001_add_crdt_columns.sql +8 -0
  246. package/migrations/0001_rollback.sql +6 -0
  247. package/migrations/005_performance_indexes.sql +190 -0
  248. package/migrations/backfill_crdt_meta.js +45 -0
  249. package/package.json +21 -85
  250. package/src/__tests__/hypervisor.test.ts +212 -0
  251. package/src/adapters/db.ts +180 -0
  252. package/src/config/config.json +49 -0
  253. package/src/config/index.ts +30 -0
  254. package/src/contracts.ts +221 -0
  255. package/src/hypervisor.ts +464 -0
  256. package/src/index.ts +87 -0
  257. package/src/servers/adapter.ts +643 -0
  258. package/src/servers/code-validator.ts +188 -0
  259. package/src/servers/neon.ts +103 -0
  260. package/src/servers/next-devtools.ts +230 -0
  261. package/src/servers/playwright.ts +77 -0
  262. package/src/servers/stripe.ts +99 -0
  263. package/src/servers/supabase.ts +161 -0
  264. package/src/servers/vercel.ts +100 -0
  265. package/src/servers/vultr-test.ts +97 -0
  266. package/tsconfig.json +12 -0
  267. package/vitest.config.ts +22 -0
  268. package/LICENSE +0 -202
  269. package/dist/index.js +0 -10990
  270. package/dist/index.js.map +0 -1
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Stripe MCP Server Launcher
4
+ *
5
+ * Starts the Stripe MCP server for AI-powered payment management.
6
+ *
7
+ * Usage:
8
+ * pnpm mcp:stripe
9
+ */
10
+ import { spawn } from 'node:child_process';
11
+ import { createLogger, getProjectRoot } from '@revealui/scripts';
12
+ import { ErrorCode } from '@revealui/scripts/errors';
13
+ import { config } from 'dotenv';
14
+ import { checkMcpLicense } from '../index.js';
15
+ const logger = createLogger();
16
+ // Load environment variables
17
+ config();
18
+ const MAX_RESTARTS = 3;
19
+ const RESTART_DELAYS_MS = [2000, 4000, 8000];
20
+ async function spawnStripe(stripeSecretKey) {
21
+ return new Promise((resolve) => {
22
+ const child = spawn('pnpm', ['dlx', '@stripe/mcp', '--tools=all'], {
23
+ stdio: 'inherit',
24
+ env: { ...process.env, STRIPE_SECRET_KEY: stripeSecretKey },
25
+ });
26
+ child.on('error', (error) => {
27
+ logger.error(`Failed to start Stripe MCP server: ${error.message}`);
28
+ resolve(ErrorCode.CONFIG_ERROR);
29
+ });
30
+ child.on('exit', (code) => resolve(code ?? 0));
31
+ process.on('SIGINT', () => {
32
+ child.kill('SIGINT');
33
+ });
34
+ process.on('SIGTERM', () => {
35
+ child.kill('SIGTERM');
36
+ });
37
+ });
38
+ }
39
+ async function startStripeMCP() {
40
+ try {
41
+ await getProjectRoot(import.meta.url);
42
+ const stripeSecretKey = process.env.STRIPE_SECRET_KEY;
43
+ if (!stripeSecretKey) {
44
+ logger.error('STRIPE_SECRET_KEY environment variable is required');
45
+ logger.info(' Get your key from: https://dashboard.stripe.com/apikeys');
46
+ process.exit(ErrorCode.CONFIG_ERROR);
47
+ }
48
+ const withRestart = process.argv.includes('--restart');
49
+ logger.header('Starting Stripe MCP Server');
50
+ logger.info(` Secret Key: ${stripeSecretKey.substring(0, 12)}...`);
51
+ if (withRestart)
52
+ logger.info(' Restart mode: enabled (up to 3 attempts)');
53
+ let attempt = 0;
54
+ while (true) {
55
+ const code = await spawnStripe(stripeSecretKey);
56
+ if (!withRestart || attempt >= MAX_RESTARTS) {
57
+ process.exit(code ?? 0);
58
+ }
59
+ const delay = RESTART_DELAYS_MS[attempt] ?? 8000;
60
+ attempt++;
61
+ logger.warning(` Server exited (code ${code}). Restarting in ${delay / 1000}s (attempt ${attempt}/${MAX_RESTARTS})...`);
62
+ await new Promise((resolve) => setTimeout(resolve, delay));
63
+ }
64
+ }
65
+ catch (error) {
66
+ logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`);
67
+ process.exit(ErrorCode.EXECUTION_ERROR);
68
+ }
69
+ }
70
+ /**
71
+ * Main function
72
+ */
73
+ async function main() {
74
+ try {
75
+ if (!(await checkMcpLicense())) {
76
+ process.exit(ErrorCode.CONFIG_ERROR);
77
+ }
78
+ await startStripeMCP();
79
+ }
80
+ catch (error) {
81
+ logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`);
82
+ process.exit(ErrorCode.EXECUTION_ERROR);
83
+ }
84
+ }
85
+ main();
86
+ //# sourceMappingURL=stripe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe.js","sourceRoot":"","sources":["../../../../../src/servers/stripe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Supabase MCP Server Launcher
4
+ *
5
+ * Starts the Supabase MCP server for AI-powered database management.
6
+ *
7
+ * Usage:
8
+ * pnpm mcp:supabase
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../../../../src/servers/supabase.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Supabase MCP Server Launcher
4
+ *
5
+ * Starts the Supabase MCP server for AI-powered database management.
6
+ *
7
+ * Usage:
8
+ * pnpm mcp:supabase
9
+ */
10
+ import { spawn } from 'node:child_process';
11
+ import { randomBytes } from 'node:crypto';
12
+ import { createLogger, getProjectRoot } from '@revealui/scripts';
13
+ import { ErrorCode } from '@revealui/scripts/errors';
14
+ import { config } from 'dotenv';
15
+ import { checkMcpLicense } from '../index.js';
16
+ const logger = createLogger();
17
+ // Load environment variables
18
+ config();
19
+ async function startSupabaseMCP() {
20
+ try {
21
+ await getProjectRoot(import.meta.url);
22
+ // Supabase MCP uses local package supabase-mcp
23
+ // Verified: Package expects SUPABASE_URL, SUPABASE_ANON_KEY, and SUPABASE_SERVICE_ROLE_KEY
24
+ // Source: node_modules/supabase-mcp/dist/esm/config.js and services/supabase.js
25
+ //
26
+ // NEW API KEY SUPPORT (2025):
27
+ // Supabase introduced new API keys: sb_publishable_... (replaces anon) and sb_secret_... (replaces service_role)
28
+ // Legacy keys (anon/service_role JWT) still work but will be deprecated in Nov 2025
29
+ // The @supabase/supabase-js client accepts any key format, so we support both
30
+ // Reference: https://github.com/orgs/supabase/discussions/29260
31
+ const supabaseUrl = process.env.SUPABASE_URL;
32
+ // Support both legacy and new API key formats
33
+ // New format: SUPABASE_PUBLISHABLE_KEY (sb_publishable_...) or SUPABASE_ANON_KEY (legacy)
34
+ // New format: SUPABASE_SECRET_KEY (sb_secret_...) or SUPABASE_SERVICE_ROLE_KEY (legacy)
35
+ const supabaseAnonKey = process.env.SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_ANON_KEY;
36
+ const supabaseServiceRoleKey = process.env.SUPABASE_SECRET_KEY || process.env.SUPABASE_SERVICE_ROLE_KEY;
37
+ if (!supabaseUrl) {
38
+ logger.error('SUPABASE_URL is required');
39
+ logger.info(' Get your credentials from: https://supabase.com/dashboard → Settings → API');
40
+ process.exit(ErrorCode.CONFIG_ERROR);
41
+ }
42
+ if (!supabaseAnonKey) {
43
+ logger.error('SUPABASE_ANON_KEY or SUPABASE_PUBLISHABLE_KEY is required');
44
+ logger.info(' Legacy: SUPABASE_ANON_KEY (anon JWT key)');
45
+ logger.info(' New: SUPABASE_PUBLISHABLE_KEY (sb_publishable_... key)');
46
+ logger.info(' Get from: https://supabase.com/dashboard → Settings → API');
47
+ process.exit(ErrorCode.CONFIG_ERROR);
48
+ }
49
+ if (!supabaseServiceRoleKey) {
50
+ logger.error('SUPABASE_SERVICE_ROLE_KEY or SUPABASE_SECRET_KEY is required');
51
+ logger.info(' Legacy: SUPABASE_SERVICE_ROLE_KEY (service_role JWT key)');
52
+ logger.info(' New: SUPABASE_SECRET_KEY (sb_secret_... key)');
53
+ logger.info(' Note: Required for MCP server operations (full database access)');
54
+ logger.info(' Get from: https://supabase.com/dashboard → Settings → API');
55
+ process.exit(ErrorCode.CONFIG_ERROR);
56
+ }
57
+ // MCP_API_KEY is required by supabase-mcp package for server authentication
58
+ // This is NOT a Supabase key - it's a key you generate yourself to secure the MCP server
59
+ let mcpApiKey = process.env.MCP_API_KEY;
60
+ if (!mcpApiKey) {
61
+ // Auto-generate a secure random key if not provided
62
+ mcpApiKey = randomBytes(32).toString('hex');
63
+ logger.warning('⚠️ MCP_API_KEY not set - auto-generated a secure key');
64
+ logger.warning(' Add this to your .env file to persist it:');
65
+ logger.warning(` MCP_API_KEY=${mcpApiKey}`);
66
+ logger.warning(' (This key secures your MCP server endpoint)');
67
+ }
68
+ const withRestart = process.argv.includes('--restart');
69
+ logger.header('Starting Supabase MCP Server (Local)');
70
+ logger.info(` Supabase URL: ${supabaseUrl}`);
71
+ if (withRestart)
72
+ logger.info(' Restart mode: enabled (up to 3 attempts)');
73
+ // Detect key format for logging
74
+ const usingNewKeys = process.env.SUPABASE_PUBLISHABLE_KEY || process.env.SUPABASE_SECRET_KEY;
75
+ if (usingNewKeys) {
76
+ logger.info(' Using new API key format (sb_publishable_/sb_secret_)');
77
+ }
78
+ else {
79
+ logger.info(' Using legacy API key format (anon/service_role JWT)');
80
+ logger.warning(' ⚠️ Consider migrating to new keys before Nov 2025');
81
+ logger.info(' See: https://github.com/orgs/supabase/discussions/29260');
82
+ }
83
+ // Build env once — used for all spawn attempts
84
+ // Package validates: SUPABASE_URL, SUPABASE_ANON_KEY, SUPABASE_SERVICE_ROLE_KEY, MCP_API_KEY
85
+ // We map new keys to legacy variable names for package compatibility
86
+ const spawnEnv = {
87
+ ...process.env,
88
+ SUPABASE_URL: supabaseUrl,
89
+ SUPABASE_ANON_KEY: supabaseAnonKey,
90
+ SUPABASE_SERVICE_ROLE_KEY: supabaseServiceRoleKey,
91
+ MCP_API_KEY: mcpApiKey,
92
+ SUPABASE_PUBLISHABLE_KEY: process.env.SUPABASE_PUBLISHABLE_KEY,
93
+ SUPABASE_SECRET_KEY: process.env.SUPABASE_SECRET_KEY,
94
+ };
95
+ const MaxRestarts = 3;
96
+ const RestartDelaysMs = [2000, 4000, 8000];
97
+ const spawnSupabase = () => new Promise((resolve) => {
98
+ const child = spawn('pnpm', ['dlx', 'supabase-mcp'], { stdio: 'inherit', env: spawnEnv });
99
+ child.on('error', (error) => {
100
+ logger.error(`Failed to start Supabase MCP server: ${error.message}`);
101
+ resolve(ErrorCode.CONFIG_ERROR);
102
+ });
103
+ child.on('exit', (code) => resolve(code ?? 0));
104
+ process.on('SIGINT', () => {
105
+ child.kill('SIGINT');
106
+ });
107
+ process.on('SIGTERM', () => {
108
+ child.kill('SIGTERM');
109
+ });
110
+ });
111
+ let attempt = 0;
112
+ while (true) {
113
+ const code = await spawnSupabase();
114
+ if (!withRestart || attempt >= MaxRestarts) {
115
+ process.exit(code ?? 0);
116
+ }
117
+ const delay = RestartDelaysMs[attempt] ?? 8000;
118
+ attempt++;
119
+ logger.warning(` Server exited (code ${code}). Restarting in ${delay / 1000}s (attempt ${attempt}/${MaxRestarts})...`);
120
+ await new Promise((resolve) => setTimeout(resolve, delay));
121
+ }
122
+ }
123
+ catch (error) {
124
+ logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`);
125
+ process.exit(ErrorCode.EXECUTION_ERROR);
126
+ }
127
+ }
128
+ /**
129
+ * Main function
130
+ */
131
+ async function main() {
132
+ try {
133
+ if (!(await checkMcpLicense())) {
134
+ process.exit(ErrorCode.CONFIG_ERROR);
135
+ }
136
+ await startSupabaseMCP();
137
+ }
138
+ catch (error) {
139
+ logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`);
140
+ process.exit(ErrorCode.EXECUTION_ERROR);
141
+ }
142
+ }
143
+ main();
144
+ //# sourceMappingURL=supabase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.js","sourceRoot":"","sources":["../../../../../src/servers/supabase.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA;AAE7B,6BAA6B;AAC7B,MAAM,EAAE,CAAA;AAER,KAAK,UAAU,gBAAgB;IAC7B,IAAI,CAAC;QACH,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACrC,+CAA+C;QAC/C,2FAA2F;QAC3F,gFAAgF;QAChF,EAAE;QACF,8BAA8B;QAC9B,iHAAiH;QACjH,oFAAoF;QACpF,8EAA8E;QAC9E,gEAAgE;QAChE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAA;QAE5C,8CAA8C;QAC9C,0FAA0F;QAC1F,wFAAwF;QACxF,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;QAC7F,MAAM,sBAAsB,GAC1B,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAA;QAE1E,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;YACxC,MAAM,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;YAC5F,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAA;YACzE,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;YAC1D,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;YACxE,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;YAC3E,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACtC,CAAC;QAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAA;YAC5E,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;YAC1E,MAAM,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;YAC9D,MAAM,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAA;YACjF,MAAM,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;YAC3E,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACtC,CAAC;QAED,4EAA4E;QAC5E,yFAAyF;QACzF,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;QACvC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,oDAAoD;YACpD,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC3C,MAAM,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAA;YACvE,MAAM,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAA;YAC9D,MAAM,CAAC,OAAO,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAA;YAC7C,MAAM,CAAC,OAAO,CAAC,gDAAgD,CAAC,CAAA;QAClE,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;QACtD,MAAM,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAA;QACrD,MAAM,CAAC,IAAI,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAA;QAC9C,IAAI,WAAW;YAAE,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;QAE3E,gCAAgC;QAChC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAA;QAC5F,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;YACrE,MAAM,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAA;YACvE,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAA;QAC3E,CAAC;QAED,+CAA+C;QAC/C,6FAA6F;QAC7F,qEAAqE;QACrE,MAAM,QAAQ,GAAG;YACf,GAAG,OAAO,CAAC,GAAG;YACd,YAAY,EAAE,WAAW;YACzB,iBAAiB,EAAE,eAAe;YAClC,yBAAyB,EAAE,sBAAsB;YACjD,WAAW,EAAE,SAAS;YACtB,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB;YAC9D,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;SACrD,CAAA;QAED,MAAM,WAAW,GAAG,CAAC,CAAA;QACrB,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAE1C,MAAM,aAAa,GAAG,GAA2B,EAAE,CACjD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAA;YACzF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,CAAC,KAAK,CAAC,wCAAwC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;gBACrE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;YACjC,CAAC,CAAC,CAAA;YACF,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;YAC9C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBACxB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACtB,CAAC,CAAC,CAAA;YACF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACzB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEJ,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAA;YAClC,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAA;YACzB,CAAC;YACD,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,IAAI,CAAA;YAC9C,OAAO,EAAE,CAAA;YACT,MAAM,CAAC,OAAO,CACZ,0BAA0B,IAAI,oBAAoB,KAAK,GAAG,IAAI,cAAc,OAAO,IAAI,WAAW,MAAM,CACzG,CAAA;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACxF,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IACzC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAA;QACtC,CAAC;QACD,MAAM,gBAAgB,EAAE,CAAA;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACxF,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IACzC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAA"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Vercel MCP Server Launcher
4
+ *
5
+ * Starts the Vercel MCP server for AI-powered Vercel management.
6
+ *
7
+ * Usage:
8
+ * pnpm mcp:vercel
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=vercel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../../../src/servers/vercel.ts"],"names":[],"mappings":";AAEA;;;;;;;GAOG"}
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Vercel MCP Server Launcher
4
+ *
5
+ * Starts the Vercel MCP server for AI-powered Vercel management.
6
+ *
7
+ * Usage:
8
+ * pnpm mcp:vercel
9
+ */
10
+ import { spawn } from 'node:child_process';
11
+ import { createLogger, getProjectRoot } from '@revealui/scripts';
12
+ import { ErrorCode } from '@revealui/scripts/errors';
13
+ import { config } from 'dotenv';
14
+ import { checkMcpLicense } from '../index.js';
15
+ const logger = createLogger();
16
+ // Load environment variables
17
+ config();
18
+ const MAX_RESTARTS = 3;
19
+ const RESTART_DELAYS_MS = [2000, 4000, 8000];
20
+ async function spawnVercel(vercelApiKey) {
21
+ return new Promise((resolve) => {
22
+ // Pass credentials via environment only — never as CLI arguments (visible in ps aux).
23
+ const child = spawn('pnpm', ['exec', 'vercel-mcp'], {
24
+ stdio: 'inherit',
25
+ env: { ...process.env, VERCEL_API_KEY: vercelApiKey },
26
+ });
27
+ child.on('error', (error) => {
28
+ logger.error(`Failed to start Vercel MCP server: ${error.message}`);
29
+ resolve(ErrorCode.CONFIG_ERROR);
30
+ });
31
+ child.on('exit', (code) => resolve(code ?? 0));
32
+ process.on('SIGINT', () => {
33
+ child.kill('SIGINT');
34
+ });
35
+ process.on('SIGTERM', () => {
36
+ child.kill('SIGTERM');
37
+ });
38
+ });
39
+ }
40
+ async function startVercelMCP() {
41
+ try {
42
+ await getProjectRoot(import.meta.url);
43
+ const vercelApiKey = process.env.VERCEL_API_KEY ?? process.env.VERCEL_TOKEN;
44
+ if (!vercelApiKey) {
45
+ logger.error('VERCEL_API_KEY environment variable is required');
46
+ logger.info(' Get your token from: https://vercel.com/account/tokens');
47
+ process.exit(ErrorCode.CONFIG_ERROR);
48
+ }
49
+ const withRestart = process.argv.includes('--restart');
50
+ logger.header('Starting Vercel MCP Server');
51
+ logger.info(` API Key: ${vercelApiKey.substring(0, 8)}...`);
52
+ if (withRestart)
53
+ logger.info(' Restart mode: enabled (up to 3 attempts)');
54
+ let attempt = 0;
55
+ while (true) {
56
+ const code = await spawnVercel(vercelApiKey);
57
+ if (!withRestart || attempt >= MAX_RESTARTS) {
58
+ process.exit(code ?? 0);
59
+ }
60
+ const delay = RESTART_DELAYS_MS[attempt] ?? 8000;
61
+ attempt++;
62
+ logger.warning(` Server exited (code ${code}). Restarting in ${delay / 1000}s (attempt ${attempt}/${MAX_RESTARTS})...`);
63
+ await new Promise((resolve) => setTimeout(resolve, delay));
64
+ }
65
+ }
66
+ catch (error) {
67
+ logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`);
68
+ process.exit(ErrorCode.EXECUTION_ERROR);
69
+ }
70
+ }
71
+ /**
72
+ * Main function
73
+ */
74
+ async function main() {
75
+ try {
76
+ if (!(await checkMcpLicense())) {
77
+ process.exit(ErrorCode.CONFIG_ERROR);
78
+ }
79
+ await startVercelMCP();
80
+ }
81
+ catch (error) {
82
+ logger.error(`Script failed: ${error instanceof Error ? error.message : String(error)}`);
83
+ process.exit(ErrorCode.EXECUTION_ERROR);
84
+ }
85
+ }
86
+ main();
87
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../../../src/servers/vercel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=vultr-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vultr-test.d.ts","sourceRoot":"","sources":["../../../../../src/servers/vultr-test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/env node
2
+ // Demo script to exercise Vultr Inference (chat + embeddings)
3
+ // Usage:
4
+ // Use ts-node or compile to JS. Example with ts-node:
5
+ // VULTR_API_KEY=your_key VULTR_MODEL=your-model-id ts-node packages/ai/scripts/test-vultr.ts
6
+ import { logger } from '@revealui/core/observability/logger';
7
+ import { checkMcpLicense } from '../index.js';
8
+ const KEY = process.env.VULTR_API_KEY;
9
+ const MODEL = process.env.VULTR_MODEL;
10
+ const BASE = process.env.VULTR_BASE_URL || 'https://api.vultrinference.com/v1';
11
+ if (!(KEY && MODEL)) {
12
+ logger.error('Missing VULTR_API_KEY or VULTR_MODEL environment variables', new Error('Missing required environment variables'));
13
+ process.exit(1);
14
+ }
15
+ const headers = {
16
+ 'Content-Type': 'application/json',
17
+ // biome-ignore lint/style/useNamingConvention: API field name
18
+ Authorization: `Bearer ${KEY}`,
19
+ };
20
+ async function chat(prompt) {
21
+ const body = {
22
+ model: MODEL,
23
+ messages: [{ role: 'user', content: prompt }],
24
+ max_tokens: 256,
25
+ };
26
+ const res = await fetch(`${BASE}/chat/completions`, {
27
+ method: 'POST',
28
+ headers,
29
+ body: JSON.stringify(body),
30
+ });
31
+ if (!res.ok) {
32
+ const err = await res.text().catch(() => res.statusText);
33
+ throw new Error(`Chat request failed: ${res.status} ${err}`);
34
+ }
35
+ const data = (await res.json());
36
+ logger.info('Chat response', { data });
37
+ const choice = Array.isArray(data.choices)
38
+ ? data.choices[0]
39
+ : undefined;
40
+ const message = choice?.message
41
+ ? choice.message
42
+ : choice?.text
43
+ ? { content: choice.text }
44
+ : undefined;
45
+ if (message) {
46
+ logger.info('Assistant output', {
47
+ content: typeof message.content === 'string' ? message.content : JSON.stringify(message),
48
+ });
49
+ }
50
+ }
51
+ async function embed(inputs) {
52
+ const body = {
53
+ model: MODEL,
54
+ input: Array.isArray(inputs) ? inputs : [inputs],
55
+ };
56
+ const res = await fetch(`${BASE}/embeddings`, {
57
+ method: 'POST',
58
+ headers,
59
+ body: JSON.stringify(body),
60
+ });
61
+ if (!res.ok) {
62
+ const err = await res.text().catch(() => res.statusText);
63
+ throw new Error(`Embeddings request failed: ${res.status} ${err}`);
64
+ }
65
+ const data = await res.json();
66
+ logger.info('Embeddings response', { data });
67
+ }
68
+ async function main() {
69
+ if (!(await checkMcpLicense())) {
70
+ process.exit(2);
71
+ }
72
+ try {
73
+ await chat('What is the capital of France?');
74
+ await embed('This is a test embedding.');
75
+ }
76
+ catch (err) {
77
+ logger.error('Error during demo', err instanceof Error ? err : new Error(String(err)));
78
+ process.exitCode = 2;
79
+ }
80
+ }
81
+ await main();
82
+ //# sourceMappingURL=vultr-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vultr-test.js","sourceRoot":"","sources":["../../../../../src/servers/vultr-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Unified Console Analyzer
3
+ *
4
+ * Provides both AST-based and regex-based console statement detection.
5
+ * Consolidates logic from analyze/console-usage.ts and validate/console-statements.ts
6
+ *
7
+ * Features:
8
+ * - AST mode: TypeScript AST parsing for accurate detection with production guard awareness
9
+ * - Regex mode: Fast pattern matching for simple validation
10
+ * - Auto mode: Intelligently picks best approach based on file type
11
+ * - File categorization: production, test, script, unknown
12
+ * - Production guard detection: Recognizes if (process.env.NODE_ENV !== 'production')
13
+ *
14
+ * @dependencies
15
+ * - node:fs - File system operations for reading files
16
+ * - node:path - Path manipulation utilities
17
+ * - typescript - TypeScript compiler API for AST parsing
18
+ */
19
+ export interface ConsoleUsage {
20
+ file: string;
21
+ line: number;
22
+ column: number;
23
+ method: 'log' | 'error' | 'warn' | 'debug' | 'info' | 'trace';
24
+ code: string;
25
+ category: 'production' | 'test' | 'script' | 'unknown';
26
+ }
27
+ export interface ConsoleAnalysisResult {
28
+ usages: ConsoleUsage[];
29
+ summary: {
30
+ total: number;
31
+ production: number;
32
+ test: number;
33
+ script: number;
34
+ unknown: number;
35
+ };
36
+ }
37
+ export type AnalysisMode = 'ast' | 'regex' | 'auto';
38
+ /**
39
+ * Categorize a file based on its path to determine the appropriate context
40
+ * for console statement analysis.
41
+ *
42
+ * @param filePath - Absolute path to the file to categorize
43
+ * @param workspaceRoot - Root directory of the workspace/project
44
+ * @returns File category: 'production', 'test', 'script', or 'unknown'
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const category = categorizeFile('/app/src/components/Button.tsx', '/app')
49
+ * console.log(category) // 'production'
50
+ *
51
+ * const testCategory = categorizeFile('/app/src/__tests__/Button.test.tsx', '/app')
52
+ * console.log(testCategory) // 'test'
53
+ * ```
54
+ */
55
+ export declare function categorizeFile(filePath: string, workspaceRoot: string): 'production' | 'test' | 'script' | 'unknown';
56
+ /**
57
+ * Analyze file using TypeScript AST parsing for accurate console statement detection.
58
+ * More accurate but slower than regex. Detects production guards and appropriate
59
+ * console methods (e.g., console.error is acceptable in production).
60
+ *
61
+ * @param filePath - Absolute path to the file to analyze
62
+ * @param workspaceRoot - Root directory of the workspace/project
63
+ * @returns Array of console usages found in the file
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const usages = analyzeFileAST('/app/src/utils/logger.ts', '/app')
68
+ * console.log(`Found ${usages.length} console statements`)
69
+ * usages.forEach(u => console.log(`${u.file}:${u.line} - ${u.method}`))
70
+ * ```
71
+ *
72
+ * @see {@link analyzeFileRegex} for faster regex-based analysis
73
+ * @see {@link analyzeFile} for automatic mode selection
74
+ */
75
+ export declare function analyzeFileAST(filePath: string, workspaceRoot: string): ConsoleUsage[];
76
+ /**
77
+ * Analyze file using regex pattern matching for fast console statement detection.
78
+ * Faster but less accurate than AST - cannot detect production guards or
79
+ * complex conditional logic.
80
+ *
81
+ * @param filePath - Absolute path to the file to analyze
82
+ * @param workspaceRoot - Root directory of the workspace/project
83
+ * @returns Promise resolving to array of console usages found
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * const usages = await analyzeFileRegex('/app/src/index.js', '/app')
88
+ * console.log(`Found ${usages.length} console statements (regex mode)`)
89
+ * ```
90
+ *
91
+ * @see {@link analyzeFileAST} for more accurate AST-based analysis
92
+ * @see {@link analyzeFile} for automatic mode selection
93
+ */
94
+ export declare function analyzeFileRegex(filePath: string, workspaceRoot: string): Promise<ConsoleUsage[]>;
95
+ /**
96
+ * Analyze file with automatic or explicit mode selection.
97
+ * Auto mode intelligently selects AST for TypeScript files and regex for JavaScript.
98
+ *
99
+ * @param filePath - Absolute path to the file to analyze
100
+ * @param workspaceRoot - Root directory of the workspace/project
101
+ * @param mode - Analysis mode: 'auto' (default), 'ast', or 'regex'
102
+ * @returns Promise resolving to array of console usages found
103
+ *
104
+ * @example
105
+ * ```typescript
106
+ * // Auto mode - picks best approach
107
+ * const usages = await analyzeFile('/app/src/components/Button.tsx', '/app')
108
+ *
109
+ * // Force AST mode
110
+ * const astUsages = await analyzeFile('/app/src/index.js', '/app', 'ast')
111
+ *
112
+ * // Force regex mode for speed
113
+ * const regexUsages = await analyzeFile('/app/src/utils.ts', '/app', 'regex')
114
+ * ```
115
+ *
116
+ * @see {@link analyzeFiles} to analyze multiple files at once
117
+ */
118
+ export declare function analyzeFile(filePath: string, workspaceRoot: string, mode?: AnalysisMode): Promise<ConsoleUsage[]>;
119
+ /**
120
+ * Analyze multiple files and aggregate results with categorized summary.
121
+ * Provides comprehensive analysis across many files with performance optimization.
122
+ *
123
+ * @param filePaths - Array of absolute file paths to analyze
124
+ * @param workspaceRoot - Root directory of the workspace/project
125
+ * @param mode - Analysis mode: 'auto' (default), 'ast', or 'regex'
126
+ * @returns Promise resolving to analysis result with usages and summary statistics
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * const files = await scanDirectoryAll('./src', { extensions: ['.ts', '.tsx'] })
131
+ * const result = await analyzeFiles(files, process.cwd())
132
+ *
133
+ * console.log(`Total console statements: ${result.summary.total}`)
134
+ * console.log(`Production issues: ${result.summary.production}`)
135
+ * console.log(`Test files: ${result.summary.test}`)
136
+ *
137
+ * result.usages.forEach(usage => {
138
+ * console.log(`${usage.file}:${usage.line} - ${usage.method} (${usage.category})`)
139
+ * })
140
+ * ```
141
+ */
142
+ export declare function analyzeFiles(filePaths: string[], workspaceRoot: string, mode?: AnalysisMode): Promise<ConsoleAnalysisResult>;
143
+ /**
144
+ * Console Analyzer class for object-oriented usage.
145
+ * Provides a convenient API for analyzing console statements across a project.
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * const analyzer = new ConsoleAnalyzer('/path/to/project')
150
+ *
151
+ * // Analyze single file
152
+ * const usages = await analyzer.analyze('src/app.ts')
153
+ *
154
+ * // Analyze multiple files with summary
155
+ * const files = await scanDirectoryAll('./src', { extensions: ['.ts'] })
156
+ * const result = await analyzer.analyzeMultiple(files, 'auto')
157
+ * console.log(`Found ${result.summary.total} console statements`)
158
+ * ```
159
+ */
160
+ export declare class ConsoleAnalyzer {
161
+ private workspaceRoot;
162
+ /**
163
+ * Create a new ConsoleAnalyzer instance.
164
+ *
165
+ * @param workspaceRoot - Root directory of the workspace/project
166
+ */
167
+ constructor(workspaceRoot: string);
168
+ /**
169
+ * Analyze file using TypeScript AST parsing.
170
+ *
171
+ * @param filePath - Absolute path to file to analyze
172
+ * @returns Array of console usages found
173
+ */
174
+ analyzeAST(filePath: string): ConsoleUsage[];
175
+ /**
176
+ * Analyze using regex pattern matching
177
+ */
178
+ analyzeRegex(filePath: string): Promise<ConsoleUsage[]>;
179
+ /**
180
+ * Smart analysis with automatic mode selection
181
+ */
182
+ analyze(filePath: string, mode?: AnalysisMode): Promise<ConsoleUsage[]>;
183
+ /**
184
+ * Analyze multiple files
185
+ */
186
+ analyzeMultiple(filePaths: string[], mode?: AnalysisMode): Promise<ConsoleAnalysisResult>;
187
+ }
188
+ //# sourceMappingURL=console-analyzer.d.ts.map