claude-flow-novice 2.6.0 → 2.8.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/adaptive-context/cfn-v3-reflection.json +21 -0
- package/.claude/agents/AGENT_LIFECYCLE.md +495 -0
- package/.claude/agents/CLAUDE.md +1002 -995
- package/.claude/agents/accessibility-advocate.md +457 -0
- package/.claude/agents/agent-principles/README.md +226 -226
- package/.claude/agents/agent-principles/agent-type-guidelines.md +10 -0
- package/.claude/agents/agent-principles/format-selection.md +10 -0
- package/.claude/agents/agent-principles/phase4-template-optimization.md +502 -494
- package/.claude/agents/agent-principles/prompt-engineering.md +8 -0
- package/.claude/agents/agent-principles/quality-metrics.md +8 -0
- package/.claude/agents/analysis/code-analyzer.md +7 -17
- package/.claude/agents/analysis/code-review/analyze-code-quality.md +2 -104
- package/.claude/agents/analysis/perf-analyzer.md +2 -196
- package/.claude/agents/context/context-curator.md +78 -84
- package/.claude/agents/context/context-reflector.md +27 -81
- package/.claude/agents/coordinators/README.md +42 -0
- package/.claude/agents/coordinators/cfn-v3-coordinator.md +440 -0
- package/.claude/agents/{product-owner-team → coordinators}/cto-agent.md +154 -187
- package/.claude/agents/coordinators/multi-sprint-coordinator.md +50 -0
- package/.claude/agents/{product-owner-team → coordinators}/product-owner-agent.md +6 -39
- package/.claude/agents/{cfn-loop → coordinators}/product-owner.md +72 -17
- package/.claude/agents/core-agents/reviewer.md +114 -135
- package/.claude/agents/custom/agent-builder.md +637 -637
- package/.claude/agents/developers/README.md +69 -0
- package/.claude/agents/developers/backend-dev.md +77 -0
- package/.claude/agents/{core-agents → developers}/coder.md +131 -26
- package/.claude/agents/developers/react-frontend-engineer.md +121 -0
- package/.claude/agents/{frontend → developers}/state-architect.md +1 -0
- package/.claude/agents/{frontend → developers}/ui-designer.md +1 -0
- package/.claude/agents/development/backend/dev-backend-api.md +0 -29
- package/.claude/agents/development/npm-package-specialist.md +355 -347
- package/.claude/agents/documentation/api-docs/docs-api-openapi.md +8 -0
- package/.claude/agents/documentation/api-docs.md +8 -0
- package/.claude/agents/github/github-commit-agent.md +125 -117
- package/.claude/agents/goal/goal-planner.md +8 -0
- package/.claude/agents/infrastructure/README.md +100 -0
- package/.claude/agents/{specialized → infrastructure}/devops-engineer.md +131 -150
- package/.claude/agents/planners/README.md +94 -0
- package/.claude/agents/{core-agents → planners}/analyst.md +1 -22
- package/.claude/agents/{planning-team → planners}/api-designer-persona.md +8 -0
- package/.claude/agents/{core-agents → planners}/architect.md +7 -20
- package/.claude/agents/{core-agents → planners}/planner.md +0 -21
- package/.claude/agents/{planning-team → planners}/security-architect-persona.md +8 -28
- package/.claude/agents/{planning-team → planners}/system-architect-persona.md +6 -38
- package/.claude/agents/{architecture → planners}/system-architect.md +12 -17
- package/.claude/agents/product-owner-team/accessibility-advocate-persona.md +132 -161
- package/.claude/agents/product-owner-team/power-user-persona.md +149 -182
- package/.claude/agents/retrospective-analyst.md +84 -0
- package/.claude/agents/reviewers/README.md +58 -0
- package/.claude/agents/{analysis → reviewers}/code-quality-validator.md +8 -17
- package/.claude/agents/reviewers/reviewer.md +181 -0
- package/.claude/agents/sparc/architecture.md +6 -25
- package/.claude/agents/sparc/pseudocode.md +6 -0
- package/.claude/agents/sparc/refinement.md +6 -0
- package/.claude/agents/sparc/specification.md +1 -0
- package/.claude/agents/specialists/README.md +60 -0
- package/.claude/agents/{core-agents → specialists}/base-template-generator.md +8 -21
- package/.claude/agents/{specialized → specialists}/cli-agent-optimizer.md +1 -1
- package/.claude/agents/{specialized → specialists}/code-booster.md +1 -0
- package/.claude/agents/{consensus → specialists}/consensus-builder.md +1 -17
- package/.claude/agents/{specialized/mobile → specialists}/mobile-dev.md +0 -20
- package/.claude/agents/{core-agents → specialists}/performance-benchmarker.md +134 -148
- package/.claude/agents/{specialized → specialists}/rust-developer.md +1 -20
- package/.claude/agents/{specialized → specialists}/rust-enterprise-developer.md +1 -20
- package/.claude/agents/{specialized → specialists}/rust-mvp-developer.md +1 -20
- package/.claude/agents/{core-agents → specialists}/security-manager.md +68 -88
- package/.claude/agents/{security → specialists}/security-specialist-existing.md +6 -57
- package/.claude/agents/{security → specialists}/security-specialist.md +6 -30
- package/.claude/agents/{specialized/mobile → specialists}/spec-mobile-react-native.md +2 -21
- package/.claude/agents/testers/README.md +94 -0
- package/.claude/agents/{testing → testers}/e2e/playwright-agent.md +1 -20
- package/.claude/agents/{testing → testers}/interaction-tester.md +1 -20
- package/.claude/agents/{testing → testers}/playwright-tester.md +1 -1
- package/.claude/agents/testers/tester.md +139 -0
- package/.claude/agents/testers/unit/tdd-london-swarm.md +49 -0
- package/.claude/agents/testers/validation/production-validator.md +33 -0
- package/.claude/agents-ignore/cfn-loop-coordinator.md +157 -0
- package/.claude/agents-ignore/cfn-loop-coordinator.md.backup +156 -0
- package/.claude/agents-ignore/coordinator.md.backup +182 -0
- package/.claude/agents-ignore/cost-savings-cfn-loop-coordinator.md +760 -0
- package/.claude/agents-ignore/cost-savings-coordinator.md +173 -0
- package/.claude/artifacts/ace-reflections/REFLECT-001-summary.json +39 -0
- package/.claude/artifacts/ace-reflections/sprint-7_$(date -u +/"%Y%m%d_%H%M%S/").json" +47 -0
- package/.claude/commands/CFN_COORDINATOR_PARAMETERS.md +10 -10
- package/.claude/commands/cfn-loop-epic.md +3 -3
- package/.claude/commands/cfn-loop-single.md +3 -3
- package/.claude/commands/cfn-loop-sprints.md +1 -1
- package/.claude/commands/cfn-loop.md +3 -3
- package/.claude/commands/cfn-mode.md +20 -0
- package/.claude/commands/write-plan.md +104 -0
- package/.claude/data/cfn-loop.db +0 -0
- package/.claude/data/cfn_loop_logs.db +0 -0
- package/.claude/hooks/BACKUP_USAGE.md +243 -0
- package/.claude/hooks/post-edit-cfn-retrospective.sh +79 -0
- package/.claude/hooks/post-edit.sh +21 -0
- package/.claude/hooks/pre-edit-backup.sh +71 -0
- package/.claude/hooks/restore-from-backup.sh +37 -0
- package/.claude/prompts/cfn-loop-context.md +115 -0
- package/.claude/prompts/loop-specific/loop2.md +50 -0
- package/.claude/prompts/loop-specific/loop3.md +43 -0
- package/.claude/prompts/loop-specific/loop4.md +54 -0
- package/.claude/root-claude-distribute/CLAUDE.md +76 -2
- package/.claude/skills/ace-system/sprint-7-lessons.json +46 -0
- package/.claude/skills/ace-system/store-reflection.sh +33 -136
- package/.claude/skills/agent-discovery/SKILL.md +40 -0
- package/.claude/skills/agent-discovery/agents-registry-clean.json +0 -0
- package/.claude/skills/agent-discovery/agents-registry-fixed.json +19 -0
- package/.claude/skills/agent-discovery/agents-registry.json +718 -0
- package/.claude/skills/agent-discovery/discover-agents.py +175 -0
- package/.claude/skills/agent-discovery/discover-agents.sh +87 -0
- package/.claude/skills/agent-discovery/invoke-registry.sh +11 -0
- package/.claude/skills/agent-discovery/temp_script.py +0 -0
- package/.claude/skills/agent-output-processing/SKILL.md +359 -0
- package/.claude/skills/agent-selector/SKILL.md +90 -0
- package/.claude/skills/agent-selector/select-agents.sh +96 -0
- package/.claude/skills/agent-spawning/agent-selection-guide.md +1 -1
- package/.claude/skills/agent-swap/SKILL.md +36 -0
- package/.claude/skills/agent-swap/recommend-swap.sh +60 -0
- package/.claude/skills/api-validation/test-endpoints.sh +54 -0
- package/.claude/skills/automatic-memory-persistence/SKILL.md +73 -0
- package/.claude/skills/automatic-memory-persistence/persist-agent-output.sh +49 -0
- package/.claude/skills/automatic-memory-persistence/query-agent-history.sh +35 -0
- package/.claude/skills/automatic-memory-persistence/test-memory-persistence.sh +235 -0
- package/.claude/skills/cfn-loop-orchestration/README.md +41 -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/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/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 +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 +307 -217
- package/.claude/skills/complexity-estimator/SKILL.md +96 -0
- package/.claude/skills/complexity-estimator/estimate-complexity.sh +144 -0
- package/.claude/skills/context-pruner/SKILL.md +75 -0
- package/.claude/skills/context-pruner/prune-context.sh +73 -0
- package/.claude/skills/defense-in-depth/SKILL.md +133 -0
- package/.claude/skills/dependency-extractor/SKILL.md +35 -0
- package/.claude/skills/dependency-extractor/extract-dependencies.sh +66 -0
- package/.claude/skills/epic-decomposer/SKILL.md +44 -0
- package/.claude/skills/epic-decomposer/decompose-epic.sh +104 -0
- package/.claude/skills/improvement-recommender/SKILL.md +33 -0
- package/.claude/skills/improvement-recommender/recommend-improvements.sh +92 -0
- package/.claude/skills/intervention-detector/SKILL.md +39 -0
- package/.claude/skills/intervention-detector/detect-intervention.sh +111 -0
- package/.claude/skills/intervention-orchestrator/SKILL.md +43 -0
- package/.claude/skills/intervention-orchestrator/execute-intervention.sh +59 -0
- package/.claude/skills/loop2-output-processing/SKILL.md +163 -0
- package/.claude/skills/loop2-output-processing/execute-and-extract.sh +77 -0
- package/.claude/skills/loop2-output-processing/execute-and-extract.sh.backup +36 -0
- package/.claude/skills/loop2-output-processing/parse-feedback.sh +147 -0
- package/.claude/skills/loop2-output-processing/process-validator-output.sh +275 -0
- package/.claude/skills/loop2-output-processing/test-bug27-fix.sh +200 -0
- package/.claude/skills/loop2-output-processing/test-loop2-processing.sh +113 -0
- package/.claude/skills/loop3-output-processing/AGENT_COMPLETION_PROTOCOL.md +206 -0
- package/.claude/skills/loop3-output-processing/SKILL.md +421 -0
- package/.claude/skills/loop3-output-processing/calculate-confidence.sh +28 -0
- package/.claude/skills/loop3-output-processing/execute-and-extract.sh +85 -0
- package/.claude/skills/loop3-output-processing/parse-confidence.sh +31 -0
- package/.claude/skills/loop3-output-processing/test-agent-timeout.sh +327 -0
- package/.claude/skills/loop3-output-processing/test-loop3-processing.sh +155 -0
- package/.claude/skills/loop3-output-processing/verify-deliverables.sh +42 -0
- package/.claude/skills/pattern-extraction/SKILL.md +30 -0
- package/.claude/skills/pattern-extraction/extract-patterns.sh +80 -0
- package/.claude/skills/playbook/SKILL.md +113 -0
- package/.claude/skills/playbook/init-playbook.sh +54 -0
- package/.claude/skills/playbook/playbook.db +0 -0
- package/.claude/skills/playbook/query-playbook.sh +79 -0
- package/.claude/skills/playbook/update-playbook.sh +69 -0
- package/.claude/skills/playbook-auto-update/SKILL.md +29 -0
- package/.claude/skills/playbook-auto-update/auto-update-playbook.sh +86 -0
- package/.claude/skills/product-owner-decision/SKILL.md +332 -0
- package/.claude/skills/product-owner-decision/execute-decision.sh +176 -0
- package/.claude/skills/product-owner-decision/parse-decision.sh +66 -0
- package/.claude/skills/product-owner-decision/validate-deliverables.sh +82 -0
- package/.claude/skills/redis-coordination/LOGGING.md +260 -0
- package/.claude/skills/redis-coordination/README.md +30 -29
- package/.claude/skills/redis-coordination/SKILL.md +685 -83
- package/.claude/skills/redis-coordination/analyze-task-complexity.sh +277 -0
- package/.claude/skills/redis-coordination/cfn-loop-exec.sh +468 -0
- package/.claude/skills/redis-coordination/collect-confidence-scores.sh +179 -0
- package/.claude/skills/redis-coordination/collect-results.sh +75 -0
- package/.claude/skills/redis-coordination/data/cfn-loop.db +0 -0
- package/.claude/skills/redis-coordination/{test-orchestrator.sh → demos/test-orchestrator.sh} +25 -0
- package/.claude/skills/redis-coordination/execute-product-owner-decision.sh +258 -0
- package/.claude/skills/redis-coordination/get-agent-timeout.sh +176 -176
- package/.claude/skills/redis-coordination/invoke-waiting-mode.sh +93 -227
- package/.claude/skills/redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
- package/.claude/skills/redis-coordination/log-event.sh +109 -0
- package/.claude/skills/redis-coordination/monitor-cfn-violations.sh +391 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh +31 -993
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
- package/.claude/skills/redis-coordination/query-logs.sh +103 -0
- package/.claude/skills/redis-coordination/retrieve-context.sh +58 -0
- package/.claude/skills/redis-coordination/select-specialist-agent.sh +371 -0
- package/.claude/skills/redis-coordination/semantic-match-tfidf.py +252 -0
- package/.claude/skills/redis-coordination/send-heartbeat.sh +164 -72
- package/.claude/skills/redis-coordination/signal.sh +38 -0
- package/.claude/skills/redis-coordination/store-context.sh +86 -0
- package/.claude/skills/redis-coordination/test-context-injection.sh +354 -0
- package/.claude/skills/redis-coordination/test-timeout-enforcement.sh +513 -0
- package/.claude/skills/redis-coordination/tests/convert-line-endings.sh +15 -0
- package/.claude/skills/redis-coordination/tests/dlq-functionality-test.sh +101 -101
- package/.claude/skills/redis-coordination/tests/edge-cases-test.sh +98 -98
- package/.claude/skills/redis-coordination/tests/integration-test.sh +169 -169
- package/.claude/skills/redis-coordination/tests/retry-mechanism-test.sh +81 -81
- package/.claude/skills/redis-coordination/tests/run-test-suite.sh +91 -91
- package/.claude/skills/redis-coordination/tests/run-tests.sh +4 -0
- package/.claude/skills/redis-coordination/tests/test-primitives.sh +166 -0
- package/.claude/skills/redis-coordination/tests/test-utils.sh +53 -121
- package/.claude/skills/redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
- package/.claude/skills/redis-coordination/tests/test_utils.sh +49 -0
- package/.claude/skills/redis-coordination/v2_modularization/core_orchestration.sh +76 -0
- package/.claude/skills/redis-coordination/validate-parameters.sh +492 -0
- package/.claude/skills/retrospective-report/SKILL.md +31 -0
- package/.claude/skills/retrospective-report/generate-report.sh +101 -0
- package/.claude/skills/run-all-skill-tests.sh +124 -0
- package/.claude/skills/scope-simplifier/SKILL.md +37 -0
- package/.claude/skills/scope-simplifier/simplify-scope.sh +68 -0
- package/.claude/skills/simplified-agent-lifecycle/COST_ANALYSIS.md +49 -0
- package/.claude/skills/simplified-agent-lifecycle/DESIGN.md +98 -0
- package/.claude/skills/simplified-agent-lifecycle/MIGRATION_PLAN.md +74 -0
- package/.claude/skills/specialist-injection/SKILL.md +41 -0
- package/.claude/skills/specialist-injection/recommend-specialist.sh +57 -0
- package/.claude/skills/sprint-execution/SKILL.md +27 -0
- package/.claude/skills/sprint-execution/execute-sprint-task.sh +59 -0
- package/.claude/skills/sprint-execution/execute-sprint.sh +65 -0
- package/.claude/skills/sprint-planner/SKILL.md +37 -0
- package/.claude/skills/sprint-planner/plan-sprint.sh +85 -0
- package/.claude/skills/standardized-error-handling/SKILL.md +56 -0
- package/.claude/skills/standardized-error-handling/capture-agent-error.sh +87 -0
- package/.claude/skills/standardized-error-handling/test-error-handling.sh +166 -0
- package/.claude/skills/task-classifier/SKILL.md +94 -0
- package/.claude/skills/task-classifier/classify-task.sh +115 -0
- package/.claude/skills/validation-templates/SKILL.md +47 -0
- package/.claude/skills/validation-templates/content.json +38 -0
- package/.claude/skills/validation-templates/data.json +38 -0
- package/.claude/skills/validation-templates/design.json +38 -0
- package/.claude/skills/validation-templates/infrastructure.json +38 -0
- package/.claude/skills/validation-templates/research.json +38 -0
- package/.claude/skills/validation-templates/software.json +38 -0
- package/.claude/skills/webapp-testing/README.md +142 -0
- package/.claude/skills/webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
- package/.claude/skills/webapp-testing/SKILL.md +877 -0
- package/.claude/skills/webapp-testing/capture-screenshot.sh +238 -0
- package/.claude/skills/webapp-testing/cfn-loop-integration.sh +265 -0
- package/.claude/skills/webapp-testing/compare-screenshots.sh +199 -0
- package/.claude/skills/webapp-testing/init-storage.sh +150 -0
- package/.claude/skills/webapp-testing/set-baseline.sh +196 -0
- package/.claude/skills/webapp-testing/test-webapp-testing.sh +233 -0
- package/.claude/spawn-pattern-examples.md +3 -3
- package/CLAUDE.md +319 -45
- package/README.md +598 -251
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/agent-command.js +2 -0
- package/dist/cli/agent-command.js.map +1 -1
- package/dist/cli/agent-definition-parser.js +7 -0
- package/dist/cli/agent-definition-parser.js.map +1 -1
- package/dist/cli/agent-executor.js +145 -11
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +81 -1
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +10 -1
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/anthropic-client.js +192 -13
- package/dist/cli/anthropic-client.js.map +1 -1
- package/dist/cli/cfn-context.js +150 -0
- package/dist/cli/cfn-context.js.map +1 -1
- package/dist/cli/cfn-fork.js +159 -0
- package/dist/cli/cfn-fork.js.map +1 -0
- package/dist/cli/cli-agent-context.js +8 -3
- package/dist/cli/cli-agent-context.js.map +1 -1
- package/dist/cli/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/conversation-fork.js +201 -0
- package/dist/cli/conversation-fork.js.map +1 -0
- package/dist/cli/index.js +4 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/tool-definitions.js +263 -0
- package/dist/cli/tool-definitions.js.map +1 -0
- package/dist/cli/tool-executor.js +247 -0
- package/dist/cli/tool-executor.js.map +1 -0
- package/dist/hello.js +8 -0
- package/dist/hello.js.map +1 -0
- package/package.json +14 -6
- package/scripts/README.md +68 -0
- package/scripts/cfn-intervention-example.sh +21 -0
- package/scripts/migrate-test-infrastructure.sh +40 -0
- package/scripts/validate-test-migration.sh +49 -0
- package/scripts/verify-no-secrets.sh +55 -0
- package/.claude/agents/architecture/system-architect.md.backup +0 -603
- package/.claude/agents/code-booster.md +0 -131
- package/.claude/agents/consensus/performance-benchmarker.md +0 -101
- package/.claude/agents/consensus/security-manager.md +0 -107
- package/.claude/agents/context-curator.md +0 -167
- package/.claude/agents/context-reflector.md +0 -65
- package/.claude/agents/core-agents/cfn-loop-coordinator.md +0 -134
- package/.claude/agents/core-agents/code-quality-validator.md +0 -149
- package/.claude/agents/core-agents/context-curator.md +0 -452
- package/.claude/agents/core-agents/context-reflector.md +0 -273
- package/.claude/agents/core-agents/cost-savings-cfn-loop-coordinator.md +0 -235
- package/.claude/agents/core-agents/tester.md +0 -170
- package/.claude/agents/development/backend-dev.md +0 -165
- package/.claude/agents/devops/devops-engineer.md +0 -148
- package/.claude/agents/frontend/interaction-tester.md +0 -139
- package/.claude/agents/frontend/react-frontend-engineer.md +0 -9
- package/.claude/agents/personas/accessibility-advocate-persona.md +0 -107
- package/.claude/agents/testing/production-validator.md +0 -179
- package/.claude/agents/testing/tdd-london-swarm.md +0 -209
- package/.claude/agents/testing/unit/tdd-london-swarm.md +0 -43
- package/.claude/agents/testing/validation/production-validator.md +0 -43
- package/.claude/api-configs/config-current-zai-config.env +0 -62
- package/.claude/api-configs/config-test-zai-config.env +0 -62
- package/.claude/api-configs/env-backups/before-anthropic-20251020-025404.env +0 -62
- package/.claude/api-configs/env-backups/before-restore-20251020-025431.env +0 -62
- package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1760949407 +0 -933
- package/dist/cli/cli-agent-context.test.js +0 -451
- package/dist/cli/cli-agent-context.test.js.map +0 -1
- package/dist/coordination/fleet-manager.test.js +0 -141
- package/dist/coordination/fleet-manager.test.js.map +0 -1
- package/dist/middleware/transparency-middleware.test.js +0 -184
- package/dist/middleware/transparency-middleware.test.js.map +0 -1
- /package/.claude/agents/{core-agents → developers}/researcher.md +0 -0
- /package/.claude/agents/{consensus → specialists}/crdt-synchronizer.md +0 -0
- /package/.claude/agents/{consensus → specialists}/quorum-manager.md +0 -0
- /package/.claude/agents/{consensus → specialists}/raft-manager.md +0 -0
- /package/.claude/{agents/core-agents → agents-ignore}/coordinator.md +0 -0
- /package/.claude/{agents/core-agents/cost-savings-coordinator.md → agents-ignore/cost-savings-coordinator.md.backup} +0 -0
- /package/.claude/skills/redis-coordination/{phase4-wake-queue-test-report.md → demos/phase4-wake-queue-test-report.md} +0 -0
- /package/.claude/skills/redis-coordination/{test-bzpopmin-fix.sh → demos/test-bzpopmin-fix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-cancel-swarm.sh → demos/test-cancel-swarm.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-dlq.sh → demos/test-dlq.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-iteration-feedback.sh → demos/test-iteration-feedback.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-priority-wake-phase4-unix.sh → demos/test-priority-wake-phase4-unix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-priority-wake-phase4.sh → demos/test-priority-wake-phase4.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-priority-wake.sh → demos/test-priority-wake.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quick-fix.sh → demos/test-quick-fix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-absolute.sh → demos/test-quorum-absolute.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-fallback.sh → demos/test-quorum-fallback.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-percentage.sh → demos/test-quorum-percentage.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum-with-retry.sh → demos/test-quorum-with-retry.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-quorum.sh → demos/test-quorum.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-shutdown-handling.sh → demos/test-shutdown-handling.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-shutdown.sh → demos/test-shutdown.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-utils-unix.sh → demos/test-utils-unix.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-utils.sh → demos/test-utils.sh} +0 -0
- /package/.claude/skills/redis-coordination/{test-waiting-mode.sh → demos/test-waiting-mode.sh} +0 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
TF-IDF Semantic Agent Matcher
|
|
4
|
+
|
|
5
|
+
Purpose: Use semantic similarity (TF-IDF + cosine similarity) to match
|
|
6
|
+
task descriptions to optimal agents.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
./semantic-match-tfidf.py "Build user dashboard" 0.5
|
|
10
|
+
./semantic-match-tfidf.py "Create auth system" --threshold 0.6 --json
|
|
11
|
+
|
|
12
|
+
Output:
|
|
13
|
+
agent1,agent2,agent3 (default)
|
|
14
|
+
{"agents": [...]} (--json)
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import sys
|
|
18
|
+
import json
|
|
19
|
+
import argparse
|
|
20
|
+
|
|
21
|
+
try:
|
|
22
|
+
from sklearn.feature_extraction.text import TfidfVectorizer
|
|
23
|
+
from sklearn.metrics.pairwise import cosine_similarity
|
|
24
|
+
except ImportError:
|
|
25
|
+
print("Error: scikit-learn not installed", file=sys.stderr)
|
|
26
|
+
print("Install: pip install scikit-learn", file=sys.stderr)
|
|
27
|
+
sys.exit(1)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Agent Registry with Enhanced Semantic Descriptions
|
|
31
|
+
# Each description includes keywords, domains, and related concepts
|
|
32
|
+
AGENTS = {
|
|
33
|
+
"react-frontend-engineer": (
|
|
34
|
+
"React frontend UI components dashboard interface SPA web application "
|
|
35
|
+
"user interface client-side JavaScript TypeScript hooks state management "
|
|
36
|
+
"responsive design web pages forms interactive"
|
|
37
|
+
),
|
|
38
|
+
"ui-designer": (
|
|
39
|
+
"UI design user experience UX interface design visual design wireframes "
|
|
40
|
+
"mockups prototypes accessibility usability user flows style guide branding"
|
|
41
|
+
),
|
|
42
|
+
"backend-dev": (
|
|
43
|
+
"API server backend endpoint REST GraphQL database business logic "
|
|
44
|
+
"server-side Node.js Python Java authentication authorization data processing "
|
|
45
|
+
"microservices integration middleware"
|
|
46
|
+
),
|
|
47
|
+
"rust-developer": (
|
|
48
|
+
"Rust systems programming memory safety concurrency performance "
|
|
49
|
+
"low-level programming async tokio cargo ownership borrowing compiler "
|
|
50
|
+
"systems language native speed"
|
|
51
|
+
),
|
|
52
|
+
"rust-mvp-developer": (
|
|
53
|
+
"Rust MVP prototype proof-of-concept quick implementation basic features "
|
|
54
|
+
"simple rapid development starter code minimal viable product"
|
|
55
|
+
),
|
|
56
|
+
"rust-enterprise-developer": (
|
|
57
|
+
"Rust production enterprise advanced optimization performance critical "
|
|
58
|
+
"production-grade scalable robust high-performance mission-critical"
|
|
59
|
+
),
|
|
60
|
+
"mobile-dev": (
|
|
61
|
+
"React Native mobile iOS Android app development cross-platform "
|
|
62
|
+
"smartphone tablet native modules mobile UI touch gestures mobile UX "
|
|
63
|
+
"app store deployment mobile navigation"
|
|
64
|
+
),
|
|
65
|
+
"devops-engineer": (
|
|
66
|
+
"infrastructure deployment Docker Kubernetes AWS cloud CI/CD pipeline "
|
|
67
|
+
"automation orchestration containerization cloud infrastructure Terraform "
|
|
68
|
+
"monitoring logging provisioning infrastructure-as-code"
|
|
69
|
+
),
|
|
70
|
+
"security-specialist": (
|
|
71
|
+
"security authentication encryption RBAC vulnerabilities penetration testing "
|
|
72
|
+
"threat analysis security audit compliance access control authorization "
|
|
73
|
+
"cybersecurity secure coding SSL/TLS security review"
|
|
74
|
+
),
|
|
75
|
+
"system-architect": (
|
|
76
|
+
"architecture system design component design API design database schema "
|
|
77
|
+
"high-level design scalability patterns microservices architecture decisions "
|
|
78
|
+
"technical leadership design patterns distributed systems"
|
|
79
|
+
),
|
|
80
|
+
"tester": (
|
|
81
|
+
"testing test unit-test integration-test TDD quality-assurance QA "
|
|
82
|
+
"test-coverage Jest Mocha pytest test-strategy validation verification "
|
|
83
|
+
"automated testing regression testing"
|
|
84
|
+
),
|
|
85
|
+
"reviewer": (
|
|
86
|
+
"code-review quality-assessment technical-debt code-analysis quality-metrics "
|
|
87
|
+
"code-standards linting static-analysis best-practices code-quality "
|
|
88
|
+
"peer-review refactoring suggestions"
|
|
89
|
+
),
|
|
90
|
+
"researcher": (
|
|
91
|
+
"research explore investigate analyze study evaluation comparison "
|
|
92
|
+
"proof-of-concept feasibility analysis technical-research documentation "
|
|
93
|
+
"exploration discovery learning experimentation"
|
|
94
|
+
),
|
|
95
|
+
"coder": (
|
|
96
|
+
"implementation feature-development bug-fix coding general-development "
|
|
97
|
+
"problem-solving code-implementation feature-completion programming "
|
|
98
|
+
"general-purpose development writing code"
|
|
99
|
+
),
|
|
100
|
+
"perf-analyzer": (
|
|
101
|
+
"performance optimization profiling benchmarking speed efficiency "
|
|
102
|
+
"performance-tuning latency throughput resource-optimization "
|
|
103
|
+
"scalability load-testing stress-testing performance-metrics"
|
|
104
|
+
),
|
|
105
|
+
"accessibility-advocate": (
|
|
106
|
+
"accessibility WCAG screen-readers keyboard-navigation ARIA semantic-HTML "
|
|
107
|
+
"inclusive-design disability-access a11y accessibility-testing "
|
|
108
|
+
"accessibility-compliance universal-design"
|
|
109
|
+
),
|
|
110
|
+
"code-quality-validator": (
|
|
111
|
+
"quality-validation architecture-compliance code-standards advanced-quality "
|
|
112
|
+
"deep-analysis compliance-checking quality-gates code-metrics "
|
|
113
|
+
"technical-excellence validation comprehensive-review"
|
|
114
|
+
),
|
|
115
|
+
"performance-benchmarker": (
|
|
116
|
+
"performance-benchmarking metrics analysis load-testing stress-testing "
|
|
117
|
+
"profiling performance-monitoring benchmark-suite performance-validation "
|
|
118
|
+
"throughput-testing latency-analysis"
|
|
119
|
+
),
|
|
120
|
+
"product-owner": (
|
|
121
|
+
"product strategy business decisions scope management priorities "
|
|
122
|
+
"stakeholder requirements roadmap planning strategic-decisions "
|
|
123
|
+
"product-vision business-value feature-prioritization"
|
|
124
|
+
),
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def semantic_match(task: str, threshold: float = 0.5, top_n: int = None):
|
|
129
|
+
"""
|
|
130
|
+
Match task description to agents using TF-IDF semantic similarity.
|
|
131
|
+
|
|
132
|
+
Args:
|
|
133
|
+
task: Task description string
|
|
134
|
+
threshold: Minimum similarity score (0.0-1.0)
|
|
135
|
+
top_n: Return top N matches (None = all above threshold)
|
|
136
|
+
|
|
137
|
+
Returns:
|
|
138
|
+
List of dicts: [{"agent": "name", "score": 0.85}, ...]
|
|
139
|
+
"""
|
|
140
|
+
if not task or not task.strip():
|
|
141
|
+
return []
|
|
142
|
+
|
|
143
|
+
# Build corpus: agent descriptions + task
|
|
144
|
+
corpus = list(AGENTS.values()) + [task]
|
|
145
|
+
|
|
146
|
+
# Vectorize using TF-IDF
|
|
147
|
+
vectorizer = TfidfVectorizer(
|
|
148
|
+
lowercase=True,
|
|
149
|
+
stop_words='english',
|
|
150
|
+
ngram_range=(1, 2), # Unigrams + bigrams
|
|
151
|
+
max_df=0.85, # Ignore very common terms
|
|
152
|
+
min_df=1
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
try:
|
|
156
|
+
tfidf = vectorizer.fit_transform(corpus)
|
|
157
|
+
except ValueError as e:
|
|
158
|
+
# Handle edge case: empty vocabulary
|
|
159
|
+
print(f"Warning: {e}", file=sys.stderr)
|
|
160
|
+
return []
|
|
161
|
+
|
|
162
|
+
# Compute cosine similarity
|
|
163
|
+
task_vector = tfidf[-1] # Last item is the task
|
|
164
|
+
agent_vectors = tfidf[:-1] # All others are agents
|
|
165
|
+
similarities = cosine_similarity(task_vector, agent_vectors)[0]
|
|
166
|
+
|
|
167
|
+
# Build results
|
|
168
|
+
results = []
|
|
169
|
+
for agent_name, score in zip(AGENTS.keys(), similarities):
|
|
170
|
+
if score >= threshold:
|
|
171
|
+
results.append({
|
|
172
|
+
"agent": agent_name,
|
|
173
|
+
"score": float(score)
|
|
174
|
+
})
|
|
175
|
+
|
|
176
|
+
# Sort by score (descending)
|
|
177
|
+
results.sort(key=lambda x: x["score"], reverse=True)
|
|
178
|
+
|
|
179
|
+
# Limit to top N if specified
|
|
180
|
+
if top_n is not None:
|
|
181
|
+
results = results[:top_n]
|
|
182
|
+
|
|
183
|
+
return results
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def main():
|
|
187
|
+
parser = argparse.ArgumentParser(
|
|
188
|
+
description="Semantic agent matching using TF-IDF"
|
|
189
|
+
)
|
|
190
|
+
parser.add_argument(
|
|
191
|
+
"task",
|
|
192
|
+
nargs="?",
|
|
193
|
+
default="",
|
|
194
|
+
help="Task description to match against agents"
|
|
195
|
+
)
|
|
196
|
+
parser.add_argument(
|
|
197
|
+
"-t", "--threshold",
|
|
198
|
+
type=float,
|
|
199
|
+
default=0.5,
|
|
200
|
+
help="Minimum similarity threshold (0.0-1.0, default: 0.5)"
|
|
201
|
+
)
|
|
202
|
+
parser.add_argument(
|
|
203
|
+
"-n", "--top-n",
|
|
204
|
+
type=int,
|
|
205
|
+
default=None,
|
|
206
|
+
help="Return top N matches (default: all above threshold)"
|
|
207
|
+
)
|
|
208
|
+
parser.add_argument(
|
|
209
|
+
"-j", "--json",
|
|
210
|
+
action="store_true",
|
|
211
|
+
help="Output as JSON instead of CSV"
|
|
212
|
+
)
|
|
213
|
+
parser.add_argument(
|
|
214
|
+
"-v", "--verbose",
|
|
215
|
+
action="store_true",
|
|
216
|
+
help="Show scores for all matches"
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
args = parser.parse_args()
|
|
220
|
+
|
|
221
|
+
# Get task from args or stdin
|
|
222
|
+
task = args.task
|
|
223
|
+
if not task and not sys.stdin.isatty():
|
|
224
|
+
task = sys.stdin.read().strip()
|
|
225
|
+
|
|
226
|
+
if not task:
|
|
227
|
+
parser.print_help()
|
|
228
|
+
sys.exit(1)
|
|
229
|
+
|
|
230
|
+
# Perform matching
|
|
231
|
+
matches = semantic_match(task, args.threshold, args.top_n)
|
|
232
|
+
|
|
233
|
+
# Output results
|
|
234
|
+
if args.json:
|
|
235
|
+
# JSON output
|
|
236
|
+
print(json.dumps({
|
|
237
|
+
"task": task,
|
|
238
|
+
"threshold": args.threshold,
|
|
239
|
+
"matches": matches
|
|
240
|
+
}, indent=2))
|
|
241
|
+
elif args.verbose:
|
|
242
|
+
# Verbose output with scores
|
|
243
|
+
for match in matches:
|
|
244
|
+
print(f"{match['agent']}: {match['score']:.3f}")
|
|
245
|
+
else:
|
|
246
|
+
# CSV output (agent names only)
|
|
247
|
+
agent_names = [m["agent"] for m in matches]
|
|
248
|
+
print(",".join(agent_names))
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
if __name__ == "__main__":
|
|
252
|
+
main()
|
|
@@ -1,73 +1,165 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Redis Coordination Skill - Agent Heartbeat Sender
|
|
3
|
-
# Version:
|
|
4
|
-
# Last Updated: 2025-10-
|
|
5
|
-
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Redis Coordination Skill - Agent Heartbeat Sender
|
|
3
|
+
# Version: 2.0.0
|
|
4
|
+
# Last Updated: 2025-10-20
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# # One-shot heartbeat (original behavior)
|
|
8
|
+
# ./send-heartbeat.sh --task-id <id> --agent-id <id>
|
|
9
|
+
#
|
|
10
|
+
# # Start continuous heartbeat loop
|
|
11
|
+
# ./send-heartbeat.sh start --task-id <id> --agent-id <id> --interval 30 &
|
|
12
|
+
# HEARTBEAT_PID=$!
|
|
13
|
+
#
|
|
14
|
+
# # Stop heartbeat loop
|
|
15
|
+
# ./send-heartbeat.sh stop --task-id <id> --agent-id <id> --pid $HEARTBEAT_PID
|
|
16
|
+
|
|
17
|
+
# Strict error handling
|
|
18
|
+
set -euo pipefail
|
|
19
|
+
|
|
20
|
+
# Default values
|
|
21
|
+
ACTION=""
|
|
22
|
+
TASK_ID=""
|
|
23
|
+
AGENT_ID=""
|
|
24
|
+
STATUS="active"
|
|
25
|
+
TTL=60
|
|
26
|
+
INTERVAL=30 # For continuous mode
|
|
27
|
+
HEARTBEAT_PID=""
|
|
28
|
+
DETAILS='{}'
|
|
29
|
+
|
|
30
|
+
# Parse command-line arguments
|
|
31
|
+
while [[ $# -gt 0 ]]; do
|
|
32
|
+
case "$1" in
|
|
33
|
+
start|stop|once)
|
|
34
|
+
ACTION="$1"
|
|
35
|
+
shift
|
|
36
|
+
;;
|
|
37
|
+
--task-id)
|
|
38
|
+
TASK_ID="$2"
|
|
39
|
+
shift 2
|
|
40
|
+
;;
|
|
41
|
+
--agent-id)
|
|
42
|
+
AGENT_ID="$2"
|
|
43
|
+
shift 2
|
|
44
|
+
;;
|
|
45
|
+
--status)
|
|
46
|
+
STATUS="$2"
|
|
47
|
+
shift 2
|
|
48
|
+
;;
|
|
49
|
+
--ttl)
|
|
50
|
+
TTL="$2"
|
|
51
|
+
shift 2
|
|
52
|
+
;;
|
|
53
|
+
--interval)
|
|
54
|
+
INTERVAL="$2"
|
|
55
|
+
shift 2
|
|
56
|
+
;;
|
|
57
|
+
--pid)
|
|
58
|
+
HEARTBEAT_PID="$2"
|
|
59
|
+
shift 2
|
|
60
|
+
;;
|
|
61
|
+
--details)
|
|
62
|
+
DETAILS="$2"
|
|
63
|
+
shift 2
|
|
64
|
+
;;
|
|
65
|
+
*)
|
|
66
|
+
echo "Unknown parameter: $1"
|
|
67
|
+
exit 1
|
|
68
|
+
;;
|
|
69
|
+
esac
|
|
70
|
+
done
|
|
71
|
+
|
|
72
|
+
# Validate required parameters
|
|
73
|
+
if [[ -z "$TASK_ID" || -z "$AGENT_ID" ]]; then
|
|
74
|
+
echo "Error: task-id and agent-id are required"
|
|
75
|
+
exit 1
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
# If no action specified, default to one-shot (backward compatibility)
|
|
79
|
+
if [ -z "$ACTION" ]; then
|
|
80
|
+
ACTION="once"
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
HEARTBEAT_KEY="swarm:${TASK_ID}:${AGENT_ID}:heartbeat"
|
|
84
|
+
MARKER_FILE="/tmp/heartbeat-${TASK_ID}-${AGENT_ID}.active"
|
|
85
|
+
|
|
86
|
+
##############################################################################
|
|
87
|
+
# Send single heartbeat
|
|
88
|
+
##############################################################################
|
|
89
|
+
function send_heartbeat() {
|
|
90
|
+
# Generate heartbeat payload
|
|
91
|
+
HEARTBEAT_PAYLOAD=$(jq -n \
|
|
92
|
+
--arg timestamp "$(date +%s)" \
|
|
93
|
+
--arg status "$STATUS" \
|
|
94
|
+
--arg task_id "$TASK_ID" \
|
|
95
|
+
--arg agent_id "$AGENT_ID" \
|
|
96
|
+
--argjson details "$DETAILS" \
|
|
97
|
+
'{
|
|
98
|
+
"timestamp": $timestamp,
|
|
99
|
+
"status": $status,
|
|
100
|
+
"task_id": $task_id,
|
|
101
|
+
"agent_id": $agent_id,
|
|
102
|
+
"details": $details
|
|
103
|
+
}')
|
|
104
|
+
|
|
105
|
+
# Send heartbeat via Redis with auto-expiration
|
|
106
|
+
redis-cli setex "$HEARTBEAT_KEY" "$TTL" "$HEARTBEAT_PAYLOAD" >/dev/null
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
##############################################################################
|
|
110
|
+
# Start continuous heartbeat loop
|
|
111
|
+
##############################################################################
|
|
112
|
+
function start_heartbeat() {
|
|
113
|
+
# Create marker file
|
|
114
|
+
touch "$MARKER_FILE"
|
|
115
|
+
|
|
116
|
+
# Background heartbeat loop
|
|
117
|
+
(
|
|
118
|
+
while [ -f "$MARKER_FILE" ]; do
|
|
119
|
+
send_heartbeat
|
|
120
|
+
sleep "$INTERVAL"
|
|
121
|
+
done
|
|
122
|
+
) &
|
|
123
|
+
|
|
124
|
+
echo "✓ Heartbeat started for $AGENT_ID (PID: $!, interval: ${INTERVAL}s)" >&2
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
##############################################################################
|
|
128
|
+
# Stop heartbeat loop
|
|
129
|
+
##############################################################################
|
|
130
|
+
function stop_heartbeat() {
|
|
131
|
+
# Remove marker file to stop loop
|
|
132
|
+
rm -f "$MARKER_FILE"
|
|
133
|
+
|
|
134
|
+
# Kill heartbeat process if PID provided
|
|
135
|
+
if [ -n "$HEARTBEAT_PID" ] && kill -0 "$HEARTBEAT_PID" 2>/dev/null; then
|
|
136
|
+
kill "$HEARTBEAT_PID" 2>/dev/null || true
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
# Clean up heartbeat key
|
|
140
|
+
redis-cli DEL "$HEARTBEAT_KEY" >/dev/null
|
|
141
|
+
|
|
142
|
+
echo "✓ Heartbeat stopped for $AGENT_ID" >&2
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
##############################################################################
|
|
146
|
+
# Main
|
|
147
|
+
##############################################################################
|
|
148
|
+
case "$ACTION" in
|
|
149
|
+
start)
|
|
150
|
+
start_heartbeat
|
|
151
|
+
;;
|
|
152
|
+
stop)
|
|
153
|
+
stop_heartbeat
|
|
154
|
+
;;
|
|
155
|
+
once)
|
|
156
|
+
send_heartbeat
|
|
157
|
+
echo "✓ Heartbeat sent for $AGENT_ID" >&2
|
|
158
|
+
;;
|
|
159
|
+
*)
|
|
160
|
+
echo "Error: Invalid action: $ACTION"
|
|
161
|
+
exit 1
|
|
162
|
+
;;
|
|
163
|
+
esac
|
|
164
|
+
|
|
73
165
|
exit 0
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Parse arguments
|
|
4
|
+
while [[ $# -gt 0 ]]; do
|
|
5
|
+
case "$1" in
|
|
6
|
+
--key)
|
|
7
|
+
key="$2"
|
|
8
|
+
shift 2
|
|
9
|
+
;;
|
|
10
|
+
--value)
|
|
11
|
+
value="$2"
|
|
12
|
+
shift 2
|
|
13
|
+
;;
|
|
14
|
+
--ttl)
|
|
15
|
+
ttl="$2"
|
|
16
|
+
shift 2
|
|
17
|
+
;;
|
|
18
|
+
*)
|
|
19
|
+
echo "Unknown argument: $1"
|
|
20
|
+
exit 1
|
|
21
|
+
;;
|
|
22
|
+
esac
|
|
23
|
+
done
|
|
24
|
+
|
|
25
|
+
# Validate required arguments
|
|
26
|
+
if [[ -z "$key" || -z "$value" ]]; then
|
|
27
|
+
echo "Error: Both key and value are required"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Default TTL to 3600 if not provided
|
|
32
|
+
ttl=${ttl:-3600}
|
|
33
|
+
|
|
34
|
+
# Store signal in Redis with specified TTL
|
|
35
|
+
redis-cli setex "$key" "$ttl" "$value"
|
|
36
|
+
|
|
37
|
+
# Exit successfully
|
|
38
|
+
exit 0
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Redis Context Storage Primitive
|
|
4
|
+
# Updated interface to match orchestrator expectations
|
|
5
|
+
# Supports both legacy (--key --context) and new (--task-id --key --value --namespace) interfaces
|
|
6
|
+
|
|
7
|
+
# Initialize variables
|
|
8
|
+
task_id=""
|
|
9
|
+
key=""
|
|
10
|
+
value=""
|
|
11
|
+
namespace="swarm"
|
|
12
|
+
ttl=3600
|
|
13
|
+
append_mode=false
|
|
14
|
+
|
|
15
|
+
# Parse arguments
|
|
16
|
+
while [[ $# -gt 0 ]]; do
|
|
17
|
+
case "$1" in
|
|
18
|
+
--task-id)
|
|
19
|
+
task_id="$2"
|
|
20
|
+
shift 2
|
|
21
|
+
;;
|
|
22
|
+
--key)
|
|
23
|
+
key="$2"
|
|
24
|
+
shift 2
|
|
25
|
+
;;
|
|
26
|
+
--value)
|
|
27
|
+
value="$2"
|
|
28
|
+
shift 2
|
|
29
|
+
;;
|
|
30
|
+
--context)
|
|
31
|
+
# Legacy support: --context is alias for --value
|
|
32
|
+
value="$2"
|
|
33
|
+
shift 2
|
|
34
|
+
;;
|
|
35
|
+
--namespace)
|
|
36
|
+
namespace="$2"
|
|
37
|
+
shift 2
|
|
38
|
+
;;
|
|
39
|
+
--ttl)
|
|
40
|
+
ttl="$2"
|
|
41
|
+
shift 2
|
|
42
|
+
;;
|
|
43
|
+
--append)
|
|
44
|
+
append_mode=true
|
|
45
|
+
shift
|
|
46
|
+
;;
|
|
47
|
+
*)
|
|
48
|
+
echo "Unknown argument: $1" >&2
|
|
49
|
+
exit 1
|
|
50
|
+
;;
|
|
51
|
+
esac
|
|
52
|
+
done
|
|
53
|
+
|
|
54
|
+
# Construct Redis key based on interface mode
|
|
55
|
+
if [[ -n "$task_id" ]]; then
|
|
56
|
+
# New interface: {namespace}:{task_id}:{key}
|
|
57
|
+
redis_key="${namespace}:${task_id}:${key}"
|
|
58
|
+
else
|
|
59
|
+
# Legacy interface: key is used directly
|
|
60
|
+
redis_key="$key"
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
# Validate required arguments
|
|
64
|
+
if [[ -z "$redis_key" || -z "$value" ]]; then
|
|
65
|
+
echo "Error: Both key and value are required" >&2
|
|
66
|
+
echo "Usage: $0 --task-id <id> --key <key> --value <data> [--namespace <ns>] [--ttl <seconds>] [--append]" >&2
|
|
67
|
+
echo " or: $0 --key <full-key> --context <data> [--ttl <seconds>]" >&2
|
|
68
|
+
exit 1
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
# Handle append mode
|
|
72
|
+
if [ "$append_mode" = true ]; then
|
|
73
|
+
# Get existing value
|
|
74
|
+
existing=$(redis-cli get "$redis_key" 2>/dev/null)
|
|
75
|
+
|
|
76
|
+
# Append new value (comma-separated)
|
|
77
|
+
if [[ -n "$existing" && "$existing" != "(nil)" ]]; then
|
|
78
|
+
value="${existing},${value}"
|
|
79
|
+
fi
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# Store in Redis with specified TTL
|
|
83
|
+
redis-cli setex "$redis_key" "$ttl" "$value" >/dev/null
|
|
84
|
+
|
|
85
|
+
# Exit successfully
|
|
86
|
+
exit 0
|