claude-flow-novice 2.15.2 → 2.15.4
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/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/.claude/commands/cfn-loop-cli.md +16 -2
- package/.claude/commands/switch-api.md +31 -10
- package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -243
- package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
- package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
- package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
- package/.claude/hooks/cfn-post-edit.config.json +44 -44
- package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
- package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/.claude/skills/cfn-redis-coordination/get-context.sh +145 -112
- package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
- package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
- package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
- package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
- package/README.md +116 -475
- package/claude-assets/agents/cfn-dev-team/README.md +103 -0
- package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
- package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
- package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
- package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
- package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
- package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
- package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
- package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/claude-assets/commands/cfn-loop-cli.md +16 -2
- package/claude-assets/commands/switch-api.md +31 -10
- package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
- package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
- package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
- package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
- package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
- package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
- package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
- package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
- package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
- package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +543 -572
- package/claude-assets/skills/agent-lifecycle/simple-audit.sh +57 -30
- package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
- package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
- package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
- package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
- package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
- package/claude-assets/skills/bootstrap/database-connection.md +464 -0
- package/claude-assets/skills/bootstrap/error-handling.md +580 -0
- package/claude-assets/skills/bootstrap/file-operations.md +699 -0
- package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
- package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
- package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
- package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
- package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
- package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
- package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
- package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
- package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
- package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
- package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
- package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
- package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
- package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
- package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
- package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
- package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
- package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
- package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
- package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
- package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
- package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
- package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
- package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
- package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
- package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
- package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
- package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
- package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
- package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
- package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
- package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
- package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
- package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
- package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
- package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/claude-assets/skills/cfn-redis-coordination/get-context.sh +145 -112
- package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
- package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
- package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
- package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
- package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
- package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
- package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
- package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
- package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
- package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
- package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
- package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
- package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
- package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
- package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
- package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
- package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
- package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
- package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
- package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
- package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
- package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
- package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
- package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
- package/claude-assets/skills/cfn-utilities/test.sh +317 -0
- package/claude-assets/skills/docker-build/SKILL.md +96 -203
- package/claude-assets/skills/docker-build/build.sh +73 -73
- package/claude-assets/skills/integration/agent-handoff.sh +492 -0
- package/claude-assets/skills/integration/file-operations.sh +414 -0
- package/claude-assets/skills/json-validation/SKILL.md +431 -0
- package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
- package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
- package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
- package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
- package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
- package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
- package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
- package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
- package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
- package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
- package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
- package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
- package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
- package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
- package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
- package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
- package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
- package/claude-assets/skills/workflow-codification/test-integration.sh +296 -0
- package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh +486 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
- package/claude-assets/skills/workflow-codification/track-edge-case.sh +290 -0
- package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
- package/dist/ace/ace-curator.js +10 -2
- package/dist/ace/ace-curator.js.map +1 -1
- package/dist/ace/ace-generator.js +4 -0
- package/dist/ace/ace-generator.js.map +1 -1
- package/dist/ace/ace-reflector.js +1 -1
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/ace/context-injection.js +24 -2
- package/dist/ace/context-injection.js.map +1 -1
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/agents/task-agent-integration.js +1 -1
- package/dist/agents/task-agent-integration.js.map +1 -1
- package/dist/api/health-endpoints.js +390 -0
- package/dist/api/health-endpoints.js.map +1 -0
- package/dist/cli/agent-executor.js +4 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +89 -1
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +130 -37
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/config-manager.js +91 -109
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/skill-cache-validator.js +412 -0
- package/dist/cli/skill-cache-validator.js.map +1 -0
- package/dist/cli/skill-cli.js +991 -0
- package/dist/cli/skill-cli.js.map +1 -0
- package/dist/cli/skill-execution-logger.js +284 -0
- package/dist/cli/skill-execution-logger.js.map +1 -0
- package/dist/cli/skill-loader.js +457 -0
- package/dist/cli/skill-loader.js.map +1 -0
- package/dist/coordination/event-bus.js +2 -2
- package/dist/coordination/event-bus.js.map +1 -1
- package/dist/coordination/fleet-manager.js +1 -1
- package/dist/coordination/fleet-manager.js.map +1 -1
- package/dist/coordination/index.js +23 -9
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/types/fleet-manager.types.js.map +1 -1
- package/dist/db/migration-manager.js +483 -0
- package/dist/db/migration-manager.js.map +1 -0
- package/dist/db/skills-query.js +535 -0
- package/dist/db/skills-query.js.map +1 -0
- package/dist/integration/DatabaseHandoff.js +507 -0
- package/dist/integration/DatabaseHandoff.js.map +1 -0
- package/dist/integration/StandardAdapter.js +291 -0
- package/dist/integration/StandardAdapter.js.map +1 -0
- package/dist/jobs/edge-case-analyzer.js +367 -0
- package/dist/jobs/edge-case-analyzer.js.map +1 -0
- package/dist/jobs/promotion-sla-enforcer.js +288 -0
- package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
- package/dist/lib/agent-output-parser.js +518 -0
- package/dist/lib/agent-output-parser.js.map +1 -0
- package/dist/lib/agent-output-validator.js +950 -0
- package/dist/lib/agent-output-validator.js.map +1 -0
- package/dist/lib/agent-workspace.js +281 -0
- package/dist/lib/agent-workspace.js.map +1 -0
- package/dist/lib/artifact-registry.js +443 -0
- package/dist/lib/artifact-registry.js.map +1 -0
- package/dist/lib/atomic-file-writer.js +377 -0
- package/dist/lib/atomic-file-writer.js.map +1 -0
- package/dist/lib/backup-manager.js +779 -0
- package/dist/lib/backup-manager.js.map +1 -0
- package/dist/lib/checkpoint-manager.js +837 -0
- package/dist/lib/checkpoint-manager.js.map +1 -0
- package/dist/lib/circuit-breaker.js +340 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/completion-signal-handler.js +243 -0
- package/dist/lib/completion-signal-handler.js.map +1 -0
- package/dist/lib/config-manager.js +312 -0
- package/dist/lib/config-manager.js.map +1 -0
- package/dist/lib/config-migrator.js +386 -0
- package/dist/lib/config-migrator.js.map +1 -0
- package/dist/lib/config-validator.js +687 -0
- package/dist/lib/config-validator.js.map +1 -0
- package/dist/lib/correlation-cache.js +311 -0
- package/dist/lib/correlation-cache.js.map +1 -0
- package/dist/lib/correlation.js +263 -0
- package/dist/lib/correlation.js.map +1 -0
- package/dist/lib/database-service/connection-pool-manager.js +520 -0
- package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
- package/dist/lib/database-service/correlation.js +329 -0
- package/dist/lib/database-service/correlation.js.map +1 -0
- package/dist/lib/database-service/errors.js +120 -0
- package/dist/lib/database-service/errors.js.map +1 -0
- package/dist/lib/database-service/index.js +168 -0
- package/dist/lib/database-service/index.js.map +1 -0
- package/dist/lib/database-service/postgres-adapter.js +526 -0
- package/dist/lib/database-service/postgres-adapter.js.map +1 -0
- package/dist/lib/database-service/redis-adapter.js +360 -0
- package/dist/lib/database-service/redis-adapter.js.map +1 -0
- package/dist/lib/database-service/sqlite-adapter.js +544 -0
- package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
- package/dist/lib/database-service/transaction-manager.js +773 -0
- package/dist/lib/database-service/transaction-manager.js.map +1 -0
- package/dist/lib/database-service/types.js +23 -0
- package/dist/lib/database-service/types.js.map +1 -0
- package/dist/lib/deadlock-resolver.js +292 -0
- package/dist/lib/deadlock-resolver.js.map +1 -0
- package/dist/lib/distributed-lock.js +451 -0
- package/dist/lib/distributed-lock.js.map +1 -0
- package/dist/lib/edge-case-deduplicator.js +227 -0
- package/dist/lib/edge-case-deduplicator.js.map +1 -0
- package/dist/lib/encryption-manager.js +322 -0
- package/dist/lib/encryption-manager.js.map +1 -0
- package/dist/lib/error-aggregator.js +234 -0
- package/dist/lib/error-aggregator.js.map +1 -0
- package/dist/lib/errors.js +287 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/file-lock-manager.js +578 -0
- package/dist/lib/file-lock-manager.js.map +1 -0
- package/dist/lib/file-operations.js +367 -0
- package/dist/lib/file-operations.js.map +1 -0
- package/dist/lib/idempotent-write.js +237 -0
- package/dist/lib/idempotent-write.js.map +1 -0
- package/dist/lib/integration-schema-validator.js +522 -0
- package/dist/lib/integration-schema-validator.js.map +1 -0
- package/dist/lib/lock-health-monitor.js +298 -0
- package/dist/lib/lock-health-monitor.js.map +1 -0
- package/dist/lib/log-shipper.js +422 -0
- package/dist/lib/log-shipper.js.map +1 -0
- package/dist/lib/logging.js +146 -0
- package/dist/lib/logging.js.map +1 -0
- package/dist/lib/message-deduplicator.js +439 -0
- package/dist/lib/message-deduplicator.js.map +1 -0
- package/dist/lib/multi-system-query.js +604 -0
- package/dist/lib/multi-system-query.js.map +1 -0
- package/dist/lib/orphan-detector.js +332 -0
- package/dist/lib/orphan-detector.js.map +1 -0
- package/dist/lib/password-generator.js +166 -0
- package/dist/lib/password-generator.js.map +1 -0
- package/dist/lib/path-validator.js +429 -0
- package/dist/lib/path-validator.js.map +1 -0
- package/dist/lib/query-translator.js +905 -0
- package/dist/lib/query-translator.js.map +1 -0
- package/dist/lib/queue-recovery.js +469 -0
- package/dist/lib/queue-recovery.js.map +1 -0
- package/dist/lib/redis-queue-manager.js +512 -0
- package/dist/lib/redis-queue-manager.js.map +1 -0
- package/dist/lib/reflection-archiver.js +272 -0
- package/dist/lib/reflection-archiver.js.map +1 -0
- package/dist/lib/retry-manager.js +453 -0
- package/dist/lib/retry-manager.js.map +1 -0
- package/dist/lib/retry.js +262 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/schema-transform.js +695 -0
- package/dist/lib/schema-transform.js.map +1 -0
- package/dist/lib/schema-validator.js +491 -0
- package/dist/lib/schema-validator.js.map +1 -0
- package/dist/lib/skill-cache.js +297 -0
- package/dist/lib/skill-cache.js.map +1 -0
- package/dist/lib/skill-content-manager.js +337 -0
- package/dist/lib/skill-content-manager.js.map +1 -0
- package/dist/lib/skill-frontmatter-parser.js +237 -0
- package/dist/lib/skill-frontmatter-parser.js.map +1 -0
- package/dist/lib/skill-git-integration.js +275 -0
- package/dist/lib/skill-git-integration.js.map +1 -0
- package/dist/lib/skill-markdown-validator.js +396 -0
- package/dist/lib/skill-markdown-validator.js.map +1 -0
- package/dist/lib/skill-output-parser.js +312 -0
- package/dist/lib/skill-output-parser.js.map +1 -0
- package/dist/lib/unified-query-api.js +467 -0
- package/dist/lib/unified-query-api.js.map +1 -0
- package/dist/middleware/auth-middleware.js +350 -0
- package/dist/middleware/auth-middleware.js.map +1 -0
- package/dist/middleware/schema-validation.js +347 -0
- package/dist/middleware/schema-validation.js.map +1 -0
- package/dist/providers/anthropic-provider.js +1 -1
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/provider-factory.js +2 -2
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/services/edge-case-analyzer.js +321 -0
- package/dist/services/edge-case-analyzer.js.map +1 -0
- package/dist/services/edge-case-deduplicator.js +266 -0
- package/dist/services/edge-case-deduplicator.js.map +1 -0
- package/dist/services/edge-case-detector.js +337 -0
- package/dist/services/edge-case-detector.js.map +1 -0
- package/dist/services/edge-case-tracker.js +547 -0
- package/dist/services/edge-case-tracker.js.map +1 -0
- package/dist/services/health-check-system.js +586 -0
- package/dist/services/health-check-system.js.map +1 -0
- package/dist/services/metrics-logger.js +412 -0
- package/dist/services/metrics-logger.js.map +1 -0
- package/dist/services/patch-generator.js +378 -0
- package/dist/services/patch-generator.js.map +1 -0
- package/dist/services/patch-validator.js +337 -0
- package/dist/services/patch-validator.js.map +1 -0
- package/dist/services/performance-monitor.js +811 -0
- package/dist/services/performance-monitor.js.map +1 -0
- package/dist/services/promotion-pipeline.js +918 -0
- package/dist/services/promotion-pipeline.js.map +1 -0
- package/dist/services/promotion-validator.js +394 -0
- package/dist/services/promotion-validator.js.map +1 -0
- package/dist/services/reflection-logger.js +388 -0
- package/dist/services/reflection-logger.js.map +1 -0
- package/dist/services/skill-deployment.js +472 -0
- package/dist/services/skill-deployment.js.map +1 -0
- package/dist/services/skill-loader.js +427 -0
- package/dist/services/skill-loader.js.map +1 -0
- package/dist/services/skill-promotion.js +372 -0
- package/dist/services/skill-promotion.js.map +1 -0
- package/dist/services/skill-validator.js +454 -0
- package/dist/services/skill-validator.js.map +1 -0
- package/dist/services/skill-versioning.js +244 -0
- package/dist/services/skill-versioning.js.map +1 -0
- package/dist/services/workspace-supervisor.js +597 -0
- package/dist/services/workspace-supervisor.js.map +1 -0
- package/dist/types/agent-output.js +44 -0
- package/dist/types/agent-output.js.map +1 -0
- package/dist/types/config.js +28 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/edge-case.js +45 -0
- package/dist/types/edge-case.js.map +1 -0
- package/package.json +201 -176
- package/readme/README.md +19 -4
- package/scripts/artifact-cleanup.sh +392 -0
- package/scripts/backup-cleanup.sh +627 -0
- package/scripts/cleanup-workspaces.sh +412 -0
- package/scripts/cleanup-yaml-configs.sh +141 -0
- package/scripts/deploy-approved-skills.sh +263 -0
- package/scripts/deploy-production.sh +355 -355
- package/scripts/docker-playwright-fix.sh +311 -311
- package/scripts/docker-rebuild-all-agents.sh +127 -127
- package/scripts/health-check.sh +447 -0
- package/scripts/log-aggregator.sh +554 -0
- package/scripts/log-monitor.sh +629 -0
- package/scripts/manage-agent-workspaces.sh +434 -0
- package/scripts/memory-leak-prevention.sh +305 -305
- package/scripts/migrate-artifacts.sh +563 -0
- package/scripts/migrate-schema.sh +533 -0
- package/scripts/migrate-yaml-to-json.sh +465 -0
- package/scripts/promote-staged-skills.sh +423 -0
- package/scripts/run-marketing-tests.sh +42 -42
- package/scripts/update_paths.sh +46 -46
- package/scripts/verify-no-secrets.sh +88 -35
- package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
- package/README.md.backup_before_replace +0 -781
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
|
@@ -1,306 +1,306 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Memory Leak Detection and Prevention Script
|
|
4
|
-
# Implements recommendations from memory leak analysis
|
|
5
|
-
|
|
6
|
-
set -euo pipefail
|
|
7
|
-
|
|
8
|
-
# Configuration
|
|
9
|
-
DEFAULT_MEMORY_LIMIT="8192" # 8GB limit instead of 16GB
|
|
10
|
-
DEFAULT_NODE_OPTIONS="--max-old-space-size=$DEFAULT_MEMORY_LIMIT"
|
|
11
|
-
PROFILING_DIR="/tmp/claude-memory-profiles"
|
|
12
|
-
LOG_FILE="/tmp/claude-memory-monitor.log"
|
|
13
|
-
|
|
14
|
-
# Colors for output
|
|
15
|
-
RED='\033[0;31m'
|
|
16
|
-
GREEN='\033[0;32m'
|
|
17
|
-
YELLOW='\033[1;33m'
|
|
18
|
-
BLUE='\033[0;34m'
|
|
19
|
-
NC='\033[0m' # No Color
|
|
20
|
-
|
|
21
|
-
# Create profiling directory
|
|
22
|
-
mkdir -p "$PROFILING_DIR"
|
|
23
|
-
|
|
24
|
-
log() {
|
|
25
|
-
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
show_help() {
|
|
29
|
-
cat << EOF
|
|
30
|
-
Memory Leak Detection and Prevention Tool
|
|
31
|
-
|
|
32
|
-
Usage: $0 [COMMAND] [OPTIONS]
|
|
33
|
-
|
|
34
|
-
Commands:
|
|
35
|
-
profile Start Claude with heap profiling enabled
|
|
36
|
-
monitor Monitor existing Claude process memory usage
|
|
37
|
-
limit Set memory limits for Claude sessions
|
|
38
|
-
install-tools Install strace and perf for WSL
|
|
39
|
-
analyze Analyze existing memory profiles
|
|
40
|
-
config Show current memory configuration
|
|
41
|
-
|
|
42
|
-
Options:
|
|
43
|
-
--limit MB Set memory limit in MB (default: 8192)
|
|
44
|
-
--pid PID Monitor specific process ID
|
|
45
|
-
--duration SEC Monitoring duration in seconds (default: 300)
|
|
46
|
-
--output DIR Output directory for profiles (default: /tmp/claude-memory-profiles)
|
|
47
|
-
|
|
48
|
-
Examples:
|
|
49
|
-
$0 profile --limit 6144 # Start Claude with 6GB limit and profiling
|
|
50
|
-
$0 monitor --pid 12345 --duration 600 # Monitor PID 12345 for 10 minutes
|
|
51
|
-
$0 install-tools # Install strace and perf
|
|
52
|
-
$0 analyze --output ./profiles # Analyze existing profiles
|
|
53
|
-
EOF
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
install_debug_tools() {
|
|
57
|
-
log "${BLUE}Installing strace and perf for debugging...${NC}"
|
|
58
|
-
|
|
59
|
-
if command -v apt-get &> /dev/null; then
|
|
60
|
-
sudo apt-get update
|
|
61
|
-
sudo apt-get install -y strace linux-tools-generic linux-perf
|
|
62
|
-
elif command -v yum &> /dev/null; then
|
|
63
|
-
sudo yum install -y strace perf
|
|
64
|
-
else
|
|
65
|
-
log "${RED}Unsupported package manager. Please install strace and perf manually.${NC}"
|
|
66
|
-
return 1
|
|
67
|
-
fi
|
|
68
|
-
|
|
69
|
-
# Configure perf for non-root users
|
|
70
|
-
echo -1 | sudo tee /proc/sys/kernel/perf_event_paranoid >/dev/null 2>&1 || true
|
|
71
|
-
echo 0 | sudo tee /proc/sys/kernel/kptr_restrict >/dev/null 2>&1 || true
|
|
72
|
-
|
|
73
|
-
log "${GREEN}Debug tools installed successfully${NC}"
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
start_with_profiling() {
|
|
77
|
-
local memory_limit=${1:-$DEFAULT_MEMORY_LIMIT}
|
|
78
|
-
|
|
79
|
-
log "${BLUE}Starting Claude with heap profiling and memory limit: ${memory_limit}MB${NC}"
|
|
80
|
-
|
|
81
|
-
# Set up environment for profiling
|
|
82
|
-
export NODE_OPTIONS="--max-old-space-size=$memory_limit --inspect=0.0.0.0:9229 --heap-prof"
|
|
83
|
-
export CLAUDE_MEMORY_PROFILE_DIR="$PROFILING_DIR"
|
|
84
|
-
|
|
85
|
-
# Create profile filename with timestamp
|
|
86
|
-
local profile_file="${PROFILING_DIR}/claude-profile-$(date +%Y%m%d-%H%M%S)"
|
|
87
|
-
|
|
88
|
-
log "${GREEN}Environment variables set:${NC}"
|
|
89
|
-
log " NODE_OPTIONS: $NODE_OPTIONS"
|
|
90
|
-
log " Profile directory: $PROFILING_DIR"
|
|
91
|
-
log "${YELLOW}Claude will start with debugging enabled on port 9229${NC}"
|
|
92
|
-
log "${YELLOW}Use Chrome DevTools or chrome://inspect to connect${NC}"
|
|
93
|
-
|
|
94
|
-
# Start Claude CLI with profiling
|
|
95
|
-
log "${BLUE}Starting Claude CLI...${NC}"
|
|
96
|
-
npx claude-flow-novice "$@"
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
monitor_memory() {
|
|
100
|
-
local target_pid=${1:-}
|
|
101
|
-
local duration=${2:-300}
|
|
102
|
-
local output_file="${PROFILING_DIR}/memory-monitor-$(date +%Y%m%d-%H%M%S).csv"
|
|
103
|
-
|
|
104
|
-
if [[ -z "$target_pid" ]]; then
|
|
105
|
-
log "${RED}Error: PID required for monitoring. Use --pid to specify.${NC}"
|
|
106
|
-
return 1
|
|
107
|
-
fi
|
|
108
|
-
|
|
109
|
-
log "${BLUE}Monitoring PID $target_pid for ${duration} seconds...${NC}"
|
|
110
|
-
log "Results will be saved to: $output_file"
|
|
111
|
-
|
|
112
|
-
# Create CSV header
|
|
113
|
-
echo "timestamp,pid,rss_mb,vms_mb,cpu_percent,open_files,connections" > "$output_file"
|
|
114
|
-
|
|
115
|
-
local start_time=$(date +%s)
|
|
116
|
-
local end_time=$((start_time + duration))
|
|
117
|
-
|
|
118
|
-
while [[ $(date +%s) -lt $end_time ]]; do
|
|
119
|
-
if ! kill -0 "$target_pid" 2>/dev/null; then
|
|
120
|
-
log "${RED}Process $target_pid is no longer running${NC}"
|
|
121
|
-
break
|
|
122
|
-
fi
|
|
123
|
-
|
|
124
|
-
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|
125
|
-
local stats=$(ps -p "$target_pid" -o pid,rss,vms,pcpu --no-headers 2>/dev/null || echo "")
|
|
126
|
-
|
|
127
|
-
if [[ -n "$stats" ]]; then
|
|
128
|
-
local rss_mb=$(echo "$stats" | awk '{print int($2/1024)}')
|
|
129
|
-
local vms_mb=$(echo "$stats" | awk '{print int($3/1024)}')
|
|
130
|
-
local cpu_percent=$(echo "$stats" | awk '{print $4}')
|
|
131
|
-
|
|
132
|
-
# Count open files and network connections
|
|
133
|
-
local open_files=$(lsof -p "$target_pid" 2>/dev/null | wc -l || echo "0")
|
|
134
|
-
local connections=$(netstat -p 2>/dev/null | grep "$target_pid/" | wc -l || echo "0")
|
|
135
|
-
|
|
136
|
-
echo "$timestamp,$target_pid,$rss_mb,$vms_mb,$cpu_percent,$open_files,$connections" >> "$output_file"
|
|
137
|
-
|
|
138
|
-
# Alert if memory exceeds threshold
|
|
139
|
-
if [[ $rss_mb -gt 8192 ]]; then
|
|
140
|
-
log "${RED}⚠️ High memory usage detected: ${rss_mb}MB RSS${NC}"
|
|
141
|
-
fi
|
|
142
|
-
|
|
143
|
-
log "Memory: ${rss_mb}MB RSS, ${vms_mb}MB VMS, CPU: ${cpu_percent}%, Files: $open_files, Connections: $connections"
|
|
144
|
-
fi
|
|
145
|
-
|
|
146
|
-
sleep 10
|
|
147
|
-
done
|
|
148
|
-
|
|
149
|
-
log "${GREEN}Monitoring completed. Data saved to: $output_file${NC}"
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
set_memory_limits() {
|
|
153
|
-
local limit_mb=${1:-8192}
|
|
154
|
-
|
|
155
|
-
log "${BLUE}Setting memory limits to ${limit_mb}MB...${NC}"
|
|
156
|
-
|
|
157
|
-
# Update shell configuration
|
|
158
|
-
local shell_rc="$HOME/.bashrc"
|
|
159
|
-
if [[ -f "$HOME/.zshrc" ]]; then
|
|
160
|
-
shell_rc="$HOME/.zshrc"
|
|
161
|
-
fi
|
|
162
|
-
|
|
163
|
-
# Remove existing NODE_OPTIONS lines
|
|
164
|
-
sed -i '/^export NODE_OPTIONS="--max-old-space-size=/d' "$shell_rc" 2>/dev/null || true
|
|
165
|
-
|
|
166
|
-
# Add new limit
|
|
167
|
-
echo "export NODE_OPTIONS=\"--max-old-space-size=$limit_mb\"" >> "$shell_rc"
|
|
168
|
-
|
|
169
|
-
log "${GREEN}Memory limit set to ${limit_mb}MB in $shell_rc${NC}"
|
|
170
|
-
log "${YELLOW}Restart your shell or run: source $shell_rc${NC}"
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
analyze_profiles() {
|
|
174
|
-
local profile_dir=${1:-$PROFILING_DIR}
|
|
175
|
-
|
|
176
|
-
log "${BLUE}Analyzing memory profiles in $profile_dir...${NC}"
|
|
177
|
-
|
|
178
|
-
if [[ ! -d "$profile_dir" ]]; then
|
|
179
|
-
log "${RED}Profile directory $profile_dir does not exist${NC}"
|
|
180
|
-
return 1
|
|
181
|
-
fi
|
|
182
|
-
|
|
183
|
-
# Find heap profile files
|
|
184
|
-
local heap_profiles=($(find "$profile_dir" -name "*.heapprofile" 2>/dev/null))
|
|
185
|
-
|
|
186
|
-
if [[ ${#heap_profiles[@]} -eq 0 ]]; then
|
|
187
|
-
log "${YELLOW}No heap profiles found in $profile_dir${NC}"
|
|
188
|
-
return 1
|
|
189
|
-
fi
|
|
190
|
-
|
|
191
|
-
log "${GREEN}Found ${#heap_profiles[@]} heap profile(s)${NC}"
|
|
192
|
-
|
|
193
|
-
for profile in "${heap_profiles[@]}"; do
|
|
194
|
-
log "${BLUE}Analyzing: $(basename "$profile")${NC}"
|
|
195
|
-
|
|
196
|
-
# Basic analysis - find top allocations
|
|
197
|
-
if command -v node &> /dev/null; then
|
|
198
|
-
echo "Top 10 allocations in $(basename "$profile"):" > "${profile}.analysis"
|
|
199
|
-
node -e "
|
|
200
|
-
const fs = require('fs');
|
|
201
|
-
const data = JSON.parse(fs.readFileSync('$profile', 'utf8'));
|
|
202
|
-
const allocations = data.heapProfile || data;
|
|
203
|
-
if (allocations && allocations.samples) {
|
|
204
|
-
allocations.samples
|
|
205
|
-
.sort((a, b) => b.size - a.size)
|
|
206
|
-
.slice(0, 10)
|
|
207
|
-
.forEach((sample, i) => {
|
|
208
|
-
console.log(\`\${i+1}. \${sample.functionName || 'unknown'}: \${(sample.size/1024/1024).toFixed(2)}MB\`);
|
|
209
|
-
});
|
|
210
|
-
}
|
|
211
|
-
" >> "${profile}.analysis"
|
|
212
|
-
|
|
213
|
-
log "${GREEN}Analysis saved to: ${profile}.analysis${NC}"
|
|
214
|
-
fi
|
|
215
|
-
done
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
show_config() {
|
|
219
|
-
log "${BLUE}Current Memory Configuration:${NC}"
|
|
220
|
-
|
|
221
|
-
# Show current NODE_OPTIONS
|
|
222
|
-
if [[ -n "${NODE_OPTIONS:-}" ]]; then
|
|
223
|
-
log " NODE_OPTIONS: $NODE_OPTIONS"
|
|
224
|
-
else
|
|
225
|
-
log " NODE_OPTIONS: (not set)"
|
|
226
|
-
fi
|
|
227
|
-
|
|
228
|
-
# Show current limits
|
|
229
|
-
local current_limit=$(echo "$NODE_OPTIONS" | grep -o 'max-old-space-size=[0-9]*' | cut -d'=' -f2 || echo "unlimited")
|
|
230
|
-
log " Memory limit: ${current_limit}MB"
|
|
231
|
-
|
|
232
|
-
# Show available memory
|
|
233
|
-
if command -v free &> /dev/null; then
|
|
234
|
-
local total_mem=$(free -m | awk 'NR==2{print $2}')
|
|
235
|
-
local available_mem=$(free -m | awk 'NR==2{print $7}')
|
|
236
|
-
log " System memory: ${available_mem}MB available / ${total_mem}MB total"
|
|
237
|
-
fi
|
|
238
|
-
|
|
239
|
-
# Show profile directory
|
|
240
|
-
log " Profile directory: $PROFILING_DIR"
|
|
241
|
-
log " Log file: $LOG_FILE"
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
# Parse command line arguments
|
|
245
|
-
case "${1:-}" in
|
|
246
|
-
"profile")
|
|
247
|
-
shift
|
|
248
|
-
local limit=$DEFAULT_MEMORY_LIMIT
|
|
249
|
-
while [[ $# -gt 0 ]]; do
|
|
250
|
-
case $1 in
|
|
251
|
-
--limit) limit="$2"; shift 2 ;;
|
|
252
|
-
*) shift ;;
|
|
253
|
-
esac
|
|
254
|
-
done
|
|
255
|
-
start_with_profiling "$limit"
|
|
256
|
-
;;
|
|
257
|
-
"monitor")
|
|
258
|
-
shift
|
|
259
|
-
local pid=""
|
|
260
|
-
local duration=300
|
|
261
|
-
while [[ $# -gt 0 ]]; do
|
|
262
|
-
case $1 in
|
|
263
|
-
--pid) pid="$2"; shift 2 ;;
|
|
264
|
-
--duration) duration="$2"; shift 2 ;;
|
|
265
|
-
*) shift ;;
|
|
266
|
-
esac
|
|
267
|
-
done
|
|
268
|
-
monitor_memory "$pid" "$duration"
|
|
269
|
-
;;
|
|
270
|
-
"limit")
|
|
271
|
-
shift
|
|
272
|
-
local limit=$DEFAULT_MEMORY_LIMIT
|
|
273
|
-
while [[ $# -gt 0 ]]; do
|
|
274
|
-
case $1 in
|
|
275
|
-
--limit) limit="$2"; shift 2 ;;
|
|
276
|
-
*) shift ;;
|
|
277
|
-
esac
|
|
278
|
-
done
|
|
279
|
-
set_memory_limits "$limit"
|
|
280
|
-
;;
|
|
281
|
-
"install-tools")
|
|
282
|
-
install_debug_tools
|
|
283
|
-
;;
|
|
284
|
-
"analyze")
|
|
285
|
-
shift
|
|
286
|
-
local dir=$PROFILING_DIR
|
|
287
|
-
while [[ $# -gt 0 ]]; do
|
|
288
|
-
case $1 in
|
|
289
|
-
--output) dir="$2"; shift 2 ;;
|
|
290
|
-
*) shift ;;
|
|
291
|
-
esac
|
|
292
|
-
done
|
|
293
|
-
analyze_profiles "$dir"
|
|
294
|
-
;;
|
|
295
|
-
"config")
|
|
296
|
-
show_config
|
|
297
|
-
;;
|
|
298
|
-
"help"|"-h"|"--help")
|
|
299
|
-
show_help
|
|
300
|
-
;;
|
|
301
|
-
*)
|
|
302
|
-
log "${RED}Unknown command: ${1:-}${NC}"
|
|
303
|
-
show_help
|
|
304
|
-
exit 1
|
|
305
|
-
;;
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Memory Leak Detection and Prevention Script
|
|
4
|
+
# Implements recommendations from memory leak analysis
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
# Configuration
|
|
9
|
+
DEFAULT_MEMORY_LIMIT="8192" # 8GB limit instead of 16GB
|
|
10
|
+
DEFAULT_NODE_OPTIONS="--max-old-space-size=$DEFAULT_MEMORY_LIMIT"
|
|
11
|
+
PROFILING_DIR="/tmp/claude-memory-profiles"
|
|
12
|
+
LOG_FILE="/tmp/claude-memory-monitor.log"
|
|
13
|
+
|
|
14
|
+
# Colors for output
|
|
15
|
+
RED='\033[0;31m'
|
|
16
|
+
GREEN='\033[0;32m'
|
|
17
|
+
YELLOW='\033[1;33m'
|
|
18
|
+
BLUE='\033[0;34m'
|
|
19
|
+
NC='\033[0m' # No Color
|
|
20
|
+
|
|
21
|
+
# Create profiling directory
|
|
22
|
+
mkdir -p "$PROFILING_DIR"
|
|
23
|
+
|
|
24
|
+
log() {
|
|
25
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
show_help() {
|
|
29
|
+
cat << EOF
|
|
30
|
+
Memory Leak Detection and Prevention Tool
|
|
31
|
+
|
|
32
|
+
Usage: $0 [COMMAND] [OPTIONS]
|
|
33
|
+
|
|
34
|
+
Commands:
|
|
35
|
+
profile Start Claude with heap profiling enabled
|
|
36
|
+
monitor Monitor existing Claude process memory usage
|
|
37
|
+
limit Set memory limits for Claude sessions
|
|
38
|
+
install-tools Install strace and perf for WSL
|
|
39
|
+
analyze Analyze existing memory profiles
|
|
40
|
+
config Show current memory configuration
|
|
41
|
+
|
|
42
|
+
Options:
|
|
43
|
+
--limit MB Set memory limit in MB (default: 8192)
|
|
44
|
+
--pid PID Monitor specific process ID
|
|
45
|
+
--duration SEC Monitoring duration in seconds (default: 300)
|
|
46
|
+
--output DIR Output directory for profiles (default: /tmp/claude-memory-profiles)
|
|
47
|
+
|
|
48
|
+
Examples:
|
|
49
|
+
$0 profile --limit 6144 # Start Claude with 6GB limit and profiling
|
|
50
|
+
$0 monitor --pid 12345 --duration 600 # Monitor PID 12345 for 10 minutes
|
|
51
|
+
$0 install-tools # Install strace and perf
|
|
52
|
+
$0 analyze --output ./profiles # Analyze existing profiles
|
|
53
|
+
EOF
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
install_debug_tools() {
|
|
57
|
+
log "${BLUE}Installing strace and perf for debugging...${NC}"
|
|
58
|
+
|
|
59
|
+
if command -v apt-get &> /dev/null; then
|
|
60
|
+
sudo apt-get update
|
|
61
|
+
sudo apt-get install -y strace linux-tools-generic linux-perf
|
|
62
|
+
elif command -v yum &> /dev/null; then
|
|
63
|
+
sudo yum install -y strace perf
|
|
64
|
+
else
|
|
65
|
+
log "${RED}Unsupported package manager. Please install strace and perf manually.${NC}"
|
|
66
|
+
return 1
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# Configure perf for non-root users
|
|
70
|
+
echo -1 | sudo tee /proc/sys/kernel/perf_event_paranoid >/dev/null 2>&1 || true
|
|
71
|
+
echo 0 | sudo tee /proc/sys/kernel/kptr_restrict >/dev/null 2>&1 || true
|
|
72
|
+
|
|
73
|
+
log "${GREEN}Debug tools installed successfully${NC}"
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
start_with_profiling() {
|
|
77
|
+
local memory_limit=${1:-$DEFAULT_MEMORY_LIMIT}
|
|
78
|
+
|
|
79
|
+
log "${BLUE}Starting Claude with heap profiling and memory limit: ${memory_limit}MB${NC}"
|
|
80
|
+
|
|
81
|
+
# Set up environment for profiling
|
|
82
|
+
export NODE_OPTIONS="--max-old-space-size=$memory_limit --inspect=0.0.0.0:9229 --heap-prof"
|
|
83
|
+
export CLAUDE_MEMORY_PROFILE_DIR="$PROFILING_DIR"
|
|
84
|
+
|
|
85
|
+
# Create profile filename with timestamp
|
|
86
|
+
local profile_file="${PROFILING_DIR}/claude-profile-$(date +%Y%m%d-%H%M%S)"
|
|
87
|
+
|
|
88
|
+
log "${GREEN}Environment variables set:${NC}"
|
|
89
|
+
log " NODE_OPTIONS: $NODE_OPTIONS"
|
|
90
|
+
log " Profile directory: $PROFILING_DIR"
|
|
91
|
+
log "${YELLOW}Claude will start with debugging enabled on port 9229${NC}"
|
|
92
|
+
log "${YELLOW}Use Chrome DevTools or chrome://inspect to connect${NC}"
|
|
93
|
+
|
|
94
|
+
# Start Claude CLI with profiling
|
|
95
|
+
log "${BLUE}Starting Claude CLI...${NC}"
|
|
96
|
+
npx claude-flow-novice "$@"
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
monitor_memory() {
|
|
100
|
+
local target_pid=${1:-}
|
|
101
|
+
local duration=${2:-300}
|
|
102
|
+
local output_file="${PROFILING_DIR}/memory-monitor-$(date +%Y%m%d-%H%M%S).csv"
|
|
103
|
+
|
|
104
|
+
if [[ -z "$target_pid" ]]; then
|
|
105
|
+
log "${RED}Error: PID required for monitoring. Use --pid to specify.${NC}"
|
|
106
|
+
return 1
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
log "${BLUE}Monitoring PID $target_pid for ${duration} seconds...${NC}"
|
|
110
|
+
log "Results will be saved to: $output_file"
|
|
111
|
+
|
|
112
|
+
# Create CSV header
|
|
113
|
+
echo "timestamp,pid,rss_mb,vms_mb,cpu_percent,open_files,connections" > "$output_file"
|
|
114
|
+
|
|
115
|
+
local start_time=$(date +%s)
|
|
116
|
+
local end_time=$((start_time + duration))
|
|
117
|
+
|
|
118
|
+
while [[ $(date +%s) -lt $end_time ]]; do
|
|
119
|
+
if ! kill -0 "$target_pid" 2>/dev/null; then
|
|
120
|
+
log "${RED}Process $target_pid is no longer running${NC}"
|
|
121
|
+
break
|
|
122
|
+
fi
|
|
123
|
+
|
|
124
|
+
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|
125
|
+
local stats=$(ps -p "$target_pid" -o pid,rss,vms,pcpu --no-headers 2>/dev/null || echo "")
|
|
126
|
+
|
|
127
|
+
if [[ -n "$stats" ]]; then
|
|
128
|
+
local rss_mb=$(echo "$stats" | awk '{print int($2/1024)}')
|
|
129
|
+
local vms_mb=$(echo "$stats" | awk '{print int($3/1024)}')
|
|
130
|
+
local cpu_percent=$(echo "$stats" | awk '{print $4}')
|
|
131
|
+
|
|
132
|
+
# Count open files and network connections
|
|
133
|
+
local open_files=$(lsof -p "$target_pid" 2>/dev/null | wc -l || echo "0")
|
|
134
|
+
local connections=$(netstat -p 2>/dev/null | grep "$target_pid/" | wc -l || echo "0")
|
|
135
|
+
|
|
136
|
+
echo "$timestamp,$target_pid,$rss_mb,$vms_mb,$cpu_percent,$open_files,$connections" >> "$output_file"
|
|
137
|
+
|
|
138
|
+
# Alert if memory exceeds threshold
|
|
139
|
+
if [[ $rss_mb -gt 8192 ]]; then
|
|
140
|
+
log "${RED}⚠️ High memory usage detected: ${rss_mb}MB RSS${NC}"
|
|
141
|
+
fi
|
|
142
|
+
|
|
143
|
+
log "Memory: ${rss_mb}MB RSS, ${vms_mb}MB VMS, CPU: ${cpu_percent}%, Files: $open_files, Connections: $connections"
|
|
144
|
+
fi
|
|
145
|
+
|
|
146
|
+
sleep 10
|
|
147
|
+
done
|
|
148
|
+
|
|
149
|
+
log "${GREEN}Monitoring completed. Data saved to: $output_file${NC}"
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
set_memory_limits() {
|
|
153
|
+
local limit_mb=${1:-8192}
|
|
154
|
+
|
|
155
|
+
log "${BLUE}Setting memory limits to ${limit_mb}MB...${NC}"
|
|
156
|
+
|
|
157
|
+
# Update shell configuration
|
|
158
|
+
local shell_rc="$HOME/.bashrc"
|
|
159
|
+
if [[ -f "$HOME/.zshrc" ]]; then
|
|
160
|
+
shell_rc="$HOME/.zshrc"
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
# Remove existing NODE_OPTIONS lines
|
|
164
|
+
sed -i '/^export NODE_OPTIONS="--max-old-space-size=/d' "$shell_rc" 2>/dev/null || true
|
|
165
|
+
|
|
166
|
+
# Add new limit
|
|
167
|
+
echo "export NODE_OPTIONS=\"--max-old-space-size=$limit_mb\"" >> "$shell_rc"
|
|
168
|
+
|
|
169
|
+
log "${GREEN}Memory limit set to ${limit_mb}MB in $shell_rc${NC}"
|
|
170
|
+
log "${YELLOW}Restart your shell or run: source $shell_rc${NC}"
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
analyze_profiles() {
|
|
174
|
+
local profile_dir=${1:-$PROFILING_DIR}
|
|
175
|
+
|
|
176
|
+
log "${BLUE}Analyzing memory profiles in $profile_dir...${NC}"
|
|
177
|
+
|
|
178
|
+
if [[ ! -d "$profile_dir" ]]; then
|
|
179
|
+
log "${RED}Profile directory $profile_dir does not exist${NC}"
|
|
180
|
+
return 1
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
# Find heap profile files
|
|
184
|
+
local heap_profiles=($(find "$profile_dir" -name "*.heapprofile" 2>/dev/null))
|
|
185
|
+
|
|
186
|
+
if [[ ${#heap_profiles[@]} -eq 0 ]]; then
|
|
187
|
+
log "${YELLOW}No heap profiles found in $profile_dir${NC}"
|
|
188
|
+
return 1
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
log "${GREEN}Found ${#heap_profiles[@]} heap profile(s)${NC}"
|
|
192
|
+
|
|
193
|
+
for profile in "${heap_profiles[@]}"; do
|
|
194
|
+
log "${BLUE}Analyzing: $(basename "$profile")${NC}"
|
|
195
|
+
|
|
196
|
+
# Basic analysis - find top allocations
|
|
197
|
+
if command -v node &> /dev/null; then
|
|
198
|
+
echo "Top 10 allocations in $(basename "$profile"):" > "${profile}.analysis"
|
|
199
|
+
node -e "
|
|
200
|
+
const fs = require('fs');
|
|
201
|
+
const data = JSON.parse(fs.readFileSync('$profile', 'utf8'));
|
|
202
|
+
const allocations = data.heapProfile || data;
|
|
203
|
+
if (allocations && allocations.samples) {
|
|
204
|
+
allocations.samples
|
|
205
|
+
.sort((a, b) => b.size - a.size)
|
|
206
|
+
.slice(0, 10)
|
|
207
|
+
.forEach((sample, i) => {
|
|
208
|
+
console.log(\`\${i+1}. \${sample.functionName || 'unknown'}: \${(sample.size/1024/1024).toFixed(2)}MB\`);
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
" >> "${profile}.analysis"
|
|
212
|
+
|
|
213
|
+
log "${GREEN}Analysis saved to: ${profile}.analysis${NC}"
|
|
214
|
+
fi
|
|
215
|
+
done
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
show_config() {
|
|
219
|
+
log "${BLUE}Current Memory Configuration:${NC}"
|
|
220
|
+
|
|
221
|
+
# Show current NODE_OPTIONS
|
|
222
|
+
if [[ -n "${NODE_OPTIONS:-}" ]]; then
|
|
223
|
+
log " NODE_OPTIONS: $NODE_OPTIONS"
|
|
224
|
+
else
|
|
225
|
+
log " NODE_OPTIONS: (not set)"
|
|
226
|
+
fi
|
|
227
|
+
|
|
228
|
+
# Show current limits
|
|
229
|
+
local current_limit=$(echo "$NODE_OPTIONS" | grep -o 'max-old-space-size=[0-9]*' | cut -d'=' -f2 || echo "unlimited")
|
|
230
|
+
log " Memory limit: ${current_limit}MB"
|
|
231
|
+
|
|
232
|
+
# Show available memory
|
|
233
|
+
if command -v free &> /dev/null; then
|
|
234
|
+
local total_mem=$(free -m | awk 'NR==2{print $2}')
|
|
235
|
+
local available_mem=$(free -m | awk 'NR==2{print $7}')
|
|
236
|
+
log " System memory: ${available_mem}MB available / ${total_mem}MB total"
|
|
237
|
+
fi
|
|
238
|
+
|
|
239
|
+
# Show profile directory
|
|
240
|
+
log " Profile directory: $PROFILING_DIR"
|
|
241
|
+
log " Log file: $LOG_FILE"
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
# Parse command line arguments
|
|
245
|
+
case "${1:-}" in
|
|
246
|
+
"profile")
|
|
247
|
+
shift
|
|
248
|
+
local limit=$DEFAULT_MEMORY_LIMIT
|
|
249
|
+
while [[ $# -gt 0 ]]; do
|
|
250
|
+
case $1 in
|
|
251
|
+
--limit) limit="$2"; shift 2 ;;
|
|
252
|
+
*) shift ;;
|
|
253
|
+
esac
|
|
254
|
+
done
|
|
255
|
+
start_with_profiling "$limit"
|
|
256
|
+
;;
|
|
257
|
+
"monitor")
|
|
258
|
+
shift
|
|
259
|
+
local pid=""
|
|
260
|
+
local duration=300
|
|
261
|
+
while [[ $# -gt 0 ]]; do
|
|
262
|
+
case $1 in
|
|
263
|
+
--pid) pid="$2"; shift 2 ;;
|
|
264
|
+
--duration) duration="$2"; shift 2 ;;
|
|
265
|
+
*) shift ;;
|
|
266
|
+
esac
|
|
267
|
+
done
|
|
268
|
+
monitor_memory "$pid" "$duration"
|
|
269
|
+
;;
|
|
270
|
+
"limit")
|
|
271
|
+
shift
|
|
272
|
+
local limit=$DEFAULT_MEMORY_LIMIT
|
|
273
|
+
while [[ $# -gt 0 ]]; do
|
|
274
|
+
case $1 in
|
|
275
|
+
--limit) limit="$2"; shift 2 ;;
|
|
276
|
+
*) shift ;;
|
|
277
|
+
esac
|
|
278
|
+
done
|
|
279
|
+
set_memory_limits "$limit"
|
|
280
|
+
;;
|
|
281
|
+
"install-tools")
|
|
282
|
+
install_debug_tools
|
|
283
|
+
;;
|
|
284
|
+
"analyze")
|
|
285
|
+
shift
|
|
286
|
+
local dir=$PROFILING_DIR
|
|
287
|
+
while [[ $# -gt 0 ]]; do
|
|
288
|
+
case $1 in
|
|
289
|
+
--output) dir="$2"; shift 2 ;;
|
|
290
|
+
*) shift ;;
|
|
291
|
+
esac
|
|
292
|
+
done
|
|
293
|
+
analyze_profiles "$dir"
|
|
294
|
+
;;
|
|
295
|
+
"config")
|
|
296
|
+
show_config
|
|
297
|
+
;;
|
|
298
|
+
"help"|"-h"|"--help")
|
|
299
|
+
show_help
|
|
300
|
+
;;
|
|
301
|
+
*)
|
|
302
|
+
log "${RED}Unknown command: ${1:-}${NC}"
|
|
303
|
+
show_help
|
|
304
|
+
exit 1
|
|
305
|
+
;;
|
|
306
306
|
esac
|