claude-flow-novice 2.15.11 → 2.16.1
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/agents/cfn-v3-coordinator.md +517 -0
- package/.claude/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +1 -1
- package/.claude/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +1 -1
- package/.claude/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +1 -1
- package/.claude/cfn-extras/skills/google-sheets-progress/SKILL.md +1 -1
- package/.claude/commands/CFN_LOOP_FRONTEND.md +1 -1
- package/.claude/commands/cfn-loop-cli.md +214 -442
- package/.claude/commands/cfn-loop-frontend.md +1 -1
- package/.claude/commands/cfn-loop-task.md +2 -2
- package/.claude/commands/cfn-loop-trigger.md +114 -0
- package/.claude/commands/deprecated/cfn-loop.md +2 -2
- package/.claude/hooks/cfn-invoke-post-edit-ts.sh +100 -0
- package/.claude/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
- package/.claude/hooks/cfn-invoke-post-edit.sh +53 -5
- package/.claude/hooks/cfn-invoke-post-edit.sh.backup +87 -0
- package/.claude/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
- package/.claude/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
- package/.claude/hooks/cfn-invoke-pre-edit.sh +22 -0
- package/.claude/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
- package/.claude/hooks/cfn-post-edit.config.json +9 -2
- package/.claude/root-claude-distribute/CFN-CLAUDE.md +1 -1
- package/.claude/skills/cfn-agent-spawning/SKILL.md +48 -1
- package/.claude/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
- package/.claude/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
- package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
- package/.claude/skills/{cfn-redis-coordination/check-dependencies.sh → cfn-agent-spawning/check-dependencies.sh.backup} +3 -5
- package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
- package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
- package/.claude/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
- package/.claude/skills/cfn-backlog-management/SKILL.md +1 -1
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
- package/.claude/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
- package/.claude/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
- package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
- package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
- package/.claude/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
- package/.claude/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
- package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
- package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
- package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
- package/.claude/skills/cfn-loop-orchestration/SKILL.md +159 -48
- package/.claude/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
- package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
- package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
- package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
- package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
- package/.claude/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
- package/.claude/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
- package/.claude/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
- package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
- package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
- package/.claude/skills/cfn-loop-orchestration/{orchestrate-wrapper.sh → archive/legacy-bash/orchestrate-wrapper.sh} +11 -1
- package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
- package/.claude/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
- package/.claude/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
- package/.claude/skills/cfn-loop-orchestration/package-lock.json +3 -0
- package/.claude/skills/cfn-loop-orchestration/package.json +4 -0
- package/.claude/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
- package/.claude/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
- package/.claude/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
- package/.claude/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
- package/.claude/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
- package/.claude/skills/cfn-loop-orchestration/src/index.ts +2 -0
- package/.claude/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
- package/.claude/skills/cfn-loop-orchestration/src/types.ts +56 -0
- package/.claude/skills/cfn-loop-orchestration/test-cli.sh +92 -0
- package/.claude/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
- package/.claude/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
- package/.claude/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
- package/.claude/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
- package/.claude/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
- package/.claude/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
- package/.claude/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
- package/.claude/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
- package/.claude/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
- package/.claude/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
- package/.claude/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
- package/.claude/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
- package/.claude/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
- package/.claude/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
- package/.claude/skills/cfn-loop-validation/INDEX.md +531 -0
- package/.claude/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
- package/.claude/skills/cfn-loop-validation/SKILL.md +48 -1
- package/.claude/skills/cfn-loop-validation/SKILL.md.backup +353 -0
- package/.claude/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
- package/.claude/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
- package/.claude/skills/cfn-loop-validation/check-dependencies.sh +22 -0
- package/{claude-assets/skills/cfn-redis-coordination/check-dependencies.sh → .claude/skills/cfn-loop-validation/check-dependencies.sh.backup} +4 -5
- package/.claude/skills/cfn-loop-validation/detect-vapor.sh +59 -0
- package/.claude/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
- package/.claude/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/types.d.ts +156 -0
- package/.claude/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/types.js +66 -0
- package/.claude/skills/cfn-loop-validation/dist/types.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.js +411 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
- package/.claude/skills/cfn-loop-validation/package.json +93 -0
- package/.claude/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
- package/.claude/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
- package/.claude/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
- package/.claude/skills/cfn-loop-validation/src/types.ts +215 -0
- package/.claude/skills/cfn-loop-validation/src/validator.ts +503 -0
- package/.claude/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
- package/.claude/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
- package/.claude/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
- package/.claude/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
- package/.claude/skills/cfn-loop-validation/validate-gate.sh +63 -0
- package/.claude/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh +22 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
- package/.claude/skills/cfn-product-owner-decision/SKILL.md +479 -147
- package/.claude/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
- package/.claude/skills/cfn-product-owner-decision/{execute-decision.sh → archive/legacy-bash/execute-decision.sh} +24 -2
- package/.claude/skills/pre-edit-backup/SKILL.md +324 -0
- package/.claude/skills/pre-edit-backup/SKILL.md.backup +277 -0
- package/.claude/skills/pre-edit-backup/backup.sh +22 -0
- package/.claude/skills/pre-edit-backup/backup.sh.backup +107 -0
- package/claude-assets/agents/cfn-dev-team/analysts/root-cause-analyst.md +2 -2
- package/claude-assets/agents/cfn-dev-team/architecture/base-template-generator.md +1 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +3 -2
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +1 -0
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +2 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +1 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/devops-engineer.md +11 -1
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +58 -35
- package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +2 -2
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +47 -37
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +18 -18
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +40 -58
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +19 -21
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +20 -29
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +15 -19
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +15 -10
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +16 -11
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +16 -26
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +18 -22
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +17 -21
- package/claude-assets/agents/cfn-dev-team/documentation/pseudocode.md +1 -1
- package/claude-assets/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +1 -1
- package/claude-assets/agents/cfn-dev-team/product-owners/cto-agent.md +1 -1
- package/claude-assets/agents/cfn-dev-team/product-owners/power-user-persona.md +1 -1
- package/claude-assets/agents/cfn-dev-team/product-owners/product-owner.md +1 -5
- package/claude-assets/agents/cfn-dev-team/reviewers/code-reviewer.md +20 -51
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +22 -71
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +21 -64
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +22 -67
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +24 -68
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +8 -36
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +9 -38
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +17 -55
- 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 +18 -56
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +9 -37
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +18 -56
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +18 -49
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +8 -37
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +7 -27
- package/claude-assets/agents/cfn-dev-team/testers/unit/tdd-london-unit-swarm.md +1 -1
- package/claude-assets/agents/cfn-dev-team/utility/agent-builder.md +11 -0
- package/claude-assets/agents/cfn-dev-team/utility/analyst.md +13 -29
- package/claude-assets/agents/cfn-dev-team/utility/claude-code-expert.md +1 -1
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +13 -13
- package/claude-assets/agents/cfn-dev-team/utility/context-curator.md +7 -2
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +6 -11
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +121 -715
- package/claude-assets/agents/cfn-dev-team/utility/researcher.md +13 -22
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +147 -573
- package/claude-assets/agents/custom/cfn-docker-expert.md +103 -0
- package/claude-assets/agents/custom/cfn-loops-cli-expert.md +438 -0
- package/claude-assets/agents/custom/cfn-redis-operations.md +529 -529
- package/claude-assets/agents/custom/cfn-system-expert.md +1 -1
- package/claude-assets/agents/custom/trigger-dev-expert.md +369 -0
- package/claude-assets/agents/docker-team/micro-sprint-planner.md +747 -747
- package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
- package/claude-assets/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
- package/claude-assets/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +1 -1
- package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +1 -1
- package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +1 -1
- package/claude-assets/cfn-extras/skills/google-sheets-progress/SKILL.md +1 -1
- package/claude-assets/commands/CFN_LOOP_FRONTEND.md +1 -1
- package/claude-assets/commands/cfn-loop-cli.md +214 -442
- package/claude-assets/commands/cfn-loop-frontend.md +1 -1
- package/claude-assets/commands/cfn-loop-task.md +2 -2
- package/claude-assets/commands/cfn-loop-trigger.md +114 -0
- package/claude-assets/commands/deprecated/cfn-loop.md +2 -2
- package/claude-assets/hooks/GIT-HOOKS-USAGE-EXAMPLES.md +116 -0
- package/claude-assets/hooks/README-GIT-HOOKS.md +443 -0
- package/claude-assets/hooks/SKILL.md +518 -0
- package/claude-assets/hooks/SKILL.md.backup +471 -0
- package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh +100 -0
- package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
- package/claude-assets/hooks/cfn-invoke-post-edit.sh +53 -5
- package/claude-assets/hooks/cfn-invoke-post-edit.sh.backup +87 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit.sh +22 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
- package/claude-assets/hooks/cfn-post-edit.config.json +9 -2
- package/claude-assets/hooks/install-git-hooks.sh +243 -0
- package/claude-assets/hooks/subagent-start.sh +98 -0
- package/claude-assets/hooks/subagent-stop.sh +93 -0
- package/claude-assets/hooks/validators/credential-scanner.sh +172 -0
- package/claude-assets/root-claude-distribute/CFN-CLAUDE.md +1 -1
- package/claude-assets/skills/cfn-agent-selection-with-fallback/DELIVERABLES.md +409 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/IMPLEMENTATION_SUMMARY.md +396 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_GUIDE.md +308 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/QUICK_REFERENCE.md +239 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +107 -1
- package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md.backup +302 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/TYPESCRIPT_MIGRATION.md +295 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.cjs +297 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.js +297 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.cjs +96 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.js +96 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh +45 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh.backup +23 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +22 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh.backup +173 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.test.ts +357 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.ts +350 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/src/cli.ts +74 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +22 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh.backup +71 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/tsconfig.json +18 -0
- package/claude-assets/skills/cfn-agent-spawning/SKILL.md +48 -1
- package/claude-assets/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
- package/claude-assets/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
- package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh.backup +30 -0
- package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
- package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
- package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
- package/claude-assets/skills/cfn-backlog-management/SKILL.md +1 -1
- package/claude-assets/skills/cfn-coordination/agent-completion.sh.backup +36 -0
- package/claude-assets/skills/cfn-coordination/coordination-signal.sh.backup +36 -0
- package/claude-assets/skills/cfn-coordination/coordination-wait.sh.backup +36 -0
- package/claude-assets/skills/cfn-dependency-ingestion/README.md +101 -0
- package/claude-assets/skills/cfn-dependency-ingestion/SKILL.md +397 -0
- package/claude-assets/skills/cfn-dependency-ingestion/build.sh +23 -0
- package/claude-assets/skills/cfn-dependency-ingestion/dist/ingest-dependencies.js +478 -0
- package/claude-assets/skills/cfn-dependency-ingestion/ingest-dependencies.sh +295 -0
- package/claude-assets/skills/cfn-dependency-ingestion/ingest.sh +237 -0
- package/claude-assets/skills/cfn-dependency-ingestion/manifests/cli-mode-dependencies.txt +73 -0
- package/claude-assets/skills/cfn-dependency-ingestion/manifests/shared-dependencies.txt +57 -0
- package/claude-assets/skills/cfn-dependency-ingestion/manifests/trigger-dev-dependencies.txt +82 -0
- package/claude-assets/skills/cfn-dependency-ingestion/manifests/trigger-mode-dependencies.txt +80 -0
- package/claude-assets/skills/cfn-dependency-ingestion/src/ingest-dependencies.ts +563 -0
- package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +14 -4
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
- package/claude-assets/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
- package/claude-assets/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
- package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
- package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
- package/claude-assets/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
- package/claude-assets/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
- package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
- package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
- package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
- package/claude-assets/skills/cfn-loop-orchestration/SKILL.md +159 -48
- package/claude-assets/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
- package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
- package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
- package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
- package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
- package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
- package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
- package/claude-assets/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
- package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
- package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
- package/claude-assets/skills/cfn-loop-orchestration/{orchestrate-wrapper.sh → archive/legacy-bash/orchestrate-wrapper.sh} +11 -1
- package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
- package/claude-assets/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
- package/claude-assets/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
- package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +3 -0
- package/claude-assets/skills/cfn-loop-orchestration/package.json +4 -0
- package/claude-assets/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +2 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
- package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +56 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-cli.sh +92 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
- package/claude-assets/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
- package/claude-assets/skills/cfn-loop-output-processing/.eslintrc.json +33 -0
- package/claude-assets/skills/cfn-loop-output-processing/DELIVERY_SUMMARY.txt +462 -0
- package/claude-assets/skills/cfn-loop-output-processing/DEPRECATION_NOTICE.md +183 -0
- package/claude-assets/skills/cfn-loop-output-processing/EXAMPLES.md +609 -0
- package/claude-assets/skills/cfn-loop-output-processing/IMPLEMENTATION_SUMMARY.md +418 -0
- package/claude-assets/skills/cfn-loop-output-processing/INDEX.md +531 -0
- package/claude-assets/skills/cfn-loop-output-processing/MIGRATION.md +362 -0
- package/claude-assets/skills/cfn-loop-output-processing/README.md +114 -0
- package/claude-assets/skills/cfn-loop-output-processing/SKILL.md +633 -0
- package/{.claude/skills/cfn-docker-redis-coordination → claude-assets/skills/cfn-loop-output-processing}/jest.config.js +7 -15
- package/claude-assets/skills/cfn-loop-output-processing/package.json +50 -0
- package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop2.ts +195 -0
- package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop3.ts +157 -0
- package/claude-assets/skills/cfn-loop-output-processing/src/output-processor.ts +632 -0
- package/claude-assets/skills/cfn-loop-output-processing/tests/output-processor.test.ts +617 -0
- package/claude-assets/skills/{cfn-docker-redis-coordination → cfn-loop-output-processing}/tsconfig.json +16 -7
- package/claude-assets/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
- package/claude-assets/skills/cfn-loop-validation/INDEX.md +531 -0
- package/claude-assets/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
- package/claude-assets/skills/cfn-loop-validation/SKILL.md +48 -1
- package/claude-assets/skills/cfn-loop-validation/SKILL.md.backup +353 -0
- package/claude-assets/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
- package/claude-assets/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
- package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh +22 -0
- package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh.backup +31 -0
- package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh +59 -0
- package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
- package/claude-assets/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts +156 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.js +66 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.js +411 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
- package/claude-assets/skills/cfn-loop-validation/package.json +93 -0
- package/claude-assets/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
- package/claude-assets/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
- package/claude-assets/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
- package/claude-assets/skills/cfn-loop-validation/src/types.ts +215 -0
- package/claude-assets/skills/cfn-loop-validation/src/validator.ts +503 -0
- package/claude-assets/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
- package/claude-assets/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
- package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
- package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
- package/claude-assets/skills/cfn-loop-validation/validate-gate.sh +63 -0
- package/claude-assets/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
- package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh +22 -0
- package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
- package/claude-assets/skills/cfn-product-owner-decision/SKILL.md +479 -147
- package/claude-assets/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
- package/claude-assets/skills/cfn-product-owner-decision/{execute-decision.sh → archive/legacy-bash/execute-decision.sh} +24 -2
- package/claude-assets/skills/cfn-provider-routing/README.md +129 -0
- package/claude-assets/skills/cfn-provider-routing/SKILL.md +215 -0
- package/claude-assets/skills/cfn-provider-routing/resolve-provider-model.ts +223 -0
- package/claude-assets/skills/docker-build/build.sh +1 -1
- package/claude-assets/skills/pre-edit-backup/SKILL.md +324 -0
- package/claude-assets/skills/pre-edit-backup/SKILL.md.backup +277 -0
- package/claude-assets/skills/pre-edit-backup/backup.sh +22 -0
- package/claude-assets/skills/pre-edit-backup/backup.sh.backup +107 -0
- package/dist/agent/skill-mcp-selector.js +2 -1
- package/dist/agent/skill-mcp-selector.js.map +1 -1
- package/dist/api/auth-endpoints.js +415 -0
- package/dist/api/auth-endpoints.js.map +1 -0
- package/dist/api/task-endpoints.js +562 -0
- package/dist/api/task-endpoints.js.map +1 -0
- package/dist/backend/server.js +418 -0
- package/dist/backend/server.js.map +1 -0
- package/dist/cfn-loop/product-owner/decision-parser.js +356 -0
- package/dist/cfn-loop/product-owner/decision-parser.js.map +1 -0
- package/dist/cfn-loop/product-owner/index.js +1 -0
- package/dist/cfn-loop/product-owner/index.js.map +1 -1
- package/dist/cli/agent-command.js +1 -1
- package/dist/cli/agent-command.js.map +1 -1
- package/dist/cli/agent-completion.js +273 -0
- package/dist/cli/agent-completion.js.map +1 -0
- package/dist/cli/agent-executor.js +470 -26
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +83 -48
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +7 -4
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/agent-spawner.js +546 -0
- package/dist/cli/agent-spawner.js.map +1 -0
- package/dist/cli/agent-token-manager.js +2 -1
- package/dist/cli/agent-token-manager.js.map +1 -1
- package/dist/cli/anthropic-client.js +127 -14
- package/dist/cli/anthropic-client.js.map +1 -1
- package/dist/cli/cfn-context.js +2 -1
- package/dist/cli/cfn-context.js.map +1 -1
- package/dist/cli/cfn-metrics.js +2 -1
- package/dist/cli/cfn-metrics.js.map +1 -1
- package/dist/cli/cfn-redis.js +2 -1
- package/dist/cli/cfn-redis.js.map +1 -1
- package/dist/cli/cli-agent-context.js +2 -0
- package/dist/cli/cli-agent-context.js.map +1 -1
- package/dist/cli/config-manager.js +90 -356
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/conversation-fork-cleanup.js +2 -1
- package/dist/cli/conversation-fork-cleanup.js.map +1 -1
- package/dist/cli/conversation-fork.js +2 -1
- package/dist/cli/conversation-fork.js.map +1 -1
- package/dist/cli/coordination/agent-messaging.js +415 -0
- package/dist/cli/coordination/agent-messaging.js.map +1 -0
- package/dist/cli/coordination/wait-for-threshold.js +232 -0
- package/dist/cli/coordination/wait-for-threshold.js.map +1 -0
- package/dist/cli/index.js +11 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/iteration-history.js +2 -1
- package/dist/cli/iteration-history.js.map +1 -1
- package/dist/cli/parse-decision-cli.js +268 -0
- package/dist/cli/parse-decision-cli.js.map +1 -0
- package/dist/cli/post-edit-hook.js +83 -0
- package/dist/cli/post-edit-hook.js.map +1 -0
- package/dist/cli/pre-edit-hook.js +77 -0
- package/dist/cli/pre-edit-hook.js.map +1 -0
- package/dist/cli/process-lifecycle.js +5 -1
- package/dist/cli/process-lifecycle.js.map +1 -1
- package/dist/cli/spawn-agent-cli.js +244 -0
- package/dist/cli/spawn-agent-cli.js.map +1 -0
- package/dist/coordination/coordination-wrapper.js +383 -0
- package/dist/coordination/coordination-wrapper.js.map +1 -0
- package/dist/coordination/redis-waiting-mode.js +4 -0
- package/dist/coordination/redis-waiting-mode.js.map +1 -1
- package/dist/coordination/store-success-criteria.js +68 -0
- package/dist/coordination/store-success-criteria.js.map +1 -0
- package/dist/coordination/store-task-context.js +65 -0
- package/dist/coordination/store-task-context.js.map +1 -0
- package/dist/hooks/backup-manager.js +273 -0
- package/dist/hooks/backup-manager.js.map +1 -0
- package/dist/hooks/post-edit-validator.js +388 -0
- package/dist/hooks/post-edit-validator.js.map +1 -0
- package/dist/integration/index.js +19 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/integration/task-mode-adapter.js +297 -0
- package/dist/integration/task-mode-adapter.js.map +1 -0
- package/dist/integration/trigger-dev-client.js +253 -0
- package/dist/integration/trigger-dev-client.js.map +1 -0
- package/dist/integration/trigger-dev-webhooks.js +362 -0
- package/dist/integration/trigger-dev-webhooks.js.map +1 -0
- package/dist/lib/artifact-registry.js +4 -0
- package/dist/lib/artifact-registry.js.map +1 -1
- package/dist/lib/connection-pool.js +390 -0
- package/dist/lib/connection-pool.js.map +1 -0
- package/dist/lib/environment-contract.js +258 -0
- package/dist/lib/environment-contract.js.map +1 -0
- package/dist/lib/path-validator.js +14 -5
- package/dist/lib/path-validator.js.map +1 -1
- package/dist/lib/query-optimizer.js +388 -0
- package/dist/lib/query-optimizer.js.map +1 -0
- package/dist/lib/redis-queue-manager.js +5 -1
- package/dist/lib/redis-queue-manager.js.map +1 -1
- package/dist/lib/result-cache.js +285 -0
- package/dist/lib/result-cache.js.map +1 -0
- package/dist/mcp/auth-middleware.js +2 -1
- package/dist/mcp/auth-middleware.js.map +1 -1
- package/dist/mcp/playwright-mcp-server-auth.js +2 -1
- package/dist/mcp/playwright-mcp-server-auth.js.map +1 -1
- package/dist/middleware/authentication.js +317 -0
- package/dist/middleware/authentication.js.map +1 -0
- package/dist/services/authentication.js +669 -0
- package/dist/services/authentication.js.map +1 -0
- package/dist/services/session-management.js +436 -0
- package/dist/services/session-management.js.map +1 -0
- package/dist/services/skill-deployment.js +8 -6
- package/dist/services/skill-deployment.js.map +1 -1
- package/dist/services/user-service.js +710 -0
- package/dist/services/user-service.js.map +1 -0
- package/dist/types/trigger-dev-events.d.js +10 -0
- package/dist/types/trigger-dev-events.d.js.map +1 -0
- package/docs/README.md +240 -0
- package/package.json +15 -4
- package/scripts/build-agent-image.sh +1 -1
- package/scripts/compare-workflow-performance.sh +556 -0
- package/scripts/cost-allocation-tracker.sh +632 -0
- package/scripts/docker-rebuild-all-agents.sh +2 -2
- package/scripts/migrate-to-optimized-workflows.sh +438 -0
- package/scripts/organize-docs.sh +338 -0
- package/scripts/reorganize-tests.sh +280 -0
- package/scripts/trigger-dev-setup.sh +279 -0
- package/tests/README.md +45 -0
- package/.claude/commands/cost-savings-status.md +0 -34
- package/.claude/commands/metrics-summary.md +0 -58
- package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
- package/.claude/skills/cfn-docker-redis-coordination/README.md +0 -294
- package/.claude/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
- package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
- package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
- package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
- package/.claude/skills/cfn-docker-redis-coordination/package.json +0 -40
- package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
- package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
- package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
- package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
- package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +0 -30
- package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
- package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
- package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
- package/.claude/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
- package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
- package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
- package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
- package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
- package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
- package/.claude/skills/cfn-redis-coordination/config.json +0 -61
- package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
- package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
- package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
- package/.claude/skills/cfn-redis-coordination/jest.config.js +0 -23
- package/.claude/skills/cfn-redis-coordination/package-lock.json +0 -5272
- package/.claude/skills/cfn-redis-coordination/package.json +0 -45
- package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
- package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
- package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
- package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
- package/.claude/skills/cfn-redis-coordination/src/index.ts +0 -82
- package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
- package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
- package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
- package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
- package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
- package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
- package/.claude/skills/cfn-redis-coordination/src/types.ts +0 -235
- package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
- package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
- package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
- package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
- package/.claude/skills/cfn-redis-coordination/test-redis-check.js +0 -84
- package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
- package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
- package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +0 -980
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +0 -759
- package/claude-assets/agents/custom/test-mcp-access.md +0 -24
- package/claude-assets/agents/typescript-specialist.md +0 -280
- package/claude-assets/commands/cost-savings-status.md +0 -34
- package/claude-assets/commands/metrics-summary.md +0 -58
- package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
- package/claude-assets/skills/cfn-docker-redis-coordination/README.md +0 -294
- package/claude-assets/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
- package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
- package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
- package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +0 -37
- package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
- package/claude-assets/skills/cfn-docker-redis-coordination/package.json +0 -40
- package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
- package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
- package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
- package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
- package/claude-assets/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
- package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
- package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
- package/claude-assets/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
- package/claude-assets/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
- package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
- package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
- package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
- package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
- package/claude-assets/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
- package/claude-assets/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
- package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
- package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
- package/claude-assets/skills/cfn-redis-cleanup/cleanup-redis.sh +0 -130
- package/claude-assets/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
- package/claude-assets/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
- package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
- package/claude-assets/skills/cfn-redis-coordination/config.json +0 -61
- package/claude-assets/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
- package/claude-assets/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
- package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
- package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
- package/claude-assets/skills/cfn-redis-coordination/jest.config.js +0 -23
- package/claude-assets/skills/cfn-redis-coordination/package-lock.json +0 -5272
- package/claude-assets/skills/cfn-redis-coordination/package.json +0 -45
- package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
- package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
- package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
- package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
- package/claude-assets/skills/cfn-redis-coordination/src/index.ts +0 -82
- package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
- package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
- package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
- package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
- package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
- package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
- package/claude-assets/skills/cfn-redis-coordination/src/types.ts +0 -235
- package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
- package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
- package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
- package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
- package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +0 -84
- package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
- package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
- package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
- package/claude-assets/skills/cfn-redis-data-extraction/SKILL.md +0 -442
- package/claude-assets/skills/cfn-redis-data-extraction/extract.sh +0 -306
- package/dist/coordination/index.js +0 -25
- package/dist/coordination/index.js.map +0 -1
- package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +0 -405
- package/docs/MEMORY_CLEANUP_GUIDE.md +0 -358
- package/docs/MEMORY_LEAK_FIX_SUMMARY.md +0 -322
- package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +0 -319
- package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +0 -574
- package/tests/test-memory-leak-task-mode.sh +0 -435
- /package/.claude/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
- /package/.claude/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
- /package/claude-assets/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memory-leak-specialist
|
|
3
|
-
description: MUST BE USED for memory leak detection,
|
|
4
|
-
tools: [Read, Write, Edit,
|
|
3
|
+
description: MUST BE USED for memory leak detection, profiling, heap analysis. Use PROACTIVELY for memory optimization, resource management. Keywords - memory leak, profiling, heap, optimization
|
|
4
|
+
tools: [Read, Write, Edit, Grep, Glob, TodoWrite]
|
|
5
5
|
model: sonnet
|
|
6
6
|
type: specialist
|
|
7
7
|
capabilities:
|
|
@@ -35,729 +35,135 @@ model: glm-4.6
|
|
|
35
35
|
- Optimize memory-intensive operations
|
|
36
36
|
- Establish memory monitoring and alerting
|
|
37
37
|
|
|
38
|
-
##
|
|
38
|
+
## Supported Runtimes
|
|
39
39
|
|
|
40
40
|
### Node.js Memory Analysis
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const fs = require('fs');
|
|
47
|
-
const path = require('path');
|
|
48
|
-
|
|
49
|
-
function takeHeapSnapshot(filename) {
|
|
50
|
-
const snapshotStream = v8.writeHeapSnapshot();
|
|
51
|
-
const destination = path.join(__dirname, 'heapdumps', filename || `heap-${Date.now()}.heapsnapshot`);
|
|
52
|
-
|
|
53
|
-
fs.copyFileSync(snapshotStream, destination);
|
|
54
|
-
console.log(`Heap snapshot saved to: ${destination}`);
|
|
55
|
-
|
|
56
|
-
return destination;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Automatic snapshot on memory threshold
|
|
60
|
-
const heapUsedThresholdMB = 500;
|
|
61
|
-
let lastSnapshotTime = 0;
|
|
62
|
-
const snapshotCooldownMs = 60000; // 1 minute
|
|
63
|
-
|
|
64
|
-
function monitorMemory() {
|
|
65
|
-
const usage = process.memoryUsage();
|
|
66
|
-
const heapUsedMB = usage.heapUsed / 1024 / 1024;
|
|
67
|
-
|
|
68
|
-
console.log(`Heap used: ${heapUsedMB.toFixed(2)} MB`);
|
|
69
|
-
|
|
70
|
-
if (heapUsedMB > heapUsedThresholdMB) {
|
|
71
|
-
const now = Date.now();
|
|
72
|
-
if (now - lastSnapshotTime > snapshotCooldownMs) {
|
|
73
|
-
console.warn(`Memory threshold exceeded (${heapUsedMB.toFixed(2)} MB)`);
|
|
74
|
-
takeHeapSnapshot(`auto-snapshot-${heapUsedMB.toFixed(0)}mb.heapsnapshot`);
|
|
75
|
-
lastSnapshotTime = now;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// Monitor every 10 seconds
|
|
81
|
-
setInterval(monitorMemory, 10000);
|
|
82
|
-
|
|
83
|
-
module.exports = { takeHeapSnapshot, monitorMemory };
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
#### Memory Profiling with Clinic.js
|
|
87
|
-
```bash
|
|
88
|
-
#!/bin/bash
|
|
89
|
-
# profile-memory.sh
|
|
90
|
-
|
|
91
|
-
echo "Installing Clinic.js..."
|
|
92
|
-
npm install -g clinic
|
|
93
|
-
|
|
94
|
-
echo "Running memory profiler..."
|
|
95
|
-
clinic doctor --on-port 'autocannon -c 100 -d 60 http://localhost:3000' -- node app.js
|
|
96
|
-
|
|
97
|
-
# Results will be in .clinic/ directory
|
|
98
|
-
# Open the HTML report
|
|
99
|
-
clinic doctor --visualize-only PID.clinic-doctor
|
|
100
|
-
|
|
101
|
-
# Heap profiling (for memory leaks)
|
|
102
|
-
clinic heapprofiler --on-port 'autocannon -c 100 -d 60 http://localhost:3000' -- node app.js
|
|
103
|
-
|
|
104
|
-
# Bubble profiler (async operations)
|
|
105
|
-
clinic bubbleprof --on-port 'autocannon -c 100 -d 60 http://localhost:3000' -- node app.js
|
|
106
|
-
|
|
107
|
-
# Flame graph (CPU profiling)
|
|
108
|
-
clinic flame --on-port 'autocannon -c 100 -d 60 http://localhost:3000' -- node app.js
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
#### Memory Leak Detection Script
|
|
112
|
-
```javascript
|
|
113
|
-
// memory-leak-detector.js
|
|
114
|
-
const memwatch = require('@airbnb/node-memwatch');
|
|
115
|
-
|
|
116
|
-
class MemoryLeakDetector {
|
|
117
|
-
constructor(options = {}) {
|
|
118
|
-
this.threshold = options.threshold || 5; // Consecutive growth cycles
|
|
119
|
-
this.growthCount = 0;
|
|
120
|
-
this.heapDiffs = [];
|
|
121
|
-
|
|
122
|
-
this.setupMonitoring();
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
setupMonitoring() {
|
|
126
|
-
// Listen for memory leak events
|
|
127
|
-
memwatch.on('leak', (info) => {
|
|
128
|
-
console.error('MEMORY LEAK DETECTED:', info);
|
|
129
|
-
this.takeSnapshot('leak-detected');
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
// Monitor heap growth
|
|
133
|
-
let hd = new memwatch.HeapDiff();
|
|
134
|
-
|
|
135
|
-
memwatch.on('stats', (stats) => {
|
|
136
|
-
const diff = hd.end();
|
|
137
|
-
hd = new memwatch.HeapDiff();
|
|
138
|
-
|
|
139
|
-
const growthMB = (diff.change.size_bytes / 1024 / 1024).toFixed(2);
|
|
140
|
-
|
|
141
|
-
if (diff.change.size_bytes > 0) {
|
|
142
|
-
this.growthCount++;
|
|
143
|
-
console.warn(`Heap grew by ${growthMB} MB (${this.growthCount}/${this.threshold})`);
|
|
144
|
-
|
|
145
|
-
if (this.growthCount >= this.threshold) {
|
|
146
|
-
console.error('POTENTIAL MEMORY LEAK: Heap grew consistently');
|
|
147
|
-
this.analyzeHeapGrowth(diff);
|
|
148
|
-
this.growthCount = 0;
|
|
149
|
-
}
|
|
150
|
-
} else {
|
|
151
|
-
this.growthCount = 0;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
this.heapDiffs.push({
|
|
155
|
-
timestamp: Date.now(),
|
|
156
|
-
diff: diff,
|
|
157
|
-
stats: stats
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
// Keep only last 10 diffs
|
|
161
|
-
if (this.heapDiffs.length > 10) {
|
|
162
|
-
this.heapDiffs.shift();
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
analyzeHeapGrowth(diff) {
|
|
168
|
-
console.log('\n=== Heap Growth Analysis ===');
|
|
169
|
-
|
|
170
|
-
// Sort by size increase
|
|
171
|
-
const sorted = diff.change.details
|
|
172
|
-
.sort((a, b) => Math.abs(b.size_bytes) - Math.abs(a.size_bytes))
|
|
173
|
-
.slice(0, 10);
|
|
174
|
-
|
|
175
|
-
sorted.forEach((detail, i) => {
|
|
176
|
-
const sizeMB = (detail.size_bytes / 1024 / 1024).toFixed(2);
|
|
177
|
-
console.log(`${i + 1}. ${detail.what}: ${sizeMB} MB (${detail['+'] - detail['-']} objects)`);
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
takeSnapshot(label) {
|
|
182
|
-
const v8 = require('v8');
|
|
183
|
-
const fs = require('fs');
|
|
184
|
-
const filename = `heap-${label}-${Date.now()}.heapsnapshot`;
|
|
185
|
-
const snapshot = v8.writeHeapSnapshot();
|
|
186
|
-
console.log(`Snapshot saved: ${filename}`);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
getReport() {
|
|
190
|
-
return {
|
|
191
|
-
consecutiveGrowth: this.growthCount,
|
|
192
|
-
recentDiffs: this.heapDiffs.slice(-5),
|
|
193
|
-
currentMemory: process.memoryUsage()
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
module.exports = MemoryLeakDetector;
|
|
199
|
-
|
|
200
|
-
// Usage
|
|
201
|
-
if (require.main === module) {
|
|
202
|
-
const detector = new MemoryLeakDetector({ threshold: 5 });
|
|
203
|
-
|
|
204
|
-
// Example API endpoint
|
|
205
|
-
const express = require('express');
|
|
206
|
-
const app = express();
|
|
207
|
-
|
|
208
|
-
app.get('/memory-report', (req, res) => {
|
|
209
|
-
res.json(detector.getReport());
|
|
210
|
-
});
|
|
211
|
-
|
|
212
|
-
app.listen(3000);
|
|
213
|
-
}
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
#### Common Node.js Memory Leak Patterns
|
|
217
|
-
|
|
218
|
-
```javascript
|
|
219
|
-
// leak-patterns.js
|
|
220
|
-
|
|
221
|
-
// LEAK PATTERN 1: Event Listener Accumulation
|
|
222
|
-
class LeakyEventEmitter {
|
|
223
|
-
constructor() {
|
|
224
|
-
this.emitter = new EventEmitter();
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// ❌ BAD: Adds listener without cleanup
|
|
228
|
-
addLeakyListener() {
|
|
229
|
-
this.emitter.on('data', (data) => {
|
|
230
|
-
console.log(data);
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// ✅ GOOD: Remove listener when done
|
|
235
|
-
addSafeListener() {
|
|
236
|
-
const handler = (data) => {
|
|
237
|
-
console.log(data);
|
|
238
|
-
};
|
|
239
|
-
this.emitter.on('data', handler);
|
|
240
|
-
return () => this.emitter.removeListener('data', handler);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
// LEAK PATTERN 2: Global State Accumulation
|
|
245
|
-
// ❌ BAD: Unbounded cache
|
|
246
|
-
const cache = {};
|
|
247
|
-
function leakyCache(key, value) {
|
|
248
|
-
cache[key] = value; // Never cleaned up
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// ✅ GOOD: LRU cache with size limit
|
|
252
|
-
const LRU = require('lru-cache');
|
|
253
|
-
const safeCache = new LRU({
|
|
254
|
-
max: 500,
|
|
255
|
-
ttl: 1000 * 60 * 5 // 5 minutes
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
// LEAK PATTERN 3: Closure Retention
|
|
259
|
-
// ❌ BAD: Closures hold large objects
|
|
260
|
-
function leakyClosure() {
|
|
261
|
-
const largeData = Buffer.alloc(10 * 1024 * 1024); // 10MB
|
|
262
|
-
|
|
263
|
-
return function() {
|
|
264
|
-
// This closure keeps largeData in memory
|
|
265
|
-
return largeData.length;
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
// ✅ GOOD: Extract only needed data
|
|
270
|
-
function safeClosure() {
|
|
271
|
-
const largeData = Buffer.alloc(10 * 1024 * 1024);
|
|
272
|
-
const dataLength = largeData.length;
|
|
273
|
-
|
|
274
|
-
return function() {
|
|
275
|
-
return dataLength; // Only keeps number, not buffer
|
|
276
|
-
};
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
// LEAK PATTERN 4: Detached DOM Nodes (Browser)
|
|
280
|
-
// ❌ BAD: Keeping references to removed elements
|
|
281
|
-
const detachedNodes = [];
|
|
282
|
-
function leakyDOMManipulation() {
|
|
283
|
-
const element = document.getElementById('myElement');
|
|
284
|
-
detachedNodes.push(element);
|
|
285
|
-
element.remove(); // Element removed from DOM but still in memory
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
// ✅ GOOD: Clear references
|
|
289
|
-
function safeDOMManipulation() {
|
|
290
|
-
const element = document.getElementById('myElement');
|
|
291
|
-
element.remove();
|
|
292
|
-
// Don't keep references to detached nodes
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// LEAK PATTERN 5: Timers and Intervals
|
|
296
|
-
// ❌ BAD: Intervals never cleared
|
|
297
|
-
function leakyTimer() {
|
|
298
|
-
setInterval(() => {
|
|
299
|
-
console.log('This runs forever');
|
|
300
|
-
}, 1000);
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// ✅ GOOD: Clear timers
|
|
304
|
-
function safeTimer() {
|
|
305
|
-
const intervalId = setInterval(() => {
|
|
306
|
-
console.log('This can be stopped');
|
|
307
|
-
}, 1000);
|
|
308
|
-
|
|
309
|
-
return () => clearInterval(intervalId);
|
|
310
|
-
}
|
|
311
|
-
```
|
|
41
|
+
- Heap snapshot collection and analysis
|
|
42
|
+
- Memory monitoring with clinic.js
|
|
43
|
+
- V8 profiling and heap diff analysis
|
|
44
|
+
- Automatic memory threshold monitoring
|
|
45
|
+
- Leak detection patterns
|
|
312
46
|
|
|
313
47
|
### Python Memory Analysis
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
filename=f'{obj_type}-refs.png'
|
|
412
|
-
)
|
|
413
|
-
print(f"Reference graph saved to {obj_type}-refs.png")
|
|
414
|
-
|
|
415
|
-
def track_changes(self):
|
|
416
|
-
"""Track memory changes since last call"""
|
|
417
|
-
print("\n=== Memory Changes ===")
|
|
418
|
-
self.tracker.print_diff()
|
|
419
|
-
|
|
420
|
-
# Usage
|
|
421
|
-
detector = MemoryLeakDetector()
|
|
422
|
-
|
|
423
|
-
# Baseline
|
|
424
|
-
detector.take_snapshot('baseline')
|
|
425
|
-
|
|
426
|
-
# ... run your code ...
|
|
427
|
-
|
|
428
|
-
# After operations
|
|
429
|
-
detector.take_snapshot('after_operation')
|
|
430
|
-
detector.compare_snapshots()
|
|
431
|
-
detector.find_leaks()
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
#### Common Python Memory Leak Patterns
|
|
435
|
-
```python
|
|
436
|
-
# leak_patterns.py
|
|
437
|
-
|
|
438
|
-
# LEAK PATTERN 1: Circular References
|
|
439
|
-
class LeakyNode:
|
|
440
|
-
def __init__(self, value):
|
|
441
|
-
self.value = value
|
|
442
|
-
self.next = None
|
|
443
|
-
self.prev = None
|
|
444
|
-
|
|
445
|
-
# ❌ BAD: Circular reference
|
|
446
|
-
def create_leaky_list():
|
|
447
|
-
head = LeakyNode(1)
|
|
448
|
-
tail = LeakyNode(2)
|
|
449
|
-
head.next = tail
|
|
450
|
-
tail.prev = head # Circular reference
|
|
451
|
-
# Objects won't be garbage collected immediately
|
|
452
|
-
|
|
453
|
-
# ✅ GOOD: Use weakref
|
|
454
|
-
import weakref
|
|
455
|
-
|
|
456
|
-
class SafeNode:
|
|
457
|
-
def __init__(self, value):
|
|
458
|
-
self.value = value
|
|
459
|
-
self.next = None
|
|
460
|
-
self._prev = None
|
|
461
|
-
|
|
462
|
-
@property
|
|
463
|
-
def prev(self):
|
|
464
|
-
return self._prev() if self._prev else None
|
|
465
|
-
|
|
466
|
-
@prev.setter
|
|
467
|
-
def prev(self, node):
|
|
468
|
-
self._prev = weakref.ref(node) if node else None
|
|
469
|
-
|
|
470
|
-
# LEAK PATTERN 2: Unbounded Caches
|
|
471
|
-
# ❌ BAD: Unbounded cache
|
|
472
|
-
cache = {}
|
|
473
|
-
def leaky_cache(key, value):
|
|
474
|
-
cache[key] = value
|
|
475
|
-
|
|
476
|
-
# ✅ GOOD: LRU cache with size limit
|
|
477
|
-
from functools import lru_cache
|
|
478
|
-
|
|
479
|
-
@lru_cache(maxsize=128)
|
|
480
|
-
def safe_cache(key):
|
|
481
|
-
return expensive_operation(key)
|
|
482
|
-
|
|
483
|
-
# LEAK PATTERN 3: Generator Retention
|
|
484
|
-
# ❌ BAD: Keeping generator references
|
|
485
|
-
generators = []
|
|
486
|
-
def leaky_generator():
|
|
487
|
-
gen = (x for x in range(1000000))
|
|
488
|
-
generators.append(gen) # Keeps large iterator in memory
|
|
489
|
-
|
|
490
|
-
# ✅ GOOD: Process and discard
|
|
491
|
-
def safe_generator():
|
|
492
|
-
gen = (x for x in range(1000000))
|
|
493
|
-
result = list(gen) # Convert to list, generator discarded
|
|
494
|
-
return result
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
### Java Heap Dump Analysis
|
|
498
|
-
|
|
499
|
-
#### Capture Heap Dump
|
|
500
|
-
```bash
|
|
501
|
-
#!/bin/bash
|
|
502
|
-
# capture-heap-dump.sh
|
|
503
|
-
|
|
504
|
-
PID=$1
|
|
505
|
-
|
|
506
|
-
if [ -z "$PID" ]; then
|
|
507
|
-
echo "Usage: $0 <java-pid>"
|
|
508
|
-
exit 1
|
|
509
|
-
fi
|
|
510
|
-
|
|
511
|
-
# Capture heap dump
|
|
512
|
-
DUMP_FILE="heap-dump-$(date +%Y%m%d-%H%M%S).hprof"
|
|
513
|
-
|
|
514
|
-
echo "Capturing heap dump for PID $PID..."
|
|
515
|
-
jmap -dump:live,format=b,file="$DUMP_FILE" $PID
|
|
516
|
-
|
|
517
|
-
if [ $? -eq 0 ]; then
|
|
518
|
-
echo "Heap dump saved to: $DUMP_FILE"
|
|
519
|
-
echo "Size: $(du -h $DUMP_FILE | cut -f1)"
|
|
520
|
-
else
|
|
521
|
-
echo "Failed to capture heap dump"
|
|
522
|
-
exit 1
|
|
523
|
-
fi
|
|
524
|
-
|
|
525
|
-
# Analyze with jhat (built-in)
|
|
526
|
-
echo "Starting jhat server..."
|
|
527
|
-
jhat -port 7000 "$DUMP_FILE" &
|
|
528
|
-
echo "Access heap analysis at: http://localhost:7000"
|
|
529
|
-
|
|
530
|
-
# Alternative: Eclipse Memory Analyzer (MAT)
|
|
531
|
-
# Download from: https://www.eclipse.org/mat/
|
|
532
|
-
# Open .hprof file in MAT for detailed analysis
|
|
533
|
-
```
|
|
534
|
-
|
|
535
|
-
#### Java Memory Profiling
|
|
536
|
-
```java
|
|
537
|
-
// MemoryProfiler.java
|
|
538
|
-
import java.lang.management.*;
|
|
539
|
-
import java.util.*;
|
|
540
|
-
|
|
541
|
-
public class MemoryProfiler {
|
|
542
|
-
private static final MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
|
|
543
|
-
private static final List<GarbageCollectorMXBean> gcBeans = ManagementFactory.getGarbageCollectorMXBeans();
|
|
544
|
-
|
|
545
|
-
public static void printMemoryUsage() {
|
|
546
|
-
MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage();
|
|
547
|
-
MemoryUsage nonHeapUsage = memoryBean.getNonHeapMemoryUsage();
|
|
548
|
-
|
|
549
|
-
System.out.println("=== Memory Usage ===");
|
|
550
|
-
System.out.println("Heap:");
|
|
551
|
-
System.out.printf(" Used: %d MB%n", heapUsage.getUsed() / 1024 / 1024);
|
|
552
|
-
System.out.printf(" Committed: %d MB%n", heapUsage.getCommitted() / 1024 / 1024);
|
|
553
|
-
System.out.printf(" Max: %d MB%n", heapUsage.getMax() / 1024 / 1024);
|
|
554
|
-
|
|
555
|
-
System.out.println("Non-Heap:");
|
|
556
|
-
System.out.printf(" Used: %d MB%n", nonHeapUsage.getUsed() / 1024 / 1024);
|
|
557
|
-
System.out.printf(" Committed: %d MB%n", nonHeapUsage.getCommitted() / 1024 / 1024);
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
public static void printGCStats() {
|
|
561
|
-
System.out.println("\n=== Garbage Collection Stats ===");
|
|
562
|
-
for (GarbageCollectorMXBean gcBean : gcBeans) {
|
|
563
|
-
System.out.printf("%s:%n", gcBean.getName());
|
|
564
|
-
System.out.printf(" Count: %d%n", gcBean.getCollectionCount());
|
|
565
|
-
System.out.printf(" Time: %d ms%n", gcBean.getCollectionTime());
|
|
566
|
-
}
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
public static void monitorMemory() {
|
|
570
|
-
Timer timer = new Timer(true);
|
|
571
|
-
timer.scheduleAtFixedRate(new TimerTask() {
|
|
572
|
-
@Override
|
|
573
|
-
public void run() {
|
|
574
|
-
printMemoryUsage();
|
|
575
|
-
printGCStats();
|
|
576
|
-
|
|
577
|
-
// Alert on high memory usage
|
|
578
|
-
MemoryUsage heap = memoryBean.getHeapMemoryUsage();
|
|
579
|
-
double usagePercent = (double) heap.getUsed() / heap.getMax() * 100;
|
|
580
|
-
|
|
581
|
-
if (usagePercent > 90) {
|
|
582
|
-
System.err.println("WARNING: Heap usage at " + usagePercent + "%");
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
}, 0, 10000); // Every 10 seconds
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
public static void main(String[] args) {
|
|
589
|
-
monitorMemory();
|
|
590
|
-
|
|
591
|
-
// Keep application running
|
|
592
|
-
try {
|
|
593
|
-
Thread.sleep(Long.MAX_VALUE);
|
|
594
|
-
} catch (InterruptedException e) {
|
|
595
|
-
e.printStackTrace();
|
|
596
|
-
}
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
```
|
|
600
|
-
|
|
601
|
-
#### JVM Memory Tuning
|
|
602
|
-
```bash
|
|
603
|
-
# jvm-memory-options.sh
|
|
604
|
-
|
|
605
|
-
# Heap size tuning
|
|
606
|
-
JAVA_OPTS="-Xms2g -Xmx4g" # Initial 2GB, max 4GB
|
|
607
|
-
|
|
608
|
-
# GC tuning (G1GC - recommended for most cases)
|
|
609
|
-
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC"
|
|
610
|
-
JAVA_OPTS="$JAVA_OPTS -XX:MaxGCPauseMillis=200" # Target max pause time
|
|
611
|
-
JAVA_OPTS="$JAVA_OPTS -XX:G1HeapRegionSize=16m"
|
|
612
|
-
|
|
613
|
-
# GC logging
|
|
614
|
-
JAVA_OPTS="$JAVA_OPTS -Xlog:gc*:file=gc.log:time,uptime,level,tags"
|
|
615
|
-
JAVA_OPTS="$JAVA_OPTS -Xlog:gc*::filecount=5,filesize=10M"
|
|
616
|
-
|
|
617
|
-
# Heap dump on OOM
|
|
618
|
-
JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError"
|
|
619
|
-
JAVA_OPTS="$JAVA_OPTS -XX:HeapDumpPath=/var/log/heapdumps"
|
|
620
|
-
|
|
621
|
-
# JMX for remote monitoring
|
|
622
|
-
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
|
|
623
|
-
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9010"
|
|
624
|
-
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
|
|
625
|
-
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
|
|
626
|
-
|
|
627
|
-
# Run application
|
|
628
|
-
java $JAVA_OPTS -jar app.jar
|
|
629
|
-
```
|
|
630
|
-
|
|
631
|
-
### Memory Testing Framework
|
|
632
|
-
|
|
633
|
-
#### Automated Memory Leak Test
|
|
634
|
-
```javascript
|
|
635
|
-
// memory-leak-test.js
|
|
636
|
-
const assert = require('assert');
|
|
637
|
-
const v8 = require('v8');
|
|
638
|
-
|
|
639
|
-
class MemoryLeakTest {
|
|
640
|
-
constructor(testName, options = {}) {
|
|
641
|
-
this.testName = testName;
|
|
642
|
-
this.iterations = options.iterations || 100;
|
|
643
|
-
this.threshold = options.threshold || 1.5; // 50% growth allowed
|
|
644
|
-
this.samples = [];
|
|
645
|
-
}
|
|
646
|
-
|
|
647
|
-
async run(testFunction) {
|
|
648
|
-
console.log(`Running memory leak test: ${this.testName}`);
|
|
649
|
-
|
|
650
|
-
// Warm up
|
|
651
|
-
for (let i = 0; i < 10; i++) {
|
|
652
|
-
await testFunction();
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
// Force GC
|
|
656
|
-
if (global.gc) {
|
|
657
|
-
global.gc();
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
// Baseline measurement
|
|
661
|
-
const baselineHeap = process.memoryUsage().heapUsed;
|
|
662
|
-
|
|
663
|
-
// Run iterations and sample memory
|
|
664
|
-
for (let i = 0; i < this.iterations; i++) {
|
|
665
|
-
await testFunction();
|
|
666
|
-
|
|
667
|
-
if (i % 10 === 0) {
|
|
668
|
-
if (global.gc) global.gc();
|
|
669
|
-
this.samples.push(process.memoryUsage().heapUsed);
|
|
670
|
-
}
|
|
671
|
-
}
|
|
672
|
-
|
|
673
|
-
// Final measurement
|
|
674
|
-
if (global.gc) global.gc();
|
|
675
|
-
const finalHeap = process.memoryUsage().heapUsed;
|
|
676
|
-
|
|
677
|
-
// Analyze results
|
|
678
|
-
const growth = finalHeap / baselineHeap;
|
|
679
|
-
const passed = growth < this.threshold;
|
|
680
|
-
|
|
681
|
-
console.log(`Baseline heap: ${(baselineHeap / 1024 / 1024).toFixed(2)} MB`);
|
|
682
|
-
console.log(`Final heap: ${(finalHeap / 1024 / 1024).toFixed(2)} MB`);
|
|
683
|
-
console.log(`Growth: ${(growth * 100).toFixed(2)}%`);
|
|
684
|
-
console.log(`Threshold: ${(this.threshold * 100).toFixed(2)}%`);
|
|
685
|
-
console.log(`Result: ${passed ? 'PASSED' : 'FAILED'}`);
|
|
686
|
-
|
|
687
|
-
assert.ok(passed, `Memory leak detected: ${(growth * 100).toFixed(2)}% growth`);
|
|
688
|
-
|
|
689
|
-
return { passed, growth, baselineHeap, finalHeap };
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
|
|
693
|
-
// Usage
|
|
694
|
-
async function runTests() {
|
|
695
|
-
// Test 1: No leak expected
|
|
696
|
-
const test1 = new MemoryLeakTest('Request handling', { iterations: 1000 });
|
|
697
|
-
await test1.run(async () => {
|
|
698
|
-
const data = { id: 1, name: 'test' };
|
|
699
|
-
JSON.stringify(data);
|
|
700
|
-
});
|
|
701
|
-
|
|
702
|
-
// Test 2: Potential leak
|
|
703
|
-
const cache = [];
|
|
704
|
-
const test2 = new MemoryLeakTest('Cache growth', { iterations: 1000, threshold: 2.0 });
|
|
705
|
-
await test2.run(async () => {
|
|
706
|
-
cache.push({ data: Buffer.alloc(1024) });
|
|
707
|
-
});
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
// Run with: node --expose-gc memory-leak-test.js
|
|
711
|
-
if (require.main === module) {
|
|
712
|
-
runTests().catch(console.error);
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
module.exports = MemoryLeakTest;
|
|
716
|
-
```
|
|
717
|
-
|
|
718
|
-
## Validation Protocol
|
|
719
|
-
|
|
720
|
-
Before reporting high confidence:
|
|
721
|
-
✅ Memory leak identified and root cause found
|
|
722
|
-
✅ Heap dumps analyzed
|
|
723
|
-
✅ Memory profiling completed
|
|
724
|
-
✅ Fix implemented and validated
|
|
725
|
-
✅ Memory tests passing
|
|
726
|
-
✅ GC behavior optimized
|
|
727
|
-
✅ Monitoring alerts configured
|
|
728
|
-
✅ Documentation updated
|
|
729
|
-
✅ Prevention patterns implemented
|
|
730
|
-
✅ Team trained on memory best practices
|
|
731
|
-
|
|
732
|
-
## Deliverables
|
|
733
|
-
|
|
734
|
-
1. **Memory Analysis Report**: Heap dump analysis, leak identification
|
|
735
|
-
2. **Profiling Results**: Memory usage patterns, optimization opportunities
|
|
736
|
-
3. **Fix Implementation**: Code changes to eliminate leaks
|
|
737
|
-
4. **Memory Tests**: Automated leak detection tests
|
|
738
|
-
5. **Monitoring Setup**: Memory alerts and dashboards
|
|
739
|
-
6. **Documentation**: Memory optimization guide, best practices
|
|
740
|
-
7. **Training Materials**: Memory leak prevention patterns
|
|
48
|
+
- Memory profiling with memory_profiler
|
|
49
|
+
- Heap dump generation and analysis
|
|
50
|
+
- GC pattern investigation
|
|
51
|
+
- Resource cleanup validation
|
|
52
|
+
- Memory leak detection in C extensions
|
|
53
|
+
|
|
54
|
+
### Java Memory Analysis
|
|
55
|
+
- Heap dump analysis with jmap
|
|
56
|
+
- GC log analysis and tuning
|
|
57
|
+
- JProfiler integration
|
|
58
|
+
- Metaspace monitoring
|
|
59
|
+
- OutOfMemoryError diagnosis
|
|
60
|
+
|
|
61
|
+
## Referenced Skills
|
|
62
|
+
→ **Node.js Memory Profiling**: `.claude/skills/nodejs-memory-profiling/SKILL.md`
|
|
63
|
+
→ **Python Heap Analysis**: `.claude/skills/python-memory-analysis/SKILL.md`
|
|
64
|
+
→ **Java Heap Dump Analysis**: `.claude/skills/java-heap-dump-analysis/SKILL.md`
|
|
65
|
+
→ **Memory Optimization Patterns**: `.claude/skills/memory-optimization-patterns/SKILL.md`
|
|
66
|
+
→ **Garbage Collection Tuning**: `.claude/skills/gc-optimization/SKILL.md`
|
|
67
|
+
|
|
68
|
+
## Memory Leak Detection Process
|
|
69
|
+
|
|
70
|
+
### Phase 1: Initial Diagnosis
|
|
71
|
+
1. Identify runtime environment (Node.js, Python, Java)
|
|
72
|
+
2. Gather baseline memory metrics
|
|
73
|
+
3. Collect initial heap snapshots
|
|
74
|
+
4. Review application logs for memory-related errors
|
|
75
|
+
|
|
76
|
+
### Phase 2: Deep Analysis
|
|
77
|
+
1. Compare heap snapshots across time
|
|
78
|
+
2. Identify retained objects and memory growth patterns
|
|
79
|
+
3. Analyze garbage collection behavior
|
|
80
|
+
4. Trace allocation hotspots
|
|
81
|
+
|
|
82
|
+
### Phase 3: Root Cause Investigation
|
|
83
|
+
1. Identify problematic code sections
|
|
84
|
+
2. Analyze object retention chains
|
|
85
|
+
3. Check for circular references or event listener accumulation
|
|
86
|
+
4. Review event emitter cleanup patterns
|
|
87
|
+
|
|
88
|
+
### Phase 4: Solution Development
|
|
89
|
+
1. Create minimal reproduction cases
|
|
90
|
+
2. Implement fixes with verification tests
|
|
91
|
+
3. Validate memory behavior improvement
|
|
92
|
+
4. Create monitoring and alerting
|
|
93
|
+
|
|
94
|
+
### Phase 5: Ongoing Monitoring
|
|
95
|
+
1. Establish baseline memory metrics
|
|
96
|
+
2. Set up automated memory profiling
|
|
97
|
+
3. Create alerting for anomalies
|
|
98
|
+
4. Document prevention patterns
|
|
99
|
+
|
|
100
|
+
## Memory Profiling Tools
|
|
101
|
+
|
|
102
|
+
### Node.js Ecosystem
|
|
103
|
+
- **clinic.js**: Comprehensive Node.js profiling
|
|
104
|
+
- **node-inspect**: Built-in V8 profiler
|
|
105
|
+
- **autocannon**: Load testing for stress profiling
|
|
106
|
+
- **memwatch**: Real-time memory leak detection
|
|
107
|
+
- **heapdump**: Explicit heap snapshot capture
|
|
108
|
+
|
|
109
|
+
### Python Ecosystem
|
|
110
|
+
- **memory_profiler**: Line-by-line memory analysis
|
|
111
|
+
- **tracemalloc**: Memory allocation tracing
|
|
112
|
+
- **pympler**: Object analysis and profiling
|
|
113
|
+
- **objgraph**: Object reference visualization
|
|
114
|
+
- **scalene**: CPU + GPU + memory profiler
|
|
115
|
+
|
|
116
|
+
### Java Ecosystem
|
|
117
|
+
- **jmap**: Memory mapping and heap analysis
|
|
118
|
+
- **jstat**: GC statistics collection
|
|
119
|
+
- **jconsole**: Visual memory monitoring
|
|
120
|
+
- **VisualVM**: Comprehensive Java profiling
|
|
121
|
+
- **JProfiler**: Advanced heap analysis
|
|
122
|
+
|
|
123
|
+
## Common Memory Leak Patterns
|
|
124
|
+
|
|
125
|
+
### Node.js Patterns
|
|
126
|
+
- Event listener accumulation
|
|
127
|
+
- Circular reference retention
|
|
128
|
+
- Large object caching without eviction
|
|
129
|
+
- Timer/interval non-cleanup
|
|
130
|
+
- Module-level state pollution
|
|
131
|
+
|
|
132
|
+
### Python Patterns
|
|
133
|
+
- Circular reference retention
|
|
134
|
+
- Unbounded dictionary caches
|
|
135
|
+
- Module-level state accumulation
|
|
136
|
+
- C extension resource leaks
|
|
137
|
+
- Dataset reference retention
|
|
138
|
+
|
|
139
|
+
### Java Patterns
|
|
140
|
+
- Static collection growth
|
|
141
|
+
- ThreadLocal variable retention
|
|
142
|
+
- Listener pattern non-cleanup
|
|
143
|
+
- Resource stream non-closure
|
|
144
|
+
- Class loader memory retention
|
|
741
145
|
|
|
742
146
|
## Success Metrics
|
|
743
|
-
- Memory
|
|
744
|
-
-
|
|
745
|
-
-
|
|
746
|
-
-
|
|
747
|
-
-
|
|
147
|
+
- Memory leak identified and documented
|
|
148
|
+
- Root cause clearly explained
|
|
149
|
+
- Working fix implemented and tested
|
|
150
|
+
- Memory behavior validated (no regression)
|
|
151
|
+
- Monitoring/alerting established
|
|
152
|
+
- Prevention patterns documented
|
|
153
|
+
- Confidence score ≥0.85
|
|
154
|
+
|
|
155
|
+
## Collaboration Patterns
|
|
156
|
+
- Work with application developers on fixes
|
|
157
|
+
- Review code for leak prevention patterns
|
|
158
|
+
- Validate monitoring/alerting setup
|
|
159
|
+
- Document findings for team knowledge base
|
|
748
160
|
|
|
749
161
|
## Completion Protocol
|
|
750
162
|
|
|
751
163
|
Complete your work and provide a structured response with:
|
|
752
164
|
- Confidence score (0.0-1.0) based on work quality
|
|
753
|
-
- Summary of
|
|
754
|
-
- List of deliverables created
|
|
755
|
-
- Any recommendations or
|
|
165
|
+
- Summary of memory leak investigation
|
|
166
|
+
- List of deliverables created (analysis, fixes, monitoring)
|
|
167
|
+
- Any recommendations or prevention patterns
|
|
756
168
|
|
|
757
169
|
**Note:** Coordination handled automatically by the system.
|
|
758
|
-
|
|
759
|
-
## Skill References
|
|
760
|
-
→ **Node.js Profiling**: `.claude/skills/nodejs-memory-profiling/SKILL.md`
|
|
761
|
-
→ **Python Profiling**: `.claude/skills/python-memory-analysis/SKILL.md`
|
|
762
|
-
→ **Java Heap Analysis**: `.claude/skills/java-heap-dump-analysis/SKILL.md`
|
|
763
|
-
→ **Memory Optimization**: `.claude/skills/memory-optimization-patterns/SKILL.md`
|