claude-flow-novice 2.9.1 → 2.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/cfn-dev-team/CLAUDE.md +1086 -0
- package/.claude/agents/cfn-dev-team/README.md +116 -0
- package/.claude/agents/cfn-dev-team/architecture/api-designer-persona.md +149 -0
- package/.claude/agents/cfn-dev-team/architecture/base-template-generator.md +196 -0
- package/.claude/agents/cfn-dev-team/architecture/goal-planner.md +183 -0
- package/.claude/agents/cfn-dev-team/architecture/planner.md +182 -0
- package/.claude/agents/cfn-dev-team/architecture/system-architect.md +162 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +540 -0
- package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +20 -14
- package/.claude/agents/cfn-dev-team/coordinators/consensus-builder.md +167 -0
- package/.claude/agents/cfn-dev-team/dev-ops/devops-engineer.md +148 -0
- package/.claude/agents/cfn-dev-team/dev-ops/github-commit-agent.md +118 -0
- package/.claude/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +540 -0
- package/.claude/agents/cfn-dev-team/developers/backend-dev.md +20 -0
- package/.claude/agents/cfn-dev-team/developers/data/data-engineer.md +585 -0
- package/.claude/agents/cfn-dev-team/developers/database/database-architect.md +276 -0
- package/.claude/agents/cfn-dev-team/developers/dev-backend-api.md +147 -0
- package/.claude/agents/cfn-dev-team/developers/frontend/mobile-dev.md +218 -0
- package/.claude/agents/cfn-dev-team/developers/{react-frontend-engineer.md → frontend/react-frontend-engineer.md} +53 -5
- package/.claude/agents/cfn-dev-team/developers/frontend/spec-mobile-react-native.md +199 -0
- package/.claude/agents/cfn-dev-team/developers/graphql-specialist.md +615 -0
- package/.claude/agents/cfn-dev-team/developers/rust-developer.md +174 -0
- package/.claude/agents/cfn-dev-team/documentation/README-VALIDATION.md +243 -0
- package/.claude/agents/cfn-dev-team/documentation/agent-type-guidelines.md +465 -0
- package/.claude/agents/cfn-dev-team/documentation/api-docs.md +103 -0
- package/.claude/agents/cfn-dev-team/documentation/docs-api-openapi.md +98 -0
- package/.claude/agents/cfn-dev-team/documentation/pseudocode.md +159 -0
- package/.claude/agents/cfn-dev-team/documentation/specification.md +157 -0
- package/.claude/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +109 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/cto-agent.md +8 -6
- package/.claude/agents/cfn-dev-team/product-owners/power-user-persona.md +190 -0
- package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner.md +85 -59
- package/.claude/agents/cfn-dev-team/reviewers/quality/analyze-code-quality.md +141 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/code-analyzer.md +200 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +321 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +238 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +101 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/quality-metrics.md +375 -0
- package/.claude/agents/cfn-dev-team/reviewers/quality/security-specialist.md +193 -0
- package/.claude/agents/cfn-dev-team/reviewers/reviewer.md +39 -0
- package/.claude/agents/cfn-dev-team/testers/interaction-tester.md +31 -0
- package/.claude/agents/cfn-dev-team/testers/load-testing-specialist.md +469 -0
- package/.claude/agents/cfn-dev-team/testers/playwright-tester.md +24 -0
- package/.claude/agents/cfn-dev-team/testers/tester.md +20 -0
- package/.claude/agents/cfn-dev-team/utility/agent-builder.md +151 -0
- package/.claude/agents/cfn-dev-team/utility/analyst.md +178 -0
- package/.claude/agents/cfn-dev-team/utility/claude-code-expert.md +1043 -0
- package/.claude/agents/cfn-dev-team/utility/code-booster.md +139 -0
- package/.claude/agents/cfn-dev-team/utility/context-curator.md +99 -0
- package/.claude/agents/cfn-dev-team/{developers → utility}/researcher.md +6 -4
- package/.claude/commands/cfn/CFN_LOOP_FRONTEND.md +741 -0
- package/.claude/commands/cfn/CFN_LOOP_TASK_MODE.md +353 -0
- package/.claude/commands/cfn/cfn-loop-frontend.md +555 -0
- package/.claude/commands/cfn/cfn-loop.md +168 -7
- package/{CFN-CLAUDE.md → .claude/root-claude-distribute/CFN-CLAUDE.md} +23 -3
- package/.claude/skills/cfn-ace-system/SKILL.md +364 -0
- package/.claude/skills/cfn-ace-system/add-bullet.sh +145 -0
- package/.claude/skills/cfn-ace-system/analyze-anti-pattern-effectiveness.sh +56 -0
- package/.claude/skills/cfn-ace-system/classify-task.sh +18 -0
- package/.claude/skills/cfn-ace-system/export-ace-metrics.sh +48 -0
- package/.claude/skills/cfn-ace-system/extract-tags.sh +385 -0
- package/.claude/skills/cfn-ace-system/format-negative-context.sh +180 -0
- package/.claude/skills/cfn-ace-system/init-indexes.sql +160 -0
- package/.claude/skills/cfn-ace-system/invoke-context-curate.sh +192 -0
- package/.claude/skills/cfn-ace-system/invoke-context-inject.sh +361 -0
- package/.claude/skills/cfn-ace-system/invoke-context-query.sh +139 -0
- package/.claude/skills/cfn-ace-system/invoke-context-reflect.sh +343 -0
- package/.claude/skills/cfn-ace-system/invoke-context-stats.sh +227 -0
- package/.claude/skills/cfn-ace-system/log-merge.sh +67 -0
- package/.claude/skills/cfn-ace-system/monitor-injection-performance.sh +138 -0
- package/.claude/skills/cfn-ace-system/optimize-injection-pipeline.sh +169 -0
- package/.claude/skills/cfn-ace-system/query-anti-patterns.sh +276 -0
- package/.claude/skills/cfn-ace-system/query-contexts.sh +150 -0
- package/.claude/skills/cfn-ace-system/query-reflections.sh +35 -0
- package/.claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql +237 -0
- package/.claude/skills/cfn-ace-system/schema/README.md +723 -0
- package/.claude/skills/cfn-ace-system/schema/SCHEMA_DESIGN_SUMMARY.md +564 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data-simple.sh +62 -0
- package/.claude/skills/cfn-ace-system/schema/populate-test-data.sh +247 -0
- package/.claude/skills/cfn-ace-system/schema/run-migration.sh +231 -0
- package/.claude/skills/cfn-ace-system/schema/validate-schema.sql +280 -0
- package/.claude/skills/cfn-ace-system/score-relevance-adapter.sh +138 -0
- package/.claude/skills/cfn-ace-system/score-relevance.sh +253 -0
- package/.claude/skills/cfn-ace-system/sprint-7-lessons.json +46 -0
- package/.claude/skills/cfn-ace-system/store-reflection.sh +46 -0
- package/.claude/skills/cfn-ace-system/test-ace-skill.sh +312 -0
- package/.claude/skills/cfn-ace-system/track-ab-test.sh +42 -0
- package/.claude/skills/cfn-ace-system/update-reflection.sh +41 -0
- package/.claude/skills/cfn-agent-discovery/SKILL.md +40 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-clean.json +0 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry-fixed.json +19 -0
- package/.claude/skills/cfn-agent-discovery/agents-registry.json +718 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.py +184 -0
- package/.claude/skills/cfn-agent-discovery/discover-agents.sh +87 -0
- package/.claude/skills/cfn-agent-discovery/invoke-registry.sh +11 -0
- package/.claude/skills/cfn-agent-discovery/temp_script.py +0 -0
- package/.claude/skills/cfn-agent-execution/execute-agent.sh +126 -0
- package/.claude/skills/cfn-agent-output-processing/SKILL.md +359 -0
- package/.claude/skills/cfn-agent-selector/SKILL.md +90 -0
- package/.claude/skills/cfn-agent-selector/select-agents.sh +112 -0
- package/.claude/skills/cfn-agent-spawning/SKILL.md +135 -0
- package/.claude/skills/cfn-agent-spawning/agent-selection-guide.md +814 -0
- package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +30 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +263 -0
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +613 -0
- package/.claude/skills/cfn-analytics/description-refinement-guide.md +164 -0
- package/.claude/skills/cfn-analytics/log-skill-invocation.js +122 -0
- package/.claude/skills/cfn-analytics/run-production-criteria-tests.sh +126 -0
- package/.claude/skills/cfn-analytics/skill-analytics-dashboard.js +113 -0
- package/.claude/skills/cfn-analytics/skill-invocation-hook.sh +28 -0
- package/.claude/skills/cfn-analytics/skill-invocations.sql +58 -0
- package/.claude/skills/cfn-analytics/test-corpus.json +32 -0
- package/.claude/skills/cfn-analytics/test-data-generator.js +115 -0
- package/.claude/skills/cfn-analytics/test-manual-override-rate.js +285 -0
- package/.claude/skills/cfn-analytics/validate-skill-selection.js +188 -0
- package/.claude/skills/cfn-config-management/SKILL.md +34 -0
- package/.claude/skills/cfn-config-management/check-dependencies.sh +56 -0
- package/.claude/skills/cfn-config-management/config.json +32 -0
- package/.claude/skills/cfn-config-management/manage-config.sh +113 -0
- package/.claude/skills/cfn-event-bus/SKILL.md +412 -0
- package/.claude/skills/cfn-event-bus/config.json +111 -0
- package/.claude/skills/cfn-event-bus/eventbus-wrapper.cjs +69 -0
- package/.claude/skills/cfn-event-bus/invoke-event-publish.sh +147 -0
- package/.claude/skills/cfn-event-bus/invoke-event-subscribe.sh +171 -0
- package/.claude/skills/cfn-event-bus/invoke-lifecycle-track.sh +201 -0
- package/.claude/skills/cfn-event-bus/test-event-bus.sh +280 -0
- package/.claude/skills/cfn-fleet-manager/SKILL.md +412 -0
- package/.claude/skills/cfn-fleet-manager/config.json +60 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-allocate.sh +182 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-balance.sh +239 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-metrics.sh +193 -0
- package/.claude/skills/cfn-fleet-manager/invoke-fleet-register.sh +124 -0
- package/.claude/skills/cfn-fleet-manager/test-fleet-manager.sh +345 -0
- package/.claude/skills/cfn-hook-pipeline/SKILL.md +148 -0
- package/.claude/skills/cfn-hook-pipeline/auto-resolve.sh +66 -0
- package/.claude/skills/cfn-hook-pipeline/check-dependencies.sh +40 -0
- package/.claude/skills/cfn-hook-pipeline/feedback-resolver.sh +452 -0
- package/.claude/skills/cfn-hook-pipeline/post-edit-handler.sh +154 -0
- package/.claude/skills/cfn-hook-pipeline/security-scan.json +60 -0
- package/.claude/skills/cfn-hook-pipeline/security-scanner.sh +121 -0
- package/.claude/skills/cfn-hook-pipeline/test-root-warning-resolution.sh +148 -0
- package/.claude/skills/cfn-hybrid-routing/SKILL.md +46 -0
- package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +52 -0
- package/.claude/skills/cfn-hybrid-routing/config.json +26 -0
- package/.claude/skills/cfn-hybrid-routing/spawn-worker.sh +44 -0
- package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +142 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +359 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +271 -0
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
- package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
- package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +884 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +840 -0
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
- package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
- package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
- package/.claude/skills/cfn-loop-validation/SKILL.md +353 -0
- package/.claude/skills/cfn-loop-validation/check-dependencies.sh +31 -0
- package/.claude/skills/cfn-loop-validation/config.json +161 -0
- package/.claude/skills/cfn-loop-validation/consensus-calculator.js +477 -0
- package/.claude/skills/cfn-loop-validation/evidence-chain.sql +163 -0
- package/.claude/skills/cfn-loop-validation/examples/README.md +453 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +234 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +132 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +115 -0
- package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +186 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh +134 -0
- package/.claude/skills/cfn-process-lifecycle/SKILL.md +39 -0
- package/.claude/skills/cfn-process-lifecycle/check-dependencies.sh +58 -0
- package/.claude/skills/cfn-process-lifecycle/config.json +39 -0
- package/.claude/skills/cfn-process-lifecycle/process-manager.sh +144 -0
- package/.claude/skills/cfn-product-owner-decision/SKILL.md +332 -0
- package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +176 -0
- package/.claude/skills/cfn-product-owner-decision/parse-decision.sh +66 -0
- package/.claude/skills/cfn-product-owner-decision/validate-deliverables.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +280 -0
- package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +209 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +57 -0
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +267 -0
- package/.claude/skills/cfn-redis-coordination/LOGGING.md +260 -0
- package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +25 -0
- package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +164 -0
- package/.claude/skills/cfn-redis-coordination/SKILL.md +720 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/analyze-task-complexity.sh +277 -0
- package/.claude/skills/cfn-redis-coordination/cancel-swarm.sh +221 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-exec.sh +468 -0
- package/.claude/skills/cfn-redis-coordination/cfn-loop-relaunch.sh +29 -0
- package/.claude/skills/cfn-redis-coordination/check-dependencies.sh +32 -0
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +179 -0
- package/.claude/skills/cfn-redis-coordination/collect-results.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/complete-swarm.sh +75 -0
- package/.claude/skills/cfn-redis-coordination/config.json +61 -0
- package/.claude/skills/cfn-redis-coordination/data/cfn-loop.db +0 -0
- package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +82 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +274 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +276 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +129 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +320 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +249 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +163 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +138 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +45 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +68 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +56 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +81 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +57 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +187 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +160 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +97 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +59 -0
- package/.claude/skills/cfn-redis-coordination/examples/README.md +73 -0
- package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +352 -0
- package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +127 -0
- package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +171 -0
- package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +227 -0
- package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +239 -0
- package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +258 -0
- package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +177 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +137 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +106 -0
- package/.claude/skills/cfn-redis-coordination/heartbeat.sh +126 -0
- package/.claude/skills/cfn-redis-coordination/init-swarm.sh +148 -0
- package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +220 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +283 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
- package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +147 -0
- package/.claude/skills/cfn-redis-coordination/log-event.sh +109 -0
- package/.claude/skills/cfn-redis-coordination/metrics-export.sh +674 -0
- package/.claude/skills/cfn-redis-coordination/metrics-schema.json +66 -0
- package/.claude/skills/cfn-redis-coordination/metrics-storage.md +31 -0
- package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +391 -0
- package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +101 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +31 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
- package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +75 -0
- package/.claude/skills/cfn-redis-coordination/priority_wake.py +134 -0
- package/.claude/skills/cfn-redis-coordination/query-dlq.sh +162 -0
- package/.claude/skills/cfn-redis-coordination/query-logs.sh +103 -0
- package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +619 -0
- package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +58 -0
- package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +371 -0
- package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +252 -0
- package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +165 -0
- package/.claude/skills/cfn-redis-coordination/signal.sh +38 -0
- package/.claude/skills/cfn-redis-coordination/store-context.sh +86 -0
- package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +123 -0
- package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +354 -0
- package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +513 -0
- package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +15 -0
- package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +102 -0
- package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +99 -0
- package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +170 -0
- package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +82 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +92 -0
- package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +418 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +124 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +166 -0
- package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
- package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +49 -0
- package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +76 -0
- package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +492 -0
- package/.claude/skills/cfn-sqlite-memory/IMPLEMENTATION_REPORT.md +393 -0
- package/.claude/skills/cfn-sqlite-memory/QUICK_REFERENCE.md +204 -0
- package/.claude/skills/cfn-sqlite-memory/SKILL.md +415 -0
- package/.claude/skills/cfn-sqlite-memory/acl-queries.sql +452 -0
- package/.claude/skills/cfn-sqlite-memory/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-sqlite-memory/config.json +45 -0
- package/.claude/skills/cfn-sqlite-memory/memory-cli.sh +88 -0
- package/.claude/skills/cfn-sqlite-memory/test-state-persistence.js +187 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +274 -0
- package/.claude/skills/cfn-test-execution/SKILL.md +128 -0
- package/.claude/skills/cfn-test-execution/check-dependencies.sh +36 -0
- package/.claude/skills/cfn-test-execution/test-cache-reader.sh +134 -0
- package/.claude/skills/cfn-test-execution/test-concurrent-conflicts.sh +115 -0
- package/.claude/skills/cfn-test-execution/test-coordinator-pattern.sh +109 -0
- package/.claude/skills/cfn-transparency-middleware/Cargo.toml +18 -0
- package/.claude/skills/cfn-transparency-middleware/SECURITY.md +41 -0
- package/.claude/skills/cfn-transparency-middleware/SKILL.md +91 -0
- package/.claude/skills/cfn-transparency-middleware/TEST_RESULTS.md +174 -0
- package/.claude/skills/cfn-transparency-middleware/config.json +31 -0
- package/.claude/skills/cfn-transparency-middleware/examples/basic-usage.ts +39 -0
- package/.claude/skills/cfn-transparency-middleware/examples/batch-processing.ts +52 -0
- package/.claude/skills/cfn-transparency-middleware/examples/custom-filtering.ts +61 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-filter.sh +98 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-init.sh +224 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-level.sh +333 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-metrics.sh +345 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-observe.sh +140 -0
- package/.claude/skills/cfn-transparency-middleware/invoke-transparency-stop.sh +235 -0
- package/.claude/skills/cfn-transparency-middleware/memory_query.rs +85 -0
- package/.claude/skills/cfn-transparency-middleware/memory_repository.rs +140 -0
- package/.claude/skills/cfn-transparency-middleware/memory_schema.rs +64 -0
- package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +29 -0
- package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +79 -0
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +406 -0
- package/.claude/skills/cfn-transparency-middleware/test-integration.sh +162 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +368 -0
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh.unix +126 -0
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +93 -0
- package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +132 -0
- package/.claude/skills/cfn-webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
- package/.claude/skills/cfn-webapp-testing/SKILL.md +877 -0
- package/.claude/skills/cfn-webapp-testing/capture-screenshot.sh +238 -0
- package/.claude/skills/cfn-webapp-testing/cfn-loop-integration.sh +265 -0
- package/.claude/skills/cfn-webapp-testing/compare-screenshots.sh +199 -0
- package/.claude/skills/cfn-webapp-testing/init-storage.sh +150 -0
- package/.claude/skills/cfn-webapp-testing/set-baseline.sh +196 -0
- package/.claude/skills/cfn-webapp-testing/test-webapp-testing.sh +233 -0
- package/README.md +51 -2
- package/dist/ace/ace-reflector.js +109 -10
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/cli/agent-executor.js +1 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/package.json +43 -7
- package/readme/README.md +15 -4
- package/scripts/init-project.js +76 -6
- package/scripts/run-marketing-tests.sh +43 -0
- package/scripts/update_paths.sh +47 -0
- package/tools/install-lizard.sh +37 -0
- package/tools/simple-complexity.sh +44 -0
- package/.claude/agents/cfn-dev-team/developers/coder.md +0 -270
- package/.claude/agents/cfn-dev-team/developers/state-architect.md +0 -127
- package/.claude/agents/cfn-dev-team/reviewers/code-quality-validator.md +0 -128
- /package/.claude/agents/cfn-dev-team/developers/{ui-designer.md → frontend/ui-designer.md} +0 -0
- /package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner-agent.md +0 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
-- ACE System: Schema Validation Queries
|
|
2
|
+
-- Tests that schema supports all required query patterns
|
|
3
|
+
-- Run with: sqlite3 swarm-memory.db < validate-schema.sql
|
|
4
|
+
|
|
5
|
+
.mode column
|
|
6
|
+
.headers on
|
|
7
|
+
.width 40 15 10
|
|
8
|
+
|
|
9
|
+
-- =============================================
|
|
10
|
+
-- 1. BASIC TABLE VERIFICATION
|
|
11
|
+
-- =============================================
|
|
12
|
+
|
|
13
|
+
.print ""
|
|
14
|
+
.print "=== 1. TABLE VERIFICATION ==="
|
|
15
|
+
.print ""
|
|
16
|
+
|
|
17
|
+
SELECT 'context_reflections' as table_name, COUNT(*) as column_count
|
|
18
|
+
FROM pragma_table_info('context_reflections');
|
|
19
|
+
|
|
20
|
+
SELECT 'ace_telemetry' as table_name, COUNT(*) as column_count
|
|
21
|
+
FROM pragma_table_info('ace_telemetry');
|
|
22
|
+
|
|
23
|
+
.print ""
|
|
24
|
+
.print "=== 2. INDEX VERIFICATION ==="
|
|
25
|
+
.print ""
|
|
26
|
+
|
|
27
|
+
SELECT
|
|
28
|
+
name as index_name,
|
|
29
|
+
tbl_name as table_name,
|
|
30
|
+
CASE WHEN "unique" = 1 THEN 'YES' ELSE 'NO' END as is_unique
|
|
31
|
+
FROM sqlite_master
|
|
32
|
+
WHERE type = 'index'
|
|
33
|
+
AND tbl_name IN ('context_reflections', 'ace_telemetry')
|
|
34
|
+
ORDER BY tbl_name, name;
|
|
35
|
+
|
|
36
|
+
-- =============================================
|
|
37
|
+
-- 3. VIEW VERIFICATION
|
|
38
|
+
-- =============================================
|
|
39
|
+
|
|
40
|
+
.print ""
|
|
41
|
+
.print "=== 3. VIEW VERIFICATION ==="
|
|
42
|
+
.print ""
|
|
43
|
+
|
|
44
|
+
SELECT name as view_name
|
|
45
|
+
FROM sqlite_master
|
|
46
|
+
WHERE type = 'view'
|
|
47
|
+
ORDER BY name;
|
|
48
|
+
|
|
49
|
+
-- =============================================
|
|
50
|
+
-- 4. COLUMN CONSTRAINTS VERIFICATION
|
|
51
|
+
-- =============================================
|
|
52
|
+
|
|
53
|
+
.print ""
|
|
54
|
+
.print "=== 4. COLUMN CONSTRAINTS ==="
|
|
55
|
+
.print ""
|
|
56
|
+
|
|
57
|
+
SELECT
|
|
58
|
+
name as column_name,
|
|
59
|
+
type as data_type,
|
|
60
|
+
"notnull" as not_null,
|
|
61
|
+
dflt_value as default_value,
|
|
62
|
+
pk as is_primary_key
|
|
63
|
+
FROM pragma_table_info('context_reflections')
|
|
64
|
+
WHERE "notnull" = 1 OR pk = 1
|
|
65
|
+
ORDER BY pk DESC, name;
|
|
66
|
+
|
|
67
|
+
-- =============================================
|
|
68
|
+
-- 5. QUERY PATTERN TESTS (Context Lookup)
|
|
69
|
+
-- =============================================
|
|
70
|
+
|
|
71
|
+
.print ""
|
|
72
|
+
.print "=== 5. CONTEXT LOOKUP QUERY TEST ==="
|
|
73
|
+
.print "Query: Find curated strategies by domain"
|
|
74
|
+
.print ""
|
|
75
|
+
|
|
76
|
+
-- This query should use idx_context_lookup index
|
|
77
|
+
EXPLAIN QUERY PLAN
|
|
78
|
+
SELECT
|
|
79
|
+
id,
|
|
80
|
+
reflection_type,
|
|
81
|
+
json_extract(metadata, '$.domain') as domain,
|
|
82
|
+
confidence,
|
|
83
|
+
created_at
|
|
84
|
+
FROM context_reflections
|
|
85
|
+
WHERE curator_status = 'curated'
|
|
86
|
+
AND confidence >= 0.70
|
|
87
|
+
AND json_extract(metadata, '$.domain') LIKE '%backend%'
|
|
88
|
+
ORDER BY confidence DESC, created_at DESC
|
|
89
|
+
LIMIT 5;
|
|
90
|
+
|
|
91
|
+
-- =============================================
|
|
92
|
+
-- 6. KEYWORD SIMILARITY QUERY TEST
|
|
93
|
+
-- =============================================
|
|
94
|
+
|
|
95
|
+
.print ""
|
|
96
|
+
.print "=== 6. KEYWORD SIMILARITY QUERY TEST ==="
|
|
97
|
+
.print "Query: Find contexts matching keywords"
|
|
98
|
+
.print ""
|
|
99
|
+
|
|
100
|
+
-- This query should use idx_metadata_keywords index
|
|
101
|
+
EXPLAIN QUERY PLAN
|
|
102
|
+
SELECT
|
|
103
|
+
id,
|
|
104
|
+
reflection_type,
|
|
105
|
+
json_extract(metadata, '$.keywords') as keywords,
|
|
106
|
+
confidence
|
|
107
|
+
FROM context_reflections
|
|
108
|
+
WHERE json_extract(metadata, '$.keywords') LIKE '%authentication%'
|
|
109
|
+
OR json_extract(metadata, '$.keywords') LIKE '%jwt%'
|
|
110
|
+
ORDER BY confidence DESC
|
|
111
|
+
LIMIT 5;
|
|
112
|
+
|
|
113
|
+
-- =============================================
|
|
114
|
+
-- 7. ANTI-PATTERN QUERY TEST
|
|
115
|
+
-- =============================================
|
|
116
|
+
|
|
117
|
+
.print ""
|
|
118
|
+
.print "=== 7. ANTI-PATTERN QUERY TEST ==="
|
|
119
|
+
.print "Query: Find critical anti-patterns"
|
|
120
|
+
.print ""
|
|
121
|
+
|
|
122
|
+
-- This query should use idx_context_reflections_type
|
|
123
|
+
EXPLAIN QUERY PLAN
|
|
124
|
+
SELECT
|
|
125
|
+
id,
|
|
126
|
+
task_id,
|
|
127
|
+
json_extract(metadata, '$.severity') as severity,
|
|
128
|
+
confidence,
|
|
129
|
+
created_at
|
|
130
|
+
FROM context_reflections
|
|
131
|
+
WHERE reflection_type = 'anti-pattern'
|
|
132
|
+
AND json_extract(metadata, '$.severity') = 'critical'
|
|
133
|
+
ORDER BY created_at DESC;
|
|
134
|
+
|
|
135
|
+
-- =============================================
|
|
136
|
+
-- 8. SUCCESS RATE QUERY TEST
|
|
137
|
+
-- =============================================
|
|
138
|
+
|
|
139
|
+
.print ""
|
|
140
|
+
.print "=== 8. SUCCESS RATE QUERY TEST ==="
|
|
141
|
+
.print "Query: Find high-impact patterns"
|
|
142
|
+
.print ""
|
|
143
|
+
|
|
144
|
+
-- This query should use idx_context_reflections_success
|
|
145
|
+
EXPLAIN QUERY PLAN
|
|
146
|
+
SELECT
|
|
147
|
+
id,
|
|
148
|
+
reflection_type,
|
|
149
|
+
confidence,
|
|
150
|
+
success_count,
|
|
151
|
+
total_count,
|
|
152
|
+
CAST(success_count AS REAL) / NULLIF(total_count, 0) as success_rate
|
|
153
|
+
FROM context_reflections
|
|
154
|
+
WHERE total_count >= 3
|
|
155
|
+
AND CAST(success_count AS REAL) / NULLIF(total_count, 0) >= 0.80
|
|
156
|
+
ORDER BY success_count DESC, success_rate DESC
|
|
157
|
+
LIMIT 10;
|
|
158
|
+
|
|
159
|
+
-- =============================================
|
|
160
|
+
-- 9. VIEW QUERY TEST (Active Lessons)
|
|
161
|
+
-- =============================================
|
|
162
|
+
|
|
163
|
+
.print ""
|
|
164
|
+
.print "=== 9. ACTIVE LESSONS VIEW TEST ==="
|
|
165
|
+
.print "Query: Select from v_active_lessons"
|
|
166
|
+
.print ""
|
|
167
|
+
|
|
168
|
+
EXPLAIN QUERY PLAN
|
|
169
|
+
SELECT
|
|
170
|
+
id,
|
|
171
|
+
reflection_type,
|
|
172
|
+
domain,
|
|
173
|
+
confidence,
|
|
174
|
+
success_rate
|
|
175
|
+
FROM v_active_lessons
|
|
176
|
+
WHERE confidence >= 0.80
|
|
177
|
+
LIMIT 5;
|
|
178
|
+
|
|
179
|
+
-- =============================================
|
|
180
|
+
-- 10. VIEW QUERY TEST (High Impact Patterns)
|
|
181
|
+
-- =============================================
|
|
182
|
+
|
|
183
|
+
.print ""
|
|
184
|
+
.print "=== 10. HIGH IMPACT PATTERNS VIEW TEST ==="
|
|
185
|
+
.print "Query: Select from v_high_impact_patterns"
|
|
186
|
+
.print ""
|
|
187
|
+
|
|
188
|
+
EXPLAIN QUERY PLAN
|
|
189
|
+
SELECT
|
|
190
|
+
id,
|
|
191
|
+
domain,
|
|
192
|
+
strategy_title,
|
|
193
|
+
success_count,
|
|
194
|
+
success_rate
|
|
195
|
+
FROM v_high_impact_patterns
|
|
196
|
+
LIMIT 5;
|
|
197
|
+
|
|
198
|
+
-- =============================================
|
|
199
|
+
-- 11. VIEW QUERY TEST (Recent Failures)
|
|
200
|
+
-- =============================================
|
|
201
|
+
|
|
202
|
+
.print ""
|
|
203
|
+
.print "=== 11. RECENT FAILURES VIEW TEST ==="
|
|
204
|
+
.print "Query: Select from v_recent_failures"
|
|
205
|
+
.print ""
|
|
206
|
+
|
|
207
|
+
EXPLAIN QUERY PLAN
|
|
208
|
+
SELECT
|
|
209
|
+
id,
|
|
210
|
+
task_id,
|
|
211
|
+
domain,
|
|
212
|
+
severity,
|
|
213
|
+
confidence
|
|
214
|
+
FROM v_recent_failures
|
|
215
|
+
WHERE severity = 'critical'
|
|
216
|
+
LIMIT 5;
|
|
217
|
+
|
|
218
|
+
-- =============================================
|
|
219
|
+
-- 12. PERFORMANCE METRICS
|
|
220
|
+
-- =============================================
|
|
221
|
+
|
|
222
|
+
.print ""
|
|
223
|
+
.print "=== 12. SCHEMA STATISTICS ==="
|
|
224
|
+
.print ""
|
|
225
|
+
|
|
226
|
+
SELECT
|
|
227
|
+
'Reflections' as metric,
|
|
228
|
+
COUNT(*) as count,
|
|
229
|
+
ROUND(AVG(confidence), 2) as avg_confidence,
|
|
230
|
+
MIN(created_at) as earliest,
|
|
231
|
+
MAX(created_at) as latest
|
|
232
|
+
FROM context_reflections;
|
|
233
|
+
|
|
234
|
+
SELECT
|
|
235
|
+
'Telemetry Records' as metric,
|
|
236
|
+
COUNT(*) as count,
|
|
237
|
+
'-' as avg_confidence,
|
|
238
|
+
'-' as earliest,
|
|
239
|
+
'-' as latest
|
|
240
|
+
FROM ace_telemetry;
|
|
241
|
+
|
|
242
|
+
-- =============================================
|
|
243
|
+
-- 13. INDEX USAGE ANALYSIS
|
|
244
|
+
-- =============================================
|
|
245
|
+
|
|
246
|
+
.print ""
|
|
247
|
+
.print "=== 13. INDEX RECOMMENDATIONS ==="
|
|
248
|
+
.print "Note: Run after queries to see which indexes were used"
|
|
249
|
+
.print ""
|
|
250
|
+
|
|
251
|
+
-- Show indexes that exist
|
|
252
|
+
SELECT
|
|
253
|
+
m.name as index_name,
|
|
254
|
+
m.tbl_name as table_name,
|
|
255
|
+
GROUP_CONCAT(ii.name, ', ') as indexed_columns
|
|
256
|
+
FROM sqlite_master m
|
|
257
|
+
JOIN pragma_index_info(m.name) ii
|
|
258
|
+
WHERE m.type = 'index'
|
|
259
|
+
AND m.tbl_name = 'context_reflections'
|
|
260
|
+
GROUP BY m.name, m.tbl_name
|
|
261
|
+
ORDER BY m.name;
|
|
262
|
+
|
|
263
|
+
-- =============================================
|
|
264
|
+
-- 14. SCHEMA VERSION
|
|
265
|
+
-- =============================================
|
|
266
|
+
|
|
267
|
+
.print ""
|
|
268
|
+
.print "=== 14. SCHEMA VERSION ==="
|
|
269
|
+
.print ""
|
|
270
|
+
|
|
271
|
+
SELECT
|
|
272
|
+
version,
|
|
273
|
+
applied_at,
|
|
274
|
+
description
|
|
275
|
+
FROM schema_version
|
|
276
|
+
ORDER BY version DESC;
|
|
277
|
+
|
|
278
|
+
.print ""
|
|
279
|
+
.print "=== VALIDATION COMPLETE ==="
|
|
280
|
+
.print ""
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# score-relevance-adapter.sh - Interface adapter for relevance scoring
|
|
3
|
+
# Translates test suite API → backend implementation API
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
|
|
9
|
+
# Usage
|
|
10
|
+
usage() {
|
|
11
|
+
cat <<EOF
|
|
12
|
+
Usage: score-relevance-adapter.sh KEYWORDS_QUERY KEYWORDS_CONTEXT DOMAINS_QUERY DOMAINS_CONTEXT AGENTS_QUERY AGENTS_CONTEXT CREATED_AT SUCCESS_RATE
|
|
13
|
+
|
|
14
|
+
Adapter layer bridging test suite API and backend implementation API.
|
|
15
|
+
|
|
16
|
+
Arguments:
|
|
17
|
+
KEYWORDS_QUERY JSON array of keywords from current task
|
|
18
|
+
KEYWORDS_CONTEXT JSON array of keywords from historical context
|
|
19
|
+
DOMAINS_QUERY JSON array of domains from current task
|
|
20
|
+
DOMAINS_CONTEXT JSON array of domains from historical context
|
|
21
|
+
AGENTS_QUERY JSON array of agents from current task
|
|
22
|
+
AGENTS_CONTEXT JSON array of agents from historical context
|
|
23
|
+
CREATED_AT Historical context timestamp (YYYY-MM-DD)
|
|
24
|
+
SUCCESS_RATE Historical context confidence score (0.0-1.0)
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
score-relevance-adapter.sh \\
|
|
28
|
+
'["backend","authentication","jwt"]' \\
|
|
29
|
+
'["security","auth","oauth"]' \\
|
|
30
|
+
'["backend","security"]' \\
|
|
31
|
+
'["security"]' \\
|
|
32
|
+
'["backend-dev","security-specialist"]' \\
|
|
33
|
+
'["security-specialist"]' \\
|
|
34
|
+
"2025-10-25" \\
|
|
35
|
+
"0.92"
|
|
36
|
+
|
|
37
|
+
Output:
|
|
38
|
+
Relevance score (0.0-1.0) written to stdout
|
|
39
|
+
EOF
|
|
40
|
+
exit 1
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
# Validate parameters
|
|
44
|
+
if [[ $# -ne 8 ]]; then
|
|
45
|
+
echo "Error: Expected 8 parameters, got $#" >&2
|
|
46
|
+
usage
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
KEYWORDS_QUERY="$1"
|
|
50
|
+
KEYWORDS_CONTEXT="$2"
|
|
51
|
+
DOMAINS_QUERY="$3"
|
|
52
|
+
DOMAINS_CONTEXT="$4"
|
|
53
|
+
AGENTS_QUERY="$5"
|
|
54
|
+
AGENTS_CONTEXT="$6"
|
|
55
|
+
CREATED_AT="$7"
|
|
56
|
+
SUCCESS_RATE="$8"
|
|
57
|
+
|
|
58
|
+
# Validate timestamp format (YYYY-MM-DD)
|
|
59
|
+
if ! [[ "$CREATED_AT" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
|
|
60
|
+
echo "Error: Invalid timestamp format. Expected YYYY-MM-DD, got: $CREATED_AT" >&2
|
|
61
|
+
exit 1
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
# Validate success rate range (0.0-1.0)
|
|
65
|
+
if ! awk -v rate="$SUCCESS_RATE" 'BEGIN { exit !(rate >= 0.0 && rate <= 1.0) }'; then
|
|
66
|
+
echo "Error: Invalid success rate. Expected 0.0-1.0, got: $SUCCESS_RATE" >&2
|
|
67
|
+
exit 1
|
|
68
|
+
fi
|
|
69
|
+
|
|
70
|
+
# Validate JSON array format
|
|
71
|
+
validate_json_array() {
|
|
72
|
+
local input="$1"
|
|
73
|
+
local name="$2"
|
|
74
|
+
|
|
75
|
+
if ! echo "$input" | jq empty 2>/dev/null; then
|
|
76
|
+
echo "Error: Invalid JSON format for $name: $input" >&2
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
if ! echo "$input" | jq -e 'type == "array"' >/dev/null 2>&1; then
|
|
81
|
+
echo "Error: Expected JSON array for $name, got: $input" >&2
|
|
82
|
+
exit 1
|
|
83
|
+
fi
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
# Validate all JSON array inputs
|
|
87
|
+
validate_json_array "$KEYWORDS_QUERY" "KEYWORDS_QUERY"
|
|
88
|
+
validate_json_array "$KEYWORDS_CONTEXT" "KEYWORDS_CONTEXT"
|
|
89
|
+
validate_json_array "$DOMAINS_QUERY" "DOMAINS_QUERY"
|
|
90
|
+
validate_json_array "$DOMAINS_CONTEXT" "DOMAINS_CONTEXT"
|
|
91
|
+
validate_json_array "$AGENTS_QUERY" "AGENTS_QUERY"
|
|
92
|
+
validate_json_array "$AGENTS_CONTEXT" "AGENTS_CONTEXT"
|
|
93
|
+
|
|
94
|
+
# Extract first domain from domains array
|
|
95
|
+
extract_first_domain() {
|
|
96
|
+
local domains_json="$1"
|
|
97
|
+
echo "$domains_json" | jq -r '.[0] // ""'
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
# Convert JSON array to comma-separated string
|
|
101
|
+
json_array_to_csv() {
|
|
102
|
+
local json_array="$1"
|
|
103
|
+
echo "$json_array" | jq -r 'join(",")'
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# Build current-tags (pass through JSON array)
|
|
107
|
+
CURRENT_TAGS="$KEYWORDS_QUERY"
|
|
108
|
+
|
|
109
|
+
# Extract primary domain from DOMAINS_QUERY
|
|
110
|
+
CURRENT_DOMAIN=$(extract_first_domain "$DOMAINS_QUERY")
|
|
111
|
+
|
|
112
|
+
# Build current-agents comma-separated list from AGENTS_QUERY
|
|
113
|
+
CURRENT_AGENTS=$(json_array_to_csv "$AGENTS_QUERY")
|
|
114
|
+
|
|
115
|
+
# Build historical-record JSON structure
|
|
116
|
+
HISTORICAL_RECORD=$(jq -n \
|
|
117
|
+
--argjson tags "$KEYWORDS_CONTEXT" \
|
|
118
|
+
--arg domain "$(extract_first_domain "$DOMAINS_CONTEXT")" \
|
|
119
|
+
--arg agents "$(json_array_to_csv "$AGENTS_CONTEXT")" \
|
|
120
|
+
--arg timestamp "$CREATED_AT" \
|
|
121
|
+
--argjson confidence "$SUCCESS_RATE" \
|
|
122
|
+
'{
|
|
123
|
+
tags: $tags,
|
|
124
|
+
domain: $domain,
|
|
125
|
+
agents: $agents,
|
|
126
|
+
timestamp: $timestamp,
|
|
127
|
+
confidence: $confidence
|
|
128
|
+
}')
|
|
129
|
+
|
|
130
|
+
# Execute backend implementation with transformed parameters
|
|
131
|
+
"$SCRIPT_DIR/score-relevance.sh" \
|
|
132
|
+
--current-tags "$CURRENT_TAGS" \
|
|
133
|
+
--current-domain "$CURRENT_DOMAIN" \
|
|
134
|
+
--current-agents "$CURRENT_AGENTS" \
|
|
135
|
+
--historical-record "$HISTORICAL_RECORD"
|
|
136
|
+
|
|
137
|
+
# Exit with backend script's exit code
|
|
138
|
+
exit $?
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# score-relevance.sh - Multi-factor relevance scoring for ACE System
|
|
3
|
+
# Part of ACE System Phase 2.2
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Default values
|
|
8
|
+
CURRENT_TAGS=""
|
|
9
|
+
CURRENT_DOMAIN=""
|
|
10
|
+
CURRENT_AGENTS=""
|
|
11
|
+
HISTORICAL_RECORD=""
|
|
12
|
+
TIME_DECAY_FACTOR=30 # Days for exponential decay
|
|
13
|
+
|
|
14
|
+
# Weight factors (must sum to 1.0)
|
|
15
|
+
WEIGHT_KEYWORD=0.30
|
|
16
|
+
WEIGHT_AGENT=0.25
|
|
17
|
+
WEIGHT_DOMAIN=0.20
|
|
18
|
+
WEIGHT_RECENCY=0.15
|
|
19
|
+
WEIGHT_SUCCESS=0.10
|
|
20
|
+
|
|
21
|
+
# Usage function
|
|
22
|
+
usage() {
|
|
23
|
+
cat <<EOF
|
|
24
|
+
Usage: $0 [OPTIONS]
|
|
25
|
+
|
|
26
|
+
Calculate relevance score between current task and historical context
|
|
27
|
+
|
|
28
|
+
OPTIONS:
|
|
29
|
+
--current-tags JSON JSON array of current task tags
|
|
30
|
+
--current-domain TEXT Current task domain
|
|
31
|
+
--current-agents TEXT Comma-separated current agent types
|
|
32
|
+
--historical-record JSON Historical context record JSON
|
|
33
|
+
--time-decay-factor NUM Days for time decay (default: 30)
|
|
34
|
+
-h, --help Show this help message
|
|
35
|
+
|
|
36
|
+
WEIGHTS (configurable in script):
|
|
37
|
+
Keyword similarity: 30% (Jaccard index)
|
|
38
|
+
Agent type overlap: 25% (% same agents)
|
|
39
|
+
Domain match: 20% (exact=1.0, overlap=0.5, none=0.0)
|
|
40
|
+
Recency score: 15% (exp(-days_old / 30))
|
|
41
|
+
Success rate: 10% (historical confidence)
|
|
42
|
+
|
|
43
|
+
EXAMPLES:
|
|
44
|
+
$0 --current-tags '["backend","authentication","jwt"]' \\
|
|
45
|
+
--current-domain "security" \\
|
|
46
|
+
--current-agents "backend-dev,security-specialist" \\
|
|
47
|
+
--historical-record '{"tags":["backend","auth","oauth"],"domain":"security","agents":"backend-dev","timestamp":"2025-10-25","confidence":0.92}'
|
|
48
|
+
|
|
49
|
+
OUTPUT:
|
|
50
|
+
Single relevance score: 0.0 - 1.0
|
|
51
|
+
EOF
|
|
52
|
+
exit 1
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Parse arguments
|
|
56
|
+
while [[ $# -gt 0 ]]; do
|
|
57
|
+
case $1 in
|
|
58
|
+
--current-tags)
|
|
59
|
+
CURRENT_TAGS="$2"
|
|
60
|
+
shift 2
|
|
61
|
+
;;
|
|
62
|
+
--current-domain)
|
|
63
|
+
CURRENT_DOMAIN="$2"
|
|
64
|
+
shift 2
|
|
65
|
+
;;
|
|
66
|
+
--current-agents)
|
|
67
|
+
CURRENT_AGENTS="$2"
|
|
68
|
+
shift 2
|
|
69
|
+
;;
|
|
70
|
+
--historical-record)
|
|
71
|
+
HISTORICAL_RECORD="$2"
|
|
72
|
+
shift 2
|
|
73
|
+
;;
|
|
74
|
+
--time-decay-factor)
|
|
75
|
+
TIME_DECAY_FACTOR="$2"
|
|
76
|
+
shift 2
|
|
77
|
+
;;
|
|
78
|
+
-h|--help)
|
|
79
|
+
usage
|
|
80
|
+
;;
|
|
81
|
+
*)
|
|
82
|
+
echo "Error: Unknown option: $1" >&2
|
|
83
|
+
usage
|
|
84
|
+
;;
|
|
85
|
+
esac
|
|
86
|
+
done
|
|
87
|
+
|
|
88
|
+
# Validate required parameters
|
|
89
|
+
if [[ -z "$CURRENT_TAGS" ]] || [[ -z "$HISTORICAL_RECORD" ]]; then
|
|
90
|
+
echo "Error: --current-tags and --historical-record are required" >&2
|
|
91
|
+
usage
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
# Calculate Jaccard similarity between two JSON arrays
|
|
95
|
+
# Formula: |A ∩ B| / |A ∪ B|
|
|
96
|
+
calculate_jaccard_similarity() {
|
|
97
|
+
local array1="$1"
|
|
98
|
+
local array2="$2"
|
|
99
|
+
|
|
100
|
+
# Get unique elements in both arrays
|
|
101
|
+
local union=$(jq -s 'add | unique' <(echo "$array1") <(echo "$array2") | jq 'length')
|
|
102
|
+
|
|
103
|
+
# Get intersection (elements in both)
|
|
104
|
+
local intersection=$(jq -s '.[0] as $a | .[1] as $b | $a | map(select(. as $x | $b | index($x) != null)) | unique | length' <(echo "$array1") <(echo "$array2"))
|
|
105
|
+
|
|
106
|
+
# Avoid division by zero
|
|
107
|
+
if [[ $union -eq 0 ]]; then
|
|
108
|
+
echo "0.0"
|
|
109
|
+
return
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
# Calculate Jaccard index
|
|
113
|
+
local similarity=$(echo "scale=4; $intersection / $union" | bc)
|
|
114
|
+
echo "$similarity"
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
# Calculate agent overlap score
|
|
118
|
+
# Percentage of agents that match
|
|
119
|
+
calculate_agent_overlap() {
|
|
120
|
+
local current_agents="$1"
|
|
121
|
+
local historical_agents="$2"
|
|
122
|
+
|
|
123
|
+
# Convert comma-separated to JSON arrays
|
|
124
|
+
local current_array=$(echo "$current_agents" | tr ',' '\n' | jq -R . | jq -s 'map(select(length > 0))')
|
|
125
|
+
local historical_array=$(echo "$historical_agents" | tr ',' '\n' | jq -R . | jq -s 'map(select(length > 0))')
|
|
126
|
+
|
|
127
|
+
# Calculate Jaccard similarity for agents
|
|
128
|
+
local overlap=$(calculate_jaccard_similarity "$current_array" "$historical_array")
|
|
129
|
+
echo "$overlap"
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
# Calculate domain match score
|
|
133
|
+
# exact match=1.0, partial overlap=0.5, no match=0.0
|
|
134
|
+
calculate_domain_match() {
|
|
135
|
+
local current_domain="$1"
|
|
136
|
+
local historical_domain="$2"
|
|
137
|
+
|
|
138
|
+
# Normalize to lowercase
|
|
139
|
+
current_domain=$(echo "$current_domain" | tr '[:upper:]' '[:lower:]')
|
|
140
|
+
historical_domain=$(echo "$historical_domain" | tr '[:upper:]' '[:lower:]')
|
|
141
|
+
|
|
142
|
+
# Exact match
|
|
143
|
+
if [[ "$current_domain" == "$historical_domain" ]]; then
|
|
144
|
+
echo "1.0"
|
|
145
|
+
return
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
# Check for partial overlap (substring match in either direction)
|
|
149
|
+
if [[ -n "$current_domain" ]] && [[ -n "$historical_domain" ]]; then
|
|
150
|
+
if [[ "$current_domain" == *"$historical_domain"* ]] || [[ "$historical_domain" == *"$current_domain"* ]]; then
|
|
151
|
+
echo "0.5"
|
|
152
|
+
return
|
|
153
|
+
fi
|
|
154
|
+
fi
|
|
155
|
+
|
|
156
|
+
# No match
|
|
157
|
+
echo "0.0"
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
# Calculate recency score with exponential decay
|
|
161
|
+
# Formula: exp(-days_old / decay_factor)
|
|
162
|
+
calculate_recency_score() {
|
|
163
|
+
local timestamp="$1"
|
|
164
|
+
local decay_factor="$2"
|
|
165
|
+
|
|
166
|
+
# Get current date and historical date in epoch seconds
|
|
167
|
+
local current_epoch=$(date +%s)
|
|
168
|
+
local historical_epoch=$(date -d "$timestamp" +%s 2>/dev/null || echo "0")
|
|
169
|
+
|
|
170
|
+
# Handle invalid timestamps
|
|
171
|
+
if [[ $historical_epoch -eq 0 ]]; then
|
|
172
|
+
echo "0.0"
|
|
173
|
+
return
|
|
174
|
+
fi
|
|
175
|
+
|
|
176
|
+
# Calculate days difference
|
|
177
|
+
local seconds_diff=$((current_epoch - historical_epoch))
|
|
178
|
+
local days_diff=$(echo "scale=4; $seconds_diff / 86400" | bc)
|
|
179
|
+
|
|
180
|
+
# Exponential decay: e^(-days / decay_factor)
|
|
181
|
+
# Use awk for exponential calculation (bc doesn't support exp)
|
|
182
|
+
local recency=$(awk -v days="$days_diff" -v factor="$decay_factor" 'BEGIN { print exp(-days / factor) }')
|
|
183
|
+
|
|
184
|
+
# Ensure non-negative
|
|
185
|
+
if (( $(echo "$recency < 0" | bc -l) )); then
|
|
186
|
+
echo "0.0"
|
|
187
|
+
else
|
|
188
|
+
printf "%.4f" "$recency"
|
|
189
|
+
fi
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
# Calculate success rate score
|
|
193
|
+
# Use historical confidence as proxy for success
|
|
194
|
+
calculate_success_score() {
|
|
195
|
+
local confidence="$1"
|
|
196
|
+
|
|
197
|
+
# Validate range 0.0-1.0
|
|
198
|
+
if (( $(echo "$confidence < 0.0" | bc -l) )); then
|
|
199
|
+
echo "0.0"
|
|
200
|
+
elif (( $(echo "$confidence > 1.0" | bc -l) )); then
|
|
201
|
+
echo "1.0"
|
|
202
|
+
else
|
|
203
|
+
printf "%.4f" "$confidence"
|
|
204
|
+
fi
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
# Main scoring function
|
|
208
|
+
calculate_relevance_score() {
|
|
209
|
+
local current_tags="$1"
|
|
210
|
+
local current_domain="$2"
|
|
211
|
+
local current_agents="$3"
|
|
212
|
+
local historical_record="$4"
|
|
213
|
+
|
|
214
|
+
# Extract historical data
|
|
215
|
+
local historical_tags=$(echo "$historical_record" | jq -r '.tags // []' | jq -c .)
|
|
216
|
+
local historical_domain=$(echo "$historical_record" | jq -r '.domain // ""')
|
|
217
|
+
local historical_agents=$(echo "$historical_record" | jq -r '.agents // ""')
|
|
218
|
+
local historical_timestamp=$(echo "$historical_record" | jq -r '.timestamp // ""')
|
|
219
|
+
local historical_confidence=$(echo "$historical_record" | jq -r '.confidence // 0.0')
|
|
220
|
+
|
|
221
|
+
# Calculate component scores
|
|
222
|
+
local keyword_score=$(calculate_jaccard_similarity "$current_tags" "$historical_tags")
|
|
223
|
+
local agent_score=$(calculate_agent_overlap "$current_agents" "$historical_agents")
|
|
224
|
+
local domain_score=$(calculate_domain_match "$current_domain" "$historical_domain")
|
|
225
|
+
local recency_score=$(calculate_recency_score "$historical_timestamp" "$TIME_DECAY_FACTOR")
|
|
226
|
+
local success_score=$(calculate_success_score "$historical_confidence")
|
|
227
|
+
|
|
228
|
+
# Calculate weighted total
|
|
229
|
+
local total_score=$(awk -v kw="$keyword_score" -v kww="$WEIGHT_KEYWORD" \
|
|
230
|
+
-v ag="$agent_score" -v agw="$WEIGHT_AGENT" \
|
|
231
|
+
-v dm="$domain_score" -v dmw="$WEIGHT_DOMAIN" \
|
|
232
|
+
-v rc="$recency_score" -v rcw="$WEIGHT_RECENCY" \
|
|
233
|
+
-v sc="$success_score" -v scw="$WEIGHT_SUCCESS" \
|
|
234
|
+
'BEGIN { print (kw * kww) + (ag * agw) + (dm * dmw) + (rc * rcw) + (sc * scw) }')
|
|
235
|
+
|
|
236
|
+
# Ensure score is in range 0.0-1.0
|
|
237
|
+
if (( $(echo "$total_score < 0.0" | bc -l) )); then
|
|
238
|
+
total_score="0.0"
|
|
239
|
+
elif (( $(echo "$total_score > 1.0" | bc -l) )); then
|
|
240
|
+
total_score="1.0"
|
|
241
|
+
fi
|
|
242
|
+
|
|
243
|
+
printf "%.2f" "$total_score"
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
# Main execution
|
|
247
|
+
main() {
|
|
248
|
+
local relevance_score=$(calculate_relevance_score "$CURRENT_TAGS" "$CURRENT_DOMAIN" "$CURRENT_AGENTS" "$HISTORICAL_RECORD")
|
|
249
|
+
echo "$relevance_score"
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
# Run main
|
|
253
|
+
main
|