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,416 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* AI-Driven Mesh Coordination Test
|
|
5
|
-
*
|
|
6
|
-
* Real-world scenario using actual Claude Code CLI agents
|
|
7
|
-
* 7 AI coordinators in mesh topology with 70 language combinations
|
|
8
|
-
* Complete inter-agent communication logging
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { spawn } from 'child_process';
|
|
12
|
-
import fs from 'fs/promises';
|
|
13
|
-
import path from 'path';
|
|
14
|
-
import { fileURLToPath } from 'url';
|
|
15
|
-
|
|
16
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
-
const __dirname = path.dirname(__filename);
|
|
18
|
-
|
|
19
|
-
class AIMeshCoordinator {
|
|
20
|
-
constructor() {
|
|
21
|
-
this.outputDir = path.join(__dirname, '../ai-mesh-results');
|
|
22
|
-
this.communicationLog = path.join(this.outputDir, 'ai-communications.log');
|
|
23
|
-
this.coordinators = new Map();
|
|
24
|
-
this.subAgents = new Map();
|
|
25
|
-
this.agentProcesses = new Map();
|
|
26
|
-
this.communicationCapture = new Map();
|
|
27
|
-
|
|
28
|
-
this.programmingLanguages = [
|
|
29
|
-
'Python', 'JavaScript', 'Rust', 'Go', 'Java', 'C++', 'TypeScript'
|
|
30
|
-
];
|
|
31
|
-
|
|
32
|
-
this.verbalLanguages = [
|
|
33
|
-
'Spanish', 'French', 'German', 'Italian', 'Portuguese',
|
|
34
|
-
'Japanese', 'Russian', 'Chinese', 'Arabic', 'Hindi'
|
|
35
|
-
];
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
async start() {
|
|
39
|
-
console.log('🤖 Starting AI-Driven Mesh Coordination Test');
|
|
40
|
-
console.log(' Programming Languages: 7');
|
|
41
|
-
console.log(' Verbal Languages: 10');
|
|
42
|
-
console.log(' Target Combinations: 70 (7x10)');
|
|
43
|
-
console.log(' Method: REAL AI agents via Claude Code CLI\n');
|
|
44
|
-
|
|
45
|
-
await fs.mkdir(this.outputDir, { recursive: true });
|
|
46
|
-
await this.setupCommunicationCapture();
|
|
47
|
-
|
|
48
|
-
// Step 1: Spawn 7 AI coordinators
|
|
49
|
-
await this.spawnAICoordinators();
|
|
50
|
-
|
|
51
|
-
// Step 2: Monitor real coordination
|
|
52
|
-
await this.monitorAICoordination();
|
|
53
|
-
|
|
54
|
-
// Step 3: Collect and analyze results
|
|
55
|
-
await this.collectResults();
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async setupCommunicationCapture() {
|
|
59
|
-
// Initialize communication logging
|
|
60
|
-
const logHeader = {
|
|
61
|
-
timestamp: Date.now(),
|
|
62
|
-
testType: 'AI_DRIVEN_MESH_COORDINATION',
|
|
63
|
-
config: {
|
|
64
|
-
coordinators: 7,
|
|
65
|
-
subAgentsPerCoordinator: 10,
|
|
66
|
-
totalSubAgents: 70,
|
|
67
|
-
programmingLanguages: this.programmingLanguages.length,
|
|
68
|
-
verbalLanguages: this.verbalLanguages.length
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
await fs.appendFile(this.communicationLog, JSON.stringify(logHeader) + '\n');
|
|
73
|
-
console.log('📝 Communication logging initialized');
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async spawnAICoordinators() {
|
|
77
|
-
console.log('🚀 Step 1: Spawning 7 AI Coordinators');
|
|
78
|
-
|
|
79
|
-
for (let i = 1; i <= 7; i++) {
|
|
80
|
-
const coordinatorId = `ai-coordinator-${i}`;
|
|
81
|
-
|
|
82
|
-
// Prepare coordinator instructions
|
|
83
|
-
const instructions = this.generateCoordinatorInstructions(i);
|
|
84
|
-
|
|
85
|
-
// Spawn AI coordinator using Claude Code CLI
|
|
86
|
-
const aiCoordinator = await this.spawnAIAgent(coordinatorId, instructions);
|
|
87
|
-
|
|
88
|
-
this.coordinators.set(coordinatorId, {
|
|
89
|
-
id: coordinatorId,
|
|
90
|
-
process: aiCoordinator,
|
|
91
|
-
status: 'active',
|
|
92
|
-
assignedLanguage: null,
|
|
93
|
-
subAgents: []
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
console.log(` ✅ ${coordinatorId} spawned as AI agent`);
|
|
97
|
-
|
|
98
|
-
// Small delay between spawns
|
|
99
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
console.log('✅ All 7 AI coordinators spawned\n');
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
generateCoordinatorInstructions(coordinatorNumber) {
|
|
106
|
-
return `
|
|
107
|
-
You are AI Coordinator ${coordinatorNumber} in a 7-coordinator mesh system.
|
|
108
|
-
|
|
109
|
-
YOUR MISSION:
|
|
110
|
-
- Coordinate with 6 other AI coordinators to cover 70 unique language combinations
|
|
111
|
-
- Choose ONE programming language from: ${this.programmingLanguages.join(', ')}
|
|
112
|
-
- Communicate with other coordinators to avoid conflicts
|
|
113
|
-
- Once assigned a language, create 10 Hello World functions in 10 different verbal languages
|
|
114
|
-
|
|
115
|
-
VERBAL LANGUAGES TO ASSIGN: ${this.verbalLanguages.join(', ')}
|
|
116
|
-
|
|
117
|
-
COORDINATION PROTOCOL:
|
|
118
|
-
1. Start by proposing your preferred programming language
|
|
119
|
-
2. Listen to other coordinators' proposals
|
|
120
|
-
3. If conflicts arise, negotiate and resolve through discussion
|
|
121
|
-
4. Once consensus is reached, implement your 10 language combinations
|
|
122
|
-
|
|
123
|
-
COMMUNICATION REQUIREMENTS:
|
|
124
|
-
- All messages must be logged to /dev/shm/ai-coordinator-${coordinatorNumber}-messages.log
|
|
125
|
-
- Include your reasoning for language selection
|
|
126
|
-
- Document all conflict resolution discussions
|
|
127
|
-
- Report final assignments clearly
|
|
128
|
-
|
|
129
|
-
FILE OUTPUT:
|
|
130
|
-
- Create Hello World files in ./ai-mesh-results/
|
|
131
|
-
- Use naming: hello_world_[verbal]_[programming].extension
|
|
132
|
-
- Example: hello_world_spanish_python.py
|
|
133
|
-
|
|
134
|
-
WORK autonomously but coordinate with other AI coordinators to achieve ZERO OVERLAP across all 70 combinations.
|
|
135
|
-
`;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
async spawnAIAgent(agentId, instructions) {
|
|
139
|
-
const messageFile = `/dev/shm/${agentId}-instructions.txt`;
|
|
140
|
-
await fs.writeFile(messageFile, instructions);
|
|
141
|
-
|
|
142
|
-
// Use Claude Code CLI to spawn actual AI agent
|
|
143
|
-
const agentProcess = spawn('claude', [
|
|
144
|
-
'flow-novice', 'swarm', 'spawn',
|
|
145
|
-
'--agent-type', 'coordinator',
|
|
146
|
-
'--name', agentId,
|
|
147
|
-
'--instructions', messageFile
|
|
148
|
-
], {
|
|
149
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
150
|
-
detached: true
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
// Set up communication capture
|
|
154
|
-
await this.setupAgentCommunicationCapture(agentId, agentProcess);
|
|
155
|
-
|
|
156
|
-
this.agentProcesses.set(agentId, agentProcess);
|
|
157
|
-
|
|
158
|
-
return agentProcess;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
async setupAgentCommunicationCapture(agentId, process) {
|
|
162
|
-
const commFile = `/dev/shm/${agentId}-messages.log`;
|
|
163
|
-
|
|
164
|
-
// Capture stdout
|
|
165
|
-
process.stdout.on('data', async (data) => {
|
|
166
|
-
const message = {
|
|
167
|
-
timestamp: Date.now(),
|
|
168
|
-
agentId: agentId,
|
|
169
|
-
type: 'STDOUT',
|
|
170
|
-
content: data.toString().trim()
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
await this.logCommunication(message);
|
|
174
|
-
await fs.appendFile(commFile, JSON.stringify(message) + '\n');
|
|
175
|
-
});
|
|
176
|
-
|
|
177
|
-
// Capture stderr
|
|
178
|
-
process.stderr.on('data', async (data) => {
|
|
179
|
-
const message = {
|
|
180
|
-
timestamp: Date.now(),
|
|
181
|
-
agentId: agentId,
|
|
182
|
-
type: 'STDERR',
|
|
183
|
-
content: data.toString().trim()
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
await this.logCommunication(message);
|
|
187
|
-
await fs.appendFile(commFile, JSON.stringify(message) + '\n');
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
// Log process events
|
|
191
|
-
process.on('close', async (code) => {
|
|
192
|
-
const message = {
|
|
193
|
-
timestamp: Date.now(),
|
|
194
|
-
agentId: agentId,
|
|
195
|
-
type: 'PROCESS_CLOSE',
|
|
196
|
-
content: `Process closed with code: ${code}`
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
await this.logCommunication(message);
|
|
200
|
-
await fs.appendFile(commFile, JSON.stringify(message) + '\n');
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
async logCommunication(message) {
|
|
205
|
-
// Central logging for all inter-agent communications
|
|
206
|
-
const logEntry = {
|
|
207
|
-
timestamp: message.timestamp,
|
|
208
|
-
agentId: message.agentId,
|
|
209
|
-
type: message.type,
|
|
210
|
-
content: message.content,
|
|
211
|
-
globalTimestamp: Date.now()
|
|
212
|
-
};
|
|
213
|
-
|
|
214
|
-
await fs.appendFile(this.communicationLog, JSON.stringify(logEntry) + '\n');
|
|
215
|
-
|
|
216
|
-
// Also track per-agent communication patterns
|
|
217
|
-
if (!this.communicationCapture.has(message.agentId)) {
|
|
218
|
-
this.communicationCapture.set(message.agentId, []);
|
|
219
|
-
}
|
|
220
|
-
this.communicationCapture.get(message.agentId).push(logEntry);
|
|
221
|
-
|
|
222
|
-
// Real-time monitoring output
|
|
223
|
-
console.log(`[${message.agentId}] ${message.type}: ${message.content.substring(0, 100)}...`);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
async monitorAICoordination() {
|
|
227
|
-
console.log('📡 Step 2: Monitoring AI Coordinator Inter-Communication');
|
|
228
|
-
console.log(' AI agents will now coordinate autonomously...\n');
|
|
229
|
-
|
|
230
|
-
// Let AI coordinators work for specified time
|
|
231
|
-
const monitoringDuration = 5 * 60 * 1000; // 5 minutes
|
|
232
|
-
const startTime = Date.now();
|
|
233
|
-
|
|
234
|
-
while (Date.now() - startTime < monitoringDuration) {
|
|
235
|
-
await new Promise(resolve => setTimeout(resolve, 30000)); // Check every 30 seconds
|
|
236
|
-
|
|
237
|
-
// Check agent status
|
|
238
|
-
const activeAgents = Array.from(this.coordinators.values()).filter(c => c.status === 'active').length;
|
|
239
|
-
console.log(` 📊 Active AI coordinators: ${activeAgents}/7`);
|
|
240
|
-
|
|
241
|
-
// Look for coordination evidence
|
|
242
|
-
await this.analyzeCoordinationProgress();
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
console.log('⏰ AI coordination period ended\n');
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
async analyzeCoordinationProgress() {
|
|
249
|
-
// Look for evidence of coordination in communication logs
|
|
250
|
-
try {
|
|
251
|
-
const logContent = await fs.readFile(this.communicationLog, 'utf8');
|
|
252
|
-
const messages = logContent.split('\n').filter(line => line.trim()).map(line => JSON.parse(line));
|
|
253
|
-
|
|
254
|
-
const agentMessages = new Map();
|
|
255
|
-
messages.forEach(msg => {
|
|
256
|
-
if (!agentMessages.has(msg.agentId)) {
|
|
257
|
-
agentMessages.set(msg.agentId, 0);
|
|
258
|
-
}
|
|
259
|
-
agentMessages.set(msg.agentId, agentMessages.get(msg.agentId) + 1);
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
console.log(' 📈 Message activity by agent:');
|
|
263
|
-
agentMessages.forEach((count, agentId) => {
|
|
264
|
-
console.log(` ${agentId}: ${count} messages`);
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
} catch (error) {
|
|
268
|
-
console.log(' ⚠️ Could not analyze coordination progress');
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
async collectResults() {
|
|
273
|
-
console.log('📋 Step 3: Collecting AI Coordination Results');
|
|
274
|
-
|
|
275
|
-
// Check for generated files
|
|
276
|
-
const generatedFiles = await this.scanGeneratedFiles();
|
|
277
|
-
|
|
278
|
-
// Analyze communication patterns
|
|
279
|
-
const communicationAnalysis = await this.analyzeCommunications();
|
|
280
|
-
|
|
281
|
-
// Generate final report
|
|
282
|
-
const results = {
|
|
283
|
-
timestamp: Date.now(),
|
|
284
|
-
testType: 'AI_DRIVEN_MESH_COORDINATION',
|
|
285
|
-
results: {
|
|
286
|
-
generatedFiles: generatedFiles,
|
|
287
|
-
communicationAnalysis: communicationAnalysis,
|
|
288
|
-
agentStatus: this.getAgentStatus()
|
|
289
|
-
}
|
|
290
|
-
};
|
|
291
|
-
|
|
292
|
-
const resultsFile = path.join(this.outputDir, `ai-results-${Date.now()}.json`);
|
|
293
|
-
await fs.writeFile(resultsFile, JSON.stringify(results, null, 2));
|
|
294
|
-
|
|
295
|
-
console.log(`📁 Results saved to: ${resultsFile}`);
|
|
296
|
-
console.log('📊 Communication analysis saved to: ai-communications.log');
|
|
297
|
-
|
|
298
|
-
// Cleanup
|
|
299
|
-
await this.cleanup();
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
async scanGeneratedFiles() {
|
|
303
|
-
try {
|
|
304
|
-
const files = await fs.readdir(this.outputDir);
|
|
305
|
-
const helloFiles = files.filter(file => file.startsWith('hello_world_'));
|
|
306
|
-
|
|
307
|
-
console.log(` 📄 Found ${helloFiles.length} Hello World files`);
|
|
308
|
-
|
|
309
|
-
return {
|
|
310
|
-
totalFiles: helloFiles.length,
|
|
311
|
-
fileList: helloFiles,
|
|
312
|
-
languageCombinations: this.analyzeLanguageCombinations(helloFiles)
|
|
313
|
-
};
|
|
314
|
-
|
|
315
|
-
} catch (error) {
|
|
316
|
-
console.log(' ❌ Could not scan generated files');
|
|
317
|
-
return { totalFiles: 0, fileList: [], languageCombinations: {} };
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
analyzeLanguageCombinations(files) {
|
|
322
|
-
const combinations = {};
|
|
323
|
-
|
|
324
|
-
files.forEach(file => {
|
|
325
|
-
// Parse filename to extract languages
|
|
326
|
-
const parts = file.replace('hello_world_', '').replace(/\.[^/.]+$/, '').split('_');
|
|
327
|
-
if (parts.length >= 2) {
|
|
328
|
-
const verbal = parts[0];
|
|
329
|
-
const programming = parts[1];
|
|
330
|
-
const key = `${programming}+${verbal}`;
|
|
331
|
-
|
|
332
|
-
combinations[key] = (combinations[key] || 0) + 1;
|
|
333
|
-
}
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
return combinations;
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
async analyzeCommunications() {
|
|
340
|
-
const analysis = {
|
|
341
|
-
totalMessages: 0,
|
|
342
|
-
messagesByAgent: {},
|
|
343
|
-
communicationTypes: {},
|
|
344
|
-
coordinationEvidence: false
|
|
345
|
-
};
|
|
346
|
-
|
|
347
|
-
this.communicationCapture.forEach((messages, agentId) => {
|
|
348
|
-
analysis.messagesByAgent[agentId] = messages.length;
|
|
349
|
-
analysis.totalMessages += messages.length;
|
|
350
|
-
|
|
351
|
-
messages.forEach(msg => {
|
|
352
|
-
analysis.communicationTypes[msg.type] = (analysis.communicationTypes[msg.type] || 0) + 1;
|
|
353
|
-
|
|
354
|
-
// Look for coordination keywords
|
|
355
|
-
if (msg.content.toLowerCase().includes('coordinator') ||
|
|
356
|
-
msg.content.toLowerCase().includes('language') ||
|
|
357
|
-
msg.content.toLowerCase().includes('conflict')) {
|
|
358
|
-
analysis.coordinationEvidence = true;
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
});
|
|
362
|
-
|
|
363
|
-
return analysis;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
getAgentStatus() {
|
|
367
|
-
const status = {};
|
|
368
|
-
this.coordinators.forEach((coordinator, id) => {
|
|
369
|
-
status[id] = {
|
|
370
|
-
status: coordinator.status,
|
|
371
|
-
assignedLanguage: coordinator.assignedLanguage,
|
|
372
|
-
processId: coordinator.process.pid
|
|
373
|
-
};
|
|
374
|
-
});
|
|
375
|
-
return status;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
async cleanup() {
|
|
379
|
-
console.log('🧹 Cleaning up AI processes...');
|
|
380
|
-
|
|
381
|
-
// Terminate all AI agent processes
|
|
382
|
-
this.agentProcesses.forEach((process, agentId) => {
|
|
383
|
-
try {
|
|
384
|
-
process.kill('SIGTERM');
|
|
385
|
-
console.log(` ✅ Terminated ${agentId}`);
|
|
386
|
-
} catch (error) {
|
|
387
|
-
console.log(` ⚠️ Could not terminate ${agentId}`);
|
|
388
|
-
}
|
|
389
|
-
});
|
|
390
|
-
|
|
391
|
-
// Cleanup temp files
|
|
392
|
-
try {
|
|
393
|
-
const tempFiles = [
|
|
394
|
-
'/dev/shm/ai-coordinator-*-instructions.txt',
|
|
395
|
-
'/dev/shm/ai-coordinator-*-messages.log'
|
|
396
|
-
];
|
|
397
|
-
|
|
398
|
-
for (const pattern of tempFiles) {
|
|
399
|
-
const { execSync } = await import('child_process');
|
|
400
|
-
try {
|
|
401
|
-
execSync(`rm -f ${pattern}`);
|
|
402
|
-
} catch (error) {
|
|
403
|
-
// Ignore cleanup errors
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
} catch (error) {
|
|
407
|
-
// Ignore cleanup errors
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
console.log('✅ Cleanup complete');
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
// Run the AI mesh coordinator test
|
|
415
|
-
const aiMesh = new AIMeshCoordinator();
|
|
416
|
-
aiMesh.start().catch(console.error);
|
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env deno run --allow-net --allow-read
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Documentation Link Checker
|
|
5
|
-
* Scans documentation files for broken links
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { walk } from "https://deno.land/std@0.220.0/fs/mod.ts";
|
|
9
|
-
|
|
10
|
-
interface LinkCheckResult {
|
|
11
|
-
file: string;
|
|
12
|
-
url: string;
|
|
13
|
-
status: 'ok' | 'broken' | 'timeout' | 'error';
|
|
14
|
-
statusCode?: number;
|
|
15
|
-
error?: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
interface ScanResult {
|
|
19
|
-
totalFiles: number;
|
|
20
|
-
totalLinks: number;
|
|
21
|
-
brokenLinks: LinkCheckResult[];
|
|
22
|
-
timeouts: LinkCheckResult[];
|
|
23
|
-
errors: LinkCheckResult[];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const TIMEOUT_MS = 10000; // 10 seconds
|
|
27
|
-
const USER_AGENT = 'Claude-Flow Link Checker';
|
|
28
|
-
const MAX_CONCURRENT = 10;
|
|
29
|
-
|
|
30
|
-
// Links to skip (known to have issues with automated checking)
|
|
31
|
-
const SKIP_URLS = new Set([
|
|
32
|
-
'mailto:',
|
|
33
|
-
'tel:',
|
|
34
|
-
'javascript:',
|
|
35
|
-
'#',
|
|
36
|
-
'localhost',
|
|
37
|
-
'127.0.0.1',
|
|
38
|
-
'example.com',
|
|
39
|
-
'example.org',
|
|
40
|
-
]);
|
|
41
|
-
|
|
42
|
-
function extractLinks(content: string): string[] {
|
|
43
|
-
const links: string[] = [];
|
|
44
|
-
|
|
45
|
-
// Markdown links: [text](url)
|
|
46
|
-
const markdownLinkRegex = /\[([^\]]*)\]\(([^)]+)\)/g;
|
|
47
|
-
let match;
|
|
48
|
-
while ((match = markdownLinkRegex.exec(content)) !== null) {
|
|
49
|
-
links.push(match[2]);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// HTML links: <a href="url">
|
|
53
|
-
const htmlLinkRegex = /<a[^>]+href\s*=\s*['""]([^'""]+)['""][^>]*>/gi;
|
|
54
|
-
while ((match = htmlLinkRegex.exec(content)) !== null) {
|
|
55
|
-
links.push(match[1]);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// URL references: [ref]: url
|
|
59
|
-
const refLinkRegex = /^\s*\[([^\]]+)\]:\s*(.+)$/gm;
|
|
60
|
-
while ((match = refLinkRegex.exec(content)) !== null) {
|
|
61
|
-
links.push(match[2]);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return links;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
function shouldSkipUrl(url: string): boolean {
|
|
68
|
-
// Skip relative links
|
|
69
|
-
if (!url.startsWith('http://') && !url.startsWith('https://')) {
|
|
70
|
-
return true;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Skip specific patterns
|
|
74
|
-
for (const skipPattern of SKIP_URLS) {
|
|
75
|
-
if (url.includes(skipPattern)) {
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return false;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
async function checkLink(url: string): Promise<{ status: number | null; error?: string }> {
|
|
84
|
-
try {
|
|
85
|
-
const controller = new AbortController();
|
|
86
|
-
const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
87
|
-
|
|
88
|
-
const response = await fetch(url, {
|
|
89
|
-
method: 'HEAD', // Use HEAD to avoid downloading content
|
|
90
|
-
signal: controller.signal,
|
|
91
|
-
headers: {
|
|
92
|
-
'User-Agent': USER_AGENT,
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
clearTimeout(timeoutId);
|
|
97
|
-
|
|
98
|
-
return {
|
|
99
|
-
status: response.status,
|
|
100
|
-
};
|
|
101
|
-
} catch (error) {
|
|
102
|
-
if (error instanceof DOMException && error.name === 'AbortError') {
|
|
103
|
-
return { status: null, error: 'timeout' };
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
return {
|
|
107
|
-
status: null,
|
|
108
|
-
error: error.message,
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
async function scanFile(filePath: string): Promise<LinkCheckResult[]> {
|
|
114
|
-
const results: LinkCheckResult[] = [];
|
|
115
|
-
|
|
116
|
-
try {
|
|
117
|
-
const content = await Deno.readTextFile(filePath);
|
|
118
|
-
const links = extractLinks(content);
|
|
119
|
-
|
|
120
|
-
// Remove duplicates and filter
|
|
121
|
-
const uniqueLinks = [...new Set(links)].filter(url => !shouldSkipUrl(url));
|
|
122
|
-
|
|
123
|
-
// Check links with concurrency control
|
|
124
|
-
const semaphore = new Array(MAX_CONCURRENT).fill(0);
|
|
125
|
-
const promises = uniqueLinks.map(async (url) => {
|
|
126
|
-
// Wait for available slot
|
|
127
|
-
await new Promise<void>((resolve) => {
|
|
128
|
-
const checkSlot = () => {
|
|
129
|
-
const index = semaphore.findIndex(slot => slot === 0);
|
|
130
|
-
if (index !== -1) {
|
|
131
|
-
semaphore[index] = 1;
|
|
132
|
-
resolve();
|
|
133
|
-
} else {
|
|
134
|
-
setTimeout(checkSlot, 100);
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
checkSlot();
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
try {
|
|
141
|
-
const { status, error } = await checkLink(url);
|
|
142
|
-
|
|
143
|
-
let resultStatus: LinkCheckResult['status'];
|
|
144
|
-
if (error === 'timeout') {
|
|
145
|
-
resultStatus = 'timeout';
|
|
146
|
-
} else if (error) {
|
|
147
|
-
resultStatus = 'error';
|
|
148
|
-
} else if (status && status >= 200 && status < 400) {
|
|
149
|
-
resultStatus = 'ok';
|
|
150
|
-
} else {
|
|
151
|
-
resultStatus = 'broken';
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return {
|
|
155
|
-
file: filePath,
|
|
156
|
-
url,
|
|
157
|
-
status: resultStatus,
|
|
158
|
-
statusCode: status || undefined,
|
|
159
|
-
error,
|
|
160
|
-
};
|
|
161
|
-
} finally {
|
|
162
|
-
// Release slot
|
|
163
|
-
const index = semaphore.findIndex(slot => slot === 1);
|
|
164
|
-
if (index !== -1) {
|
|
165
|
-
semaphore[index] = 0;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
results.push(...await Promise.all(promises));
|
|
171
|
-
} catch (error) {
|
|
172
|
-
console.warn(`Failed to scan ${filePath}: ${error.message}`);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
return results;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
async function main(): Promise<void> {
|
|
179
|
-
console.log('Checking documentation links...\n');
|
|
180
|
-
|
|
181
|
-
const results: LinkCheckResult[] = [];
|
|
182
|
-
let fileCount = 0;
|
|
183
|
-
|
|
184
|
-
// Scan markdown and HTML files
|
|
185
|
-
const extensions = ['.md', '.html', '.htm'];
|
|
186
|
-
const directories = ['./docs', './README.md', './examples'];
|
|
187
|
-
|
|
188
|
-
for (const dir of directories) {
|
|
189
|
-
try {
|
|
190
|
-
const stat = await Deno.stat(dir);
|
|
191
|
-
if (stat.isFile) {
|
|
192
|
-
// Single file
|
|
193
|
-
const fileResults = await scanFile(dir);
|
|
194
|
-
results.push(...fileResults);
|
|
195
|
-
fileCount++;
|
|
196
|
-
} else if (stat.isDirectory) {
|
|
197
|
-
// Directory
|
|
198
|
-
for await (const entry of walk(dir, { exts: extensions })) {
|
|
199
|
-
if (entry.isFile) {
|
|
200
|
-
const fileResults = await scanFile(entry.path);
|
|
201
|
-
results.push(...fileResults);
|
|
202
|
-
fileCount++;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
} catch (error) {
|
|
207
|
-
if (!(error instanceof Deno.errors.NotFound)) {
|
|
208
|
-
console.warn(`Failed to process ${dir}: ${error.message}`);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
// Analyze results
|
|
214
|
-
const scanResult: ScanResult = {
|
|
215
|
-
totalFiles: fileCount,
|
|
216
|
-
totalLinks: results.length,
|
|
217
|
-
brokenLinks: results.filter(r => r.status === 'broken'),
|
|
218
|
-
timeouts: results.filter(r => r.status === 'timeout'),
|
|
219
|
-
errors: results.filter(r => r.status === 'error'),
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
// Report results
|
|
223
|
-
console.log(`📊 Scan Summary:`);
|
|
224
|
-
console.log(` Files scanned: ${scanResult.totalFiles}`);
|
|
225
|
-
console.log(` Links checked: ${scanResult.totalLinks}`);
|
|
226
|
-
console.log(` Broken links: ${scanResult.brokenLinks.length}`);
|
|
227
|
-
console.log(` Timeouts: ${scanResult.timeouts.length}`);
|
|
228
|
-
console.log(` Errors: ${scanResult.errors.length}\n`);
|
|
229
|
-
|
|
230
|
-
// Report broken links
|
|
231
|
-
if (scanResult.brokenLinks.length > 0) {
|
|
232
|
-
console.log('❌ Broken Links:');
|
|
233
|
-
for (const result of scanResult.brokenLinks) {
|
|
234
|
-
console.log(` ${result.file}: ${result.url} (${result.statusCode})`);
|
|
235
|
-
}
|
|
236
|
-
console.log('');
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// Report timeouts
|
|
240
|
-
if (scanResult.timeouts.length > 0) {
|
|
241
|
-
console.log('⏱️ Timeouts:');
|
|
242
|
-
for (const result of scanResult.timeouts) {
|
|
243
|
-
console.log(` ${result.file}: ${result.url}`);
|
|
244
|
-
}
|
|
245
|
-
console.log('');
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// Report other errors
|
|
249
|
-
if (scanResult.errors.length > 0) {
|
|
250
|
-
console.log('⚠️ Errors:');
|
|
251
|
-
for (const result of scanResult.errors) {
|
|
252
|
-
console.log(` ${result.file}: ${result.url} (${result.error})`);
|
|
253
|
-
}
|
|
254
|
-
console.log('');
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// Summary
|
|
258
|
-
const totalIssues = scanResult.brokenLinks.length + scanResult.timeouts.length + scanResult.errors.length;
|
|
259
|
-
|
|
260
|
-
if (totalIssues === 0) {
|
|
261
|
-
console.log('✅ All links are working!');
|
|
262
|
-
} else {
|
|
263
|
-
console.error(`❌ Found ${totalIssues} link issues!`);
|
|
264
|
-
|
|
265
|
-
// Don't fail CI for timeouts or minor errors, only broken links
|
|
266
|
-
if (scanResult.brokenLinks.length > 0) {
|
|
267
|
-
Deno.exit(1);
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
if (import.meta.main) {
|
|
273
|
-
await main();
|
|
274
|
-
}
|