claude-flow-novice 2.3.5 → 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 +40 -6
- 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 -60
- 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,144 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Metrics Structure Validation Script
|
|
5
|
-
* Validates the organized metrics directory structure and data integrity
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
|
|
11
|
-
const METRICS_BASE = '.claude-flow/metrics';
|
|
12
|
-
const REQUIRED_STRUCTURE = {
|
|
13
|
-
'performance': ['consolidated-performance.json', 'execution-history.json', 'agent-performance.json'],
|
|
14
|
-
'system': ['real-time-metrics.json'],
|
|
15
|
-
'benchmarks': [],
|
|
16
|
-
'historical': [],
|
|
17
|
-
'verification-archive': []
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
function validateStructure() {
|
|
21
|
-
console.log('🔍 Validating metrics directory structure...\n');
|
|
22
|
-
|
|
23
|
-
let isValid = true;
|
|
24
|
-
|
|
25
|
-
// Check if config.json exists
|
|
26
|
-
const configPath = path.join(METRICS_BASE, 'config.json');
|
|
27
|
-
if (!fs.existsSync(configPath)) {
|
|
28
|
-
console.error('❌ Missing config.json in metrics directory');
|
|
29
|
-
isValid = false;
|
|
30
|
-
} else {
|
|
31
|
-
console.log('✅ Config file exists');
|
|
32
|
-
|
|
33
|
-
// Validate config structure
|
|
34
|
-
try {
|
|
35
|
-
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
36
|
-
if (config.version && config.structure) {
|
|
37
|
-
console.log('✅ Config structure is valid');
|
|
38
|
-
} else {
|
|
39
|
-
console.error('❌ Invalid config.json structure');
|
|
40
|
-
isValid = false;
|
|
41
|
-
}
|
|
42
|
-
} catch (error) {
|
|
43
|
-
console.error('❌ Config.json is not valid JSON:', error.message);
|
|
44
|
-
isValid = false;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Check directory structure
|
|
49
|
-
for (const [dir, files] of Object.entries(REQUIRED_STRUCTURE)) {
|
|
50
|
-
const dirPath = path.join(METRICS_BASE, dir);
|
|
51
|
-
|
|
52
|
-
if (!fs.existsSync(dirPath)) {
|
|
53
|
-
console.error(`❌ Missing directory: ${dir}`);
|
|
54
|
-
isValid = false;
|
|
55
|
-
} else {
|
|
56
|
-
console.log(`✅ Directory exists: ${dir}`);
|
|
57
|
-
|
|
58
|
-
// Check required files
|
|
59
|
-
for (const file of files) {
|
|
60
|
-
const filePath = path.join(dirPath, file);
|
|
61
|
-
if (!fs.existsSync(filePath)) {
|
|
62
|
-
console.error(`❌ Missing required file: ${dir}/${file}`);
|
|
63
|
-
isValid = false;
|
|
64
|
-
} else {
|
|
65
|
-
console.log(` ✅ ${file}`);
|
|
66
|
-
|
|
67
|
-
// Validate JSON files
|
|
68
|
-
if (file.endsWith('.json')) {
|
|
69
|
-
try {
|
|
70
|
-
const content = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
71
|
-
if (content.metadata) {
|
|
72
|
-
console.log(` ✅ Valid JSON with metadata`);
|
|
73
|
-
}
|
|
74
|
-
} catch (error) {
|
|
75
|
-
console.error(` ❌ Invalid JSON in ${file}:`, error.message);
|
|
76
|
-
isValid = false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// Check for leftover legacy files
|
|
85
|
-
const metricsFiles = fs.readdirSync(METRICS_BASE);
|
|
86
|
-
const legacyFiles = metricsFiles.filter(file =>
|
|
87
|
-
file.endsWith('.json') &&
|
|
88
|
-
!['config.json'].includes(file)
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
if (legacyFiles.length > 0) {
|
|
92
|
-
console.warn('⚠️ Legacy files still in root metrics directory:');
|
|
93
|
-
legacyFiles.forEach(file => console.warn(` - ${file}`));
|
|
94
|
-
console.log(' Consider moving these to historical/ directory');
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
console.log('\n📊 Validation Summary:');
|
|
98
|
-
console.log(`Status: ${isValid ? '✅ PASSED' : '❌ FAILED'}`);
|
|
99
|
-
console.log(`Directories: ${Object.keys(REQUIRED_STRUCTURE).length}`);
|
|
100
|
-
console.log(`Required files: ${Object.values(REQUIRED_STRUCTURE).flat().length}`);
|
|
101
|
-
|
|
102
|
-
return isValid;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
function testDataCollection() {
|
|
106
|
-
console.log('\n🧪 Testing data collection endpoints...\n');
|
|
107
|
-
|
|
108
|
-
const endpoints = [
|
|
109
|
-
'performance/consolidated-performance.json',
|
|
110
|
-
'system/real-time-metrics.json',
|
|
111
|
-
'../dashboard/data.json'
|
|
112
|
-
];
|
|
113
|
-
|
|
114
|
-
for (const endpoint of endpoints) {
|
|
115
|
-
const filePath = path.join(METRICS_BASE, endpoint);
|
|
116
|
-
if (fs.existsSync(filePath)) {
|
|
117
|
-
try {
|
|
118
|
-
const data = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
119
|
-
console.log(`✅ ${endpoint} - readable and valid JSON`);
|
|
120
|
-
|
|
121
|
-
// Check if data is recent (within last hour)
|
|
122
|
-
if (data.timestamp || data.metadata?.consolidated_at) {
|
|
123
|
-
console.log(` 📅 Contains timestamp data`);
|
|
124
|
-
}
|
|
125
|
-
} catch (error) {
|
|
126
|
-
console.error(`❌ ${endpoint} - JSON parsing failed:`, error.message);
|
|
127
|
-
}
|
|
128
|
-
} else {
|
|
129
|
-
console.error(`❌ ${endpoint} - file not found`);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// Main execution
|
|
135
|
-
console.log('📋 Claude Flow Metrics Structure Validation\n');
|
|
136
|
-
console.log('=' * 50);
|
|
137
|
-
|
|
138
|
-
const structureValid = validateStructure();
|
|
139
|
-
testDataCollection();
|
|
140
|
-
|
|
141
|
-
console.log('\n' + '=' * 50);
|
|
142
|
-
console.log(`🎯 Overall Status: ${structureValid ? 'METRICS STRUCTURE VALID' : 'VALIDATION FAILED'}`);
|
|
143
|
-
|
|
144
|
-
process.exit(structureValid ? 0 : 1);
|
|
@@ -1,506 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Agent Lifecycle Hooks Validator
|
|
5
|
-
*
|
|
6
|
-
* Validates agent profile hooks for:
|
|
7
|
-
* - Shell syntax correctness
|
|
8
|
-
* - Environment variable usage
|
|
9
|
-
* - Dangerous commands
|
|
10
|
-
* - Performance anti-patterns
|
|
11
|
-
* - Security vulnerabilities
|
|
12
|
-
*
|
|
13
|
-
* Usage:
|
|
14
|
-
* node scripts/validate-agent-hooks.js --all # Validate all agents
|
|
15
|
-
* node scripts/validate-agent-hooks.js <agent-file.md> # Validate specific agent
|
|
16
|
-
* node scripts/validate-agent-hooks.js --all --ci # CI mode (exit 1 on errors)
|
|
17
|
-
* node scripts/validate-agent-hooks.js --all --verbose # Verbose output
|
|
18
|
-
*
|
|
19
|
-
* Sprint: 2.2 - Agent Lifecycle Hooks
|
|
20
|
-
* Epic: production-blocking-coordination
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
import fs from 'fs';
|
|
24
|
-
import path from 'path';
|
|
25
|
-
import { fileURLToPath } from 'url';
|
|
26
|
-
import { execSync } from 'child_process';
|
|
27
|
-
import yaml from 'js-yaml';
|
|
28
|
-
|
|
29
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
30
|
-
const __dirname = path.dirname(__filename);
|
|
31
|
-
|
|
32
|
-
// ===== CONFIGURATION =====
|
|
33
|
-
|
|
34
|
-
const HOOK_NAMES = ['on_blocking_start', 'on_signal_received', 'on_blocking_timeout'];
|
|
35
|
-
|
|
36
|
-
const REQUIRED_ENV_VARS = ['AGENT_ID', 'TASK', 'SWARM_ID', 'ITERATION', 'PHASE'];
|
|
37
|
-
|
|
38
|
-
const DANGEROUS_PATTERNS = [
|
|
39
|
-
{ pattern: /rm\s+-rf\s+\//, severity: 'critical', message: 'Destructive: rm -rf /' },
|
|
40
|
-
{ pattern: /dd\s+if=/, severity: 'critical', message: 'Dangerous: dd command' },
|
|
41
|
-
{ pattern: /mkfs/, severity: 'critical', message: 'Dangerous: mkfs command' },
|
|
42
|
-
{ pattern: /chmod\s+777/, severity: 'high', message: 'Security: chmod 777' },
|
|
43
|
-
{ pattern: /sudo\s+/, severity: 'high', message: 'Privilege escalation: sudo' },
|
|
44
|
-
{ pattern: /nc\s+-l/, severity: 'medium', message: 'Network: netcat listener' },
|
|
45
|
-
{ pattern: /sqlite3.*DROP/, severity: 'critical', message: 'Database: Direct DROP statement' },
|
|
46
|
-
{ pattern: /eval\s+/, severity: 'high', message: 'Security: eval command' },
|
|
47
|
-
{ pattern: /\$\([^)]*rm[^)]*\)/, severity: 'high', message: 'Command substitution with rm' },
|
|
48
|
-
{ pattern: />\s*\/dev\/sd[a-z]/, severity: 'critical', message: 'Direct disk write' },
|
|
49
|
-
];
|
|
50
|
-
|
|
51
|
-
const PERFORMANCE_ANTI_PATTERNS = [
|
|
52
|
-
{ pattern: /sleep\s+[5-9]\d+/, severity: 'high', message: 'Performance: sleep > 50 seconds' },
|
|
53
|
-
{ pattern: /for\s+\w+\s+in\s+\$\(find/, severity: 'medium', message: 'Performance: Loop over find' },
|
|
54
|
-
{ pattern: /curl.*--max-time\s+[5-9]\d+/, severity: 'medium', message: 'Performance: Long HTTP timeout' },
|
|
55
|
-
{ pattern: /while\s+true/, severity: 'high', message: 'Performance: Infinite loop detected' },
|
|
56
|
-
];
|
|
57
|
-
|
|
58
|
-
const SHELL_SYNTAX_PATTERNS = [
|
|
59
|
-
{ pattern: /\$\{[^}]+\}/, name: 'Variable expansion', valid: true },
|
|
60
|
-
{ pattern: /\$\([^)]+\)/, name: 'Command substitution', valid: true },
|
|
61
|
-
{ pattern: /\$[A-Z_][A-Z0-9_]*\b(?!\{)/, name: 'Unquoted variable', valid: false, fix: 'Use "${VAR}" instead of $VAR' },
|
|
62
|
-
{ pattern: /\|\|/, name: 'OR operator', valid: true },
|
|
63
|
-
{ pattern: /&&/, name: 'AND operator', valid: true },
|
|
64
|
-
];
|
|
65
|
-
|
|
66
|
-
// ===== VALIDATION FUNCTIONS =====
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Extract YAML frontmatter from markdown file
|
|
70
|
-
*/
|
|
71
|
-
function extractFrontmatter(content) {
|
|
72
|
-
// Normalize line endings to handle both LF and CRLF
|
|
73
|
-
const normalizedContent = content.replace(/\r\n/g, '\n');
|
|
74
|
-
const frontmatterRegex = /^---\n([\s\S]*?)\n---/;
|
|
75
|
-
const match = normalizedContent.match(frontmatterRegex);
|
|
76
|
-
|
|
77
|
-
if (!match) {
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
try {
|
|
82
|
-
return yaml.load(match[1]);
|
|
83
|
-
} catch (error) {
|
|
84
|
-
throw new Error(`Invalid YAML frontmatter: ${error.message}`);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Validate shell syntax using bash -n
|
|
90
|
-
*/
|
|
91
|
-
function validateShellSyntax(hookScript, hookName) {
|
|
92
|
-
const issues = [];
|
|
93
|
-
|
|
94
|
-
try {
|
|
95
|
-
// Create temporary file for syntax check
|
|
96
|
-
const tempFile = `/tmp/hook_validate_${Date.now()}.sh`;
|
|
97
|
-
fs.writeFileSync(tempFile, `#!/bin/bash\n${hookScript}`);
|
|
98
|
-
|
|
99
|
-
// Run bash syntax check
|
|
100
|
-
execSync(`bash -n ${tempFile}`, { encoding: 'utf8', stdio: 'pipe' });
|
|
101
|
-
|
|
102
|
-
// Clean up
|
|
103
|
-
fs.unlinkSync(tempFile);
|
|
104
|
-
|
|
105
|
-
issues.push({
|
|
106
|
-
severity: 'info',
|
|
107
|
-
message: `Shell syntax valid for ${hookName}`,
|
|
108
|
-
type: 'syntax',
|
|
109
|
-
});
|
|
110
|
-
} catch (error) {
|
|
111
|
-
issues.push({
|
|
112
|
-
severity: 'error',
|
|
113
|
-
message: `Shell syntax error in ${hookName}: ${error.stderr || error.message}`,
|
|
114
|
-
type: 'syntax',
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
return issues;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Check for environment variable usage
|
|
123
|
-
*/
|
|
124
|
-
function validateEnvVars(hookScript, hookName) {
|
|
125
|
-
const issues = [];
|
|
126
|
-
const usedVars = new Set();
|
|
127
|
-
|
|
128
|
-
// Extract all ${VAR} patterns
|
|
129
|
-
const varPattern = /\$\{([A-Z_][A-Z0-9_]*)\}/g;
|
|
130
|
-
let match;
|
|
131
|
-
|
|
132
|
-
while ((match = varPattern.exec(hookScript)) !== null) {
|
|
133
|
-
usedVars.add(match[1]);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// Check for required variables
|
|
137
|
-
const missingRequired = REQUIRED_ENV_VARS.filter((v) => !usedVars.has(v));
|
|
138
|
-
|
|
139
|
-
if (missingRequired.length > 0 && hookName === 'on_blocking_start') {
|
|
140
|
-
issues.push({
|
|
141
|
-
severity: 'warning',
|
|
142
|
-
message: `${hookName}: Consider using required variables: ${missingRequired.join(', ')}`,
|
|
143
|
-
type: 'env_vars',
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Check for unquoted variables (security risk)
|
|
148
|
-
const unquotedPattern = /\$([A-Z_][A-Z0-9_]*)\b(?!\{)/g;
|
|
149
|
-
const unquotedMatches = [];
|
|
150
|
-
|
|
151
|
-
while ((match = unquotedPattern.exec(hookScript)) !== null) {
|
|
152
|
-
unquotedMatches.push(match[1]);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
if (unquotedMatches.length > 0) {
|
|
156
|
-
issues.push({
|
|
157
|
-
severity: 'high',
|
|
158
|
-
message: `${hookName}: Unquoted variables (injection risk): ${unquotedMatches.join(', ')}`,
|
|
159
|
-
type: 'security',
|
|
160
|
-
fix: 'Use "${VAR}" instead of $VAR',
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return issues;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Check for dangerous commands
|
|
169
|
-
*/
|
|
170
|
-
function validateDangerousCommands(hookScript, hookName) {
|
|
171
|
-
const issues = [];
|
|
172
|
-
|
|
173
|
-
for (const { pattern, severity, message } of DANGEROUS_PATTERNS) {
|
|
174
|
-
if (pattern.test(hookScript)) {
|
|
175
|
-
issues.push({
|
|
176
|
-
severity,
|
|
177
|
-
message: `${hookName}: ${message}`,
|
|
178
|
-
type: 'dangerous_command',
|
|
179
|
-
pattern: pattern.toString(),
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
return issues;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Check for performance anti-patterns
|
|
189
|
-
*/
|
|
190
|
-
function validatePerformance(hookScript, hookName) {
|
|
191
|
-
const issues = [];
|
|
192
|
-
|
|
193
|
-
for (const { pattern, severity, message } of PERFORMANCE_ANTI_PATTERNS) {
|
|
194
|
-
if (pattern.test(hookScript)) {
|
|
195
|
-
issues.push({
|
|
196
|
-
severity,
|
|
197
|
-
message: `${hookName}: ${message}`,
|
|
198
|
-
type: 'performance',
|
|
199
|
-
pattern: pattern.toString(),
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Check for missing error handling
|
|
205
|
-
if (!hookScript.includes('|| true') && !hookScript.includes('|| echo')) {
|
|
206
|
-
issues.push({
|
|
207
|
-
severity: 'medium',
|
|
208
|
-
message: `${hookName}: Missing error handling (consider '|| true' for non-critical commands)`,
|
|
209
|
-
type: 'error_handling',
|
|
210
|
-
});
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
return issues;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Validate hook execution time estimate
|
|
218
|
-
*/
|
|
219
|
-
function estimateExecutionTime(hookScript, hookName) {
|
|
220
|
-
const issues = [];
|
|
221
|
-
let estimatedTime = 0;
|
|
222
|
-
|
|
223
|
-
// Estimate based on patterns
|
|
224
|
-
if (hookScript.includes('find')) estimatedTime += 2000; // 2s for find
|
|
225
|
-
if (hookScript.includes('curl') || hookScript.includes('wget')) estimatedTime += 3000; // 3s for HTTP
|
|
226
|
-
if (hookScript.includes('git')) estimatedTime += 1000; // 1s for git
|
|
227
|
-
if (hookScript.includes('/sqlite-memory')) estimatedTime += 500; // 500ms for memory op
|
|
228
|
-
if (hookScript.includes('/eventbus')) estimatedTime += 300; // 300ms for event
|
|
229
|
-
|
|
230
|
-
// Count command substitutions
|
|
231
|
-
const cmdSubCount = (hookScript.match(/\$\(/g) || []).length;
|
|
232
|
-
estimatedTime += cmdSubCount * 200; // 200ms per command substitution
|
|
233
|
-
|
|
234
|
-
if (estimatedTime > 5000) {
|
|
235
|
-
issues.push({
|
|
236
|
-
severity: 'critical',
|
|
237
|
-
message: `${hookName}: Estimated execution time ${estimatedTime}ms exceeds 5s timeout`,
|
|
238
|
-
type: 'performance',
|
|
239
|
-
estimatedTime,
|
|
240
|
-
});
|
|
241
|
-
} else if (estimatedTime > 3000) {
|
|
242
|
-
issues.push({
|
|
243
|
-
severity: 'warning',
|
|
244
|
-
message: `${hookName}: Estimated execution time ${estimatedTime}ms (consider optimizing for < 3s)`,
|
|
245
|
-
type: 'performance',
|
|
246
|
-
estimatedTime,
|
|
247
|
-
});
|
|
248
|
-
} else {
|
|
249
|
-
issues.push({
|
|
250
|
-
severity: 'info',
|
|
251
|
-
message: `${hookName}: Estimated execution time ${estimatedTime}ms (good)`,
|
|
252
|
-
type: 'performance',
|
|
253
|
-
estimatedTime,
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
return issues;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Validate a single hook
|
|
262
|
-
*/
|
|
263
|
-
function validateHook(hookScript, hookName) {
|
|
264
|
-
const issues = [];
|
|
265
|
-
|
|
266
|
-
if (!hookScript || hookScript.trim().length === 0) {
|
|
267
|
-
return [
|
|
268
|
-
{
|
|
269
|
-
severity: 'info',
|
|
270
|
-
message: `${hookName}: Empty hook (no-op)`,
|
|
271
|
-
type: 'empty',
|
|
272
|
-
},
|
|
273
|
-
];
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// Run all validations
|
|
277
|
-
issues.push(...validateShellSyntax(hookScript, hookName));
|
|
278
|
-
issues.push(...validateEnvVars(hookScript, hookName));
|
|
279
|
-
issues.push(...validateDangerousCommands(hookScript, hookName));
|
|
280
|
-
issues.push(...validatePerformance(hookScript, hookName));
|
|
281
|
-
issues.push(...estimateExecutionTime(hookScript, hookName));
|
|
282
|
-
|
|
283
|
-
return issues;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Validate agent profile file
|
|
288
|
-
*/
|
|
289
|
-
function validateAgentProfile(filePath) {
|
|
290
|
-
const results = {
|
|
291
|
-
file: filePath,
|
|
292
|
-
valid: true,
|
|
293
|
-
issues: [],
|
|
294
|
-
hooks: {},
|
|
295
|
-
};
|
|
296
|
-
|
|
297
|
-
try {
|
|
298
|
-
// Read file
|
|
299
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
300
|
-
|
|
301
|
-
// Extract frontmatter
|
|
302
|
-
const frontmatter = extractFrontmatter(content);
|
|
303
|
-
|
|
304
|
-
if (!frontmatter) {
|
|
305
|
-
results.valid = false;
|
|
306
|
-
results.issues.push({
|
|
307
|
-
severity: 'error',
|
|
308
|
-
message: 'No YAML frontmatter found',
|
|
309
|
-
type: 'frontmatter',
|
|
310
|
-
});
|
|
311
|
-
return results;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// Check if hooks exist
|
|
315
|
-
if (!frontmatter.hooks) {
|
|
316
|
-
results.issues.push({
|
|
317
|
-
severity: 'info',
|
|
318
|
-
message: 'No hooks defined (optional)',
|
|
319
|
-
type: 'hooks',
|
|
320
|
-
});
|
|
321
|
-
return results;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
// Validate each hook
|
|
325
|
-
for (const hookName of HOOK_NAMES) {
|
|
326
|
-
if (frontmatter.hooks[hookName]) {
|
|
327
|
-
const hookIssues = validateHook(frontmatter.hooks[hookName], hookName);
|
|
328
|
-
results.hooks[hookName] = hookIssues;
|
|
329
|
-
results.issues.push(...hookIssues);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Check for unknown hooks
|
|
334
|
-
const unknownHooks = Object.keys(frontmatter.hooks).filter((h) => !HOOK_NAMES.includes(h));
|
|
335
|
-
if (unknownHooks.length > 0) {
|
|
336
|
-
results.issues.push({
|
|
337
|
-
severity: 'warning',
|
|
338
|
-
message: `Unknown hooks: ${unknownHooks.join(', ')}`,
|
|
339
|
-
type: 'hooks',
|
|
340
|
-
});
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
// Determine overall validity
|
|
344
|
-
const hasCritical = results.issues.some((i) => i.severity === 'critical');
|
|
345
|
-
const hasError = results.issues.some((i) => i.severity === 'error');
|
|
346
|
-
|
|
347
|
-
results.valid = !hasCritical && !hasError;
|
|
348
|
-
} catch (error) {
|
|
349
|
-
results.valid = false;
|
|
350
|
-
results.issues.push({
|
|
351
|
-
severity: 'error',
|
|
352
|
-
message: `Validation failed: ${error.message}`,
|
|
353
|
-
type: 'exception',
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
return results;
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
/**
|
|
361
|
-
* Find all agent profile files
|
|
362
|
-
*/
|
|
363
|
-
function findAgentProfiles() {
|
|
364
|
-
const agentsDir = path.join(__dirname, '..', '.claude', 'agents');
|
|
365
|
-
const profiles = [];
|
|
366
|
-
|
|
367
|
-
function scanDir(dir) {
|
|
368
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
369
|
-
|
|
370
|
-
for (const entry of entries) {
|
|
371
|
-
const fullPath = path.join(dir, entry.name);
|
|
372
|
-
|
|
373
|
-
if (entry.isDirectory()) {
|
|
374
|
-
scanDir(fullPath);
|
|
375
|
-
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
376
|
-
profiles.push(fullPath);
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
scanDir(agentsDir);
|
|
382
|
-
return profiles;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
/**
|
|
386
|
-
* Format validation results
|
|
387
|
-
*/
|
|
388
|
-
function formatResults(results, verbose = false) {
|
|
389
|
-
const severityColors = {
|
|
390
|
-
critical: '\x1b[31m', // Red
|
|
391
|
-
error: '\x1b[31m', // Red
|
|
392
|
-
high: '\x1b[33m', // Yellow
|
|
393
|
-
warning: '\x1b[33m', // Yellow
|
|
394
|
-
medium: '\x1b[36m', // Cyan
|
|
395
|
-
info: '\x1b[32m', // Green
|
|
396
|
-
};
|
|
397
|
-
const reset = '\x1b[0m';
|
|
398
|
-
|
|
399
|
-
console.log(`\n${results.valid ? '✅' : '❌'} ${path.basename(results.file)}`);
|
|
400
|
-
|
|
401
|
-
if (verbose || !results.valid) {
|
|
402
|
-
const groupedIssues = {};
|
|
403
|
-
|
|
404
|
-
for (const issue of results.issues) {
|
|
405
|
-
if (!groupedIssues[issue.severity]) {
|
|
406
|
-
groupedIssues[issue.severity] = [];
|
|
407
|
-
}
|
|
408
|
-
groupedIssues[issue.severity].push(issue);
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
for (const [severity, issues] of Object.entries(groupedIssues)) {
|
|
412
|
-
const color = severityColors[severity] || '';
|
|
413
|
-
console.log(`\n ${color}${severity.toUpperCase()}${reset}:`);
|
|
414
|
-
|
|
415
|
-
for (const issue of issues) {
|
|
416
|
-
console.log(` - ${issue.message}`);
|
|
417
|
-
if (issue.fix) {
|
|
418
|
-
console.log(` Fix: ${issue.fix}`);
|
|
419
|
-
}
|
|
420
|
-
if (verbose && issue.pattern) {
|
|
421
|
-
console.log(` Pattern: ${issue.pattern}`);
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
return results.valid;
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
/**
|
|
431
|
-
* Generate summary report
|
|
432
|
-
*/
|
|
433
|
-
function generateSummary(allResults) {
|
|
434
|
-
const total = allResults.length;
|
|
435
|
-
const valid = allResults.filter((r) => r.valid).length;
|
|
436
|
-
const invalid = total - valid;
|
|
437
|
-
|
|
438
|
-
const issuesBySeverity = {};
|
|
439
|
-
for (const result of allResults) {
|
|
440
|
-
for (const issue of result.issues) {
|
|
441
|
-
issuesBySeverity[issue.severity] = (issuesBySeverity[issue.severity] || 0) + 1;
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
console.log('\n' + '='.repeat(60));
|
|
446
|
-
console.log('VALIDATION SUMMARY');
|
|
447
|
-
console.log('='.repeat(60));
|
|
448
|
-
console.log(`\nTotal agents: ${total}`);
|
|
449
|
-
console.log(`Valid: ${valid} ✅`);
|
|
450
|
-
console.log(`Invalid: ${invalid} ❌`);
|
|
451
|
-
|
|
452
|
-
if (Object.keys(issuesBySeverity).length > 0) {
|
|
453
|
-
console.log('\nIssues by severity:');
|
|
454
|
-
for (const [severity, count] of Object.entries(issuesBySeverity)) {
|
|
455
|
-
console.log(` ${severity}: ${count}`);
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
console.log('\n' + '='.repeat(60) + '\n');
|
|
460
|
-
|
|
461
|
-
return invalid === 0;
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
// ===== MAIN =====
|
|
465
|
-
|
|
466
|
-
async function main() {
|
|
467
|
-
const args = process.argv.slice(2);
|
|
468
|
-
const flags = {
|
|
469
|
-
all: args.includes('--all'),
|
|
470
|
-
ci: args.includes('--ci'),
|
|
471
|
-
verbose: args.includes('--verbose'),
|
|
472
|
-
};
|
|
473
|
-
|
|
474
|
-
const files = args.filter((arg) => !arg.startsWith('--'));
|
|
475
|
-
|
|
476
|
-
let profilesToValidate = [];
|
|
477
|
-
|
|
478
|
-
if (flags.all) {
|
|
479
|
-
profilesToValidate = findAgentProfiles();
|
|
480
|
-
console.log(`Found ${profilesToValidate.length} agent profiles`);
|
|
481
|
-
} else if (files.length > 0) {
|
|
482
|
-
profilesToValidate = files.map((f) => path.resolve(f));
|
|
483
|
-
} else {
|
|
484
|
-
console.error('Usage: node validate-agent-hooks.js [--all] [--ci] [--verbose] [file.md...]');
|
|
485
|
-
process.exit(1);
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
const allResults = [];
|
|
489
|
-
|
|
490
|
-
for (const filePath of profilesToValidate) {
|
|
491
|
-
const results = validateAgentProfile(filePath);
|
|
492
|
-
allResults.push(results);
|
|
493
|
-
formatResults(results, flags.verbose);
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
const success = generateSummary(allResults);
|
|
497
|
-
|
|
498
|
-
if (flags.ci && !success) {
|
|
499
|
-
process.exit(1);
|
|
500
|
-
}
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
main().catch((error) => {
|
|
504
|
-
console.error('Fatal error:', error);
|
|
505
|
-
process.exit(1);
|
|
506
|
-
});
|