@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,232 @@
1
+ /**
2
+ * Zombie Process Detector
3
+ *
4
+ * Periodically scans for defunct (zombie) processes and attempts automatic cleanup.
5
+ * Zombie processes are dead processes that haven't been reaped by their parent.
6
+ */
7
+ import { exec } from 'node:child_process';
8
+ import { promisify } from 'node:util';
9
+ import { logger } from '../utils/logger-server.js';
10
+ import { processRegistry } from './process-registry.js';
11
+ import { DEFAULT_MONITORING_CONFIG } from './types.js';
12
+ const execAsync = promisify(exec);
13
+ /**
14
+ * Zombie detector class
15
+ */
16
+ class ZombieDetector {
17
+ interval = null;
18
+ zombieHistory = [];
19
+ enabled = DEFAULT_MONITORING_CONFIG.enabled;
20
+ detectionInterval = DEFAULT_MONITORING_CONFIG.zombieDetectionInterval;
21
+ maxHistory = DEFAULT_MONITORING_CONFIG.maxZombieHistory;
22
+ onZombieDetected;
23
+ /**
24
+ * Start zombie detection
25
+ */
26
+ start() {
27
+ if (!this.enabled || this.interval)
28
+ return;
29
+ logger.info('Starting zombie process detector', {
30
+ interval: this.detectionInterval,
31
+ });
32
+ this.interval = setInterval(() => {
33
+ this.scan().catch((error) => {
34
+ logger.error('Zombie detection scan failed', { error });
35
+ });
36
+ }, this.detectionInterval);
37
+ // Prevent interval from keeping process alive
38
+ this.interval.unref();
39
+ }
40
+ /**
41
+ * Stop zombie detection
42
+ */
43
+ stop() {
44
+ if (this.interval) {
45
+ clearInterval(this.interval);
46
+ this.interval = null;
47
+ logger.info('Stopped zombie process detector');
48
+ }
49
+ }
50
+ /**
51
+ * Perform a single scan for zombie processes
52
+ */
53
+ async scan() {
54
+ if (!this.enabled)
55
+ return [];
56
+ try {
57
+ // Use ps to find defunct processes
58
+ // Format: PID PPID COMMAND STATE
59
+ const { stdout } = await execAsync("ps axo pid,ppid,comm,state | grep -E ' (Z|z)' || true");
60
+ const zombies = [];
61
+ if (stdout.trim()) {
62
+ const lines = stdout.trim().split('\n');
63
+ for (const line of lines) {
64
+ const match = line.trim().match(/^(\d+)\s+(\d+)\s+(\S+)\s+[Zz]/);
65
+ if (match?.[1] && match[2] && match[3]) {
66
+ const pid = parseInt(match[1], 10);
67
+ const ppid = parseInt(match[2], 10);
68
+ const command = match[3];
69
+ const zombie = {
70
+ pid,
71
+ ppid,
72
+ command,
73
+ detectedAt: Date.now(),
74
+ trackedProcess: processRegistry.get(pid),
75
+ };
76
+ zombies.push(zombie);
77
+ // Mark in registry
78
+ processRegistry.markZombie(pid);
79
+ // Add to history
80
+ this.addToHistory(zombie);
81
+ // Log detection
82
+ logger.warn('Zombie process detected', {
83
+ pid,
84
+ ppid,
85
+ command,
86
+ });
87
+ // Attempt cleanup
88
+ await this.attemptCleanup(zombie);
89
+ // Notify callback
90
+ if (this.onZombieDetected) {
91
+ this.onZombieDetected(zombie);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ return zombies;
97
+ }
98
+ catch (error) {
99
+ logger.error('Failed to scan for zombie processes', { error });
100
+ return [];
101
+ }
102
+ }
103
+ /**
104
+ * Attempt to clean up a zombie process
105
+ */
106
+ async attemptCleanup(zombie) {
107
+ try {
108
+ // Zombies can't be killed directly - need to signal parent to reap them
109
+ // Try sending SIGCHLD to parent process
110
+ logger.info('Attempting zombie cleanup by signaling parent', {
111
+ zombie: zombie.pid,
112
+ parent: zombie.ppid,
113
+ });
114
+ // Check if parent exists
115
+ const { stdout: parentExists } = await execAsync(`ps -p ${zombie.ppid} -o pid= || true`);
116
+ if (!parentExists.trim()) {
117
+ logger.warn('Zombie parent process does not exist', {
118
+ zombie: zombie.pid,
119
+ parent: zombie.ppid,
120
+ });
121
+ return false;
122
+ }
123
+ // Send SIGCHLD to parent
124
+ process.kill(zombie.ppid, 'SIGCHLD');
125
+ // Wait a moment and check if zombie is gone
126
+ await new Promise((resolve) => setTimeout(resolve, 1000));
127
+ const { stdout: zombieStillExists } = await execAsync(`ps -p ${zombie.pid} -o state= || true`);
128
+ if (!zombieStillExists.trim()) {
129
+ logger.info('Zombie process successfully reaped', {
130
+ pid: zombie.pid,
131
+ });
132
+ return true;
133
+ }
134
+ logger.warn('Zombie process persists after cleanup attempt', {
135
+ pid: zombie.pid,
136
+ ppid: zombie.ppid,
137
+ });
138
+ return false;
139
+ }
140
+ catch (error) {
141
+ logger.error('Failed to cleanup zombie process', {
142
+ zombie: zombie.pid,
143
+ error,
144
+ });
145
+ return false;
146
+ }
147
+ }
148
+ /**
149
+ * Add zombie to history
150
+ */
151
+ addToHistory(zombie) {
152
+ this.zombieHistory.unshift(zombie);
153
+ // Trim history
154
+ if (this.zombieHistory.length > this.maxHistory) {
155
+ this.zombieHistory = this.zombieHistory.slice(0, this.maxHistory);
156
+ }
157
+ }
158
+ /**
159
+ * Get zombie history
160
+ */
161
+ getHistory() {
162
+ return [...this.zombieHistory];
163
+ }
164
+ /**
165
+ * Get current zombie count
166
+ */
167
+ getCount() {
168
+ return processRegistry.getZombies().length;
169
+ }
170
+ /**
171
+ * Clear history
172
+ */
173
+ clearHistory() {
174
+ this.zombieHistory = [];
175
+ }
176
+ /**
177
+ * Set zombie detection callback
178
+ */
179
+ onZombie(callback) {
180
+ this.onZombieDetected = callback;
181
+ }
182
+ /**
183
+ * Enable or disable detection
184
+ */
185
+ setEnabled(enabled) {
186
+ this.enabled = enabled;
187
+ if (!enabled && this.interval) {
188
+ this.stop();
189
+ }
190
+ else if (enabled && !this.interval) {
191
+ this.start();
192
+ }
193
+ }
194
+ /**
195
+ * Check if detection is enabled
196
+ */
197
+ isEnabled() {
198
+ return this.enabled;
199
+ }
200
+ /**
201
+ * Check if detector is running
202
+ */
203
+ isRunning() {
204
+ return this.interval !== null;
205
+ }
206
+ }
207
+ /**
208
+ * Singleton instance
209
+ */
210
+ export const zombieDetector = new ZombieDetector();
211
+ /**
212
+ * Convenience functions
213
+ */
214
+ export function startZombieDetection() {
215
+ zombieDetector.start();
216
+ }
217
+ export function stopZombieDetection() {
218
+ zombieDetector.stop();
219
+ }
220
+ export function scanForZombies() {
221
+ return zombieDetector.scan();
222
+ }
223
+ export function getZombieHistory() {
224
+ return zombieDetector.getHistory();
225
+ }
226
+ export function getZombieCount() {
227
+ return zombieDetector.getCount();
228
+ }
229
+ export function onZombieDetected(callback) {
230
+ zombieDetector.onZombie(callback);
231
+ }
232
+ //# sourceMappingURL=zombie-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zombie-detector.js","sourceRoot":"","sources":["../../../../../../core/src/monitoring/zombie-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Structured Logging Infrastructure
3
+ *
4
+ * Re-exports from @revealui/utils to maintain backward compatibility.
5
+ * The actual implementation has been moved to @revealui/utils to break circular dependencies.
6
+ */
7
+ export type { LogContext, LogEntry, LoggerConfig, LogLevel, } from '@revealui/utils/logger';
8
+ export { createLogger, Logger, logAudit, logError, logger, logQuery, } from '@revealui/utils/logger';
9
+ /**
10
+ * Request logger middleware
11
+ */
12
+ export declare function createRequestLogger<TRequest = unknown, TResponse = unknown>(options?: {
13
+ includeBody?: boolean;
14
+ includeHeaders?: boolean;
15
+ }): (request: TRequest & {
16
+ method: string;
17
+ url: string;
18
+ headers?: {
19
+ get?: (key: string) => string | null;
20
+ entries?: () => Iterable<[string, string]>;
21
+ };
22
+ }, next: () => Promise<TResponse>) => Promise<TResponse>;
23
+ /**
24
+ * Performance logger
25
+ */
26
+ export declare function logPerformance(operation: string, duration: number, context?: Record<string, unknown>): void;
27
+ /**
28
+ * API call logger
29
+ */
30
+ export declare function logAPICall(method: string, url: string, status: number, duration: number, context?: Record<string, unknown>): void;
31
+ /**
32
+ * Cache operation logger
33
+ */
34
+ export declare function logCache(operation: 'hit' | 'miss' | 'set' | 'delete', key: string, context?: Record<string, unknown>): void;
35
+ /**
36
+ * User action logger
37
+ */
38
+ export declare function logUserAction(action: string, userId?: string, context?: Record<string, unknown>): void;
39
+ /**
40
+ * System event logger
41
+ */
42
+ export declare function logSystemEvent(event: string, context?: Record<string, unknown>): void;
43
+ /**
44
+ * Sanitize sensitive data from logs
45
+ */
46
+ export declare function sanitizeLogData(data: Record<string, unknown>): Record<string, unknown>;
47
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../../../core/src/observability/logger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,YAAY,EACV,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,QAAQ,GACT,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACL,YAAY,EACZ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,MAAM,wBAAwB,CAAA;AAK/B;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,GAAG,OAAO,EAAE,SAAS,GAAG,OAAO,EACzE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAA;CAAO,IAG/D,SAAS,QAAQ,GAAG;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;KAAE,CAAA;CAC/F,EACD,MAAM,MAAM,OAAO,CAAC,SAAS,CAAC,KAC7B,OAAO,CAAC,SAAS,CAAC,CA6CtB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAgBN;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACtB,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,EAC5C,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAKrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA2BtF"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Structured Logging Infrastructure
3
+ *
4
+ * Re-exports from @revealui/utils to maintain backward compatibility.
5
+ * The actual implementation has been moved to @revealui/utils to break circular dependencies.
6
+ */
7
+ // Import logger for internal use
8
+ import { logger as utilsLogger } from '@revealui/utils/logger';
9
+ export { createLogger, Logger, logAudit, logError, logger, logQuery, } from '@revealui/utils/logger';
10
+ // Additional helper functions that were in core but not in utils
11
+ // These can stay here as they're core-specific
12
+ /**
13
+ * Request logger middleware
14
+ */
15
+ export function createRequestLogger(options = {}) {
16
+ return async (request, next) => {
17
+ // Import logger at runtime to avoid circular deps
18
+ const { logger } = await import('@revealui/utils/logger');
19
+ const requestId = crypto.randomUUID();
20
+ const startTime = Date.now();
21
+ const requestLogger = logger.child({
22
+ requestId,
23
+ method: request.method,
24
+ url: request.url,
25
+ userAgent: request.headers?.get?.('user-agent'),
26
+ });
27
+ requestLogger.info('Request started');
28
+ if (options.includeHeaders) {
29
+ requestLogger.debug('Request headers', {
30
+ headers: Object.fromEntries(request.headers?.entries?.() || []),
31
+ });
32
+ }
33
+ try {
34
+ const response = await next();
35
+ const duration = Date.now() - startTime;
36
+ const responseWithStatus = response;
37
+ requestLogger.info('Request completed', {
38
+ status: responseWithStatus.status ?? 200,
39
+ duration,
40
+ });
41
+ return response;
42
+ }
43
+ catch (error) {
44
+ const duration = Date.now() - startTime;
45
+ requestLogger.error('Request failed', error instanceof Error ? error : new Error(String(error)), { duration });
46
+ throw error;
47
+ }
48
+ };
49
+ }
50
+ /**
51
+ * Performance logger
52
+ */
53
+ export function logPerformance(operation, duration, context) {
54
+ const level = duration > 1000 ? 'warn' : 'info';
55
+ utilsLogger[level](`Performance: ${operation}`, {
56
+ ...context,
57
+ operation,
58
+ duration,
59
+ slow: duration > 1000,
60
+ });
61
+ }
62
+ /**
63
+ * API call logger
64
+ */
65
+ export function logAPICall(method, url, status, duration, context) {
66
+ const apiContext = {
67
+ ...context,
68
+ method,
69
+ url,
70
+ status,
71
+ duration,
72
+ };
73
+ if (status >= 400) {
74
+ utilsLogger.error('API call', undefined, apiContext);
75
+ }
76
+ else if (status >= 300) {
77
+ utilsLogger.warn('API call', apiContext);
78
+ }
79
+ else {
80
+ utilsLogger.info('API call', apiContext);
81
+ }
82
+ }
83
+ /**
84
+ * Cache operation logger
85
+ */
86
+ export function logCache(operation, key, context) {
87
+ utilsLogger.debug(`Cache ${operation}`, {
88
+ ...context,
89
+ operation,
90
+ key,
91
+ });
92
+ }
93
+ /**
94
+ * User action logger
95
+ */
96
+ export function logUserAction(action, userId, context) {
97
+ utilsLogger.info('User action', {
98
+ ...context,
99
+ action,
100
+ userId,
101
+ });
102
+ }
103
+ /**
104
+ * System event logger
105
+ */
106
+ export function logSystemEvent(event, context) {
107
+ utilsLogger.info('System event', {
108
+ ...context,
109
+ event,
110
+ });
111
+ }
112
+ /**
113
+ * Sanitize sensitive data from logs
114
+ */
115
+ export function sanitizeLogData(data) {
116
+ const sensitiveKeys = [
117
+ 'password',
118
+ 'token',
119
+ 'secret',
120
+ 'apiKey',
121
+ 'accessToken',
122
+ 'refreshToken',
123
+ 'creditCard',
124
+ 'ssn',
125
+ ];
126
+ const sanitized = {};
127
+ for (const [key, value] of Object.entries(data)) {
128
+ const lowerKey = key.toLowerCase();
129
+ if (sensitiveKeys.some((sensitive) => lowerKey.includes(sensitive))) {
130
+ sanitized[key] = '[REDACTED]';
131
+ }
132
+ else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
133
+ sanitized[key] = sanitizeLogData(value);
134
+ }
135
+ else {
136
+ sanitized[key] = value;
137
+ }
138
+ }
139
+ return sanitized;
140
+ }
141
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../../../core/src/observability/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Server Logger Utility
3
+ *
4
+ * Server-side logging utility for RevealUI framework.
5
+ * Supports different log levels and structured output.
6
+ * Automatically includes request ID from request context when available.
7
+ *
8
+ * WARNING: This module uses Node.js APIs (async_hooks via request-context).
9
+ * For client-safe logging, use './logger-client.js' instead.
10
+ */
11
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
12
+ export interface LogContext {
13
+ [key: string]: unknown;
14
+ }
15
+ export interface Logger {
16
+ debug(message: string, context?: LogContext): void;
17
+ info(message: string, context?: LogContext): void;
18
+ warn(message: string, context?: LogContext): void;
19
+ error(message: string, context?: LogContext): void;
20
+ }
21
+ /**
22
+ * Create a logger instance
23
+ *
24
+ * @param minLevel - Minimum log level to output (default: 'info')
25
+ * @returns Logger instance
26
+ */
27
+ export declare function createLogger(minLevel?: LogLevel): Logger;
28
+ /**
29
+ * Default logger instance
30
+ */
31
+ export declare const logger: Logger;
32
+ //# sourceMappingURL=logger-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-server.d.ts","sourceRoot":"","sources":["../../../../../../core/src/utils/logger-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IAClD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CACnD;AAsDD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAKxD;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAiB,CAAA"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Server Logger Utility
3
+ *
4
+ * Server-side logging utility for RevealUI framework.
5
+ * Supports different log levels and structured output.
6
+ * Automatically includes request ID from request context when available.
7
+ *
8
+ * WARNING: This module uses Node.js APIs (async_hooks via request-context).
9
+ * For client-safe logging, use './logger-client.js' instead.
10
+ */
11
+ import { getRequestId } from './request-context.js';
12
+ class ConsoleLogger {
13
+ minLevel;
14
+ constructor(minLevel = 'info') {
15
+ this.minLevel = minLevel;
16
+ }
17
+ shouldLog(level) {
18
+ const levels = ['debug', 'info', 'warn', 'error'];
19
+ return levels.indexOf(level) >= levels.indexOf(this.minLevel);
20
+ }
21
+ formatMessage(level, message, context) {
22
+ const timestamp = new Date().toISOString();
23
+ const prefix = `[${timestamp}] [${level.toUpperCase()}]`;
24
+ // Automatically include request ID if available
25
+ const requestId = getRequestId();
26
+ const enrichedContext = requestId ? { requestId, ...context } : context;
27
+ if (enrichedContext && Object.keys(enrichedContext).length > 0) {
28
+ return `${prefix} ${message} ${JSON.stringify(enrichedContext)}`;
29
+ }
30
+ return `${prefix} ${message}`;
31
+ }
32
+ debug(message, context) {
33
+ if (process.env.NODE_ENV !== 'production') {
34
+ console.debug(this.formatMessage('debug', message, context));
35
+ }
36
+ }
37
+ info(message, context) {
38
+ if (process.env.NODE_ENV !== 'production') {
39
+ console.info(this.formatMessage('info', message, context));
40
+ }
41
+ }
42
+ warn(message, context) {
43
+ if (process.env.NODE_ENV !== 'production') {
44
+ console.warn(this.formatMessage('warn', message, context));
45
+ }
46
+ }
47
+ error(message, context) {
48
+ if (this.shouldLog('error')) {
49
+ console.error(this.formatMessage('error', message, context));
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Create a logger instance
55
+ *
56
+ * @param minLevel - Minimum log level to output (default: 'info')
57
+ * @returns Logger instance
58
+ */
59
+ export function createLogger(minLevel) {
60
+ // In production, can be extended to use structured logging services
61
+ // For now, use console-based logger
62
+ const level = minLevel || process.env.LOG_LEVEL || 'info';
63
+ return new ConsoleLogger(level);
64
+ }
65
+ /**
66
+ * Default logger instance
67
+ */
68
+ export const logger = createLogger();
69
+ //# sourceMappingURL=logger-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-server.js","sourceRoot":"","sources":["../../../../../../core/src/utils/logger-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAenD,MAAM,aAAa;IACT,QAAQ,CAAU;IAE1B,YAAY,WAAqB,MAAM;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEO,SAAS,CAAC,KAAe;QAC/B,MAAM,MAAM,GAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QAC7D,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/D,CAAC;IAEO,aAAa,CAAC,KAAe,EAAE,OAAe,EAAE,OAAoB;QAC1E,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,MAAM,KAAK,CAAC,WAAW,EAAE,GAAG,CAAA;QAExD,gDAAgD;QAChD,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;QAChC,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;QAEvE,IAAI,eAAe,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,OAAO,GAAG,MAAM,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CAAA;QAClE,CAAC;QAED,OAAO,GAAG,MAAM,IAAI,OAAO,EAAE,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAoB;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAoB;QACxC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAoB;QACxC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAoB;QACzC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,QAAmB;IAC9C,oEAAoE;IACpE,oCAAoC;IACpC,MAAM,KAAK,GAAG,QAAQ,IAAK,OAAO,CAAC,GAAG,CAAC,SAAsB,IAAI,MAAM,CAAA;IACvE,OAAO,IAAI,aAAa,CAAC,KAAK,CAAC,CAAA;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,EAAE,CAAA"}