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.
- package/dist/src/cli/commands/guidance.js +668 -487
- package/dist/src/cli/commands/index-validate.js +29 -18
- package/dist/src/cli/commands/mcp-troubleshoot.js +282 -230
- package/dist/src/cli/commands/neural-goal-init.js +125 -92
- package/dist/src/cli/commands/swarm-exec.js +393 -317
- package/dist/src/cli/commands/validate-framework.js +1100 -983
- package/dist/src/cli/commands/validate.js +223 -144
- package/dist/src/cli/main.js +1 -1
- package/dist/src/cli/simple-commands/__tests__/agent.test.js +277 -265
- package/dist/src/cli/simple-commands/__tests__/memory.test.js +7 -6
- package/dist/src/cli/simple-commands/__tests__/swarm.test.js +356 -373
- package/dist/src/cli/simple-commands/__tests__/task.test.js +7 -6
- package/dist/src/cli/simple-commands/agent.js +193 -157
- package/dist/src/cli/simple-commands/analysis.js +446 -336
- package/dist/src/cli/simple-commands/automation-executor.js +1339 -1095
- package/dist/src/cli/simple-commands/automation.js +469 -481
- package/dist/src/cli/simple-commands/batch-manager.js +313 -261
- package/dist/src/cli/simple-commands/claude-telemetry.js +267 -241
- package/dist/src/cli/simple-commands/claude-track.js +90 -68
- package/dist/src/cli/simple-commands/concurrent-display.js +320 -266
- package/dist/src/cli/simple-commands/config.js +290 -245
- package/dist/src/cli/simple-commands/coordination.js +234 -182
- package/dist/src/cli/simple-commands/enhanced-ui-views.js +615 -812
- package/dist/src/cli/simple-commands/enhanced-webui-complete.js +981 -922
- package/dist/src/cli/simple-commands/fix-hook-variables.js +294 -274
- package/dist/src/cli/simple-commands/github/gh-coordinator.js +457 -378
- package/dist/src/cli/simple-commands/github/github-api.js +574 -535
- package/dist/src/cli/simple-commands/github/init.js +303 -276
- package/dist/src/cli/simple-commands/github.js +247 -222
- package/dist/src/cli/simple-commands/goal.js +63 -51
- package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +278 -208
- package/dist/src/cli/simple-commands/hive-mind/communication.js +696 -601
- package/dist/src/cli/simple-commands/hive-mind/core.js +979 -907
- package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +655 -406
- package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1245 -1125
- package/dist/src/cli/simple-commands/hive-mind/memory.js +1090 -854
- package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +574 -459
- package/dist/src/cli/simple-commands/hive-mind/performance-test.js +347 -263
- package/dist/src/cli/simple-commands/hive-mind/queen.js +768 -727
- package/dist/src/cli/simple-commands/hive-mind/session-manager.js +1049 -745
- package/dist/src/cli/simple-commands/hive-mind-optimize.js +283 -227
- package/dist/src/cli/simple-commands/hive-mind-wizard.js +217 -174
- package/dist/src/cli/simple-commands/hive-mind.js +2282 -1841
- package/dist/src/cli/simple-commands/hive.js +79 -90
- package/dist/src/cli/simple-commands/hook-safety.js +521 -431
- package/dist/src/cli/simple-commands/hooks/session-start-soul.js +254 -203
- package/dist/src/cli/simple-commands/hooks.js +1204 -1064
- package/dist/src/cli/simple-commands/init/agent-copier.js +319 -294
- package/dist/src/cli/simple-commands/init/batch-init.js +562 -496
- package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +19 -13
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +19 -13
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +88 -61
- package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +150 -125
- package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +49 -42
- package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +61 -43
- package/dist/src/cli/simple-commands/init/copy-revised-templates.js +147 -141
- package/dist/src/cli/simple-commands/init/executable-wrapper.js +44 -31
- package/dist/src/cli/simple-commands/init/gitignore-updater.js +90 -64
- package/dist/src/cli/simple-commands/init/help.js +107 -104
- package/dist/src/cli/simple-commands/init/hive-mind-init.js +528 -509
- package/dist/src/cli/simple-commands/init/index.js +1759 -1510
- package/dist/src/cli/simple-commands/init/performance-monitor.js +317 -234
- package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +504 -441
- package/dist/src/cli/simple-commands/init/rollback/index.js +364 -289
- package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +728 -652
- package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +481 -416
- package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +448 -369
- package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +2 -1
- package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +99 -122
- package/dist/src/cli/simple-commands/init/sparc/workflows.js +37 -32
- package/dist/src/cli/simple-commands/init/sparc-structure.js +62 -55
- package/dist/src/cli/simple-commands/init/template-copier.js +533 -421
- package/dist/src/cli/simple-commands/init/templates/coordination-md.js +6 -3
- package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +318 -344
- package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +218 -173
- package/dist/src/cli/simple-commands/init/templates/github-safe.js +75 -65
- package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +6 -3
- package/dist/src/cli/simple-commands/init/templates/readme-files.js +4 -2
- package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +230 -187
- package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +80 -53
- package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +85 -101
- package/dist/src/cli/simple-commands/init/validation/config-validator.js +330 -283
- package/dist/src/cli/simple-commands/init/validation/health-checker.js +561 -495
- package/dist/src/cli/simple-commands/init/validation/index.js +358 -302
- package/dist/src/cli/simple-commands/init/validation/mode-validator.js +359 -308
- package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +366 -389
- package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +268 -270
- package/dist/src/cli/simple-commands/init/validation/test-runner.js +447 -427
- package/dist/src/cli/simple-commands/init.js +2 -1
- package/dist/src/cli/simple-commands/mcp-health.js +158 -131
- package/dist/src/cli/simple-commands/mcp-integration-layer.js +634 -533
- package/dist/src/cli/simple-commands/mcp.js +400 -345
- package/dist/src/cli/simple-commands/memory-consolidation.js +537 -426
- package/dist/src/cli/simple-commands/memory.js +311 -247
- package/dist/src/cli/simple-commands/migrate-hooks.js +46 -39
- package/dist/src/cli/simple-commands/monitor.js +363 -294
- package/dist/src/cli/simple-commands/neural.js +65 -51
- package/dist/src/cli/simple-commands/pair-autofix-only.js +662 -538
- package/dist/src/cli/simple-commands/pair-basic.js +656 -528
- package/dist/src/cli/simple-commands/pair-old.js +543 -430
- package/dist/src/cli/simple-commands/pair-working.js +751 -615
- package/dist/src/cli/simple-commands/pair.js +751 -615
- package/dist/src/cli/simple-commands/performance-hooks.js +111 -83
- package/dist/src/cli/simple-commands/performance-metrics.js +433 -348
- package/dist/src/cli/simple-commands/process-ui-enhanced.js +787 -708
- package/dist/src/cli/simple-commands/process-ui.js +254 -230
- package/dist/src/cli/simple-commands/realtime-update-system.js +611 -525
- package/dist/src/cli/simple-commands/sparc/architecture.js +1530 -1704
- package/dist/src/cli/simple-commands/sparc/commands.js +516 -438
- package/dist/src/cli/simple-commands/sparc/completion.js +1481 -1224
- package/dist/src/cli/simple-commands/sparc/coordinator.js +978 -913
- package/dist/src/cli/simple-commands/sparc/index.js +298 -241
- package/dist/src/cli/simple-commands/sparc/phase-base.js +390 -314
- package/dist/src/cli/simple-commands/sparc/pseudocode.js +869 -965
- package/dist/src/cli/simple-commands/sparc/refinement.js +1273 -980
- package/dist/src/cli/simple-commands/sparc/specification.js +645 -559
- package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/index.js +55 -47
- package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/swarm.js +87 -101
- package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
- package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
- package/dist/src/cli/simple-commands/sparc.js +493 -465
- package/dist/src/cli/simple-commands/start-ui.js +132 -108
- package/dist/src/cli/simple-commands/start-wrapper.js +268 -240
- package/dist/src/cli/simple-commands/start.js +1 -1
- package/dist/src/cli/simple-commands/status.js +275 -254
- package/dist/src/cli/simple-commands/stream-chain-clean.js +171 -128
- package/dist/src/cli/simple-commands/stream-chain-fixed.js +82 -61
- package/dist/src/cli/simple-commands/stream-chain-real.js +331 -267
- package/dist/src/cli/simple-commands/stream-chain-working.js +263 -211
- package/dist/src/cli/simple-commands/stream-chain.js +318 -260
- package/dist/src/cli/simple-commands/stream-processor.js +315 -290
- package/dist/src/cli/simple-commands/swarm-executor.js +222 -189
- package/dist/src/cli/simple-commands/swarm-metrics-integration.js +300 -208
- package/dist/src/cli/simple-commands/swarm-ui.js +703 -623
- package/dist/src/cli/simple-commands/swarm-webui-integration.js +286 -258
- package/dist/src/cli/simple-commands/swarm.js +1082 -887
- package/dist/src/cli/simple-commands/task.js +206 -161
- package/dist/src/cli/simple-commands/timestamp-fix.js +89 -59
- package/dist/src/cli/simple-commands/token-tracker.js +316 -258
- package/dist/src/cli/simple-commands/tool-execution-framework.js +519 -433
- package/dist/src/cli/simple-commands/train-and-stream.js +331 -275
- package/dist/src/cli/simple-commands/training-pipeline.js +725 -619
- package/dist/src/cli/simple-commands/training.js +227 -170
- package/dist/src/cli/simple-commands/verification-hooks.js +284 -261
- package/dist/src/cli/simple-commands/verification-integration.js +417 -389
- package/dist/src/cli/simple-commands/verification-training-integration.js +606 -486
- package/dist/src/cli/simple-commands/verification.js +513 -493
- package/dist/src/cli/simple-commands/web-server.js +836 -766
- package/dist/src/cli/simple-commands/webui-validator.js +124 -106
- package/dist/src/coordination/byzantine-memory-channels.js +25 -1
- package/dist/src/coordination/event-bus/demo-wasm-integration.js +251 -212
- package/dist/src/coordination/event-bus/qe-event-bus.js +748 -608
- package/dist/src/coordination/event-bus/qe-event-bus.test.js +454 -379
- package/dist/src/coordination/iteration-tracker.js +454 -363
- package/dist/src/index.js +384 -35
- package/dist/src/mcp/DEPRECATED.js +60 -46
- package/dist/src/mcp/fixes/mcp-error-fixes.js +134 -115
- package/dist/src/mcp/implementations/agent-tracker.js +128 -114
- package/dist/src/mcp/implementations/daa-tools.js +350 -292
- package/dist/src/mcp/implementations/workflow-tools.js +361 -329
- package/dist/src/mcp/mcp-config-manager.js +1331 -1183
- package/dist/src/mcp/mcp-server-novice-simplified.js +17 -11
- package/dist/src/mcp/mcp-server-novice.js +17 -11
- package/dist/src/mcp/mcp-server-sdk.js +17 -11
- package/dist/src/mcp/mcp-server.js +1484 -1620
- package/dist/src/mcp/ruv-swarm-wrapper.js +239 -209
- package/dist/src/memory/advanced-serializer.js +589 -609
- package/dist/src/memory/enhanced-examples.js +305 -220
- package/dist/src/memory/enhanced-memory.js +336 -295
- package/dist/src/memory/enhanced-session-serializer.js +492 -408
- package/dist/src/memory/fallback-memory-system.js +1021 -900
- package/dist/src/memory/fallback-store.js +131 -93
- package/dist/src/memory/high-performance-serialization.js +730 -592
- package/dist/src/memory/in-memory-store.js +213 -161
- package/dist/src/memory/index.js +157 -123
- package/dist/src/memory/lock-free-structures.js +764 -578
- package/dist/src/memory/memory-mapped-persistence.js +766 -585
- package/dist/src/memory/memory-pressure-manager.js +707 -569
- package/dist/src/memory/migration.js +445 -358
- package/dist/src/memory/shared-memory.js +768 -641
- package/dist/src/memory/sqlite-store.js +325 -245
- package/dist/src/memory/sqlite-wrapper.js +151 -122
- package/dist/src/memory/swarm-memory.js +603 -470
- package/dist/src/memory/test-example.js +134 -126
- package/dist/src/memory/ultra-fast-memory-store.js +821 -622
- package/dist/src/memory/unified-memory-manager.js +437 -356
- package/dist/src/swarm/CodeRefactoringSwarm.js +952 -777
- package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +400 -332
- package/dist/src/utils/error-handler.js +2 -36
- package/dist/src/utils/github-cli-safe.js +64 -56
- package/dist/src/utils/github-cli-safety-wrapper.js +546 -451
- package/dist/src/utils/npx-isolated-cache.js +119 -104
- package/dist/src/utils/preference-manager.js +652 -622
- package/dist/src/utils/timezone-utils.js +105 -86
- package/dist/src/web/api/apm-routes.js +353 -0
- package/dist/src/web/api/config/api-config.js +184 -0
- package/dist/src/web/api/middleware/auth.js +203 -0
- package/dist/src/web/api/middleware/cache.js +273 -0
- package/dist/src/web/api/middleware/error-handler.js +257 -0
- package/dist/src/web/api/middleware/request-logger.js +215 -0
- package/dist/src/web/api/middleware/validation.js +323 -0
- package/dist/src/web/api/routes/events.js +463 -0
- package/dist/src/web/api/routes/hierarchy.js +300 -0
- package/dist/src/web/api/routes/index.js +12 -0
- package/dist/src/web/api/routes/metrics.js +559 -0
- package/dist/src/web/api/routes/parallel-status.js +359 -0
- package/dist/src/web/api/routes/status.js +448 -0
- package/dist/src/web/api/server.js +462 -0
- package/dist/src/web/dashboard/hooks/useWebSocket.js +383 -0
- package/dist/src/web/dashboard/index.js +85 -0
- package/dist/src/web/dashboard/realtime/CustomSyncManager.js +439 -0
- package/dist/src/web/dashboard/realtime/NativeWebSocketManager.js +323 -0
- package/dist/src/web/dashboard/realtime/PerformanceBenchmark.js +527 -0
- package/dist/src/web/dashboard/realtime/RealtimeCommunicationManager.js +474 -0
- package/dist/src/web/dashboard/realtime/RealtimeServer.js +666 -0
- package/dist/src/web/dashboard/realtime/SSEManager.js +426 -0
- package/dist/src/web/dashboard/types.js +4 -0
- package/dist/src/web/messaging/agent-status-tracker.js +453 -0
- package/dist/src/web/messaging/human-intervention-system.js +305 -0
- package/dist/src/web/messaging/message-filter.js +302 -0
- package/dist/src/web/messaging/swarm-message-router.js +324 -0
- package/dist/src/web/messaging/transparency-logger.js +421 -0
- package/dist/src/web/portal-server.js +460 -0
- package/dist/src/web/server.js +322 -0
- package/dist/src/web/websocket/apm-websocket-handler.js +453 -0
- package/dist/src/web/websocket/websocket-manager.js +780 -0
- package/package.json +5 -3
- package/dist/src/cli/minimal-main.js +0 -22
- package/dist/src/enterprise/analytics-manager.js +0 -1135
- package/dist/src/enterprise/audit-manager.js +0 -1115
- package/dist/src/enterprise/cloud-manager.js +0 -891
- package/dist/src/enterprise/deployment-manager.js +0 -966
- package/dist/src/enterprise/index.js +0 -6
- package/dist/src/enterprise/project-manager.js +0 -584
- package/dist/src/enterprise/security-manager.js +0 -991
- package/dist/src/migration/index.js +0 -92
- package/dist/src/migration/logger.js +0 -121
- package/dist/src/migration/migration-analyzer.js +0 -268
- package/dist/src/migration/migration-runner.js +0 -522
- package/dist/src/migration/migration-validator.js +0 -285
- package/dist/src/migration/progress-reporter.js +0 -150
- package/dist/src/migration/rollback-manager.js +0 -321
- package/dist/src/migration/tests/migration-system.test.js +0 -7
- package/dist/src/migration/types.js +0 -3
- package/dist/src/swarm/__tests__/integration.test.js +0 -227
- package/dist/src/swarm/__tests__/prompt-copier.test.js +0 -344
- package/dist/src/swarm/advanced-orchestrator.js +0 -1095
- package/dist/src/swarm/claude-code-interface.js +0 -961
- package/dist/src/swarm/claude-flow-executor.js +0 -229
- package/dist/src/swarm/consensus-coordinator.js +0 -475
- package/dist/src/swarm/coordinator.js +0 -2993
- package/dist/src/swarm/direct-executor.js +0 -1180
- package/dist/src/swarm/error-recovery/advanced-error-detection.js +0 -691
- package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +0 -998
- package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +0 -1197
- package/dist/src/swarm/error-recovery/recovery-monitoring.js +0 -772
- package/dist/src/swarm/error-recovery/resilience-architecture.js +0 -714
- package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +0 -1319
- package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +0 -808
- package/dist/src/swarm/executor-v2.js +0 -322
- package/dist/src/swarm/executor.js +0 -815
- package/dist/src/swarm/hive-mind-integration.js +0 -703
- package/dist/src/swarm/index.js +0 -41
- package/dist/src/swarm/json-output-aggregator.js +0 -267
- package/dist/src/swarm/large-scale-coordinator.js +0 -542
- package/dist/src/swarm/mcp-integration-wrapper.js +0 -628
- package/dist/src/swarm/memory.js +0 -1117
- package/dist/src/swarm/optimizations/__tests__/optimization.test.js +0 -348
- package/dist/src/swarm/optimizations/async-file-manager.js +0 -285
- package/dist/src/swarm/optimizations/circular-buffer.js +0 -162
- package/dist/src/swarm/optimizations/connection-pool.js +0 -244
- package/dist/src/swarm/optimizations/index.js +0 -28
- package/dist/src/swarm/optimizations/optimized-executor.js +0 -320
- package/dist/src/swarm/optimizations/ttl-map.js +0 -234
- package/dist/src/swarm/prompt-cli.js +0 -200
- package/dist/src/swarm/prompt-copier-enhanced.js +0 -202
- package/dist/src/swarm/prompt-copier.js +0 -381
- package/dist/src/swarm/prompt-manager.js +0 -295
- package/dist/src/swarm/prompt-utils.js +0 -310
- package/dist/src/swarm/result-aggregator.js +0 -718
- package/dist/src/swarm/sparc-executor.js +0 -1568
- package/dist/src/swarm/strategies/auto.js +0 -758
- package/dist/src/swarm/strategies/base.js +0 -128
- package/dist/src/swarm/strategies/research.js +0 -914
- package/dist/src/swarm/strategies/strategy-metrics-patch.js +0 -2
- package/dist/src/swarm/types.js +0 -52
- package/dist/src/swarm/workers/copy-worker.js +0 -56
- package/dist/src/validators/epic-config-schema.js +0 -214
- package/dist/src/validators/index.js +0 -10
- package/dist/src/validators/swarm-init-validator.js +0 -259
- package/dist/src/validators/todowrite-batching-validator.js +0 -215
- package/dist/src/validators/todowrite-integration.js +0 -187
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/documentSymbols/browser/documentSymbols.js +0 -23
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js +0 -57
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/copyPasteController.js +0 -401
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/defaultProviders.js +0 -181
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.js +0 -44
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController.js +0 -157
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/dropOrPasteInto/browser/edit.js +0 -71
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/editorState/browser/editorState.js +0 -112
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findController.js +0 -990
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findDecorations.js +0 -296
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findModel.js +0 -488
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findOptionsWidget.js +0 -138
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findState.js +0 -243
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/find/browser/findWidget.js +0 -1177
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/folding.js +0 -1093
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingDecorations.js +0 -133
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingModel.js +0 -538
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/folding/browser/foldingRanges.js +0 -351
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/fontZoom/browser/fontZoom.js +0 -49
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/format.js +0 -360
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formatActions.js +0 -263
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/format/browser/formattingEdit.js +0 -54
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/gotoSymbol/browser/link/clickLinkGesture.js +0 -149
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/hover/browser/contentHover.js +0 -874
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commandIds.js +0 -7
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/inlineCompletions/browser/commands.js +0 -199
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/linesOperations/browser/copyLinesCommand.js +0 -70
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/commandsQuickAccess.js +0 -26
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/quickAccess/browser/editorNavigationQuickAccess.js +0 -153
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/readOnlyMessage/browser/contribution.js +0 -33
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/semanticTokens/browser/documentSemanticTokens.js +0 -354
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/smartSelect/browser/bracketSelections.js +0 -146
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/suggest/browser/completionModel.js +0 -224
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/contrib/unicodeHighlighter/browser/bannerController.js +0 -119
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/edcore.main.js +0 -14
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.all.js +0 -63
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.api.js +0 -55
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.main.js +0 -7
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/editor.worker.js +0 -25
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/editor/standalone/browser/colorizer.js +0 -118
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/css.worker.js +0 -36869
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/language/css/cssMode.js +0 -2035
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/browser/accessibilityService.js +0 -88
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/accessibility/common/accessibility.js +0 -9
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/action.js +0 -7
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/action/common/actionCommonCategories.js +0 -13
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionList.js +0 -276
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/browser/actionWidget.js +0 -248
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actionWidget/common/actionWidget.js +0 -5
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/actions/common/actions.js +0 -409
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/audioCues/browser/audioCueService.js +0 -176
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/browser/clipboardService.js +0 -141
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/clipboard/common/clipboardService.js +0 -6
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/commands/common/commands.js +0 -80
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configuration.js +0 -86
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationModels.js +0 -554
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurationRegistry.js +0 -317
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/configuration/common/configurations.js +0 -41
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/browser/contextKeyService.js +0 -432
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkey.js +0 -1547
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextkey/common/contextkeys.js +0 -18
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuHandler.js +0 -124
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextMenuService.js +0 -101
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextView.js +0 -7
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/contextview/browser/contextViewService.js +0 -72
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dialogs/common/dialogs.js +0 -2
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/dnd/browser/dnd.js +0 -36
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/editor/common/editor.js +0 -17
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/environment/common/environment.js +0 -2
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/extensions/common/extensions.js +0 -47
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/files/common/files.js +0 -9
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/history/browser/contextScopedHistoryWidget.js +0 -105
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/descriptors.js +0 -11
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/instantiation/common/extensions.js +0 -15
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/abstractKeybindingService.js +0 -277
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/keybinding/common/baseResolvedKeybinding.js +0 -53
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +0 -354
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/browser/defaultStyles.js +0 -162
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/esm/vs/platform/theme/common/colorRegistry.js +0 -482
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/abap/abap.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/apex/apex.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/azcli/azcli.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bat/bat.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/bicep/bicep.js +0 -11
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cameligo/cameligo.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/clojure/clojure.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/coffee/coffee.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cpp/cpp.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csharp/csharp.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/csp/csp.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/css/css.js +0 -12
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/cypher/cypher.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dart/dart.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/dockerfile/dockerfile.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/ecl/ecl.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/elixir/elixir.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/basic-languages/flow9/flow9.js +0 -10
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.js +0 -745
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.de.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.es.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.fr.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.it.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ja.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ko.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.ru.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-cn.js +0 -31
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/editor/editor.main.nls.zh-tw.js +0 -29
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssMode.js +0 -13
- package/dist/src/web/frontend/node_modules/.monaco-editor-MndU045b/min/vs/language/css/cssWorker.js +0 -81
- package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/cli.js +0 -64
- package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/example.js +0 -36
- package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/index.js +0 -205
- package/dist/src/web/frontend/node_modules/.multicast-dns-iKseM9bB/test.js +0 -260
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.browser.js +0 -34
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.js +0 -35
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/async/index.native.js +0 -26
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.browser.js +0 -34
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/index.js +0 -45
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/nanoid.js +0 -1
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/non-secure/index.js +0 -21
- package/dist/src/web/frontend/node_modules/.nanoid-PAMEV9Hd/url-alphabet/index.js +0 -3
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/bin/nodemon.js +0 -16
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/index.js +0 -49
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/cli/parse.js +0 -230
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/command.js +0 -43
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/defaults.js +0 -34
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/exec.js +0 -234
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/index.js +0 -93
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/config/load.js +0 -225
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/help/index.js +0 -27
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/index.js +0 -1
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/index.js +0 -4
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/match.js +0 -287
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/run.js +0 -562
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/signals.js +0 -34
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/monitor/watch.js +0 -244
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/nodemon.js +0 -317
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/add.js +0 -89
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/index.js +0 -53
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/rules/parse.js +0 -43
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/spawn.js +0 -74
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/bus.js +0 -44
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/clone.js +0 -40
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/colour.js +0 -26
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/index.js +0 -103
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/log.js +0 -82
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/utils/merge.js +0 -47
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/lib/version.js +0 -100
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/brace-expansion/index.js +0 -201
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/has-flag/index.js +0 -8
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/minimatch/minimatch.js +0 -947
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/browser.js +0 -5
- package/dist/src/web/frontend/node_modules/.nodemon-QcvNKhKT/node_modules/supports-color/index.js +0 -131
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/bin/pidtree.js +0 -128
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/index.js +0 -49
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/bin.js +0 -61
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/get.js +0 -45
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/pidtree.js +0 -104
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/ps.js +0 -47
- package/dist/src/web/frontend/node_modules/.pidtree-icfat3SQ/lib/wmic.js +0 -49
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/doc.js +0 -1270
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/acorn.js +0 -15
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/angular.js +0 -2
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/babel.js +0 -15
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/estree.js +0 -36
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/flow.js +0 -19
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/glimmer.js +0 -29
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/graphql.js +0 -29
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/html.js +0 -22
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/markdown.js +0 -63
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/meriyah.js +0 -4
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/postcss.js +0 -54
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/typescript.js +0 -20
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/plugins/yaml.js +0 -160
- package/dist/src/web/frontend/node_modules/.prettier-ApZm3b7s/standalone.js +0 -34
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/bin/react-scripts.js +0 -58
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/env.js +0 -112
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/getHttpsConfig.js +0 -74
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/babelTransform.js +0 -37
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/cssTransform.js +0 -22
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/jest/fileTransform.js +0 -40
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/modules.js +0 -142
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/paths.js +0 -153
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack/persistentCache/createEnvironmentHash.js +0 -9
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpack.config.js +0 -796
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/config/webpackDevServer.config.js +0 -135
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/build.js +0 -225
- package/dist/src/web/frontend/node_modules/.react-scripts-OTANyoRb/scripts/eject.js +0 -340
|
@@ -1,118 +1,136 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WebUI Cross-Platform Validator
|
|
3
3
|
* Validates that WebUI components work across Node.js and Deno
|
|
4
|
-
*/
|
|
5
|
-
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { compat } from '../runtime-detector.js';
|
|
7
|
+
import { promises as fs } from 'fs';
|
|
8
|
+
|
|
6
9
|
export class WebUIValidator {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
constructor() {
|
|
11
|
+
this.tests = [];
|
|
12
|
+
this.results = {
|
|
13
|
+
passed: 0,
|
|
14
|
+
failed: 0,
|
|
15
|
+
total: 0,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async runValidation() {
|
|
20
|
+
console.log(`🔍 WebUI Cross-Platform Validation (${compat.runtime})`);
|
|
21
|
+
console.log('─'.repeat(50));
|
|
22
|
+
|
|
23
|
+
// Runtime Detection Test
|
|
24
|
+
this.test('Runtime Detection', () => {
|
|
25
|
+
const isValidRuntime = compat.runtime === 'node' || compat.runtime === 'deno';
|
|
26
|
+
const hasPlatform = compat.platform && compat.platform.os;
|
|
27
|
+
return isValidRuntime && hasPlatform;
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Terminal I/O Test
|
|
31
|
+
this.test('Terminal I/O Layer', () => {
|
|
32
|
+
const terminal = compat.terminal;
|
|
33
|
+
const hasRequiredMethods =
|
|
34
|
+
terminal &&
|
|
35
|
+
typeof terminal.write === 'function' &&
|
|
36
|
+
typeof terminal.read === 'function' &&
|
|
37
|
+
typeof terminal.exit === 'function';
|
|
38
|
+
return hasRequiredMethods;
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Component Import Test
|
|
42
|
+
await this.asyncTest('Component Imports', async () => {
|
|
43
|
+
try {
|
|
44
|
+
await import('./start-wrapper.js');
|
|
45
|
+
await import('./process-ui-enhanced.js');
|
|
46
|
+
return true;
|
|
47
|
+
} catch (err) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// UI Instantiation Test
|
|
53
|
+
await this.asyncTest('UI Instantiation', async () => {
|
|
54
|
+
try {
|
|
55
|
+
const { EnhancedProcessUI } = await import('./process-ui-enhanced.js');
|
|
56
|
+
const ui = new EnhancedProcessUI();
|
|
57
|
+
return ui && ui.processes && ui.processes.size > 0;
|
|
58
|
+
} catch (err) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// File Operations Test
|
|
64
|
+
await this.asyncTest('File Operations', async () => {
|
|
65
|
+
try {
|
|
66
|
+
await compat.safeCall(async () => {
|
|
67
|
+
if (compat.runtime === 'deno') {
|
|
68
|
+
await fs.writeFile('.webui-test', 'test', 'utf8');
|
|
69
|
+
await fs.unlink('.webui-test');
|
|
70
|
+
} else {
|
|
71
|
+
const fs = await import('fs/promises');
|
|
72
|
+
await fs.writeFile('.webui-test', 'test', 'utf8');
|
|
73
|
+
await fs.unlink('.webui-test');
|
|
74
|
+
}
|
|
15
75
|
});
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
// File Operations Test
|
|
43
|
-
await this.asyncTest('File Operations', async ()=>{
|
|
44
|
-
try {
|
|
45
|
-
await compat.safeCall(async ()=>{
|
|
46
|
-
if (compat.runtime === 'deno') {
|
|
47
|
-
await fs.writeFile('.webui-test', 'test', 'utf8');
|
|
48
|
-
await fs.unlink('.webui-test');
|
|
49
|
-
} else {
|
|
50
|
-
const fs = await import("node:fs/promises");
|
|
51
|
-
await fs.writeFile('.webui-test', 'test', 'utf8');
|
|
52
|
-
await fs.unlink('.webui-test');
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
return true;
|
|
56
|
-
} catch (err) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
this.printSummary();
|
|
61
|
-
return this.results.failed === 0;
|
|
62
|
-
}
|
|
63
|
-
test(name, testFn) {
|
|
64
|
-
this.results.total++;
|
|
65
|
-
try {
|
|
66
|
-
const result = testFn();
|
|
67
|
-
if (result) {
|
|
68
|
-
console.log(`✅ ${name}`);
|
|
69
|
-
this.results.passed++;
|
|
70
|
-
} else {
|
|
71
|
-
console.log(`❌ ${name}`);
|
|
72
|
-
this.results.failed++;
|
|
73
|
-
}
|
|
74
|
-
} catch (err) {
|
|
75
|
-
console.log(`❌ ${name}: ${err.message}`);
|
|
76
|
-
this.results.failed++;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
async asyncTest(name, testFn) {
|
|
80
|
-
this.results.total++;
|
|
81
|
-
try {
|
|
82
|
-
const result = await testFn();
|
|
83
|
-
if (result) {
|
|
84
|
-
console.log(`✅ ${name}`);
|
|
85
|
-
this.results.passed++;
|
|
86
|
-
} else {
|
|
87
|
-
console.log(`❌ ${name}`);
|
|
88
|
-
this.results.failed++;
|
|
89
|
-
}
|
|
90
|
-
} catch (err) {
|
|
91
|
-
console.log(`❌ ${name}: ${err.message}`);
|
|
92
|
-
this.results.failed++;
|
|
93
|
-
}
|
|
76
|
+
return true;
|
|
77
|
+
} catch (err) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
this.printSummary();
|
|
83
|
+
return this.results.failed === 0;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
test(name, testFn) {
|
|
87
|
+
this.results.total++;
|
|
88
|
+
try {
|
|
89
|
+
const result = testFn();
|
|
90
|
+
if (result) {
|
|
91
|
+
console.log(`✅ ${name}`);
|
|
92
|
+
this.results.passed++;
|
|
93
|
+
} else {
|
|
94
|
+
console.log(`❌ ${name}`);
|
|
95
|
+
this.results.failed++;
|
|
96
|
+
}
|
|
97
|
+
} catch (err) {
|
|
98
|
+
console.log(`❌ ${name}: ${err.message}`);
|
|
99
|
+
this.results.failed++;
|
|
94
100
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
async asyncTest(name, testFn) {
|
|
104
|
+
this.results.total++;
|
|
105
|
+
try {
|
|
106
|
+
const result = await testFn();
|
|
107
|
+
if (result) {
|
|
108
|
+
console.log(`✅ ${name}`);
|
|
109
|
+
this.results.passed++;
|
|
110
|
+
} else {
|
|
111
|
+
console.log(`❌ ${name}`);
|
|
112
|
+
this.results.failed++;
|
|
113
|
+
}
|
|
114
|
+
} catch (err) {
|
|
115
|
+
console.log(`❌ ${name}: ${err.message}`);
|
|
116
|
+
this.results.failed++;
|
|
103
117
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
printSummary() {
|
|
121
|
+
console.log('─'.repeat(50));
|
|
122
|
+
console.log(`📊 Results: ${this.results.passed}/${this.results.total} passed`);
|
|
123
|
+
if (this.results.failed === 0) {
|
|
124
|
+
console.log('🎉 All validations passed! WebUI is cross-platform compatible.');
|
|
125
|
+
} else {
|
|
126
|
+
console.log(`⚠️ ${this.results.failed} validation(s) failed.`);
|
|
111
127
|
}
|
|
128
|
+
}
|
|
112
129
|
}
|
|
130
|
+
|
|
113
131
|
// Auto-run if called directly
|
|
114
132
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
133
|
+
const validator = new WebUIValidator();
|
|
134
|
+
const success = await validator.runValidation();
|
|
135
|
+
process.exit(success ? 0 : 1);
|
|
118
136
|
}
|
|
@@ -607,4 +607,28 @@ export class ByzantineMemoryChannel extends EventEmitter {
|
|
|
607
607
|
}
|
|
608
608
|
|
|
609
609
|
generateNodeId() {
|
|
610
|
-
return `node_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n generateProposalId() {\n return `proposal_${this.consensus.currentRound}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n }\n\n signData(data) {\n // Simple signature simulation - in production use proper cryptographic signatures\n const dataStr = JSON.stringify(data);\n return `sig_${Buffer.from(dataStr).toString('base64').substr(0, 16)}`;\n }\n\n updateMetrics(operation, duration, success) {\n if (success) {\n // Update success metrics\n } else {\n // Update failure metrics\n }\n }\n\n updateAverage(currentAvg, newValue, count) {\n return ((currentAvg * (count - 1)) + newValue) / count;\n }\n}\n\n/**\n * Message Router for Byzantine communication\n */\nclass MessageRouter extends EventEmitter {\n constructor(channelId) {\n super();\n this.channelId = channelId;\n this.nodeId = null;\n this.initialized = false;\n }\n\n async initialize(nodeId) {\n this.nodeId = nodeId;\n this.initialized = true;\n }\n\n async broadcast(message) {\n // Simulate message broadcasting\n this.emit('broadcast', { ...message, channelId: this.channelId });\n }\n\n async shutdown() {\n this.initialized = false;\n this.removeAllListeners();\n }\n}\n\n/**\n * Consensus Manager for Byzantine fault tolerance\n */\nclass ConsensusManager {\n constructor(threshold) {\n this.threshold = threshold;\n }\n\n analyzeVotes(votes) {\n if (votes.size === 0) {\n return {\n consensus: false,\n reason: 'No votes received',\n byzantineDetected: false\n };\n }\n\n // Simple consensus analysis - in production use proper Byzantine algorithms\n const voteArray = Array.from(votes.values());\n const approvalVotes = voteArray.filter(vote => vote.approval === true).length;\n const totalVotes = voteArray.length;\n const approvalRatio = approvalVotes / totalVotes;\n\n // Check for Byzantine behavior (conflicting votes from same node)\n const byzantineNodes = this.detectByzantineBehavior(voteArray);\n\n return {\n consensus: approvalRatio >= this.threshold,\n votes: voteArray,\n approvalRatio,\n byzantineDetected: byzantineNodes.size > 0,\n byzantineNodes,\n reason: approvalRatio >= this.threshold ? 'Consensus reached' : 'Insufficient approval'\n };\n }\n\n detectByzantineBehavior(votes) {\n const byzantineNodes = new Set();\n const nodeVotes = new Map();\n\n // Group votes by node\n for (const vote of votes) {\n if (!nodeVotes.has(vote.nodeId)) {\n nodeVotes.set(vote.nodeId, []);\n }\n nodeVotes.get(vote.nodeId).push(vote);\n }\n\n // Check for conflicting votes from same node\n for (const [nodeId, nodeVoteList] of nodeVotes.entries()) {\n if (nodeVoteList.length > 1) {\n // Check for contradictory votes\n const approvals = nodeVoteList.map(v => v.approval);\n if (approvals.includes(true) && approvals.includes(false)) {\n byzantineNodes.add(nodeId);\n }\n }\n }\n\n return byzantineNodes;\n }\n}\n\n/**\n * Byzantine Memory Channel Manager\n * Manages multiple channels with coordination\n */\nexport class ByzantineChannelManager extends EventEmitter {\n constructor(options = {}) {\n super();\n\n this.options = {\n maxChannels: options.maxChannels || 50,\n defaultByzantineThreshold: options.defaultByzantineThreshold || 0.67,\n enableCrossChannelConsensus: options.enableCrossChannelConsensus !== false,\n ...options\n };\n\n this.channels = new Map();\n this.crossChannelConsensus = new Map();\n this.isInitialized = false;\n }\n\n /**\n * Initialize channel manager\n */\n async initialize() {\n if (this.isInitialized) return;\n\n this.isInitialized = true;\n\n this.emit('initialized', {\n maxChannels: this.options.maxChannels,\n crossChannelConsensus: this.options.enableCrossChannelConsensus\n });\n\n console.log('✅ Byzantine Channel Manager initialized');\n\n return { success: true };\n }\n\n /**\n * Create new Byzantine memory channel\n */\n async createChannel(channelId, options = {}) {\n this.ensureInitialized();\n\n if (this.channels.has(channelId)) {\n throw new Error(`Channel ${channelId} already exists`);\n }\n\n if (this.channels.size >= this.options.maxChannels) {\n throw new Error('Maximum number of channels reached');\n }\n\n const channelOptions = {\n ...options,\n byzantineThreshold: options.byzantineThreshold || this.options.defaultByzantineThreshold\n };\n\n const channel = new ByzantineMemoryChannel(channelId, channelOptions);\n await channel.initialize();\n\n this.channels.set(channelId, channel);\n\n // Set up cross-channel event handling\n channel.on('consensusReached', (data) => {\n this.emit('channelConsensus', { channelId, ...data });\n });\n\n channel.on('byzantineDetected', (data) => {\n this.emit('channelByzantine', { channelId, ...data });\n this.handleCrossChannelByzantine(channelId, data);\n });\n\n this.emit('channelCreated', { channelId, options: channelOptions });\n\n return channel;\n }\n\n /**\n * Get channel by ID\n */\n getChannel(channelId) {\n return this.channels.get(channelId);\n }\n\n /**\n * Get all channels\n */\n getAllChannels() {\n return Array.from(this.channels.values());\n }\n\n /**\n * Store data across multiple channels with cross-channel consensus\n */\n async crossChannelStore(channelIds, key, value, options = {}) {\n this.ensureInitialized();\n\n if (!this.options.enableCrossChannelConsensus) {\n throw new Error('Cross-channel consensus is disabled');\n }\n\n const channels = channelIds.map(id => this.getChannel(id)).filter(Boolean);\n\n if (channels.length !== channelIds.length) {\n throw new Error('Some channels not found');\n }\n\n // Execute storage across all channels\n const storePromises = channels.map(channel =>\n channel.store(key, value, {\n ...options,\n crossChannelConsensus: true,\n participatingChannels: channelIds\n })\n );\n\n const results = await Promise.allSettled(storePromises);\n const successful = results.filter(r => r.status === 'fulfilled').length;\n const successRate = successful / channels.length;\n\n // Require majority success for cross-channel consensus\n const consensusThreshold = 0.51;\n if (successRate >= consensusThreshold) {\n this.emit('crossChannelConsensus', {\n key,\n channels: channelIds,\n successRate,\n consensusReached: true\n });\n\n return {\n success: true,\n channels: channelIds,\n successRate,\n crossChannelConsensus: true\n };\n } else {\n throw new Error(`Cross-channel consensus failed: ${successRate * 100}% success rate`);\n }\n }\n\n /**\n * Handle Byzantine detection across channels\n */\n async handleCrossChannelByzantine(channelId, byzantineData) {\n // Propagate Byzantine intelligence to other channels\n for (const [otherChannelId, channel] of this.channels.entries()) {\n if (otherChannelId !== channelId) {\n channel.emit('externalByzantine', {\n sourceChannel: channelId,\n ...byzantineData\n });\n }\n }\n }\n\n /**\n * Get comprehensive manager statistics\n */\n async getStats() {\n this.ensureInitialized();\n\n const channelStats = {};\n\n for (const [channelId, channel] of this.channels.entries()) {\n try {\n channelStats[channelId] = await channel.getStats();\n } catch (error) {\n channelStats[channelId] = { error: error.message };\n }\n }\n\n return {\n manager: {\n initialized: this.isInitialized,\n channelCount: this.channels.size,\n maxChannels: this.options.maxChannels,\n crossChannelEnabled: this.options.enableCrossChannelConsensus\n },\n channels: channelStats\n };\n }\n\n /**\n * Shutdown all channels\n */\n async shutdown() {\n if (!this.isInitialized) return;\n\n const shutdownPromises = Array.from(this.channels.values()).map(\n channel => channel.shutdown()\n );\n\n await Promise.allSettled(shutdownPromises);\n\n this.channels.clear();\n this.crossChannelConsensus.clear();\n this.isInitialized = false;\n\n this.emit('shutdown');\n console.log('✅ Byzantine Channel Manager shut down successfully');\n }\n\n ensureInitialized() {\n if (!this.isInitialized) {\n throw new Error('Byzantine Channel Manager not initialized. Call initialize() first.');\n }\n }\n}\n\n// Factory functions\nexport function createByzantineChannel(channelId, options = {}) {\n return new ByzantineMemoryChannel(channelId, options);\n}\n\nexport function createChannelManager(options = {}) {\n return new ByzantineChannelManager(options);\n}\n\n// Test function\nexport async function testByzantineChannels() {\n try {\n const manager = new ByzantineChannelManager({\n maxChannels: 5,\n defaultByzantineThreshold: 0.67\n });\n\n await manager.initialize();\n\n // Create test channel\n const channel = await manager.createChannel('test-channel', {\n enableFallback: true,\n byzantineThreshold: 0.67\n });\n\n // Test storage\n const storeResult = await channel.store('test-key', 'test-value', {\n namespace: 'test'\n });\n\n // Test retrieval\n const retrieved = await channel.retrieve('test-key', { namespace: 'test' });\n\n // Get stats\n const stats = await manager.getStats();\n\n // Shutdown\n await manager.shutdown();\n\n return {\n byzantine: true,\n channelCreated: true,\n storeSuccessful: storeResult.success,\n retrieveSuccessful: retrieved === 'test-value',\n consensusEnabled: storeResult.byzantineVerified !== undefined,\n fallbackReady: stats.channels['test-channel']?.channel?.fallbackEnabled || false,\n error: null\n };\n } catch (error) {\n return {\n byzantine: false,\n error: error.message\n };\n }\n}\n\nexport default ByzantineMemoryChannel;
|
|
610
|
+
return `node_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
generateProposalId() {
|
|
614
|
+
return `proposal_${this.consensus.currentRound}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
signData(data) {
|
|
618
|
+
// Simple signature simulation - in production use proper cryptographic signatures
|
|
619
|
+
const dataStr = JSON.stringify(data);
|
|
620
|
+
return `sig_${Buffer.from(dataStr).toString('base64').substr(0, 16)}`;
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
updateMetrics(operation, duration, success) {
|
|
624
|
+
if (success) {
|
|
625
|
+
// Update success metrics
|
|
626
|
+
} else {
|
|
627
|
+
// Update failure metrics
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
updateAverage(currentAvg, newValue, count) {
|
|
632
|
+
return ((currentAvg * (count - 1)) + newValue) / count;
|
|
633
|
+
}
|
|
634
|
+
}\n\n/**\n * Message Router for Byzantine communication\n */\nclass MessageRouter extends EventEmitter {\n constructor(channelId) {\n super();\n this.channelId = channelId;\n this.nodeId = null;\n this.initialized = false;\n }\n\n async initialize(nodeId) {\n this.nodeId = nodeId;\n this.initialized = true;\n }\n\n async broadcast(message) {\n // Simulate message broadcasting\n this.emit('broadcast', { ...message, channelId: this.channelId });\n }\n\n async shutdown() {\n this.initialized = false;\n this.removeAllListeners();\n }\n}\n\n/**\n * Consensus Manager for Byzantine fault tolerance\n */\nclass ConsensusManager {\n constructor(threshold) {\n this.threshold = threshold;\n }\n\n analyzeVotes(votes) {\n if (votes.size === 0) {\n return {\n consensus: false,\n reason: 'No votes received',\n byzantineDetected: false\n };\n }\n\n // Simple consensus analysis - in production use proper Byzantine algorithms\n const voteArray = Array.from(votes.values());\n const approvalVotes = voteArray.filter(vote => vote.approval === true).length;\n const totalVotes = voteArray.length;\n const approvalRatio = approvalVotes / totalVotes;\n\n // Check for Byzantine behavior (conflicting votes from same node)\n const byzantineNodes = this.detectByzantineBehavior(voteArray);\n\n return {\n consensus: approvalRatio >= this.threshold,\n votes: voteArray,\n approvalRatio,\n byzantineDetected: byzantineNodes.size > 0,\n byzantineNodes,\n reason: approvalRatio >= this.threshold ? 'Consensus reached' : 'Insufficient approval'\n };\n }\n\n detectByzantineBehavior(votes) {\n const byzantineNodes = new Set();\n const nodeVotes = new Map();\n\n // Group votes by node\n for (const vote of votes) {\n if (!nodeVotes.has(vote.nodeId)) {\n nodeVotes.set(vote.nodeId, []);\n }\n nodeVotes.get(vote.nodeId).push(vote);\n }\n\n // Check for conflicting votes from same node\n for (const [nodeId, nodeVoteList] of nodeVotes.entries()) {\n if (nodeVoteList.length > 1) {\n // Check for contradictory votes\n const approvals = nodeVoteList.map(v => v.approval);\n if (approvals.includes(true) && approvals.includes(false)) {\n byzantineNodes.add(nodeId);\n }\n }\n }\n\n return byzantineNodes;\n }\n}\n\n/**\n * Byzantine Memory Channel Manager\n * Manages multiple channels with coordination\n */\nexport class ByzantineChannelManager extends EventEmitter {\n constructor(options = {}) {\n super();\n\n this.options = {\n maxChannels: options.maxChannels || 50,\n defaultByzantineThreshold: options.defaultByzantineThreshold || 0.67,\n enableCrossChannelConsensus: options.enableCrossChannelConsensus !== false,\n ...options\n };\n\n this.channels = new Map();\n this.crossChannelConsensus = new Map();\n this.isInitialized = false;\n }\n\n /**\n * Initialize channel manager\n */\n async initialize() {\n if (this.isInitialized) return;\n\n this.isInitialized = true;\n\n this.emit('initialized', {\n maxChannels: this.options.maxChannels,\n crossChannelConsensus: this.options.enableCrossChannelConsensus\n });\n\n console.log('✅ Byzantine Channel Manager initialized');\n\n return { success: true };\n }\n\n /**\n * Create new Byzantine memory channel\n */\n async createChannel(channelId, options = {}) {\n this.ensureInitialized();\n\n if (this.channels.has(channelId)) {\n throw new Error(`Channel ${channelId} already exists`);\n }\n\n if (this.channels.size >= this.options.maxChannels) {\n throw new Error('Maximum number of channels reached');\n }\n\n const channelOptions = {\n ...options,\n byzantineThreshold: options.byzantineThreshold || this.options.defaultByzantineThreshold\n };\n\n const channel = new ByzantineMemoryChannel(channelId, channelOptions);\n await channel.initialize();\n\n this.channels.set(channelId, channel);\n\n // Set up cross-channel event handling\n channel.on('consensusReached', (data) => {\n this.emit('channelConsensus', { channelId, ...data });\n });\n\n channel.on('byzantineDetected', (data) => {\n this.emit('channelByzantine', { channelId, ...data });\n this.handleCrossChannelByzantine(channelId, data);\n });\n\n this.emit('channelCreated', { channelId, options: channelOptions });\n\n return channel;\n }\n\n /**\n * Get channel by ID\n */\n getChannel(channelId) {\n return this.channels.get(channelId);\n }\n\n /**\n * Get all channels\n */\n getAllChannels() {\n return Array.from(this.channels.values());\n }\n\n /**\n * Store data across multiple channels with cross-channel consensus\n */\n async crossChannelStore(channelIds, key, value, options = {}) {\n this.ensureInitialized();\n\n if (!this.options.enableCrossChannelConsensus) {\n throw new Error('Cross-channel consensus is disabled');\n }\n\n const channels = channelIds.map(id => this.getChannel(id)).filter(Boolean);\n\n if (channels.length !== channelIds.length) {\n throw new Error('Some channels not found');\n }\n\n // Execute storage across all channels\n const storePromises = channels.map(channel =>\n channel.store(key, value, {\n ...options,\n crossChannelConsensus: true,\n participatingChannels: channelIds\n })\n );\n\n const results = await Promise.allSettled(storePromises);\n const successful = results.filter(r => r.status === 'fulfilled').length;\n const successRate = successful / channels.length;\n\n // Require majority success for cross-channel consensus\n const consensusThreshold = 0.51;\n if (successRate >= consensusThreshold) {\n this.emit('crossChannelConsensus', {\n key,\n channels: channelIds,\n successRate,\n consensusReached: true\n });\n\n return {\n success: true,\n channels: channelIds,\n successRate,\n crossChannelConsensus: true\n };\n } else {\n throw new Error(`Cross-channel consensus failed: ${successRate * 100}% success rate`);\n }\n }\n\n /**\n * Handle Byzantine detection across channels\n */\n async handleCrossChannelByzantine(channelId, byzantineData) {\n // Propagate Byzantine intelligence to other channels\n for (const [otherChannelId, channel] of this.channels.entries()) {\n if (otherChannelId !== channelId) {\n channel.emit('externalByzantine', {\n sourceChannel: channelId,\n ...byzantineData\n });\n }\n }\n }\n\n /**\n * Get comprehensive manager statistics\n */\n async getStats() {\n this.ensureInitialized();\n\n const channelStats = {};\n\n for (const [channelId, channel] of this.channels.entries()) {\n try {\n channelStats[channelId] = await channel.getStats();\n } catch (error) {\n channelStats[channelId] = { error: error.message };\n }\n }\n\n return {\n manager: {\n initialized: this.isInitialized,\n channelCount: this.channels.size,\n maxChannels: this.options.maxChannels,\n crossChannelEnabled: this.options.enableCrossChannelConsensus\n },\n channels: channelStats\n };\n }\n\n /**\n * Shutdown all channels\n */\n async shutdown() {\n if (!this.isInitialized) return;\n\n const shutdownPromises = Array.from(this.channels.values()).map(\n channel => channel.shutdown()\n );\n\n await Promise.allSettled(shutdownPromises);\n\n this.channels.clear();\n this.crossChannelConsensus.clear();\n this.isInitialized = false;\n\n this.emit('shutdown');\n console.log('✅ Byzantine Channel Manager shut down successfully');\n }\n\n ensureInitialized() {\n if (!this.isInitialized) {\n throw new Error('Byzantine Channel Manager not initialized. Call initialize() first.');\n }\n }\n}\n\n// Factory functions\nexport function createByzantineChannel(channelId, options = {}) {\n return new ByzantineMemoryChannel(channelId, options);\n}\n\nexport function createChannelManager(options = {}) {\n return new ByzantineChannelManager(options);\n}\n\n// Test function\nexport async function testByzantineChannels() {\n try {\n const manager = new ByzantineChannelManager({\n maxChannels: 5,\n defaultByzantineThreshold: 0.67\n });\n\n await manager.initialize();\n\n // Create test channel\n const channel = await manager.createChannel('test-channel', {\n enableFallback: true,\n byzantineThreshold: 0.67\n });\n\n // Test storage\n const storeResult = await channel.store('test-key', 'test-value', {\n namespace: 'test'\n });\n\n // Test retrieval\n const retrieved = await channel.retrieve('test-key', { namespace: 'test' });\n\n // Get stats\n const stats = await manager.getStats();\n\n // Shutdown\n await manager.shutdown();\n\n return {\n byzantine: true,\n channelCreated: true,\n storeSuccessful: storeResult.success,\n retrieveSuccessful: retrieved === 'test-value',\n consensusEnabled: storeResult.byzantineVerified !== undefined,\n fallbackReady: stats.channels['test-channel']?.channel?.fallbackEnabled || false,\n error: null\n };\n } catch (error) {\n return {\n byzantine: false,\n error: error.message\n };\n }\n}\n\nexport default ByzantineMemoryChannel;
|