@revealui/mcp 0.1.0 → 0.1.3

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 (293) hide show
  1. package/LICENSE +22 -0
  2. package/LICENSE.commercial +111 -0
  3. package/README.md +3 -0
  4. package/dist/{packages/mcp/src/adapters → adapters}/db.d.ts +1 -1
  5. package/dist/adapters/db.d.ts.map +1 -0
  6. package/dist/adapters/db.js.map +1 -0
  7. package/dist/config/index.d.ts.map +1 -0
  8. package/dist/config/index.js.map +1 -0
  9. package/dist/contracts.d.ts.map +1 -0
  10. package/dist/contracts.js.map +1 -0
  11. package/dist/{packages/mcp/src/hypervisor.d.ts → hypervisor.d.ts} +56 -0
  12. package/dist/hypervisor.d.ts.map +1 -0
  13. package/dist/{packages/mcp/src/hypervisor.js → hypervisor.js} +209 -1
  14. package/dist/hypervisor.js.map +1 -0
  15. package/dist/{packages/mcp/src/index.d.ts → index.d.ts} +9 -5
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/{packages/mcp/src/index.js → index.js} +8 -4
  18. package/dist/index.js.map +1 -0
  19. package/dist/{packages/mcp/src/servers → servers}/adapter.d.ts +11 -1
  20. package/dist/servers/adapter.d.ts.map +1 -0
  21. package/dist/{packages/mcp/src/servers → servers}/adapter.js +20 -4
  22. package/dist/servers/adapter.js.map +1 -0
  23. package/dist/servers/revealui-content.d.ts +21 -0
  24. package/dist/servers/revealui-content.d.ts.map +1 -0
  25. package/dist/servers/revealui-content.js +211 -0
  26. package/dist/servers/revealui-content.js.map +1 -0
  27. package/dist/servers/revealui-email.d.ts +18 -0
  28. package/dist/servers/revealui-email.d.ts.map +1 -0
  29. package/dist/servers/revealui-email.js +190 -0
  30. package/dist/servers/revealui-email.js.map +1 -0
  31. package/dist/servers/revealui-stripe.d.ts +19 -0
  32. package/dist/servers/revealui-stripe.d.ts.map +1 -0
  33. package/dist/servers/revealui-stripe.js +228 -0
  34. package/dist/servers/revealui-stripe.js.map +1 -0
  35. package/package.json +50 -11
  36. package/.env.example +0 -9
  37. package/MCP_MAINTENANCE.md +0 -265
  38. package/__tests__/crdt.integration.test.ts +0 -156
  39. package/configs/README.md +0 -77
  40. package/configs/claude-template.json +0 -54
  41. package/dist/packages/core/src/database/ssl-config.d.ts +0 -9
  42. package/dist/packages/core/src/database/ssl-config.d.ts.map +0 -1
  43. package/dist/packages/core/src/database/ssl-config.js +0 -8
  44. package/dist/packages/core/src/database/ssl-config.js.map +0 -1
  45. package/dist/packages/core/src/features.d.ts +0 -86
  46. package/dist/packages/core/src/features.d.ts.map +0 -1
  47. package/dist/packages/core/src/features.js +0 -93
  48. package/dist/packages/core/src/features.js.map +0 -1
  49. package/dist/packages/core/src/license.d.ts +0 -75
  50. package/dist/packages/core/src/license.d.ts.map +0 -1
  51. package/dist/packages/core/src/license.js +0 -174
  52. package/dist/packages/core/src/license.js.map +0 -1
  53. package/dist/packages/core/src/monitoring/alerts.d.ts +0 -118
  54. package/dist/packages/core/src/monitoring/alerts.d.ts.map +0 -1
  55. package/dist/packages/core/src/monitoring/alerts.js +0 -325
  56. package/dist/packages/core/src/monitoring/alerts.js.map +0 -1
  57. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +0 -71
  58. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +0 -1
  59. package/dist/packages/core/src/monitoring/cleanup-manager.js +0 -227
  60. package/dist/packages/core/src/monitoring/cleanup-manager.js.map +0 -1
  61. package/dist/packages/core/src/monitoring/health-monitor.d.ts +0 -22
  62. package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +0 -1
  63. package/dist/packages/core/src/monitoring/health-monitor.js +0 -143
  64. package/dist/packages/core/src/monitoring/health-monitor.js.map +0 -1
  65. package/dist/packages/core/src/monitoring/index.d.ts +0 -14
  66. package/dist/packages/core/src/monitoring/index.d.ts.map +0 -1
  67. package/dist/packages/core/src/monitoring/index.js +0 -18
  68. package/dist/packages/core/src/monitoring/index.js.map +0 -1
  69. package/dist/packages/core/src/monitoring/process-registry.d.ts +0 -97
  70. package/dist/packages/core/src/monitoring/process-registry.d.ts.map +0 -1
  71. package/dist/packages/core/src/monitoring/process-registry.js +0 -223
  72. package/dist/packages/core/src/monitoring/process-registry.js.map +0 -1
  73. package/dist/packages/core/src/monitoring/types.d.ts +0 -231
  74. package/dist/packages/core/src/monitoring/types.d.ts.map +0 -1
  75. package/dist/packages/core/src/monitoring/types.js +0 -43
  76. package/dist/packages/core/src/monitoring/types.js.map +0 -1
  77. package/dist/packages/core/src/monitoring/zombie-detector.d.ts +0 -81
  78. package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +0 -1
  79. package/dist/packages/core/src/monitoring/zombie-detector.js +0 -232
  80. package/dist/packages/core/src/monitoring/zombie-detector.js.map +0 -1
  81. package/dist/packages/core/src/observability/logger.d.ts +0 -47
  82. package/dist/packages/core/src/observability/logger.d.ts.map +0 -1
  83. package/dist/packages/core/src/observability/logger.js +0 -141
  84. package/dist/packages/core/src/observability/logger.js.map +0 -1
  85. package/dist/packages/core/src/utils/logger-server.d.ts +0 -32
  86. package/dist/packages/core/src/utils/logger-server.d.ts.map +0 -1
  87. package/dist/packages/core/src/utils/logger-server.js +0 -69
  88. package/dist/packages/core/src/utils/logger-server.js.map +0 -1
  89. package/dist/packages/core/src/utils/request-context.d.ts +0 -143
  90. package/dist/packages/core/src/utils/request-context.d.ts.map +0 -1
  91. package/dist/packages/core/src/utils/request-context.js +0 -169
  92. package/dist/packages/core/src/utils/request-context.js.map +0 -1
  93. package/dist/packages/dev/src/code-validator/index.d.ts +0 -20
  94. package/dist/packages/dev/src/code-validator/index.d.ts.map +0 -1
  95. package/dist/packages/dev/src/code-validator/index.js +0 -20
  96. package/dist/packages/dev/src/code-validator/index.js.map +0 -1
  97. package/dist/packages/dev/src/code-validator/types.d.ts +0 -67
  98. package/dist/packages/dev/src/code-validator/types.d.ts.map +0 -1
  99. package/dist/packages/dev/src/code-validator/types.js +0 -7
  100. package/dist/packages/dev/src/code-validator/types.js.map +0 -1
  101. package/dist/packages/dev/src/code-validator/validator.d.ts +0 -48
  102. package/dist/packages/dev/src/code-validator/validator.d.ts.map +0 -1
  103. package/dist/packages/dev/src/code-validator/validator.js +0 -176
  104. package/dist/packages/dev/src/code-validator/validator.js.map +0 -1
  105. package/dist/packages/mcp/src/adapters/db.d.ts.map +0 -1
  106. package/dist/packages/mcp/src/adapters/db.js.map +0 -1
  107. package/dist/packages/mcp/src/config/index.d.ts.map +0 -1
  108. package/dist/packages/mcp/src/config/index.js.map +0 -1
  109. package/dist/packages/mcp/src/contracts.d.ts.map +0 -1
  110. package/dist/packages/mcp/src/contracts.js.map +0 -1
  111. package/dist/packages/mcp/src/hypervisor.d.ts.map +0 -1
  112. package/dist/packages/mcp/src/hypervisor.js.map +0 -1
  113. package/dist/packages/mcp/src/index.d.ts.map +0 -1
  114. package/dist/packages/mcp/src/index.js.map +0 -1
  115. package/dist/packages/mcp/src/servers/adapter.d.ts.map +0 -1
  116. package/dist/packages/mcp/src/servers/adapter.js.map +0 -1
  117. package/dist/packages/mcp/src/servers/code-validator.d.ts +0 -24
  118. package/dist/packages/mcp/src/servers/code-validator.d.ts.map +0 -1
  119. package/dist/packages/mcp/src/servers/code-validator.js +0 -156
  120. package/dist/packages/mcp/src/servers/code-validator.js.map +0 -1
  121. package/dist/packages/mcp/src/servers/neon.d.ts +0 -11
  122. package/dist/packages/mcp/src/servers/neon.d.ts.map +0 -1
  123. package/dist/packages/mcp/src/servers/neon.js +0 -90
  124. package/dist/packages/mcp/src/servers/neon.js.map +0 -1
  125. package/dist/packages/mcp/src/servers/next-devtools.d.ts +0 -11
  126. package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +0 -1
  127. package/dist/packages/mcp/src/servers/next-devtools.js +0 -215
  128. package/dist/packages/mcp/src/servers/next-devtools.js.map +0 -1
  129. package/dist/packages/mcp/src/servers/playwright.d.ts +0 -11
  130. package/dist/packages/mcp/src/servers/playwright.d.ts.map +0 -1
  131. package/dist/packages/mcp/src/servers/playwright.js +0 -68
  132. package/dist/packages/mcp/src/servers/playwright.js.map +0 -1
  133. package/dist/packages/mcp/src/servers/stripe.d.ts +0 -11
  134. package/dist/packages/mcp/src/servers/stripe.d.ts.map +0 -1
  135. package/dist/packages/mcp/src/servers/stripe.js +0 -86
  136. package/dist/packages/mcp/src/servers/stripe.js.map +0 -1
  137. package/dist/packages/mcp/src/servers/supabase.d.ts +0 -11
  138. package/dist/packages/mcp/src/servers/supabase.d.ts.map +0 -1
  139. package/dist/packages/mcp/src/servers/supabase.js +0 -144
  140. package/dist/packages/mcp/src/servers/supabase.js.map +0 -1
  141. package/dist/packages/mcp/src/servers/vercel.d.ts +0 -11
  142. package/dist/packages/mcp/src/servers/vercel.d.ts.map +0 -1
  143. package/dist/packages/mcp/src/servers/vercel.js +0 -87
  144. package/dist/packages/mcp/src/servers/vercel.js.map +0 -1
  145. package/dist/packages/mcp/src/servers/vultr-test.d.ts +0 -3
  146. package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +0 -1
  147. package/dist/packages/mcp/src/servers/vultr-test.js +0 -82
  148. package/dist/packages/mcp/src/servers/vultr-test.js.map +0 -1
  149. package/dist/scripts/lib/analyzers/console-analyzer.d.ts +0 -188
  150. package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +0 -1
  151. package/dist/scripts/lib/analyzers/console-analyzer.js +0 -432
  152. package/dist/scripts/lib/analyzers/console-analyzer.js.map +0 -1
  153. package/dist/scripts/lib/analyzers/index.d.ts +0 -11
  154. package/dist/scripts/lib/analyzers/index.d.ts.map +0 -1
  155. package/dist/scripts/lib/analyzers/index.js +0 -11
  156. package/dist/scripts/lib/analyzers/index.js.map +0 -1
  157. package/dist/scripts/lib/args.d.ts +0 -104
  158. package/dist/scripts/lib/args.d.ts.map +0 -1
  159. package/dist/scripts/lib/args.js +0 -304
  160. package/dist/scripts/lib/args.js.map +0 -1
  161. package/dist/scripts/lib/cache.d.ts +0 -185
  162. package/dist/scripts/lib/cache.d.ts.map +0 -1
  163. package/dist/scripts/lib/cache.js +0 -390
  164. package/dist/scripts/lib/cache.js.map +0 -1
  165. package/dist/scripts/lib/cli/dispatch.d.ts +0 -116
  166. package/dist/scripts/lib/cli/dispatch.d.ts.map +0 -1
  167. package/dist/scripts/lib/cli/dispatch.js +0 -206
  168. package/dist/scripts/lib/cli/dispatch.js.map +0 -1
  169. package/dist/scripts/lib/cli/index.d.ts +0 -10
  170. package/dist/scripts/lib/cli/index.d.ts.map +0 -1
  171. package/dist/scripts/lib/cli/index.js +0 -10
  172. package/dist/scripts/lib/cli/index.js.map +0 -1
  173. package/dist/scripts/lib/database/ssl-config.d.ts +0 -26
  174. package/dist/scripts/lib/database/ssl-config.d.ts.map +0 -1
  175. package/dist/scripts/lib/database/ssl-config.js +0 -47
  176. package/dist/scripts/lib/database/ssl-config.js.map +0 -1
  177. package/dist/scripts/lib/errors.d.ts +0 -218
  178. package/dist/scripts/lib/errors.d.ts.map +0 -1
  179. package/dist/scripts/lib/errors.js +0 -543
  180. package/dist/scripts/lib/errors.js.map +0 -1
  181. package/dist/scripts/lib/exec.d.ts +0 -107
  182. package/dist/scripts/lib/exec.d.ts.map +0 -1
  183. package/dist/scripts/lib/exec.js +0 -232
  184. package/dist/scripts/lib/exec.js.map +0 -1
  185. package/dist/scripts/lib/index.d.ts +0 -50
  186. package/dist/scripts/lib/index.d.ts.map +0 -1
  187. package/dist/scripts/lib/index.js +0 -65
  188. package/dist/scripts/lib/index.js.map +0 -1
  189. package/dist/scripts/lib/logger.d.ts +0 -50
  190. package/dist/scripts/lib/logger.d.ts.map +0 -1
  191. package/dist/scripts/lib/logger.js +0 -159
  192. package/dist/scripts/lib/logger.js.map +0 -1
  193. package/dist/scripts/lib/output.d.ts +0 -149
  194. package/dist/scripts/lib/output.d.ts.map +0 -1
  195. package/dist/scripts/lib/output.js +0 -263
  196. package/dist/scripts/lib/output.js.map +0 -1
  197. package/dist/scripts/lib/parallel.d.ts +0 -164
  198. package/dist/scripts/lib/parallel.d.ts.map +0 -1
  199. package/dist/scripts/lib/parallel.js +0 -355
  200. package/dist/scripts/lib/parallel.js.map +0 -1
  201. package/dist/scripts/lib/paths.d.ts +0 -92
  202. package/dist/scripts/lib/paths.d.ts.map +0 -1
  203. package/dist/scripts/lib/paths.js +0 -171
  204. package/dist/scripts/lib/paths.js.map +0 -1
  205. package/dist/scripts/lib/state/adapters/memory.d.ts +0 -42
  206. package/dist/scripts/lib/state/adapters/memory.d.ts.map +0 -1
  207. package/dist/scripts/lib/state/adapters/memory.js +0 -110
  208. package/dist/scripts/lib/state/adapters/memory.js.map +0 -1
  209. package/dist/scripts/lib/state/adapters/pglite.d.ts +0 -46
  210. package/dist/scripts/lib/state/adapters/pglite.d.ts.map +0 -1
  211. package/dist/scripts/lib/state/adapters/pglite.js +0 -256
  212. package/dist/scripts/lib/state/adapters/pglite.js.map +0 -1
  213. package/dist/scripts/lib/state/index.d.ts +0 -16
  214. package/dist/scripts/lib/state/index.d.ts.map +0 -1
  215. package/dist/scripts/lib/state/index.js +0 -16
  216. package/dist/scripts/lib/state/index.js.map +0 -1
  217. package/dist/scripts/lib/state/types.d.ts +0 -111
  218. package/dist/scripts/lib/state/types.d.ts.map +0 -1
  219. package/dist/scripts/lib/state/types.js +0 -8
  220. package/dist/scripts/lib/state/types.js.map +0 -1
  221. package/dist/scripts/lib/state/workflow-state.d.ts +0 -110
  222. package/dist/scripts/lib/state/workflow-state.d.ts.map +0 -1
  223. package/dist/scripts/lib/state/workflow-state.js +0 -331
  224. package/dist/scripts/lib/state/workflow-state.js.map +0 -1
  225. package/dist/scripts/lib/telemetry.d.ts +0 -194
  226. package/dist/scripts/lib/telemetry.d.ts.map +0 -1
  227. package/dist/scripts/lib/telemetry.js +0 -394
  228. package/dist/scripts/lib/telemetry.js.map +0 -1
  229. package/dist/scripts/lib/utils.d.ts +0 -270
  230. package/dist/scripts/lib/utils.d.ts.map +0 -1
  231. package/dist/scripts/lib/utils.js +0 -473
  232. package/dist/scripts/lib/utils.js.map +0 -1
  233. package/dist/scripts/lib/validation/database.d.ts +0 -83
  234. package/dist/scripts/lib/validation/database.d.ts.map +0 -1
  235. package/dist/scripts/lib/validation/database.js +0 -199
  236. package/dist/scripts/lib/validation/database.js.map +0 -1
  237. package/dist/scripts/lib/validation/env.d.ts +0 -80
  238. package/dist/scripts/lib/validation/env.d.ts.map +0 -1
  239. package/dist/scripts/lib/validation/env.js +0 -246
  240. package/dist/scripts/lib/validation/env.js.map +0 -1
  241. package/dist/scripts/lib/validation/index.d.ts +0 -16
  242. package/dist/scripts/lib/validation/index.d.ts.map +0 -1
  243. package/dist/scripts/lib/validation/index.js +0 -16
  244. package/dist/scripts/lib/validation/index.js.map +0 -1
  245. package/dist/scripts/lib/validation/post-execution.d.ts +0 -74
  246. package/dist/scripts/lib/validation/post-execution.d.ts.map +0 -1
  247. package/dist/scripts/lib/validation/post-execution.js +0 -110
  248. package/dist/scripts/lib/validation/post-execution.js.map +0 -1
  249. package/dist/scripts/lib/validation/pre-execution.d.ts +0 -165
  250. package/dist/scripts/lib/validation/pre-execution.d.ts.map +0 -1
  251. package/dist/scripts/lib/validation/pre-execution.js +0 -466
  252. package/dist/scripts/lib/validation/pre-execution.js.map +0 -1
  253. package/dist/scripts/lib/validators/documentation-validator.d.ts +0 -242
  254. package/dist/scripts/lib/validators/documentation-validator.d.ts.map +0 -1
  255. package/dist/scripts/lib/validators/documentation-validator.js +0 -584
  256. package/dist/scripts/lib/validators/documentation-validator.js.map +0 -1
  257. package/dist/scripts/lib/validators/index.d.ts +0 -11
  258. package/dist/scripts/lib/validators/index.d.ts.map +0 -1
  259. package/dist/scripts/lib/validators/index.js +0 -11
  260. package/dist/scripts/lib/validators/index.js.map +0 -1
  261. package/docker-compose.yml +0 -46
  262. package/docs/INDEX.md +0 -88
  263. package/docs/README.md +0 -774
  264. package/docs/SETUP.md +0 -264
  265. package/docs/servers/code-validator.md +0 -586
  266. package/eslint.config.js +0 -7
  267. package/migrations/0001_add_crdt_columns.sql +0 -8
  268. package/migrations/0001_rollback.sql +0 -6
  269. package/migrations/005_performance_indexes.sql +0 -190
  270. package/migrations/backfill_crdt_meta.js +0 -45
  271. package/src/__tests__/hypervisor.test.ts +0 -212
  272. package/src/adapters/db.ts +0 -180
  273. package/src/config/config.json +0 -49
  274. package/src/config/index.ts +0 -30
  275. package/src/contracts.ts +0 -221
  276. package/src/hypervisor.ts +0 -464
  277. package/src/index.ts +0 -87
  278. package/src/servers/adapter.ts +0 -643
  279. package/src/servers/code-validator.ts +0 -188
  280. package/src/servers/neon.ts +0 -103
  281. package/src/servers/next-devtools.ts +0 -230
  282. package/src/servers/playwright.ts +0 -77
  283. package/src/servers/stripe.ts +0 -99
  284. package/src/servers/supabase.ts +0 -161
  285. package/src/servers/vercel.ts +0 -100
  286. package/src/servers/vultr-test.ts +0 -97
  287. package/tsconfig.json +0 -12
  288. package/vitest.config.ts +0 -22
  289. /package/dist/{packages/mcp/src/adapters → adapters}/db.js +0 -0
  290. /package/dist/{packages/mcp/src/config → config}/index.d.ts +0 -0
  291. /package/dist/{packages/mcp/src/config → config}/index.js +0 -0
  292. /package/dist/{packages/mcp/src/contracts.d.ts → contracts.d.ts} +0 -0
  293. /package/dist/{packages/mcp/src/contracts.js → contracts.js} +0 -0
