claude-flow-novice 2.9.1 → 2.10.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/agents/cfn-dev-team/CLAUDE.md +1086 -0
- package/.claude/agents/cfn-dev-team/README.md +116 -0
- package/.claude/agents/cfn-dev-team/architecture/api-designer-persona.md +149 -0
- package/.claude/agents/cfn-dev-team/architecture/base-template-generator.md +196 -0
- package/.claude/agents/cfn-dev-team/architecture/goal-planner.md +183 -0
- package/.claude/agents/cfn-dev-team/architecture/planner.md +182 -0
- package/.claude/agents/cfn-dev-team/architecture/system-architect.md +162 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +540 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +20 -14
- package/.claude/agents/cfn-dev-team/coordinators/consensus-builder.md +167 -0
- package/.claude/agents/cfn-dev-team/dev-ops/devops-engineer.md +148 -0
- package/.claude/agents/cfn-dev-team/dev-ops/github-commit-agent.md +118 -0
- package/.claude/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +540 -0
- package/.claude/agents/cfn-dev-team/developers/backend-dev.md +20 -0
- package/.claude/agents/cfn-dev-team/developers/data/data-engineer.md +585 -0
- package/.claude/agents/cfn-dev-team/developers/database/database-architect.md +276 -0
- package/.claude/agents/cfn-dev-team/developers/dev-backend-api.md +147 -0
- package/.claude/agents/cfn-dev-team/developers/frontend/mobile-dev.md +218 -0
- package/.claude/agents/cfn-dev-team/developers/{react-frontend-engineer.md → frontend/react-frontend-engineer.md} +53 -5
- package/.claude/agents/cfn-dev-team/developers/frontend/spec-mobile-react-native.md +199 -0
- package/.claude/agents/cfn-dev-team/developers/graphql-specialist.md +615 -0
- package/.claude/agents/cfn-dev-team/developers/rust-developer.md +174 -0
- package/.claude/agents/cfn-dev-team/documentation/README-VALIDATION.md +243 -0
- package/.claude/agents/cfn-dev-team/documentation/agent-type-guidelines.md +465 -0
- package/.claude/agents/cfn-dev-team/documentation/api-docs.md +103 -0
- package/.claude/agents/cfn-dev-team/documentation/docs-api-openapi.md +98 -0
- package/.claude/agents/cfn-dev-team/documentation/pseudocode.md +159 -0
- package/.claude/agents/cfn-dev-team/documentation/specification.md +157 -0
- package/.claude/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +109 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/cto-agent.md +8 -6
- package/.claude/agents/cfn-dev-team/product-owners/power-user-persona.md +190 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner.md +85 -59
- package/.claude/agents/cfn-dev-team/reviewers/quality/analyze-code-quality.md +141 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/code-analyzer.md +200 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +321 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +238 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +101 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/quality-metrics.md +375 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/security-specialist.md +193 -0
- package/.claude/agents/cfn-dev-team/reviewers/reviewer.md +39 -0
- package/.claude/agents/cfn-dev-team/testers/interaction-tester.md +31 -0
- package/.claude/agents/cfn-dev-team/testers/load-testing-specialist.md +469 -0
- package/.claude/agents/cfn-dev-team/testers/playwright-tester.md +24 -0
- package/.claude/agents/cfn-dev-team/testers/tester.md +20 -0
- package/.claude/agents/cfn-dev-team/utility/agent-builder.md +151 -0
- package/.claude/agents/cfn-dev-team/utility/analyst.md +178 -0
- package/.claude/agents/cfn-dev-team/utility/claude-code-expert.md +1043 -0
- package/.claude/agents/cfn-dev-team/utility/code-booster.md +139 -0
- package/.claude/agents/cfn-dev-team/utility/context-curator.md +99 -0
- package/.claude/agents/cfn-dev-team/{developers → utility}/researcher.md +6 -4
- package/.claude/commands/cfn/CFN_LOOP_FRONTEND.md +741 -0
- package/.claude/commands/cfn/CFN_LOOP_TASK_MODE.md +353 -0
- package/.claude/commands/cfn/cfn-loop-frontend.md +555 -0
- package/.claude/commands/cfn/cfn-loop.md +168 -7
- package/{CFN-CLAUDE.md → .claude/root-claude-distribute/CFN-CLAUDE.md} +23 -3
- package/.claude/skills/cfn-ace-system/SKILL.md +364 -0
- package/.claude/skills/cfn-ace-system/add-bullet.sh +145 -0
- package/.claude/skills/cfn-ace-system/analyze-anti-pattern-effectiveness.sh +56 -0
- package/.claude/skills/cfn-ace-system/classify-task.sh +18 -0
- package/.claude/skills/cfn-ace-system/export-ace-metrics.sh +48 -0
- package/.claude/skills/cfn-ace-system/extract-tags.sh +385 -0
- package/.claude/skills/cfn-ace-system/format-negative-context.sh +180 -0
- package/.claude/skills/cfn-ace-system/init-indexes.sql +160 -0
- package/.claude/skills/cfn-ace-system/invoke-context-curate.sh +192 -0
- package/.claude/skills/cfn-ace-system/invoke-context-inject.sh +361 -0
- package/.claude/skills/cfn-ace-system/invoke-context-query.sh +139 -0
- package/.claude/skills/cfn-ace-system/invoke-context-reflect.sh +343 -0
- package/.claude/skills/cfn-ace-system/invoke-context-stats.sh +227 -0
- package/.claude/skills/cfn-ace-system/log-merge.sh +67 -0
- package/.claude/skills/cfn-ace-system/monitor-injection-performance.sh +138 -0
- package/.claude/skills/cfn-ace-system/optimize-injection-pipeline.sh +169 -0
- package/.claude/skills/cfn-ace-system/query-anti-patterns.sh +276 -0
- package/.claude/skills/cfn-ace-system/query-contexts.sh +150 -0
- package/.claude/skills/cfn-ace-system/query-reflections.sh +35 -0
- package/.claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql +237 -0
- package/.claude/skills/cfn-ace-system/schema/README.md +723 -0
- package/.claude/skills/cfn-ace-system/schema/SCHEMA_DESIGN_SUMMARY.md +564 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data-simple.sh +62 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data.sh +247 -0
- package/.claude/skills/cfn-ace-system/schema/run-migration.sh +231 -0
- package/.claude/skills/cfn-ace-system/schema/validate-schema.sql +280 -0
- package/.claude/skills/cfn-ace-system/score-relevance-adapter.sh +138 -0
- package/.claude/skills/cfn-ace-system/score-relevance.sh +253 -0
- package/.claude/skills/cfn-ace-system/sprint-7-lessons.json +46 -0
- package/.claude/skills/cfn-ace-system/store-reflection.sh +46 -0
- package/.claude/skills/cfn-ace-system/test-ace-skill.sh +312 -0
- package/.claude/skills/cfn-ace-system/track-ab-test.sh +42 -0
- package/.claude/skills/cfn-ace-system/update-reflection.sh +41 -0
- package/.claude/skills/cfn-agent-discovery/SKILL.md +40 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-clean.json +0 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-fixed.json +19 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry.json +718 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.py +184 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.sh +87 -0
- package/.claude/skills/cfn-agent-discovery/invoke-registry.sh +11 -0
- package/.claude/skills/cfn-agent-discovery/temp_script.py +0 -0
- package/.claude/skills/cfn-agent-execution/execute-agent.sh +126 -0
- package/.claude/skills/cfn-agent-output-processing/SKILL.md +359 -0
- package/.claude/skills/cfn-agent-selector/SKILL.md +90 -0
- package/.claude/skills/cfn-agent-selector/select-agents.sh +112 -0
- package/.claude/skills/cfn-agent-spawning/SKILL.md +135 -0
- package/.claude/skills/cfn-agent-spawning/agent-selection-guide.md +814 -0
- package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +30 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +263 -0
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +613 -0
- package/.claude/skills/cfn-analytics/description-refinement-guide.md +164 -0
- package/.claude/skills/cfn-analytics/log-skill-invocation.js +122 -0
- package/.claude/skills/cfn-analytics/run-production-criteria-tests.sh +126 -0
- package/.claude/skills/cfn-analytics/skill-analytics-dashboard.js +113 -0
- package/.claude/skills/cfn-analytics/skill-invocation-hook.sh +28 -0
- package/.claude/skills/cfn-analytics/skill-invocations.sql +58 -0
- package/.claude/skills/cfn-analytics/test-corpus.json +32 -0
- package/.claude/skills/cfn-analytics/test-data-generator.js +115 -0
- package/.claude/skills/cfn-analytics/test-manual-override-rate.js +285 -0
- package/.claude/skills/cfn-analytics/validate-skill-selection.js +188 -0
- package/.claude/skills/cfn-config-management/SKILL.md +34 -0
- package/.claude/skills/cfn-config-management/check-dependencies.sh +56 -0
- package/.claude/skills/cfn-config-management/config.json +32 -0
- package/.claude/skills/cfn-config-management/manage-config.sh +113 -0
- package/.claude/skills/cfn-event-bus/SKILL.md +412 -0
- package/.claude/skills/cfn-event-bus/config.json +111 -0
- package/.claude/skills/cfn-event-bus/eventbus-wrapper.cjs +69 -0
- package/.claude/skills/cfn-event-bus/invoke-event-publish.sh +147 -0
- package/.claude/skills/cfn-event-bus/invoke-event-subscribe.sh +171 -0
- package/.claude/skills/cfn-event-bus/invoke-lifecycle-track.sh +201 -0
- package/.claude/skills/cfn-event-bus/test-event-bus.sh +280 -0
- package/.claude/skills/cfn-fleet-manager/SKILL.md +412 -0
- package/.claude/skills/cfn-fleet-manager/config.json +60 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-allocate.sh +182 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-balance.sh +239 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-metrics.sh +193 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-register.sh +124 -0
- package/.claude/skills/cfn-fleet-manager/test-fleet-manager.sh +345 -0
- package/.claude/skills/cfn-hook-pipeline/SKILL.md +148 -0
- package/.claude/skills/cfn-hook-pipeline/auto-resolve.sh +66 -0
- package/.claude/skills/cfn-hook-pipeline/check-dependencies.sh +40 -0
- package/.claude/skills/cfn-hook-pipeline/feedback-resolver.sh +452 -0
- package/.claude/skills/cfn-hook-pipeline/post-edit-handler.sh +154 -0
- package/.claude/skills/cfn-hook-pipeline/security-scan.json +60 -0
- package/.claude/skills/cfn-hook-pipeline/security-scanner.sh +121 -0
- package/.claude/skills/cfn-hook-pipeline/test-root-warning-resolution.sh +148 -0
- package/.claude/skills/cfn-hybrid-routing/SKILL.md +46 -0
- package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +52 -0
- package/.claude/skills/cfn-hybrid-routing/config.json +26 -0
- package/.claude/skills/cfn-hybrid-routing/spawn-worker.sh +44 -0
- package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +142 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +359 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +271 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
- package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
- package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +884 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +840 -0
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
- package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
- package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
- package/.claude/skills/cfn-loop-validation/SKILL.md +353 -0
- package/.claude/skills/cfn-loop-validation/check-dependencies.sh +31 -0
- package/.claude/skills/cfn-loop-validation/config.json +161 -0
- package/.claude/skills/cfn-loop-validation/consensus-calculator.js +477 -0
- package/.claude/skills/cfn-loop-validation/evidence-chain.sql +163 -0
- package/.claude/skills/cfn-loop-validation/examples/README.md +453 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +234 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +132 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +115 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +186 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh +134 -0
- package/.claude/skills/cfn-process-lifecycle/SKILL.md +39 -0
- package/.claude/skills/cfn-process-lifecycle/check-dependencies.sh +58 -0
- package/.claude/skills/cfn-process-lifecycle/config.json +39 -0
- package/.claude/skills/cfn-process-lifecycle/process-manager.sh +144 -0
- package/.claude/skills/cfn-product-owner-decision/SKILL.md +332 -0
- package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +176 -0
- package/.claude/skills/cfn-product-owner-decision/parse-decision.sh +66 -0
- package/.claude/skills/cfn-product-owner-decision/validate-deliverables.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +280 -0
- package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +209 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +57 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +267 -0
- package/.claude/skills/cfn-redis-coordination/LOGGING.md +260 -0
- package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +25 -0
- package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +164 -0
- package/.claude/skills/cfn-redis-coordination/SKILL.md +720 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/analyze-task-complexity.sh +277 -0
- package/.claude/skills/cfn-redis-coordination/cancel-swarm.sh +221 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-exec.sh +468 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-relaunch.sh +29 -0
- package/.claude/skills/cfn-redis-coordination/check-dependencies.sh +32 -0
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +179 -0
- package/.claude/skills/cfn-redis-coordination/collect-results.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/complete-swarm.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/config.json +61 -0
- package/.claude/skills/cfn-redis-coordination/data/cfn-loop.db +0 -0
- package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +82 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +274 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +276 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +129 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +320 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +249 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +163 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +138 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +45 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +68 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +56 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +57 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +187 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +160 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +59 -0
- package/.claude/skills/cfn-redis-coordination/examples/README.md +73 -0
- package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +352 -0
- package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +127 -0
- package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +171 -0
- package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +227 -0
- package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +239 -0
- package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +258 -0
- package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +177 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +137 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +106 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat.sh +126 -0
- package/.claude/skills/cfn-redis-coordination/init-swarm.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +220 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +283 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
- package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +147 -0
- package/.claude/skills/cfn-redis-coordination/log-event.sh +109 -0
- package/.claude/skills/cfn-redis-coordination/metrics-export.sh +674 -0
- package/.claude/skills/cfn-redis-coordination/metrics-schema.json +66 -0
- package/.claude/skills/cfn-redis-coordination/metrics-storage.md +31 -0
- package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +391 -0
- package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +101 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +31 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
- package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +75 -0
- package/.claude/skills/cfn-redis-coordination/priority_wake.py +134 -0
- package/.claude/skills/cfn-redis-coordination/query-dlq.sh +162 -0
- package/.claude/skills/cfn-redis-coordination/query-logs.sh +103 -0
- package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +619 -0
- package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +58 -0
- package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +371 -0
- package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +252 -0
- package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +165 -0
- package/.claude/skills/cfn-redis-coordination/signal.sh +38 -0
- package/.claude/skills/cfn-redis-coordination/store-context.sh +86 -0
- package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +123 -0
- package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +354 -0
- package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +513 -0
- package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +15 -0
- package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +102 -0
- package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +99 -0
- package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +170 -0
- package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +92 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +418 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +166 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +49 -0
- package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +76 -0
- package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +492 -0
- package/.claude/skills/cfn-sqlite-memory/IMPLEMENTATION_REPORT.md +393 -0
- package/.claude/skills/cfn-sqlite-memory/QUICK_REFERENCE.md +204 -0
- package/.claude/skills/cfn-sqlite-memory/SKILL.md +415 -0
- package/.claude/skills/cfn-sqlite-memory/acl-queries.sql +452 -0
- package/.claude/skills/cfn-sqlite-memory/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-sqlite-memory/config.json +45 -0
- package/.claude/skills/cfn-sqlite-memory/memory-cli.sh +88 -0
- package/.claude/skills/cfn-sqlite-memory/test-state-persistence.js +187 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +274 -0
- package/.claude/skills/cfn-test-execution/SKILL.md +128 -0
- package/.claude/skills/cfn-test-execution/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-test-execution/test-cache-reader.sh +134 -0
- package/.claude/skills/cfn-test-execution/test-concurrent-conflicts.sh +115 -0
- package/.claude/skills/cfn-test-execution/test-coordinator-pattern.sh +109 -0
- package/.claude/skills/cfn-transparency-middleware/Cargo.toml +18 -0
- package/.claude/skills/cfn-transparency-middleware/SECURITY.md +41 -0
- package/.claude/skills/cfn-transparency-middleware/SKILL.md +91 -0
- package/.claude/skills/cfn-transparency-middleware/TEST_RESULTS.md +174 -0
- package/.claude/skills/cfn-transparency-middleware/config.json +31 -0
- package/.claude/skills/cfn-transparency-middleware/examples/basic-usage.ts +39 -0
- package/.claude/skills/cfn-transparency-middleware/examples/batch-processing.ts +52 -0
- package/.claude/skills/cfn-transparency-middleware/examples/custom-filtering.ts +61 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-filter.sh +98 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-init.sh +224 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-level.sh +333 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-metrics.sh +345 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-observe.sh +140 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-stop.sh +235 -0
- package/.claude/skills/cfn-transparency-middleware/memory_query.rs +85 -0
- package/.claude/skills/cfn-transparency-middleware/memory_repository.rs +140 -0
- package/.claude/skills/cfn-transparency-middleware/memory_schema.rs +64 -0
- package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +29 -0
- package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +79 -0
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +406 -0
- package/.claude/skills/cfn-transparency-middleware/test-integration.sh +162 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +368 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh.unix +126 -0
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +93 -0
- package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +132 -0
- package/.claude/skills/cfn-webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
- package/.claude/skills/cfn-webapp-testing/SKILL.md +877 -0
- package/.claude/skills/cfn-webapp-testing/capture-screenshot.sh +238 -0
- package/.claude/skills/cfn-webapp-testing/cfn-loop-integration.sh +265 -0
- package/.claude/skills/cfn-webapp-testing/compare-screenshots.sh +199 -0
- package/.claude/skills/cfn-webapp-testing/init-storage.sh +150 -0
- package/.claude/skills/cfn-webapp-testing/set-baseline.sh +196 -0
- package/.claude/skills/cfn-webapp-testing/test-webapp-testing.sh +233 -0
- package/README.md +51 -2
- package/dist/ace/ace-reflector.js +109 -10
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/cli/agent-executor.js +1 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/package.json +43 -7
- package/readme/README.md +15 -4
- package/scripts/init-project.js +76 -6
- package/scripts/run-marketing-tests.sh +43 -0
- package/scripts/update_paths.sh +47 -0
- package/tools/install-lizard.sh +37 -0
- package/tools/simple-complexity.sh +44 -0
- package/.claude/agents/cfn-dev-team/developers/coder.md +0 -270
- package/.claude/agents/cfn-dev-team/developers/state-architect.md +0 -127
- package/.claude/agents/cfn-dev-team/reviewers/code-quality-validator.md +0 -128
- /package/.claude/agents/cfn-dev-team/developers/{ui-designer.md → frontend/ui-designer.md} +0 -0
- /package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner-agent.md +0 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Mesh Pattern: Many:1 Aggregation Coordination
|
|
3
|
+
# Use Case: Multiple agents complete independently, one agent waits for ALL
|
|
4
|
+
# Pattern: Hybrid LPUSH (first waiter) + SET (additional readers)
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
TASK_ID="demo:mesh"
|
|
9
|
+
TIMEOUT=300 # 5 minutes
|
|
10
|
+
|
|
11
|
+
echo "=== Mesh Pattern Demo (Many:1 Aggregation) ==="
|
|
12
|
+
echo "Scenario: [Coder, Tester, Reviewer] → Validator"
|
|
13
|
+
echo ""
|
|
14
|
+
|
|
15
|
+
# Cleanup previous demo data
|
|
16
|
+
echo "Cleaning up previous demo data..."
|
|
17
|
+
redis-cli del "${TASK_ID}:coder:done" > /dev/null 2>&1 || true
|
|
18
|
+
redis-cli del "${TASK_ID}:coder:result" > /dev/null 2>&1 || true
|
|
19
|
+
redis-cli del "${TASK_ID}:tester:done" > /dev/null 2>&1 || true
|
|
20
|
+
redis-cli del "${TASK_ID}:tester:result" > /dev/null 2>&1 || true
|
|
21
|
+
redis-cli del "${TASK_ID}:reviewer:done" > /dev/null 2>&1 || true
|
|
22
|
+
redis-cli del "${TASK_ID}:reviewer:result" > /dev/null 2>&1 || true
|
|
23
|
+
redis-cli del "${TASK_ID}:validator:result" > /dev/null 2>&1 || true
|
|
24
|
+
|
|
25
|
+
# Simulate Coder Agent (runs in background)
|
|
26
|
+
(
|
|
27
|
+
echo "[Coder] Implementing authentication feature..."
|
|
28
|
+
sleep 2
|
|
29
|
+
|
|
30
|
+
RESULT='{
|
|
31
|
+
"agent": "coder",
|
|
32
|
+
"confidence": 0.86,
|
|
33
|
+
"filesModified": ["auth.js", "auth.test.js"],
|
|
34
|
+
"linesAdded": 245,
|
|
35
|
+
"status": "complete"
|
|
36
|
+
}'
|
|
37
|
+
|
|
38
|
+
# Hybrid pattern: LPUSH for first waiter, SET for additional readers
|
|
39
|
+
redis-cli lpush "${TASK_ID}:coder:done" "$RESULT" > /dev/null
|
|
40
|
+
redis-cli set "${TASK_ID}:coder:result" "$RESULT" > /dev/null
|
|
41
|
+
redis-cli expire "${TASK_ID}:coder:result" 3600 > /dev/null # 1 hour TTL
|
|
42
|
+
|
|
43
|
+
echo "[Coder] Implementation complete, published results"
|
|
44
|
+
) &
|
|
45
|
+
|
|
46
|
+
# Simulate Tester Agent (runs in background)
|
|
47
|
+
(
|
|
48
|
+
echo "[Tester] Running test suite..."
|
|
49
|
+
sleep 3
|
|
50
|
+
|
|
51
|
+
RESULT='{
|
|
52
|
+
"agent": "tester",
|
|
53
|
+
"confidence": 0.92,
|
|
54
|
+
"testsRun": 45,
|
|
55
|
+
"testsPassed": 45,
|
|
56
|
+
"coverage": 0.94,
|
|
57
|
+
"status": "complete"
|
|
58
|
+
}'
|
|
59
|
+
|
|
60
|
+
# Hybrid pattern: LPUSH + SET
|
|
61
|
+
redis-cli lpush "${TASK_ID}:tester:done" "$RESULT" > /dev/null
|
|
62
|
+
redis-cli set "${TASK_ID}:tester:result" "$RESULT" > /dev/null
|
|
63
|
+
redis-cli expire "${TASK_ID}:tester:result" 3600 > /dev/null
|
|
64
|
+
|
|
65
|
+
echo "[Tester] Tests complete (45/45 passed, 94% coverage)"
|
|
66
|
+
) &
|
|
67
|
+
|
|
68
|
+
# Simulate Reviewer Agent (runs in background)
|
|
69
|
+
(
|
|
70
|
+
echo "[Reviewer] Reviewing code quality..."
|
|
71
|
+
sleep 2.5
|
|
72
|
+
|
|
73
|
+
RESULT='{
|
|
74
|
+
"agent": "reviewer",
|
|
75
|
+
"confidence": 0.88,
|
|
76
|
+
"issuesFound": 2,
|
|
77
|
+
"severity": "low",
|
|
78
|
+
"recommendations": ["Add input validation", "Improve error messages"],
|
|
79
|
+
"status": "complete"
|
|
80
|
+
}'
|
|
81
|
+
|
|
82
|
+
# Hybrid pattern: LPUSH + SET
|
|
83
|
+
redis-cli lpush "${TASK_ID}:reviewer:done" "$RESULT" > /dev/null
|
|
84
|
+
redis-cli set "${TASK_ID}:reviewer:result" "$RESULT" > /dev/null
|
|
85
|
+
redis-cli expire "${TASK_ID}:reviewer:result" 3600 > /dev/null
|
|
86
|
+
|
|
87
|
+
echo "[Reviewer] Review complete (2 low-severity issues)"
|
|
88
|
+
) &
|
|
89
|
+
|
|
90
|
+
# Validator: Wait for ALL three agents (first uses BLPOP, rest use GET)
|
|
91
|
+
echo "[Validator] Waiting for coder, tester, and reviewer to complete..."
|
|
92
|
+
|
|
93
|
+
# First agent: Use BLPOP (blocking wait)
|
|
94
|
+
CODER_DATA=$(timeout $TIMEOUT redis-cli --csv blpop "${TASK_ID}:coder:done" 0 2>/dev/null || echo "")
|
|
95
|
+
if [ -z "$CODER_DATA" ]; then
|
|
96
|
+
echo "[Validator] ERROR: Coder timeout after ${TIMEOUT}s"
|
|
97
|
+
exit 1
|
|
98
|
+
fi
|
|
99
|
+
echo "[Validator] ✓ Coder complete"
|
|
100
|
+
|
|
101
|
+
# Second agent: Use GET (non-blocking, from persistent SET)
|
|
102
|
+
TESTER_DATA=""
|
|
103
|
+
for i in {1..60}; do
|
|
104
|
+
TESTER_DATA=$(redis-cli get "${TASK_ID}:tester:result" 2>/dev/null || echo "")
|
|
105
|
+
if [ -n "$TESTER_DATA" ]; then
|
|
106
|
+
break
|
|
107
|
+
fi
|
|
108
|
+
sleep 1
|
|
109
|
+
done
|
|
110
|
+
|
|
111
|
+
if [ -z "$TESTER_DATA" ]; then
|
|
112
|
+
echo "[Validator] ERROR: Tester timeout after 60s"
|
|
113
|
+
exit 1
|
|
114
|
+
fi
|
|
115
|
+
echo "[Validator] ✓ Tester complete"
|
|
116
|
+
|
|
117
|
+
# Third agent: Use GET (non-blocking, from persistent SET)
|
|
118
|
+
REVIEWER_DATA=""
|
|
119
|
+
for i in {1..60}; do
|
|
120
|
+
REVIEWER_DATA=$(redis-cli get "${TASK_ID}:reviewer:result" 2>/dev/null || echo "")
|
|
121
|
+
if [ -n "$REVIEWER_DATA" ]; then
|
|
122
|
+
break
|
|
123
|
+
fi
|
|
124
|
+
sleep 1
|
|
125
|
+
done
|
|
126
|
+
|
|
127
|
+
if [ -z "$REVIEWER_DATA" ]; then
|
|
128
|
+
echo "[Validator] ERROR: Reviewer timeout after 60s"
|
|
129
|
+
exit 1
|
|
130
|
+
fi
|
|
131
|
+
echo "[Validator] ✓ Reviewer complete"
|
|
132
|
+
|
|
133
|
+
# Wait for all background jobs to complete
|
|
134
|
+
wait
|
|
135
|
+
|
|
136
|
+
echo ""
|
|
137
|
+
echo "[Validator] All agents complete, aggregating results..."
|
|
138
|
+
|
|
139
|
+
# Calculate aggregate confidence (simple average)
|
|
140
|
+
echo "[Validator] Aggregate confidence: ~0.89 (coder: 0.86, tester: 0.92, reviewer: 0.88)"
|
|
141
|
+
|
|
142
|
+
VALIDATION_RESULT='{
|
|
143
|
+
"agent": "validator",
|
|
144
|
+
"status": "validated",
|
|
145
|
+
"aggregateConfidence": 0.89,
|
|
146
|
+
"summary": "All components validated successfully"
|
|
147
|
+
}'
|
|
148
|
+
|
|
149
|
+
redis-cli set "${TASK_ID}:validator:result" "$VALIDATION_RESULT" > /dev/null
|
|
150
|
+
redis-cli expire "${TASK_ID}:validator:result" 3600 > /dev/null
|
|
151
|
+
|
|
152
|
+
echo ""
|
|
153
|
+
echo "=== Mesh Pattern Complete ==="
|
|
154
|
+
echo "✅ Three agents completed independently in parallel"
|
|
155
|
+
echo "✅ Validator successfully aggregated all results"
|
|
156
|
+
echo "✅ Hybrid LPUSH+SET pattern prevented BLPOP message loss"
|
|
157
|
+
echo ""
|
|
158
|
+
echo "Key Pattern:"
|
|
159
|
+
echo " 1. Each agent: LPUSH (for first waiter) + SET (for additional readers)"
|
|
160
|
+
echo " 2. Validator: BLPOP for first agent, GET for remaining agents"
|
|
161
|
+
echo " 3. SET keys have 1-hour expiry for cleanup"
|
|
162
|
+
echo ""
|
|
163
|
+
|
|
164
|
+
# Cleanup
|
|
165
|
+
redis-cli del "${TASK_ID}:coder:done" > /dev/null 2>&1 || true
|
|
166
|
+
redis-cli del "${TASK_ID}:coder:result" > /dev/null 2>&1 || true
|
|
167
|
+
redis-cli del "${TASK_ID}:tester:done" > /dev/null 2>&1 || true
|
|
168
|
+
redis-cli del "${TASK_ID}:tester:result" > /dev/null 2>&1 || true
|
|
169
|
+
redis-cli del "${TASK_ID}:reviewer:done" > /dev/null 2>&1 || true
|
|
170
|
+
redis-cli del "${TASK_ID}:reviewer:result" > /dev/null 2>&1 || true
|
|
171
|
+
redis-cli del "${TASK_ID}:validator:result" > /dev/null 2>&1 || true
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Timeout Handling: Comprehensive timeout patterns for Redis coordination
|
|
3
|
+
# Demonstrates proper timeout handling, error reporting, and recovery strategies
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
TASK_ID="demo:timeout"
|
|
8
|
+
SHORT_TIMEOUT=5 # 5 seconds (for demo of timeout failure)
|
|
9
|
+
NORMAL_TIMEOUT=300 # 5 minutes (production default)
|
|
10
|
+
|
|
11
|
+
echo "=== Timeout Handling Demo ==="
|
|
12
|
+
echo ""
|
|
13
|
+
|
|
14
|
+
# Cleanup previous demo data
|
|
15
|
+
echo "Cleaning up previous demo data..."
|
|
16
|
+
redis-cli del "${TASK_ID}:slow-agent:done" > /dev/null 2>&1 || true
|
|
17
|
+
redis-cli del "${TASK_ID}:fast-agent:done" > /dev/null 2>&1 || true
|
|
18
|
+
redis-cli del "${TASK_ID}:coordinator:error" > /dev/null 2>&1 || true
|
|
19
|
+
redis-cli del "${TASK_ID}:coordinator:status" > /dev/null 2>&1 || true
|
|
20
|
+
|
|
21
|
+
echo "--- Scenario 1: Timeout Failure (Agent Too Slow) ---"
|
|
22
|
+
echo ""
|
|
23
|
+
|
|
24
|
+
# Simulate slow agent that exceeds timeout (runs in background)
|
|
25
|
+
(
|
|
26
|
+
echo "[Slow Agent] Starting work..."
|
|
27
|
+
sleep 10 # Takes 10s but timeout is 5s
|
|
28
|
+
|
|
29
|
+
RESULT='{"agent":"slow-agent","confidence":0.85,"status":"complete"}'
|
|
30
|
+
redis-cli lpush "${TASK_ID}:slow-agent:done" "$RESULT" > /dev/null
|
|
31
|
+
echo "[Slow Agent] Work complete (but too late...)"
|
|
32
|
+
) &
|
|
33
|
+
|
|
34
|
+
SLOW_AGENT_PID=$!
|
|
35
|
+
|
|
36
|
+
# Coordinator waits with short timeout
|
|
37
|
+
echo "[Coordinator] Waiting for slow-agent with ${SHORT_TIMEOUT}s timeout..."
|
|
38
|
+
RESULT=$(timeout $SHORT_TIMEOUT redis-cli --csv blpop "${TASK_ID}:slow-agent:done" 0 2>/dev/null || echo "")
|
|
39
|
+
EXIT_CODE=$?
|
|
40
|
+
|
|
41
|
+
if [ $EXIT_CODE -eq 124 ]; then
|
|
42
|
+
echo "[Coordinator] ❌ ERROR: Slow agent timeout after ${SHORT_TIMEOUT}s"
|
|
43
|
+
|
|
44
|
+
# Report error to coordinator error channel
|
|
45
|
+
ERROR_REPORT='{
|
|
46
|
+
"agent": "slow-agent",
|
|
47
|
+
"error": "timeout",
|
|
48
|
+
"timeout": '${SHORT_TIMEOUT}',
|
|
49
|
+
"timestamp": "'$(date -u +"%Y-%m-%dT%H:%M:%SZ")'"
|
|
50
|
+
}'
|
|
51
|
+
|
|
52
|
+
redis-cli lpush "${TASK_ID}:coordinator:error" "$ERROR_REPORT" > /dev/null
|
|
53
|
+
echo "[Coordinator] Error reported to ${TASK_ID}:coordinator:error"
|
|
54
|
+
|
|
55
|
+
# Kill slow agent background process
|
|
56
|
+
kill $SLOW_AGENT_PID 2>/dev/null || true
|
|
57
|
+
|
|
58
|
+
echo "[Coordinator] Decision: Terminate slow agent and retry with different agent"
|
|
59
|
+
else
|
|
60
|
+
echo "[Coordinator] ✓ Slow agent completed within timeout"
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
echo ""
|
|
64
|
+
echo "--- Scenario 2: Timeout Success (Agent Fast Enough) ---"
|
|
65
|
+
echo ""
|
|
66
|
+
|
|
67
|
+
# Simulate fast agent that completes within timeout (runs in background)
|
|
68
|
+
(
|
|
69
|
+
echo "[Fast Agent] Starting work..."
|
|
70
|
+
sleep 2 # Takes 2s, well within 5s timeout
|
|
71
|
+
|
|
72
|
+
RESULT='{"agent":"fast-agent","confidence":0.90,"status":"complete"}'
|
|
73
|
+
redis-cli lpush "${TASK_ID}:fast-agent:done" "$RESULT" > /dev/null
|
|
74
|
+
echo "[Fast Agent] Work complete"
|
|
75
|
+
) &
|
|
76
|
+
|
|
77
|
+
# Coordinator waits with short timeout
|
|
78
|
+
echo "[Coordinator] Waiting for fast-agent with ${SHORT_TIMEOUT}s timeout..."
|
|
79
|
+
RESULT=$(timeout $SHORT_TIMEOUT redis-cli --csv blpop "${TASK_ID}:fast-agent:done" 0 2>/dev/null || echo "")
|
|
80
|
+
EXIT_CODE=$?
|
|
81
|
+
|
|
82
|
+
if [ $EXIT_CODE -eq 124 ]; then
|
|
83
|
+
echo "[Coordinator] ❌ ERROR: Fast agent timeout after ${SHORT_TIMEOUT}s"
|
|
84
|
+
else
|
|
85
|
+
echo "[Coordinator] ✓ Fast agent completed within timeout"
|
|
86
|
+
echo "[Coordinator] Result: ${RESULT:0:80}..."
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
wait
|
|
90
|
+
|
|
91
|
+
echo ""
|
|
92
|
+
echo "--- Scenario 3: Multi-Agent Timeout with Recovery ---"
|
|
93
|
+
echo ""
|
|
94
|
+
|
|
95
|
+
# Cleanup
|
|
96
|
+
redis-cli del "${TASK_ID}:agent-1:done" > /dev/null 2>&1 || true
|
|
97
|
+
redis-cli del "${TASK_ID}:agent-2:done" > /dev/null 2>&1 || true
|
|
98
|
+
redis-cli del "${TASK_ID}:agent-3:done" > /dev/null 2>&1 || true
|
|
99
|
+
|
|
100
|
+
# Simulate 3 agents with varying completion times
|
|
101
|
+
(
|
|
102
|
+
sleep 1
|
|
103
|
+
redis-cli lpush "${TASK_ID}:agent-1:done" '{"agent":"agent-1","confidence":0.85}' > /dev/null
|
|
104
|
+
echo "[Agent 1] Complete (1s)"
|
|
105
|
+
) &
|
|
106
|
+
|
|
107
|
+
(
|
|
108
|
+
sleep 2
|
|
109
|
+
redis-cli lpush "${TASK_ID}:agent-2:done" '{"agent":"agent-2","confidence":0.90}' > /dev/null
|
|
110
|
+
echo "[Agent 2] Complete (2s)"
|
|
111
|
+
) &
|
|
112
|
+
|
|
113
|
+
(
|
|
114
|
+
sleep 15 # Too slow - exceeds 5s timeout
|
|
115
|
+
redis-cli lpush "${TASK_ID}:agent-3:done" '{"agent":"agent-3","confidence":0.88}' > /dev/null
|
|
116
|
+
echo "[Agent 3] Complete (15s - too late)"
|
|
117
|
+
) &
|
|
118
|
+
|
|
119
|
+
AGENT_3_PID=$!
|
|
120
|
+
|
|
121
|
+
echo "[Coordinator] Waiting for 3 agents with ${SHORT_TIMEOUT}s timeout each..."
|
|
122
|
+
|
|
123
|
+
# Wait for agent 1
|
|
124
|
+
RESULT_1=$(timeout $SHORT_TIMEOUT redis-cli --csv blpop "${TASK_ID}:agent-1:done" 0 2>/dev/null || echo "")
|
|
125
|
+
if [ -z "$RESULT_1" ]; then
|
|
126
|
+
echo "[Coordinator] ❌ Agent 1 timeout"
|
|
127
|
+
AGENT_1_FAILED=1
|
|
128
|
+
else
|
|
129
|
+
echo "[Coordinator] ✓ Agent 1 complete"
|
|
130
|
+
AGENT_1_FAILED=0
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
# Wait for agent 2
|
|
134
|
+
RESULT_2=$(timeout $SHORT_TIMEOUT redis-cli --csv blpop "${TASK_ID}:agent-2:done" 0 2>/dev/null || echo "")
|
|
135
|
+
if [ -z "$RESULT_2" ]; then
|
|
136
|
+
echo "[Coordinator] ❌ Agent 2 timeout"
|
|
137
|
+
AGENT_2_FAILED=1
|
|
138
|
+
else
|
|
139
|
+
echo "[Coordinator] ✓ Agent 2 complete"
|
|
140
|
+
AGENT_2_FAILED=0
|
|
141
|
+
fi
|
|
142
|
+
|
|
143
|
+
# Wait for agent 3
|
|
144
|
+
RESULT_3=$(timeout $SHORT_TIMEOUT redis-cli --csv blpop "${TASK_ID}:agent-3:done" 0 2>/dev/null || echo "")
|
|
145
|
+
if [ -z "$RESULT_3" ]; then
|
|
146
|
+
echo "[Coordinator] ❌ Agent 3 timeout"
|
|
147
|
+
AGENT_3_FAILED=1
|
|
148
|
+
|
|
149
|
+
# Kill agent 3 background process
|
|
150
|
+
kill $AGENT_3_PID 2>/dev/null || true
|
|
151
|
+
else
|
|
152
|
+
echo "[Coordinator] ✓ Agent 3 complete"
|
|
153
|
+
AGENT_3_FAILED=0
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
# Calculate success rate
|
|
157
|
+
FAILED_COUNT=$((AGENT_1_FAILED + AGENT_2_FAILED + AGENT_3_FAILED))
|
|
158
|
+
SUCCESS_COUNT=$((3 - FAILED_COUNT))
|
|
159
|
+
|
|
160
|
+
echo ""
|
|
161
|
+
echo "[Coordinator] Results: $SUCCESS_COUNT/3 agents completed within timeout"
|
|
162
|
+
|
|
163
|
+
if [ $SUCCESS_COUNT -ge 2 ]; then
|
|
164
|
+
echo "[Coordinator] Decision: PROCEED with partial results (2/3 quorum met)"
|
|
165
|
+
|
|
166
|
+
STATUS='{"status":"partial_success","completed":'$SUCCESS_COUNT',"failed":'$FAILED_COUNT',"decision":"proceed"}'
|
|
167
|
+
redis-cli set "${TASK_ID}:coordinator:status" "$STATUS" > /dev/null
|
|
168
|
+
else
|
|
169
|
+
echo "[Coordinator] Decision: RETRY all agents (quorum not met)"
|
|
170
|
+
|
|
171
|
+
STATUS='{"status":"insufficient_quorum","completed":'$SUCCESS_COUNT',"failed":'$FAILED_COUNT',"decision":"retry"}'
|
|
172
|
+
redis-cli set "${TASK_ID}:coordinator:status" "$STATUS" > /dev/null
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
wait
|
|
176
|
+
|
|
177
|
+
echo ""
|
|
178
|
+
echo "--- Scenario 4: Timeout Best Practices ---"
|
|
179
|
+
echo ""
|
|
180
|
+
|
|
181
|
+
echo "✓ Timeout Guidelines:"
|
|
182
|
+
echo " - Normal operations: 300s (5 minutes)"
|
|
183
|
+
echo " - Research tasks: 600s (10 minutes)"
|
|
184
|
+
echo " - Complex builds: 900s (15 minutes)"
|
|
185
|
+
echo " - Testing: 600s (10 minutes)"
|
|
186
|
+
echo ""
|
|
187
|
+
|
|
188
|
+
echo "✓ Timeout Handling Pattern:"
|
|
189
|
+
echo ' result=$(timeout 300 redis-cli --csv blpop "channel" 0 2>/dev/null || echo "")'
|
|
190
|
+
echo ' if [ $? -eq 124 ]; then'
|
|
191
|
+
echo ' echo "TIMEOUT"'
|
|
192
|
+
echo ' redis-cli lpush "coordinator:error" '"'"'{"error":"timeout"}'"'"
|
|
193
|
+
echo ' fi'
|
|
194
|
+
echo ""
|
|
195
|
+
|
|
196
|
+
echo "✓ Error Reporting:"
|
|
197
|
+
echo " - Always report timeout to coordinator:error channel"
|
|
198
|
+
echo " - Include agent ID, timeout duration, timestamp"
|
|
199
|
+
echo " - Coordinator decides: retry, skip, or escalate"
|
|
200
|
+
echo ""
|
|
201
|
+
|
|
202
|
+
echo "✓ Recovery Strategies:"
|
|
203
|
+
echo " - Single agent timeout: Retry once with extended timeout"
|
|
204
|
+
echo " - Multiple agent timeout: Check quorum (2/3 pass = proceed)"
|
|
205
|
+
echo " - Critical agent timeout: Escalate to main chat"
|
|
206
|
+
echo " - Repeated timeouts: Switch to different agent type"
|
|
207
|
+
echo ""
|
|
208
|
+
|
|
209
|
+
echo "=== Timeout Handling Demo Complete ==="
|
|
210
|
+
echo ""
|
|
211
|
+
echo "Key Takeaways:"
|
|
212
|
+
echo " 1. ALWAYS use timeout command with BLPOP"
|
|
213
|
+
echo " 2. Check exit code 124 for timeout detection"
|
|
214
|
+
echo " 3. Report timeouts to coordinator:error channel"
|
|
215
|
+
echo " 4. Implement recovery strategies (retry/skip/escalate)"
|
|
216
|
+
echo " 5. Use appropriate timeout values for task type"
|
|
217
|
+
echo " 6. Kill/cleanup timed-out background processes"
|
|
218
|
+
echo ""
|
|
219
|
+
|
|
220
|
+
# Cleanup
|
|
221
|
+
redis-cli del "${TASK_ID}:slow-agent:done" > /dev/null 2>&1 || true
|
|
222
|
+
redis-cli del "${TASK_ID}:fast-agent:done" > /dev/null 2>&1 || true
|
|
223
|
+
redis-cli del "${TASK_ID}:agent-1:done" > /dev/null 2>&1 || true
|
|
224
|
+
redis-cli del "${TASK_ID}:agent-2:done" > /dev/null 2>&1 || true
|
|
225
|
+
redis-cli del "${TASK_ID}:agent-3:done" > /dev/null 2>&1 || true
|
|
226
|
+
redis-cli del "${TASK_ID}:coordinator:error" > /dev/null 2>&1 || true
|
|
227
|
+
redis-cli del "${TASK_ID}:coordinator:status" > /dev/null 2>&1 || true
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Waiting Mode + Coordinator Wake-Up Pattern
|
|
3
|
+
# Agents enter waiting mode, coordinator/peers wake them for iterations/fixes
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Configuration
|
|
8
|
+
TASK_ID="auth-system"
|
|
9
|
+
ITERATION=1
|
|
10
|
+
MAX_ITERATIONS=10
|
|
11
|
+
CONSENSUS_THRESHOLD=0.90
|
|
12
|
+
|
|
13
|
+
echo "========================================="
|
|
14
|
+
echo "Waiting Mode + Coordinator Wake-Up Demo"
|
|
15
|
+
echo "========================================="
|
|
16
|
+
echo ""
|
|
17
|
+
|
|
18
|
+
# Simulate coordinator spawning agents in waiting mode
|
|
19
|
+
echo "Step 1: Coordinator spawns agents in waiting mode"
|
|
20
|
+
echo " Task: agent-coder, agent-reviewer, agent-tester, agent-security"
|
|
21
|
+
echo ""
|
|
22
|
+
|
|
23
|
+
# Agent Pattern: Enter waiting mode immediately after spawn
|
|
24
|
+
agent_enter_waiting_mode() {
|
|
25
|
+
local agent_id=$1
|
|
26
|
+
local context=$2
|
|
27
|
+
|
|
28
|
+
echo "[$agent_id] Entering waiting mode..."
|
|
29
|
+
redis-cli lpush "swarm:$TASK_ID:$agent_id:ready" "{
|
|
30
|
+
\"status\": \"waiting\",
|
|
31
|
+
\"context\": \"$context\",
|
|
32
|
+
\"timestamp\": $(date +%s)
|
|
33
|
+
}" > /dev/null
|
|
34
|
+
|
|
35
|
+
echo "[$agent_id] Blocked on swarm:$TASK_ID:$agent_id:wake (infinite timeout)"
|
|
36
|
+
echo "[$agent_id] Zero token cost while waiting..."
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
# Simulate 4 agents entering waiting mode
|
|
40
|
+
agent_enter_waiting_mode "agent-coder" "iteration-1"
|
|
41
|
+
agent_enter_waiting_mode "agent-reviewer" "iteration-1"
|
|
42
|
+
agent_enter_waiting_mode "agent-tester" "iteration-1"
|
|
43
|
+
agent_enter_waiting_mode "agent-security" "iteration-1"
|
|
44
|
+
|
|
45
|
+
echo ""
|
|
46
|
+
echo "========================================="
|
|
47
|
+
echo "CFN Loop Iteration 1: Wake agents"
|
|
48
|
+
echo "========================================="
|
|
49
|
+
echo ""
|
|
50
|
+
|
|
51
|
+
# Coordinator wakes agents for first iteration
|
|
52
|
+
wake_agent() {
|
|
53
|
+
local agent_id=$1
|
|
54
|
+
local iteration=$2
|
|
55
|
+
local task=$3
|
|
56
|
+
|
|
57
|
+
echo "[Coordinator] Waking $agent_id for iteration $iteration..."
|
|
58
|
+
redis-cli lpush "swarm:$TASK_ID:$agent_id:wake" "{
|
|
59
|
+
\"reason\": \"cfn_loop_iteration\",
|
|
60
|
+
\"iteration\": $iteration,
|
|
61
|
+
\"task\": \"$task\",
|
|
62
|
+
\"timestamp\": $(date +%s)
|
|
63
|
+
}" > /dev/null
|
|
64
|
+
|
|
65
|
+
echo "[Coordinator] Wake signal sent to $agent_id"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# Wake all agents for iteration 1
|
|
69
|
+
wake_agent "agent-coder" $ITERATION "Implement authentication logic"
|
|
70
|
+
wake_agent "agent-reviewer" $ITERATION "Review code quality"
|
|
71
|
+
wake_agent "agent-tester" $ITERATION "Write and run tests"
|
|
72
|
+
wake_agent "agent-security" $ITERATION "Security audit"
|
|
73
|
+
|
|
74
|
+
echo ""
|
|
75
|
+
echo "Agents process tasks..."
|
|
76
|
+
sleep 2
|
|
77
|
+
|
|
78
|
+
# Simulate agents reporting back
|
|
79
|
+
echo ""
|
|
80
|
+
echo "Agents report confidence and return to waiting mode:"
|
|
81
|
+
redis-cli lpush "swarm:$TASK_ID:agent-coder:result" '{"confidence":0.75,"iteration":1,"status":"needs_improvement"}' > /dev/null
|
|
82
|
+
echo " [agent-coder] Confidence: 0.75 (needs improvement)"
|
|
83
|
+
|
|
84
|
+
redis-cli lpush "swarm:$TASK_ID:agent-reviewer:result" '{"confidence":0.80,"iteration":1,"issues":["Missing error handling"]}' > /dev/null
|
|
85
|
+
echo " [agent-reviewer] Confidence: 0.80 (issues found)"
|
|
86
|
+
|
|
87
|
+
redis-cli lpush "swarm:$TASK_ID:agent-tester:result" '{"confidence":0.72,"iteration":1,"coverage":0.65}' > /dev/null
|
|
88
|
+
echo " [agent-tester] Confidence: 0.72 (low coverage)"
|
|
89
|
+
|
|
90
|
+
redis-cli lpush "swarm:$TASK_ID:agent-security:result" '{"confidence":0.85,"iteration":1}' > /dev/null
|
|
91
|
+
echo " [agent-security] Confidence: 0.85"
|
|
92
|
+
|
|
93
|
+
# Calculate consensus
|
|
94
|
+
echo ""
|
|
95
|
+
echo "[Coordinator] Calculating consensus..."
|
|
96
|
+
CONSENSUS=$(echo "scale=2; (0.75 + 0.80 + 0.72 + 0.85) / 4" | bc)
|
|
97
|
+
echo "[Coordinator] Iteration $ITERATION Consensus: $CONSENSUS"
|
|
98
|
+
echo "[Coordinator] Threshold: $CONSENSUS_THRESHOLD"
|
|
99
|
+
|
|
100
|
+
if (( $(echo "$CONSENSUS < $CONSENSUS_THRESHOLD" | bc -l) )); then
|
|
101
|
+
echo "[Coordinator] ⚠️ Consensus below threshold - triggering iteration 2"
|
|
102
|
+
|
|
103
|
+
# Agents automatically return to waiting mode
|
|
104
|
+
echo ""
|
|
105
|
+
echo "Agents return to waiting mode (context preserved):"
|
|
106
|
+
agent_enter_waiting_mode "agent-coder" "iteration-2"
|
|
107
|
+
agent_enter_waiting_mode "agent-reviewer" "iteration-2"
|
|
108
|
+
agent_enter_waiting_mode "agent-tester" "iteration-2"
|
|
109
|
+
agent_enter_waiting_mode "agent-security" "iteration-2"
|
|
110
|
+
|
|
111
|
+
echo ""
|
|
112
|
+
echo "========================================="
|
|
113
|
+
echo "CFN Loop Iteration 2: Wake with feedback"
|
|
114
|
+
echo "========================================="
|
|
115
|
+
echo ""
|
|
116
|
+
|
|
117
|
+
# Wake agents with feedback from previous iteration
|
|
118
|
+
echo "[Coordinator] Waking agents with feedback from iteration 1..."
|
|
119
|
+
|
|
120
|
+
redis-cli lpush "swarm:$TASK_ID:agent-coder:wake" "{
|
|
121
|
+
\"reason\": \"cfn_loop_iteration\",
|
|
122
|
+
\"iteration\": 2,
|
|
123
|
+
\"previous_consensus\": $CONSENSUS,
|
|
124
|
+
\"feedback\": [\"Add error handling\", \"Improve test coverage\"],
|
|
125
|
+
\"context_from_iteration_1\": \"maintained\"
|
|
126
|
+
}" > /dev/null
|
|
127
|
+
echo " [agent-coder] Woke with feedback: Add error handling"
|
|
128
|
+
|
|
129
|
+
redis-cli lpush "swarm:$TASK_ID:agent-reviewer:wake" "{
|
|
130
|
+
\"reason\": \"cfn_loop_iteration\",
|
|
131
|
+
\"iteration\": 2,
|
|
132
|
+
\"previous_consensus\": $CONSENSUS,
|
|
133
|
+
\"feedback\": [\"Validate error handling fixes\"]
|
|
134
|
+
}" > /dev/null
|
|
135
|
+
echo " [agent-reviewer] Woke with feedback: Validate fixes"
|
|
136
|
+
|
|
137
|
+
redis-cli lpush "swarm:$TASK_ID:agent-tester:wake" "{
|
|
138
|
+
\"reason\": \"cfn_loop_iteration\",
|
|
139
|
+
\"iteration\": 2,
|
|
140
|
+
\"previous_consensus\": $CONSENSUS,
|
|
141
|
+
\"feedback\": [\"Increase coverage to 85%\"]
|
|
142
|
+
}" > /dev/null
|
|
143
|
+
echo " [agent-tester] Woke with feedback: Increase coverage"
|
|
144
|
+
|
|
145
|
+
redis-cli lpush "swarm:$TASK_ID:agent-security:wake" "{
|
|
146
|
+
\"reason\": \"cfn_loop_iteration\",
|
|
147
|
+
\"iteration\": 2,
|
|
148
|
+
\"previous_consensus\": $CONSENSUS
|
|
149
|
+
}" > /dev/null
|
|
150
|
+
echo " [agent-security] Woke for re-validation"
|
|
151
|
+
|
|
152
|
+
echo ""
|
|
153
|
+
echo "Agents process iteration 2 tasks (with context from iteration 1)..."
|
|
154
|
+
sleep 2
|
|
155
|
+
|
|
156
|
+
# Simulate improved results
|
|
157
|
+
echo ""
|
|
158
|
+
echo "Agents report improved confidence:"
|
|
159
|
+
redis-cli lpush "swarm:$TASK_ID:agent-coder:result" '{"confidence":0.90,"iteration":2}' > /dev/null
|
|
160
|
+
echo " [agent-coder] Confidence: 0.90 ✅"
|
|
161
|
+
|
|
162
|
+
redis-cli lpush "swarm:$TASK_ID:agent-reviewer:result" '{"confidence":0.92,"iteration":2}' > /dev/null
|
|
163
|
+
echo " [agent-reviewer] Confidence: 0.92 ✅"
|
|
164
|
+
|
|
165
|
+
redis-cli lpush "swarm:$TASK_ID:agent-tester:result" '{"confidence":0.88,"iteration":2,"coverage":0.87}' > /dev/null
|
|
166
|
+
echo " [agent-tester] Confidence: 0.88 ✅"
|
|
167
|
+
|
|
168
|
+
redis-cli lpush "swarm:$TASK_ID:agent-security:result" '{"confidence":0.94,"iteration":2}' > /dev/null
|
|
169
|
+
echo " [agent-security] Confidence: 0.94 ✅"
|
|
170
|
+
|
|
171
|
+
CONSENSUS=$(echo "scale=2; (0.90 + 0.92 + 0.88 + 0.94) / 4" | bc)
|
|
172
|
+
echo ""
|
|
173
|
+
echo "[Coordinator] Iteration 2 Consensus: $CONSENSUS"
|
|
174
|
+
echo "[Coordinator] ✅ Consensus >= threshold - PROCEED"
|
|
175
|
+
fi
|
|
176
|
+
|
|
177
|
+
echo ""
|
|
178
|
+
echo "========================================="
|
|
179
|
+
echo "Example 2: Incomplete Work Wake-Up"
|
|
180
|
+
echo "========================================="
|
|
181
|
+
echo ""
|
|
182
|
+
|
|
183
|
+
# Simulate incomplete work detection
|
|
184
|
+
echo "[Coordinator] Detected incomplete work in agent-coder..."
|
|
185
|
+
redis-cli lpush "swarm:$TASK_ID:agent-coder:wake" '{
|
|
186
|
+
"reason": "incomplete_work",
|
|
187
|
+
"issues": ["Missing test coverage", "Type errors in auth.ts"],
|
|
188
|
+
"priority": "high"
|
|
189
|
+
}' > /dev/null
|
|
190
|
+
|
|
191
|
+
echo "[Coordinator] Woke agent-coder to fix issues"
|
|
192
|
+
echo " Issues: Missing test coverage, Type errors"
|
|
193
|
+
echo ""
|
|
194
|
+
|
|
195
|
+
echo "========================================="
|
|
196
|
+
echo "Example 3: Agent-to-Agent Clarification"
|
|
197
|
+
echo "========================================="
|
|
198
|
+
echo ""
|
|
199
|
+
|
|
200
|
+
# Simulate peer-to-peer clarification
|
|
201
|
+
echo "[agent-reviewer] Has question for agent-coder..."
|
|
202
|
+
redis-cli lpush "swarm:$TASK_ID:agent-coder:wake" '{
|
|
203
|
+
"reason": "clarification",
|
|
204
|
+
"from_agent": "reviewer",
|
|
205
|
+
"question": "Should we use JWT or session cookies for auth?",
|
|
206
|
+
"urgent": false
|
|
207
|
+
}' > /dev/null
|
|
208
|
+
|
|
209
|
+
echo "[agent-reviewer] Sent clarification question to agent-coder"
|
|
210
|
+
echo " Question: JWT or session cookies?"
|
|
211
|
+
echo ""
|
|
212
|
+
|
|
213
|
+
echo "========================================="
|
|
214
|
+
echo "Benefits Summary"
|
|
215
|
+
echo "========================================="
|
|
216
|
+
echo ""
|
|
217
|
+
echo "✅ Zero token cost while agents wait (BLPOP blocks, no API calls)"
|
|
218
|
+
echo "✅ Context preserved across iterations (agents remember previous work)"
|
|
219
|
+
echo "✅ Instant wake-up (<100ms latency)"
|
|
220
|
+
echo "✅ Scalable (10+ agents can cycle indefinitely)"
|
|
221
|
+
echo "✅ CFN Loop native (agents maintain state across consensus cycles)"
|
|
222
|
+
echo ""
|
|
223
|
+
|
|
224
|
+
# Cleanup
|
|
225
|
+
echo "Cleaning up Redis keys..."
|
|
226
|
+
redis-cli del "swarm:$TASK_ID:agent-coder:ready" > /dev/null
|
|
227
|
+
redis-cli del "swarm:$TASK_ID:agent-coder:wake" > /dev/null
|
|
228
|
+
redis-cli del "swarm:$TASK_ID:agent-coder:result" > /dev/null
|
|
229
|
+
redis-cli del "swarm:$TASK_ID:agent-reviewer:ready" > /dev/null
|
|
230
|
+
redis-cli del "swarm:$TASK_ID:agent-reviewer:wake" > /dev/null
|
|
231
|
+
redis-cli del "swarm:$TASK_ID:agent-reviewer:result" > /dev/null
|
|
232
|
+
redis-cli del "swarm:$TASK_ID:agent-tester:ready" > /dev/null
|
|
233
|
+
redis-cli del "swarm:$TASK_ID:agent-tester:wake" > /dev/null
|
|
234
|
+
redis-cli del "swarm:$TASK_ID:agent-tester:result" > /dev/null
|
|
235
|
+
redis-cli del "swarm:$TASK_ID:agent-security:ready" > /dev/null
|
|
236
|
+
redis-cli del "swarm:$TASK_ID:agent-security:wake" > /dev/null
|
|
237
|
+
redis-cli del "swarm:$TASK_ID:agent-security:result" > /dev/null
|
|
238
|
+
|
|
239
|
+
echo "Demo complete!"
|