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,312 +1,312 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
# Docker Playwright Fix Script
|
|
6
|
-
# Fixes Playwright browser installation issues in claude-flow-novice Docker image
|
|
7
|
-
|
|
8
|
-
echo "=== Docker Playwright Fix Script ==="
|
|
9
|
-
echo "Date: $(date)"
|
|
10
|
-
echo "Fixing Playwright installation for browser automation..."
|
|
11
|
-
|
|
12
|
-
# Configuration
|
|
13
|
-
IMAGE_NAME="claude-flow-novice:with-playwright"
|
|
14
|
-
CONTAINER_NAME="playwright-test-container"
|
|
15
|
-
DOCKERFILE_PATH="docker/Dockerfile.with-playwright"
|
|
16
|
-
TEST_SCRIPT="docker/tests/test-playwright-functionality.cjs"
|
|
17
|
-
|
|
18
|
-
# Colors for output
|
|
19
|
-
RED='\033[0;31m'
|
|
20
|
-
GREEN='\033[0;32m'
|
|
21
|
-
YELLOW='\033[1;33m'
|
|
22
|
-
BLUE='\033[0;34m'
|
|
23
|
-
NC='\033[0m' # No Color
|
|
24
|
-
|
|
25
|
-
# Logging functions
|
|
26
|
-
log_info() {
|
|
27
|
-
echo -e "${BLUE}[INFO]${NC} $1"
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
log_success() {
|
|
31
|
-
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
log_warning() {
|
|
35
|
-
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
log_error() {
|
|
39
|
-
echo -e "${RED}[ERROR]${NC} $1"
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
# Phase 1: Fix Dockerfile
|
|
43
|
-
fix_dockerfile() {
|
|
44
|
-
log_info "Phase 1: Fixing Dockerfile for Playwright..."
|
|
45
|
-
|
|
46
|
-
# Create fixed Dockerfile
|
|
47
|
-
cat > "$DOCKERFILE_PATH" << 'EOF'
|
|
48
|
-
# Multi-stage build for claude-flow-novice with Playwright
|
|
49
|
-
FROM node:18-slim AS base
|
|
50
|
-
|
|
51
|
-
# Install system dependencies for Playwright
|
|
52
|
-
RUN apt-get update && apt-get install -y \
|
|
53
|
-
# Basic dependencies
|
|
54
|
-
curl \
|
|
55
|
-
wget \
|
|
56
|
-
git \
|
|
57
|
-
gnupg2 \
|
|
58
|
-
# Playwright browser dependencies
|
|
59
|
-
libnss3 \
|
|
60
|
-
libatk-bridge2.0-0 \
|
|
61
|
-
libdrm2 \
|
|
62
|
-
libxcomposite1 \
|
|
63
|
-
libxdamage1 \
|
|
64
|
-
libxrandr2 \
|
|
65
|
-
libgbm1 \
|
|
66
|
-
libxss1 \
|
|
67
|
-
libasound2 \
|
|
68
|
-
# Additional libraries for headless operation
|
|
69
|
-
libgtk-3-0 \
|
|
70
|
-
libx11-xcb1 \
|
|
71
|
-
libxcb1 \
|
|
72
|
-
libxfixes3 \
|
|
73
|
-
&& rm -rf /var/lib/apt/lists/*
|
|
74
|
-
|
|
75
|
-
# Build stage
|
|
76
|
-
FROM base AS builder
|
|
77
|
-
|
|
78
|
-
WORKDIR /app
|
|
79
|
-
|
|
80
|
-
# Copy package files
|
|
81
|
-
COPY package*.json ./
|
|
82
|
-
|
|
83
|
-
# Install dependencies
|
|
84
|
-
RUN npm ci --only=production
|
|
85
|
-
|
|
86
|
-
# Install Playwright and browsers
|
|
87
|
-
RUN npx playwright install --with-deps chromium
|
|
88
|
-
RUN npx playwright install-deps chromium
|
|
89
|
-
|
|
90
|
-
# Production stage
|
|
91
|
-
FROM base AS production
|
|
92
|
-
|
|
93
|
-
# Set environment for Playwright
|
|
94
|
-
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
|
|
95
|
-
ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=0
|
|
96
|
-
ENV NODE_ENV=production
|
|
97
|
-
|
|
98
|
-
WORKDIR /app
|
|
99
|
-
|
|
100
|
-
# Copy application
|
|
101
|
-
COPY --from=builder /app/node_modules ./node_modules
|
|
102
|
-
COPY package*.json ./
|
|
103
|
-
COPY src/ ./src/
|
|
104
|
-
COPY bin/ ./bin/
|
|
105
|
-
|
|
106
|
-
# Copy browsers to system location
|
|
107
|
-
COPY --from=builder /root/.cache/ms-playwright /ms-playwright
|
|
108
|
-
|
|
109
|
-
# Create screenshots directory
|
|
110
|
-
RUN mkdir -p /app/screenshots /app/logs
|
|
111
|
-
RUN chmod 777 /app/screenshots /app/logs
|
|
112
|
-
|
|
113
|
-
# Health check for Playwright
|
|
114
|
-
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
115
|
-
CMD node -e "const {chromium} = require('playwright'); chromium.launch().then(() => process.exit(0)).catch(() => process.exit(1))"
|
|
116
|
-
|
|
117
|
-
EXPOSE 3000
|
|
118
|
-
|
|
119
|
-
CMD ["node", "src/cli/index.js"]
|
|
120
|
-
EOF
|
|
121
|
-
|
|
122
|
-
log_success "Dockerfile updated with Playwright fixes"
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
# Phase 2: Build Docker image
|
|
126
|
-
build_docker_image() {
|
|
127
|
-
log_info "Phase 2: Building Docker image with fixed Playwright..."
|
|
128
|
-
|
|
129
|
-
# Stop and remove existing container
|
|
130
|
-
if docker ps -a --format 'table {{.Names}}' | grep -q "$CONTAINER_NAME"; then
|
|
131
|
-
log_warning "Stopping and removing existing container..."
|
|
132
|
-
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
|
133
|
-
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
|
134
|
-
fi
|
|
135
|
-
|
|
136
|
-
# Remove existing image
|
|
137
|
-
if docker images --format 'table {{.Repository}}:{{.Tag}}' | grep -q "$IMAGE_NAME"; then
|
|
138
|
-
log_warning "Removing existing image..."
|
|
139
|
-
docker rmi "$IMAGE_NAME" 2>/dev/null || true
|
|
140
|
-
fi
|
|
141
|
-
|
|
142
|
-
# Build new image
|
|
143
|
-
log_info "Building new Docker image..."
|
|
144
|
-
if docker build -f "$DOCKERFILE_PATH" -t "$IMAGE_NAME" .; then
|
|
145
|
-
log_success "Docker image built successfully"
|
|
146
|
-
else
|
|
147
|
-
log_error "Failed to build Docker image"
|
|
148
|
-
return 1
|
|
149
|
-
fi
|
|
150
|
-
|
|
151
|
-
# Get image size
|
|
152
|
-
local image_size=$(docker images --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}" | grep "$IMAGE_NAME" | awk '{print $2}')
|
|
153
|
-
log_info "Image size: $image_size"
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
# Phase 3: Test Playwright functionality
|
|
157
|
-
test_playwright() {
|
|
158
|
-
log_info "Phase 3: Testing Playwright functionality..."
|
|
159
|
-
|
|
160
|
-
# Create test directory
|
|
161
|
-
local test_dir="./test-output"
|
|
162
|
-
mkdir -p "$test_dir"
|
|
163
|
-
|
|
164
|
-
# Run container with volume mounts
|
|
165
|
-
log_info "Starting container for testing..."
|
|
166
|
-
docker run -d \
|
|
167
|
-
--name "$CONTAINER_NAME" \
|
|
168
|
-
-v "$(pwd)/$test_dir:/app/screenshots" \
|
|
169
|
-
-e "SCREENSHOT_DIR=/app/screenshots" \
|
|
170
|
-
"$IMAGE_NAME" \
|
|
171
|
-
sleep 60
|
|
172
|
-
|
|
173
|
-
# Wait for container to be ready
|
|
174
|
-
log_info "Waiting for container to be ready..."
|
|
175
|
-
sleep 10
|
|
176
|
-
|
|
177
|
-
# Check if container is running
|
|
178
|
-
if ! docker ps --format 'table {{.Names}}' | grep -q "$CONTAINER_NAME"; then
|
|
179
|
-
log_error "Container failed to start"
|
|
180
|
-
docker logs "$CONTAINER_NAME"
|
|
181
|
-
return 1
|
|
182
|
-
fi
|
|
183
|
-
|
|
184
|
-
# Test 1: Check Playwright installation
|
|
185
|
-
log_info "Test 1: Verifying Playwright installation..."
|
|
186
|
-
if docker exec "$CONTAINER_NAME" npx playwright --version; then
|
|
187
|
-
log_success "Playwright is installed"
|
|
188
|
-
else
|
|
189
|
-
log_error "Playwright installation check failed"
|
|
190
|
-
return 1
|
|
191
|
-
fi
|
|
192
|
-
|
|
193
|
-
# Test 2: Check browser availability
|
|
194
|
-
log_info "Test 2: Checking browser availability..."
|
|
195
|
-
if docker exec "$CONTAINER_NAME" npx playwright install chromium --dry-run; then
|
|
196
|
-
log_success "Chromium browser is available"
|
|
197
|
-
else
|
|
198
|
-
log_error "Browser availability check failed"
|
|
199
|
-
return 1
|
|
200
|
-
fi
|
|
201
|
-
|
|
202
|
-
# Test 3: Run the Playwright test script
|
|
203
|
-
log_info "Test 3: Running Google.com navigation test..."
|
|
204
|
-
|
|
205
|
-
# Copy test script to container
|
|
206
|
-
if docker cp "$TEST_SCRIPT" "$CONTAINER_NAME:/app/test-playwright.cjs"; then
|
|
207
|
-
log_success "Test script copied to container"
|
|
208
|
-
else
|
|
209
|
-
log_error "Failed to copy test script"
|
|
210
|
-
return 1
|
|
211
|
-
fi
|
|
212
|
-
|
|
213
|
-
# Execute test
|
|
214
|
-
log_info "Executing Playwright test..."
|
|
215
|
-
if docker exec "$CONTAINER_NAME" node /app/test-playwright.cjs; then
|
|
216
|
-
log_success "Playwright test completed successfully"
|
|
217
|
-
else
|
|
218
|
-
log_error "Playwright test failed"
|
|
219
|
-
docker logs "$CONTAINER_NAME"
|
|
220
|
-
return 1
|
|
221
|
-
fi
|
|
222
|
-
|
|
223
|
-
# Check for screenshots
|
|
224
|
-
log_info "Test 4: Verifying screenshot output..."
|
|
225
|
-
if [ -f "$test_dir/google-homepage.png" ] && [ -f "$test_dir/wrexham-search.png" ]; then
|
|
226
|
-
log_success "Screenshots created successfully"
|
|
227
|
-
ls -la "$test_dir"/*.png
|
|
228
|
-
else
|
|
229
|
-
log_warning "Screenshots not found in expected location"
|
|
230
|
-
fi
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
# Phase 4: Performance testing
|
|
234
|
-
performance_test() {
|
|
235
|
-
log_info "Phase 4: Running performance tests..."
|
|
236
|
-
|
|
237
|
-
# Test container startup time
|
|
238
|
-
local start_time=$(date +%s%N)
|
|
239
|
-
|
|
240
|
-
docker run --rm \
|
|
241
|
-
-v "$(pwd)/test-output:/app/screenshots" \
|
|
242
|
-
"$IMAGE_NAME" \
|
|
243
|
-
node -e "
|
|
244
|
-
const { chromium } = require('playwright');
|
|
245
|
-
const start = Date.now();
|
|
246
|
-
|
|
247
|
-
(async () => {
|
|
248
|
-
const browser = await chromium.launch({ headless: true });
|
|
249
|
-
const page = await browser.newPage();
|
|
250
|
-
await page.goto('https://www.google.com');
|
|
251
|
-
const loadTime = Date.now() - start;
|
|
252
|
-
console.log('Google.com load time:', loadTime + 'ms');
|
|
253
|
-
await browser.close();
|
|
254
|
-
})();
|
|
255
|
-
"
|
|
256
|
-
|
|
257
|
-
local end_time=$(date +%s%N)
|
|
258
|
-
local total_time=$(( (end_time - start_time) / 1000000 ))
|
|
259
|
-
|
|
260
|
-
log_success "Performance test completed in ${total_time}ms"
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
# Cleanup function
|
|
264
|
-
cleanup() {
|
|
265
|
-
log_info "Cleaning up..."
|
|
266
|
-
|
|
267
|
-
# Stop and remove container
|
|
268
|
-
if docker ps -a --format 'table {{.Names}}' | grep -q "$CONTAINER_NAME"; then
|
|
269
|
-
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
|
270
|
-
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
|
271
|
-
fi
|
|
272
|
-
|
|
273
|
-
# Remove test files
|
|
274
|
-
if [ -d "./test-output" ]; then
|
|
275
|
-
log_info "Test output preserved in ./test-output/"
|
|
276
|
-
fi
|
|
277
|
-
|
|
278
|
-
log_success "Cleanup completed"
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
# Main execution
|
|
282
|
-
main() {
|
|
283
|
-
log_info "Starting Docker Playwright fix process..."
|
|
284
|
-
|
|
285
|
-
# Set up error handling
|
|
286
|
-
trap cleanup EXIT
|
|
287
|
-
|
|
288
|
-
# Execute phases
|
|
289
|
-
fix_dockerfile
|
|
290
|
-
build_docker_image
|
|
291
|
-
test_playwright
|
|
292
|
-
performance_test
|
|
293
|
-
|
|
294
|
-
log_success "=== Playwright Fix Complete ==="
|
|
295
|
-
log_info "The Docker image '$IMAGE_NAME' is ready for browser automation"
|
|
296
|
-
log_info "Screenshots are saved to mounted volumes"
|
|
297
|
-
|
|
298
|
-
# Display final summary
|
|
299
|
-
echo
|
|
300
|
-
echo "=== Summary ==="
|
|
301
|
-
echo "✅ Dockerfile fixed with proper Playwright installation"
|
|
302
|
-
echo "✅ Image built successfully with browsers pre-installed"
|
|
303
|
-
echo "✅ Google.com navigation test passed"
|
|
304
|
-
echo "✅ Screenshot functionality verified"
|
|
305
|
-
echo "✅ Performance metrics collected"
|
|
306
|
-
echo
|
|
307
|
-
echo "To use the fixed image:"
|
|
308
|
-
echo "docker run -v \$(pwd)/screenshots:/app/screenshots $IMAGE_NAME"
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
# Execute main function
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
# Docker Playwright Fix Script
|
|
6
|
+
# Fixes Playwright browser installation issues in claude-flow-novice Docker image
|
|
7
|
+
|
|
8
|
+
echo "=== Docker Playwright Fix Script ==="
|
|
9
|
+
echo "Date: $(date)"
|
|
10
|
+
echo "Fixing Playwright installation for browser automation..."
|
|
11
|
+
|
|
12
|
+
# Configuration
|
|
13
|
+
IMAGE_NAME="claude-flow-novice:with-playwright"
|
|
14
|
+
CONTAINER_NAME="playwright-test-container"
|
|
15
|
+
DOCKERFILE_PATH="docker/Dockerfile.with-playwright"
|
|
16
|
+
TEST_SCRIPT="docker/tests/test-playwright-functionality.cjs"
|
|
17
|
+
|
|
18
|
+
# Colors for output
|
|
19
|
+
RED='\033[0;31m'
|
|
20
|
+
GREEN='\033[0;32m'
|
|
21
|
+
YELLOW='\033[1;33m'
|
|
22
|
+
BLUE='\033[0;34m'
|
|
23
|
+
NC='\033[0m' # No Color
|
|
24
|
+
|
|
25
|
+
# Logging functions
|
|
26
|
+
log_info() {
|
|
27
|
+
echo -e "${BLUE}[INFO]${NC} $1"
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
log_success() {
|
|
31
|
+
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
log_warning() {
|
|
35
|
+
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
log_error() {
|
|
39
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
# Phase 1: Fix Dockerfile
|
|
43
|
+
fix_dockerfile() {
|
|
44
|
+
log_info "Phase 1: Fixing Dockerfile for Playwright..."
|
|
45
|
+
|
|
46
|
+
# Create fixed Dockerfile
|
|
47
|
+
cat > "$DOCKERFILE_PATH" << 'EOF'
|
|
48
|
+
# Multi-stage build for claude-flow-novice with Playwright
|
|
49
|
+
FROM node:18-slim AS base
|
|
50
|
+
|
|
51
|
+
# Install system dependencies for Playwright
|
|
52
|
+
RUN apt-get update && apt-get install -y \
|
|
53
|
+
# Basic dependencies
|
|
54
|
+
curl \
|
|
55
|
+
wget \
|
|
56
|
+
git \
|
|
57
|
+
gnupg2 \
|
|
58
|
+
# Playwright browser dependencies
|
|
59
|
+
libnss3 \
|
|
60
|
+
libatk-bridge2.0-0 \
|
|
61
|
+
libdrm2 \
|
|
62
|
+
libxcomposite1 \
|
|
63
|
+
libxdamage1 \
|
|
64
|
+
libxrandr2 \
|
|
65
|
+
libgbm1 \
|
|
66
|
+
libxss1 \
|
|
67
|
+
libasound2 \
|
|
68
|
+
# Additional libraries for headless operation
|
|
69
|
+
libgtk-3-0 \
|
|
70
|
+
libx11-xcb1 \
|
|
71
|
+
libxcb1 \
|
|
72
|
+
libxfixes3 \
|
|
73
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
74
|
+
|
|
75
|
+
# Build stage
|
|
76
|
+
FROM base AS builder
|
|
77
|
+
|
|
78
|
+
WORKDIR /app
|
|
79
|
+
|
|
80
|
+
# Copy package files
|
|
81
|
+
COPY package*.json ./
|
|
82
|
+
|
|
83
|
+
# Install dependencies
|
|
84
|
+
RUN npm ci --only=production
|
|
85
|
+
|
|
86
|
+
# Install Playwright and browsers
|
|
87
|
+
RUN npx playwright install --with-deps chromium
|
|
88
|
+
RUN npx playwright install-deps chromium
|
|
89
|
+
|
|
90
|
+
# Production stage
|
|
91
|
+
FROM base AS production
|
|
92
|
+
|
|
93
|
+
# Set environment for Playwright
|
|
94
|
+
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright
|
|
95
|
+
ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=0
|
|
96
|
+
ENV NODE_ENV=production
|
|
97
|
+
|
|
98
|
+
WORKDIR /app
|
|
99
|
+
|
|
100
|
+
# Copy application
|
|
101
|
+
COPY --from=builder /app/node_modules ./node_modules
|
|
102
|
+
COPY package*.json ./
|
|
103
|
+
COPY src/ ./src/
|
|
104
|
+
COPY bin/ ./bin/
|
|
105
|
+
|
|
106
|
+
# Copy browsers to system location
|
|
107
|
+
COPY --from=builder /root/.cache/ms-playwright /ms-playwright
|
|
108
|
+
|
|
109
|
+
# Create screenshots directory
|
|
110
|
+
RUN mkdir -p /app/screenshots /app/logs
|
|
111
|
+
RUN chmod 777 /app/screenshots /app/logs
|
|
112
|
+
|
|
113
|
+
# Health check for Playwright
|
|
114
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
115
|
+
CMD node -e "const {chromium} = require('playwright'); chromium.launch().then(() => process.exit(0)).catch(() => process.exit(1))"
|
|
116
|
+
|
|
117
|
+
EXPOSE 3000
|
|
118
|
+
|
|
119
|
+
CMD ["node", "src/cli/index.js"]
|
|
120
|
+
EOF
|
|
121
|
+
|
|
122
|
+
log_success "Dockerfile updated with Playwright fixes"
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
# Phase 2: Build Docker image
|
|
126
|
+
build_docker_image() {
|
|
127
|
+
log_info "Phase 2: Building Docker image with fixed Playwright..."
|
|
128
|
+
|
|
129
|
+
# Stop and remove existing container
|
|
130
|
+
if docker ps -a --format 'table {{.Names}}' | grep -q "$CONTAINER_NAME"; then
|
|
131
|
+
log_warning "Stopping and removing existing container..."
|
|
132
|
+
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
|
133
|
+
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
# Remove existing image
|
|
137
|
+
if docker images --format 'table {{.Repository}}:{{.Tag}}' | grep -q "$IMAGE_NAME"; then
|
|
138
|
+
log_warning "Removing existing image..."
|
|
139
|
+
docker rmi "$IMAGE_NAME" 2>/dev/null || true
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
# Build new image
|
|
143
|
+
log_info "Building new Docker image..."
|
|
144
|
+
if docker build -f "$DOCKERFILE_PATH" -t "$IMAGE_NAME" .; then
|
|
145
|
+
log_success "Docker image built successfully"
|
|
146
|
+
else
|
|
147
|
+
log_error "Failed to build Docker image"
|
|
148
|
+
return 1
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
# Get image size
|
|
152
|
+
local image_size=$(docker images --format "table {{.Repository}}:{{.Tag}}\t{{.Size}}" | grep "$IMAGE_NAME" | awk '{print $2}')
|
|
153
|
+
log_info "Image size: $image_size"
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
# Phase 3: Test Playwright functionality
|
|
157
|
+
test_playwright() {
|
|
158
|
+
log_info "Phase 3: Testing Playwright functionality..."
|
|
159
|
+
|
|
160
|
+
# Create test directory
|
|
161
|
+
local test_dir="./test-output"
|
|
162
|
+
mkdir -p "$test_dir"
|
|
163
|
+
|
|
164
|
+
# Run container with volume mounts
|
|
165
|
+
log_info "Starting container for testing..."
|
|
166
|
+
docker run -d \
|
|
167
|
+
--name "$CONTAINER_NAME" \
|
|
168
|
+
-v "$(pwd)/$test_dir:/app/screenshots" \
|
|
169
|
+
-e "SCREENSHOT_DIR=/app/screenshots" \
|
|
170
|
+
"$IMAGE_NAME" \
|
|
171
|
+
sleep 60
|
|
172
|
+
|
|
173
|
+
# Wait for container to be ready
|
|
174
|
+
log_info "Waiting for container to be ready..."
|
|
175
|
+
sleep 10
|
|
176
|
+
|
|
177
|
+
# Check if container is running
|
|
178
|
+
if ! docker ps --format 'table {{.Names}}' | grep -q "$CONTAINER_NAME"; then
|
|
179
|
+
log_error "Container failed to start"
|
|
180
|
+
docker logs "$CONTAINER_NAME"
|
|
181
|
+
return 1
|
|
182
|
+
fi
|
|
183
|
+
|
|
184
|
+
# Test 1: Check Playwright installation
|
|
185
|
+
log_info "Test 1: Verifying Playwright installation..."
|
|
186
|
+
if docker exec "$CONTAINER_NAME" npx playwright --version; then
|
|
187
|
+
log_success "Playwright is installed"
|
|
188
|
+
else
|
|
189
|
+
log_error "Playwright installation check failed"
|
|
190
|
+
return 1
|
|
191
|
+
fi
|
|
192
|
+
|
|
193
|
+
# Test 2: Check browser availability
|
|
194
|
+
log_info "Test 2: Checking browser availability..."
|
|
195
|
+
if docker exec "$CONTAINER_NAME" npx playwright install chromium --dry-run; then
|
|
196
|
+
log_success "Chromium browser is available"
|
|
197
|
+
else
|
|
198
|
+
log_error "Browser availability check failed"
|
|
199
|
+
return 1
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
# Test 3: Run the Playwright test script
|
|
203
|
+
log_info "Test 3: Running Google.com navigation test..."
|
|
204
|
+
|
|
205
|
+
# Copy test script to container
|
|
206
|
+
if docker cp "$TEST_SCRIPT" "$CONTAINER_NAME:/app/test-playwright.cjs"; then
|
|
207
|
+
log_success "Test script copied to container"
|
|
208
|
+
else
|
|
209
|
+
log_error "Failed to copy test script"
|
|
210
|
+
return 1
|
|
211
|
+
fi
|
|
212
|
+
|
|
213
|
+
# Execute test
|
|
214
|
+
log_info "Executing Playwright test..."
|
|
215
|
+
if docker exec "$CONTAINER_NAME" node /app/test-playwright.cjs; then
|
|
216
|
+
log_success "Playwright test completed successfully"
|
|
217
|
+
else
|
|
218
|
+
log_error "Playwright test failed"
|
|
219
|
+
docker logs "$CONTAINER_NAME"
|
|
220
|
+
return 1
|
|
221
|
+
fi
|
|
222
|
+
|
|
223
|
+
# Check for screenshots
|
|
224
|
+
log_info "Test 4: Verifying screenshot output..."
|
|
225
|
+
if [ -f "$test_dir/google-homepage.png" ] && [ -f "$test_dir/wrexham-search.png" ]; then
|
|
226
|
+
log_success "Screenshots created successfully"
|
|
227
|
+
ls -la "$test_dir"/*.png
|
|
228
|
+
else
|
|
229
|
+
log_warning "Screenshots not found in expected location"
|
|
230
|
+
fi
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
# Phase 4: Performance testing
|
|
234
|
+
performance_test() {
|
|
235
|
+
log_info "Phase 4: Running performance tests..."
|
|
236
|
+
|
|
237
|
+
# Test container startup time
|
|
238
|
+
local start_time=$(date +%s%N)
|
|
239
|
+
|
|
240
|
+
docker run --rm \
|
|
241
|
+
-v "$(pwd)/test-output:/app/screenshots" \
|
|
242
|
+
"$IMAGE_NAME" \
|
|
243
|
+
node -e "
|
|
244
|
+
const { chromium } = require('playwright');
|
|
245
|
+
const start = Date.now();
|
|
246
|
+
|
|
247
|
+
(async () => {
|
|
248
|
+
const browser = await chromium.launch({ headless: true });
|
|
249
|
+
const page = await browser.newPage();
|
|
250
|
+
await page.goto('https://www.google.com');
|
|
251
|
+
const loadTime = Date.now() - start;
|
|
252
|
+
console.log('Google.com load time:', loadTime + 'ms');
|
|
253
|
+
await browser.close();
|
|
254
|
+
})();
|
|
255
|
+
"
|
|
256
|
+
|
|
257
|
+
local end_time=$(date +%s%N)
|
|
258
|
+
local total_time=$(( (end_time - start_time) / 1000000 ))
|
|
259
|
+
|
|
260
|
+
log_success "Performance test completed in ${total_time}ms"
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
# Cleanup function
|
|
264
|
+
cleanup() {
|
|
265
|
+
log_info "Cleaning up..."
|
|
266
|
+
|
|
267
|
+
# Stop and remove container
|
|
268
|
+
if docker ps -a --format 'table {{.Names}}' | grep -q "$CONTAINER_NAME"; then
|
|
269
|
+
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
|
270
|
+
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
|
271
|
+
fi
|
|
272
|
+
|
|
273
|
+
# Remove test files
|
|
274
|
+
if [ -d "./test-output" ]; then
|
|
275
|
+
log_info "Test output preserved in ./test-output/"
|
|
276
|
+
fi
|
|
277
|
+
|
|
278
|
+
log_success "Cleanup completed"
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
# Main execution
|
|
282
|
+
main() {
|
|
283
|
+
log_info "Starting Docker Playwright fix process..."
|
|
284
|
+
|
|
285
|
+
# Set up error handling
|
|
286
|
+
trap cleanup EXIT
|
|
287
|
+
|
|
288
|
+
# Execute phases
|
|
289
|
+
fix_dockerfile
|
|
290
|
+
build_docker_image
|
|
291
|
+
test_playwright
|
|
292
|
+
performance_test
|
|
293
|
+
|
|
294
|
+
log_success "=== Playwright Fix Complete ==="
|
|
295
|
+
log_info "The Docker image '$IMAGE_NAME' is ready for browser automation"
|
|
296
|
+
log_info "Screenshots are saved to mounted volumes"
|
|
297
|
+
|
|
298
|
+
# Display final summary
|
|
299
|
+
echo
|
|
300
|
+
echo "=== Summary ==="
|
|
301
|
+
echo "✅ Dockerfile fixed with proper Playwright installation"
|
|
302
|
+
echo "✅ Image built successfully with browsers pre-installed"
|
|
303
|
+
echo "✅ Google.com navigation test passed"
|
|
304
|
+
echo "✅ Screenshot functionality verified"
|
|
305
|
+
echo "✅ Performance metrics collected"
|
|
306
|
+
echo
|
|
307
|
+
echo "To use the fixed image:"
|
|
308
|
+
echo "docker run -v \$(pwd)/screenshots:/app/screenshots $IMAGE_NAME"
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
# Execute main function
|
|
312
312
|
main "$@"
|