claude-flow-novice 2.0.4 → 2.0.5

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 (496) hide show
  1. package/dist/src/cli/commands/guidance.js +668 -487
  2. package/dist/src/cli/commands/index-validate.js +29 -18
  3. package/dist/src/cli/commands/mcp-troubleshoot.js +282 -230
  4. package/dist/src/cli/commands/neural-goal-init.js +125 -92
  5. package/dist/src/cli/commands/swarm-exec.js +393 -317
  6. package/dist/src/cli/commands/validate-framework.js +1100 -983
  7. package/dist/src/cli/commands/validate.js +223 -144
  8. package/dist/src/cli/main.js +1 -1
  9. package/dist/src/cli/simple-commands/__tests__/agent.test.js +277 -265
  10. package/dist/src/cli/simple-commands/__tests__/memory.test.js +7 -6
  11. package/dist/src/cli/simple-commands/__tests__/swarm.test.js +356 -373
  12. package/dist/src/cli/simple-commands/__tests__/task.test.js +7 -6
  13. package/dist/src/cli/simple-commands/agent.js +193 -157
  14. package/dist/src/cli/simple-commands/analysis.js +446 -336
  15. package/dist/src/cli/simple-commands/automation-executor.js +1339 -1095
  16. package/dist/src/cli/simple-commands/automation.js +469 -481
  17. package/dist/src/cli/simple-commands/batch-manager.js +313 -261
  18. package/dist/src/cli/simple-commands/claude-telemetry.js +267 -241
  19. package/dist/src/cli/simple-commands/claude-track.js +90 -68
  20. package/dist/src/cli/simple-commands/concurrent-display.js +320 -266
  21. package/dist/src/cli/simple-commands/config.js +290 -245
  22. package/dist/src/cli/simple-commands/coordination.js +234 -182
  23. package/dist/src/cli/simple-commands/enhanced-ui-views.js +615 -812
  24. package/dist/src/cli/simple-commands/enhanced-webui-complete.js +981 -922
  25. package/dist/src/cli/simple-commands/fix-hook-variables.js +294 -274
  26. package/dist/src/cli/simple-commands/github/gh-coordinator.js +457 -378
  27. package/dist/src/cli/simple-commands/github/github-api.js +574 -535
  28. package/dist/src/cli/simple-commands/github/init.js +303 -276
  29. package/dist/src/cli/simple-commands/github.js +247 -222
  30. package/dist/src/cli/simple-commands/goal.js +63 -51
  31. package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +278 -208
  32. package/dist/src/cli/simple-commands/hive-mind/communication.js +696 -601
  33. package/dist/src/cli/simple-commands/hive-mind/core.js +979 -907
  34. package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +655 -406
  35. package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1245 -1125
  36. package/dist/src/cli/simple-commands/hive-mind/memory.js +1090 -854
  37. package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +574 -459
  38. package/dist/src/cli/simple-commands/hive-mind/performance-test.js +347 -263
  39. package/dist/src/cli/simple-commands/hive-mind/queen.js +768 -727
  40. package/dist/src/cli/simple-commands/hive-mind/session-manager.js +1049 -745
  41. package/dist/src/cli/simple-commands/hive-mind-optimize.js +283 -227
  42. package/dist/src/cli/simple-commands/hive-mind-wizard.js +217 -174
  43. package/dist/src/cli/simple-commands/hive-mind.js +2282 -1841
  44. package/dist/src/cli/simple-commands/hive.js +79 -90
  45. package/dist/src/cli/simple-commands/hook-safety.js +521 -431
  46. package/dist/src/cli/simple-commands/hooks/session-start-soul.js +254 -203
  47. package/dist/src/cli/simple-commands/hooks.js +1204 -1064
  48. package/dist/src/cli/simple-commands/init/agent-copier.js +319 -294
  49. package/dist/src/cli/simple-commands/init/batch-init.js +562 -496
  50. package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +19 -13
  51. package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +19 -13
  52. package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +88 -61
  53. package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +150 -125
  54. package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +49 -42
  55. package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +61 -43
  56. package/dist/src/cli/simple-commands/init/copy-revised-templates.js +147 -141
  57. package/dist/src/cli/simple-commands/init/executable-wrapper.js +44 -31
  58. package/dist/src/cli/simple-commands/init/gitignore-updater.js +90 -64
  59. package/dist/src/cli/simple-commands/init/help.js +107 -104
  60. package/dist/src/cli/simple-commands/init/hive-mind-init.js +528 -509
  61. package/dist/src/cli/simple-commands/init/index.js +1759 -1510
  62. package/dist/src/cli/simple-commands/init/performance-monitor.js +317 -234
  63. package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +504 -441
  64. package/dist/src/cli/simple-commands/init/rollback/index.js +364 -289
  65. package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +728 -652
  66. package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +481 -416
  67. package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +448 -369
  68. package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +2 -1
  69. package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +99 -122
  70. package/dist/src/cli/simple-commands/init/sparc/workflows.js +37 -32
  71. package/dist/src/cli/simple-commands/init/sparc-structure.js +62 -55
  72. package/dist/src/cli/simple-commands/init/template-copier.js +533 -421
  73. package/dist/src/cli/simple-commands/init/templates/coordination-md.js +6 -3
  74. package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +318 -344
  75. package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +218 -173
  76. package/dist/src/cli/simple-commands/init/templates/github-safe.js +75 -65
  77. package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +6 -3
  78. package/dist/src/cli/simple-commands/init/templates/readme-files.js +4 -2
  79. package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +230 -187
  80. package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +80 -53
  81. package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +85 -101
  82. package/dist/src/cli/simple-commands/init/validation/config-validator.js +330 -283
  83. package/dist/src/cli/simple-commands/init/validation/health-checker.js +561 -495
  84. package/dist/src/cli/simple-commands/init/validation/index.js +358 -302
  85. package/dist/src/cli/simple-commands/init/validation/mode-validator.js +359 -308
  86. package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +366 -389
  87. package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +268 -270
  88. package/dist/src/cli/simple-commands/init/validation/test-runner.js +447 -427
  89. package/dist/src/cli/simple-commands/init.js +2 -1
  90. package/dist/src/cli/simple-commands/mcp-health.js +158 -131
  91. package/dist/src/cli/simple-commands/mcp-integration-layer.js +634 -533
  92. package/dist/src/cli/simple-commands/mcp.js +400 -345
  93. package/dist/src/cli/simple-commands/memory-consolidation.js +537 -426
  94. package/dist/src/cli/simple-commands/memory.js +311 -247
  95. package/dist/src/cli/simple-commands/migrate-hooks.js +46 -39
  96. package/dist/src/cli/simple-commands/monitor.js +363 -294
  97. package/dist/src/cli/simple-commands/neural.js +65 -51
  98. package/dist/src/cli/simple-commands/pair-autofix-only.js +662 -538
  99. package/dist/src/cli/simple-commands/pair-basic.js +656 -528
  100. package/dist/src/cli/simple-commands/pair-old.js +543 -430
  101. package/dist/src/cli/simple-commands/pair-working.js +751 -615
  102. package/dist/src/cli/simple-commands/pair.js +751 -615
  103. package/dist/src/cli/simple-commands/performance-hooks.js +111 -83
  104. package/dist/src/cli/simple-commands/performance-metrics.js +433 -348
  105. package/dist/src/cli/simple-commands/process-ui-enhanced.js +787 -708
  106. package/dist/src/cli/simple-commands/process-ui.js +254 -230
  107. package/dist/src/cli/simple-commands/realtime-update-system.js +611 -525
  108. package/dist/src/cli/simple-commands/sparc/architecture.js +1530 -1704
  109. package/dist/src/cli/simple-commands/sparc/commands.js +516 -438
  110. package/dist/src/cli/simple-commands/sparc/completion.js +1481 -1224
  111. package/dist/src/cli/simple-commands/sparc/coordinator.js +978 -913
  112. package/dist/src/cli/simple-commands/sparc/index.js +298 -241
  113. package/dist/src/cli/simple-commands/sparc/phase-base.js +390 -314
  114. package/dist/src/cli/simple-commands/sparc/pseudocode.js +869 -965
  115. package/dist/src/cli/simple-commands/sparc/refinement.js +1273 -980
  116. package/dist/src/cli/simple-commands/sparc/specification.js +645 -559
  117. package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
  118. package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
  119. package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
  120. package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
  121. package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
  122. package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
  123. package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
  124. package/dist/src/cli/simple-commands/sparc-modes/index.js +55 -47
  125. package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
  126. package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
  127. package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
  128. package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
  129. package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
  130. package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
  131. package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
  132. package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
  133. package/dist/src/cli/simple-commands/sparc-modes/swarm.js +87 -101
  134. package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
  135. package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
  136. package/dist/src/cli/simple-commands/sparc.js +493 -465
  137. package/dist/src/cli/simple-commands/start-ui.js +132 -108
  138. package/dist/src/cli/simple-commands/start-wrapper.js +268 -240
  139. package/dist/src/cli/simple-commands/start.js +1 -1
  140. package/dist/src/cli/simple-commands/status.js +275 -254
  141. package/dist/src/cli/simple-commands/stream-chain-clean.js +171 -128
  142. package/dist/src/cli/simple-commands/stream-chain-fixed.js +82 -61
  143. package/dist/src/cli/simple-commands/stream-chain-real.js +331 -267
  144. package/dist/src/cli/simple-commands/stream-chain-working.js +263 -211
  145. package/dist/src/cli/simple-commands/stream-chain.js +318 -260
  146. package/dist/src/cli/simple-commands/stream-processor.js +315 -290
  147. package/dist/src/cli/simple-commands/swarm-executor.js +222 -189
  148. package/dist/src/cli/simple-commands/swarm-metrics-integration.js +300 -208
  149. package/dist/src/cli/simple-commands/swarm-ui.js +703 -623
  150. package/dist/src/cli/simple-commands/swarm-webui-integration.js +286 -258
  151. package/dist/src/cli/simple-commands/swarm.js +1082 -887
  152. package/dist/src/cli/simple-commands/task.js +206 -161
  153. package/dist/src/cli/simple-commands/timestamp-fix.js +89 -59
  154. package/dist/src/cli/simple-commands/token-tracker.js +316 -258
  155. package/dist/src/cli/simple-commands/tool-execution-framework.js +519 -433
  156. package/dist/src/cli/simple-commands/train-and-stream.js +331 -275
  157. package/dist/src/cli/simple-commands/training-pipeline.js +725 -619
  158. package/dist/src/cli/simple-commands/training.js +227 -170
  159. package/dist/src/cli/simple-commands/verification-hooks.js +284 -261
  160. package/dist/src/cli/simple-commands/verification-integration.js +417 -389
  161. package/dist/src/cli/simple-commands/verification-training-integration.js +606 -486
  162. package/dist/src/cli/simple-commands/verification.js +513 -493
  163. package/dist/src/cli/simple-commands/web-server.js +836 -766
  164. package/dist/src/cli/simple-commands/webui-validator.js +124 -106
  165. package/dist/src/coordination/byzantine-memory-channels.js +25 -1
  166. package/dist/src/coordination/event-bus/demo-wasm-integration.js +251 -212
  167. package/dist/src/coordination/event-bus/qe-event-bus.js +748 -608
  168. package/dist/src/coordination/event-bus/qe-event-bus.test.js +454 -379
  169. package/dist/src/coordination/iteration-tracker.js +454 -363
  170. package/dist/src/index.js +384 -35
  171. package/dist/src/mcp/DEPRECATED.js +60 -46
  172. package/dist/src/mcp/fixes/mcp-error-fixes.js +134 -115
  173. package/dist/src/mcp/implementations/agent-tracker.js +128 -114
  174. package/dist/src/mcp/implementations/daa-tools.js +350 -292
  175. package/dist/src/mcp/implementations/workflow-tools.js +361 -329
  176. package/dist/src/mcp/mcp-config-manager.js +1331 -1183
  177. package/dist/src/mcp/mcp-server-novice-simplified.js +17 -11
  178. package/dist/src/mcp/mcp-server-novice.js +17 -11
  179. package/dist/src/mcp/mcp-server-sdk.js +17 -11
  180. package/dist/src/mcp/mcp-server.js +1484 -1620
  181. package/dist/src/mcp/ruv-swarm-wrapper.js +239 -209
  182. package/dist/src/memory/advanced-serializer.js +589 -609
  183. package/dist/src/memory/enhanced-examples.js +305 -220
  184. package/dist/src/memory/enhanced-memory.js +336 -295
  185. package/dist/src/memory/enhanced-session-serializer.js +492 -408
  186. package/dist/src/memory/fallback-memory-system.js +1021 -900
  187. package/dist/src/memory/fallback-store.js +131 -93
  188. package/dist/src/memory/high-performance-serialization.js +730 -592
  189. package/dist/src/memory/in-memory-store.js +213 -161
  190. package/dist/src/memory/index.js +157 -123
  191. package/dist/src/memory/lock-free-structures.js +764 -578
  192. package/dist/src/memory/memory-mapped-persistence.js +766 -585
  193. package/dist/src/memory/memory-pressure-manager.js +707 -569
  194. package/dist/src/memory/migration.js +445 -358
  195. package/dist/src/memory/shared-memory.js +768 -641
  196. package/dist/src/memory/sqlite-store.js +325 -245
  197. package/dist/src/memory/sqlite-wrapper.js +151 -122
  198. package/dist/src/memory/swarm-memory.js +603 -470
  199. package/dist/src/memory/test-example.js +134 -126
  200. package/dist/src/memory/ultra-fast-memory-store.js +821 -622
  201. package/dist/src/memory/unified-memory-manager.js +437 -356
  202. package/dist/src/swarm/CodeRefactoringSwarm.js +952 -777
  203. package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +400 -332
  204. package/dist/src/utils/error-handler.js +2 -36
  205. package/dist/src/utils/github-cli-safe.js +64 -56
  206. package/dist/src/utils/github-cli-safety-wrapper.js +546 -451
  207. package/dist/src/utils/npx-isolated-cache.js +119 -104
  208. package/dist/src/utils/preference-manager.js +652 -622
  209. package/dist/src/utils/timezone-utils.js +105 -86
  210. package/dist/src/web/api/apm-routes.js +353 -0
  211. package/dist/src/web/api/config/api-config.js +184 -0
  212. package/dist/src/web/api/middleware/auth.js +203 -0
  213. package/dist/src/web/api/middleware/cache.js +273 -0
  214. package/dist/src/web/api/middleware/error-handler.js +257 -0
  215. package/dist/src/web/api/middleware/request-logger.js +215 -0
  216. package/dist/src/web/api/middleware/validation.js +323 -0
  217. package/dist/src/web/api/routes/events.js +463 -0
  218. package/dist/src/web/api/routes/hierarchy.js +300 -0
  219. package/dist/src/web/api/routes/index.js +12 -0
  220. package/dist/src/web/api/routes/metrics.js +559 -0
  221. package/dist/src/web/api/routes/parallel-status.js +359 -0
  222. package/dist/src/web/api/routes/status.js +448 -0
  223. package/dist/src/web/api/server.js +462 -0
  224. package/dist/src/web/dashboard/hooks/useWebSocket.js +383 -0
  225. package/dist/src/web/dashboard/index.js +85 -0
  226. package/dist/src/web/dashboard/realtime/CustomSyncManager.js +439 -0
  227. package/dist/src/web/dashboard/realtime/NativeWebSocketManager.js +323 -0
  228. package/dist/src/web/dashboard/realtime/PerformanceBenchmark.js +527 -0
  229. package/dist/src/web/dashboard/realtime/RealtimeCommunicationManager.js +474 -0
  230. package/dist/src/web/dashboard/realtime/RealtimeServer.js +666 -0
  231. package/dist/src/web/dashboard/realtime/SSEManager.js +426 -0
  232. package/dist/src/web/dashboard/types.js +4 -0
  233. package/dist/src/web/messaging/agent-status-tracker.js +453 -0
  234. package/dist/src/web/messaging/human-intervention-system.js +305 -0
  235. package/dist/src/web/messaging/message-filter.js +302 -0
  236. package/dist/src/web/messaging/swarm-message-router.js +324 -0
  237. package/dist/src/web/messaging/transparency-logger.js +421 -0
  238. package/dist/src/web/portal-server.js +460 -0
  239. package/dist/src/web/server.js +322 -0
  240. package/dist/src/web/websocket/apm-websocket-handler.js +453 -0
  241. package/dist/src/web/websocket/websocket-manager.js +780 -0
  242. package/package.json +5 -3
  243. package/dist/src/cli/minimal-main.js +0 -22
  244. package/dist/src/enterprise/analytics-manager.js +0 -1135
  245. package/dist/src/enterprise/audit-manager.js +0 -1115
  246. package/dist/src/enterprise/cloud-manager.js +0 -891
  247. package/dist/src/enterprise/deployment-manager.js +0 -966
  248. package/dist/src/enterprise/index.js +0 -6
  249. package/dist/src/enterprise/project-manager.js +0 -584
  250. package/dist/src/enterprise/security-manager.js +0 -991
  251. package/dist/src/migration/index.js +0 -92
  252. package/dist/src/migration/logger.js +0 -121
  253. package/dist/src/migration/migration-analyzer.js +0 -268
  254. package/dist/src/migration/migration-runner.js +0 -522
  255. package/dist/src/migration/migration-validator.js +0 -285
  256. package/dist/src/migration/progress-reporter.js +0 -150
  257. package/dist/src/migration/rollback-manager.js +0 -321
  258. package/dist/src/migration/tests/migration-system.test.js +0 -7
  259. package/dist/src/migration/types.js +0 -3
  260. package/dist/src/swarm/__tests__/integration.test.js +0 -227
  261. package/dist/src/swarm/__tests__/prompt-copier.test.js +0 -344
  262. package/dist/src/swarm/advanced-orchestrator.js +0 -1095
  263. package/dist/src/swarm/claude-code-interface.js +0 -961
  264. package/dist/src/swarm/claude-flow-executor.js +0 -229
  265. package/dist/src/swarm/consensus-coordinator.js +0 -475
  266. package/dist/src/swarm/coordinator.js +0 -2993
  267. package/dist/src/swarm/direct-executor.js +0 -1180
  268. package/dist/src/swarm/error-recovery/advanced-error-detection.js +0 -691
  269. package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +0 -998
  270. package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +0 -1197
  271. package/dist/src/swarm/error-recovery/recovery-monitoring.js +0 -772
  272. package/dist/src/swarm/error-recovery/resilience-architecture.js +0 -714
  273. package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +0 -1319
  274. package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +0 -808
  275. package/dist/src/swarm/executor-v2.js +0 -322
  276. package/dist/src/swarm/executor.js +0 -815
  277. package/dist/src/swarm/hive-mind-integration.js +0 -703
  278. package/dist/src/swarm/index.js +0 -41
  279. package/dist/src/swarm/json-output-aggregator.js +0 -267
  280. package/dist/src/swarm/large-scale-coordinator.js +0 -542
  281. package/dist/src/swarm/mcp-integration-wrapper.js +0 -628
  282. package/dist/src/swarm/memory.js +0 -1117
  283. package/dist/src/swarm/optimizations/__tests__/optimization.test.js +0 -348
  284. package/dist/src/swarm/optimizations/async-file-manager.js +0 -285
  285. package/dist/src/swarm/optimizations/circular-buffer.js +0 -162
  286. package/dist/src/swarm/optimizations/connection-pool.js +0 -244
  287. package/dist/src/swarm/optimizations/index.js +0 -28
  288. package/dist/src/swarm/optimizations/optimized-executor.js +0 -320
  289. package/dist/src/swarm/optimizations/ttl-map.js +0 -234
  290. package/dist/src/swarm/prompt-cli.js +0 -200
  291. package/dist/src/swarm/prompt-copier-enhanced.js +0 -202
  292. package/dist/src/swarm/prompt-copier.js +0 -381
  293. package/dist/src/swarm/prompt-manager.js +0 -295
  294. package/dist/src/swarm/prompt-utils.js +0 -310
  295. package/dist/src/swarm/result-aggregator.js +0 -718
  296. package/dist/src/swarm/sparc-executor.js +0 -1568
  297. package/dist/src/swarm/strategies/auto.js +0 -758
  298. package/dist/src/swarm/strategies/base.js +0 -128
  299. package/dist/src/swarm/strategies/research.js +0 -914
  300. package/dist/src/swarm/strategies/strategy-metrics-patch.js +0 -2
  301. package/dist/src/swarm/types.js +0 -52
  302. package/dist/src/swarm/workers/copy-worker.js +0 -56
  303. package/dist/src/validators/epic-config-schema.js +0 -214
  304. package/dist/src/validators/index.js +0 -10
  305. package/dist/src/validators/swarm-init-validator.js +0 -259
  306. package/dist/src/validators/todowrite-batching-validator.js +0 -215
  307. package/dist/src/validators/todowrite-integration.js +0 -187
  308. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/documentSymbols/browser/documentSymbols.js +0 -23
  309. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +0 -57
  310. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +0 -401
  311. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +0 -181
  312. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.js +0 -44
  313. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +0 -157
  314. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/edit.js +0 -71
  315. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/editorState/browser/editorState.js +0 -112
  316. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findController.js +0 -990
  317. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findDecorations.js +0 -296
  318. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findModel.js +0 -488
  319. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findOptionsWidget.js +0 -138
  320. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findState.js +0 -243
  321. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findWidget.js +0 -1177
  322. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/folding.js +0 -1093
  323. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +0 -133
  324. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingModel.js +0 -538
  325. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingRanges.js +0 -351
  326. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +0 -49
  327. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/format.js +0 -360
  328. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formatActions.js +0 -263
  329. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formattingEdit.js +0 -54
  330. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.js +0 -149
  331. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/hover/browser/contentHover.js +0 -874
  332. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commandIds.js +0 -7
  333. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commands.js +0 -199
  334. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/linesOperations/browser/copyLinesCommand.js +0 -70
  335. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/commandsQuickAccess.js +0 -26
  336. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +0 -153
  337. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +0 -33
  338. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js +0 -354
  339. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/smartSelect/browser/bracketSelections.js +0 -146
  340. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/suggest/browser/completionModel.js +0 -224
  341. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +0 -119
  342. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/edcore.main.js +0 -14
  343. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.all.js +0 -63
  344. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.api.js +0 -55
  345. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.main.js +0 -7
  346. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.worker.js +0 -25
  347. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/standalone/browser/colorizer.js +0 -118
  348. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/css.worker.js +0 -36869
  349. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/cssMode.js +0 -2035
  350. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/browser/accessibilityService.js +0 -88
  351. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/common/accessibility.js +0 -9
  352. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/action.js +0 -7
  353. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/actionCommonCategories.js +0 -13
  354. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionList.js +0 -276
  355. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionWidget.js +0 -248
  356. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/common/actionWidget.js +0 -5
  357. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actions/common/actions.js +0 -409
  358. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/audioCues/browser/audioCueService.js +0 -176
  359. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/browser/clipboardService.js +0 -141
  360. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/common/clipboardService.js +0 -6
  361. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/commands/common/commands.js +0 -80
  362. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configuration.js +0 -86
  363. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationModels.js +0 -554
  364. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationRegistry.js +0 -317
  365. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurations.js +0 -41
  366. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/browser/contextKeyService.js +0 -432
  367. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkey.js +0 -1547
  368. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkeys.js +0 -18
  369. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuHandler.js +0 -124
  370. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuService.js +0 -101
  371. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextView.js +0 -7
  372. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextViewService.js +0 -72
  373. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dialogs/common/dialogs.js +0 -2
  374. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dnd/browser/dnd.js +0 -36
  375. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/editor/common/editor.js +0 -17
  376. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/environment/common/environment.js +0 -2
  377. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/extensions/common/extensions.js +0 -47
  378. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/files/common/files.js +0 -9
  379. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +0 -105
  380. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/descriptors.js +0 -11
  381. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/extensions.js +0 -15
  382. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/abstractKeybindingService.js +0 -277
  383. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/baseResolvedKeybinding.js +0 -53
  384. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +0 -354
  385. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/browser/defaultStyles.js +0 -162
  386. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/common/colorRegistry.js +0 -482
  387. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/abap/abap.js +0 -10
  388. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/apex/apex.js +0 -10
  389. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/azcli/azcli.js +0 -10
  390. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bat/bat.js +0 -10
  391. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bicep/bicep.js +0 -11
  392. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cameligo/cameligo.js +0 -10
  393. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/clojure/clojure.js +0 -10
  394. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/coffee/coffee.js +0 -10
  395. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cpp/cpp.js +0 -10
  396. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csharp/csharp.js +0 -10
  397. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csp/csp.js +0 -10
  398. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/css/css.js +0 -12
  399. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cypher/cypher.js +0 -10
  400. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dart/dart.js +0 -10
  401. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dockerfile/dockerfile.js +0 -10
  402. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/ecl/ecl.js +0 -10
  403. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/elixir/elixir.js +0 -10
  404. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/flow9/flow9.js +0 -10
  405. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.js +0 -745
  406. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.de.js +0 -31
  407. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.es.js +0 -31
  408. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.fr.js +0 -29
  409. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.it.js +0 -29
  410. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ja.js +0 -31
  411. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.js +0 -29
  412. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ko.js +0 -29
  413. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ru.js +0 -31
  414. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-cn.js +0 -31
  415. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-tw.js +0 -29
  416. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssMode.js +0 -13
  417. package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssWorker.js +0 -81
  418. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/cli.js +0 -64
  419. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/example.js +0 -36
  420. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/index.js +0 -205
  421. package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/test.js +0 -260
  422. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.browser.js +0 -34
  423. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.js +0 -35
  424. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.native.js +0 -26
  425. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.browser.js +0 -34
  426. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.js +0 -45
  427. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/nanoid.js +0 -1
  428. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/non-secure/index.js +0 -21
  429. package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/url-alphabet/index.js +0 -3
  430. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/bin/nodemon.js +0 -16
  431. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/index.js +0 -49
  432. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/parse.js +0 -230
  433. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/command.js +0 -43
  434. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/defaults.js +0 -34
  435. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/exec.js +0 -234
  436. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/index.js +0 -93
  437. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/load.js +0 -225
  438. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/help/index.js +0 -27
  439. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/index.js +0 -1
  440. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/index.js +0 -4
  441. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/match.js +0 -287
  442. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/run.js +0 -562
  443. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/signals.js +0 -34
  444. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/watch.js +0 -244
  445. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/nodemon.js +0 -317
  446. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/add.js +0 -89
  447. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/index.js +0 -53
  448. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/parse.js +0 -43
  449. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/spawn.js +0 -74
  450. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/bus.js +0 -44
  451. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/clone.js +0 -40
  452. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/colour.js +0 -26
  453. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/index.js +0 -103
  454. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/log.js +0 -82
  455. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/merge.js +0 -47
  456. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/version.js +0 -100
  457. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/brace-expansion/index.js +0 -201
  458. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/has-flag/index.js +0 -8
  459. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/minimatch/minimatch.js +0 -947
  460. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/browser.js +0 -5
  461. package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/index.js +0 -131
  462. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/bin/pidtree.js +0 -128
  463. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/index.js +0 -49
  464. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/bin.js +0 -61
  465. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/get.js +0 -45
  466. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/pidtree.js +0 -104
  467. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/ps.js +0 -47
  468. package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/wmic.js +0 -49
  469. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/doc.js +0 -1270
  470. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/acorn.js +0 -15
  471. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/angular.js +0 -2
  472. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/babel.js +0 -15
  473. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/estree.js +0 -36
  474. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/flow.js +0 -19
  475. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/glimmer.js +0 -29
  476. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/graphql.js +0 -29
  477. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/html.js +0 -22
  478. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/markdown.js +0 -63
  479. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/meriyah.js +0 -4
  480. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/postcss.js +0 -54
  481. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/typescript.js +0 -20
  482. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/yaml.js +0 -160
  483. package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/standalone.js +0 -34
  484. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/bin/react-scripts.js +0 -58
  485. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/env.js +0 -112
  486. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/getHttpsConfig.js +0 -74
  487. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/babelTransform.js +0 -37
  488. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/cssTransform.js +0 -22
  489. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/fileTransform.js +0 -40
  490. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/modules.js +0 -142
  491. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/paths.js +0 -153
  492. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack/persistentCache/createEnvironmentHash.js +0 -9
  493. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack.config.js +0 -796
  494. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpackDevServer.config.js +0 -135
  495. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/build.js +0 -225
  496. package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/eject.js +0 -340
