claude-flow-novice 2.14.3 → 2.14.5
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/commands/CFN_LOOP_TASK_MODE.md +4 -47
- package/.claude/commands/seo/SEO_TASK_MODE.md +892 -0
- package/.claude/commands/seo/seo-blog.md +428 -0
- package/.claude/commands/seo/seo-landing.md +91 -0
- package/.claude/commands/seo/seo-product.md +104 -0
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
- package/claude-assets/agents/cfn-dev-team/coordinators/epic-creator.md +120 -0
- package/claude-assets/agents/cfn-seo-team/AGENT_CREATION_REPORT.md +481 -0
- package/claude-assets/agents/cfn-seo-team/DELEGATION_MATRIX.md +371 -0
- package/claude-assets/agents/cfn-seo-team/HUMANIZER_PROMPTS.md +536 -0
- package/claude-assets/agents/cfn-seo-team/INTEGRATION_REQUIREMENTS.md +642 -0
- package/claude-assets/agents/cfn-seo-team/cfn-seo-coordinator.md +414 -0
- package/claude-assets/agents/cfn-seo-team/competitive-seo-analyst.md +423 -0
- package/claude-assets/agents/cfn-seo-team/content-atomization-specialist.md +580 -0
- package/claude-assets/agents/cfn-seo-team/content-seo-strategist.md +245 -0
- package/claude-assets/agents/cfn-seo-team/eeat-content-auditor.md +389 -0
- package/claude-assets/agents/cfn-seo-team/geo-optimization-expert.md +269 -0
- package/claude-assets/agents/cfn-seo-team/link-building-specialist.md +291 -0
- package/claude-assets/agents/cfn-seo-team/local-seo-optimizer.md +333 -0
- package/claude-assets/agents/cfn-seo-team/programmatic-seo-engineer.md +244 -0
- package/claude-assets/agents/cfn-seo-team/schema-markup-engineer.md +430 -0
- package/claude-assets/agents/cfn-seo-team/seo-analytics-specialist.md +376 -0
- package/claude-assets/agents/cfn-seo-team/seo-validators/accessibility-validator.md +565 -0
- package/claude-assets/agents/cfn-seo-team/seo-validators/audience-validator.md +484 -0
- package/claude-assets/agents/cfn-seo-team/seo-validators/branding-validator.md +452 -0
- package/claude-assets/agents/cfn-seo-team/seo-validators/humanizer-validator.md +333 -0
- package/claude-assets/agents/cfn-seo-team/technical-seo-specialist.md +228 -0
- package/claude-assets/commands/CFN_LOOP_TASK_MODE.md +4 -47
- package/claude-assets/commands/seo/SEO_TASK_MODE.md +892 -0
- package/claude-assets/commands/seo/seo-blog.md +428 -0
- package/claude-assets/commands/seo/seo-landing.md +91 -0
- package/claude-assets/commands/seo/seo-product.md +104 -0
- package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -276
- package/claude-assets/skills/seo-orchestration/SKILL.md +292 -0
- package/claude-assets/skills/seo-orchestration/orchestrate-seo.sh +566 -0
- package/claude-assets/skills/seo-orchestration/orchestrate-seo.sh.backup +755 -0
- package/claude-assets/skills/seo-orchestration/validate-consensus.sh +270 -0
- package/dist/agents/agent-loader.js +165 -146
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +25 -0
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/package.json +1 -1
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
- package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
- package/.claude/skills/cfn-redis-coordination/LOGGING.md +0 -260
- package/.claude/skills/cfn-redis-coordination/README.md +0 -65
- package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
- package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
- package/.claude/skills/cfn-redis-coordination/SKILL.md +0 -720
- package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
- package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
- package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
- package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
- package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
- package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
- package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
- package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
- package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
- package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
- package/.claude/skills/cfn-redis-coordination/examples/README.md +0 -73
- package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
- package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
- package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
- package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
- package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
- package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
- package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
- package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
- package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
- package/.claude/skills/cfn-redis-coordination/heartbeat.sh +0 -126
- package/.claude/skills/cfn-redis-coordination/init-swarm.sh +0 -148
- package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
- package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
- package/.claude/skills/cfn-redis-coordination/log-event.sh +0 -109
- package/.claude/skills/cfn-redis-coordination/metrics-export.sh +0 -674
- package/.claude/skills/cfn-redis-coordination/metrics-schema.json +0 -66
- package/.claude/skills/cfn-redis-coordination/metrics-storage.md +0 -31
- package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
- package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
- package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
- package/.claude/skills/cfn-redis-coordination/priority_wake.py +0 -134
- package/.claude/skills/cfn-redis-coordination/query-dlq.sh +0 -162
- package/.claude/skills/cfn-redis-coordination/query-logs.sh +0 -103
- package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
- package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
- package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
- package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
- package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
- package/.claude/skills/cfn-redis-coordination/signal.sh +0 -38
- package/.claude/skills/cfn-redis-coordination/store-context.sh +0 -86
- package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
- package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
- package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
- package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
- package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
- package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
- package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
- package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
- package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
- package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
- package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
- package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
- package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
- package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
- package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
- package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
- package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT.md +0 -57
- package/claude-assets/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +0 -267
- package/claude-assets/skills/cfn-redis-coordination/LOGGING.md +0 -260
- package/claude-assets/skills/cfn-redis-coordination/README.md +0 -65
- package/claude-assets/skills/cfn-redis-coordination/SECURITY_REVIEW.md +0 -25
- package/claude-assets/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +0 -164
- package/claude-assets/skills/cfn-redis-coordination/SKILL.md +0 -720
- package/claude-assets/skills/cfn-redis-coordination/demos/test-dlq.sh +0 -129
- package/claude-assets/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +0 -320
- package/claude-assets/skills/cfn-redis-coordination/demos/test-orchestrator.sh +0 -249
- package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +0 -148
- package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +0 -163
- package/claude-assets/skills/cfn-redis-coordination/demos/test-priority-wake.sh +0 -138
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quick-fix.sh +0 -81
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +0 -45
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +0 -68
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +0 -56
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +0 -81
- package/claude-assets/skills/cfn-redis-coordination/demos/test-quorum.sh +0 -57
- package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +0 -187
- package/claude-assets/skills/cfn-redis-coordination/demos/test-shutdown.sh +0 -160
- package/claude-assets/skills/cfn-redis-coordination/demos/test-utils-unix.sh +0 -97
- package/claude-assets/skills/cfn-redis-coordination/demos/test-utils.sh +0 -97
- package/claude-assets/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +0 -59
- package/claude-assets/skills/cfn-redis-coordination/examples/README.md +0 -73
- package/claude-assets/skills/cfn-redis-coordination/examples/grafana-dashboard.json +0 -352
- package/claude-assets/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +0 -127
- package/claude-assets/skills/cfn-redis-coordination/examples/mesh-pattern.sh +0 -171
- package/claude-assets/skills/cfn-redis-coordination/examples/timeout-handling.sh +0 -227
- package/claude-assets/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +0 -239
- package/claude-assets/skills/cfn-redis-coordination/execute-product-owner-decision.sh +0 -258
- package/claude-assets/skills/cfn-redis-coordination/get-agent-timeout.sh +0 -177
- package/claude-assets/skills/cfn-redis-coordination/heartbeat-functions.sh +0 -137
- package/claude-assets/skills/cfn-redis-coordination/heartbeat-protocol.md +0 -106
- package/claude-assets/skills/cfn-redis-coordination/heartbeat.sh +0 -126
- package/claude-assets/skills/cfn-redis-coordination/init-swarm.sh +0 -148
- package/claude-assets/skills/cfn-redis-coordination/invoke-redis-pattern.sh +0 -220
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +0 -283
- package/claude-assets/skills/cfn-redis-coordination/list-active-swarms.sh +0 -147
- package/claude-assets/skills/cfn-redis-coordination/log-event.sh +0 -109
- package/claude-assets/skills/cfn-redis-coordination/metrics-export.sh +0 -674
- package/claude-assets/skills/cfn-redis-coordination/metrics-schema.json +0 -66
- package/claude-assets/skills/cfn-redis-coordination/metrics-storage.md +0 -31
- package/claude-assets/skills/cfn-redis-coordination/monitor-cfn-violations.sh +0 -391
- package/claude-assets/skills/cfn-redis-coordination/monitor-heartbeats.sh +0 -101
- package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +0 -141
- package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +0 -31
- package/claude-assets/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
- package/claude-assets/skills/cfn-redis-coordination/priority-wake-mechanism.md +0 -75
- package/claude-assets/skills/cfn-redis-coordination/priority_wake.py +0 -134
- package/claude-assets/skills/cfn-redis-coordination/query-dlq.sh +0 -162
- package/claude-assets/skills/cfn-redis-coordination/query-logs.sh +0 -103
- package/claude-assets/skills/cfn-redis-coordination/redis-pattern.sh +0 -619
- package/claude-assets/skills/cfn-redis-coordination/retrieve-context.sh +0 -58
- package/claude-assets/skills/cfn-redis-coordination/select-specialist-agent.sh +0 -371
- package/claude-assets/skills/cfn-redis-coordination/semantic-match-tfidf.py +0 -252
- package/claude-assets/skills/cfn-redis-coordination/send-heartbeat.sh +0 -165
- package/claude-assets/skills/cfn-redis-coordination/signal.sh +0 -38
- package/claude-assets/skills/cfn-redis-coordination/store-context.sh +0 -86
- package/claude-assets/skills/cfn-redis-coordination/store-epic-context.sh +0 -123
- package/claude-assets/skills/cfn-redis-coordination/test-context-injection.sh +0 -354
- package/claude-assets/skills/cfn-redis-coordination/test-timeout-enforcement.sh +0 -513
- package/claude-assets/skills/cfn-redis-coordination/tests/convert-line-endings.sh +0 -15
- package/claude-assets/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +0 -102
- package/claude-assets/skills/cfn-redis-coordination/tests/edge-cases-test.sh +0 -99
- package/claude-assets/skills/cfn-redis-coordination/tests/integration-test.sh +0 -170
- package/claude-assets/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +0 -82
- package/claude-assets/skills/cfn-redis-coordination/tests/run-test-suite.sh +0 -92
- package/claude-assets/skills/cfn-redis-coordination/tests/run-tests.sh +0 -4
- package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +0 -418
- package/claude-assets/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +0 -124
- package/claude-assets/skills/cfn-redis-coordination/tests/test-primitives.sh +0 -166
- package/claude-assets/skills/cfn-redis-coordination/tests/test-utils.sh +0 -54
- package/claude-assets/skills/cfn-redis-coordination/tests/test_utils.sh +0 -49
- package/claude-assets/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +0 -76
- package/claude-assets/skills/cfn-redis-coordination/validate-parameters.sh +0 -492
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# select-specialist-agent.sh
|
|
4
|
-
# Adaptive agent specialization based on feedback type
|
|
5
|
-
# Part of CFN Loop Robustness & Validation Enhancement
|
|
6
|
-
|
|
7
|
-
set -euo pipefail
|
|
8
|
-
|
|
9
|
-
# Script configuration
|
|
10
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
|
-
SPECIALIST_REGISTRY="$SCRIPT_DIR/specialist-registry.json"
|
|
12
|
-
|
|
13
|
-
# Default agent when no specialist match found
|
|
14
|
-
DEFAULT_AGENT="general-dev"
|
|
15
|
-
|
|
16
|
-
# Colors for output
|
|
17
|
-
RED='\033[0;31m'
|
|
18
|
-
GREEN='\033[0;32m'
|
|
19
|
-
YELLOW='\033[1;33m'
|
|
20
|
-
BLUE='\033[0;34m'
|
|
21
|
-
NC='\033[0m' # No Color
|
|
22
|
-
|
|
23
|
-
# Logging function
|
|
24
|
-
log() {
|
|
25
|
-
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')] SPECIALIST-SELECTOR:${NC} $1"
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
error() {
|
|
29
|
-
echo -e "${RED}[ERROR]${NC} $1" >&2
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
success() {
|
|
33
|
-
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
warning() {
|
|
37
|
-
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
# Show usage information
|
|
41
|
-
show_usage() {
|
|
42
|
-
cat << EOF
|
|
43
|
-
Adaptive Agent Specialist Selector
|
|
44
|
-
|
|
45
|
-
USAGE:
|
|
46
|
-
$0 --feedback-type <TYPE> [OPTIONS]
|
|
47
|
-
$0 --feedback-text <TEXT> [OPTIONS]
|
|
48
|
-
|
|
49
|
-
REQUIRED:
|
|
50
|
-
--feedback-type <TYPE> Direct feedback category (CRITICAL|WARNING|SUGGESTION|PERFORMANCE|SECURITY|ARCHITECTURE|TESTING|DOCUMENTATION)
|
|
51
|
-
--feedback-text <TEXT> Analyze feedback text to categorize
|
|
52
|
-
|
|
53
|
-
OPTIONS:
|
|
54
|
-
--task-id <ID> Task identifier for logging
|
|
55
|
-
--iteration <N> Iteration number (default: 1)
|
|
56
|
-
--confidence <SCORE> Confidence threshold for auto-selection (default: 0.7)
|
|
57
|
-
--default-agent <AGENT> Fallback agent when no match (default: general-dev)
|
|
58
|
-
--dry-run Show selection without spawning
|
|
59
|
-
--verbose Detailed logging output
|
|
60
|
-
--help Show this help message
|
|
61
|
-
|
|
62
|
-
EXAMPLES:
|
|
63
|
-
# Direct feedback type selection
|
|
64
|
-
$0 --feedback-type SECURITY --task-id "task-123" --iteration 2
|
|
65
|
-
|
|
66
|
-
# Analyze feedback text automatically
|
|
67
|
-
$0 --feedback-text "Memory leak detected in authentication module" --task-id "task-123"
|
|
68
|
-
|
|
69
|
-
# Dry run to test selection logic
|
|
70
|
-
$0 --feedback-text "Database query is slow" --dry-run --verbose
|
|
71
|
-
|
|
72
|
-
SPECIALIST CATEGORIES:
|
|
73
|
-
SECURITY → security-specialist
|
|
74
|
-
PERFORMANCE → performance-specialist
|
|
75
|
-
ARCHITECTURE → architecture-specialist
|
|
76
|
-
TESTING → testing-specialist
|
|
77
|
-
DOCUMENTATION → documentation-specialist
|
|
78
|
-
CRITICAL → security-specialist (default for critical issues)
|
|
79
|
-
WARNING → architecture-specialist (default for warnings)
|
|
80
|
-
SUGGESTION → general-dev (default for suggestions)
|
|
81
|
-
|
|
82
|
-
EOF
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
# Parse command line arguments
|
|
86
|
-
parse_args() {
|
|
87
|
-
FEEDBACK_TYPE=""
|
|
88
|
-
FEEDBACK_TEXT=""
|
|
89
|
-
TASK_ID=""
|
|
90
|
-
ITERATION="1"
|
|
91
|
-
CONFIDENCE="0.7"
|
|
92
|
-
DRY_RUN=false
|
|
93
|
-
VERBOSE=false
|
|
94
|
-
|
|
95
|
-
while [[ $# -gt 0 ]]; do
|
|
96
|
-
case $1 in
|
|
97
|
-
--feedback-type)
|
|
98
|
-
FEEDBACK_TYPE="$2"
|
|
99
|
-
shift 2
|
|
100
|
-
;;
|
|
101
|
-
--feedback-text)
|
|
102
|
-
FEEDBACK_TEXT="$2"
|
|
103
|
-
shift 2
|
|
104
|
-
;;
|
|
105
|
-
--task-id)
|
|
106
|
-
TASK_ID="$2"
|
|
107
|
-
shift 2
|
|
108
|
-
;;
|
|
109
|
-
--iteration)
|
|
110
|
-
ITERATION="$2"
|
|
111
|
-
shift 2
|
|
112
|
-
;;
|
|
113
|
-
--confidence)
|
|
114
|
-
CONFIDENCE="$2"
|
|
115
|
-
shift 2
|
|
116
|
-
;;
|
|
117
|
-
--default-agent)
|
|
118
|
-
DEFAULT_AGENT="$2"
|
|
119
|
-
shift 2
|
|
120
|
-
;;
|
|
121
|
-
--dry-run)
|
|
122
|
-
DRY_RUN=true
|
|
123
|
-
shift
|
|
124
|
-
;;
|
|
125
|
-
--verbose)
|
|
126
|
-
VERBOSE=true
|
|
127
|
-
shift
|
|
128
|
-
;;
|
|
129
|
-
--help)
|
|
130
|
-
show_usage
|
|
131
|
-
exit 0
|
|
132
|
-
;;
|
|
133
|
-
*)
|
|
134
|
-
error "Unknown option: $1"
|
|
135
|
-
show_usage
|
|
136
|
-
exit 1
|
|
137
|
-
;;
|
|
138
|
-
esac
|
|
139
|
-
done
|
|
140
|
-
|
|
141
|
-
# Validate required arguments
|
|
142
|
-
if [[ -z "$FEEDBACK_TYPE" && -z "$FEEDBACK_TEXT" ]]; then
|
|
143
|
-
error "Either --feedback-type or --feedback-text is required"
|
|
144
|
-
show_usage
|
|
145
|
-
exit 1
|
|
146
|
-
fi
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
# Analyze feedback text to determine category
|
|
150
|
-
analyze_feedback_text() {
|
|
151
|
-
local text="$1"
|
|
152
|
-
local feedback_type=""
|
|
153
|
-
|
|
154
|
-
if [[ "$VERBOSE" == true ]]; then
|
|
155
|
-
log "Analyzing feedback text: '$text'"
|
|
156
|
-
fi
|
|
157
|
-
|
|
158
|
-
# Security keywords
|
|
159
|
-
if echo "$text" | grep -qiE "(security|vulnerability|auth|password|token|injection|xss|csrf|encryption|ssl|tls|hack|breach|malicious)"; then
|
|
160
|
-
feedback_type="SECURITY"
|
|
161
|
-
# Performance keywords
|
|
162
|
-
elif echo "$text" | grep -qiE "(performance|slow|memory|leak|cpu|optimization|cache|bottleneck|latency|throughput|scale|efficiency)"; then
|
|
163
|
-
feedback_type="PERFORMANCE"
|
|
164
|
-
# Architecture keywords
|
|
165
|
-
elif echo "$text" | grep -qiE "(architecture|design|pattern|structure|modular|coupling|cohesion|scalability|maintainability|refactor|component)"; then
|
|
166
|
-
feedback_type="ARCHITECTURE"
|
|
167
|
-
# Testing keywords
|
|
168
|
-
elif echo "$text" | grep -qiE "(test|testing|coverage|unit|integration|e2e|tdd|assert|mock|fixture|spec|validate)"; then
|
|
169
|
-
feedback_type="TESTING"
|
|
170
|
-
# Documentation keywords
|
|
171
|
-
elif echo "$text" | grep -qiE "(documentation|doc|readme|guide|manual|comment|explain|clarify|instruction|tutorial)"; then
|
|
172
|
-
feedback_type="DOCUMENTATION"
|
|
173
|
-
# Critical severity indicators
|
|
174
|
-
elif echo "$text" | grep -qiE "(critical|urgent|broken|failed|crash|error|exception|blocker|showstopper)"; then
|
|
175
|
-
feedback_type="CRITICAL"
|
|
176
|
-
# Warning indicators
|
|
177
|
-
elif echo "$text" | grep -qiE "(warning|caution|risk|potential|should|recommend|consider|improve)"; then
|
|
178
|
-
feedback_type="WARNING"
|
|
179
|
-
else
|
|
180
|
-
feedback_type="SUGGESTION"
|
|
181
|
-
fi
|
|
182
|
-
|
|
183
|
-
if [[ "$VERBOSE" == true ]]; then
|
|
184
|
-
log "Detected feedback type: $feedback_type"
|
|
185
|
-
fi
|
|
186
|
-
|
|
187
|
-
echo "$feedback_type"
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
# Initialize specialist registry
|
|
191
|
-
initialize_registry() {
|
|
192
|
-
if [[ ! -f "$SPECIALIST_REGISTRY" ]]; then
|
|
193
|
-
log "Creating specialist registry"
|
|
194
|
-
mkdir -p "$(dirname "$SPECIALIST_REGISTRY")"
|
|
195
|
-
cat > "$SPECIALIST_REGISTRY" << 'EOF'
|
|
196
|
-
{
|
|
197
|
-
"specialists": {
|
|
198
|
-
"security": {
|
|
199
|
-
"agent": "security-specialist",
|
|
200
|
-
"keywords": ["security", "vulnerability", "auth", "password", "token", "injection", "xss", "csrf", "encryption", "ssl", "tls", "hack", "breach", "malicious"],
|
|
201
|
-
"feedback_types": ["SECURITY", "CRITICAL"],
|
|
202
|
-
"capabilities": ["Security analysis", "Vulnerability assessment", "Authentication/Authorization", "Encryption implementation", "Security testing"],
|
|
203
|
-
"confidence_threshold": 0.8
|
|
204
|
-
},
|
|
205
|
-
"performance": {
|
|
206
|
-
"agent": "performance-specialist",
|
|
207
|
-
"keywords": ["performance", "slow", "memory", "leak", "cpu", "optimization", "cache", "bottleneck", "latency", "throughput", "scale", "efficiency"],
|
|
208
|
-
"feedback_types": ["PERFORMANCE"],
|
|
209
|
-
"capabilities": ["Performance profiling", "Memory optimization", "Caching strategies", "Load testing", "Benchmarking"],
|
|
210
|
-
"confidence_threshold": 0.75
|
|
211
|
-
},
|
|
212
|
-
"architecture": {
|
|
213
|
-
"agent": "architecture-specialist",
|
|
214
|
-
"keywords": ["architecture", "design", "pattern", "structure", "modular", "coupling", "cohesion", "scalability", "maintainability", "refactor", "component"],
|
|
215
|
-
"feedback_types": ["ARCHITECTURE", "WARNING"],
|
|
216
|
-
"capabilities": ["System design", "Pattern implementation", "Refactoring", "Modularity", "Scalability planning"],
|
|
217
|
-
"confidence_threshold": 0.7
|
|
218
|
-
},
|
|
219
|
-
"testing": {
|
|
220
|
-
"agent": "testing-specialist",
|
|
221
|
-
"keywords": ["test", "testing", "coverage", "unit", "integration", "e2e", "tdd", "assert", "mock", "fixture", "spec", "validate"],
|
|
222
|
-
"feedback_types": ["TESTING"],
|
|
223
|
-
"capabilities": ["Test design", "Test automation", "Coverage analysis", "Test-driven development", "Quality assurance"],
|
|
224
|
-
"confidence_threshold": 0.75
|
|
225
|
-
},
|
|
226
|
-
"documentation": {
|
|
227
|
-
"agent": "documentation-specialist",
|
|
228
|
-
"keywords": ["documentation", "doc", "readme", "guide", "manual", "comment", "explain", "clarify", "instruction", "tutorial"],
|
|
229
|
-
"feedback_types": ["DOCUMENTATION"],
|
|
230
|
-
"capabilities": ["Technical writing", "API documentation", "User guides", "Code comments", "Tutorial creation"],
|
|
231
|
-
"confidence_threshold": 0.65
|
|
232
|
-
}
|
|
233
|
-
},
|
|
234
|
-
"fallback_mappings": {
|
|
235
|
-
"CRITICAL": "security",
|
|
236
|
-
"WARNING": "architecture",
|
|
237
|
-
"SUGGESTION": "general"
|
|
238
|
-
},
|
|
239
|
-
"version": "1.0.0",
|
|
240
|
-
"last_updated": "2025-06-17"
|
|
241
|
-
}
|
|
242
|
-
EOF
|
|
243
|
-
log "Specialist registry initialized at $SPECIALIST_REGISTRY"
|
|
244
|
-
fi
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
# Select specialist agent based on feedback type
|
|
248
|
-
select_specialist() {
|
|
249
|
-
local feedback_type="$1"
|
|
250
|
-
local specialist_type=""
|
|
251
|
-
local selected_agent=""
|
|
252
|
-
local confidence=""
|
|
253
|
-
|
|
254
|
-
# Normalize feedback type
|
|
255
|
-
feedback_type=$(echo "$feedback_type" | tr '[:lower:]' '[:upper:]')
|
|
256
|
-
|
|
257
|
-
if [[ "$VERBOSE" == true ]]; then
|
|
258
|
-
log "Selecting specialist for feedback type: $feedback_type"
|
|
259
|
-
fi
|
|
260
|
-
|
|
261
|
-
# Load specialist registry
|
|
262
|
-
if [[ -f "$SPECIALIST_REGISTRY" ]]; then
|
|
263
|
-
# Try direct mapping to specialist type
|
|
264
|
-
specialist_type=$(jq -r ".specialists | to_entries[] | select(.value.feedback_types[] | test(\"^$feedback_type$\"; \"i\")) | .key" "$SPECIALIST_REGISTRY" 2>/dev/null || echo "")
|
|
265
|
-
|
|
266
|
-
# If no direct match, try fallback mappings
|
|
267
|
-
if [[ -z "$specialist_type" ]]; then
|
|
268
|
-
specialist_type=$(jq -r ".fallback_mappings[\"$feedback_type\"] // empty" "$SPECIALIST_REGISTRY" 2>/dev/null || echo "")
|
|
269
|
-
fi
|
|
270
|
-
|
|
271
|
-
# Get agent and confidence if specialist type found
|
|
272
|
-
if [[ -n "$specialist_type" && "$specialist_type" != "null" ]]; then
|
|
273
|
-
selected_agent=$(jq -r ".specialists[\"$specialist_type\"].agent // empty" "$SPECIALIST_REGISTRY" 2>/dev/null || echo "")
|
|
274
|
-
confidence=$(jq -r ".specialists[\"$specialist_type\"].confidence_threshold // $CONFIDENCE" "$SPECIALIST_REGISTRY" 2>/dev/null || echo "$CONFIDENCE")
|
|
275
|
-
fi
|
|
276
|
-
fi
|
|
277
|
-
|
|
278
|
-
# Fallback to default agent if no specialist found
|
|
279
|
-
if [[ -z "$selected_agent" || "$selected_agent" == "null" ]]; then
|
|
280
|
-
selected_agent="$DEFAULT_AGENT"
|
|
281
|
-
confidence="$CONFIDENCE"
|
|
282
|
-
warning "No specialist found for feedback type '$feedback_type', using default agent: $DEFAULT_AGENT"
|
|
283
|
-
else
|
|
284
|
-
success "Selected specialist: $selected_agent (confidence: $confidence)"
|
|
285
|
-
fi
|
|
286
|
-
|
|
287
|
-
echo "$selected_agent:$confidence:$specialist_type"
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
# Spawn specialist agent
|
|
291
|
-
spawn_specialist() {
|
|
292
|
-
local agent="$1"
|
|
293
|
-
local task_id="$2"
|
|
294
|
-
local iteration="$3"
|
|
295
|
-
local specialist_type="$4"
|
|
296
|
-
|
|
297
|
-
if [[ "$DRY_RUN" == true ]]; then
|
|
298
|
-
log "[DRY RUN] Would spawn specialist agent: $agent"
|
|
299
|
-
log "[DRY RUN] Task ID: $task_id"
|
|
300
|
-
log "[DRY RUN] Iteration: $iteration"
|
|
301
|
-
log "[DRY RUN] Specialist type: $specialist_type"
|
|
302
|
-
return 0
|
|
303
|
-
fi
|
|
304
|
-
|
|
305
|
-
log "Spawning specialist agent: $agent"
|
|
306
|
-
|
|
307
|
-
# Spawn agent using CLI
|
|
308
|
-
if command -v npx >/dev/null 2>&1; then
|
|
309
|
-
npx claude-flow-novice spawn agent "$agent" \
|
|
310
|
-
--task-id "$task_id" \
|
|
311
|
-
--iteration "$iteration" \
|
|
312
|
-
--specialist-type "$specialist_type" \
|
|
313
|
-
--feedback-type "$FEEDBACK_TYPE" || {
|
|
314
|
-
error "Failed to spawn specialist agent: $agent"
|
|
315
|
-
return 1
|
|
316
|
-
}
|
|
317
|
-
success "Specialist agent spawned successfully: $agent"
|
|
318
|
-
else
|
|
319
|
-
error "npx command not found. Cannot spawn specialist agent."
|
|
320
|
-
return 1
|
|
321
|
-
fi
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
# Main execution
|
|
325
|
-
main() {
|
|
326
|
-
parse_args "$@"
|
|
327
|
-
|
|
328
|
-
# Initialize registry
|
|
329
|
-
initialize_registry
|
|
330
|
-
|
|
331
|
-
# Determine feedback type
|
|
332
|
-
if [[ -z "$FEEDBACK_TYPE" ]]; then
|
|
333
|
-
FEEDBACK_TYPE=$(analyze_feedback_text "$FEEDBACK_TEXT")
|
|
334
|
-
fi
|
|
335
|
-
|
|
336
|
-
# Select specialist
|
|
337
|
-
local result=$(select_specialist "$FEEDBACK_TYPE")
|
|
338
|
-
local selected_agent=$(echo "$result" | cut -d: -f1)
|
|
339
|
-
local confidence_score=$(echo "$result" | cut -d: -f2)
|
|
340
|
-
local specialist_type=$(echo "$result" | cut -d: -f3)
|
|
341
|
-
|
|
342
|
-
# Log selection details
|
|
343
|
-
if [[ "$VERBOSE" == true ]]; then
|
|
344
|
-
log "Feedback Type: $FEEDBACK_TYPE"
|
|
345
|
-
log "Selected Agent: $selected_agent"
|
|
346
|
-
log "Confidence Score: $confidence_score"
|
|
347
|
-
log "Specialist Type: $specialist_type"
|
|
348
|
-
log "Task ID: ${TASK_ID:-N/A}"
|
|
349
|
-
log "Iteration: $ITERATION"
|
|
350
|
-
fi
|
|
351
|
-
|
|
352
|
-
# Check confidence threshold
|
|
353
|
-
if (( $(echo "$confidence_score >= $CONFIDENCE" | bc -l) )); then
|
|
354
|
-
# Spawn specialist
|
|
355
|
-
spawn_specialist "$selected_agent" "$TASK_ID" "$ITERATION" "$specialist_type"
|
|
356
|
-
|
|
357
|
-
# Return result for orchestrator
|
|
358
|
-
echo "{\"selected_agent\":\"$selected_agent\",\"confidence\":$confidence_score,\"specialist_type\":\"$specialist_type\",\"feedback_type\":\"$FEEDBACK_TYPE\"}"
|
|
359
|
-
else
|
|
360
|
-
warning "Confidence score ($confidence_score) below threshold ($CONFIDENCE), using default agent"
|
|
361
|
-
if [[ "$DRY_RUN" != true ]]; then
|
|
362
|
-
spawn_specialist "$DEFAULT_AGENT" "$TASK_ID" "$ITERATION" "general"
|
|
363
|
-
fi
|
|
364
|
-
echo "{\"selected_agent\":\"$DEFAULT_AGENT\",\"confidence\":$confidence_score,\"specialist_type\":\"general\",\"feedback_type\":\"$FEEDBACK_TYPE\"}"
|
|
365
|
-
fi
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
# Execute main function
|
|
369
|
-
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
370
|
-
main "$@"
|
|
371
|
-
fi
|
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
TF-IDF Semantic Agent Matcher
|
|
4
|
-
|
|
5
|
-
Purpose: Use semantic similarity (TF-IDF + cosine similarity) to match
|
|
6
|
-
task descriptions to optimal agents.
|
|
7
|
-
|
|
8
|
-
Usage:
|
|
9
|
-
./semantic-match-tfidf.py "Build user dashboard" 0.5
|
|
10
|
-
./semantic-match-tfidf.py "Create auth system" --threshold 0.6 --json
|
|
11
|
-
|
|
12
|
-
Output:
|
|
13
|
-
agent1,agent2,agent3 (default)
|
|
14
|
-
{"agents": [...]} (--json)
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
import sys
|
|
18
|
-
import json
|
|
19
|
-
import argparse
|
|
20
|
-
|
|
21
|
-
try:
|
|
22
|
-
from sklearn.feature_extraction.text import TfidfVectorizer
|
|
23
|
-
from sklearn.metrics.pairwise import cosine_similarity
|
|
24
|
-
except ImportError:
|
|
25
|
-
print("Error: scikit-learn not installed", file=sys.stderr)
|
|
26
|
-
print("Install: pip install scikit-learn", file=sys.stderr)
|
|
27
|
-
sys.exit(1)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
# Agent Registry with Enhanced Semantic Descriptions
|
|
31
|
-
# Each description includes keywords, domains, and related concepts
|
|
32
|
-
AGENTS = {
|
|
33
|
-
"react-frontend-engineer": (
|
|
34
|
-
"React frontend UI components dashboard interface SPA web application "
|
|
35
|
-
"user interface client-side JavaScript TypeScript hooks state management "
|
|
36
|
-
"responsive design web pages forms interactive"
|
|
37
|
-
),
|
|
38
|
-
"ui-designer": (
|
|
39
|
-
"UI design user experience UX interface design visual design wireframes "
|
|
40
|
-
"mockups prototypes accessibility usability user flows style guide branding"
|
|
41
|
-
),
|
|
42
|
-
"backend-dev": (
|
|
43
|
-
"API server backend endpoint REST GraphQL database business logic "
|
|
44
|
-
"server-side Node.js Python Java authentication authorization data processing "
|
|
45
|
-
"microservices integration middleware"
|
|
46
|
-
),
|
|
47
|
-
"rust-developer": (
|
|
48
|
-
"Rust systems programming memory safety concurrency performance "
|
|
49
|
-
"low-level programming async tokio cargo ownership borrowing compiler "
|
|
50
|
-
"systems language native speed"
|
|
51
|
-
),
|
|
52
|
-
"rust-mvp-developer": (
|
|
53
|
-
"Rust MVP prototype proof-of-concept quick implementation basic features "
|
|
54
|
-
"simple rapid development starter code minimal viable product"
|
|
55
|
-
),
|
|
56
|
-
"rust-enterprise-developer": (
|
|
57
|
-
"Rust production enterprise advanced optimization performance critical "
|
|
58
|
-
"production-grade scalable robust high-performance mission-critical"
|
|
59
|
-
),
|
|
60
|
-
"mobile-dev": (
|
|
61
|
-
"React Native mobile iOS Android app development cross-platform "
|
|
62
|
-
"smartphone tablet native modules mobile UI touch gestures mobile UX "
|
|
63
|
-
"app store deployment mobile navigation"
|
|
64
|
-
),
|
|
65
|
-
"devops-engineer": (
|
|
66
|
-
"infrastructure deployment Docker Kubernetes AWS cloud CI/CD pipeline "
|
|
67
|
-
"automation orchestration containerization cloud infrastructure Terraform "
|
|
68
|
-
"monitoring logging provisioning infrastructure-as-code"
|
|
69
|
-
),
|
|
70
|
-
"security-specialist": (
|
|
71
|
-
"security authentication encryption RBAC vulnerabilities penetration testing "
|
|
72
|
-
"threat analysis security audit compliance access control authorization "
|
|
73
|
-
"cybersecurity secure coding SSL/TLS security review"
|
|
74
|
-
),
|
|
75
|
-
"system-architect": (
|
|
76
|
-
"architecture system design component design API design database schema "
|
|
77
|
-
"high-level design scalability patterns microservices architecture decisions "
|
|
78
|
-
"technical leadership design patterns distributed systems"
|
|
79
|
-
),
|
|
80
|
-
"tester": (
|
|
81
|
-
"testing test unit-test integration-test TDD quality-assurance QA "
|
|
82
|
-
"test-coverage Jest Mocha pytest test-strategy validation verification "
|
|
83
|
-
"automated testing regression testing"
|
|
84
|
-
),
|
|
85
|
-
"reviewer": (
|
|
86
|
-
"code-review quality-assessment technical-debt code-analysis quality-metrics "
|
|
87
|
-
"code-standards linting static-analysis best-practices code-quality "
|
|
88
|
-
"peer-review refactoring suggestions"
|
|
89
|
-
),
|
|
90
|
-
"researcher": (
|
|
91
|
-
"research explore investigate analyze study evaluation comparison "
|
|
92
|
-
"proof-of-concept feasibility analysis technical-research documentation "
|
|
93
|
-
"exploration discovery learning experimentation"
|
|
94
|
-
),
|
|
95
|
-
"coder": (
|
|
96
|
-
"implementation feature-development bug-fix coding general-development "
|
|
97
|
-
"problem-solving code-implementation feature-completion programming "
|
|
98
|
-
"general-purpose development writing code"
|
|
99
|
-
),
|
|
100
|
-
"perf-analyzer": (
|
|
101
|
-
"performance optimization profiling benchmarking speed efficiency "
|
|
102
|
-
"performance-tuning latency throughput resource-optimization "
|
|
103
|
-
"scalability load-testing stress-testing performance-metrics"
|
|
104
|
-
),
|
|
105
|
-
"accessibility-advocate": (
|
|
106
|
-
"accessibility WCAG screen-readers keyboard-navigation ARIA semantic-HTML "
|
|
107
|
-
"inclusive-design disability-access a11y accessibility-testing "
|
|
108
|
-
"accessibility-compliance universal-design"
|
|
109
|
-
),
|
|
110
|
-
"code-quality-validator": (
|
|
111
|
-
"quality-validation architecture-compliance code-standards advanced-quality "
|
|
112
|
-
"deep-analysis compliance-checking quality-gates code-metrics "
|
|
113
|
-
"technical-excellence validation comprehensive-review"
|
|
114
|
-
),
|
|
115
|
-
"performance-benchmarker": (
|
|
116
|
-
"performance-benchmarking metrics analysis load-testing stress-testing "
|
|
117
|
-
"profiling performance-monitoring benchmark-suite performance-validation "
|
|
118
|
-
"throughput-testing latency-analysis"
|
|
119
|
-
),
|
|
120
|
-
"product-owner": (
|
|
121
|
-
"product strategy business decisions scope management priorities "
|
|
122
|
-
"stakeholder requirements roadmap planning strategic-decisions "
|
|
123
|
-
"product-vision business-value feature-prioritization"
|
|
124
|
-
),
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def semantic_match(task: str, threshold: float = 0.5, top_n: int = None):
|
|
129
|
-
"""
|
|
130
|
-
Match task description to agents using TF-IDF semantic similarity.
|
|
131
|
-
|
|
132
|
-
Args:
|
|
133
|
-
task: Task description string
|
|
134
|
-
threshold: Minimum similarity score (0.0-1.0)
|
|
135
|
-
top_n: Return top N matches (None = all above threshold)
|
|
136
|
-
|
|
137
|
-
Returns:
|
|
138
|
-
List of dicts: [{"agent": "name", "score": 0.85}, ...]
|
|
139
|
-
"""
|
|
140
|
-
if not task or not task.strip():
|
|
141
|
-
return []
|
|
142
|
-
|
|
143
|
-
# Build corpus: agent descriptions + task
|
|
144
|
-
corpus = list(AGENTS.values()) + [task]
|
|
145
|
-
|
|
146
|
-
# Vectorize using TF-IDF
|
|
147
|
-
vectorizer = TfidfVectorizer(
|
|
148
|
-
lowercase=True,
|
|
149
|
-
stop_words='english',
|
|
150
|
-
ngram_range=(1, 2), # Unigrams + bigrams
|
|
151
|
-
max_df=0.85, # Ignore very common terms
|
|
152
|
-
min_df=1
|
|
153
|
-
)
|
|
154
|
-
|
|
155
|
-
try:
|
|
156
|
-
tfidf = vectorizer.fit_transform(corpus)
|
|
157
|
-
except ValueError as e:
|
|
158
|
-
# Handle edge case: empty vocabulary
|
|
159
|
-
print(f"Warning: {e}", file=sys.stderr)
|
|
160
|
-
return []
|
|
161
|
-
|
|
162
|
-
# Compute cosine similarity
|
|
163
|
-
task_vector = tfidf[-1] # Last item is the task
|
|
164
|
-
agent_vectors = tfidf[:-1] # All others are agents
|
|
165
|
-
similarities = cosine_similarity(task_vector, agent_vectors)[0]
|
|
166
|
-
|
|
167
|
-
# Build results
|
|
168
|
-
results = []
|
|
169
|
-
for agent_name, score in zip(AGENTS.keys(), similarities):
|
|
170
|
-
if score >= threshold:
|
|
171
|
-
results.append({
|
|
172
|
-
"agent": agent_name,
|
|
173
|
-
"score": float(score)
|
|
174
|
-
})
|
|
175
|
-
|
|
176
|
-
# Sort by score (descending)
|
|
177
|
-
results.sort(key=lambda x: x["score"], reverse=True)
|
|
178
|
-
|
|
179
|
-
# Limit to top N if specified
|
|
180
|
-
if top_n is not None:
|
|
181
|
-
results = results[:top_n]
|
|
182
|
-
|
|
183
|
-
return results
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
def main():
|
|
187
|
-
parser = argparse.ArgumentParser(
|
|
188
|
-
description="Semantic agent matching using TF-IDF"
|
|
189
|
-
)
|
|
190
|
-
parser.add_argument(
|
|
191
|
-
"task",
|
|
192
|
-
nargs="?",
|
|
193
|
-
default="",
|
|
194
|
-
help="Task description to match against agents"
|
|
195
|
-
)
|
|
196
|
-
parser.add_argument(
|
|
197
|
-
"-t", "--threshold",
|
|
198
|
-
type=float,
|
|
199
|
-
default=0.5,
|
|
200
|
-
help="Minimum similarity threshold (0.0-1.0, default: 0.5)"
|
|
201
|
-
)
|
|
202
|
-
parser.add_argument(
|
|
203
|
-
"-n", "--top-n",
|
|
204
|
-
type=int,
|
|
205
|
-
default=None,
|
|
206
|
-
help="Return top N matches (default: all above threshold)"
|
|
207
|
-
)
|
|
208
|
-
parser.add_argument(
|
|
209
|
-
"-j", "--json",
|
|
210
|
-
action="store_true",
|
|
211
|
-
help="Output as JSON instead of CSV"
|
|
212
|
-
)
|
|
213
|
-
parser.add_argument(
|
|
214
|
-
"-v", "--verbose",
|
|
215
|
-
action="store_true",
|
|
216
|
-
help="Show scores for all matches"
|
|
217
|
-
)
|
|
218
|
-
|
|
219
|
-
args = parser.parse_args()
|
|
220
|
-
|
|
221
|
-
# Get task from args or stdin
|
|
222
|
-
task = args.task
|
|
223
|
-
if not task and not sys.stdin.isatty():
|
|
224
|
-
task = sys.stdin.read().strip()
|
|
225
|
-
|
|
226
|
-
if not task:
|
|
227
|
-
parser.print_help()
|
|
228
|
-
sys.exit(1)
|
|
229
|
-
|
|
230
|
-
# Perform matching
|
|
231
|
-
matches = semantic_match(task, args.threshold, args.top_n)
|
|
232
|
-
|
|
233
|
-
# Output results
|
|
234
|
-
if args.json:
|
|
235
|
-
# JSON output
|
|
236
|
-
print(json.dumps({
|
|
237
|
-
"task": task,
|
|
238
|
-
"threshold": args.threshold,
|
|
239
|
-
"matches": matches
|
|
240
|
-
}, indent=2))
|
|
241
|
-
elif args.verbose:
|
|
242
|
-
# Verbose output with scores
|
|
243
|
-
for match in matches:
|
|
244
|
-
print(f"{match['agent']}: {match['score']:.3f}")
|
|
245
|
-
else:
|
|
246
|
-
# CSV output (agent names only)
|
|
247
|
-
agent_names = [m["agent"] for m in matches]
|
|
248
|
-
print(",".join(agent_names))
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
if __name__ == "__main__":
|
|
252
|
-
main()
|