@@ -1,394 +0,0 @@
1
- /**
2
- * Telemetry and monitoring utilities.
3
- *
4
- * Provides comprehensive metrics collection and performance monitoring:
5
- * - Script execution tracking
6
- * - Error tracking and analytics
7
- * - Cache performance metrics
8
- * - Script usage statistics
9
- * - Performance measurement
10
- * - Persistent metric storage
11
- *
12
- * @example
13
- * ```typescript
14
- * import { telemetry } from './telemetry.js'
15
- *
16
- * // Track script execution
17
- * const timer = telemetry.startTimer('build')
18
- * // ... build process ...
19
- * timer.stop()
20
- *
21
- * // Track errors
22
- * telemetry.trackError('build-failed', error)
23
- *
24
- * // Get metrics
25
- * const metrics = await telemetry.getMetrics()
26
- * console.log(`Cache hit rate: ${metrics.cacheHitRate}%`)
27
- * ```
28
- *
29
- * @dependencies
30
- * - node:fs/promises - File operations for metric persistence
31
- * - node:path - Path resolution for .revealui directory
32
- * - node:perf_hooks - Performance measurement
33
- */
34
- import { mkdir, readFile, writeFile } from 'node:fs/promises';
35
- import { join } from 'node:path';
36
- import { createLogger } from './logger.js';
37
- import { getProjectRoot } from './paths.js';
38
- import { fileExists, formatBytes, formatDuration } from './utils.js';
39
- const logger = createLogger({ prefix: 'Telemetry' });
40
- // =============================================================================
41
- // Telemetry Class
42
- // =============================================================================
43
- export class Telemetry {
44
- events = [];
45
- storageDir;
46
- persistent;
47
- autoFlushInterval;
48
- maxEventsInMemory;
49
- verbose;
50
- timers = new Map();
51
- flushTimer = null;
52
- projectRoot = null;
53
- constructor(options = {}) {
54
- this.storageDir = options.storageDir ?? '.telemetry';
55
- this.persistent = options.persistent ?? true;
56
- this.autoFlushInterval = options.autoFlushInterval ?? 60_000; // 1 minute
57
- this.maxEventsInMemory = options.maxEventsInMemory ?? 1000;
58
- this.verbose = options.verbose ?? false;
59
- // Start auto-flush if enabled
60
- if (this.autoFlushInterval > 0 && this.persistent) {
61
- this.startAutoFlush();
62
- }
63
- }
64
- /**
65
- * Get project root directory.
66
- */
67
- async getRoot() {
68
- if (!this.projectRoot) {
69
- this.projectRoot = await getProjectRoot(import.meta.url);
70
- }
71
- return this.projectRoot;
72
- }
73
- /**
74
- * Get storage directory path.
75
- */
76
- async getStorageDir() {
77
- const root = await this.getRoot();
78
- return join(root, this.storageDir);
79
- }
80
- /**
81
- * Get metrics file path for a given date.
82
- */
83
- async getMetricsFilePath(date = new Date()) {
84
- const dir = await this.getStorageDir();
85
- const dateStr = date.toISOString().split('T')[0]; // YYYY-MM-DD
86
- return join(dir, `metrics-${dateStr}.json`);
87
- }
88
- /**
89
- * Start auto-flush timer.
90
- */
91
- startAutoFlush() {
92
- if (this.flushTimer) {
93
- return;
94
- }
95
- this.flushTimer = setInterval(() => {
96
- this.flush().catch((error) => {
97
- logger.warn(`Auto-flush failed: ${error.message}`);
98
- });
99
- }, this.autoFlushInterval);
100
- // Cleanup on process exit
101
- process.on('beforeExit', () => {
102
- if (this.flushTimer) {
103
- clearInterval(this.flushTimer);
104
- }
105
- this.flush().catch(() => {
106
- // Ignore flush errors on exit
107
- });
108
- });
109
- }
110
- /**
111
- * Record a metric event.
112
- */
113
- record(event) {
114
- this.events.push(event);
115
- if (this.verbose) {
116
- logger.info(`[${event.type}] ${event.name}: ${event.value}`);
117
- }
118
- // Auto-flush if we hit the memory limit
119
- if (this.events.length >= this.maxEventsInMemory && this.persistent) {
120
- this.flush().catch((error) => {
121
- logger.warn(`Auto-flush failed: ${error.message}`);
122
- });
123
- }
124
- }
125
- /**
126
- * Increment a counter.
127
- */
128
- counter(name, value = 1, metadata) {
129
- this.record({
130
- name,
131
- type: 'counter',
132
- value,
133
- timestamp: Date.now(),
134
- metadata,
135
- });
136
- }
137
- /**
138
- * Start a timer.
139
- */
140
- startTimer(name, metadata) {
141
- const startTime = Date.now();
142
- const timerId = `${name}-${startTime}`;
143
- this.timers.set(timerId, startTime);
144
- return {
145
- stop: (additionalMetadata) => {
146
- const endTime = Date.now();
147
- const duration = endTime - startTime;
148
- this.timers.delete(timerId);
149
- this.record({
150
- name,
151
- type: 'timer',
152
- value: duration,
153
- timestamp: endTime,
154
- metadata: { ...metadata, ...additionalMetadata },
155
- });
156
- return duration;
157
- },
158
- elapsed: () => {
159
- return Date.now() - startTime;
160
- },
161
- };
162
- }
163
- /**
164
- * Record a gauge value.
165
- */
166
- gauge(name, value, metadata) {
167
- this.record({
168
- name,
169
- type: 'gauge',
170
- value,
171
- timestamp: Date.now(),
172
- metadata,
173
- });
174
- }
175
- /**
176
- * Track an error.
177
- */
178
- trackError(name, error, metadata) {
179
- const errorMessage = error instanceof Error ? error.message : error;
180
- this.record({
181
- name,
182
- type: 'error',
183
- value: 1,
184
- timestamp: Date.now(),
185
- metadata: {
186
- ...metadata,
187
- message: errorMessage,
188
- stack: error instanceof Error ? error.stack : undefined,
189
- },
190
- });
191
- }
192
- /**
193
- * Flush events to persistent storage.
194
- */
195
- async flush() {
196
- if (!this.persistent || this.events.length === 0) {
197
- return;
198
- }
199
- const dir = await this.getStorageDir();
200
- await mkdir(dir, { recursive: true });
201
- const filePath = await this.getMetricsFilePath();
202
- const eventsToFlush = [...this.events];
203
- this.events = [];
204
- try {
205
- // Load existing events for today
206
- let existingEvents = [];
207
- if (await fileExists(filePath)) {
208
- const content = await readFile(filePath, 'utf-8');
209
- existingEvents = JSON.parse(content);
210
- }
211
- // Append new events
212
- const allEvents = [...existingEvents, ...eventsToFlush];
213
- // Write back
214
- await writeFile(filePath, JSON.stringify(allEvents, null, 2));
215
- if (this.verbose) {
216
- logger.info(`Flushed ${eventsToFlush.length} events to ${filePath}`);
217
- }
218
- }
219
- catch (error) {
220
- logger.error(`Failed to flush events: ${error}`);
221
- // Put events back in memory
222
- this.events.unshift(...eventsToFlush);
223
- throw error;
224
- }
225
- }
226
- /**
227
- * Load events from storage.
228
- */
229
- async loadEvents(startDate, endDate = new Date()) {
230
- const dir = await this.getStorageDir();
231
- if (!(await fileExists(dir))) {
232
- return [];
233
- }
234
- const allEvents = [];
235
- const start = startDate || new Date(endDate.getTime() - 7 * 24 * 60 * 60 * 1000); // Default: last 7 days
236
- // Iterate through each day
237
- const currentDate = new Date(start);
238
- while (currentDate <= endDate) {
239
- const filePath = await this.getMetricsFilePath(currentDate);
240
- if (await fileExists(filePath)) {
241
- try {
242
- const content = await readFile(filePath, 'utf-8');
243
- const events = JSON.parse(content);
244
- allEvents.push(...events);
245
- }
246
- catch (error) {
247
- logger.warn(`Failed to load metrics from ${filePath}: ${error}`);
248
- }
249
- }
250
- currentDate.setDate(currentDate.getDate() + 1);
251
- }
252
- return allEvents;
253
- }
254
- /**
255
- * Get aggregated metrics.
256
- */
257
- async getMetrics(startDate, endDate = new Date()) {
258
- // Flush current events first
259
- if (this.persistent) {
260
- await this.flush();
261
- }
262
- // Load events from storage
263
- const events = await this.loadEvents(startDate, endDate);
264
- // Include in-memory events
265
- const allEvents = [...events, ...this.events];
266
- // Aggregate metrics
267
- const eventsByType = {};
268
- const scriptExecutions = [];
269
- let cacheHits = 0;
270
- let cacheMisses = 0;
271
- let totalCacheSize = 0;
272
- const errorsByType = {};
273
- const recentErrors = [];
274
- let totalDuration = 0;
275
- for (const event of allEvents) {
276
- eventsByType[event.type] = (eventsByType[event.type] || 0) + 1;
277
- if (event.type === 'timer') {
278
- scriptExecutions.push({ name: event.name, duration: event.value });
279
- totalDuration += event.value;
280
- }
281
- else if (event.type === 'counter') {
282
- if (event.name.includes('cache-hit')) {
283
- cacheHits += event.value;
284
- }
285
- else if (event.name.includes('cache-miss')) {
286
- cacheMisses += event.value;
287
- }
288
- }
289
- else if (event.type === 'gauge' && event.name.includes('cache-size')) {
290
- totalCacheSize = event.value;
291
- }
292
- else if (event.type === 'error') {
293
- errorsByType[event.name] = (errorsByType[event.name] || 0) + 1;
294
- recentErrors.push({
295
- name: event.name,
296
- timestamp: event.timestamp,
297
- message: event.metadata?.message,
298
- });
299
- }
300
- }
301
- // Sort executions by duration
302
- scriptExecutions.sort((a, b) => b.duration - a.duration);
303
- // Calculate averages
304
- const averageDuration = scriptExecutions.length > 0 ? totalDuration / scriptExecutions.length : 0;
305
- // Get slowest and fastest
306
- const slowest = scriptExecutions.slice(0, 5);
307
- const fastest = scriptExecutions.slice(-5).reverse();
308
- // Calculate cache hit rate
309
- const totalCacheRequests = cacheHits + cacheMisses;
310
- const cacheHitRate = totalCacheRequests > 0 ? (cacheHits / totalCacheRequests) * 100 : 0;
311
- // Sort recent errors by timestamp
312
- recentErrors.sort((a, b) => b.timestamp - a.timestamp);
313
- return {
314
- totalEvents: allEvents.length,
315
- eventsByType,
316
- scripts: {
317
- totalExecutions: scriptExecutions.length,
318
- averageDuration,
319
- slowest,
320
- fastest,
321
- failures: errorsByType['script-failed'] || 0,
322
- },
323
- cache: {
324
- hits: cacheHits,
325
- misses: cacheMisses,
326
- hitRate: Math.round(cacheHitRate * 100) / 100,
327
- totalSize: totalCacheSize,
328
- formattedSize: formatBytes(totalCacheSize),
329
- },
330
- errors: {
331
- total: recentErrors.length,
332
- byType: errorsByType,
333
- recent: recentErrors.slice(0, 10),
334
- },
335
- performance: {
336
- averageScriptDuration: averageDuration,
337
- totalDuration,
338
- formattedTotalDuration: formatDuration(totalDuration),
339
- },
340
- period: {
341
- start: startDate?.getTime() || allEvents[0]?.timestamp || Date.now(),
342
- end: endDate.getTime(),
343
- duration: endDate.getTime() - (startDate?.getTime() || allEvents[0]?.timestamp || Date.now()),
344
- },
345
- };
346
- }
347
- /**
348
- * Clear all metrics.
349
- */
350
- clear() {
351
- this.events = [];
352
- this.timers.clear();
353
- }
354
- /**
355
- * Stop telemetry and cleanup.
356
- */
357
- async stop() {
358
- if (this.flushTimer) {
359
- clearInterval(this.flushTimer);
360
- this.flushTimer = null;
361
- }
362
- if (this.persistent) {
363
- await this.flush();
364
- }
365
- }
366
- }
367
- // =============================================================================
368
- // Singleton Instance
369
- // =============================================================================
370
- let globalTelemetry = null;
371
- /**
372
- * Get the global telemetry instance.
373
- */
374
- export function getTelemetry() {
375
- if (!globalTelemetry) {
376
- globalTelemetry = new Telemetry({
377
- persistent: true,
378
- autoFlushInterval: 60_000, // 1 minute
379
- verbose: false,
380
- });
381
- }
382
- return globalTelemetry;
383
- }
384
- /**
385
- * Global telemetry instance.
386
- */
387
- export const telemetry = getTelemetry();
388
- /**
389
- * Create a new telemetry instance.
390
- */
391
- export function createTelemetry(options) {
392
- return new Telemetry(options);
393
- }
394
- //# sourceMappingURL=telemetry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../../../scripts/lib/telemetry.ts"],"names":[],"mappings":"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"}
@@ -1,270 +0,0 @@
1
- /**
2
- * Miscellaneous Utility Functions
3
- *
4
- * These functions are migrated from the legacy utils files
5
- * to provide backward compatibility.
6
- *
7
- * @dependencies
8
- * - scripts/lib/errors.ts - ErrorCode enum and ScriptError class
9
- * - node:fs/promises - File system operations
10
- * - node:readline - Interactive CLI prompts
11
- */
12
- /**
13
- * Reads a file and returns its contents as a string.
14
- *
15
- * @example
16
- * ```typescript
17
- * const content = await readFileContent('./config.json')
18
- * ```
19
- */
20
- export declare function readFileContent(filePath: string): Promise<string>;
21
- /**
22
- * Writes content to a file.
23
- *
24
- * @example
25
- * ```typescript
26
- * await writeFileContent('./output.txt', 'Hello, world!')
27
- * ```
28
- */
29
- export declare function writeFileContent(filePath: string, content: string): Promise<void>;
30
- /**
31
- * Checks if a file exists.
32
- *
33
- * @example
34
- * ```typescript
35
- * if (await fileExists('./config.json')) {
36
- * // File exists
37
- * }
38
- * ```
39
- */
40
- export declare function fileExists(filePath: string): Promise<boolean>;
41
- /**
42
- * Reads a file and returns true if it exists and has content.
43
- * Returns false if the file doesn't exist.
44
- */
45
- export declare function readFileIfExists(filePath: string): Promise<string | null>;
46
- /**
47
- * Prompts the user for input and returns their response.
48
- *
49
- * @example
50
- * ```typescript
51
- * const name = await prompt('Enter your name: ')
52
- * ```
53
- */
54
- export declare function prompt(question: string): Promise<string>;
55
- /**
56
- * Prompts the user for confirmation (yes/no).
57
- *
58
- * @example
59
- * ```typescript
60
- * if (await confirm('Are you sure?')) {
61
- * // User confirmed
62
- * }
63
- * ```
64
- */
65
- export declare function confirm(question: string, defaultValue?: boolean): Promise<boolean>;
66
- /**
67
- * Sleeps for the specified number of milliseconds.
68
- */
69
- export declare function sleep(ms: number): Promise<void>;
70
- /**
71
- * Waits for a condition to be true, polling at regular intervals.
72
- *
73
- * @param condition - Function that returns true when the condition is met
74
- * @param timeout - Maximum time to wait in milliseconds (default: 30000)
75
- * @param interval - Polling interval in milliseconds (default: 1000)
76
- * @returns True if condition was met, false if timeout
77
- *
78
- * @example
79
- * ```typescript
80
- * await waitFor(() => serverIsReady(), 10000)
81
- * ```
82
- */
83
- export declare function waitFor(condition: () => boolean | Promise<boolean>, timeout?: number, interval?: number): Promise<boolean>;
84
- /**
85
- * Generates a random ID string.
86
- */
87
- export declare function generateId(prefix?: string, length?: number): string;
88
- /**
89
- * Formats bytes into a human-readable string.
90
- */
91
- export declare function formatBytes(bytes: number): string;
92
- /**
93
- * Formats a duration in milliseconds into a human-readable string.
94
- */
95
- export declare function formatDuration(ms: number): string;
96
- /**
97
- * Truncates a string to a maximum length.
98
- */
99
- export declare function truncate(str: string, maxLength: number, suffix?: string): string;
100
- /**
101
- * Ensures a value is an array.
102
- */
103
- export declare function ensureArray<T>(value: T | T[]): T[];
104
- /**
105
- * Debounces a function call.
106
- */
107
- export declare function debounce<T extends (...args: unknown[]) => unknown>(fn: T, delay: number): (...args: Parameters<T>) => void;
108
- /**
109
- * Requires an environment variable to be set.
110
- * Throws an error if the variable is not defined.
111
- *
112
- * @param key - Primary environment variable name
113
- * @param fallbackKey - Optional fallback variable name
114
- * @returns The environment variable value
115
- * @throws Error if neither variable is set
116
- *
117
- * @example
118
- * ```typescript
119
- * const dbUrl = requireEnv('POSTGRES_URL', 'DATABASE_URL')
120
- * ```
121
- */
122
- export declare function requireEnv(key: string, fallbackKey?: string): string;
123
- /**
124
- * Options for dependency validation.
125
- */
126
- export interface ValidateDependenciesOptions {
127
- /** Log missing dependencies */
128
- log?: boolean;
129
- /** Throw on missing dependencies */
130
- throwOnMissing?: boolean;
131
- }
132
- /**
133
- * Validates that required npm packages are installed.
134
- *
135
- * @param packages - List of package names to check
136
- * @param options - Validation options
137
- * @returns True if all dependencies are available
138
- *
139
- * @example
140
- * ```typescript
141
- * await validateDependencies(['pg', 'dotenv'], { log: true })
142
- * ```
143
- */
144
- export declare function validateDependencies(packages: string[], options?: ValidateDependenciesOptions): Promise<boolean>;
145
- /**
146
- * Options for directory scanning
147
- */
148
- export interface ScanDirectoryOptions {
149
- /** File extensions to include (e.g., ['.ts', '.tsx']) */
150
- extensions?: string[];
151
- /** Directory names to exclude (defaults to common build/cache dirs) */
152
- excludeDirs?: string[];
153
- /** Regex patterns to exclude files/directories */
154
- excludePatterns?: RegExp[];
155
- /** Include hidden files/directories (starting with .) */
156
- includeHidden?: boolean;
157
- /** Maximum depth to scan (default: unlimited) */
158
- maxDepth?: number;
159
- /** Follow symbolic links (default: false) */
160
- followSymlinks?: boolean;
161
- }
162
- /**
163
- * Scan a directory recursively for files matching criteria (async generator).
164
- *
165
- * This is the most memory-efficient approach for large directories.
166
- * Use this when processing files one at a time or when dealing with
167
- * potentially huge file sets. The generator yields files as they're found,
168
- * allowing immediate processing without loading everything into memory.
169
- *
170
- * @param dir - Directory path to scan (absolute or relative)
171
- * @param options - Scanning options
172
- * @param options.extensions - File extensions to include (default: ['.ts', '.tsx', '.js', '.jsx'])
173
- * @param options.excludeDirs - Directory names to exclude (default: node_modules, dist, .next, etc.)
174
- * @param options.excludePatterns - Regex patterns for paths to exclude
175
- * @param options.includeHidden - Whether to include hidden files/directories (default: false)
176
- * @param options.maxDepth - Maximum recursion depth (default: Infinity)
177
- * @param options.followSymlinks - Whether to follow symbolic links (default: false)
178
- * @yields Absolute file paths matching the criteria
179
- *
180
- * @example
181
- * ```typescript
182
- * // Process files one at a time (memory efficient)
183
- * for await (const file of scanDirectory('./src', { extensions: ['.ts', '.tsx'] })) {
184
- * const content = await readFile(file, 'utf-8')
185
- * // Process file...
186
- * }
187
- *
188
- * // With custom exclusions
189
- * for await (const file of scanDirectory('./packages', {
190
- * extensions: ['.ts'],
191
- * excludeDirs: ['node_modules', '__tests__'],
192
- * excludePatterns: [/\.test\.ts$/],
193
- * maxDepth: 3
194
- * })) {
195
- * console.log(file)
196
- * }
197
- * ```
198
- *
199
- * @see {@link scanDirectoryAll} to get all files as an array
200
- * @see {@link scanDirectorySync} for synchronous version
201
- */
202
- export declare function scanDirectory(dir: string, options?: ScanDirectoryOptions): AsyncGenerator<string>;
203
- /**
204
- * Scan a directory and return all matching files as an array (async).
205
- *
206
- * Use this when you need all files at once for batch processing or analysis.
207
- * For large directories (>1000 files), prefer scanDirectory() generator to
208
- * avoid loading everything into memory at once.
209
- *
210
- * @param dir - Directory path to scan (absolute or relative)
211
- * @param options - Scanning options (same as scanDirectory)
212
- * @returns Promise resolving to array of absolute file paths
213
- *
214
- * @example
215
- * ```typescript
216
- * // Get all TypeScript files
217
- * const files = await scanDirectoryAll('./src', { extensions: ['.ts', '.tsx'] })
218
- * console.log(`Found ${files.length} TypeScript files`)
219
- *
220
- * // Analyze all files at once
221
- * const result = await analyzeFiles(files, process.cwd())
222
- *
223
- * // With custom options
224
- * const sourceFiles = await scanDirectoryAll('./packages', {
225
- * extensions: ['.ts'],
226
- * excludeDirs: ['node_modules', 'dist', '__tests__'],
227
- * includeHidden: false
228
- * })
229
- * ```
230
- *
231
- * @see {@link scanDirectory} for memory-efficient generator version
232
- * @see {@link scanDirectorySync} for synchronous version
233
- */
234
- export declare function scanDirectoryAll(dir: string, options?: ScanDirectoryOptions): Promise<string[]>;
235
- /**
236
- * Scan a directory synchronously (blocking).
237
- *
238
- * Use this only when you absolutely must have synchronous file scanning
239
- * (e.g., in module initialization, config loading). Prefer scanDirectory()
240
- * or scanDirectoryAll() for better performance and non-blocking I/O.
241
- * This is provided for backward compatibility with existing scripts.
242
- *
243
- * @param dir - Directory path to scan (absolute or relative)
244
- * @param options - Scanning options (same as scanDirectory)
245
- * @param options.extensions - File extensions to include (default: ['.ts', '.tsx', '.js', '.jsx'])
246
- * @param options.excludeDirs - Directory names to exclude
247
- * @param options.excludePatterns - Regex patterns for paths to exclude
248
- * @param options.includeHidden - Whether to include hidden files
249
- * @param options.maxDepth - Maximum recursion depth
250
- * @param options.followSymlinks - Whether to follow symbolic links
251
- * @returns Array of absolute file paths
252
- *
253
- * @example
254
- * ```typescript
255
- * // Basic synchronous scanning
256
- * const files = scanDirectorySync('./src', { extensions: ['.ts', '.tsx'] })
257
- * console.log(`Found ${files.length} files`)
258
- *
259
- * // In config file where async not available
260
- * const configFiles = scanDirectorySync('./config', {
261
- * extensions: ['.json', '.yaml'],
262
- * maxDepth: 2
263
- * })
264
- * ```
265
- *
266
- * @see {@link scanDirectory} for async generator version
267
- * @see {@link scanDirectoryAll} for async array version
268
- */
269
- export declare function scanDirectorySync(dir: string, options?: ScanDirectoryOptions): string[];
270
- //# sourceMappingURL=utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../scripts/lib/utils.ts"],"names":[],"mappings":"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"}