claude-flow-novice 2.3.4 → 2.3.6
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/booster/performance-benchmark.js +1 -1
- package/dist/src/booster/wasm-demo.js +1 -1
- package/dist/src/cli/command-registry.js +2 -2
- package/dist/src/cli/help-formatter.js +137 -109
- package/dist/src/cli/simple-cli.js +2528 -2121
- package/dist/src/cli/simple-commands/sparc/refinement.js +3 -3
- package/dist/src/cli/validation-helper.js +98 -49
- package/dist/src/commands/suggest-templates.js +4 -4
- package/dist/src/core/version.js +23 -15
- package/dist/src/memory/swarm-memory.js +603 -470
- package/dist/src/slash-commands/fullstack.js +2 -2
- package/dist/src/slash-commands/parse-epic.js +1 -1
- package/package.json +1 -1
- package/scripts/postinstall.js +41 -31
- package/dist/scripts/.claude-flow/metrics/agent-metrics.json +0 -1
- package/dist/scripts/.claude-flow/metrics/performance.json +0 -9
- package/dist/scripts/.claude-flow/metrics/task-metrics.json +0 -10
- package/dist/scripts/CLEANUP_OPTIMIZATION_REPORT.json +0 -312
- package/dist/scripts/CLEANUP_PERFORMANCE_OPTIMIZATION.md +0 -387
- package/dist/scripts/CLEANUP_QUICK_START.md +0 -268
- package/dist/scripts/CLEANUP_TEST_RESULTS.md +0 -205
- package/dist/scripts/README.md +0 -339
- package/dist/scripts/ace-query.sh +0 -384
- package/dist/scripts/agent-token-analysis.js +0 -430
- package/dist/scripts/auto-setup.js +0 -332
- package/dist/scripts/build/README.md +0 -167
- package/dist/scripts/build/build-config.js +0 -27
- package/dist/scripts/build/build-prompt-copier.sh +0 -30
- package/dist/scripts/build/performance-monitor.js +0 -869
- package/dist/scripts/build/prepare-publish.js +0 -150
- package/dist/scripts/build/typescript-fixer.js +0 -621
- package/dist/scripts/build/unified-builder.sh +0 -428
- package/dist/scripts/build/update-bin-version.js +0 -32
- package/dist/scripts/build/validate-agents.js +0 -238
- package/dist/scripts/build-index.js +0 -43
- package/dist/scripts/build-orchestrator.js +0 -320
- package/dist/scripts/check-routing-stats.cjs +0 -122
- package/dist/scripts/ci-validation.js +0 -375
- package/dist/scripts/cleanup-blocking-coordination.sh +0 -420
- package/dist/scripts/cleanup-idle-sessions.sh +0 -118
- package/dist/scripts/collect-build-metrics.js +0 -65
- package/dist/scripts/demo/README.md +0 -79
- package/dist/scripts/demo/autoscaling-demo-simplified.js +0 -963
- package/dist/scripts/demo/comprehensive-dashboard-test.js +0 -693
- package/dist/scripts/demo/confidence-log.js +0 -87
- package/dist/scripts/demo/confidence-report.js +0 -82
- package/dist/scripts/demo/demo-multi-swarm-coordination.js +0 -325
- package/dist/scripts/demo/demo-production-deployment.js +0 -399
- package/dist/scripts/demo/demo-visualization-system.js +0 -149
- package/dist/scripts/demo/performance-analysis.cjs +0 -71
- package/dist/scripts/demo/performance-analysis.js +0 -71
- package/dist/scripts/demo/test-autoscaling-demo.js +0 -314
- package/dist/scripts/dependency-optimizer.js +0 -349
- package/dist/scripts/dependency-security-assessment.js +0 -331
- package/dist/scripts/deploy-sdk.sh +0 -176
- package/dist/scripts/deployment-readiness-report.json +0 -179
- package/dist/scripts/dev/README.md +0 -264
- package/dist/scripts/dev/claude-flow-wrapper.sh +0 -35
- package/dist/scripts/dev/claude-monitor.py +0 -419
- package/dist/scripts/dev/claude-sparc.sh +0 -562
- package/dist/scripts/dev/claude-wrapper.sh +0 -17
- package/dist/scripts/dev/demo-phase3-compliance.js +0 -172
- package/dist/scripts/dev/demo-task-system.ts +0 -224
- package/dist/scripts/dev/deployment-validator.js +0 -315
- package/dist/scripts/dev/spawn-claude-terminal.sh +0 -32
- package/dist/scripts/dev/start-portal.sh +0 -506
- package/dist/scripts/dev/start-web-ui.js +0 -15
- package/dist/scripts/dev/stop-portal.sh +0 -311
- package/dist/scripts/dev/validate-examples.ts +0 -288
- package/dist/scripts/dev/validate-phase2.cjs +0 -451
- package/dist/scripts/dev/validate-phase2.js +0 -785
- package/dist/scripts/dev/validate-phase3.cjs +0 -208
- package/dist/scripts/dev/validate-security-remediation.js +0 -1
- package/dist/scripts/ecosystem.config.cjs +0 -90
- package/dist/scripts/enhanced-memory-spiral-killer.sh +0 -221
- package/dist/scripts/fix-js-extensions.js +0 -167
- package/dist/scripts/generate-basic-types.js +0 -73
- package/dist/scripts/generate-changelog.js +0 -318
- package/dist/scripts/git-hooks/pre-commit.sh +0 -143
- package/dist/scripts/health-checks.js +0 -634
- package/dist/scripts/hook-wrapper.sh +0 -54
- package/dist/scripts/install/README.md +0 -375
- package/dist/scripts/install/REDIS_SETUP_VALIDATION.json +0 -245
- package/dist/scripts/install/check-prerequisites.js +0 -303
- package/dist/scripts/install/config-wizard.js +0 -606
- package/dist/scripts/install/dependency-checker.js +0 -385
- package/dist/scripts/install/health-check.js +0 -765
- package/dist/scripts/install/install.js +0 -256
- package/dist/scripts/install/installation-benchmark.js +0 -461
- package/dist/scripts/install/quick-install.js +0 -720
- package/dist/scripts/install/quick-start-wizard.js +0 -295
- package/dist/scripts/install/redis-cli.js +0 -289
- package/dist/scripts/install/redis-install-guides.md +0 -407
- package/dist/scripts/install/redis-setup.js +0 -559
- package/dist/scripts/install/redis-test.js +0 -278
- package/dist/scripts/install/service-manager.js +0 -672
- package/dist/scripts/install/setup.js +0 -832
- package/dist/scripts/install/uninstall.js +0 -526
- package/dist/scripts/install/update.js +0 -461
- package/dist/scripts/install-pre-commit-hook.sh +0 -127
- package/dist/scripts/legacy/README.md +0 -272
- package/dist/scripts/legacy/batch-fix-ts.sh +0 -54
- package/dist/scripts/legacy/build-migration.sh +0 -105
- package/dist/scripts/legacy/build-monitor.js +0 -209
- package/dist/scripts/legacy/build-with-filter.sh +0 -84
- package/dist/scripts/legacy/build-workaround.sh +0 -71
- package/dist/scripts/legacy/fix-ts-advanced.js +0 -358
- package/dist/scripts/legacy/fix-ts-final.sh +0 -50
- package/dist/scripts/legacy/fix-ts-targeted.sh +0 -49
- package/dist/scripts/legacy/fix-typescript-errors.js +0 -305
- package/dist/scripts/legacy/force-build.sh +0 -63
- package/dist/scripts/legacy/optimize-performance.js +0 -400
- package/dist/scripts/legacy/performance-monitor.js +0 -263
- package/dist/scripts/legacy/performance-monitoring.js +0 -532
- package/dist/scripts/legacy/performance-test-runner.js +0 -645
- package/dist/scripts/legacy/quick-fix-ts.js +0 -281
- package/dist/scripts/legacy/safe-build.sh +0 -63
- package/dist/scripts/memory-monitor-coordinator.js +0 -451
- package/dist/scripts/migrate-to-sdk.sh +0 -520
- package/dist/scripts/migration/QUICK-START.md +0 -189
- package/dist/scripts/migration/QUICK-START.md.backup-1760135091363 +0 -189
- package/dist/scripts/migration/README.md +0 -464
- package/dist/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md +0 -500
- package/dist/scripts/migration/TASK-1.3.2-COMPLETION-REPORT.md.backup-1760135091348 +0 -500
- package/dist/scripts/migration/UPDATE-PATHS-README.md +0 -464
- package/dist/scripts/migration/UPDATE-PATHS-README.md.backup-1760135091337 +0 -464
- package/dist/scripts/migration/example-patterns.json +0 -19
- package/dist/scripts/migration/install-arm64.js +0 -78
- package/dist/scripts/migration/install.js +0 -83
- package/dist/scripts/migration/migrate-hooks.js +0 -173
- package/dist/scripts/migration/migration-examples.ts +0 -318
- package/dist/scripts/migration/reorganize-workspace.js +0 -504
- package/dist/scripts/migration/test-update-paths.js +0 -359
- package/dist/scripts/migration/update-paths.js +0 -664
- package/dist/scripts/migration/validate-migration.js +0 -647
- package/dist/scripts/monitor-loop.sh +0 -65
- package/dist/scripts/monitor-memory.sh +0 -47
- package/dist/scripts/monitor-migration.js +0 -339
- package/dist/scripts/monitor.py +0 -43
- package/dist/scripts/monitoring/README.md +0 -178
- package/dist/scripts/monitoring/alert-monitor.sh +0 -220
- package/dist/scripts/monitoring/analyze-resources.sh +0 -199
- package/dist/scripts/monitoring/dashboards/rate-limiting-dashboard.json +0 -211
- package/dist/scripts/monitoring/dynamic-monitor.sh +0 -85
- package/dist/scripts/monitoring/launch-stability-test.sh +0 -184
- package/dist/scripts/monitoring/monitor-test.sh +0 -93
- package/dist/scripts/monitoring/pre-test-validation.sh +0 -208
- package/dist/scripts/monitoring/quick-test-alerting.sh +0 -118
- package/dist/scripts/monitoring/quick-test-rate-limiting.sh +0 -206
- package/dist/scripts/monitoring/rate-limiting-monitor.sh +0 -380
- package/dist/scripts/monitoring/resource-monitor.sh +0 -126
- package/dist/scripts/monitoring/stability-monitor.js +0 -429
- package/dist/scripts/monitoring/test-monitor-quick.sh +0 -54
- package/dist/scripts/monitoring/view-alerts.sh +0 -307
- package/dist/scripts/npm-metrics-collector.js +0 -482
- package/dist/scripts/npm-package-validation.cjs +0 -299
- package/dist/scripts/optimization/build-optimizer.js +0 -438
- package/dist/scripts/optimization/config-validator.js +0 -761
- package/dist/scripts/optimization/test-optimization.js +0 -432
- package/dist/scripts/optimization/unified-activation.js +0 -839
- package/dist/scripts/optimize-package-swarm.js +0 -54
- package/dist/scripts/performance/ACTIVATION_COMMANDS.md +0 -292
- package/dist/scripts/performance/sqlite-enhanced-activation.sh +0 -583
- package/dist/scripts/performance/test-enhanced-backend.sh +0 -504
- package/dist/scripts/performance-monitor.js +0 -644
- package/dist/scripts/performance-test-runner.js +0 -698
- package/dist/scripts/post-deployment-monitoring.js +0 -350
- package/dist/scripts/post-edit-pipeline.js +0 -2091
- package/dist/scripts/post-install-claude-md.js +0 -78
- package/dist/scripts/postinstall.js +0 -84
- package/dist/scripts/pre-publish-validation.cjs +0 -212
- package/dist/scripts/pre-publish-validation.js +0 -429
- package/dist/scripts/redis-lua/cleanup-blocking-coordination.lua +0 -198
- package/dist/scripts/release-announcement.js +0 -425
- package/dist/scripts/release-notification.js +0 -248
- package/dist/scripts/release-rollback.js +0 -376
- package/dist/scripts/release-validation.js +0 -460
- package/dist/scripts/rollback-sdk.sh +0 -66
- package/dist/scripts/run-production-validation.ts +0 -590
- package/dist/scripts/run-stability-validation.sh +0 -687
- package/dist/scripts/security/README.md +0 -339
- package/dist/scripts/security/deployment-validation.cjs +0 -279
- package/dist/scripts/security/envelope-encryption-confidence-report.cjs +0 -422
- package/dist/scripts/security/install-git-hooks.sh +0 -132
- package/dist/scripts/security/install-git-secrets.sh +0 -295
- package/dist/scripts/security/rotate-api-keys.js +0 -469
- package/dist/scripts/security/ruv-swarm-safe.js +0 -74
- package/dist/scripts/security/security-audit.cjs +0 -538
- package/dist/scripts/security/setup-redis-auth.sh +0 -397
- package/dist/scripts/security/validate-envelope-encryption.cjs +0 -340
- package/dist/scripts/security-scan.js +0 -492
- package/dist/scripts/src/web/frontend/.claude-flow/metrics/agent-metrics.json +0 -1
- package/dist/scripts/src/web/frontend/.claude-flow/metrics/performance.json +0 -9
- package/dist/scripts/src/web/frontend/.claude-flow/metrics/task-metrics.json +0 -10
- package/dist/scripts/switch-api.sh +0 -159
- package/dist/scripts/sync-agents.js +0 -290
- package/dist/scripts/test/50-agent-test.js +0 -625
- package/dist/scripts/test/NEW_STABILITY_TEST_GUIDE.md +0 -407
- package/dist/scripts/test/README.md +0 -236
- package/dist/scripts/test/STABILITY_TEST_EXAMPLE.md +0 -347
- package/dist/scripts/test/STABILITY_TEST_README.md +0 -480
- package/dist/scripts/test/agent-worker.js +0 -309
- package/dist/scripts/test/ai-coordination-test.js +0 -650
- package/dist/scripts/test/ai-mesh-coordination-test.js +0 -416
- package/dist/scripts/test/check-links.ts +0 -274
- package/dist/scripts/test/check-performance-regression.ts +0 -168
- package/dist/scripts/test/cli-agent-coordination-test.js +0 -313
- package/dist/scripts/test/coordinator-multilingual-test.js +0 -396
- package/dist/scripts/test/coordinator-transparency-demo.js +0 -585
- package/dist/scripts/test/coverage-report.ts +0 -692
- package/dist/scripts/test/generate-swarm-tests.js +0 -633
- package/dist/scripts/test/integration-test-validation.cjs +0 -253
- package/dist/scripts/test/load-test-swarm.js +0 -576
- package/dist/scripts/test/mesh-coordination-zero-overlap-test.js +0 -740
- package/dist/scripts/test/multilingual-hello-world-test.js +0 -390
- package/dist/scripts/test/quick-multilingual-demo.js +0 -464
- package/dist/scripts/test/real-agent-test.js +0 -312
- package/dist/scripts/test/run-phase3-compliance-tests.js +0 -427
- package/dist/scripts/test/run-stability-test-examples.sh +0 -292
- package/dist/scripts/test/stability-results/stability-metrics.jsonl +0 -83
- package/dist/scripts/test/stability-results/stability-test-report.json +0 -128
- package/dist/scripts/test/stability-results/stability-test.log +0 -1827
- package/dist/scripts/test/stability-test-50-agents.js +0 -734
- package/dist/scripts/test/test-batch-tasks.ts +0 -29
- package/dist/scripts/test/test-byzantine-resolution.js +0 -246
- package/dist/scripts/test/test-claude-spawn-options.sh +0 -63
- package/dist/scripts/test/test-cli-wizard.js +0 -331
- package/dist/scripts/test/test-comprehensive.js +0 -401
- package/dist/scripts/test/test-coordination-features.ts +0 -238
- package/dist/scripts/test/test-fallback-systems.js +0 -276
- package/dist/scripts/test/test-init-command.ts +0 -302
- package/dist/scripts/test/test-mcp.ts +0 -251
- package/dist/scripts/test/test-runner.ts +0 -568
- package/dist/scripts/test/test-swarm-integration.sh +0 -92
- package/dist/scripts/test/test-swarm.ts +0 -142
- package/dist/scripts/test/validation-summary.ts +0 -408
- package/dist/scripts/test-cleanup-performance.sh +0 -416
- package/dist/scripts/test-dashboard-auth.cjs +0 -203
- package/dist/scripts/test-docker-deployment.sh +0 -207
- package/dist/scripts/test-npm-package.cjs +0 -167
- package/dist/scripts/test-provider-routing.cjs +0 -226
- package/dist/scripts/test-routing-telemetry.cjs +0 -147
- package/dist/scripts/test-runner.cjs +0 -154
- package/dist/scripts/test-zai-10k.cjs +0 -81
- package/dist/scripts/test-zai-api.cjs +0 -191
- package/dist/scripts/test-zai-diagnostic.cjs +0 -151
- package/dist/scripts/test-zai-final.cjs +0 -128
- package/dist/scripts/test-zai-with-env.cjs +0 -85
- package/dist/scripts/toggle-cost-savings.cjs +0 -302
- package/dist/scripts/unified-memory-monitor.js +0 -526
- package/dist/scripts/utils/README.md +0 -261
- package/dist/scripts/utils/clean-build-artifacts.sh +0 -94
- package/dist/scripts/utils/cleanup-root.sh +0 -69
- package/dist/scripts/utils/fix-cliffy-imports.js +0 -307
- package/dist/scripts/utils/fix-duplicate-imports.js +0 -114
- package/dist/scripts/utils/fix-error-handling.cjs +0 -70
- package/dist/scripts/utils/fix-import-paths.js +0 -104
- package/dist/scripts/utils/fix-imports.js +0 -116
- package/dist/scripts/utils/fix-shebang.js +0 -78
- package/dist/scripts/utils/fix-test-modules.js +0 -27
- package/dist/scripts/utils/fix-timezone-issue-246.js +0 -200
- package/dist/scripts/utils/fix-ts-comprehensive.py +0 -182
- package/dist/scripts/utils/fix-ts-targeted-batch.js +0 -250
- package/dist/scripts/utils/remove-benchmark-conflicts.sh +0 -140
- package/dist/scripts/utils/simple-test-fixer.js +0 -190
- package/dist/scripts/utils/validate-metrics-structure.cjs +0 -144
- package/dist/scripts/validate-agent-hooks.js +0 -506
- package/dist/scripts/validate-changelog.js +0 -241
- package/dist/scripts/validate-coordination-cli.js +0 -69
- package/dist/scripts/validate-coordination-toggle-integration.cjs +0 -501
- package/dist/scripts/validate-docker-infrastructure.sh +0 -502
- package/dist/scripts/validate-entry-points.js +0 -300
- package/dist/scripts/validate-memory-monitoring.sh +0 -225
- package/dist/scripts/validate-stage3-performance.ts +0 -377
- package/dist/scripts/validate-template-bundling.js +0 -180
- package/dist/scripts/validation/README.md +0 -33
- package/dist/scripts/validation/acl-security-validation.cjs +0 -214
- package/dist/scripts/validation/acl-security-validation.js +0 -402
- package/dist/scripts/validation/byzantine-verification.js +0 -407
- package/dist/scripts/validation/final-phase-2-consensus.cjs +0 -219
- package/dist/scripts/validation/final-security-validation.js +0 -791
- package/dist/scripts/validation/final-wasm-validation.cjs +0 -840
- package/dist/scripts/validation/integration-test-analysis.js +0 -105
- package/dist/scripts/validation/phase-0-comprehensive-validation.js +0 -474
- package/dist/scripts/validation/phase-0-consensus-report.js +0 -139
- package/dist/scripts/validation/phase-0-final-report.js +0 -112
- package/dist/scripts/validation/phase-0-redis-consensus-report.js +0 -129
- package/dist/scripts/validation/phase-0-validation-improved.js +0 -490
- package/dist/scripts/validation/phase-0-validation-test.js +0 -65
- package/dist/scripts/validation/phase-1-consensus-report.cjs +0 -342
- package/dist/scripts/validation/phase-1-consensus-validation.cjs +0 -551
- package/dist/scripts/validation/phase-1-consensus-validation.js +0 -551
- package/dist/scripts/validation/phase-2-consensus-report.cjs +0 -186
- package/dist/scripts/validation/phase-2-validation.cjs +0 -171
- package/dist/scripts/validation/phase-2-validation.js +0 -171
- package/dist/scripts/validation/phase-4-consensus-report.js +0 -181
- package/dist/scripts/validation/phase-4-final-validation.js +0 -351
- package/dist/scripts/validation/phase-5-consensus-report.cjs +0 -113
- package/dist/scripts/validation/phase-5-consensus-report.js +0 -113
- package/dist/scripts/validation/security-analysis.js +0 -49
- package/dist/scripts/validation/security-validation.js +0 -492
- package/dist/scripts/validation/simple-security-validation.js +0 -464
- package/dist/scripts/verify-installation.js +0 -112
- package/dist/scripts/verify-mcp-server.js +0 -86
- package/dist/scripts/verify-sdk-phase1.cjs +0 -293
- 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
|
@@ -1,419 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
import subprocess
|
|
4
|
-
import json
|
|
5
|
-
import sys
|
|
6
|
-
import time
|
|
7
|
-
from datetime import datetime, timedelta, timezone
|
|
8
|
-
import os
|
|
9
|
-
import argparse
|
|
10
|
-
import pytz
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def run_ccusage():
|
|
14
|
-
"""Execute ccusage blocks --json command and return parsed JSON data."""
|
|
15
|
-
try:
|
|
16
|
-
result = subprocess.run(['ccusage', 'blocks', '--json'], capture_output=True, text=True, check=True)
|
|
17
|
-
return json.loads(result.stdout)
|
|
18
|
-
except subprocess.CalledProcessError as e:
|
|
19
|
-
print(f"Error running ccusage: {e}")
|
|
20
|
-
return None
|
|
21
|
-
except json.JSONDecodeError as e:
|
|
22
|
-
print(f"Error parsing JSON: {e}")
|
|
23
|
-
return None
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
def format_time(minutes):
|
|
27
|
-
"""Format minutes into human-readable time (e.g., '3h 45m')."""
|
|
28
|
-
if minutes < 60:
|
|
29
|
-
return f"{int(minutes)}m"
|
|
30
|
-
hours = int(minutes // 60)
|
|
31
|
-
mins = int(minutes % 60)
|
|
32
|
-
if mins == 0:
|
|
33
|
-
return f"{hours}h"
|
|
34
|
-
return f"{hours}h {mins}m"
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def create_token_progress_bar(percentage, width=50):
|
|
38
|
-
"""Create a token usage progress bar with bracket style."""
|
|
39
|
-
filled = int(width * percentage / 100)
|
|
40
|
-
|
|
41
|
-
# Create the bar with green fill and red empty space
|
|
42
|
-
green_bar = '█' * filled
|
|
43
|
-
red_bar = '░' * (width - filled)
|
|
44
|
-
|
|
45
|
-
# Color codes
|
|
46
|
-
green = '\033[92m' # Bright green
|
|
47
|
-
red = '\033[91m' # Bright red
|
|
48
|
-
reset = '\033[0m'
|
|
49
|
-
|
|
50
|
-
return f"🟢 [{green}{green_bar}{red}{red_bar}{reset}] {percentage:.1f}%"
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def create_time_progress_bar(elapsed_minutes, total_minutes, width=50):
|
|
54
|
-
"""Create a time progress bar showing time until reset."""
|
|
55
|
-
if total_minutes <= 0:
|
|
56
|
-
percentage = 0
|
|
57
|
-
else:
|
|
58
|
-
percentage = min(100, (elapsed_minutes / total_minutes) * 100)
|
|
59
|
-
|
|
60
|
-
filled = int(width * percentage / 100)
|
|
61
|
-
|
|
62
|
-
# Create the bar with blue fill and red empty space
|
|
63
|
-
blue_bar = '█' * filled
|
|
64
|
-
red_bar = '░' * (width - filled)
|
|
65
|
-
|
|
66
|
-
# Color codes
|
|
67
|
-
blue = '\033[94m' # Bright blue
|
|
68
|
-
red = '\033[91m' # Bright red
|
|
69
|
-
reset = '\033[0m'
|
|
70
|
-
|
|
71
|
-
remaining_time = format_time(max(0, total_minutes - elapsed_minutes))
|
|
72
|
-
return f"⏰ [{blue}{blue_bar}{red}{red_bar}{reset}] {remaining_time}"
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
def print_header():
|
|
76
|
-
"""Print the stylized header with sparkles."""
|
|
77
|
-
cyan = '\033[96m'
|
|
78
|
-
blue = '\033[94m'
|
|
79
|
-
reset = '\033[0m'
|
|
80
|
-
|
|
81
|
-
# Sparkle pattern
|
|
82
|
-
sparkles = f"{cyan}✦ ✧ ✦ ✧ {reset}"
|
|
83
|
-
|
|
84
|
-
print(f"{sparkles}{cyan}CLAUDE TOKEN MONITOR{reset} {sparkles}")
|
|
85
|
-
print(f"{blue}{'=' * 60}{reset}")
|
|
86
|
-
print()
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
def get_velocity_indicator(burn_rate):
|
|
90
|
-
"""Get velocity emoji based on burn rate."""
|
|
91
|
-
if burn_rate < 50:
|
|
92
|
-
return '🐌' # Slow
|
|
93
|
-
elif burn_rate < 150:
|
|
94
|
-
return '➡️' # Normal
|
|
95
|
-
elif burn_rate < 300:
|
|
96
|
-
return '🚀' # Fast
|
|
97
|
-
else:
|
|
98
|
-
return '⚡' # Very fast
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
def calculate_hourly_burn_rate(blocks, current_time):
|
|
102
|
-
"""Calculate burn rate based on all sessions in the last hour."""
|
|
103
|
-
if not blocks:
|
|
104
|
-
return 0
|
|
105
|
-
|
|
106
|
-
one_hour_ago = current_time - timedelta(hours=1)
|
|
107
|
-
total_tokens = 0
|
|
108
|
-
|
|
109
|
-
for block in blocks:
|
|
110
|
-
start_time_str = block.get('startTime')
|
|
111
|
-
if not start_time_str:
|
|
112
|
-
continue
|
|
113
|
-
|
|
114
|
-
# Parse start time
|
|
115
|
-
start_time = datetime.fromisoformat(start_time_str.replace('Z', '+00:00'))
|
|
116
|
-
|
|
117
|
-
# Skip gaps
|
|
118
|
-
if block.get('isGap', False):
|
|
119
|
-
continue
|
|
120
|
-
|
|
121
|
-
# Determine session end time
|
|
122
|
-
if block.get('isActive', False):
|
|
123
|
-
# For active sessions, use current time
|
|
124
|
-
session_actual_end = current_time
|
|
125
|
-
else:
|
|
126
|
-
# For completed sessions, use actualEndTime or current time
|
|
127
|
-
actual_end_str = block.get('actualEndTime')
|
|
128
|
-
if actual_end_str:
|
|
129
|
-
session_actual_end = datetime.fromisoformat(actual_end_str.replace('Z', '+00:00'))
|
|
130
|
-
else:
|
|
131
|
-
session_actual_end = current_time
|
|
132
|
-
|
|
133
|
-
# Check if session overlaps with the last hour
|
|
134
|
-
if session_actual_end < one_hour_ago:
|
|
135
|
-
# Session ended before the last hour
|
|
136
|
-
continue
|
|
137
|
-
|
|
138
|
-
# Calculate how much of this session falls within the last hour
|
|
139
|
-
session_start_in_hour = max(start_time, one_hour_ago)
|
|
140
|
-
session_end_in_hour = min(session_actual_end, current_time)
|
|
141
|
-
|
|
142
|
-
if session_end_in_hour <= session_start_in_hour:
|
|
143
|
-
continue
|
|
144
|
-
|
|
145
|
-
# Calculate portion of tokens used in the last hour
|
|
146
|
-
total_session_duration = (session_actual_end - start_time).total_seconds() / 60 # minutes
|
|
147
|
-
hour_duration = (session_end_in_hour - session_start_in_hour).total_seconds() / 60 # minutes
|
|
148
|
-
|
|
149
|
-
if total_session_duration > 0:
|
|
150
|
-
session_tokens = block.get('totalTokens', 0)
|
|
151
|
-
tokens_in_hour = session_tokens * (hour_duration / total_session_duration)
|
|
152
|
-
total_tokens += tokens_in_hour
|
|
153
|
-
|
|
154
|
-
# Return tokens per minute
|
|
155
|
-
return total_tokens / 60 if total_tokens > 0 else 0
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
def get_next_reset_time(current_time, custom_reset_hour=None, timezone_str='Europe/Warsaw'):
|
|
159
|
-
"""Calculate next token reset time based on fixed 5-hour intervals.
|
|
160
|
-
Default reset times in specified timezone: 04:00, 09:00, 14:00, 18:00, 23:00
|
|
161
|
-
Or use custom reset hour if provided.
|
|
162
|
-
"""
|
|
163
|
-
# Convert to specified timezone
|
|
164
|
-
try:
|
|
165
|
-
target_tz = pytz.timezone(timezone_str)
|
|
166
|
-
except pytz.exceptions.UnknownTimeZoneError:
|
|
167
|
-
print(f"Warning: Unknown timezone '{timezone_str}', using Europe/Warsaw")
|
|
168
|
-
target_tz = pytz.timezone('Europe/Warsaw')
|
|
169
|
-
|
|
170
|
-
# If current_time is timezone-aware, convert to target timezone
|
|
171
|
-
if current_time.tzinfo is not None:
|
|
172
|
-
target_time = current_time.astimezone(target_tz)
|
|
173
|
-
else:
|
|
174
|
-
# Assume current_time is in target timezone if not specified
|
|
175
|
-
target_time = target_tz.localize(current_time)
|
|
176
|
-
|
|
177
|
-
if custom_reset_hour is not None:
|
|
178
|
-
# Use single daily reset at custom hour
|
|
179
|
-
reset_hours = [custom_reset_hour]
|
|
180
|
-
else:
|
|
181
|
-
# Default 5-hour intervals
|
|
182
|
-
reset_hours = [4, 9, 14, 18, 23]
|
|
183
|
-
|
|
184
|
-
# Get current hour and minute
|
|
185
|
-
current_hour = target_time.hour
|
|
186
|
-
current_minute = target_time.minute
|
|
187
|
-
|
|
188
|
-
# Find next reset hour
|
|
189
|
-
next_reset_hour = None
|
|
190
|
-
for hour in reset_hours:
|
|
191
|
-
if current_hour < hour or (current_hour == hour and current_minute == 0):
|
|
192
|
-
next_reset_hour = hour
|
|
193
|
-
break
|
|
194
|
-
|
|
195
|
-
# If no reset hour found today, use first one tomorrow
|
|
196
|
-
if next_reset_hour is None:
|
|
197
|
-
next_reset_hour = reset_hours[0]
|
|
198
|
-
next_reset_date = target_time.date() + timedelta(days=1)
|
|
199
|
-
else:
|
|
200
|
-
next_reset_date = target_time.date()
|
|
201
|
-
|
|
202
|
-
# Create next reset datetime in target timezone
|
|
203
|
-
next_reset = target_tz.localize(
|
|
204
|
-
datetime.combine(next_reset_date, datetime.min.time().replace(hour=next_reset_hour)),
|
|
205
|
-
is_dst=None
|
|
206
|
-
)
|
|
207
|
-
|
|
208
|
-
# Convert back to the original timezone if needed
|
|
209
|
-
if current_time.tzinfo is not None and current_time.tzinfo != target_tz:
|
|
210
|
-
next_reset = next_reset.astimezone(current_time.tzinfo)
|
|
211
|
-
|
|
212
|
-
return next_reset
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
def parse_args():
|
|
216
|
-
"""Parse command line arguments."""
|
|
217
|
-
parser = argparse.ArgumentParser(description='Claude Token Monitor - Real-time token usage monitoring')
|
|
218
|
-
parser.add_argument('--plan', type=str, default='pro',
|
|
219
|
-
choices=['pro', 'max5', 'max20', 'custom_max'],
|
|
220
|
-
help='Claude plan type (default: pro). Use "custom_max" to auto-detect from highest previous block')
|
|
221
|
-
parser.add_argument('--reset-hour', type=int,
|
|
222
|
-
help='Change the reset hour (0-23) for daily limits')
|
|
223
|
-
parser.add_argument('--timezone', type=str, default='Europe/Warsaw',
|
|
224
|
-
help='Timezone for reset times (default: Europe/Warsaw). Examples: US/Eastern, Asia/Tokyo, UTC')
|
|
225
|
-
return parser.parse_args()
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
def get_token_limit(plan, blocks=None):
|
|
229
|
-
"""Get token limit based on plan type."""
|
|
230
|
-
if plan == 'custom_max' and blocks:
|
|
231
|
-
# Find the highest token count from all previous blocks
|
|
232
|
-
max_tokens = 0
|
|
233
|
-
for block in blocks:
|
|
234
|
-
if not block.get('isGap', False) and not block.get('isActive', False):
|
|
235
|
-
tokens = block.get('totalTokens', 0)
|
|
236
|
-
if tokens > max_tokens:
|
|
237
|
-
max_tokens = tokens
|
|
238
|
-
# Return the highest found, or default to pro if none found
|
|
239
|
-
return max_tokens if max_tokens > 0 else 7000
|
|
240
|
-
|
|
241
|
-
limits = {
|
|
242
|
-
'pro': 7000,
|
|
243
|
-
'max5': 35000,
|
|
244
|
-
'max20': 140000
|
|
245
|
-
}
|
|
246
|
-
return limits.get(plan, 7000)
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
def main():
|
|
250
|
-
"""Main monitoring loop."""
|
|
251
|
-
args = parse_args()
|
|
252
|
-
|
|
253
|
-
# For 'custom_max' plan, we need to get data first to determine the limit
|
|
254
|
-
if args.plan == 'custom_max':
|
|
255
|
-
initial_data = run_ccusage()
|
|
256
|
-
if initial_data and 'blocks' in initial_data:
|
|
257
|
-
token_limit = get_token_limit(args.plan, initial_data['blocks'])
|
|
258
|
-
else:
|
|
259
|
-
token_limit = get_token_limit('pro') # Fallback to pro
|
|
260
|
-
else:
|
|
261
|
-
token_limit = get_token_limit(args.plan)
|
|
262
|
-
|
|
263
|
-
try:
|
|
264
|
-
# Initial screen clear and hide cursor
|
|
265
|
-
os.system('clear' if os.name == 'posix' else 'cls')
|
|
266
|
-
print('\033[?25l', end='', flush=True) # Hide cursor
|
|
267
|
-
|
|
268
|
-
while True:
|
|
269
|
-
# Move cursor to top without clearing
|
|
270
|
-
print('\033[H', end='', flush=True)
|
|
271
|
-
|
|
272
|
-
data = run_ccusage()
|
|
273
|
-
if not data or 'blocks' not in data:
|
|
274
|
-
print("Failed to get usage data")
|
|
275
|
-
continue
|
|
276
|
-
|
|
277
|
-
# Find the active block
|
|
278
|
-
active_block = None
|
|
279
|
-
for block in data['blocks']:
|
|
280
|
-
if block.get('isActive', False):
|
|
281
|
-
active_block = block
|
|
282
|
-
break
|
|
283
|
-
|
|
284
|
-
if not active_block:
|
|
285
|
-
print("No active session found")
|
|
286
|
-
continue
|
|
287
|
-
|
|
288
|
-
# Extract data from active block
|
|
289
|
-
tokens_used = active_block.get('totalTokens', 0)
|
|
290
|
-
|
|
291
|
-
# Check if tokens exceed limit and switch to custom_max if needed
|
|
292
|
-
if tokens_used > token_limit and args.plan == 'pro':
|
|
293
|
-
# Auto-switch to custom_max when pro limit is exceeded
|
|
294
|
-
new_limit = get_token_limit('custom_max', data['blocks'])
|
|
295
|
-
if new_limit > token_limit:
|
|
296
|
-
token_limit = new_limit
|
|
297
|
-
|
|
298
|
-
usage_percentage = (tokens_used / token_limit) * 100 if token_limit > 0 else 0
|
|
299
|
-
tokens_left = token_limit - tokens_used
|
|
300
|
-
|
|
301
|
-
# Time calculations
|
|
302
|
-
start_time_str = active_block.get('startTime')
|
|
303
|
-
if start_time_str:
|
|
304
|
-
start_time = datetime.fromisoformat(start_time_str.replace('Z', '+00:00'))
|
|
305
|
-
current_time = datetime.now(start_time.tzinfo)
|
|
306
|
-
elapsed = current_time - start_time
|
|
307
|
-
elapsed_minutes = elapsed.total_seconds() / 60
|
|
308
|
-
else:
|
|
309
|
-
elapsed_minutes = 0
|
|
310
|
-
|
|
311
|
-
session_duration = 300 # 5 hours in minutes
|
|
312
|
-
remaining_minutes = max(0, session_duration - elapsed_minutes)
|
|
313
|
-
|
|
314
|
-
# Calculate burn rate from ALL sessions in the last hour
|
|
315
|
-
burn_rate = calculate_hourly_burn_rate(data['blocks'], current_time)
|
|
316
|
-
|
|
317
|
-
# Reset time calculation - use fixed schedule or custom hour with timezone
|
|
318
|
-
reset_time = get_next_reset_time(current_time, args.reset_hour, args.timezone)
|
|
319
|
-
|
|
320
|
-
# Calculate time to reset
|
|
321
|
-
time_to_reset = reset_time - current_time
|
|
322
|
-
minutes_to_reset = time_to_reset.total_seconds() / 60
|
|
323
|
-
|
|
324
|
-
# Predicted end calculation - when tokens will run out based on burn rate
|
|
325
|
-
if burn_rate > 0 and tokens_left > 0:
|
|
326
|
-
minutes_to_depletion = tokens_left / burn_rate
|
|
327
|
-
predicted_end_time = current_time + timedelta(minutes=minutes_to_depletion)
|
|
328
|
-
else:
|
|
329
|
-
# If no burn rate or tokens already depleted, use reset time
|
|
330
|
-
predicted_end_time = reset_time
|
|
331
|
-
|
|
332
|
-
# Color codes
|
|
333
|
-
cyan = '\033[96m'
|
|
334
|
-
green = '\033[92m'
|
|
335
|
-
blue = '\033[94m'
|
|
336
|
-
red = '\033[91m'
|
|
337
|
-
yellow = '\033[93m'
|
|
338
|
-
white = '\033[97m'
|
|
339
|
-
gray = '\033[90m'
|
|
340
|
-
reset = '\033[0m'
|
|
341
|
-
|
|
342
|
-
# Display header
|
|
343
|
-
print_header()
|
|
344
|
-
|
|
345
|
-
# Token Usage section
|
|
346
|
-
print(f"📊 {white}Token Usage:{reset} {create_token_progress_bar(usage_percentage)}")
|
|
347
|
-
print()
|
|
348
|
-
|
|
349
|
-
# Time to Reset section - calculate progress based on time since last reset
|
|
350
|
-
# Estimate time since last reset (max 5 hours = 300 minutes)
|
|
351
|
-
time_since_reset = max(0, 300 - minutes_to_reset)
|
|
352
|
-
print(f"⏳ {white}Time to Reset:{reset} {create_time_progress_bar(time_since_reset, 300)}")
|
|
353
|
-
print()
|
|
354
|
-
|
|
355
|
-
# Detailed stats
|
|
356
|
-
print(f"🎯 {white}Tokens:{reset} {white}{tokens_used:,}{reset} / {gray}~{token_limit:,}{reset} ({cyan}{tokens_left:,} left{reset})")
|
|
357
|
-
print(f"🔥 {white}Burn Rate:{reset} {yellow}{burn_rate:.1f}{reset} {gray}tokens/min{reset}")
|
|
358
|
-
print()
|
|
359
|
-
|
|
360
|
-
# Predictions - convert to configured timezone for display
|
|
361
|
-
try:
|
|
362
|
-
local_tz = pytz.timezone(args.timezone)
|
|
363
|
-
except:
|
|
364
|
-
local_tz = pytz.timezone('Europe/Warsaw')
|
|
365
|
-
predicted_end_local = predicted_end_time.astimezone(local_tz)
|
|
366
|
-
reset_time_local = reset_time.astimezone(local_tz)
|
|
367
|
-
|
|
368
|
-
predicted_end_str = predicted_end_local.strftime("%H:%M")
|
|
369
|
-
reset_time_str = reset_time_local.strftime("%H:%M")
|
|
370
|
-
print(f"🏁 {white}Predicted End:{reset} {predicted_end_str}")
|
|
371
|
-
print(f"🔄 {white}Token Reset:{reset} {reset_time_str}")
|
|
372
|
-
print()
|
|
373
|
-
|
|
374
|
-
# Show notification if we switched to custom_max
|
|
375
|
-
show_switch_notification = False
|
|
376
|
-
if tokens_used > 7000 and args.plan == 'pro' and token_limit > 7000:
|
|
377
|
-
show_switch_notification = True
|
|
378
|
-
|
|
379
|
-
# Notification when tokens exceed max limit
|
|
380
|
-
show_exceed_notification = tokens_used > token_limit
|
|
381
|
-
|
|
382
|
-
# Show notifications
|
|
383
|
-
if show_switch_notification:
|
|
384
|
-
print(f"🔄 {yellow}Tokens exceeded Pro limit - switched to custom_max ({token_limit:,}){reset}")
|
|
385
|
-
print()
|
|
386
|
-
|
|
387
|
-
if show_exceed_notification:
|
|
388
|
-
print(f"🚨 {red}TOKENS EXCEEDED MAX LIMIT! ({tokens_used:,} > {token_limit:,}){reset}")
|
|
389
|
-
print()
|
|
390
|
-
|
|
391
|
-
# Warning if tokens will run out before reset
|
|
392
|
-
if predicted_end_time < reset_time:
|
|
393
|
-
print(f"⚠️ {red}Tokens will run out BEFORE reset!{reset}")
|
|
394
|
-
print()
|
|
395
|
-
|
|
396
|
-
# Status line
|
|
397
|
-
current_time_str = datetime.now().strftime("%H:%M:%S")
|
|
398
|
-
print(f"⏰ {gray}{current_time_str}{reset} 📝 {cyan}Smooth sailing...{reset} | {gray}Ctrl+C to exit{reset} 🟨")
|
|
399
|
-
|
|
400
|
-
# Clear any remaining lines below to prevent artifacts
|
|
401
|
-
print('\033[J', end='', flush=True)
|
|
402
|
-
|
|
403
|
-
time.sleep(3)
|
|
404
|
-
|
|
405
|
-
except KeyboardInterrupt:
|
|
406
|
-
# Show cursor before exiting
|
|
407
|
-
print('\033[?25h', end='', flush=True)
|
|
408
|
-
print(f"\n\n{cyan}Monitoring stopped.{reset}")
|
|
409
|
-
# Clear the terminal
|
|
410
|
-
os.system('clear' if os.name == 'posix' else 'cls')
|
|
411
|
-
sys.exit(0)
|
|
412
|
-
except Exception:
|
|
413
|
-
# Show cursor on any error
|
|
414
|
-
print('\033[?25h', end='', flush=True)
|
|
415
|
-
raise
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
if __name__ == "__main__":
|
|
419
|
-
main()
|