@revealui/mcp 0.1.0 → 0.1.1

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 +112 -0
  3. package/README.md +3 -0
  4. package/dist/adapters/db.d.ts.map +1 -0
  5. package/dist/adapters/db.js.map +1 -0
  6. package/dist/config/index.d.ts.map +1 -0
  7. package/dist/config/index.js.map +1 -0
  8. package/dist/contracts.d.ts.map +1 -0
  9. package/dist/contracts.js.map +1 -0
  10. package/dist/hypervisor.d.ts.map +1 -0
  11. package/dist/hypervisor.js.map +1 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/{packages/mcp/src/servers → servers}/adapter.d.ts +11 -1
  15. package/dist/servers/adapter.d.ts.map +1 -0
  16. package/dist/{packages/mcp/src/servers → servers}/adapter.js +20 -4
  17. package/dist/servers/adapter.js.map +1 -0
  18. package/dist/servers/revealui-content.d.ts +21 -0
  19. package/dist/servers/revealui-content.d.ts.map +1 -0
  20. package/dist/servers/revealui-content.js +199 -0
  21. package/dist/servers/revealui-content.js.map +1 -0
  22. package/dist/servers/revealui-email.d.ts +18 -0
  23. package/dist/servers/revealui-email.d.ts.map +1 -0
  24. package/dist/servers/revealui-email.js +185 -0
  25. package/dist/servers/revealui-email.js.map +1 -0
  26. package/dist/servers/revealui-stripe.d.ts +19 -0
  27. package/dist/servers/revealui-stripe.d.ts.map +1 -0
  28. package/dist/servers/revealui-stripe.js +211 -0
  29. package/dist/servers/revealui-stripe.js.map +1 -0
  30. package/package.json +47 -8
  31. package/.env.example +0 -9
  32. package/MCP_MAINTENANCE.md +0 -265
  33. package/__tests__/crdt.integration.test.ts +0 -156
  34. package/configs/README.md +0 -77
  35. package/configs/claude-template.json +0 -54
  36. package/dist/packages/core/src/database/ssl-config.d.ts +0 -9
  37. package/dist/packages/core/src/database/ssl-config.d.ts.map +0 -1
  38. package/dist/packages/core/src/database/ssl-config.js +0 -8
  39. package/dist/packages/core/src/database/ssl-config.js.map +0 -1
  40. package/dist/packages/core/src/features.d.ts +0 -86
  41. package/dist/packages/core/src/features.d.ts.map +0 -1
  42. package/dist/packages/core/src/features.js +0 -93
  43. package/dist/packages/core/src/features.js.map +0 -1
  44. package/dist/packages/core/src/license.d.ts +0 -75
  45. package/dist/packages/core/src/license.d.ts.map +0 -1
  46. package/dist/packages/core/src/license.js +0 -174
  47. package/dist/packages/core/src/license.js.map +0 -1
  48. package/dist/packages/core/src/monitoring/alerts.d.ts +0 -118
  49. package/dist/packages/core/src/monitoring/alerts.d.ts.map +0 -1
  50. package/dist/packages/core/src/monitoring/alerts.js +0 -325
  51. package/dist/packages/core/src/monitoring/alerts.js.map +0 -1
  52. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts +0 -71
  53. package/dist/packages/core/src/monitoring/cleanup-manager.d.ts.map +0 -1
  54. package/dist/packages/core/src/monitoring/cleanup-manager.js +0 -227
  55. package/dist/packages/core/src/monitoring/cleanup-manager.js.map +0 -1
  56. package/dist/packages/core/src/monitoring/health-monitor.d.ts +0 -22
  57. package/dist/packages/core/src/monitoring/health-monitor.d.ts.map +0 -1
  58. package/dist/packages/core/src/monitoring/health-monitor.js +0 -143
  59. package/dist/packages/core/src/monitoring/health-monitor.js.map +0 -1
  60. package/dist/packages/core/src/monitoring/index.d.ts +0 -14
  61. package/dist/packages/core/src/monitoring/index.d.ts.map +0 -1
  62. package/dist/packages/core/src/monitoring/index.js +0 -18
  63. package/dist/packages/core/src/monitoring/index.js.map +0 -1
  64. package/dist/packages/core/src/monitoring/process-registry.d.ts +0 -97
  65. package/dist/packages/core/src/monitoring/process-registry.d.ts.map +0 -1
  66. package/dist/packages/core/src/monitoring/process-registry.js +0 -223
  67. package/dist/packages/core/src/monitoring/process-registry.js.map +0 -1
  68. package/dist/packages/core/src/monitoring/types.d.ts +0 -231
  69. package/dist/packages/core/src/monitoring/types.d.ts.map +0 -1
  70. package/dist/packages/core/src/monitoring/types.js +0 -43
  71. package/dist/packages/core/src/monitoring/types.js.map +0 -1
  72. package/dist/packages/core/src/monitoring/zombie-detector.d.ts +0 -81
  73. package/dist/packages/core/src/monitoring/zombie-detector.d.ts.map +0 -1
  74. package/dist/packages/core/src/monitoring/zombie-detector.js +0 -232
  75. package/dist/packages/core/src/monitoring/zombie-detector.js.map +0 -1
  76. package/dist/packages/core/src/observability/logger.d.ts +0 -47
  77. package/dist/packages/core/src/observability/logger.d.ts.map +0 -1
  78. package/dist/packages/core/src/observability/logger.js +0 -141
  79. package/dist/packages/core/src/observability/logger.js.map +0 -1
  80. package/dist/packages/core/src/utils/logger-server.d.ts +0 -32
  81. package/dist/packages/core/src/utils/logger-server.d.ts.map +0 -1
  82. package/dist/packages/core/src/utils/logger-server.js +0 -69
  83. package/dist/packages/core/src/utils/logger-server.js.map +0 -1
  84. package/dist/packages/core/src/utils/request-context.d.ts +0 -143
  85. package/dist/packages/core/src/utils/request-context.d.ts.map +0 -1
  86. package/dist/packages/core/src/utils/request-context.js +0 -169
  87. package/dist/packages/core/src/utils/request-context.js.map +0 -1
  88. package/dist/packages/dev/src/code-validator/index.d.ts +0 -20
  89. package/dist/packages/dev/src/code-validator/index.d.ts.map +0 -1
  90. package/dist/packages/dev/src/code-validator/index.js +0 -20
  91. package/dist/packages/dev/src/code-validator/index.js.map +0 -1
  92. package/dist/packages/dev/src/code-validator/types.d.ts +0 -67
  93. package/dist/packages/dev/src/code-validator/types.d.ts.map +0 -1
  94. package/dist/packages/dev/src/code-validator/types.js +0 -7
  95. package/dist/packages/dev/src/code-validator/types.js.map +0 -1
  96. package/dist/packages/dev/src/code-validator/validator.d.ts +0 -48
  97. package/dist/packages/dev/src/code-validator/validator.d.ts.map +0 -1
  98. package/dist/packages/dev/src/code-validator/validator.js +0 -176
  99. package/dist/packages/dev/src/code-validator/validator.js.map +0 -1
  100. package/dist/packages/mcp/src/adapters/db.d.ts.map +0 -1
  101. package/dist/packages/mcp/src/adapters/db.js.map +0 -1
  102. package/dist/packages/mcp/src/config/index.d.ts.map +0 -1
  103. package/dist/packages/mcp/src/config/index.js.map +0 -1
  104. package/dist/packages/mcp/src/contracts.d.ts.map +0 -1
  105. package/dist/packages/mcp/src/contracts.js.map +0 -1
  106. package/dist/packages/mcp/src/hypervisor.d.ts.map +0 -1
  107. package/dist/packages/mcp/src/hypervisor.js.map +0 -1
  108. package/dist/packages/mcp/src/index.d.ts.map +0 -1
  109. package/dist/packages/mcp/src/index.js.map +0 -1
  110. package/dist/packages/mcp/src/servers/adapter.d.ts.map +0 -1
  111. package/dist/packages/mcp/src/servers/adapter.js.map +0 -1
  112. package/dist/packages/mcp/src/servers/code-validator.d.ts +0 -24
  113. package/dist/packages/mcp/src/servers/code-validator.d.ts.map +0 -1
  114. package/dist/packages/mcp/src/servers/code-validator.js +0 -156
  115. package/dist/packages/mcp/src/servers/code-validator.js.map +0 -1
  116. package/dist/packages/mcp/src/servers/neon.d.ts +0 -11
  117. package/dist/packages/mcp/src/servers/neon.d.ts.map +0 -1
  118. package/dist/packages/mcp/src/servers/neon.js +0 -90
  119. package/dist/packages/mcp/src/servers/neon.js.map +0 -1
  120. package/dist/packages/mcp/src/servers/next-devtools.d.ts +0 -11
  121. package/dist/packages/mcp/src/servers/next-devtools.d.ts.map +0 -1
  122. package/dist/packages/mcp/src/servers/next-devtools.js +0 -215
  123. package/dist/packages/mcp/src/servers/next-devtools.js.map +0 -1
  124. package/dist/packages/mcp/src/servers/playwright.d.ts +0 -11
  125. package/dist/packages/mcp/src/servers/playwright.d.ts.map +0 -1
  126. package/dist/packages/mcp/src/servers/playwright.js +0 -68
  127. package/dist/packages/mcp/src/servers/playwright.js.map +0 -1
  128. package/dist/packages/mcp/src/servers/stripe.d.ts +0 -11
  129. package/dist/packages/mcp/src/servers/stripe.d.ts.map +0 -1
  130. package/dist/packages/mcp/src/servers/stripe.js +0 -86
  131. package/dist/packages/mcp/src/servers/stripe.js.map +0 -1
  132. package/dist/packages/mcp/src/servers/supabase.d.ts +0 -11
  133. package/dist/packages/mcp/src/servers/supabase.d.ts.map +0 -1
  134. package/dist/packages/mcp/src/servers/supabase.js +0 -144
  135. package/dist/packages/mcp/src/servers/supabase.js.map +0 -1
  136. package/dist/packages/mcp/src/servers/vercel.d.ts +0 -11
  137. package/dist/packages/mcp/src/servers/vercel.d.ts.map +0 -1
  138. package/dist/packages/mcp/src/servers/vercel.js +0 -87
  139. package/dist/packages/mcp/src/servers/vercel.js.map +0 -1
  140. package/dist/packages/mcp/src/servers/vultr-test.d.ts +0 -3
  141. package/dist/packages/mcp/src/servers/vultr-test.d.ts.map +0 -1
  142. package/dist/packages/mcp/src/servers/vultr-test.js +0 -82
  143. package/dist/packages/mcp/src/servers/vultr-test.js.map +0 -1
  144. package/dist/scripts/lib/analyzers/console-analyzer.d.ts +0 -188
  145. package/dist/scripts/lib/analyzers/console-analyzer.d.ts.map +0 -1
  146. package/dist/scripts/lib/analyzers/console-analyzer.js +0 -432
  147. package/dist/scripts/lib/analyzers/console-analyzer.js.map +0 -1
  148. package/dist/scripts/lib/analyzers/index.d.ts +0 -11
  149. package/dist/scripts/lib/analyzers/index.d.ts.map +0 -1
  150. package/dist/scripts/lib/analyzers/index.js +0 -11
  151. package/dist/scripts/lib/analyzers/index.js.map +0 -1
  152. package/dist/scripts/lib/args.d.ts +0 -104
  153. package/dist/scripts/lib/args.d.ts.map +0 -1
  154. package/dist/scripts/lib/args.js +0 -304
  155. package/dist/scripts/lib/args.js.map +0 -1
  156. package/dist/scripts/lib/cache.d.ts +0 -185
  157. package/dist/scripts/lib/cache.d.ts.map +0 -1
  158. package/dist/scripts/lib/cache.js +0 -390
  159. package/dist/scripts/lib/cache.js.map +0 -1
  160. package/dist/scripts/lib/cli/dispatch.d.ts +0 -116
  161. package/dist/scripts/lib/cli/dispatch.d.ts.map +0 -1
  162. package/dist/scripts/lib/cli/dispatch.js +0 -206
  163. package/dist/scripts/lib/cli/dispatch.js.map +0 -1
  164. package/dist/scripts/lib/cli/index.d.ts +0 -10
  165. package/dist/scripts/lib/cli/index.d.ts.map +0 -1
  166. package/dist/scripts/lib/cli/index.js +0 -10
  167. package/dist/scripts/lib/cli/index.js.map +0 -1
  168. package/dist/scripts/lib/database/ssl-config.d.ts +0 -26
  169. package/dist/scripts/lib/database/ssl-config.d.ts.map +0 -1
  170. package/dist/scripts/lib/database/ssl-config.js +0 -47
  171. package/dist/scripts/lib/database/ssl-config.js.map +0 -1
  172. package/dist/scripts/lib/errors.d.ts +0 -218
  173. package/dist/scripts/lib/errors.d.ts.map +0 -1
  174. package/dist/scripts/lib/errors.js +0 -543
  175. package/dist/scripts/lib/errors.js.map +0 -1
  176. package/dist/scripts/lib/exec.d.ts +0 -107
  177. package/dist/scripts/lib/exec.d.ts.map +0 -1
  178. package/dist/scripts/lib/exec.js +0 -232
  179. package/dist/scripts/lib/exec.js.map +0 -1
  180. package/dist/scripts/lib/index.d.ts +0 -50
  181. package/dist/scripts/lib/index.d.ts.map +0 -1
  182. package/dist/scripts/lib/index.js +0 -65
  183. package/dist/scripts/lib/index.js.map +0 -1
  184. package/dist/scripts/lib/logger.d.ts +0 -50
  185. package/dist/scripts/lib/logger.d.ts.map +0 -1
  186. package/dist/scripts/lib/logger.js +0 -159
  187. package/dist/scripts/lib/logger.js.map +0 -1
  188. package/dist/scripts/lib/output.d.ts +0 -149
  189. package/dist/scripts/lib/output.d.ts.map +0 -1
  190. package/dist/scripts/lib/output.js +0 -263
  191. package/dist/scripts/lib/output.js.map +0 -1
  192. package/dist/scripts/lib/parallel.d.ts +0 -164
  193. package/dist/scripts/lib/parallel.d.ts.map +0 -1
  194. package/dist/scripts/lib/parallel.js +0 -355
  195. package/dist/scripts/lib/parallel.js.map +0 -1
  196. package/dist/scripts/lib/paths.d.ts +0 -92
  197. package/dist/scripts/lib/paths.d.ts.map +0 -1
  198. package/dist/scripts/lib/paths.js +0 -171
  199. package/dist/scripts/lib/paths.js.map +0 -1
  200. package/dist/scripts/lib/state/adapters/memory.d.ts +0 -42
  201. package/dist/scripts/lib/state/adapters/memory.d.ts.map +0 -1
  202. package/dist/scripts/lib/state/adapters/memory.js +0 -110
  203. package/dist/scripts/lib/state/adapters/memory.js.map +0 -1
  204. package/dist/scripts/lib/state/adapters/pglite.d.ts +0 -46
  205. package/dist/scripts/lib/state/adapters/pglite.d.ts.map +0 -1
  206. package/dist/scripts/lib/state/adapters/pglite.js +0 -256
  207. package/dist/scripts/lib/state/adapters/pglite.js.map +0 -1
  208. package/dist/scripts/lib/state/index.d.ts +0 -16
  209. package/dist/scripts/lib/state/index.d.ts.map +0 -1
  210. package/dist/scripts/lib/state/index.js +0 -16
  211. package/dist/scripts/lib/state/index.js.map +0 -1
  212. package/dist/scripts/lib/state/types.d.ts +0 -111
  213. package/dist/scripts/lib/state/types.d.ts.map +0 -1
  214. package/dist/scripts/lib/state/types.js +0 -8
  215. package/dist/scripts/lib/state/types.js.map +0 -1
  216. package/dist/scripts/lib/state/workflow-state.d.ts +0 -110
  217. package/dist/scripts/lib/state/workflow-state.d.ts.map +0 -1
  218. package/dist/scripts/lib/state/workflow-state.js +0 -331
  219. package/dist/scripts/lib/state/workflow-state.js.map +0 -1
  220. package/dist/scripts/lib/telemetry.d.ts +0 -194
  221. package/dist/scripts/lib/telemetry.d.ts.map +0 -1
  222. package/dist/scripts/lib/telemetry.js +0 -394
  223. package/dist/scripts/lib/telemetry.js.map +0 -1
  224. package/dist/scripts/lib/utils.d.ts +0 -270
  225. package/dist/scripts/lib/utils.d.ts.map +0 -1
  226. package/dist/scripts/lib/utils.js +0 -473
  227. package/dist/scripts/lib/utils.js.map +0 -1
  228. package/dist/scripts/lib/validation/database.d.ts +0 -83
  229. package/dist/scripts/lib/validation/database.d.ts.map +0 -1
  230. package/dist/scripts/lib/validation/database.js +0 -199
  231. package/dist/scripts/lib/validation/database.js.map +0 -1
  232. package/dist/scripts/lib/validation/env.d.ts +0 -80
  233. package/dist/scripts/lib/validation/env.d.ts.map +0 -1
  234. package/dist/scripts/lib/validation/env.js +0 -246
  235. package/dist/scripts/lib/validation/env.js.map +0 -1
  236. package/dist/scripts/lib/validation/index.d.ts +0 -16
  237. package/dist/scripts/lib/validation/index.d.ts.map +0 -1
  238. package/dist/scripts/lib/validation/index.js +0 -16
  239. package/dist/scripts/lib/validation/index.js.map +0 -1
  240. package/dist/scripts/lib/validation/post-execution.d.ts +0 -74
  241. package/dist/scripts/lib/validation/post-execution.d.ts.map +0 -1
  242. package/dist/scripts/lib/validation/post-execution.js +0 -110
  243. package/dist/scripts/lib/validation/post-execution.js.map +0 -1
  244. package/dist/scripts/lib/validation/pre-execution.d.ts +0 -165
  245. package/dist/scripts/lib/validation/pre-execution.d.ts.map +0 -1
  246. package/dist/scripts/lib/validation/pre-execution.js +0 -466
  247. package/dist/scripts/lib/validation/pre-execution.js.map +0 -1
  248. package/dist/scripts/lib/validators/documentation-validator.d.ts +0 -242
  249. package/dist/scripts/lib/validators/documentation-validator.d.ts.map +0 -1
  250. package/dist/scripts/lib/validators/documentation-validator.js +0 -584
  251. package/dist/scripts/lib/validators/documentation-validator.js.map +0 -1
  252. package/dist/scripts/lib/validators/index.d.ts +0 -11
  253. package/dist/scripts/lib/validators/index.d.ts.map +0 -1
  254. package/dist/scripts/lib/validators/index.js +0 -11
  255. package/dist/scripts/lib/validators/index.js.map +0 -1
  256. package/docker-compose.yml +0 -46
  257. package/docs/INDEX.md +0 -88
  258. package/docs/README.md +0 -774
  259. package/docs/SETUP.md +0 -264
  260. package/docs/servers/code-validator.md +0 -586
  261. package/eslint.config.js +0 -7
  262. package/migrations/0001_add_crdt_columns.sql +0 -8
  263. package/migrations/0001_rollback.sql +0 -6
  264. package/migrations/005_performance_indexes.sql +0 -190
  265. package/migrations/backfill_crdt_meta.js +0 -45
  266. package/src/__tests__/hypervisor.test.ts +0 -212
  267. package/src/adapters/db.ts +0 -180
  268. package/src/config/config.json +0 -49
  269. package/src/config/index.ts +0 -30
  270. package/src/contracts.ts +0 -221
  271. package/src/hypervisor.ts +0 -464
  272. package/src/index.ts +0 -87
  273. package/src/servers/adapter.ts +0 -643
  274. package/src/servers/code-validator.ts +0 -188
  275. package/src/servers/neon.ts +0 -103
  276. package/src/servers/next-devtools.ts +0 -230
  277. package/src/servers/playwright.ts +0 -77
  278. package/src/servers/stripe.ts +0 -99
  279. package/src/servers/supabase.ts +0 -161
  280. package/src/servers/vercel.ts +0 -100
  281. package/src/servers/vultr-test.ts +0 -97
  282. package/tsconfig.json +0 -12
  283. package/vitest.config.ts +0 -22
  284. /package/dist/{packages/mcp/src/adapters → adapters}/db.d.ts +0 -0
  285. /package/dist/{packages/mcp/src/adapters → adapters}/db.js +0 -0
  286. /package/dist/{packages/mcp/src/config → config}/index.d.ts +0 -0
  287. /package/dist/{packages/mcp/src/config → config}/index.js +0 -0
  288. /package/dist/{packages/mcp/src/contracts.d.ts → contracts.d.ts} +0 -0
  289. /package/dist/{packages/mcp/src/contracts.js → contracts.js} +0 -0
  290. /package/dist/{packages/mcp/src/hypervisor.d.ts → hypervisor.d.ts} +0 -0
  291. /package/dist/{packages/mcp/src/hypervisor.js → hypervisor.js} +0 -0
  292. /package/dist/{packages/mcp/src/index.d.ts → index.d.ts} +0 -0
  293. /package/dist/{packages/mcp/src/index.js → index.js} +0 -0