@@ -4,626 +4,807 @@
4
4
  * This module implements high-performance persistence using memory-mapped files,
5
5
  * incremental backups, and atomic operations to ensure data integrity while
6
6
  * maintaining sub-microsecond performance for the in-memory operations.
7
- */ import { promises as fs } from "fs";
7
+ */
8
+
9
+ import { promises as fs, constants } from 'fs';
10
+ import { AtomicOperations } from './lock-free-structures.js';
11
+
8
12
  /**
9
13
  * Memory-mapped persistence configuration
10
- */ const PERSISTENCE_CONFIG = {
11
- // File layout constants
12
- HEADER_SIZE: 1024,
13
- REGION_SIZE: 4096,
14
- CHECKPOINT_INTERVAL: 5000,
15
- SYNC_BATCH_SIZE: 16,
16
- // Backup strategies
17
- INCREMENTAL_THRESHOLD: 0.1,
18
- FULL_BACKUP_INTERVAL: 3600,
19
- // Integrity checking
20
- CHECKSUM_ENABLED: true,
21
- MAGIC_NUMBER: 0x464C4F57,
22
- VERSION: 1,
23
- // Performance tuning
24
- PREFAULT_PAGES: true,
25
- USE_HUGE_PAGES: false,
26
- DIRECT_IO: false
27
- };
14
+ */
15
+ const PERSISTENCE_CONFIG = {
16
+ // File layout constants
17
+ HEADER_SIZE: 1024, // File header size
18
+ REGION_SIZE: 4096, // Memory region size (4KB pages)
19
+ CHECKPOINT_INTERVAL: 5000, // Checkpoint interval (ms)
20
+ SYNC_BATCH_SIZE: 16, // Number of regions to sync per batch
21
+
22
+ // Backup strategies
23
+ INCREMENTAL_THRESHOLD: 0.1, // 10% changes trigger incremental backup
24
+ FULL_BACKUP_INTERVAL: 3600, // Full backup every hour (seconds)
25
+
26
+ // Integrity checking
27
+ CHECKSUM_ENABLED: true,
28
+ MAGIC_NUMBER: 0x464C4F57, // 'FLOW' magic number
29
+ VERSION: 1,
30
+
31
+ // Performance tuning
32
+ PREFAULT_PAGES: true, // Pre-fault memory pages
33
+ USE_HUGE_PAGES: false, // Use huge pages if available
34
+ DIRECT_IO: false, // Use direct I/O (bypass OS cache)
35
+ };
36
+
28
37
  /**
29
38
  * File header layout for memory-mapped persistence
30
- */ const FILE_HEADER_LAYOUT = {
31
- magic: 0,
32
- version: 4,
33
- fileSize: 8,
34
- dataSize: 16,
35
- regionCount: 24,
36
- dirtyRegions: 28,
37
- lastCheckpoint: 32,
38
- lastFullBackup: 40,
39
- checksumTable: 48,
40
- metadataOffset: 56,
41
- reserved: 64 // 960 bytes reserved for future use
42
- };
39
+ */
40
+ const FILE_HEADER_LAYOUT = {
41
+ magic: 0, // uint32 - Magic number
42
+ version: 4, // uint32 - Format version
43
+ fileSize: 8, // uint64 - Total file size
44
+ dataSize: 16, // uint64 - Active data size
45
+ regionCount: 24, // uint32 - Number of memory regions
46
+ dirtyRegions: 28, // uint32 - Number of dirty regions
47
+ lastCheckpoint: 32, // uint64 - Last checkpoint timestamp
48
+ lastFullBackup: 40, // uint64 - Last full backup timestamp
49
+ checksumTable: 48, // uint64 - Offset to checksum table
50
+ metadataOffset: 56, // uint64 - Offset to metadata region
51
+ reserved: 64 // 960 bytes reserved for future use
52
+ };
53
+
43
54
  /**
44
55
  * Region metadata layout
45
- */ const REGION_METADATA_LAYOUT = {
46
- checksum: 0,
47
- lastModified: 4,
48
- writeCount: 12,
49
- flags: 16,
50
- reserved: 20 // 12 bytes reserved
51
- };
56
+ */
57
+ const REGION_METADATA_LAYOUT = {
58
+ checksum: 0, // uint32 - CRC32 checksum
59
+ lastModified: 4, // uint64 - Last modification timestamp
60
+ writeCount: 12, // uint32 - Number of writes to this region
61
+ flags: 16, // uint32 - Region flags (dirty, compressed, etc.)
62
+ reserved: 20 // 12 bytes reserved
63
+ };
64
+
52
65
  /**
53
66
  * Memory-mapped file persistence manager
54
- */ export class MemoryMappedPersistence {
55
- /**
67
+ */
68
+ export class MemoryMappedPersistence {
69
+ constructor(sharedBuffer, backupPath, config = PERSISTENCE_CONFIG) {
70
+ this.sharedBuffer = sharedBuffer;
71
+ this.backupPath = backupPath;
72
+ this.config = config;
73
+
74
+ // Memory region tracking
75
+ this.regionCount = Math.ceil(sharedBuffer.byteLength / config.REGION_SIZE);
76
+ this.dirtyRegions = new Set();
77
+ this.regionChecksums = new Map();
78
+
79
+ // File handles and metadata
80
+ this.fileHandle = null;
81
+ this.fileSize = 0;
82
+ this.isInitialized = false;
83
+
84
+ // Performance metrics
85
+ this.stats = {
86
+ totalBackups: 0,
87
+ incrementalBackups: 0,
88
+ fullBackups: 0,
89
+ totalSyncTime: 0,
90
+ avgSyncTime: 0,
91
+ regionsSync: 0,
92
+ checksumFailures: 0,
93
+ lastBackupTime: 0
94
+ };
95
+
96
+ // Background operations
97
+ this.backgroundSync = null;
98
+ this.checkpointTimer = null;
99
+
100
+ // Integrity verification
101
+ this.checksumTable = new Map();
102
+ }
103
+
104
+ /**
56
105
  * Initialize memory-mapped persistence
57
- */ async initialize() {
58
- try {
59
- await this.createOrOpenBackupFile();
60
- await this.initializeFileHeader();
61
- await this.verifyFileIntegrity();
62
- this.startBackgroundOperations();
63
- this.isInitialized = true;
64
- console.log(`Persistence initialized: ${this.backupPath} (${this.regionCount} regions)`);
65
- } catch (error) {
66
- console.error('Failed to initialize persistence:', error);
67
- throw error;
68
- }
69
- }
70
- /**
106
+ */
107
+ async initialize() {
108
+ try {
109
+ await this.createOrOpenBackupFile();
110
+ await this.initializeFileHeader();
111
+ await this.verifyFileIntegrity();
112
+
113
+ this.startBackgroundOperations();
114
+ this.isInitialized = true;
115
+
116
+ console.log(`Persistence initialized: ${this.backupPath} (${this.regionCount} regions)`);
117
+ } catch (error) {
118
+ console.error('Failed to initialize persistence:', error);
119
+ throw error;
120
+ }
121
+ }
122
+
123
+ /**
71
124
  * Create or open backup file
72
- */ async createOrOpenBackupFile() {
73
- const totalFileSize = this.config.HEADER_SIZE + this.regionCount * this.config.REGION_SIZE + this.regionCount * 32; // Metadata per region
74
- try {
75
- // Try to open existing file
76
- const stats = await fs.stat(this.backupPath);
77
- this.fileSize = stats.size;
78
- if (this.fileSize < totalFileSize) {
79
- // File is too small, extend it
80
- await this.extendFile(totalFileSize);
81
- }
82
- } catch (error) {
83
- if (error.code === 'ENOENT') {
84
- // File doesn't exist, create it
85
- await this.createNewBackupFile(totalFileSize);
86
- } else {
87
- throw error;
88
- }
89
- }
90
- // Open file handle for memory mapping
91
- this.fileHandle = await fs.open(this.backupPath, 'r+');
92
- }
93
- /**
125
+ */
126
+ async createOrOpenBackupFile() {
127
+ const totalFileSize = this.config.HEADER_SIZE +
128
+ (this.regionCount * this.config.REGION_SIZE) +
129
+ (this.regionCount * 32); // Metadata per region
130
+
131
+ try {
132
+ // Try to open existing file
133
+ const stats = await fs.stat(this.backupPath);
134
+ this.fileSize = stats.size;
135
+
136
+ if (this.fileSize < totalFileSize) {
137
+ // File is too small, extend it
138
+ await this.extendFile(totalFileSize);
139
+ }
140
+ } catch (error) {
141
+ if (error.code === 'ENOENT') {
142
+ // File doesn't exist, create it
143
+ await this.createNewBackupFile(totalFileSize);
144
+ } else {
145
+ throw error;
146
+ }
147
+ }
148
+
149
+ // Open file handle for memory mapping
150
+ this.fileHandle = await fs.open(this.backupPath, 'r+');
151
+ }
152
+
153
+ /**
94
154
  * Create new backup file with proper structure
95
- */ async createNewBackupFile(totalFileSize) {
96
- this.fileSize = totalFileSize;
97
- // Create file and allocate space
98
- const fileHandle = await fs.open(this.backupPath, 'w+');
99
- try {
100
- // Pre-allocate file space
101
- await fileHandle.truncate(totalFileSize);
102
- // Initialize with zeros (optional, but ensures consistent state)
103
- const zeroChunk = Buffer.alloc(64 * 1024, 0); // 64KB zero buffer
104
- let written = 0;
105
- while(written < totalFileSize){
106
- const chunkSize = Math.min(zeroChunk.length, totalFileSize - written);
107
- await fileHandle.write(zeroChunk, 0, chunkSize, written);
108
- written += chunkSize;
109
- }
110
- await fileHandle.sync();
111
- } finally{
112
- await fileHandle.close();
113
- }
114
- console.log(`Created new backup file: ${this.backupPath} (${totalFileSize} bytes)`);
115
- }
116
- /**
155
+ */
156
+ async createNewBackupFile(totalFileSize) {
157
+ this.fileSize = totalFileSize;
158
+
159
+ // Create file and allocate space
160
+ const fileHandle = await fs.open(this.backupPath, 'w+');
161
+
162
+ try {
163
+ // Pre-allocate file space
164
+ await fileHandle.truncate(totalFileSize);
165
+
166
+ // Initialize with zeros (optional, but ensures consistent state)
167
+ const zeroChunk = Buffer.alloc(64 * 1024, 0); // 64KB zero buffer
168
+ let written = 0;
169
+
170
+ while (written < totalFileSize) {
171
+ const chunkSize = Math.min(zeroChunk.length, totalFileSize - written);
172
+ await fileHandle.write(zeroChunk, 0, chunkSize, written);
173
+ written += chunkSize;
174
+ }
175
+
176
+ await fileHandle.sync();
177
+ } finally {
178
+ await fileHandle.close();
179
+ }
180
+
181
+ console.log(`Created new backup file: ${this.backupPath} (${totalFileSize} bytes)`);
182
+ }
183
+
184
+ /**
117
185
  * Extend existing file to accommodate larger shared buffer
118
- */ async extendFile(newSize) {
119
- if (this.fileHandle) {
120
- await this.fileHandle.truncate(newSize);
121
- await this.fileHandle.sync();
122
- this.fileSize = newSize;
123
- console.log(`Extended backup file to ${newSize} bytes`);
124
- }
125
- }
126
- /**
186
+ */
187
+ async extendFile(newSize) {
188
+ if (this.fileHandle) {
189
+ await this.fileHandle.truncate(newSize);
190
+ await this.fileHandle.sync();
191
+ this.fileSize = newSize;
192
+ console.log(`Extended backup file to ${newSize} bytes`);
193
+ }
194
+ }
195
+
196
+ /**
127
197
  * Initialize file header with metadata
128
- */ async initializeFileHeader() {
129
- const headerBuffer = Buffer.alloc(this.config.HEADER_SIZE);
130
- const headerView = new DataView(headerBuffer.buffer);
131
- // Write header fields
132
- headerView.setUint32(FILE_HEADER_LAYOUT.magic, this.config.MAGIC_NUMBER, true);
133
- headerView.setUint32(FILE_HEADER_LAYOUT.version, this.config.VERSION, true);
134
- headerView.setBigUint64(FILE_HEADER_LAYOUT.fileSize, BigInt(this.fileSize), true);
135
- headerView.setBigUint64(FILE_HEADER_LAYOUT.dataSize, BigInt(this.sharedBuffer.byteLength), true);
136
- headerView.setUint32(FILE_HEADER_LAYOUT.regionCount, this.regionCount, true);
137
- headerView.setUint32(FILE_HEADER_LAYOUT.dirtyRegions, 0, true);
138
- headerView.setBigUint64(FILE_HEADER_LAYOUT.lastCheckpoint, BigInt(Date.now()), true);
139
- headerView.setBigUint64(FILE_HEADER_LAYOUT.lastFullBackup, BigInt(0), true);
140
- // Calculate offsets
141
- const checksumTableOffset = this.config.HEADER_SIZE + this.regionCount * this.config.REGION_SIZE;
142
- const metadataOffset = checksumTableOffset + this.regionCount * 4; // 4 bytes per checksum
143
- headerView.setBigUint64(FILE_HEADER_LAYOUT.checksumTable, BigInt(checksumTableOffset), true);
144
- headerView.setBigUint64(FILE_HEADER_LAYOUT.metadataOffset, BigInt(metadataOffset), true);
145
- // Write header to file
146
- await this.fileHandle.write(headerBuffer, 0, this.config.HEADER_SIZE, 0);
147
- await this.fileHandle.sync();
148
- }
149
- /**
198
+ */
199
+ async initializeFileHeader() {
200
+ const headerBuffer = Buffer.alloc(this.config.HEADER_SIZE);
201
+ const headerView = new DataView(headerBuffer.buffer);
202
+
203
+ // Write header fields
204
+ headerView.setUint32(FILE_HEADER_LAYOUT.magic, this.config.MAGIC_NUMBER, true);
205
+ headerView.setUint32(FILE_HEADER_LAYOUT.version, this.config.VERSION, true);
206
+ headerView.setBigUint64(FILE_HEADER_LAYOUT.fileSize, BigInt(this.fileSize), true);
207
+ headerView.setBigUint64(FILE_HEADER_LAYOUT.dataSize, BigInt(this.sharedBuffer.byteLength), true);
208
+ headerView.setUint32(FILE_HEADER_LAYOUT.regionCount, this.regionCount, true);
209
+ headerView.setUint32(FILE_HEADER_LAYOUT.dirtyRegions, 0, true);
210
+ headerView.setBigUint64(FILE_HEADER_LAYOUT.lastCheckpoint, BigInt(Date.now()), true);
211
+ headerView.setBigUint64(FILE_HEADER_LAYOUT.lastFullBackup, BigInt(0), true);
212
+
213
+ // Calculate offsets
214
+ const checksumTableOffset = this.config.HEADER_SIZE +
215
+ (this.regionCount * this.config.REGION_SIZE);
216
+ const metadataOffset = checksumTableOffset + (this.regionCount * 4); // 4 bytes per checksum
217
+
218
+ headerView.setBigUint64(FILE_HEADER_LAYOUT.checksumTable, BigInt(checksumTableOffset), true);
219
+ headerView.setBigUint64(FILE_HEADER_LAYOUT.metadataOffset, BigInt(metadataOffset), true);
220
+
221
+ // Write header to file
222
+ await this.fileHandle.write(headerBuffer, 0, this.config.HEADER_SIZE, 0);
223
+ await this.fileHandle.sync();
224
+ }
225
+
226
+ /**
150
227
  * Verify file integrity on startup
151
- */ async verifyFileIntegrity() {
152
- // Read and verify header
153
- const headerBuffer = Buffer.alloc(this.config.HEADER_SIZE);
154
- await this.fileHandle.read(headerBuffer, 0, this.config.HEADER_SIZE, 0);
155
- const headerView = new DataView(headerBuffer.buffer);
156
- const magic = headerView.getUint32(FILE_HEADER_LAYOUT.magic, true);
157
- const version = headerView.getUint32(FILE_HEADER_LAYOUT.version, true);
158
- if (magic !== this.config.MAGIC_NUMBER) {
159
- throw new Error(`Invalid magic number: expected ${this.config.MAGIC_NUMBER}, got ${magic}`);
160
- }
161
- if (version !== this.config.VERSION) {
162
- throw new Error(`Unsupported version: expected ${this.config.VERSION}, got ${version}`);
163
- }
164
- // Load and verify checksums if enabled
165
- if (this.config.CHECKSUM_ENABLED) {
166
- await this.loadAndVerifyChecksums();
167
- }
168
- console.log('File integrity verification completed successfully');
169
- }
170
- /**
228
+ */
229
+ async verifyFileIntegrity() {
230
+ // Read and verify header
231
+ const headerBuffer = Buffer.alloc(this.config.HEADER_SIZE);
232
+ await this.fileHandle.read(headerBuffer, 0, this.config.HEADER_SIZE, 0);
233
+
234
+ const headerView = new DataView(headerBuffer.buffer);
235
+ const magic = headerView.getUint32(FILE_HEADER_LAYOUT.magic, true);
236
+ const version = headerView.getUint32(FILE_HEADER_LAYOUT.version, true);
237
+
238
+ if (magic !== this.config.MAGIC_NUMBER) {
239
+ throw new Error(`Invalid magic number: expected ${this.config.MAGIC_NUMBER}, got ${magic}`);
240
+ }
241
+
242
+ if (version !== this.config.VERSION) {
243
+ throw new Error(`Unsupported version: expected ${this.config.VERSION}, got ${version}`);
244
+ }
245
+
246
+ // Load and verify checksums if enabled
247
+ if (this.config.CHECKSUM_ENABLED) {
248
+ await this.loadAndVerifyChecksums();
249
+ }
250
+
251
+ console.log('File integrity verification completed successfully');
252
+ }
253
+
254
+ /**
171
255
  * Load and verify region checksums
172
- */ async loadAndVerifyChecksums() {
173
- const checksumTableOffset = Number((await this.readFileHeader()).checksumTable);
174
- const checksumBuffer = Buffer.alloc(this.regionCount * 4);
175
- await this.fileHandle.read(checksumBuffer, 0, checksumBuffer.length, checksumTableOffset);
176
- const checksumView = new DataView(checksumBuffer.buffer);
177
- let corruptRegions = 0;
178
- for(let i = 0; i < this.regionCount; i++){
179
- const storedChecksum = checksumView.getUint32(i * 4, true);
180
- if (storedChecksum !== 0) {
181
- const regionOffset = this.config.HEADER_SIZE + i * this.config.REGION_SIZE;
182
- const actualChecksum = await this.calculateRegionChecksum(i, regionOffset);
183
- if (storedChecksum !== actualChecksum) {
184
- console.warn(`Checksum mismatch in region ${i}: expected ${storedChecksum}, got ${actualChecksum}`);
185
- corruptRegions++;
186
- } else {
187
- this.checksumTable.set(i, storedChecksum);
188
- }
189
- }
190
- }
191
- if (corruptRegions > 0) {
192
- console.warn(`Found ${corruptRegions} corrupt regions during verification`);
193
- this.stats.checksumFailures += corruptRegions;
194
- }
195
- }
196
- /**
256
+ */
257
+ async loadAndVerifyChecksums() {
258
+ const checksumTableOffset = Number(
259
+ (await this.readFileHeader()).checksumTable
260
+ );
261
+
262
+ const checksumBuffer = Buffer.alloc(this.regionCount * 4);
263
+ await this.fileHandle.read(
264
+ checksumBuffer, 0, checksumBuffer.length, checksumTableOffset
265
+ );
266
+
267
+ const checksumView = new DataView(checksumBuffer.buffer);
268
+ let corruptRegions = 0;
269
+
270
+ for (let i = 0; i < this.regionCount; i++) {
271
+ const storedChecksum = checksumView.getUint32(i * 4, true);
272
+ if (storedChecksum !== 0) {
273
+ const regionOffset = this.config.HEADER_SIZE + (i * this.config.REGION_SIZE);
274
+ const actualChecksum = await this.calculateRegionChecksum(i, regionOffset);
275
+
276
+ if (storedChecksum !== actualChecksum) {
277
+ console.warn(`Checksum mismatch in region ${i}: expected ${storedChecksum}, got ${actualChecksum}`);
278
+ corruptRegions++;
279
+ } else {
280
+ this.checksumTable.set(i, storedChecksum);
281
+ }
282
+ }
283
+ }
284
+
285
+ if (corruptRegions > 0) {
286
+ console.warn(`Found ${corruptRegions} corrupt regions during verification`);
287
+ this.stats.checksumFailures += corruptRegions;
288
+ }
289
+ }
290
+
291
+ /**
197
292
  * Perform incremental backup of dirty regions
198
- */ async incrementalBackup() {
199
- if (this.dirtyRegions.size === 0) {
200
- return {
201
- backedUpRegions: 0,
202
- duration: 0
203
- };
204
- }
205
- const startTime = performance.now();
206
- const regionsToSync = Array.from(this.dirtyRegions);
207
- let syncedRegions = 0;
208
- try {
209
- // Process regions in batches for better I/O performance
210
- for(let i = 0; i < regionsToSync.length; i += this.config.SYNC_BATCH_SIZE){
211
- const batch = regionsToSync.slice(i, i + this.config.SYNC_BATCH_SIZE);
212
- await this.syncRegionBatch(batch);
213
- syncedRegions += batch.length;
214
- }
215
- // Update checksums if enabled
216
- if (this.config.CHECKSUM_ENABLED) {
217
- await this.updateRegionChecksums(regionsToSync);
218
- }
219
- // Update header
220
- await this.updateBackupHeader();
221
- // Clear dirty flags
222
- for (const regionIndex of regionsToSync){
223
- this.dirtyRegions.delete(regionIndex);
224
- }
225
- const duration = performance.now() - startTime;
226
- this.updateBackupStats('incremental', syncedRegions, duration);
227
- return {
228
- backedUpRegions: syncedRegions,
229
- duration
230
- };
231
- } catch (error) {
232
- console.error('Incremental backup failed:', error);
233
- throw error;
234
- }
235
- }
236
- /**
293
+ */
294
+ async incrementalBackup() {
295
+ if (this.dirtyRegions.size === 0) {
296
+ return { backedUpRegions: 0, duration: 0 };
297
+ }
298
+
299
+ const startTime = performance.now();
300
+ const regionsToSync = Array.from(this.dirtyRegions);
301
+ let syncedRegions = 0;
302
+
303
+ try {
304
+ // Process regions in batches for better I/O performance
305
+ for (let i = 0; i < regionsToSync.length; i += this.config.SYNC_BATCH_SIZE) {
306
+ const batch = regionsToSync.slice(i, i + this.config.SYNC_BATCH_SIZE);
307
+ await this.syncRegionBatch(batch);
308
+ syncedRegions += batch.length;
309
+ }
310
+
311
+ // Update checksums if enabled
312
+ if (this.config.CHECKSUM_ENABLED) {
313
+ await this.updateRegionChecksums(regionsToSync);
314
+ }
315
+
316
+ // Update header
317
+ await this.updateBackupHeader();
318
+
319
+ // Clear dirty flags
320
+ for (const regionIndex of regionsToSync) {
321
+ this.dirtyRegions.delete(regionIndex);
322
+ }
323
+
324
+ const duration = performance.now() - startTime;
325
+ this.updateBackupStats('incremental', syncedRegions, duration);
326
+
327
+ return { backedUpRegions: syncedRegions, duration };
328
+ } catch (error) {
329
+ console.error('Incremental backup failed:', error);
330
+ throw error;
331
+ }
332
+ }
333
+
334
+ /**
237
335
  * Perform full backup of entire shared buffer
238
- */ async fullBackup() {
239
- const startTime = performance.now();
240
- try {
241
- // Copy entire shared buffer to file
242
- const bufferView = new Uint8Array(this.sharedBuffer);
243
- const buffer = Buffer.from(bufferView);
244
- await this.fileHandle.write(buffer, 0, buffer.length, this.config.HEADER_SIZE);
245
- // Recalculate all checksums
246
- if (this.config.CHECKSUM_ENABLED) {
247
- await this.recalculateAllChecksums();
248
- }
249
- // Update header with full backup timestamp
250
- await this.updateBackupHeader(true);
251
- // Clear all dirty regions
252
- this.dirtyRegions.clear();
253
- const duration = performance.now() - startTime;
254
- this.updateBackupStats('full', this.regionCount, duration);
255
- return {
256
- backedUpRegions: this.regionCount,
257
- duration
258
- };
259
- } catch (error) {
260
- console.error('Full backup failed:', error);
261
- throw error;
262
- }
263
- }
264
- /**
336
+ */
337
+ async fullBackup() {
338
+ const startTime = performance.now();
339
+
340
+ try {
341
+ // Copy entire shared buffer to file
342
+ const bufferView = new Uint8Array(this.sharedBuffer);
343
+ const buffer = Buffer.from(bufferView);
344
+
345
+ await this.fileHandle.write(
346
+ buffer, 0, buffer.length, this.config.HEADER_SIZE
347
+ );
348
+
349
+ // Recalculate all checksums
350
+ if (this.config.CHECKSUM_ENABLED) {
351
+ await this.recalculateAllChecksums();
352
+ }
353
+
354
+ // Update header with full backup timestamp
355
+ await this.updateBackupHeader(true);
356
+
357
+ // Clear all dirty regions
358
+ this.dirtyRegions.clear();
359
+
360
+ const duration = performance.now() - startTime;
361
+ this.updateBackupStats('full', this.regionCount, duration);
362
+
363
+ return { backedUpRegions: this.regionCount, duration };
364
+ } catch (error) {
365
+ console.error('Full backup failed:', error);
366
+ throw error;
367
+ }
368
+ }
369
+
370
+ /**
265
371
  * Sync a batch of regions to file
266
- */ async syncRegionBatch(regionIndices) {
267
- const operations = regionIndices.map(async (regionIndex)=>{
268
- const regionOffset = regionIndex * this.config.REGION_SIZE;
269
- const fileOffset = this.config.HEADER_SIZE + regionOffset;
270
- const regionSize = Math.min(this.config.REGION_SIZE, this.sharedBuffer.byteLength - regionOffset);
271
- // Create buffer from SharedArrayBuffer region
272
- const regionView = new Uint8Array(this.sharedBuffer, regionOffset, regionSize);
273
- const regionBuffer = Buffer.from(regionView);
274
- // Write region to file
275
- await this.fileHandle.write(regionBuffer, 0, regionSize, fileOffset);
276
- });
277
- // Execute all operations in parallel
278
- await Promise.all(operations);
279
- // Force sync to disk
280
- await this.fileHandle.sync();
281
- }
282
- /**
372
+ */
373
+ async syncRegionBatch(regionIndices) {
374
+ const operations = regionIndices.map(async (regionIndex) => {
375
+ const regionOffset = regionIndex * this.config.REGION_SIZE;
376
+ const fileOffset = this.config.HEADER_SIZE + regionOffset;
377
+ const regionSize = Math.min(
378
+ this.config.REGION_SIZE,
379
+ this.sharedBuffer.byteLength - regionOffset
380
+ );
381
+
382
+ // Create buffer from SharedArrayBuffer region
383
+ const regionView = new Uint8Array(
384
+ this.sharedBuffer, regionOffset, regionSize
385
+ );
386
+ const regionBuffer = Buffer.from(regionView);
387
+
388
+ // Write region to file
389
+ await this.fileHandle.write(regionBuffer, 0, regionSize, fileOffset);
390
+ });
391
+
392
+ // Execute all operations in parallel
393
+ await Promise.all(operations);
394
+
395
+ // Force sync to disk
396
+ await this.fileHandle.sync();
397
+ }
398
+
399
+ /**
283
400
  * Update checksums for specified regions
284
- */ async updateRegionChecksums(regionIndices) {
285
- const checksumUpdates = regionIndices.map(async (regionIndex)=>{
286
- const regionOffset = this.config.HEADER_SIZE + regionIndex * this.config.REGION_SIZE;
287
- const checksum = await this.calculateRegionChecksum(regionIndex, regionOffset);
288
- this.checksumTable.set(regionIndex, checksum);
289
- return {
290
- regionIndex,
291
- checksum
292
- };
293
- });
294
- const results = await Promise.all(checksumUpdates);
295
- // Write updated checksums to file
296
- const checksumTableOffset = Number((await this.readFileHeader()).checksumTable);
297
- for (const { regionIndex, checksum } of results){
298
- const checksumBuffer = Buffer.allocUnsafe(4);
299
- checksumBuffer.writeUInt32LE(checksum, 0);
300
- await this.fileHandle.write(checksumBuffer, 0, 4, checksumTableOffset + regionIndex * 4);
301
- }
302
- }
303
- /**
401
+ */
402
+ async updateRegionChecksums(regionIndices) {
403
+ const checksumUpdates = regionIndices.map(async (regionIndex) => {
404
+ const regionOffset = this.config.HEADER_SIZE +
405
+ (regionIndex * this.config.REGION_SIZE);
406
+ const checksum = await this.calculateRegionChecksum(regionIndex, regionOffset);
407
+ this.checksumTable.set(regionIndex, checksum);
408
+ return { regionIndex, checksum };
409
+ });
410
+
411
+ const results = await Promise.all(checksumUpdates);
412
+
413
+ // Write updated checksums to file
414
+ const checksumTableOffset = Number(
415
+ (await this.readFileHeader()).checksumTable
416
+ );
417
+
418
+ for (const { regionIndex, checksum } of results) {
419
+ const checksumBuffer = Buffer.allocUnsafe(4);
420
+ checksumBuffer.writeUInt32LE(checksum, 0);
421
+
422
+ await this.fileHandle.write(
423
+ checksumBuffer, 0, 4, checksumTableOffset + (regionIndex * 4)
424
+ );
425
+ }
426
+ }
427
+
428
+ /**
304
429
  * Calculate CRC32 checksum for a region
305
- */ async calculateRegionChecksum(regionIndex, fileOffset) {
306
- const regionSize = Math.min(this.config.REGION_SIZE, this.sharedBuffer.byteLength - regionIndex * this.config.REGION_SIZE);
307
- // Read region data from file (for verification) or SharedArrayBuffer (for update)
308
- let regionData;
309
- if (fileOffset) {
310
- const buffer = Buffer.alloc(regionSize);
311
- await this.fileHandle.read(buffer, 0, regionSize, fileOffset);
312
- regionData = new Uint8Array(buffer);
313
- } else {
314
- const regionOffset = regionIndex * this.config.REGION_SIZE;
315
- regionData = new Uint8Array(this.sharedBuffer, regionOffset, regionSize);
316
- }
317
- return this.crc32(regionData);
318
- }
319
- /**
430
+ */
431
+ async calculateRegionChecksum(regionIndex, fileOffset) {
432
+ const regionSize = Math.min(
433
+ this.config.REGION_SIZE,
434
+ this.sharedBuffer.byteLength - (regionIndex * this.config.REGION_SIZE)
435
+ );
436
+
437
+ // Read region data from file (for verification) or SharedArrayBuffer (for update)
438
+ let regionData;
439
+ if (fileOffset) {
440
+ const buffer = Buffer.alloc(regionSize);
441
+ await this.fileHandle.read(buffer, 0, regionSize, fileOffset);
442
+ regionData = new Uint8Array(buffer);
443
+ } else {
444
+ const regionOffset = regionIndex * this.config.REGION_SIZE;
445
+ regionData = new Uint8Array(this.sharedBuffer, regionOffset, regionSize);
446
+ }
447
+
448
+ return this.crc32(regionData);
449
+ }
450
+
451
+ /**
320
452
  * Recalculate checksums for all regions
321
- */ async recalculateAllChecksums() {
322
- this.checksumTable.clear();
323
- const checksumPromises = Array.from({
324
- length: this.regionCount
325
- }, (_, i)=>this.calculateRegionChecksum(i, null));
326
- const checksums = await Promise.all(checksumPromises);
327
- // Update checksum table
328
- checksums.forEach((checksum, index)=>{
329
- this.checksumTable.set(index, checksum);
330
- });
331
- // Write entire checksum table to file
332
- const checksumTableOffset = Number((await this.readFileHeader()).checksumTable);
333
- const checksumBuffer = Buffer.alloc(this.regionCount * 4);
334
- const checksumView = new DataView(checksumBuffer.buffer);
335
- checksums.forEach((checksum, index)=>{
336
- checksumView.setUint32(index * 4, checksum, true);
337
- });
338
- await this.fileHandle.write(checksumBuffer, 0, checksumBuffer.length, checksumTableOffset);
339
- }
340
- /**
453
+ */
454
+ async recalculateAllChecksums() {
455
+ this.checksumTable.clear();
456
+
457
+ const checksumPromises = Array.from({ length: this.regionCount }, (_, i) =>
458
+ this.calculateRegionChecksum(i, null)
459
+ );
460
+
461
+ const checksums = await Promise.all(checksumPromises);
462
+
463
+ // Update checksum table
464
+ checksums.forEach((checksum, index) => {
465
+ this.checksumTable.set(index, checksum);
466
+ });
467
+
468
+ // Write entire checksum table to file
469
+ const checksumTableOffset = Number(
470
+ (await this.readFileHeader()).checksumTable
471
+ );
472
+
473
+ const checksumBuffer = Buffer.alloc(this.regionCount * 4);
474
+ const checksumView = new DataView(checksumBuffer.buffer);
475
+
476
+ checksums.forEach((checksum, index) => {
477
+ checksumView.setUint32(index * 4, checksum, true);
478
+ });
479
+
480
+ await this.fileHandle.write(
481
+ checksumBuffer, 0, checksumBuffer.length, checksumTableOffset
482
+ );
483
+ }
484
+
485
+ /**
341
486
  * Update backup header with latest metadata
342
- */ async updateBackupHeader(isFullBackup = false) {
343
- const headerBuffer = Buffer.alloc(64); // Partial header update
344
- const headerView = new DataView(headerBuffer.buffer);
345
- const now = BigInt(Date.now());
346
- headerView.setUint32(0, this.dirtyRegions.size, true); // dirty regions
347
- headerView.setBigUint64(8, now, true); // last checkpoint
348
- if (isFullBackup) {
349
- headerView.setBigUint64(16, now, true); // last full backup
350
- }
351
- await this.fileHandle.write(headerBuffer, 0, isFullBackup ? 24 : 16, FILE_HEADER_LAYOUT.dirtyRegions);
352
- }
353
- /**
487
+ */
488
+ async updateBackupHeader(isFullBackup = false) {
489
+ const headerBuffer = Buffer.alloc(64); // Partial header update
490
+ const headerView = new DataView(headerBuffer.buffer);
491
+
492
+ const now = BigInt(Date.now());
493
+ headerView.setUint32(0, this.dirtyRegions.size, true); // dirty regions
494
+ headerView.setBigUint64(8, now, true); // last checkpoint
495
+
496
+ if (isFullBackup) {
497
+ headerView.setBigUint64(16, now, true); // last full backup
498
+ }
499
+
500
+ await this.fileHandle.write(
501
+ headerBuffer, 0, isFullBackup ? 24 : 16,
502
+ FILE_HEADER_LAYOUT.dirtyRegions
503
+ );
504
+ }
505
+
506
+ /**
354
507
  * Read file header for metadata
355
- */ async readFileHeader() {
356
- const headerBuffer = Buffer.alloc(this.config.HEADER_SIZE);
357
- await this.fileHandle.read(headerBuffer, 0, this.config.HEADER_SIZE, 0);
358
- const headerView = new DataView(headerBuffer.buffer);
359
- return {
360
- magic: headerView.getUint32(FILE_HEADER_LAYOUT.magic, true),
361
- version: headerView.getUint32(FILE_HEADER_LAYOUT.version, true),
362
- fileSize: headerView.getBigUint64(FILE_HEADER_LAYOUT.fileSize, true),
363
- dataSize: headerView.getBigUint64(FILE_HEADER_LAYOUT.dataSize, true),
364
- regionCount: headerView.getUint32(FILE_HEADER_LAYOUT.regionCount, true),
365
- dirtyRegions: headerView.getUint32(FILE_HEADER_LAYOUT.dirtyRegions, true),
366
- lastCheckpoint: headerView.getBigUint64(FILE_HEADER_LAYOUT.lastCheckpoint, true),
367
- lastFullBackup: headerView.getBigUint64(FILE_HEADER_LAYOUT.lastFullBackup, true),
368
- checksumTable: headerView.getBigUint64(FILE_HEADER_LAYOUT.checksumTable, true),
369
- metadataOffset: headerView.getBigUint64(FILE_HEADER_LAYOUT.metadataOffset, true)
370
- };
371
- }
372
- /**
508
+ */
509
+ async readFileHeader() {
510
+ const headerBuffer = Buffer.alloc(this.config.HEADER_SIZE);
511
+ await this.fileHandle.read(headerBuffer, 0, this.config.HEADER_SIZE, 0);
512
+
513
+ const headerView = new DataView(headerBuffer.buffer);
514
+
515
+ return {
516
+ magic: headerView.getUint32(FILE_HEADER_LAYOUT.magic, true),
517
+ version: headerView.getUint32(FILE_HEADER_LAYOUT.version, true),
518
+ fileSize: headerView.getBigUint64(FILE_HEADER_LAYOUT.fileSize, true),
519
+ dataSize: headerView.getBigUint64(FILE_HEADER_LAYOUT.dataSize, true),
520
+ regionCount: headerView.getUint32(FILE_HEADER_LAYOUT.regionCount, true),
521
+ dirtyRegions: headerView.getUint32(FILE_HEADER_LAYOUT.dirtyRegions, true),
522
+ lastCheckpoint: headerView.getBigUint64(FILE_HEADER_LAYOUT.lastCheckpoint, true),
523
+ lastFullBackup: headerView.getBigUint64(FILE_HEADER_LAYOUT.lastFullBackup, true),
524
+ checksumTable: headerView.getBigUint64(FILE_HEADER_LAYOUT.checksumTable, true),
525
+ metadataOffset: headerView.getBigUint64(FILE_HEADER_LAYOUT.metadataOffset, true)
526
+ };
527
+ }
528
+
529
+ /**
373
530
  * Restore shared buffer from backup file
374
- */ async restoreFromBackup() {
375
- if (!this.isInitialized) {
376
- await this.initialize();
377
- }
378
- const startTime = performance.now();
379
- try {
380
- // Verify file integrity before restore
381
- await this.verifyFileIntegrity();
382
- // Read data from file to shared buffer
383
- const dataBuffer = Buffer.alloc(this.sharedBuffer.byteLength);
384
- await this.fileHandle.read(dataBuffer, 0, dataBuffer.length, this.config.HEADER_SIZE);
385
- // Copy to SharedArrayBuffer
386
- const bufferView = new Uint8Array(this.sharedBuffer);
387
- bufferView.set(dataBuffer);
388
- // Clear dirty regions after successful restore
389
- this.dirtyRegions.clear();
390
- const duration = performance.now() - startTime;
391
- console.log(`Restore completed in ${duration.toFixed(2)}ms`);
392
- return {
393
- success: true,
394
- duration,
395
- restoredBytes: dataBuffer.length
396
- };
397
- } catch (error) {
398
- console.error('Restore failed:', error);
399
- return {
400
- success: false,
401
- error: error.message,
402
- duration: 0
403
- };
404
- }
405
- }
406
- /**
531
+ */
532
+ async restoreFromBackup() {
533
+ if (!this.isInitialized) {
534
+ await this.initialize();
535
+ }
536
+
537
+ const startTime = performance.now();
538
+
539
+ try {
540
+ // Verify file integrity before restore
541
+ await this.verifyFileIntegrity();
542
+
543
+ // Read data from file to shared buffer
544
+ const dataBuffer = Buffer.alloc(this.sharedBuffer.byteLength);
545
+ await this.fileHandle.read(
546
+ dataBuffer, 0, dataBuffer.length, this.config.HEADER_SIZE
547
+ );
548
+
549
+ // Copy to SharedArrayBuffer
550
+ const bufferView = new Uint8Array(this.sharedBuffer);
551
+ bufferView.set(dataBuffer);
552
+
553
+ // Clear dirty regions after successful restore
554
+ this.dirtyRegions.clear();
555
+
556
+ const duration = performance.now() - startTime;
557
+ console.log(`Restore completed in ${duration.toFixed(2)}ms`);
558
+
559
+ return { success: true, duration, restoredBytes: dataBuffer.length };
560
+ } catch (error) {
561
+ console.error('Restore failed:', error);
562
+ return { success: false, error: error.message, duration: 0 };
563
+ }
564
+ }
565
+
566
+ /**
407
567
  * Mark region as dirty for next backup
408
- */ markRegionDirty(offset) {
409
- const regionIndex = Math.floor(offset / this.config.REGION_SIZE);
410
- this.dirtyRegions.add(regionIndex);
411
- }
412
- /**
568
+ */
569
+ markRegionDirty(offset) {
570
+ const regionIndex = Math.floor(offset / this.config.REGION_SIZE);
571
+ this.dirtyRegions.add(regionIndex);
572
+ }
573
+
574
+ /**
413
575
  * Start background persistence operations
414
- */ startBackgroundOperations() {
415
- // Periodic checkpoints
416
- this.checkpointTimer = setInterval(async ()=>{
417
- if (this.dirtyRegions.size > 0) {
418
- try {
419
- await this.incrementalBackup();
420
- } catch (error) {
421
- console.error('Background checkpoint failed:', error);
422
- }
423
- }
424
- }, this.config.CHECKPOINT_INTERVAL);
425
- // Periodic full backups
426
- setInterval(async ()=>{
427
- try {
428
- await this.fullBackup();
429
- console.log('Scheduled full backup completed');
430
- } catch (error) {
431
- console.error('Scheduled full backup failed:', error);
432
- }
433
- }, this.config.FULL_BACKUP_INTERVAL * 1000);
434
- }
435
- /**
576
+ */
577
+ startBackgroundOperations() {
578
+ // Periodic checkpoints
579
+ this.checkpointTimer = setInterval(async () => {
580
+ if (this.dirtyRegions.size > 0) {
581
+ try {
582
+ await this.incrementalBackup();
583
+ } catch (error) {
584
+ console.error('Background checkpoint failed:', error);
585
+ }
586
+ }
587
+ }, this.config.CHECKPOINT_INTERVAL);
588
+
589
+ // Periodic full backups
590
+ setInterval(async () => {
591
+ try {
592
+ await this.fullBackup();
593
+ console.log('Scheduled full backup completed');
594
+ } catch (error) {
595
+ console.error('Scheduled full backup failed:', error);
596
+ }
597
+ }, this.config.FULL_BACKUP_INTERVAL * 1000);
598
+ }
599
+
600
+ /**
436
601
  * Stop background operations
437
- */ stopBackgroundOperations() {
438
- if (this.checkpointTimer) {
439
- clearInterval(this.checkpointTimer);
440
- this.checkpointTimer = null;
441
- }
442
- }
443
- /**
602
+ */
603
+ stopBackgroundOperations() {
604
+ if (this.checkpointTimer) {
605
+ clearInterval(this.checkpointTimer);
606
+ this.checkpointTimer = null;
607
+ }
608
+ }
609
+
610
+ /**
444
611
  * Graceful shutdown with final backup
445
- */ async shutdown() {
446
- console.log('Shutting down persistence layer...');
447
- // Stop background operations
448
- this.stopBackgroundOperations();
449
- // Perform final incremental backup
450
- if (this.dirtyRegions.size > 0) {
451
- await this.incrementalBackup();
452
- }
453
- // Close file handle
454
- if (this.fileHandle) {
455
- await this.fileHandle.close();
456
- this.fileHandle = null;
457
- }
458
- console.log('Persistence shutdown completed');
459
- }
460
- /**
612
+ */
613
+ async shutdown() {
614
+ console.log('Shutting down persistence layer...');
615
+
616
+ // Stop background operations
617
+ this.stopBackgroundOperations();
618
+
619
+ // Perform final incremental backup
620
+ if (this.dirtyRegions.size > 0) {
621
+ await this.incrementalBackup();
622
+ }
623
+
624
+ // Close file handle
625
+ if (this.fileHandle) {
626
+ await this.fileHandle.close();
627
+ this.fileHandle = null;
628
+ }
629
+
630
+ console.log('Persistence shutdown completed');
631
+ }
632
+
633
+ /**
461
634
  * Update backup statistics
462
- */ updateBackupStats(type, regionCount, duration) {
463
- this.stats.totalBackups++;
464
- this.stats.regionsSync += regionCount;
465
- this.stats.totalSyncTime += duration;
466
- this.stats.avgSyncTime = this.stats.totalSyncTime / this.stats.totalBackups;
467
- this.stats.lastBackupTime = Date.now();
468
- if (type === 'incremental') {
469
- this.stats.incrementalBackups++;
470
- } else if (type === 'full') {
471
- this.stats.fullBackups++;
472
- }
473
- }
474
- /**
635
+ */
636
+ updateBackupStats(type, regionCount, duration) {
637
+ this.stats.totalBackups++;
638
+ this.stats.regionsSync += regionCount;
639
+ this.stats.totalSyncTime += duration;
640
+ this.stats.avgSyncTime = this.stats.totalSyncTime / this.stats.totalBackups;
641
+ this.stats.lastBackupTime = Date.now();
642
+
643
+ if (type === 'incremental') {
644
+ this.stats.incrementalBackups++;
645
+ } else if (type === 'full') {
646
+ this.stats.fullBackups++;
647
+ }
648
+ }
649
+
650
+ /**
475
651
  * Get persistence statistics
476
- */ getStats() {
477
- return {
478
- ...this.stats,
479
- dirtyRegions: this.dirtyRegions.size,
480
- totalRegions: this.regionCount,
481
- fileSize: this.fileSize,
482
- isInitialized: this.isInitialized,
483
- checksumTableSize: this.checksumTable.size
484
- };
485
- }
486
- /**
652
+ */
653
+ getStats() {
654
+ return {
655
+ ...this.stats,
656
+ dirtyRegions: this.dirtyRegions.size,
657
+ totalRegions: this.regionCount,
658
+ fileSize: this.fileSize,
659
+ isInitialized: this.isInitialized,
660
+ checksumTableSize: this.checksumTable.size
661
+ };
662
+ }
663
+
664
+ /**
487
665
  * CRC32 checksum implementation
488
- */ crc32(data) {
489
- const crcTable = this.getCrcTable();
490
- let crc = 0xFFFFFFFF;
491
- for(let i = 0; i < data.length; i++){
492
- crc = crcTable[(crc ^ data[i]) & 0xFF] ^ crc >>> 8;
493
- }
494
- return (crc ^ 0xFFFFFFFF) >>> 0;
495
- }
496
- /**
666
+ */
667
+ crc32(data) {
668
+ const crcTable = this.getCrcTable();
669
+ let crc = 0xFFFFFFFF;
670
+
671
+ for (let i = 0; i < data.length; i++) {
672
+ crc = crcTable[(crc ^ data[i]) & 0xFF] ^ (crc >>> 8);
673
+ }
674
+
675
+ return (crc ^ 0xFFFFFFFF) >>> 0;
676
+ }
677
+
678
+ /**
497
679
  * Generate CRC32 lookup table
498
- */ getCrcTable() {
499
- if (!this._crcTable) {
500
- this._crcTable = new Array(256);
501
- for(let i = 0; i < 256; i++){
502
- let crc = i;
503
- for(let j = 0; j < 8; j++){
504
- crc = crc & 1 ? 0xEDB88320 ^ crc >>> 1 : crc >>> 1;
505
- }
506
- this._crcTable[i] = crc;
507
- }
508
- }
509
- return this._crcTable;
510
- }
511
- constructor(sharedBuffer, backupPath, config = PERSISTENCE_CONFIG){
512
- this.sharedBuffer = sharedBuffer;
513
- this.backupPath = backupPath;
514
- this.config = config;
515
- // Memory region tracking
516
- this.regionCount = Math.ceil(sharedBuffer.byteLength / config.REGION_SIZE);
517
- this.dirtyRegions = new Set();
518
- this.regionChecksums = new Map();
519
- // File handles and metadata
520
- this.fileHandle = null;
521
- this.fileSize = 0;
522
- this.isInitialized = false;
523
- // Performance metrics
524
- this.stats = {
525
- totalBackups: 0,
526
- incrementalBackups: 0,
527
- fullBackups: 0,
528
- totalSyncTime: 0,
529
- avgSyncTime: 0,
530
- regionsSync: 0,
531
- checksumFailures: 0,
532
- lastBackupTime: 0
533
- };
534
- // Background operations
535
- this.backgroundSync = null;
536
- this.checkpointTimer = null;
537
- // Integrity verification
538
- this.checksumTable = new Map();
539
- }
540
- }
680
+ */
681
+ getCrcTable() {
682
+ if (!this._crcTable) {
683
+ this._crcTable = new Array(256);
684
+
685
+ for (let i = 0; i < 256; i++) {
686
+ let crc = i;
687
+ for (let j = 0; j < 8; j++) {
688
+ crc = (crc & 1) ? (0xEDB88320 ^ (crc >>> 1)) : (crc >>> 1);
689
+ }
690
+ this._crcTable[i] = crc;
691
+ }
692
+ }
693
+
694
+ return this._crcTable;
695
+ }
696
+ }
697
+
541
698
  /**
542
699
  * Backup strategy manager for coordinating different backup approaches
543
- */ export class BackupStrategyManager {
544
- /**
700
+ */
701
+ export class BackupStrategyManager {
702
+ constructor(persistence) {
703
+ this.persistence = persistence;
704
+ this.strategies = new Map();
705
+ this.currentStrategy = 'adaptive';
706
+
707
+ this.initializeStrategies();
708
+ }
709
+
710
+ /**
545
711
  * Initialize available backup strategies
546
- */ initializeStrategies() {
547
- // Aggressive strategy - frequent incremental backups
548
- this.strategies.set('aggressive', {
549
- incrementalInterval: 1000,
550
- fullBackupInterval: 1800,
551
- dirtyThreshold: 0.05,
552
- priority: 'consistency'
553
- });
554
- // Balanced strategy - moderate backup frequency
555
- this.strategies.set('balanced', {
556
- incrementalInterval: 5000,
557
- fullBackupInterval: 3600,
558
- dirtyThreshold: 0.1,
559
- priority: 'balance'
560
- });
561
- // Performance strategy - minimize I/O impact
562
- this.strategies.set('performance', {
563
- incrementalInterval: 15000,
564
- fullBackupInterval: 7200,
565
- dirtyThreshold: 0.2,
566
- priority: 'performance'
567
- });
568
- // Adaptive strategy - adjust based on workload
569
- this.strategies.set('adaptive', {
570
- incrementalInterval: 5000,
571
- fullBackupInterval: 3600,
572
- dirtyThreshold: 0.1,
573
- priority: 'adaptive'
574
- });
575
- }
576
- /**
712
+ */
713
+ initializeStrategies() {
714
+ // Aggressive strategy - frequent incremental backups
715
+ this.strategies.set('aggressive', {
716
+ incrementalInterval: 1000, // 1 second
717
+ fullBackupInterval: 1800, // 30 minutes
718
+ dirtyThreshold: 0.05, // 5% changes
719
+ priority: 'consistency'
720
+ });
721
+
722
+ // Balanced strategy - moderate backup frequency
723
+ this.strategies.set('balanced', {
724
+ incrementalInterval: 5000, // 5 seconds
725
+ fullBackupInterval: 3600, // 1 hour
726
+ dirtyThreshold: 0.1, // 10% changes
727
+ priority: 'balance'
728
+ });
729
+
730
+ // Performance strategy - minimize I/O impact
731
+ this.strategies.set('performance', {
732
+ incrementalInterval: 15000, // 15 seconds
733
+ fullBackupInterval: 7200, // 2 hours
734
+ dirtyThreshold: 0.2, // 20% changes
735
+ priority: 'performance'
736
+ });
737
+
738
+ // Adaptive strategy - adjust based on workload
739
+ this.strategies.set('adaptive', {
740
+ incrementalInterval: 5000, // Base: 5 seconds
741
+ fullBackupInterval: 3600, // Base: 1 hour
742
+ dirtyThreshold: 0.1, // Base: 10% changes
743
+ priority: 'adaptive'
744
+ });
745
+ }
746
+
747
+ /**
577
748
  * Select optimal backup strategy based on workload characteristics
578
- */ selectStrategy(workloadMetrics) {
579
- const { writeRate, dirtyRatio, memoryPressure, ioLatency// Average I/O latency
580
- } = workloadMetrics;
581
- let selectedStrategy = 'balanced';
582
- if (writeRate > 1000 && dirtyRatio > 0.3) {
583
- // High write rate with lots of changes - use aggressive
584
- selectedStrategy = 'aggressive';
585
- } else if (writeRate < 100 && memoryPressure < 0.5) {
586
- // Low write rate with plenty of memory - use performance
587
- selectedStrategy = 'performance';
588
- } else if (ioLatency > 50) {
589
- // High I/O latency - minimize backup frequency
590
- selectedStrategy = 'performance';
591
- } else {
592
- // Use adaptive strategy to adjust dynamically
593
- selectedStrategy = 'adaptive';
594
- }
595
- if (selectedStrategy !== this.currentStrategy) {
596
- this.switchStrategy(selectedStrategy);
597
- }
598
- return selectedStrategy;
599
- }
600
- /**
749
+ */
750
+ selectStrategy(workloadMetrics) {
751
+ const {
752
+ writeRate, // Writes per second
753
+ dirtyRatio, // Percentage of dirty regions
754
+ memoryPressure, // Memory utilization
755
+ ioLatency // Average I/O latency
756
+ } = workloadMetrics;
757
+
758
+ let selectedStrategy = 'balanced';
759
+
760
+ if (writeRate > 1000 && dirtyRatio > 0.3) {
761
+ // High write rate with lots of changes - use aggressive
762
+ selectedStrategy = 'aggressive';
763
+ } else if (writeRate < 100 && memoryPressure < 0.5) {
764
+ // Low write rate with plenty of memory - use performance
765
+ selectedStrategy = 'performance';
766
+ } else if (ioLatency > 50) {
767
+ // High I/O latency - minimize backup frequency
768
+ selectedStrategy = 'performance';
769
+ } else {
770
+ // Use adaptive strategy to adjust dynamically
771
+ selectedStrategy = 'adaptive';
772
+ }
773
+
774
+ if (selectedStrategy !== this.currentStrategy) {
775
+ this.switchStrategy(selectedStrategy);
776
+ }
777
+
778
+ return selectedStrategy;
779
+ }
780
+
781
+ /**
601
782
  * Switch to different backup strategy
602
- */ switchStrategy(strategyName) {
603
- if (!this.strategies.has(strategyName)) {
604
- throw new Error(`Unknown backup strategy: ${strategyName}`);
605
- }
606
- console.log(`Switching backup strategy: ${this.currentStrategy} -> ${strategyName}`);
607
- this.currentStrategy = strategyName;
608
- // Reconfigure persistence based on new strategy
609
- const strategy = this.strategies.get(strategyName);
610
- this.persistence.config.CHECKPOINT_INTERVAL = strategy.incrementalInterval;
611
- this.persistence.config.FULL_BACKUP_INTERVAL = strategy.fullBackupInterval;
612
- this.persistence.config.INCREMENTAL_THRESHOLD = strategy.dirtyThreshold;
613
- }
614
- /**
783
+ */
784
+ switchStrategy(strategyName) {
785
+ if (!this.strategies.has(strategyName)) {
786
+ throw new Error(`Unknown backup strategy: ${strategyName}`);
787
+ }
788
+
789
+ console.log(`Switching backup strategy: ${this.currentStrategy} -> ${strategyName}`);
790
+ this.currentStrategy = strategyName;
791
+
792
+ // Reconfigure persistence based on new strategy
793
+ const strategy = this.strategies.get(strategyName);
794
+ this.persistence.config.CHECKPOINT_INTERVAL = strategy.incrementalInterval;
795
+ this.persistence.config.FULL_BACKUP_INTERVAL = strategy.fullBackupInterval;
796
+ this.persistence.config.INCREMENTAL_THRESHOLD = strategy.dirtyThreshold;
797
+ }
798
+
799
+ /**
615
800
  * Get current strategy configuration
616
- */ getCurrentStrategy() {
617
- return {
618
- name: this.currentStrategy,
619
- config: this.strategies.get(this.currentStrategy)
620
- };
621
- }
622
- constructor(persistence){
623
- this.persistence = persistence;
624
- this.strategies = new Map();
625
- this.currentStrategy = 'adaptive';
626
- this.initializeStrategies();
627
- }
628
- }
629
- export { PERSISTENCE_CONFIG, FILE_HEADER_LAYOUT };
801
+ */
802
+ getCurrentStrategy() {
803
+ return {
804
+ name: this.currentStrategy,
805
+ config: this.strategies.get(this.currentStrategy)
806
+ };
807
+ }
808
+ }
809
+
810
+ export { PERSISTENCE_CONFIG, FILE_HEADER_LAYOUT };