claude-flow-novice 2.15.1 → 2.15.3
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/cfn-extras/agents/google-sheets-specialist.md +614 -0
- package/.claude/commands/cfn/create-handoff.md +224 -0
- package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -243
- package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
- package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +78 -78
- package/.claude/hooks/cfn-post-edit.config.json +44 -44
- package/.claude/skills/agent-lifecycle/SKILL.md +60 -0
- package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +573 -0
- package/.claude/skills/agent-lifecycle/simple-audit.sh +31 -0
- package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
- package/.claude/skills/cfn-redis-coordination/get-context.sh +112 -112
- package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
- package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
- package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
- package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +92 -92
- package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +662 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +29 -0
- package/claude-assets/cfn-extras/agents/google-sheets-specialist.md +614 -0
- package/claude-assets/commands/cfn/create-handoff.md +224 -0
- package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
- package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
- package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +78 -78
- package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
- package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
- package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
- package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +572 -572
- package/claude-assets/skills/agent-lifecycle/simple-audit.sh +30 -30
- package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
- package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
- package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
- package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
- package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
- package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
- package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
- package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
- package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
- package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
- package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
- package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
- package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
- package/claude-assets/skills/cfn-redis-coordination/get-context.sh +112 -112
- package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
- package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
- package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
- package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
- package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
- package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
- package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
- package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
- package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
- package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
- package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +92 -92
- package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
- package/claude-assets/skills/docker-build/SKILL.md +96 -203
- package/claude-assets/skills/docker-build/build.sh +73 -73
- package/claude-assets/skills/integration/agent-handoff.sh +494 -0
- package/claude-assets/skills/integration/file-operations.sh +414 -0
- package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
- package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
- package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
- package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
- package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
- package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
- package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
- package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
- package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
- package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
- package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
- package/claude-assets/skills/workflow-codification/test-integration.sh +281 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh +445 -0
- package/claude-assets/skills/workflow-codification/track-edge-case.sh +323 -0
- package/dist/agents/agent-loader.js +165 -146
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/cli/config-manager.js +91 -109
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/integration/DatabaseHandoff.js +507 -0
- package/dist/integration/DatabaseHandoff.js.map +1 -0
- package/dist/integration/StandardAdapter.js +291 -0
- package/dist/integration/StandardAdapter.js.map +1 -0
- package/dist/lib/agent-output-parser.js +518 -0
- package/dist/lib/agent-output-parser.js.map +1 -0
- package/dist/lib/agent-output-validator.js +950 -0
- package/dist/lib/agent-output-validator.js.map +1 -0
- package/dist/lib/artifact-registry.js +443 -0
- package/dist/lib/artifact-registry.js.map +1 -0
- package/dist/lib/config-validator.js +687 -0
- package/dist/lib/config-validator.js.map +1 -0
- package/dist/types/agent-output.js +44 -0
- package/dist/types/agent-output.js.map +1 -0
- package/dist/types/config.js +28 -0
- package/dist/types/config.js.map +1 -0
- package/package.json +2 -1
- package/scripts/artifact-cleanup.sh +392 -0
- package/scripts/build-linux.sh +78 -0
- package/scripts/deploy-production.sh +355 -355
- package/scripts/docker-playwright-fix.sh +311 -311
- package/scripts/docker-rebuild-all-agents.sh +127 -127
- package/scripts/memory-leak-prevention.sh +305 -305
- package/scripts/migrate-artifacts.sh +563 -0
- package/scripts/migrate-yaml-to-json.sh +465 -0
- package/scripts/run-marketing-tests.sh +42 -42
- package/scripts/update_paths.sh +46 -46
|
@@ -1,262 +1,262 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Deliverable-Based Confidence Calculator
|
|
3
|
-
# Calculates confidence scores based on actual deliverable completion
|
|
4
|
-
|
|
5
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
# Arguments
|
|
8
|
-
TASK_ID="$1"
|
|
9
|
-
AGENT_ID="$2"
|
|
10
|
-
EXPECTED_DELIVERABLES="$3" # JSON array of expected files/deliverables
|
|
11
|
-
WORKING_DIR="${4:-$(pwd)}"
|
|
12
|
-
|
|
13
|
-
# Colors for output
|
|
14
|
-
RED='\033[0;31m'
|
|
15
|
-
GREEN='\033[0;32m'
|
|
16
|
-
YELLOW='\033[1;33m'
|
|
17
|
-
BLUE='\033[0;34m'
|
|
18
|
-
NC='\033[0m' # No Color
|
|
19
|
-
|
|
20
|
-
echo -e "${BLUE}📊 Deliverable-Based Confidence Calculator${NC}"
|
|
21
|
-
echo "Task ID: $TASK_ID"
|
|
22
|
-
echo "Agent ID: $AGENT_ID"
|
|
23
|
-
echo "Working Directory: $WORKING_DIR"
|
|
24
|
-
echo ""
|
|
25
|
-
|
|
26
|
-
# Function to check if deliverable exists and is valid
|
|
27
|
-
validate_deliverable() {
|
|
28
|
-
local deliverable="$1"
|
|
29
|
-
local deliverable_path="$WORKING_DIR/$deliverable"
|
|
30
|
-
|
|
31
|
-
# Handle different deliverable types
|
|
32
|
-
case "$deliverable" in
|
|
33
|
-
*.md|*.txt|*.json|*.yaml|*.yml)
|
|
34
|
-
# Text files - check existence and content
|
|
35
|
-
if [ -f "$deliverable_path" ]; then
|
|
36
|
-
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
37
|
-
if [ "$size" -gt 0 ]; then
|
|
38
|
-
echo "VALID:$size"
|
|
39
|
-
return 0
|
|
40
|
-
fi
|
|
41
|
-
fi
|
|
42
|
-
;;
|
|
43
|
-
*.sh|*.js|*.ts|*.tsx|*.py)
|
|
44
|
-
# Code files - check existence and basic syntax
|
|
45
|
-
if [ -f "$deliverable_path" ]; then
|
|
46
|
-
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
47
|
-
if [ "$size" -gt 100 ]; then
|
|
48
|
-
echo "VALID:$size"
|
|
49
|
-
return 0
|
|
50
|
-
fi
|
|
51
|
-
fi
|
|
52
|
-
;;
|
|
53
|
-
*/)
|
|
54
|
-
# Directories - check existence and contents
|
|
55
|
-
if [ -d "$deliverable_path" ]; then
|
|
56
|
-
local file_count=$(find "$deliverable_path" -type f | wc -l)
|
|
57
|
-
if [ "$file_count" -gt 0 ]; then
|
|
58
|
-
echo "VALID:$file_count"
|
|
59
|
-
return 0
|
|
60
|
-
fi
|
|
61
|
-
fi
|
|
62
|
-
;;
|
|
63
|
-
*.json)
|
|
64
|
-
# JSON files - check validity
|
|
65
|
-
if [ -f "$deliverable_path" ]; then
|
|
66
|
-
if jq empty "$deliverable_path" 2>/dev/null; then
|
|
67
|
-
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
68
|
-
echo "VALID:$size"
|
|
69
|
-
return 0
|
|
70
|
-
fi
|
|
71
|
-
fi
|
|
72
|
-
;;
|
|
73
|
-
*)
|
|
74
|
-
# Generic file check
|
|
75
|
-
if [ -f "$deliverable_path" ]; then
|
|
76
|
-
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
77
|
-
if [ "$size" -gt 0 ]; then
|
|
78
|
-
echo "VALID:$size"
|
|
79
|
-
return 0
|
|
80
|
-
fi
|
|
81
|
-
fi
|
|
82
|
-
;;
|
|
83
|
-
esac
|
|
84
|
-
|
|
85
|
-
echo "INVALID"
|
|
86
|
-
return 1
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
# Function to calculate quality score based on deliverable characteristics
|
|
90
|
-
calculate_quality_score() {
|
|
91
|
-
local deliverable="$1"
|
|
92
|
-
local deliverable_path="$WORKING_DIR/$deliverable"
|
|
93
|
-
|
|
94
|
-
local quality_score=0.5 # Base score for existing
|
|
95
|
-
|
|
96
|
-
# Size scoring (larger files with meaningful content)
|
|
97
|
-
if [ -f "$deliverable_path" ]; then
|
|
98
|
-
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
99
|
-
|
|
100
|
-
if [ "$size" -gt 5000 ]; then
|
|
101
|
-
quality_score=0.9 # Substantial content
|
|
102
|
-
elif [ "$size" -gt 1000 ]; then
|
|
103
|
-
quality_score=0.8 # Good content
|
|
104
|
-
elif [ "$size" -gt 100 ]; then
|
|
105
|
-
quality_score=0.7 # Adequate content
|
|
106
|
-
else
|
|
107
|
-
quality_score=0.6 # Minimal content
|
|
108
|
-
fi
|
|
109
|
-
fi
|
|
110
|
-
|
|
111
|
-
# Content-specific scoring
|
|
112
|
-
case "$deliverable" in
|
|
113
|
-
*.md)
|
|
114
|
-
# Markdown files - check for structure
|
|
115
|
-
if grep -q "^#" "$deliverable_path" 2>/dev/null; then
|
|
116
|
-
quality_score=$((quality_score + 10)) # Has headers
|
|
117
|
-
fi
|
|
118
|
-
if grep -q "^```" "$deliverable_path" 2>/dev/null; then
|
|
119
|
-
quality_score=$((quality_score + 5)) # Has code blocks
|
|
120
|
-
fi
|
|
121
|
-
;;
|
|
122
|
-
*.ts|*.tsx|*.js|*.jsx)
|
|
123
|
-
# Code files - check for functions/exports
|
|
124
|
-
if grep -q "function\|export\|class\|const.*=" "$deliverable_path" 2>/dev/null; then
|
|
125
|
-
quality_score=$((quality_score + 10)) # Has functions/exports
|
|
126
|
-
fi
|
|
127
|
-
;;
|
|
128
|
-
*.json)
|
|
129
|
-
# JSON files - check for structure
|
|
130
|
-
if jq -e 'type == "object" and keys > 0' "$deliverable_path" >/dev/null 2>&1; then
|
|
131
|
-
quality_score=$((quality_score + 10)) # Has meaningful structure
|
|
132
|
-
fi
|
|
133
|
-
;;
|
|
134
|
-
esac
|
|
135
|
-
|
|
136
|
-
# Cap at 1.0
|
|
137
|
-
if [ "$quality_score" -gt 100 ]; then
|
|
138
|
-
quality_score=100
|
|
139
|
-
fi
|
|
140
|
-
|
|
141
|
-
echo "$quality_score"
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
# Main confidence calculation
|
|
145
|
-
main() {
|
|
146
|
-
echo -e "${YELLOW}Analyzing expected deliverables...${NC}"
|
|
147
|
-
|
|
148
|
-
# Parse expected deliverables from JSON
|
|
149
|
-
if ! echo "$EXPECTED_DELIVERABLES" | jq empty 2>/dev/null; then
|
|
150
|
-
echo -e "${RED}❌ Invalid JSON in expected deliverables${NC}"
|
|
151
|
-
echo "0.0"
|
|
152
|
-
return 1
|
|
153
|
-
fi
|
|
154
|
-
|
|
155
|
-
local total_deliverables=$(echo "$EXPECTED_DELIVERABLES" | jq 'length')
|
|
156
|
-
local valid_deliverables=0
|
|
157
|
-
local total_quality_score=0
|
|
158
|
-
|
|
159
|
-
echo "Expected deliverables: $total_deliverables"
|
|
160
|
-
echo ""
|
|
161
|
-
|
|
162
|
-
# Check each deliverable
|
|
163
|
-
for ((i=0; i<total_deliverables; i++)); do
|
|
164
|
-
local deliverable=$(echo "$EXPECTED_DELIVERABLES" | jq -r ".[$i]")
|
|
165
|
-
|
|
166
|
-
echo -n " Checking: $deliverable ... "
|
|
167
|
-
|
|
168
|
-
local validation_result=$(validate_deliverable "$deliverable")
|
|
169
|
-
|
|
170
|
-
if [[ "$validation_result" == VALID* ]]; then
|
|
171
|
-
local quality_score=$(calculate_quality_score "$deliverable")
|
|
172
|
-
total_quality_score=$((total_quality_score + quality_score))
|
|
173
|
-
valid_deliverables=$((valid_deliverables + 1))
|
|
174
|
-
|
|
175
|
-
local size=$(echo "$validation_result" | cut -d: -f2)
|
|
176
|
-
echo -e "${GREEN}✓ VALID${NC} (size: $size, quality: $quality_score)"
|
|
177
|
-
else
|
|
178
|
-
echo -e "${RED}✗ MISSING/INVALID${NC}"
|
|
179
|
-
fi
|
|
180
|
-
done
|
|
181
|
-
|
|
182
|
-
echo ""
|
|
183
|
-
echo -e "${YELLOW}Summary:${NC}"
|
|
184
|
-
echo " Valid deliverables: $valid_deliverables/$total_deliverables"
|
|
185
|
-
|
|
186
|
-
# Calculate completion score (0-1)
|
|
187
|
-
local completion_score=0
|
|
188
|
-
if [ "$total_deliverables" -gt 0 ]; then
|
|
189
|
-
completion_score=$(echo "scale=3; $valid_deliverables / $total_deliverables" | bc -l)
|
|
190
|
-
fi
|
|
191
|
-
|
|
192
|
-
# Calculate average quality score (0-1)
|
|
193
|
-
local avg_quality_score=0.5 # Default if no deliverables
|
|
194
|
-
if [ "$valid_deliverables" -gt 0 ]; then
|
|
195
|
-
avg_quality_score=$(echo "scale=3; $total_quality_score / ($valid_deliverables * 100)" | bc -l)
|
|
196
|
-
fi
|
|
197
|
-
|
|
198
|
-
# Calculate final confidence score
|
|
199
|
-
# Weight: 60% completion, 40% quality
|
|
200
|
-
local final_confidence=$(echo "scale=3; ($completion_score * 0.6) + ($avg_quality_score * 0.4)" | bc -l)
|
|
201
|
-
|
|
202
|
-
# Round to 2 decimal places
|
|
203
|
-
final_confidence=$(echo "$final_confidence" | sed 's/^\./0./' | sed 's/\.\([0-9]\{2\}\)[0-9]*$/.\1/')
|
|
204
|
-
|
|
205
|
-
echo " Completion score: $completion_score"
|
|
206
|
-
echo " Quality score: $avg_quality_score"
|
|
207
|
-
echo " Final confidence: $final_confidence"
|
|
208
|
-
|
|
209
|
-
# Validation rules
|
|
210
|
-
if [ "$valid_deliverables" -eq 0 ]; then
|
|
211
|
-
echo -e "${RED}🚨 CRITICAL: No deliverables created - confidence should be 0.0${NC}"
|
|
212
|
-
echo "0.0"
|
|
213
|
-
return 1
|
|
214
|
-
elif (( $(echo "$final_confidence > 0.3" | bc -l) )); then
|
|
215
|
-
if [ "$valid_deliverables" -lt "$((total_deliverables / 2))" ]; then
|
|
216
|
-
echo -e "${YELLOW}⚠️ WARNING: Low deliverable completion (<50%) - confidence should be <= 0.3${NC}"
|
|
217
|
-
fi
|
|
218
|
-
fi
|
|
219
|
-
|
|
220
|
-
echo -e "${GREEN}✓ Calculated confidence: $final_confidence${NC}"
|
|
221
|
-
echo "$final_confidence"
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
# Store results in Redis if available
|
|
225
|
-
store_confidence_result() {
|
|
226
|
-
local confidence="$1"
|
|
227
|
-
|
|
228
|
-
if command -v redis-cli >/dev/null 2>&1; then
|
|
229
|
-
# Store detailed breakdown
|
|
230
|
-
local breakdown=$(cat << EOF
|
|
231
|
-
{
|
|
232
|
-
"task_id": "$TASK_ID",
|
|
233
|
-
"agent_id": "$AGENT_ID",
|
|
234
|
-
"calculated_confidence": $confidence,
|
|
235
|
-
"calculation_method": "deliverable-based",
|
|
236
|
-
"timestamp": "$(date -Iseconds)",
|
|
237
|
-
"working_directory": "$WORKING_DIR",
|
|
238
|
-
"expected_deliverables": $EXPECTED_DELIVERABLES
|
|
239
|
-
}
|
|
240
|
-
EOF
|
|
241
|
-
)
|
|
242
|
-
|
|
243
|
-
redis-cli set "${TASK_ID}:${AGENT_ID}:confidence-breakdown" "$breakdown" >/dev/null 2>&1 || true
|
|
244
|
-
redis-cli set "${TASK_ID}:${AGENT_ID}:confidence-score" "$confidence" >/dev/null 2>&1 || true
|
|
245
|
-
|
|
246
|
-
echo -e "📦 ${BLUE}Stored confidence breakdown in Redis:${NC} ${TASK_ID}:${AGENT_ID}:confidence-breakdown"
|
|
247
|
-
fi
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
# Execute main function
|
|
251
|
-
if [ "$#" -lt 3 ]; then
|
|
252
|
-
echo "Usage: $0 <task_id> <agent_id> <expected_deliverables_json> [working_directory]"
|
|
253
|
-
echo "Example: $0 task-123 agent-1 '[\"file1.txt\", \"script.sh\", \"docs/\"]' /path/to/project"
|
|
254
|
-
exit 1
|
|
255
|
-
fi
|
|
256
|
-
|
|
257
|
-
final_confidence=$(main "$@")
|
|
258
|
-
|
|
259
|
-
# Store results
|
|
260
|
-
store_confidence_result "$final_confidence"
|
|
261
|
-
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Deliverable-Based Confidence Calculator
|
|
3
|
+
# Calculates confidence scores based on actual deliverable completion
|
|
4
|
+
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
# Arguments
|
|
8
|
+
TASK_ID="$1"
|
|
9
|
+
AGENT_ID="$2"
|
|
10
|
+
EXPECTED_DELIVERABLES="$3" # JSON array of expected files/deliverables
|
|
11
|
+
WORKING_DIR="${4:-$(pwd)}"
|
|
12
|
+
|
|
13
|
+
# Colors for output
|
|
14
|
+
RED='\033[0;31m'
|
|
15
|
+
GREEN='\033[0;32m'
|
|
16
|
+
YELLOW='\033[1;33m'
|
|
17
|
+
BLUE='\033[0;34m'
|
|
18
|
+
NC='\033[0m' # No Color
|
|
19
|
+
|
|
20
|
+
echo -e "${BLUE}📊 Deliverable-Based Confidence Calculator${NC}"
|
|
21
|
+
echo "Task ID: $TASK_ID"
|
|
22
|
+
echo "Agent ID: $AGENT_ID"
|
|
23
|
+
echo "Working Directory: $WORKING_DIR"
|
|
24
|
+
echo ""
|
|
25
|
+
|
|
26
|
+
# Function to check if deliverable exists and is valid
|
|
27
|
+
validate_deliverable() {
|
|
28
|
+
local deliverable="$1"
|
|
29
|
+
local deliverable_path="$WORKING_DIR/$deliverable"
|
|
30
|
+
|
|
31
|
+
# Handle different deliverable types
|
|
32
|
+
case "$deliverable" in
|
|
33
|
+
*.md|*.txt|*.json|*.yaml|*.yml)
|
|
34
|
+
# Text files - check existence and content
|
|
35
|
+
if [ -f "$deliverable_path" ]; then
|
|
36
|
+
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
37
|
+
if [ "$size" -gt 0 ]; then
|
|
38
|
+
echo "VALID:$size"
|
|
39
|
+
return 0
|
|
40
|
+
fi
|
|
41
|
+
fi
|
|
42
|
+
;;
|
|
43
|
+
*.sh|*.js|*.ts|*.tsx|*.py)
|
|
44
|
+
# Code files - check existence and basic syntax
|
|
45
|
+
if [ -f "$deliverable_path" ]; then
|
|
46
|
+
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
47
|
+
if [ "$size" -gt 100 ]; then
|
|
48
|
+
echo "VALID:$size"
|
|
49
|
+
return 0
|
|
50
|
+
fi
|
|
51
|
+
fi
|
|
52
|
+
;;
|
|
53
|
+
*/)
|
|
54
|
+
# Directories - check existence and contents
|
|
55
|
+
if [ -d "$deliverable_path" ]; then
|
|
56
|
+
local file_count=$(find "$deliverable_path" -type f | wc -l)
|
|
57
|
+
if [ "$file_count" -gt 0 ]; then
|
|
58
|
+
echo "VALID:$file_count"
|
|
59
|
+
return 0
|
|
60
|
+
fi
|
|
61
|
+
fi
|
|
62
|
+
;;
|
|
63
|
+
*.json)
|
|
64
|
+
# JSON files - check validity
|
|
65
|
+
if [ -f "$deliverable_path" ]; then
|
|
66
|
+
if jq empty "$deliverable_path" 2>/dev/null; then
|
|
67
|
+
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
68
|
+
echo "VALID:$size"
|
|
69
|
+
return 0
|
|
70
|
+
fi
|
|
71
|
+
fi
|
|
72
|
+
;;
|
|
73
|
+
*)
|
|
74
|
+
# Generic file check
|
|
75
|
+
if [ -f "$deliverable_path" ]; then
|
|
76
|
+
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
77
|
+
if [ "$size" -gt 0 ]; then
|
|
78
|
+
echo "VALID:$size"
|
|
79
|
+
return 0
|
|
80
|
+
fi
|
|
81
|
+
fi
|
|
82
|
+
;;
|
|
83
|
+
esac
|
|
84
|
+
|
|
85
|
+
echo "INVALID"
|
|
86
|
+
return 1
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
# Function to calculate quality score based on deliverable characteristics
|
|
90
|
+
calculate_quality_score() {
|
|
91
|
+
local deliverable="$1"
|
|
92
|
+
local deliverable_path="$WORKING_DIR/$deliverable"
|
|
93
|
+
|
|
94
|
+
local quality_score=0.5 # Base score for existing
|
|
95
|
+
|
|
96
|
+
# Size scoring (larger files with meaningful content)
|
|
97
|
+
if [ -f "$deliverable_path" ]; then
|
|
98
|
+
local size=$(stat -c%s "$deliverable_path" 2>/dev/null || echo "0")
|
|
99
|
+
|
|
100
|
+
if [ "$size" -gt 5000 ]; then
|
|
101
|
+
quality_score=0.9 # Substantial content
|
|
102
|
+
elif [ "$size" -gt 1000 ]; then
|
|
103
|
+
quality_score=0.8 # Good content
|
|
104
|
+
elif [ "$size" -gt 100 ]; then
|
|
105
|
+
quality_score=0.7 # Adequate content
|
|
106
|
+
else
|
|
107
|
+
quality_score=0.6 # Minimal content
|
|
108
|
+
fi
|
|
109
|
+
fi
|
|
110
|
+
|
|
111
|
+
# Content-specific scoring
|
|
112
|
+
case "$deliverable" in
|
|
113
|
+
*.md)
|
|
114
|
+
# Markdown files - check for structure
|
|
115
|
+
if grep -q "^#" "$deliverable_path" 2>/dev/null; then
|
|
116
|
+
quality_score=$((quality_score + 10)) # Has headers
|
|
117
|
+
fi
|
|
118
|
+
if grep -q "^```" "$deliverable_path" 2>/dev/null; then
|
|
119
|
+
quality_score=$((quality_score + 5)) # Has code blocks
|
|
120
|
+
fi
|
|
121
|
+
;;
|
|
122
|
+
*.ts|*.tsx|*.js|*.jsx)
|
|
123
|
+
# Code files - check for functions/exports
|
|
124
|
+
if grep -q "function\|export\|class\|const.*=" "$deliverable_path" 2>/dev/null; then
|
|
125
|
+
quality_score=$((quality_score + 10)) # Has functions/exports
|
|
126
|
+
fi
|
|
127
|
+
;;
|
|
128
|
+
*.json)
|
|
129
|
+
# JSON files - check for structure
|
|
130
|
+
if jq -e 'type == "object" and keys > 0' "$deliverable_path" >/dev/null 2>&1; then
|
|
131
|
+
quality_score=$((quality_score + 10)) # Has meaningful structure
|
|
132
|
+
fi
|
|
133
|
+
;;
|
|
134
|
+
esac
|
|
135
|
+
|
|
136
|
+
# Cap at 1.0
|
|
137
|
+
if [ "$quality_score" -gt 100 ]; then
|
|
138
|
+
quality_score=100
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
echo "$quality_score"
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
# Main confidence calculation
|
|
145
|
+
main() {
|
|
146
|
+
echo -e "${YELLOW}Analyzing expected deliverables...${NC}"
|
|
147
|
+
|
|
148
|
+
# Parse expected deliverables from JSON
|
|
149
|
+
if ! echo "$EXPECTED_DELIVERABLES" | jq empty 2>/dev/null; then
|
|
150
|
+
echo -e "${RED}❌ Invalid JSON in expected deliverables${NC}"
|
|
151
|
+
echo "0.0"
|
|
152
|
+
return 1
|
|
153
|
+
fi
|
|
154
|
+
|
|
155
|
+
local total_deliverables=$(echo "$EXPECTED_DELIVERABLES" | jq 'length')
|
|
156
|
+
local valid_deliverables=0
|
|
157
|
+
local total_quality_score=0
|
|
158
|
+
|
|
159
|
+
echo "Expected deliverables: $total_deliverables"
|
|
160
|
+
echo ""
|
|
161
|
+
|
|
162
|
+
# Check each deliverable
|
|
163
|
+
for ((i=0; i<total_deliverables; i++)); do
|
|
164
|
+
local deliverable=$(echo "$EXPECTED_DELIVERABLES" | jq -r ".[$i]")
|
|
165
|
+
|
|
166
|
+
echo -n " Checking: $deliverable ... "
|
|
167
|
+
|
|
168
|
+
local validation_result=$(validate_deliverable "$deliverable")
|
|
169
|
+
|
|
170
|
+
if [[ "$validation_result" == VALID* ]]; then
|
|
171
|
+
local quality_score=$(calculate_quality_score "$deliverable")
|
|
172
|
+
total_quality_score=$((total_quality_score + quality_score))
|
|
173
|
+
valid_deliverables=$((valid_deliverables + 1))
|
|
174
|
+
|
|
175
|
+
local size=$(echo "$validation_result" | cut -d: -f2)
|
|
176
|
+
echo -e "${GREEN}✓ VALID${NC} (size: $size, quality: $quality_score)"
|
|
177
|
+
else
|
|
178
|
+
echo -e "${RED}✗ MISSING/INVALID${NC}"
|
|
179
|
+
fi
|
|
180
|
+
done
|
|
181
|
+
|
|
182
|
+
echo ""
|
|
183
|
+
echo -e "${YELLOW}Summary:${NC}"
|
|
184
|
+
echo " Valid deliverables: $valid_deliverables/$total_deliverables"
|
|
185
|
+
|
|
186
|
+
# Calculate completion score (0-1)
|
|
187
|
+
local completion_score=0
|
|
188
|
+
if [ "$total_deliverables" -gt 0 ]; then
|
|
189
|
+
completion_score=$(echo "scale=3; $valid_deliverables / $total_deliverables" | bc -l)
|
|
190
|
+
fi
|
|
191
|
+
|
|
192
|
+
# Calculate average quality score (0-1)
|
|
193
|
+
local avg_quality_score=0.5 # Default if no deliverables
|
|
194
|
+
if [ "$valid_deliverables" -gt 0 ]; then
|
|
195
|
+
avg_quality_score=$(echo "scale=3; $total_quality_score / ($valid_deliverables * 100)" | bc -l)
|
|
196
|
+
fi
|
|
197
|
+
|
|
198
|
+
# Calculate final confidence score
|
|
199
|
+
# Weight: 60% completion, 40% quality
|
|
200
|
+
local final_confidence=$(echo "scale=3; ($completion_score * 0.6) + ($avg_quality_score * 0.4)" | bc -l)
|
|
201
|
+
|
|
202
|
+
# Round to 2 decimal places
|
|
203
|
+
final_confidence=$(echo "$final_confidence" | sed 's/^\./0./' | sed 's/\.\([0-9]\{2\}\)[0-9]*$/.\1/')
|
|
204
|
+
|
|
205
|
+
echo " Completion score: $completion_score"
|
|
206
|
+
echo " Quality score: $avg_quality_score"
|
|
207
|
+
echo " Final confidence: $final_confidence"
|
|
208
|
+
|
|
209
|
+
# Validation rules
|
|
210
|
+
if [ "$valid_deliverables" -eq 0 ]; then
|
|
211
|
+
echo -e "${RED}🚨 CRITICAL: No deliverables created - confidence should be 0.0${NC}"
|
|
212
|
+
echo "0.0"
|
|
213
|
+
return 1
|
|
214
|
+
elif (( $(echo "$final_confidence > 0.3" | bc -l) )); then
|
|
215
|
+
if [ "$valid_deliverables" -lt "$((total_deliverables / 2))" ]; then
|
|
216
|
+
echo -e "${YELLOW}⚠️ WARNING: Low deliverable completion (<50%) - confidence should be <= 0.3${NC}"
|
|
217
|
+
fi
|
|
218
|
+
fi
|
|
219
|
+
|
|
220
|
+
echo -e "${GREEN}✓ Calculated confidence: $final_confidence${NC}"
|
|
221
|
+
echo "$final_confidence"
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
# Store results in Redis if available
|
|
225
|
+
store_confidence_result() {
|
|
226
|
+
local confidence="$1"
|
|
227
|
+
|
|
228
|
+
if command -v redis-cli >/dev/null 2>&1; then
|
|
229
|
+
# Store detailed breakdown
|
|
230
|
+
local breakdown=$(cat << EOF
|
|
231
|
+
{
|
|
232
|
+
"task_id": "$TASK_ID",
|
|
233
|
+
"agent_id": "$AGENT_ID",
|
|
234
|
+
"calculated_confidence": $confidence,
|
|
235
|
+
"calculation_method": "deliverable-based",
|
|
236
|
+
"timestamp": "$(date -Iseconds)",
|
|
237
|
+
"working_directory": "$WORKING_DIR",
|
|
238
|
+
"expected_deliverables": $EXPECTED_DELIVERABLES
|
|
239
|
+
}
|
|
240
|
+
EOF
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
redis-cli set "${TASK_ID}:${AGENT_ID}:confidence-breakdown" "$breakdown" >/dev/null 2>&1 || true
|
|
244
|
+
redis-cli set "${TASK_ID}:${AGENT_ID}:confidence-score" "$confidence" >/dev/null 2>&1 || true
|
|
245
|
+
|
|
246
|
+
echo -e "📦 ${BLUE}Stored confidence breakdown in Redis:${NC} ${TASK_ID}:${AGENT_ID}:confidence-breakdown"
|
|
247
|
+
fi
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
# Execute main function
|
|
251
|
+
if [ "$#" -lt 3 ]; then
|
|
252
|
+
echo "Usage: $0 <task_id> <agent_id> <expected_deliverables_json> [working_directory]"
|
|
253
|
+
echo "Example: $0 task-123 agent-1 '[\"file1.txt\", \"script.sh\", \"docs/\"]' /path/to/project"
|
|
254
|
+
exit 1
|
|
255
|
+
fi
|
|
256
|
+
|
|
257
|
+
final_confidence=$(main "$@")
|
|
258
|
+
|
|
259
|
+
# Store results
|
|
260
|
+
store_confidence_result "$final_confidence"
|
|
261
|
+
|
|
262
262
|
echo "$final_confidence"
|