@@ -1,265 +0,0 @@
1
- # MCP Maintenance Guide
2
-
3
- This document consolidates all MCP-related maintenance information including CRDT audit strategy, key decisions, migration procedures, and metrics/observability approach.
4
-
5
- ---
6
-
7
- ## Table of Contents
8
-
9
- 1. [Decision Log](#decision-log)
10
- 2. [CRDT Audit](#crdt-audit)
11
- 3. [Migration Checklist](#migration-checklist)
12
- 4. [Metrics & Observability](#metrics--observability)
13
-
14
- ---
15
-
16
- ## Decision Log
17
-
18
- ### MCP Decision — pglite (ElectricSQL) + Logs‑First Metrics
19
-
20
- **TL;DR** — Default to ElectricSQL (`pglite`) for local development to get Postgres parity, CRDT sync, and smooth production migration. Start observability with a logs‑first approach (`MCP_METRICS_MODE=logs`). Provide a documented migration path to managed Postgres + `pgvector` for production, and TODOs to add Prometheus + Grafana later.
21
-
22
- #### Why `pglite` (ElectricSQL)
23
-
24
- - Local Postgres parity: preserves SQL semantics developers expect while providing Electric sync.
25
- - CRDT & sync primitives: built-in conflict resolution and metadata for replicated state.
26
- - Smooth prod path: same logical model maps to managed Postgres (Neon / Supabase) with minimal code changes.
27
-
28
- #### Default configuration
29
-
30
- - `MCP_PERSISTENCE_DRIVER=pglite` (dev default)
31
- - `ELECTRIC_DATABASE_URL=` (placeholder for local pglite path/URL)
32
- - `MCP_METRICS_MODE=logs`
33
-
34
- #### Local vector testing
35
-
36
- - Use a compose variant with local Postgres + `pgvector` when testing vector queries or index behavior. `pglite` remains the default for state and CRDT behavior.
37
-
38
- #### Security stance
39
-
40
- - Never commit credentials. Use `packages/mcp/.env.example` with placeholders only.
41
- - Store `ELECTRIC_DATABASE_URL`, `ELECTRIC_API_KEY`, `PROD_DATABASE_URL` in CI secrets or Vault for staging/prod.
42
-
43
- #### Migration path (dev → prod)
44
-
45
- - Dev: `pglite` (local ElectricSQL)
46
- - Stage: Local Postgres with `pgvector` + Electric sync metadata
47
- - Prod: Managed Postgres (enable `pgvector`), Electric sync metadata preserved
48
-
49
- (See [Migration Checklist](#migration-checklist) section for a detailed plan.)
50
-
51
- #### Observability
52
-
53
- - Start with logs-first metrics (Option C). Emit structured log events for conflicts, merges, and error rates.
54
- - TODO: add Prometheus + Grafana manifests under `packages/mcp/k8s/` when operational budget permits.
55
-
56
- #### TODOs (short)
57
-
58
- - Add `packages/mcp/docker-compose.yml` with `pglite` dev service and `postgres+pgvector` variant.
59
- - Add `packages/mcp/src/adapters/db.ts` with `connectPglite()` / `connectPostgres()`.
60
- - Add CRDT migrations & backfill scripts.
61
- - Add integration tests that spin up compose and validate CRDT merges.
62
- - Add `packages/mcp/metrics.md` (logs-first) and TODOs for Option A (Prometheus + Grafana).
63
-
64
- ---
65
-
66
- ## CRDT Audit
67
-
68
- ### CRDT Audit — Candidate Entities & Strategy
69
-
70
- **Goal** — ensure all replicated, collaborative, or concurrent state uses CRDT semantics to avoid manual conflict resolution.
71
-
72
- #### Scope
73
-
74
- - Applies to MCP persistence: local `pglite` (dev) and managed Postgres (prod).
75
- - Targets entity categories that are concurrently updated or replicated.
76
-
77
- #### Candidate entities and recommended CRDT types
78
-
79
- - `documents` / `shared_documents`
80
- - Use: collaborative edits
81
- - CRDT: delta CRDT (RGA / JSON CRDT / operation-based)
82
- - Policy: preserve operations and causal order
83
- - `subscription_state` / `cursors`
84
- - Use: client offsets, cursors
85
- - CRDT: LWW register or monotonic counter
86
- - Policy: LWW with server-side monotonic enforcement where possible
87
- - `presence` / `ephemeral_status`
88
- - Use: frequent transient updates
89
- - CRDT: OR-Set with TTL or presence map
90
- - Policy: TTL-based garbage collection
91
- - `message_ack` / `delivered_acks`
92
- - Use: dedup across replicas
93
- - CRDT: OR-Set or G-Set with tombstones
94
- - Policy: idempotent ack addition, compact tombstones periodically
95
- - `user_settings` / `shared_settings`
96
- - Use: small multi-client updates
97
- - CRDT: observed-remove map / JSON CRDT
98
- - Policy: field-level merge, operator override protected
99
-
100
- #### Implementation notes
101
-
102
- - Adapter responsibilities:
103
- - `connectPglite()` should declare CRDT columns via Electric APIs (where available).
104
- - `connectPostgres()` must keep Electric metadata columns and map CRDT metadata to Postgres-compatible storage.
105
- - Schema:
106
- - Add `_electric_meta` or `_crdt_meta` columns near payloads.
107
- - Store operation deltas if possible for efficient merges.
108
- - Rollout:
109
- - Feature-flag per-entity CRDT enablement for staged rollout.
110
- - Small-sample backfills prior to full backfill.
111
- - Storage & compaction:
112
- - Implement delta compaction for large-delta CRDTs.
113
- - Schedule periodic compaction jobs to remove tombstones and shrink op logs.
114
-
115
- #### Testing
116
-
117
- - Unit tests: CRDT op merges for each primitive (OR-Set, PNCounter, LWW register).
118
- - Integration tests: concurrent writers with `pglite` stack asserting deterministic merged state.
119
- - Migration tests: backfill scripts run on sample data and validate checksum diffs.
120
-
121
- #### Risk & mitigation
122
-
123
- - Existing payload types incompatible with CRDT fields — use non-destructive migrations and backfill.
124
- - Vector index (pgvector) mapping must be preserved during schema changes — treat embedding columns as orthogonal.
125
-
126
- #### Suggested tests to add
127
-
128
- - `packages/mcp/__tests__/crdt.unit.test.ts` — unit semantics.
129
- - `packages/mcp/__tests__/crdt.integration.test.ts` — compose-based concurrent writes.
130
-
131
- ---
132
-
133
- ## Migration Checklist
134
-
135
- ### MCP Migration Checklist — pglite → Managed Postgres + pgvector
136
-
137
- **Goal** — safely cut over from `pglite` dev workflows to managed Postgres in production while preserving CRDT semantics and vector index integrity.
138
-
139
- #### Pre‑reqs
140
-
141
- - Staging Postgres provisioned with `pgvector` enabled.
142
- - Backups and CI/Vault secrets available: `ELECTRIC_DATABASE_URL`, `ELECTRIC_API_KEY`, `PROD_DATABASE_URL`.
143
- - Smoke test harness and CRDT integration tests present.
144
-
145
- #### Ordered checklist
146
-
147
- 1. **Backup source DB**
148
- ```bash
149
- pg_dump -Fc -f backup.before.mcp.dump "$CURRENT_DB_URL"
150
- ```
151
-
152
- 2. **Provision staging DB with `pgvector`**
153
- ```sql
154
- CREATE EXTENSION IF NOT EXISTS vector;
155
- ```
156
-
157
- 3. **Apply schema migrations to staging (include CRDT metadata columns)**
158
- - Add migration files: `packages/mcp/migrations/0001_add_crdt_columns.sql` and rollback script.
159
-
160
- 4. **Small backfill (sample subset)**
161
- - Run `packages/mcp/migrations/backfill_crdt_meta.js` for representative rows; validate merges.
162
-
163
- 5. **Run integration smoke tests**
164
- - Execute CRDT integration test suite against staging.
165
-
166
- 6. **Export/import full snapshot (if migrating data)**
167
- ```bash
168
- pg_restore -d "$STAGING_DB_URL" backup.before.mcp.dump
169
- ```
170
-
171
- 7. **Create `pgvector` indexes (maintenance window suggested)**
172
- ```sql
173
- CREATE EXTENSION IF NOT EXISTS vector;
174
- CREATE INDEX IF NOT EXISTS documents_embedding_idx ON documents USING ivfflat (embedding vector_l2_ops) WITH (lists = 100);
175
- ```
176
-
177
- 8. **Full backfill & compaction**
178
- - Run full backfill; compact delta-CRDT ops as needed.
179
-
180
- 9. **Switch app config (canary first)**
181
- - Set `MCP_PERSISTENCE_DRIVER=postgres`
182
- - Update `ELECTRIC_DATABASE_URL` to prod managed DB via secrets
183
-
184
- 10. **Canary / canary tests**
185
- - Route small traffic, monitor conflict events and query correctness.
186
-
187
- 11. **Full cutover**
188
- - Promote config change to all instances.
189
-
190
- 12. **Post-migration validation**
191
- - Run full test suite, verify vector results, verify merge/conflict telemetry.
192
-
193
- 13. **Rollback readiness**
194
- ```bash
195
- pg_restore -d "$PROD_DB_URL" backup.before.mcp.dump
196
- ```
197
-
198
- #### Operational notes
199
-
200
- - Prefer online migration with feature flags and small maintenance windows for index builds.
201
- - Validate checksums and sample-row diffs after every major migration step.
202
- - Keep rollback scripts next to each migration file.
203
-
204
- ---
205
-
206
- ## Metrics & Observability
207
-
208
- ### MCP Metrics & Observability — Logs‑First (Option C)
209
-
210
- #### Decision
211
-
212
- - Start with logs-first metrics to avoid hosted monitoring costs and reduce infra.
213
- - Emit structured logs for conflicts, merges, errors, and key latencies.
214
- - Provide clear TODOs and skeletons to add Prometheus + Grafana later.
215
-
216
- #### Env & modes
217
-
218
- - `MCP_METRICS_MODE=logs` (default)
219
- - Other modes: `otel` (collector), `prometheus` (future Option A)
220
-
221
- #### Structured log schema (recommended JSON fields)
222
-
223
- - `timestamp`
224
- - `service = "mcp"`
225
- - `event` = `conflict|merge|error|operation`
226
- - `entity` = `documents|cursors|presence|...`
227
- - `entity_id`
228
- - `op_type` = `write|merge|backfill|index`
229
- - `details` = short summary
230
- - `duration_ms`
231
- - `trace_id` (optional)
232
-
233
- #### Conflict/merge logging example (concept)
234
-
235
- - Log a `conflict` event when CRDT merge produces non-trivial resolution; include `before`, `ops_count`, `merged_summary`.
236
-
237
- #### Log collection options (free)
238
-
239
- - Use file logs + `loki` (self-hosted) and Grafana Loki datasource for queries (both OSS).
240
- - Or aggregate logs to a central file/CI artifact and analyze with `rg`/`jq` for small teams.
241
-
242
- #### Quick local setup (suggested)
243
-
244
- - Start compose with `loki` (optional) to collect logs, or rely on local file logs.
245
- ```bash
246
- docker-compose -f packages/mcp/docker-compose.yml up -d loki
247
- ```
248
-
249
- #### TODOs for Option A (Prometheus + Grafana)
250
-
251
- - Add `packages/mcp/k8s/` manifests and Helm chart scaffolding for Prometheus exporters and Grafana dashboards.
252
- - Instrument code with Prometheus client metrics (conflict counters, merge latencies).
253
- - Add dashboards and alert rules for high conflict rates.
254
-
255
- #### Implementation guidance
256
-
257
- - Implement `packages/mcp/src/telemetry.ts` that:
258
- - Emits structured logs for every conflict/merge.
259
- - In `MCP_METRICS_MODE=logs`, write JSON lines to stdout and rotate to file if needed.
260
- - Provide quick grep/jq scripts in `packages/mcp/` to extract conflict rates.
261
-
262
- #### Security & privacy
263
-
264
- - Avoid logging sensitive payloads (mask user PII).
265
- - Keep telemetry ingestion endpoints protected; local logs are preferred during dev.
@@ -1,156 +0,0 @@
1
- import { afterAll, beforeAll, describe, expect, it } from 'vitest'
2
- import adapters, { connectPglite, type McpDbClient } from '../src/adapters/db.js'
3
-
4
- describe('CRDT integration (smoke)', () => {
5
- it('adapter functions exist', () => {
6
- expect(typeof adapters.connectPglite).toBe('function')
7
- expect(typeof adapters.connectPostgres).toBe('function')
8
- expect(typeof adapters.createMcpDbClient).toBe('function')
9
- })
10
- })
11
-
12
- // Skip integration tests in unit test mode
13
- // Integration tests need TEST_DATABASE_URL explicitly set or PGlite in test environment
14
- // Don't run by default as PGlite initialization can be slow
15
- const testDatabaseUrl = process.env.TEST_DATABASE_URL
16
- const isTestMode = process.env.NODE_ENV === 'test'
17
-
18
- describe.skipIf(!testDatabaseUrl || isTestMode)('CRDT integration with PGlite', () => {
19
- let client: McpDbClient
20
-
21
- beforeAll(async () => {
22
- // Use in-memory PGlite for testing
23
- client = await connectPglite({ dataDir: ':memory:' })
24
- })
25
-
26
- afterAll(async () => {
27
- if (client) {
28
- await client.close()
29
- }
30
- })
31
-
32
- it('should create crdt_operations table', async () => {
33
- // Verify table exists by querying it
34
- const result = await client.query(
35
- `SELECT column_name FROM information_schema.columns WHERE table_name = 'crdt_operations'`,
36
- )
37
-
38
- const columns = result.rows.map((r) => r.column_name)
39
- expect(columns).toContain('id')
40
- expect(columns).toContain('document_id')
41
- expect(columns).toContain('operation_type')
42
- expect(columns).toContain('payload')
43
- expect(columns).toContain('vector_clock')
44
- expect(columns).toContain('node_id')
45
- })
46
-
47
- it('should insert and query CRDT operations', async () => {
48
- const opId = `op-${Date.now()}`
49
- const docId = 'doc-test-1'
50
- const nodeId = 'node-a'
51
-
52
- // Insert a CRDT operation
53
- await client.query(
54
- `INSERT INTO crdt_operations (id, document_id, operation_type, payload, vector_clock, node_id)
55
- VALUES ($1, $2, $3, $4, $5, $6)`,
56
- [
57
- opId,
58
- docId,
59
- 'insert',
60
- JSON.stringify({ field: 'title', value: 'Test' }),
61
- JSON.stringify({ [nodeId]: 1 }),
62
- nodeId,
63
- ],
64
- )
65
-
66
- // Query it back
67
- const result = await client.query(`SELECT * FROM crdt_operations WHERE id = $1`, [opId])
68
-
69
- expect(result.rows).toHaveLength(1)
70
- expect(result.rows[0]?.document_id).toBe(docId)
71
- expect(result.rows[0]?.operation_type).toBe('insert')
72
- expect(result.rows[0]?.node_id).toBe(nodeId)
73
- })
74
-
75
- it('should support concurrent operations from multiple nodes', async () => {
76
- const docId = `doc-concurrent-${Date.now()}`
77
- const nodeA = 'node-a'
78
- const nodeB = 'node-b'
79
-
80
- // Simulate concurrent writes from two nodes
81
- await Promise.all([
82
- client.query(
83
- `INSERT INTO crdt_operations (id, document_id, operation_type, payload, vector_clock, node_id)
84
- VALUES ($1, $2, $3, $4, $5, $6)`,
85
- [
86
- `op-a-${Date.now()}`,
87
- docId,
88
- 'update',
89
- JSON.stringify({ field: 'content', value: 'From A' }),
90
- JSON.stringify({ [nodeA]: 1 }),
91
- nodeA,
92
- ],
93
- ),
94
- client.query(
95
- `INSERT INTO crdt_operations (id, document_id, operation_type, payload, vector_clock, node_id)
96
- VALUES ($1, $2, $3, $4, $5, $6)`,
97
- [
98
- `op-b-${Date.now()}`,
99
- docId,
100
- 'update',
101
- JSON.stringify({ field: 'content', value: 'From B' }),
102
- JSON.stringify({ [nodeB]: 1 }),
103
- nodeB,
104
- ],
105
- ),
106
- ])
107
-
108
- // Query all operations for this document
109
- const result = await client.query(
110
- `SELECT * FROM crdt_operations WHERE document_id = $1 ORDER BY created_at`,
111
- [docId],
112
- )
113
-
114
- // Both operations should be preserved (CRDT property)
115
- expect(result.rows).toHaveLength(2)
116
-
117
- const nodes = result.rows.map((r) => r.node_id)
118
- expect(nodes).toContain(nodeA)
119
- expect(nodes).toContain(nodeB)
120
- })
121
-
122
- it('should handle vector clock ordering', async () => {
123
- const docId = `doc-clock-${Date.now()}`
124
- const nodeId = 'node-clock'
125
-
126
- // Insert operations with incrementing vector clock
127
- for (let i = 1; i <= 3; i++) {
128
- await client.query(
129
- `INSERT INTO crdt_operations (id, document_id, operation_type, payload, vector_clock, node_id)
130
- VALUES ($1, $2, $3, $4, $5, $6)`,
131
- [
132
- `op-${docId}-${i}`,
133
- docId,
134
- 'update',
135
- JSON.stringify({ field: 'counter', value: i }),
136
- JSON.stringify({ [nodeId]: i }),
137
- nodeId,
138
- ],
139
- )
140
- }
141
-
142
- const result = await client.query(
143
- `SELECT * FROM crdt_operations WHERE document_id = $1 ORDER BY created_at`,
144
- [docId],
145
- )
146
-
147
- expect(result.rows).toHaveLength(3)
148
-
149
- // Verify vector clocks are preserved and can be used for ordering
150
- const clocks = result.rows.map((r) => {
151
- const vc = r.vector_clock as Record<string, number>
152
- return vc[nodeId]
153
- })
154
- expect(clocks).toEqual([1, 2, 3])
155
- })
156
- })
package/configs/README.md DELETED
@@ -1,77 +0,0 @@
1
- # MCP Configuration Templates
2
-
3
- This directory contains template configuration files for different MCP clients.
4
-
5
- ## Available Templates
6
-
7
- ### `claude-template.json`
8
- Template for Claude Code / Claude Desktop
9
-
10
- **Installation:**
11
- 1. Copy to your Claude config location:
12
- - Linux: `~/.config/Claude/claude_desktop_config.json`
13
- - macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
14
- - Windows: `%APPDATA%\Claude\claude_desktop_config.json`
15
- - CLI: `~/.claude/config.json`
16
-
17
- 2. Replace `<REPO_PATH>` with absolute path to RevealUI repo
18
-
19
- 3. Enable desired servers by setting `"enabled": true`
20
-
21
- ### `cursor-template.json`
22
- Template for Cursor IDE
23
-
24
- **Installation:**
25
- 1. Copy to `.cursor/mcp-config.json` in repo root
26
- 2. Replace `<REPO_PATH>` with absolute path
27
- 3. Enable desired servers
28
-
29
- ### `vscode-template.json`
30
- Template for VS Code
31
-
32
- **Installation:**
33
- 1. Copy to `.vscode/mcp.json` in repo root
34
- 2. Replace `<REPO_PATH>` with absolute path
35
- 3. Enable desired servers
36
-
37
- ## Available MCP Servers
38
-
39
- | Server | Command | Description |
40
- |--------|---------|-------------|
41
- | code-validator | `tsx packages/mcp/src/servers/code-validator.ts` | Validates code against standards |
42
- | vercel | `pnpm mcp:vercel` | Vercel deployment |
43
- | stripe | `pnpm mcp:stripe` | Payment processing |
44
- | neon | `pnpm mcp:neon` | Database operations |
45
- | supabase | `pnpm mcp:supabase` | Supabase management |
46
- | playwright | `pnpm mcp:playwright` | Browser automation |
47
- | next-devtools | `pnpm mcp:next-devtools` | Next.js debugging |
48
-
49
- ## Quick Setup Script
50
-
51
- Run from repo root:
52
-
53
- ```bash
54
- # Auto-generate config with correct paths
55
- pnpm setup:mcp
56
-
57
- # Or manually:
58
- REPO_PATH=$(pwd)
59
- sed "s|<REPO_PATH>|$REPO_PATH|g" packages/mcp/configs/claude-template.json > ~/.claude/config.json
60
- ```
61
-
62
- ## Environment Variables
63
-
64
- Make sure these are set:
65
-
66
- ```env
67
- VERCEL_API_KEY=vercel_...
68
- STRIPE_SECRET_KEY=sk_test_...
69
- NEON_API_KEY=neon_...
70
- SUPABASE_URL=https://....supabase.co
71
- SUPABASE_ANON_KEY=eyJ...
72
- ```
73
-
74
- ## See Also
75
-
76
- - [MCP Setup Guide](../docs/SETUP.md)
77
- - [Server Documentation](../docs/servers/)
@@ -1,54 +0,0 @@
1
- {
2
- "$schema": "https://modelcontextprotocol.io/schema/mcp-config.json",
3
- "mcpServers": {
4
- "revealui-code-validator": {
5
- "command": "tsx",
6
- "args": ["<REPO_PATH>/packages/mcp/src/servers/code-validator.ts"],
7
- "cwd": "<REPO_PATH>",
8
- "description": "Code validation - prevents AI-generated technical debt",
9
- "enabled": true
10
- },
11
- "revealui-vercel": {
12
- "command": "pnpm",
13
- "args": ["mcp:vercel"],
14
- "cwd": "<REPO_PATH>",
15
- "description": "Vercel deployment and storage management",
16
- "enabled": false
17
- },
18
- "revealui-stripe": {
19
- "command": "pnpm",
20
- "args": ["mcp:stripe"],
21
- "cwd": "<REPO_PATH>",
22
- "description": "Stripe payment processing",
23
- "enabled": false
24
- },
25
- "revealui-neon": {
26
- "command": "pnpm",
27
- "args": ["mcp:neon"],
28
- "cwd": "<REPO_PATH>",
29
- "description": "NeonDB database operations",
30
- "enabled": false
31
- },
32
- "revealui-supabase": {
33
- "command": "pnpm",
34
- "args": ["mcp:supabase"],
35
- "cwd": "<REPO_PATH>",
36
- "description": "Supabase project management",
37
- "enabled": false
38
- },
39
- "revealui-playwright": {
40
- "command": "pnpm",
41
- "args": ["mcp:playwright"],
42
- "cwd": "<REPO_PATH>",
43
- "description": "Browser automation",
44
- "enabled": false
45
- },
46
- "revealui-next-devtools": {
47
- "command": "pnpm",
48
- "args": ["mcp:next-devtools"],
49
- "cwd": "<REPO_PATH>",
50
- "description": "Next.js debugging",
51
- "enabled": false
52
- }
53
- }
54
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * SSL Configuration Utility
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 { SSLConfig } from '@revealui/utils/database';
8
- export { getSSLConfig, validateSSLConfig } from '@revealui/utils/database';
9
- //# sourceMappingURL=ssl-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssl-config.d.ts","sourceRoot":"","sources":["../../../../../../core/src/database/ssl-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
@@ -1,8 +0,0 @@
1
- /**
2
- * SSL Configuration Utility
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 { getSSLConfig, validateSSLConfig } from '@revealui/utils/database';
8
- //# sourceMappingURL=ssl-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssl-config.js","sourceRoot":"","sources":["../../../../../../core/src/database/ssl-config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA"}
@@ -1,86 +0,0 @@
1
- /**
2
- * Feature flag system for RevealUI Pro/Enterprise tiers.
3
- *
4
- * Gates premium features based on the current license tier.
5
- * Free (OSS) users get the core CMS framework.
6
- * Pro/Enterprise users unlock AI, advanced sync, dashboard, etc.
7
- *
8
- * @dependencies
9
- * - ./license.ts - License validation and tier checking
10
- */
11
- import { type LicenseTier } from './license.js';
12
- /** All gated features in RevealUI */
13
- export interface FeatureFlags {
14
- /** AI agent system (Pro: 1 provider, Enterprise: all providers) */
15
- ai: boolean;
16
- /** AI memory system — working + episodic + vector (Max: basic, Enterprise: full) */
17
- aiMemory: boolean;
18
- /** MCP server integration */
19
- mcp: boolean;
20
- /** Editor integration daemon */
21
- editors: boolean;
22
- /** AI harness integration (Claude Code, Cursor, Copilot coordination) */
23
- harnesses: boolean;
24
- /** Built-in Stripe payment processing */
25
- payments: boolean;
26
- /** Multi-tenant site management */
27
- multiTenant: boolean;
28
- /** White-label admin dashboard */
29
- whiteLabel: boolean;
30
- /** SSO/SAML authentication */
31
- sso: boolean;
32
- /** BYOK server-side key storage (Max+) */
33
- byokServerSide: boolean;
34
- /** Multi-provider AI (Max+: 2 providers, Enterprise: all providers) */
35
- aiMultiProvider: boolean;
36
- /** Audit logging and compliance trail */
37
- auditLog: boolean;
38
- /** Full real-time sync with conflict resolution */
39
- advancedSync: boolean;
40
- /** Monitoring dashboard */
41
- dashboard: boolean;
42
- /** Custom domain mapping */
43
- customDomain: boolean;
44
- /** Analytics and conversion tracking */
45
- analytics: boolean;
46
- }
47
- /**
48
- * Returns the current feature flags based on the active license tier.
49
- *
50
- * @example
51
- * ```typescript
52
- * import { getFeatures } from '@revealui/core/features'
53
- *
54
- * const features = getFeatures()
55
- * if (features.ai) {
56
- * // Enable AI agent system
57
- * }
58
- * ```
59
- */
60
- export declare function getFeatures(): FeatureFlags;
61
- /**
62
- * Check if a specific feature is enabled.
63
- *
64
- * @example
65
- * ```typescript
66
- * import { isFeatureEnabled } from '@revealui/core/features'
67
- *
68
- * if (isFeatureEnabled('ai')) {
69
- * // AI is available
70
- * }
71
- * ```
72
- */
73
- export declare function isFeatureEnabled(feature: keyof FeatureFlags): boolean;
74
- /**
75
- * Returns all features available at a given tier (useful for pricing pages).
76
- */
77
- export declare function getFeaturesForTier(tier: LicenseTier): FeatureFlags;
78
- /**
79
- * Returns the minimum tier required for a given feature.
80
- */
81
- export declare function getRequiredTier(feature: keyof FeatureFlags): LicenseTier;
82
- /**
83
- * Returns the current license tier. Convenience re-export.
84
- */
85
- export { getCurrentTier } from './license.js';
86
- //# sourceMappingURL=features.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../../../core/src/features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,cAAc,CAAA;AAE3D,qCAAqC;AACrC,MAAM,WAAW,YAAY;IAC3B,mEAAmE;IACnE,EAAE,EAAE,OAAO,CAAA;IACX,oFAAoF;IACpF,QAAQ,EAAE,OAAO,CAAA;IACjB,6BAA6B;IAC7B,GAAG,EAAE,OAAO,CAAA;IACZ,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,yEAAyE;IACzE,SAAS,EAAE,OAAO,CAAA;IAClB,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAA;IACjB,mCAAmC;IACnC,WAAW,EAAE,OAAO,CAAA;IACpB,kCAAkC;IAClC,UAAU,EAAE,OAAO,CAAA;IACnB,8BAA8B;IAC9B,GAAG,EAAE,OAAO,CAAA;IACZ,0CAA0C;IAC1C,cAAc,EAAE,OAAO,CAAA;IACvB,uEAAuE;IACvE,eAAe,EAAE,OAAO,CAAA;IACxB,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAA;IACjB,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAA;IACrB,2BAA2B;IAC3B,SAAS,EAAE,OAAO,CAAA;IAClB,4BAA4B;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,wCAAwC;IACxC,SAAS,EAAE,OAAO,CAAA;CACnB;AAsBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,IAAI,YAAY,CAQ1C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,YAAY,GAAG,OAAO,CAGrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,YAAY,CAelE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,YAAY,GAAG,WAAW,CAExE;AAED;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA"}