claude-flow-novice 2.9.1 → 2.10.0
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 +39 -2
- 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,145 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Add new bullet to adaptive_context table
|
|
3
|
+
# Usage: ./add-bullet.sh --bullet-id STRAT-007 --category strategy --content "..." --confidence 0.85
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
# Default values
|
|
8
|
+
DB_PATH="${ACE_DB_PATH:-./.artifacts/database/swarm-memory.db}"
|
|
9
|
+
BULLET_ID=""
|
|
10
|
+
CATEGORY=""
|
|
11
|
+
CONTENT=""
|
|
12
|
+
CONFIDENCE=0.5
|
|
13
|
+
PRIORITY=5
|
|
14
|
+
TAGS="[]"
|
|
15
|
+
SOURCE_CONTEXT=""
|
|
16
|
+
SOURCE_TASK_ID=""
|
|
17
|
+
ACL_LEVEL=4
|
|
18
|
+
|
|
19
|
+
# Parse arguments
|
|
20
|
+
while [[ $# -gt 0 ]]; do
|
|
21
|
+
case $1 in
|
|
22
|
+
--bullet-id)
|
|
23
|
+
BULLET_ID="$2"
|
|
24
|
+
shift 2
|
|
25
|
+
;;
|
|
26
|
+
--category)
|
|
27
|
+
CATEGORY="$2"
|
|
28
|
+
shift 2
|
|
29
|
+
;;
|
|
30
|
+
--content)
|
|
31
|
+
CONTENT="$2"
|
|
32
|
+
shift 2
|
|
33
|
+
;;
|
|
34
|
+
--confidence)
|
|
35
|
+
CONFIDENCE="$2"
|
|
36
|
+
shift 2
|
|
37
|
+
;;
|
|
38
|
+
--priority)
|
|
39
|
+
PRIORITY="$2"
|
|
40
|
+
shift 2
|
|
41
|
+
;;
|
|
42
|
+
--tags)
|
|
43
|
+
TAGS="$2"
|
|
44
|
+
shift 2
|
|
45
|
+
;;
|
|
46
|
+
--source-context)
|
|
47
|
+
SOURCE_CONTEXT="$2"
|
|
48
|
+
shift 2
|
|
49
|
+
;;
|
|
50
|
+
--source-task-id)
|
|
51
|
+
SOURCE_TASK_ID="$2"
|
|
52
|
+
shift 2
|
|
53
|
+
;;
|
|
54
|
+
--acl-level)
|
|
55
|
+
ACL_LEVEL="$2"
|
|
56
|
+
shift 2
|
|
57
|
+
;;
|
|
58
|
+
*)
|
|
59
|
+
echo "Unknown option: $1"
|
|
60
|
+
exit 1
|
|
61
|
+
;;
|
|
62
|
+
esac
|
|
63
|
+
done
|
|
64
|
+
|
|
65
|
+
# Validate required parameters
|
|
66
|
+
if [ -z "$BULLET_ID" ] || [ -z "$CATEGORY" ] || [ -z "$CONTENT" ]; then
|
|
67
|
+
echo "Error: Missing required parameters"
|
|
68
|
+
echo "Usage: $0 --bullet-id <id> --category <cat> --content <text>"
|
|
69
|
+
exit 1
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# Validate category
|
|
73
|
+
case $CATEGORY in
|
|
74
|
+
strategy|pattern|edge_case|domain_insight|anti_pattern|optimization)
|
|
75
|
+
;;
|
|
76
|
+
*)
|
|
77
|
+
echo "Error: Invalid category. Must be: strategy, pattern, edge_case, domain_insight, anti_pattern, or optimization"
|
|
78
|
+
exit 1
|
|
79
|
+
;;
|
|
80
|
+
esac
|
|
81
|
+
|
|
82
|
+
# Generate unique ID
|
|
83
|
+
UNIQUE_ID="$(echo -n "$BULLET_ID" | md5sum | cut -d' ' -f1)"
|
|
84
|
+
|
|
85
|
+
# Insert bullet into database
|
|
86
|
+
sqlite3 "$DB_PATH" <<EOF
|
|
87
|
+
-- Ensure table exists
|
|
88
|
+
CREATE TABLE IF NOT EXISTS adaptive_context (
|
|
89
|
+
id TEXT PRIMARY KEY,
|
|
90
|
+
bullet_id TEXT NOT NULL UNIQUE,
|
|
91
|
+
category TEXT NOT NULL CHECK (category IN ('strategy', 'pattern', 'edge_case', 'domain_insight', 'anti_pattern', 'optimization')),
|
|
92
|
+
content TEXT NOT NULL,
|
|
93
|
+
helpful_count INTEGER DEFAULT 0,
|
|
94
|
+
harmful_count INTEGER DEFAULT 0,
|
|
95
|
+
confidence_score REAL DEFAULT 0.5 CHECK (confidence_score BETWEEN 0.0 AND 1.0),
|
|
96
|
+
source_context TEXT NOT NULL,
|
|
97
|
+
source_task_id TEXT,
|
|
98
|
+
source_agent_id TEXT,
|
|
99
|
+
tags TEXT,
|
|
100
|
+
embedding_vector TEXT,
|
|
101
|
+
parent_bullet_id TEXT,
|
|
102
|
+
version INTEGER DEFAULT 1,
|
|
103
|
+
acl_level INTEGER NOT NULL DEFAULT 4 CHECK (acl_level BETWEEN 1 AND 6),
|
|
104
|
+
swarm_id TEXT,
|
|
105
|
+
project_id TEXT,
|
|
106
|
+
is_active BOOLEAN DEFAULT 1,
|
|
107
|
+
is_validated BOOLEAN DEFAULT 0,
|
|
108
|
+
validation_metadata TEXT,
|
|
109
|
+
priority INTEGER DEFAULT 5 CHECK (priority BETWEEN 1 AND 10),
|
|
110
|
+
last_used_at DATETIME,
|
|
111
|
+
usage_count INTEGER DEFAULT 0,
|
|
112
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
113
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
114
|
+
archived_at DATETIME
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
-- Insert bullet
|
|
118
|
+
INSERT INTO adaptive_context (
|
|
119
|
+
id, bullet_id, category, content, confidence_score, priority, tags,
|
|
120
|
+
source_context, source_task_id, acl_level, is_active
|
|
121
|
+
) VALUES (
|
|
122
|
+
'${UNIQUE_ID}',
|
|
123
|
+
'${BULLET_ID}',
|
|
124
|
+
'${CATEGORY}',
|
|
125
|
+
'${CONTENT}',
|
|
126
|
+
${CONFIDENCE},
|
|
127
|
+
${PRIORITY},
|
|
128
|
+
'${TAGS}',
|
|
129
|
+
'${SOURCE_CONTEXT:-Unknown source}',
|
|
130
|
+
$([ -n "$SOURCE_TASK_ID" ] && echo "'$SOURCE_TASK_ID'" || echo "NULL"),
|
|
131
|
+
${ACL_LEVEL},
|
|
132
|
+
1
|
|
133
|
+
);
|
|
134
|
+
EOF
|
|
135
|
+
|
|
136
|
+
# Verify insertion
|
|
137
|
+
COUNT=$(sqlite3 "$DB_PATH" "SELECT COUNT(*) FROM adaptive_context WHERE bullet_id = '${BULLET_ID}';")
|
|
138
|
+
|
|
139
|
+
if [ "$COUNT" -eq 1 ]; then
|
|
140
|
+
echo "{\"status\":\"success\",\"bullet_id\":\"${BULLET_ID}\",\"category\":\"${CATEGORY}\",\"confidence\":${CONFIDENCE}}"
|
|
141
|
+
exit 0
|
|
142
|
+
else
|
|
143
|
+
echo "{\"status\":\"error\",\"message\":\"Bullet insertion failed\"}"
|
|
144
|
+
exit 1
|
|
145
|
+
fi
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Extended ACE System Anti-Pattern Effectiveness Analysis
|
|
3
|
+
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
analyze_ab_test_results() {
|
|
7
|
+
local task_id="${1:?Task ID required}"
|
|
8
|
+
|
|
9
|
+
# Retrieve A/B test results from Redis
|
|
10
|
+
local ab_results=$(redis-cli KEYS "ace:ab_test:${task_id}:*")
|
|
11
|
+
|
|
12
|
+
# SQLite query to calculate metrics
|
|
13
|
+
sqlite3 ace_system.db <<EOF
|
|
14
|
+
WITH ab_test_data AS (
|
|
15
|
+
SELECT
|
|
16
|
+
json_extract(data, '$.agent_id') as agent_id,
|
|
17
|
+
json_extract(data, '$.ace_enabled') as ace_enabled,
|
|
18
|
+
json_extract(data, '$.first_confidence') as first_confidence,
|
|
19
|
+
json_extract(data, '$.final_confidence') as final_confidence,
|
|
20
|
+
json_extract(data, '$.iterations') as iterations
|
|
21
|
+
FROM ace_effectiveness
|
|
22
|
+
WHERE task_id = '$task_id'
|
|
23
|
+
)
|
|
24
|
+
SELECT
|
|
25
|
+
CASE WHEN ace_enabled THEN 'ACE' ELSE 'Control' END AS group_name,
|
|
26
|
+
AVG(first_confidence) AS avg_first_confidence,
|
|
27
|
+
AVG(final_confidence) AS avg_final_confidence,
|
|
28
|
+
AVG(iterations) AS avg_iterations,
|
|
29
|
+
COUNT(*) AS sample_size
|
|
30
|
+
FROM ab_test_data
|
|
31
|
+
GROUP BY group_name;
|
|
32
|
+
EOF
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
calculate_roi() {
|
|
36
|
+
local task_id="${1:?Task ID required}"
|
|
37
|
+
|
|
38
|
+
sqlite3 ace_system.db <<EOF
|
|
39
|
+
WITH timing_data AS (
|
|
40
|
+
SELECT
|
|
41
|
+
json_extract(data, '$.context_injection_time') as injection_time,
|
|
42
|
+
json_extract(data, '$.iteration_time') as iteration_time
|
|
43
|
+
FROM ace_performance
|
|
44
|
+
WHERE task_id = '$task_id'
|
|
45
|
+
)
|
|
46
|
+
SELECT
|
|
47
|
+
AVG(injection_time) as avg_injection_time,
|
|
48
|
+
AVG(iteration_time) as avg_iteration_time,
|
|
49
|
+
AVG(iteration_time - injection_time) as time_saved
|
|
50
|
+
FROM timing_data;
|
|
51
|
+
EOF
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
# Main execution
|
|
55
|
+
analyze_ab_test_results "$@"
|
|
56
|
+
calculate_roi "$@"
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# ACE System - Task Classifier Wrapper
|
|
4
|
+
# Delegates to cfn-task-classifier skill for domain classification
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
CLASSIFIER_PATH="${SCRIPT_DIR}/../cfn-task-classifier/classify-task.sh"
|
|
10
|
+
|
|
11
|
+
# Validate classifier exists
|
|
12
|
+
if [[ ! -f "$CLASSIFIER_PATH" ]]; then
|
|
13
|
+
echo "ERROR: Task classifier not found at: $CLASSIFIER_PATH" >&2
|
|
14
|
+
exit 1
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Delegate to task classifier with all arguments
|
|
18
|
+
exec "$CLASSIFIER_PATH" "$@"
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# ACE System Metrics Dashboard Export
|
|
3
|
+
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
EXPORT_DIR="${1:?Export directory required}"
|
|
7
|
+
TIMEFRAME="${2:-7d}"
|
|
8
|
+
|
|
9
|
+
# Function to generate JSON metrics
|
|
10
|
+
generate_metrics_json() {
|
|
11
|
+
local task_id="$1"
|
|
12
|
+
|
|
13
|
+
# A/B Test Results
|
|
14
|
+
local ab_results=$(sqlite3 ace_system.db \
|
|
15
|
+
"SELECT json_group_array(
|
|
16
|
+
json_object(
|
|
17
|
+
'group', CASE WHEN ace_enabled THEN 'ACE' ELSE 'Control' END,
|
|
18
|
+
'avg_first_confidence', AVG(first_confidence),
|
|
19
|
+
'avg_final_confidence', AVG(final_confidence),
|
|
20
|
+
'avg_iterations', AVG(iterations)
|
|
21
|
+
)
|
|
22
|
+
) FROM ace_effectiveness WHERE timestamp >= datetime('now', '-$TIMEFRAME')")
|
|
23
|
+
|
|
24
|
+
# Performance Metrics
|
|
25
|
+
local perf_metrics=$(sqlite3 ace_system.db \
|
|
26
|
+
"SELECT json_group_array(
|
|
27
|
+
json_object(
|
|
28
|
+
'injection_time', AVG(context_injection_time),
|
|
29
|
+
'iteration_time', AVG(iteration_time),
|
|
30
|
+
'time_saved', AVG(iteration_time - context_injection_time)
|
|
31
|
+
)
|
|
32
|
+
) FROM ace_performance WHERE timestamp >= datetime('now', '-$TIMEFRAME')")
|
|
33
|
+
|
|
34
|
+
# Combine metrics
|
|
35
|
+
jq -n \
|
|
36
|
+
--argjson ab_results "$ab_results" \
|
|
37
|
+
--argjson perf_metrics "$perf_metrics" \
|
|
38
|
+
'{
|
|
39
|
+
"ab_test_results": $ab_results,
|
|
40
|
+
"performance_metrics": $perf_metrics,
|
|
41
|
+
"timestamp": now
|
|
42
|
+
}' > "${EXPORT_DIR}/ace_metrics_$(date +%Y%m%d_%H%M%S).json"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# Export metrics for each tracked task
|
|
46
|
+
for task_id in $(sqlite3 ace_system.db "SELECT DISTINCT task_id FROM ace_effectiveness"); do
|
|
47
|
+
generate_metrics_json "$task_id"
|
|
48
|
+
done
|
|
@@ -0,0 +1,385 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# extract-tags.sh - Automatic tag extraction from sprint execution data
|
|
3
|
+
# Part of ACE System Phase 2.1
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Default values
|
|
8
|
+
TASK_DESCRIPTION=""
|
|
9
|
+
FILES=""
|
|
10
|
+
AGENTS=""
|
|
11
|
+
OUTPUT_FORMAT="json"
|
|
12
|
+
MIN_TAGS=5
|
|
13
|
+
MAX_TAGS=15
|
|
14
|
+
|
|
15
|
+
# Stopwords for keyword filtering
|
|
16
|
+
STOPWORDS="the and or but for with from this that these those then than will can could should would"
|
|
17
|
+
|
|
18
|
+
# Usage function
|
|
19
|
+
usage() {
|
|
20
|
+
cat <<EOF
|
|
21
|
+
Usage: $0 [OPTIONS]
|
|
22
|
+
|
|
23
|
+
Extract tags from sprint execution data
|
|
24
|
+
|
|
25
|
+
OPTIONS:
|
|
26
|
+
--task-description TEXT Sprint task description
|
|
27
|
+
--files LIST Comma-separated list of modified files
|
|
28
|
+
--agents LIST Comma-separated list of agent types
|
|
29
|
+
--output FORMAT Output format: json|text (default: json)
|
|
30
|
+
--min-tags NUM Minimum tags to extract (default: 5)
|
|
31
|
+
--max-tags NUM Maximum tags to extract (default: 15)
|
|
32
|
+
-h, --help Show this help message
|
|
33
|
+
|
|
34
|
+
EXAMPLES:
|
|
35
|
+
$0 --task-description "Implement JWT authentication" \\
|
|
36
|
+
--files "src/auth.ts,tests/auth.test.ts" \\
|
|
37
|
+
--agents "backend-dev,security-specialist" \\
|
|
38
|
+
--output json
|
|
39
|
+
EOF
|
|
40
|
+
exit 1
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
# Parse arguments
|
|
44
|
+
while [[ $# -gt 0 ]]; do
|
|
45
|
+
case $1 in
|
|
46
|
+
--task-description)
|
|
47
|
+
TASK_DESCRIPTION="$2"
|
|
48
|
+
shift 2
|
|
49
|
+
;;
|
|
50
|
+
--files)
|
|
51
|
+
FILES="$2"
|
|
52
|
+
shift 2
|
|
53
|
+
;;
|
|
54
|
+
--agents)
|
|
55
|
+
AGENTS="$2"
|
|
56
|
+
shift 2
|
|
57
|
+
;;
|
|
58
|
+
--output)
|
|
59
|
+
OUTPUT_FORMAT="$2"
|
|
60
|
+
shift 2
|
|
61
|
+
;;
|
|
62
|
+
--min-tags)
|
|
63
|
+
MIN_TAGS="$2"
|
|
64
|
+
shift 2
|
|
65
|
+
;;
|
|
66
|
+
--max-tags)
|
|
67
|
+
MAX_TAGS="$2"
|
|
68
|
+
shift 2
|
|
69
|
+
;;
|
|
70
|
+
-h|--help)
|
|
71
|
+
usage
|
|
72
|
+
;;
|
|
73
|
+
*)
|
|
74
|
+
echo "Unknown option: $1"
|
|
75
|
+
usage
|
|
76
|
+
;;
|
|
77
|
+
esac
|
|
78
|
+
done
|
|
79
|
+
|
|
80
|
+
# Validate required parameters
|
|
81
|
+
if [[ -z "$TASK_DESCRIPTION" ]]; then
|
|
82
|
+
echo "Error: --task-description is required"
|
|
83
|
+
usage
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
# Extract keywords from task description (frequency-based)
|
|
87
|
+
extract_keywords() {
|
|
88
|
+
local text="$1"
|
|
89
|
+
local keywords=()
|
|
90
|
+
|
|
91
|
+
# Convert to lowercase, extract words (3+ chars), filter stopwords
|
|
92
|
+
local words=$(echo "$text" | tr '[:upper:]' '[:lower:]' | tr -cs '[:alnum:]' '\n' | grep -E '^.{3,}$' || true)
|
|
93
|
+
|
|
94
|
+
# Filter stopwords and count frequencies
|
|
95
|
+
local filtered_words=""
|
|
96
|
+
while IFS= read -r word; do
|
|
97
|
+
if [[ -n "$word" ]] && ! echo "$STOPWORDS" | grep -wq "$word"; then
|
|
98
|
+
filtered_words="$filtered_words$word"$'\n'
|
|
99
|
+
fi
|
|
100
|
+
done <<< "$words"
|
|
101
|
+
|
|
102
|
+
# Get top keywords by frequency (unique + sorted)
|
|
103
|
+
if [[ -n "$filtered_words" ]]; then
|
|
104
|
+
keywords=($(echo "$filtered_words" | sort | uniq -c | sort -rn | head -10 | awk '{print $2}'))
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
# Return as JSON array
|
|
108
|
+
if [[ ${#keywords[@]} -gt 0 ]]; then
|
|
109
|
+
printf '%s\n' "${keywords[@]}" | jq -R . | jq -s .
|
|
110
|
+
else
|
|
111
|
+
echo "[]"
|
|
112
|
+
fi
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
# Infer domains from file extensions and paths
|
|
116
|
+
infer_domains_from_files() {
|
|
117
|
+
local files="$1"
|
|
118
|
+
local domains=()
|
|
119
|
+
|
|
120
|
+
if [[ -z "$files" ]]; then
|
|
121
|
+
echo "[]"
|
|
122
|
+
return
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
# Split files by comma
|
|
126
|
+
IFS=',' read -ra file_array <<< "$files"
|
|
127
|
+
|
|
128
|
+
for file in "${file_array[@]}"; do
|
|
129
|
+
file=$(echo "$file" | xargs) # Trim whitespace
|
|
130
|
+
|
|
131
|
+
# Frontend patterns
|
|
132
|
+
if [[ "$file" =~ \.(tsx|jsx|css|html|scss|sass)$ ]] || [[ "$file" =~ /frontend/ ]] || [[ "$file" =~ /ui/ ]]; then
|
|
133
|
+
domains+=("frontend")
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
# Backend patterns
|
|
137
|
+
if [[ "$file" =~ \.(ts|js|py|java|go|rb)$ ]] && [[ ! "$file" =~ \.(tsx|jsx)$ ]] && [[ "$file" =~ /(api|backend|server|services)/ ]]; then
|
|
138
|
+
domains+=("backend")
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
# Security patterns
|
|
142
|
+
if [[ "$file" =~ /(auth|security|jwt|oauth)/ ]]; then
|
|
143
|
+
domains+=("security")
|
|
144
|
+
fi
|
|
145
|
+
|
|
146
|
+
# DevOps patterns
|
|
147
|
+
if [[ "$file" =~ \.(yaml|yml|dockerfile)$ ]] || [[ "$file" =~ /(docker|k8s|kubernetes|helm|terraform)/ ]]; then
|
|
148
|
+
domains+=("devops")
|
|
149
|
+
fi
|
|
150
|
+
|
|
151
|
+
# Testing patterns
|
|
152
|
+
if [[ "$file" =~ \.(test|spec)\. ]] || [[ "$file" =~ /__tests__/ ]] || [[ "$file" =~ /tests?/ ]]; then
|
|
153
|
+
domains+=("testing")
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
# Database patterns
|
|
157
|
+
if [[ "$file" =~ /(database|db|migrations|models|schema)/ ]] || [[ "$file" =~ \.(sql)$ ]]; then
|
|
158
|
+
domains+=("database")
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
# Documentation patterns
|
|
162
|
+
if [[ "$file" =~ \.(md|rst|txt)$ ]] || [[ "$file" =~ /(docs|documentation)/ ]]; then
|
|
163
|
+
domains+=("documentation")
|
|
164
|
+
fi
|
|
165
|
+
done
|
|
166
|
+
|
|
167
|
+
# Deduplicate and return as JSON array
|
|
168
|
+
if [[ ${#domains[@]} -gt 0 ]]; then
|
|
169
|
+
printf '%s\n' "${domains[@]}" | sort -u | jq -R . | jq -s .
|
|
170
|
+
else
|
|
171
|
+
echo "[]"
|
|
172
|
+
fi
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
# Infer domains from keywords
|
|
176
|
+
infer_domains_from_keywords() {
|
|
177
|
+
local keywords_json="$1"
|
|
178
|
+
local domains=()
|
|
179
|
+
|
|
180
|
+
# Extract keywords from JSON array
|
|
181
|
+
local keywords=$(echo "$keywords_json" | jq -r '.[]')
|
|
182
|
+
|
|
183
|
+
while IFS= read -r keyword; do
|
|
184
|
+
[[ -z "$keyword" ]] && continue
|
|
185
|
+
|
|
186
|
+
# Security domain
|
|
187
|
+
if [[ "$keyword" =~ (auth|jwt|token|oauth|security|encryption|hash|password|credential) ]]; then
|
|
188
|
+
domains+=("security")
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
# API domain
|
|
192
|
+
if [[ "$keyword" =~ (api|rest|graphql|endpoint|route|controller) ]]; then
|
|
193
|
+
domains+=("api")
|
|
194
|
+
fi
|
|
195
|
+
|
|
196
|
+
# Database domain
|
|
197
|
+
if [[ "$keyword" =~ (database|sql|query|migration|model|schema|orm) ]]; then
|
|
198
|
+
domains+=("database")
|
|
199
|
+
fi
|
|
200
|
+
|
|
201
|
+
# Testing domain
|
|
202
|
+
if [[ "$keyword" =~ (test|testing|spec|assertion|mock|coverage) ]]; then
|
|
203
|
+
domains+=("testing")
|
|
204
|
+
fi
|
|
205
|
+
|
|
206
|
+
# DevOps domain
|
|
207
|
+
if [[ "$keyword" =~ (docker|kubernetes|deploy|cicd|pipeline|container) ]]; then
|
|
208
|
+
domains+=("devops")
|
|
209
|
+
fi
|
|
210
|
+
|
|
211
|
+
# Performance domain
|
|
212
|
+
if [[ "$keyword" =~ (performance|optimization|cache|latency|speed) ]]; then
|
|
213
|
+
domains+=("performance")
|
|
214
|
+
fi
|
|
215
|
+
done <<< "$keywords"
|
|
216
|
+
|
|
217
|
+
# Deduplicate and return as JSON array
|
|
218
|
+
if [[ ${#domains[@]} -gt 0 ]]; then
|
|
219
|
+
printf '%s\n' "${domains[@]}" | sort -u | jq -R . | jq -s .
|
|
220
|
+
else
|
|
221
|
+
echo "[]"
|
|
222
|
+
fi
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
# Extract file type tags
|
|
226
|
+
extract_file_tags() {
|
|
227
|
+
local files="$1"
|
|
228
|
+
local file_tags=()
|
|
229
|
+
|
|
230
|
+
if [[ -z "$files" ]]; then
|
|
231
|
+
echo "[]"
|
|
232
|
+
return
|
|
233
|
+
fi
|
|
234
|
+
|
|
235
|
+
# Split files by comma
|
|
236
|
+
IFS=',' read -ra file_array <<< "$files"
|
|
237
|
+
|
|
238
|
+
for file in "${file_array[@]}"; do
|
|
239
|
+
file=$(echo "$file" | xargs) # Trim whitespace
|
|
240
|
+
|
|
241
|
+
# Extract extension
|
|
242
|
+
if [[ "$file" =~ \.([^.]+)$ ]]; then
|
|
243
|
+
ext="${BASH_REMATCH[1]}"
|
|
244
|
+
|
|
245
|
+
case "$ext" in
|
|
246
|
+
ts|tsx)
|
|
247
|
+
file_tags+=("typescript")
|
|
248
|
+
;;
|
|
249
|
+
js|jsx)
|
|
250
|
+
file_tags+=("javascript")
|
|
251
|
+
;;
|
|
252
|
+
py)
|
|
253
|
+
file_tags+=("python")
|
|
254
|
+
;;
|
|
255
|
+
java)
|
|
256
|
+
file_tags+=("java")
|
|
257
|
+
;;
|
|
258
|
+
go)
|
|
259
|
+
file_tags+=("golang")
|
|
260
|
+
;;
|
|
261
|
+
rb)
|
|
262
|
+
file_tags+=("ruby")
|
|
263
|
+
;;
|
|
264
|
+
sh|bash)
|
|
265
|
+
file_tags+=("bash")
|
|
266
|
+
;;
|
|
267
|
+
yaml|yml)
|
|
268
|
+
file_tags+=("yaml")
|
|
269
|
+
;;
|
|
270
|
+
json)
|
|
271
|
+
file_tags+=("json")
|
|
272
|
+
;;
|
|
273
|
+
md)
|
|
274
|
+
file_tags+=("markdown")
|
|
275
|
+
;;
|
|
276
|
+
esac
|
|
277
|
+
fi
|
|
278
|
+
done
|
|
279
|
+
|
|
280
|
+
# Deduplicate and return as JSON array
|
|
281
|
+
if [[ ${#file_tags[@]} -gt 0 ]]; then
|
|
282
|
+
printf '%s\n' "${file_tags[@]}" | sort -u | jq -R . | jq -s .
|
|
283
|
+
else
|
|
284
|
+
echo "[]"
|
|
285
|
+
fi
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
# Extract agent tags
|
|
289
|
+
extract_agent_tags() {
|
|
290
|
+
local agents="$1"
|
|
291
|
+
local agent_tags=()
|
|
292
|
+
|
|
293
|
+
if [[ -z "$agents" ]]; then
|
|
294
|
+
echo "[]"
|
|
295
|
+
return
|
|
296
|
+
fi
|
|
297
|
+
|
|
298
|
+
# Split agents by comma
|
|
299
|
+
IFS=',' read -ra agent_array <<< "$agents"
|
|
300
|
+
|
|
301
|
+
for agent in "${agent_array[@]}"; do
|
|
302
|
+
agent=$(echo "$agent" | xargs | tr '[:upper:]' '[:lower:]') # Trim and lowercase
|
|
303
|
+
[[ -n "$agent" ]] && agent_tags+=("$agent")
|
|
304
|
+
done
|
|
305
|
+
|
|
306
|
+
# Return as JSON array
|
|
307
|
+
if [[ ${#agent_tags[@]} -gt 0 ]]; then
|
|
308
|
+
printf '%s\n' "${agent_tags[@]}" | jq -R . | jq -s .
|
|
309
|
+
else
|
|
310
|
+
echo "[]"
|
|
311
|
+
fi
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
# Combine and deduplicate all tags
|
|
315
|
+
combine_tags() {
|
|
316
|
+
local keywords_json="$1"
|
|
317
|
+
local domains_file_json="$2"
|
|
318
|
+
local domains_keyword_json="$3"
|
|
319
|
+
local file_tags_json="$4"
|
|
320
|
+
local agent_tags_json="$5"
|
|
321
|
+
|
|
322
|
+
# Merge all JSON arrays
|
|
323
|
+
local all_tags=$(jq -s 'add | unique' <(echo "$keywords_json") <(echo "$domains_file_json") <(echo "$domains_keyword_json") <(echo "$file_tags_json") <(echo "$agent_tags_json"))
|
|
324
|
+
|
|
325
|
+
# Limit to MIN_TAGS - MAX_TAGS range
|
|
326
|
+
local tag_count=$(echo "$all_tags" | jq 'length')
|
|
327
|
+
|
|
328
|
+
if [[ $tag_count -lt $MIN_TAGS ]]; then
|
|
329
|
+
# If below minimum, return all we have
|
|
330
|
+
echo "$all_tags"
|
|
331
|
+
elif [[ $tag_count -gt $MAX_TAGS ]]; then
|
|
332
|
+
# If above maximum, truncate to MAX_TAGS
|
|
333
|
+
echo "$all_tags" | jq ".[:$MAX_TAGS]"
|
|
334
|
+
else
|
|
335
|
+
echo "$all_tags"
|
|
336
|
+
fi
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
# Main execution
|
|
340
|
+
main() {
|
|
341
|
+
# Extract components
|
|
342
|
+
local keywords_json=$(extract_keywords "$TASK_DESCRIPTION")
|
|
343
|
+
local domains_file_json=$(infer_domains_from_files "$FILES")
|
|
344
|
+
local domains_keyword_json=$(infer_domains_from_keywords "$keywords_json")
|
|
345
|
+
local file_tags_json=$(extract_file_tags "$FILES")
|
|
346
|
+
local agent_tags_json=$(extract_agent_tags "$AGENTS")
|
|
347
|
+
|
|
348
|
+
# Combine domains (file + keyword based)
|
|
349
|
+
local all_domains=$(jq -s 'add | unique' <(echo "$domains_file_json") <(echo "$domains_keyword_json"))
|
|
350
|
+
|
|
351
|
+
# Combine all tags
|
|
352
|
+
local combined_tags=$(combine_tags "$keywords_json" "$domains_file_json" "$domains_keyword_json" "$file_tags_json" "$agent_tags_json")
|
|
353
|
+
|
|
354
|
+
local tag_count=$(echo "$combined_tags" | jq 'length')
|
|
355
|
+
|
|
356
|
+
# Output format
|
|
357
|
+
if [[ "$OUTPUT_FORMAT" == "json" ]]; then
|
|
358
|
+
jq -n \
|
|
359
|
+
--argjson tags "$combined_tags" \
|
|
360
|
+
--argjson keywords "$keywords_json" \
|
|
361
|
+
--argjson domains "$all_domains" \
|
|
362
|
+
--argjson file_tags "$file_tags_json" \
|
|
363
|
+
--argjson agents "$agent_tags_json" \
|
|
364
|
+
--arg tag_count "$tag_count" \
|
|
365
|
+
'{
|
|
366
|
+
tags: $tags,
|
|
367
|
+
keywords: $keywords,
|
|
368
|
+
domains: $domains,
|
|
369
|
+
agents: $agents,
|
|
370
|
+
file_tags: $file_tags,
|
|
371
|
+
tag_count: ($tag_count | tonumber)
|
|
372
|
+
}'
|
|
373
|
+
else
|
|
374
|
+
# Text format
|
|
375
|
+
echo "Tags: $(echo "$combined_tags" | jq -r '.[]' | tr '\n' ',' | sed 's/,$//')"
|
|
376
|
+
echo "Keywords: $(echo "$keywords_json" | jq -r '.[]' | tr '\n' ',' | sed 's/,$//')"
|
|
377
|
+
echo "Domains: $(echo "$all_domains" | jq -r '.[]' | tr '\n' ',' | sed 's/,$//')"
|
|
378
|
+
echo "Agents: $(echo "$agent_tags_json" | jq -r '.[]' | tr '\n' ',' | sed 's/,$//')"
|
|
379
|
+
echo "File Tags: $(echo "$file_tags_json" | jq -r '.[]' | tr '\n' ',' | sed 's/,$//')"
|
|
380
|
+
echo "Tag Count: $tag_count"
|
|
381
|
+
fi
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
# Run main
|
|
385
|
+
main
|