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
|
@@ -3,282 +3,425 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Safe, backward-compatible database optimization for existing deployments
|
|
5
5
|
* Adds indexes, performance improvements, and new features without breaking changes
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import Database from 'better-sqlite3';
|
|
9
|
+
import { existsSync, mkdirSync } from 'fs';
|
|
10
|
+
import { writeFile, readFile } from 'fs/promises';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import ora from 'ora';
|
|
14
|
+
|
|
9
15
|
/**
|
|
10
16
|
* Optimize existing hive mind database with backward compatibility
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if (schemaVersion < 1.5) {
|
|
52
|
-
spinner.text = 'Adding behavioral analysis...';
|
|
53
|
-
addBehavioralTracking(db);
|
|
54
|
-
optimizationsApplied.push('Behavioral pattern tracking');
|
|
55
|
-
}
|
|
56
|
-
// Run ANALYZE to update query planner statistics
|
|
57
|
-
spinner.text = 'Updating query statistics...';
|
|
58
|
-
db.exec('ANALYZE');
|
|
59
|
-
// Vacuum if requested (requires exclusive access)
|
|
60
|
-
if (options.vacuum) {
|
|
61
|
-
spinner.text = 'Vacuuming database...';
|
|
62
|
-
db.exec('VACUUM');
|
|
63
|
-
optimizationsApplied.push('Database vacuumed');
|
|
64
|
-
}
|
|
65
|
-
// Update schema version
|
|
66
|
-
updateSchemaVersion(db, 1.5);
|
|
67
|
-
// Close database
|
|
68
|
-
db.close();
|
|
69
|
-
spinner.succeed('Database optimization complete!');
|
|
70
|
-
if (optimizationsApplied.length > 0) {
|
|
71
|
-
console.log('\n' + chalk.green('✓') + ' Optimizations applied:');
|
|
72
|
-
optimizationsApplied.forEach((opt)=>{
|
|
73
|
-
console.log(' - ' + opt);
|
|
74
|
-
});
|
|
75
|
-
} else {
|
|
76
|
-
console.log('\n' + chalk.yellow('ℹ') + ' Database already optimized');
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
success: true,
|
|
80
|
-
optimizations: optimizationsApplied
|
|
81
|
-
};
|
|
82
|
-
} catch (error) {
|
|
83
|
-
spinner.fail('Database optimization failed');
|
|
84
|
-
console.error(chalk.red('Error:'), error.message);
|
|
85
|
-
return {
|
|
86
|
-
success: false,
|
|
87
|
-
error: error.message
|
|
88
|
-
};
|
|
17
|
+
*/
|
|
18
|
+
export async function optimizeHiveMindDatabase(dbPath, options = {}) {
|
|
19
|
+
const spinner = ora('Optimizing Hive Mind database...').start();
|
|
20
|
+
|
|
21
|
+
try {
|
|
22
|
+
// Open database with write-ahead logging for better performance
|
|
23
|
+
const db = new Database(dbPath, {
|
|
24
|
+
verbose: options.verbose ? console.log : null,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// Enable WAL mode for better concurrency
|
|
28
|
+
db.pragma('journal_mode = WAL');
|
|
29
|
+
db.pragma('synchronous = NORMAL');
|
|
30
|
+
|
|
31
|
+
// Get current schema version
|
|
32
|
+
const schemaVersion = getSchemaVersion(db);
|
|
33
|
+
spinner.text = `Current schema version: ${schemaVersion}`;
|
|
34
|
+
|
|
35
|
+
// Apply optimizations based on version
|
|
36
|
+
let optimizationsApplied = [];
|
|
37
|
+
|
|
38
|
+
// Version 1.0 -> 1.1: Add basic indexes
|
|
39
|
+
if (schemaVersion < 1.1) {
|
|
40
|
+
spinner.text = 'Applying performance indexes...';
|
|
41
|
+
applyBasicIndexes(db);
|
|
42
|
+
optimizationsApplied.push('Basic performance indexes');
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Version 1.1 -> 1.2: Add advanced indexes and analyze
|
|
46
|
+
if (schemaVersion < 1.2) {
|
|
47
|
+
spinner.text = 'Applying advanced indexes...';
|
|
48
|
+
applyAdvancedIndexes(db);
|
|
49
|
+
optimizationsApplied.push('Advanced query optimization');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Version 1.2 -> 1.3: Add performance tracking tables
|
|
53
|
+
if (schemaVersion < 1.3) {
|
|
54
|
+
spinner.text = 'Adding performance tracking...';
|
|
55
|
+
addPerformanceTracking(db);
|
|
56
|
+
optimizationsApplied.push('Performance monitoring tables');
|
|
89
57
|
}
|
|
58
|
+
|
|
59
|
+
// Version 1.3 -> 1.4: Add memory optimization
|
|
60
|
+
if (schemaVersion < 1.4) {
|
|
61
|
+
spinner.text = 'Optimizing memory management...';
|
|
62
|
+
addMemoryOptimization(db);
|
|
63
|
+
optimizationsApplied.push('Memory optimization features');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Version 1.4 -> 1.5: Add behavioral tracking
|
|
67
|
+
if (schemaVersion < 1.5) {
|
|
68
|
+
spinner.text = 'Adding behavioral analysis...';
|
|
69
|
+
addBehavioralTracking(db);
|
|
70
|
+
optimizationsApplied.push('Behavioral pattern tracking');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Run ANALYZE to update query planner statistics
|
|
74
|
+
spinner.text = 'Updating query statistics...';
|
|
75
|
+
db.exec('ANALYZE');
|
|
76
|
+
|
|
77
|
+
// Vacuum if requested (requires exclusive access)
|
|
78
|
+
if (options.vacuum) {
|
|
79
|
+
spinner.text = 'Vacuuming database...';
|
|
80
|
+
db.exec('VACUUM');
|
|
81
|
+
optimizationsApplied.push('Database vacuumed');
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Update schema version
|
|
85
|
+
updateSchemaVersion(db, 1.5);
|
|
86
|
+
|
|
87
|
+
// Close database
|
|
88
|
+
db.close();
|
|
89
|
+
|
|
90
|
+
spinner.succeed('Database optimization complete!');
|
|
91
|
+
|
|
92
|
+
if (optimizationsApplied.length > 0) {
|
|
93
|
+
console.log('\n' + chalk.green('✓') + ' Optimizations applied:');
|
|
94
|
+
optimizationsApplied.forEach((opt) => {
|
|
95
|
+
console.log(' - ' + opt);
|
|
96
|
+
});
|
|
97
|
+
} else {
|
|
98
|
+
console.log('\n' + chalk.yellow('ℹ') + ' Database already optimized');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return { success: true, optimizations: optimizationsApplied };
|
|
102
|
+
} catch (error) {
|
|
103
|
+
spinner.fail('Database optimization failed');
|
|
104
|
+
console.error(chalk.red('Error:'), error.message);
|
|
105
|
+
return { success: false, error: error.message };
|
|
106
|
+
}
|
|
90
107
|
}
|
|
108
|
+
|
|
91
109
|
/**
|
|
92
110
|
* Get current schema version
|
|
93
|
-
*/
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
111
|
+
*/
|
|
112
|
+
function getSchemaVersion(db) {
|
|
113
|
+
try {
|
|
114
|
+
// Check if schema_version table exists
|
|
115
|
+
const tableExists = db
|
|
116
|
+
.prepare(
|
|
117
|
+
`
|
|
97
118
|
SELECT name FROM sqlite_master
|
|
98
119
|
WHERE type='table' AND name='schema_version'
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
120
|
+
`,
|
|
121
|
+
)
|
|
122
|
+
.get();
|
|
123
|
+
|
|
124
|
+
if (!tableExists) {
|
|
125
|
+
// Create schema version table
|
|
126
|
+
db.exec(`
|
|
103
127
|
CREATE TABLE schema_version (
|
|
104
128
|
version REAL PRIMARY KEY,
|
|
105
129
|
applied_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
106
130
|
description TEXT
|
|
107
131
|
)
|
|
108
132
|
`);
|
|
109
|
-
|
|
110
|
-
|
|
133
|
+
|
|
134
|
+
// Insert initial version
|
|
135
|
+
db.prepare(
|
|
136
|
+
`
|
|
111
137
|
INSERT INTO schema_version (version, description)
|
|
112
138
|
VALUES (1.0, 'Initial schema')
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
139
|
+
`,
|
|
140
|
+
).run();
|
|
141
|
+
|
|
142
|
+
return 1.0;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// Get latest version
|
|
146
|
+
const result = db
|
|
147
|
+
.prepare(
|
|
148
|
+
`
|
|
118
149
|
SELECT version FROM schema_version
|
|
119
150
|
ORDER BY version DESC LIMIT 1
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
151
|
+
`,
|
|
152
|
+
)
|
|
153
|
+
.get();
|
|
154
|
+
|
|
155
|
+
return result ? result.version : 1.0;
|
|
156
|
+
} catch (error) {
|
|
157
|
+
// If any error, assume version 1.0
|
|
158
|
+
return 1.0;
|
|
159
|
+
}
|
|
126
160
|
}
|
|
161
|
+
|
|
127
162
|
/**
|
|
128
163
|
* Update schema version
|
|
129
|
-
*/
|
|
130
|
-
|
|
164
|
+
*/
|
|
165
|
+
function updateSchemaVersion(db, version, description = '') {
|
|
166
|
+
db.prepare(
|
|
167
|
+
`
|
|
131
168
|
INSERT OR REPLACE INTO schema_version (version, description)
|
|
132
169
|
VALUES (?, ?)
|
|
133
|
-
|
|
170
|
+
`,
|
|
171
|
+
).run(version, description || `Updated to version ${version}`);
|
|
134
172
|
}
|
|
173
|
+
|
|
135
174
|
/**
|
|
136
175
|
* Apply basic performance indexes
|
|
137
|
-
*/
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
176
|
+
*/
|
|
177
|
+
function applyBasicIndexes(db) {
|
|
178
|
+
// First ensure all required columns exist
|
|
179
|
+
ensureRequiredColumns(db);
|
|
180
|
+
|
|
181
|
+
// Check which tables exist before creating indexes
|
|
182
|
+
const tables = db
|
|
183
|
+
.prepare(
|
|
184
|
+
`
|
|
142
185
|
SELECT name FROM sqlite_master
|
|
143
186
|
WHERE type='table' AND name NOT LIKE 'sqlite_%'
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
187
|
+
`,
|
|
188
|
+
)
|
|
189
|
+
.all()
|
|
190
|
+
.map((row) => row.name);
|
|
191
|
+
|
|
192
|
+
const tableSet = new Set(tables);
|
|
193
|
+
|
|
194
|
+
const indexes = [];
|
|
195
|
+
|
|
196
|
+
// Only create indexes for tables that exist
|
|
197
|
+
if (tableSet.has('swarms')) {
|
|
198
|
+
indexes.push(
|
|
199
|
+
'CREATE INDEX IF NOT EXISTS idx_swarms_status ON swarms(status)',
|
|
200
|
+
'CREATE INDEX IF NOT EXISTS idx_swarms_created ON swarms(created_at)',
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
if (tableSet.has('agents')) {
|
|
205
|
+
indexes.push(
|
|
206
|
+
'CREATE INDEX IF NOT EXISTS idx_agents_swarm ON agents(swarm_id)',
|
|
207
|
+
'CREATE INDEX IF NOT EXISTS idx_agents_type ON agents(type)',
|
|
208
|
+
'CREATE INDEX IF NOT EXISTS idx_agents_status ON agents(status)',
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (tableSet.has('tasks')) {
|
|
213
|
+
indexes.push(
|
|
214
|
+
'CREATE INDEX IF NOT EXISTS idx_tasks_swarm ON tasks(swarm_id)',
|
|
215
|
+
'CREATE INDEX IF NOT EXISTS idx_tasks_agent ON tasks(agent_id)',
|
|
216
|
+
'CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status)',
|
|
217
|
+
'CREATE INDEX IF NOT EXISTS idx_tasks_priority ON tasks(priority DESC)',
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (tableSet.has('collective_memory')) {
|
|
222
|
+
indexes.push(
|
|
223
|
+
'CREATE INDEX IF NOT EXISTS idx_memory_swarm ON collective_memory(swarm_id)',
|
|
224
|
+
'CREATE INDEX IF NOT EXISTS idx_memory_key ON collective_memory(key)',
|
|
225
|
+
'CREATE INDEX IF NOT EXISTS idx_memory_type ON collective_memory(type)',
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (tableSet.has('consensus_decisions')) {
|
|
230
|
+
indexes.push(
|
|
231
|
+
'CREATE INDEX IF NOT EXISTS idx_consensus_swarm ON consensus_decisions(swarm_id)',
|
|
232
|
+
'CREATE INDEX IF NOT EXISTS idx_consensus_created ON consensus_decisions(created_at)',
|
|
233
|
+
);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
indexes.forEach((sql) => {
|
|
237
|
+
try {
|
|
238
|
+
db.exec(sql);
|
|
239
|
+
} catch (error) {
|
|
240
|
+
console.warn(`Warning: Could not create index: ${error.message}`);
|
|
162
241
|
}
|
|
163
|
-
|
|
164
|
-
try {
|
|
165
|
-
db.exec(sql);
|
|
166
|
-
} catch (error) {
|
|
167
|
-
console.warn(`Warning: Could not create index: ${error.message}`);
|
|
168
|
-
}
|
|
169
|
-
});
|
|
242
|
+
});
|
|
170
243
|
}
|
|
244
|
+
|
|
171
245
|
/**
|
|
172
246
|
* Ensure all required columns exist
|
|
173
|
-
*/
|
|
174
|
-
|
|
175
|
-
|
|
247
|
+
*/
|
|
248
|
+
function ensureRequiredColumns(db) {
|
|
249
|
+
// First check which tables exist
|
|
250
|
+
const tables = db
|
|
251
|
+
.prepare(
|
|
252
|
+
`
|
|
176
253
|
SELECT name FROM sqlite_master
|
|
177
254
|
WHERE type='table' AND name NOT LIKE 'sqlite_%'
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
255
|
+
`,
|
|
256
|
+
)
|
|
257
|
+
.all()
|
|
258
|
+
.map((row) => row.name);
|
|
259
|
+
|
|
260
|
+
const tableSet = new Set(tables);
|
|
261
|
+
|
|
262
|
+
// Only check columns for tables that exist
|
|
263
|
+
if (tableSet.has('tasks')) {
|
|
264
|
+
// Check and add priority column to tasks table
|
|
265
|
+
const hasPriority = db
|
|
266
|
+
.prepare(
|
|
267
|
+
`
|
|
184
268
|
SELECT COUNT(*) as count FROM pragma_table_info('tasks')
|
|
185
269
|
WHERE name = 'priority'
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
270
|
+
`,
|
|
271
|
+
)
|
|
272
|
+
.get();
|
|
273
|
+
|
|
274
|
+
if (!hasPriority || hasPriority.count === 0) {
|
|
275
|
+
try {
|
|
276
|
+
db.exec('ALTER TABLE tasks ADD COLUMN priority INTEGER DEFAULT 5');
|
|
277
|
+
console.log('Added missing priority column to tasks table');
|
|
278
|
+
} catch (error) {
|
|
279
|
+
if (
|
|
280
|
+
!error.message.includes('duplicate column') &&
|
|
281
|
+
!error.message.includes('no such table')
|
|
282
|
+
) {
|
|
283
|
+
throw error;
|
|
196
284
|
}
|
|
197
|
-
|
|
198
|
-
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Check and add completed_at column to tasks table
|
|
289
|
+
const hasCompletedAt = db
|
|
290
|
+
.prepare(
|
|
291
|
+
`
|
|
199
292
|
SELECT COUNT(*) as count FROM pragma_table_info('tasks')
|
|
200
293
|
WHERE name = 'completed_at'
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
294
|
+
`,
|
|
295
|
+
)
|
|
296
|
+
.get();
|
|
297
|
+
|
|
298
|
+
if (!hasCompletedAt || hasCompletedAt.count === 0) {
|
|
299
|
+
try {
|
|
300
|
+
db.exec('ALTER TABLE tasks ADD COLUMN completed_at DATETIME');
|
|
301
|
+
console.log('Added missing completed_at column to tasks table');
|
|
302
|
+
} catch (error) {
|
|
303
|
+
if (
|
|
304
|
+
!error.message.includes('duplicate column') &&
|
|
305
|
+
!error.message.includes('no such table')
|
|
306
|
+
) {
|
|
307
|
+
throw error;
|
|
211
308
|
}
|
|
212
|
-
|
|
213
|
-
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Check and add result column to tasks table
|
|
313
|
+
const hasResult = db
|
|
314
|
+
.prepare(
|
|
315
|
+
`
|
|
214
316
|
SELECT COUNT(*) as count FROM pragma_table_info('tasks')
|
|
215
317
|
WHERE name = 'result'
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
318
|
+
`,
|
|
319
|
+
)
|
|
320
|
+
.get();
|
|
321
|
+
|
|
322
|
+
if (!hasResult || hasResult.count === 0) {
|
|
323
|
+
try {
|
|
324
|
+
db.exec('ALTER TABLE tasks ADD COLUMN result TEXT');
|
|
325
|
+
console.log('Added missing result column to tasks table');
|
|
326
|
+
} catch (error) {
|
|
327
|
+
if (
|
|
328
|
+
!error.message.includes('duplicate column') &&
|
|
329
|
+
!error.message.includes('no such table')
|
|
330
|
+
) {
|
|
331
|
+
throw error;
|
|
226
332
|
}
|
|
333
|
+
}
|
|
227
334
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
if (tableSet.has('swarms')) {
|
|
338
|
+
// Check and add updated_at column to swarms table
|
|
339
|
+
const hasUpdatedAt = db
|
|
340
|
+
.prepare(
|
|
341
|
+
`
|
|
231
342
|
SELECT COUNT(*) as count FROM pragma_table_info('swarms')
|
|
232
343
|
WHERE name = 'updated_at'
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
344
|
+
`,
|
|
345
|
+
)
|
|
346
|
+
.get();
|
|
347
|
+
|
|
348
|
+
if (!hasUpdatedAt || hasUpdatedAt.count === 0) {
|
|
349
|
+
try {
|
|
350
|
+
db.exec('ALTER TABLE swarms ADD COLUMN updated_at DATETIME');
|
|
351
|
+
console.log('Added missing updated_at column to swarms table');
|
|
352
|
+
} catch (error) {
|
|
353
|
+
if (
|
|
354
|
+
!error.message.includes('duplicate column') &&
|
|
355
|
+
!error.message.includes('no such table')
|
|
356
|
+
) {
|
|
357
|
+
throw error;
|
|
243
358
|
}
|
|
359
|
+
}
|
|
244
360
|
}
|
|
361
|
+
}
|
|
245
362
|
}
|
|
363
|
+
|
|
246
364
|
/**
|
|
247
365
|
* Apply advanced performance indexes
|
|
248
|
-
*/
|
|
249
|
-
|
|
250
|
-
|
|
366
|
+
*/
|
|
367
|
+
function applyAdvancedIndexes(db) {
|
|
368
|
+
// Check which tables exist
|
|
369
|
+
const tables = db
|
|
370
|
+
.prepare(
|
|
371
|
+
`
|
|
251
372
|
SELECT name FROM sqlite_master
|
|
252
373
|
WHERE type='table' AND name NOT LIKE 'sqlite_%'
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
374
|
+
`,
|
|
375
|
+
)
|
|
376
|
+
.all()
|
|
377
|
+
.map((row) => row.name);
|
|
378
|
+
|
|
379
|
+
const tableSet = new Set(tables);
|
|
380
|
+
const indexes = [];
|
|
381
|
+
|
|
382
|
+
// Composite indexes for common queries
|
|
383
|
+
if (tableSet.has('tasks')) {
|
|
384
|
+
indexes.push(
|
|
385
|
+
'CREATE INDEX IF NOT EXISTS idx_tasks_swarm_status ON tasks(swarm_id, status)',
|
|
386
|
+
'CREATE INDEX IF NOT EXISTS idx_tasks_full ON tasks(swarm_id, agent_id, status, priority)',
|
|
387
|
+
"CREATE INDEX IF NOT EXISTS idx_tasks_pending ON tasks(swarm_id, priority) WHERE status = 'pending'",
|
|
388
|
+
);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
if (tableSet.has('agents')) {
|
|
392
|
+
indexes.push(
|
|
393
|
+
'CREATE INDEX IF NOT EXISTS idx_agents_swarm_type ON agents(swarm_id, type)',
|
|
394
|
+
'CREATE INDEX IF NOT EXISTS idx_agents_full ON agents(swarm_id, type, status, role)',
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
if (tableSet.has('collective_memory')) {
|
|
399
|
+
indexes.push(
|
|
400
|
+
'CREATE INDEX IF NOT EXISTS idx_memory_swarm_key ON collective_memory(swarm_id, key)',
|
|
401
|
+
);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
if (tableSet.has('swarms')) {
|
|
405
|
+
indexes.push(
|
|
406
|
+
"CREATE INDEX IF NOT EXISTS idx_swarms_active ON swarms(id, name) WHERE status = 'active'",
|
|
407
|
+
);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
indexes.forEach((sql) => {
|
|
411
|
+
try {
|
|
412
|
+
db.exec(sql);
|
|
413
|
+
} catch (error) {
|
|
414
|
+
console.warn(`Warning: Could not create index: ${error.message}`);
|
|
268
415
|
}
|
|
269
|
-
|
|
270
|
-
try {
|
|
271
|
-
db.exec(sql);
|
|
272
|
-
} catch (error) {
|
|
273
|
-
console.warn(`Warning: Could not create index: ${error.message}`);
|
|
274
|
-
}
|
|
275
|
-
});
|
|
416
|
+
});
|
|
276
417
|
}
|
|
418
|
+
|
|
277
419
|
/**
|
|
278
420
|
* Add performance tracking tables
|
|
279
|
-
*/
|
|
280
|
-
|
|
281
|
-
|
|
421
|
+
*/
|
|
422
|
+
function addPerformanceTracking(db) {
|
|
423
|
+
// Agent performance metrics
|
|
424
|
+
db.exec(`
|
|
282
425
|
CREATE TABLE IF NOT EXISTS agent_performance (
|
|
283
426
|
agent_id TEXT PRIMARY KEY,
|
|
284
427
|
tasks_completed INTEGER DEFAULT 0,
|
|
@@ -289,8 +432,9 @@ import ora from "ora";
|
|
|
289
432
|
FOREIGN KEY (agent_id) REFERENCES agents(id)
|
|
290
433
|
)
|
|
291
434
|
`);
|
|
292
|
-
|
|
293
|
-
|
|
435
|
+
|
|
436
|
+
// Swarm performance metrics
|
|
437
|
+
db.exec(`
|
|
294
438
|
CREATE TABLE IF NOT EXISTS swarm_performance (
|
|
295
439
|
swarm_id TEXT PRIMARY KEY,
|
|
296
440
|
total_tasks INTEGER DEFAULT 0,
|
|
@@ -301,8 +445,9 @@ import ora from "ora";
|
|
|
301
445
|
FOREIGN KEY (swarm_id) REFERENCES swarms(id)
|
|
302
446
|
)
|
|
303
447
|
`);
|
|
304
|
-
|
|
305
|
-
|
|
448
|
+
|
|
449
|
+
// Create triggers to update performance metrics
|
|
450
|
+
db.exec(`
|
|
306
451
|
CREATE TRIGGER IF NOT EXISTS update_agent_performance
|
|
307
452
|
AFTER UPDATE OF status ON tasks
|
|
308
453
|
WHEN NEW.status = 'completed' OR NEW.status = 'failed'
|
|
@@ -318,89 +463,121 @@ import ora from "ora";
|
|
|
318
463
|
END
|
|
319
464
|
`);
|
|
320
465
|
}
|
|
466
|
+
|
|
321
467
|
/**
|
|
322
468
|
* Add memory optimization features
|
|
323
|
-
*/
|
|
324
|
-
|
|
325
|
-
|
|
469
|
+
*/
|
|
470
|
+
function addMemoryOptimization(db) {
|
|
471
|
+
// Check if collective_memory table exists
|
|
472
|
+
const tables = db
|
|
473
|
+
.prepare(
|
|
474
|
+
`
|
|
326
475
|
SELECT name FROM sqlite_master
|
|
327
476
|
WHERE type='table' AND name = 'collective_memory'
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
477
|
+
`,
|
|
478
|
+
)
|
|
479
|
+
.all();
|
|
480
|
+
|
|
481
|
+
if (tables.length === 0) {
|
|
482
|
+
console.log('collective_memory table does not exist, skipping memory optimization');
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
// Check and add access_count column
|
|
487
|
+
const hasAccessCount = db
|
|
488
|
+
.prepare(
|
|
489
|
+
`
|
|
335
490
|
SELECT COUNT(*) as count FROM pragma_table_info('collective_memory')
|
|
336
491
|
WHERE name = 'access_count'
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
492
|
+
`,
|
|
493
|
+
)
|
|
494
|
+
.get();
|
|
495
|
+
|
|
496
|
+
if (!hasAccessCount || hasAccessCount.count === 0) {
|
|
497
|
+
try {
|
|
498
|
+
db.exec(`
|
|
341
499
|
ALTER TABLE collective_memory
|
|
342
500
|
ADD COLUMN access_count INTEGER DEFAULT 0
|
|
343
501
|
`);
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
}
|
|
502
|
+
console.log('Added access_count column to collective_memory table');
|
|
503
|
+
} catch (error) {
|
|
504
|
+
if (!error.message.includes('duplicate column') && !error.message.includes('no such table')) {
|
|
505
|
+
throw error;
|
|
506
|
+
}
|
|
350
507
|
}
|
|
351
|
-
|
|
352
|
-
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// Check and add accessed_at column (not last_accessed)
|
|
511
|
+
const hasAccessedAt = db
|
|
512
|
+
.prepare(
|
|
513
|
+
`
|
|
353
514
|
SELECT COUNT(*) as count FROM pragma_table_info('collective_memory')
|
|
354
515
|
WHERE name = 'accessed_at'
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
516
|
+
`,
|
|
517
|
+
)
|
|
518
|
+
.get();
|
|
519
|
+
|
|
520
|
+
if (!hasAccessedAt || hasAccessedAt.count === 0) {
|
|
521
|
+
try {
|
|
522
|
+
db.exec(`
|
|
359
523
|
ALTER TABLE collective_memory
|
|
360
524
|
ADD COLUMN accessed_at DATETIME
|
|
361
525
|
`);
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
}
|
|
526
|
+
console.log('Added accessed_at column to collective_memory table');
|
|
527
|
+
} catch (error) {
|
|
528
|
+
if (!error.message.includes('duplicate column') && !error.message.includes('no such table')) {
|
|
529
|
+
throw error;
|
|
530
|
+
}
|
|
368
531
|
}
|
|
369
|
-
|
|
370
|
-
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
// Add compressed and size columns if missing
|
|
535
|
+
const hasCompressed = db
|
|
536
|
+
.prepare(
|
|
537
|
+
`
|
|
371
538
|
SELECT COUNT(*) as count FROM pragma_table_info('collective_memory')
|
|
372
539
|
WHERE name = 'compressed'
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
540
|
+
`,
|
|
541
|
+
)
|
|
542
|
+
.get();
|
|
543
|
+
|
|
544
|
+
if (!hasCompressed || hasCompressed.count === 0) {
|
|
545
|
+
try {
|
|
546
|
+
db.exec(`
|
|
377
547
|
ALTER TABLE collective_memory
|
|
378
548
|
ADD COLUMN compressed INTEGER DEFAULT 0
|
|
379
549
|
`);
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
}
|
|
550
|
+
} catch (error) {
|
|
551
|
+
if (!error.message.includes('duplicate column') && !error.message.includes('no such table')) {
|
|
552
|
+
throw error;
|
|
553
|
+
}
|
|
385
554
|
}
|
|
386
|
-
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
const hasSize = db
|
|
558
|
+
.prepare(
|
|
559
|
+
`
|
|
387
560
|
SELECT COUNT(*) as count FROM pragma_table_info('collective_memory')
|
|
388
561
|
WHERE name = 'size'
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
562
|
+
`,
|
|
563
|
+
)
|
|
564
|
+
.get();
|
|
565
|
+
|
|
566
|
+
if (!hasSize || hasSize.count === 0) {
|
|
567
|
+
try {
|
|
568
|
+
db.exec(`
|
|
393
569
|
ALTER TABLE collective_memory
|
|
394
570
|
ADD COLUMN size INTEGER DEFAULT 0
|
|
395
571
|
`);
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
}
|
|
572
|
+
} catch (error) {
|
|
573
|
+
if (!error.message.includes('duplicate column') && !error.message.includes('no such table')) {
|
|
574
|
+
throw error;
|
|
575
|
+
}
|
|
401
576
|
}
|
|
402
|
-
|
|
403
|
-
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
// Create memory usage summary view
|
|
580
|
+
db.exec(`
|
|
404
581
|
CREATE VIEW IF NOT EXISTS memory_usage_summary AS
|
|
405
582
|
SELECT
|
|
406
583
|
swarm_id,
|
|
@@ -411,8 +588,9 @@ import ora from "ora";
|
|
|
411
588
|
FROM collective_memory
|
|
412
589
|
GROUP BY swarm_id
|
|
413
590
|
`);
|
|
414
|
-
|
|
415
|
-
|
|
591
|
+
|
|
592
|
+
// Add memory cleanup tracking
|
|
593
|
+
db.exec(`
|
|
416
594
|
CREATE TABLE IF NOT EXISTS memory_cleanup_log (
|
|
417
595
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
418
596
|
swarm_id TEXT,
|
|
@@ -423,11 +601,13 @@ import ora from "ora";
|
|
|
423
601
|
)
|
|
424
602
|
`);
|
|
425
603
|
}
|
|
604
|
+
|
|
426
605
|
/**
|
|
427
606
|
* Add behavioral tracking features
|
|
428
|
-
*/
|
|
429
|
-
|
|
430
|
-
|
|
607
|
+
*/
|
|
608
|
+
function addBehavioralTracking(db) {
|
|
609
|
+
// Agent interaction patterns
|
|
610
|
+
db.exec(`
|
|
431
611
|
CREATE TABLE IF NOT EXISTS agent_interactions (
|
|
432
612
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
433
613
|
from_agent_id TEXT,
|
|
@@ -440,8 +620,9 @@ import ora from "ora";
|
|
|
440
620
|
FOREIGN KEY (swarm_id) REFERENCES swarms(id)
|
|
441
621
|
)
|
|
442
622
|
`);
|
|
443
|
-
|
|
444
|
-
|
|
623
|
+
|
|
624
|
+
// Behavioral patterns
|
|
625
|
+
db.exec(`
|
|
445
626
|
CREATE TABLE IF NOT EXISTS behavioral_patterns (
|
|
446
627
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
447
628
|
swarm_id TEXT,
|
|
@@ -454,170 +635,238 @@ import ora from "ora";
|
|
|
454
635
|
FOREIGN KEY (swarm_id) REFERENCES swarms(id)
|
|
455
636
|
)
|
|
456
637
|
`);
|
|
457
|
-
|
|
458
|
-
|
|
638
|
+
|
|
639
|
+
// Create indexes for behavioral analysis
|
|
640
|
+
db.exec(`
|
|
459
641
|
CREATE INDEX IF NOT EXISTS idx_interactions_swarm ON agent_interactions(swarm_id);
|
|
460
642
|
CREATE INDEX IF NOT EXISTS idx_interactions_agents ON agent_interactions(from_agent_id, to_agent_id);
|
|
461
643
|
CREATE INDEX IF NOT EXISTS idx_patterns_swarm_type ON behavioral_patterns(swarm_id, pattern_type);
|
|
462
644
|
`);
|
|
463
645
|
}
|
|
646
|
+
|
|
464
647
|
/**
|
|
465
648
|
* Database maintenance utilities
|
|
466
|
-
*/
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
649
|
+
*/
|
|
650
|
+
export async function performMaintenance(dbPath, options = {}) {
|
|
651
|
+
const spinner = ora('Performing database maintenance...').start();
|
|
652
|
+
|
|
653
|
+
try {
|
|
654
|
+
const db = new Database(dbPath);
|
|
655
|
+
|
|
656
|
+
// Clean up old memory entries
|
|
657
|
+
if (options.cleanMemory) {
|
|
658
|
+
// Check if collective_memory table exists
|
|
659
|
+
const hasMemoryTable = db
|
|
660
|
+
.prepare(
|
|
661
|
+
`
|
|
474
662
|
SELECT name FROM sqlite_master
|
|
475
663
|
WHERE type='table' AND name='collective_memory'
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
664
|
+
`,
|
|
665
|
+
)
|
|
666
|
+
.get();
|
|
667
|
+
|
|
668
|
+
if (hasMemoryTable) {
|
|
669
|
+
spinner.text = 'Cleaning old memory entries...';
|
|
670
|
+
const cutoffDate = new Date();
|
|
671
|
+
cutoffDate.setDate(cutoffDate.getDate() - (options.memoryRetentionDays || 30));
|
|
672
|
+
|
|
673
|
+
try {
|
|
674
|
+
const result = db
|
|
675
|
+
.prepare(
|
|
676
|
+
`
|
|
483
677
|
DELETE FROM collective_memory
|
|
484
678
|
WHERE accessed_at < ? AND access_count < 5
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
}
|
|
679
|
+
`,
|
|
680
|
+
)
|
|
681
|
+
.run(cutoffDate.toISOString());
|
|
682
|
+
|
|
683
|
+
console.log(chalk.green(`✓ Removed ${result.changes} old memory entries`));
|
|
684
|
+
} catch (error) {
|
|
685
|
+
console.warn(chalk.yellow(`⚠ Could not clean memory entries: ${error.message}`));
|
|
493
686
|
}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
687
|
+
} else {
|
|
688
|
+
console.log(chalk.yellow('⚠ collective_memory table not found, skipping memory cleanup'));
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
// Archive completed tasks
|
|
693
|
+
if (options.archiveTasks) {
|
|
694
|
+
spinner.text = 'Archiving completed tasks...';
|
|
695
|
+
|
|
696
|
+
// Create archive table if not exists
|
|
697
|
+
db.exec(`
|
|
499
698
|
CREATE TABLE IF NOT EXISTS tasks_archive AS
|
|
500
699
|
SELECT * FROM tasks WHERE 1=0
|
|
501
700
|
`);
|
|
502
|
-
|
|
503
|
-
|
|
701
|
+
|
|
702
|
+
// Check if completed_at column exists
|
|
703
|
+
const hasCompletedAt = db
|
|
704
|
+
.prepare(
|
|
705
|
+
`
|
|
504
706
|
SELECT COUNT(*) as count FROM pragma_table_info('tasks')
|
|
505
707
|
WHERE name = 'completed_at'
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
708
|
+
`,
|
|
709
|
+
)
|
|
710
|
+
.get();
|
|
711
|
+
|
|
712
|
+
let archived = { changes: 0 };
|
|
713
|
+
|
|
714
|
+
if (hasCompletedAt && hasCompletedAt.count > 0) {
|
|
715
|
+
// Move old completed tasks using completed_at
|
|
716
|
+
const archiveCutoff = new Date();
|
|
717
|
+
archiveCutoff.setDate(archiveCutoff.getDate() - (options.taskRetentionDays || 7));
|
|
718
|
+
|
|
719
|
+
db.exec(`
|
|
515
720
|
INSERT INTO tasks_archive
|
|
516
721
|
SELECT * FROM tasks
|
|
517
722
|
WHERE status = 'completed' AND completed_at < '${archiveCutoff.toISOString()}'
|
|
518
723
|
`);
|
|
519
|
-
|
|
724
|
+
|
|
725
|
+
archived = db
|
|
726
|
+
.prepare(
|
|
727
|
+
`
|
|
520
728
|
DELETE FROM tasks
|
|
521
729
|
WHERE status = 'completed' AND completed_at < ?
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
730
|
+
`,
|
|
731
|
+
)
|
|
732
|
+
.run(archiveCutoff.toISOString());
|
|
733
|
+
} else {
|
|
734
|
+
// Use created_at as fallback
|
|
735
|
+
const archiveCutoff = new Date();
|
|
736
|
+
archiveCutoff.setDate(archiveCutoff.getDate() - (options.taskRetentionDays || 7));
|
|
737
|
+
|
|
738
|
+
db.exec(`
|
|
528
739
|
INSERT INTO tasks_archive
|
|
529
740
|
SELECT * FROM tasks
|
|
530
741
|
WHERE status = 'completed' AND created_at < '${archiveCutoff.toISOString()}'
|
|
531
742
|
`);
|
|
532
|
-
|
|
743
|
+
|
|
744
|
+
archived = db
|
|
745
|
+
.prepare(
|
|
746
|
+
`
|
|
533
747
|
DELETE FROM tasks
|
|
534
748
|
WHERE status = 'completed' AND created_at < ?
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
console.error(chalk.red('Error:'), error.message);
|
|
749
|
+
`,
|
|
750
|
+
)
|
|
751
|
+
.run(archiveCutoff.toISOString());
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
console.log(chalk.green(`✓ Archived ${archived.changes} completed tasks`));
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
// Update statistics
|
|
758
|
+
spinner.text = 'Updating database statistics...';
|
|
759
|
+
db.exec('ANALYZE');
|
|
760
|
+
|
|
761
|
+
// Check integrity
|
|
762
|
+
if (options.checkIntegrity) {
|
|
763
|
+
spinner.text = 'Checking database integrity...';
|
|
764
|
+
const integrityCheck = db.prepare('PRAGMA integrity_check').get();
|
|
765
|
+
if (integrityCheck.integrity_check === 'ok') {
|
|
766
|
+
console.log(chalk.green('✓ Database integrity check passed'));
|
|
767
|
+
} else {
|
|
768
|
+
console.log(chalk.yellow('⚠ Database integrity issues detected'));
|
|
769
|
+
}
|
|
557
770
|
}
|
|
771
|
+
|
|
772
|
+
db.close();
|
|
773
|
+
spinner.succeed('Database maintenance complete!');
|
|
774
|
+
} catch (error) {
|
|
775
|
+
spinner.fail('Database maintenance failed');
|
|
776
|
+
console.error(chalk.red('Error:'), error.message);
|
|
777
|
+
}
|
|
558
778
|
}
|
|
779
|
+
|
|
559
780
|
/**
|
|
560
781
|
* Generate optimization report
|
|
561
|
-
*/
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
782
|
+
*/
|
|
783
|
+
export async function generateOptimizationReport(dbPath) {
|
|
784
|
+
try {
|
|
785
|
+
const db = new Database(dbPath, { readonly: true });
|
|
786
|
+
|
|
787
|
+
const report = {
|
|
788
|
+
schemaVersion: getSchemaVersion(db),
|
|
789
|
+
tables: {},
|
|
790
|
+
indexes: [],
|
|
791
|
+
performance: {},
|
|
792
|
+
};
|
|
793
|
+
|
|
794
|
+
// Get table statistics
|
|
795
|
+
const tables = db
|
|
796
|
+
.prepare(
|
|
797
|
+
`
|
|
574
798
|
SELECT name FROM sqlite_master WHERE type='table'
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
799
|
+
`,
|
|
800
|
+
)
|
|
801
|
+
.all();
|
|
802
|
+
|
|
803
|
+
for (const table of tables) {
|
|
804
|
+
const count = db.prepare(`SELECT COUNT(*) as count FROM ${table.name}`).get();
|
|
805
|
+
const size = db
|
|
806
|
+
.prepare(
|
|
807
|
+
`
|
|
579
808
|
SELECT SUM(pgsize) as size FROM dbstat WHERE name=?
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
809
|
+
`,
|
|
810
|
+
)
|
|
811
|
+
.get(table.name);
|
|
812
|
+
|
|
813
|
+
report.tables[table.name] = {
|
|
814
|
+
rowCount: count.count,
|
|
815
|
+
sizeBytes: size?.size || 0,
|
|
816
|
+
};
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
// Get index information
|
|
820
|
+
report.indexes = db
|
|
821
|
+
.prepare(
|
|
822
|
+
`
|
|
588
823
|
SELECT name, tbl_name FROM sqlite_master WHERE type='index'
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
824
|
+
`,
|
|
825
|
+
)
|
|
826
|
+
.all();
|
|
827
|
+
|
|
828
|
+
// Get performance metrics (check if completed_at column exists)
|
|
829
|
+
let avgTaskTime = { avg_minutes: 0 };
|
|
830
|
+
try {
|
|
831
|
+
// First check if completed_at column exists
|
|
832
|
+
const hasCompletedAt = db
|
|
833
|
+
.prepare(
|
|
834
|
+
`
|
|
597
835
|
SELECT COUNT(*) as count FROM pragma_table_info('tasks')
|
|
598
836
|
WHERE name = 'completed_at'
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
837
|
+
`,
|
|
838
|
+
)
|
|
839
|
+
.get();
|
|
840
|
+
|
|
841
|
+
if (hasCompletedAt && hasCompletedAt.count > 0) {
|
|
842
|
+
avgTaskTime = db
|
|
843
|
+
.prepare(
|
|
844
|
+
`
|
|
602
845
|
SELECT AVG(julianday(completed_at) - julianday(created_at)) * 24 * 60 as avg_minutes
|
|
603
846
|
FROM tasks WHERE completed_at IS NOT NULL
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
console.warn('Could not calculate average task time:', error.message);
|
|
609
|
-
}
|
|
610
|
-
report.performance.avgTaskCompletionMinutes = avgTaskTime?.avg_minutes || 0;
|
|
611
|
-
db.close();
|
|
612
|
-
return report;
|
|
847
|
+
`,
|
|
848
|
+
)
|
|
849
|
+
.get();
|
|
850
|
+
}
|
|
613
851
|
} catch (error) {
|
|
614
|
-
|
|
615
|
-
|
|
852
|
+
// If error, just use default value
|
|
853
|
+
console.warn('Could not calculate average task time:', error.message);
|
|
616
854
|
}
|
|
855
|
+
|
|
856
|
+
report.performance.avgTaskCompletionMinutes = avgTaskTime?.avg_minutes || 0;
|
|
857
|
+
|
|
858
|
+
db.close();
|
|
859
|
+
|
|
860
|
+
return report;
|
|
861
|
+
} catch (error) {
|
|
862
|
+
console.error('Error generating report:', error);
|
|
863
|
+
return null;
|
|
864
|
+
}
|
|
617
865
|
}
|
|
866
|
+
|
|
618
867
|
// Export for use in CLI
|
|
619
868
|
export default {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
869
|
+
optimizeHiveMindDatabase,
|
|
870
|
+
performMaintenance,
|
|
871
|
+
generateOptimizationReport,
|
|
623
872
|
};
|