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.
Files changed (107) hide show
  1. package/.claude/cfn-extras/agents/google-sheets-specialist.md +614 -0
  2. package/.claude/commands/cfn/create-handoff.md +224 -0
  3. package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -243
  4. package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
  5. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +78 -78
  6. package/.claude/hooks/cfn-post-edit.config.json +44 -44
  7. package/.claude/skills/agent-lifecycle/SKILL.md +60 -0
  8. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +573 -0
  9. package/.claude/skills/agent-lifecycle/simple-audit.sh +31 -0
  10. package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  11. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  12. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  13. package/.claude/skills/cfn-redis-coordination/get-context.sh +112 -112
  14. package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  15. package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  16. package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  17. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  18. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +92 -92
  19. package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  20. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +662 -0
  21. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +29 -0
  22. package/claude-assets/cfn-extras/agents/google-sheets-specialist.md +614 -0
  23. package/claude-assets/commands/cfn/create-handoff.md +224 -0
  24. package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
  25. package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
  26. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +78 -78
  27. package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
  28. package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
  29. package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
  30. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +572 -572
  31. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +30 -30
  32. package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
  33. package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
  34. package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
  35. package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
  36. package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  37. package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
  38. package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
  39. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  40. package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
  41. package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
  42. package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
  43. package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
  44. package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
  45. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  46. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +112 -112
  47. package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
  48. package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
  49. package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
  50. package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
  51. package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
  52. package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
  53. package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  54. package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  55. package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  56. package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  57. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +92 -92
  58. package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  59. package/claude-assets/skills/docker-build/SKILL.md +96 -203
  60. package/claude-assets/skills/docker-build/build.sh +73 -73
  61. package/claude-assets/skills/integration/agent-handoff.sh +494 -0
  62. package/claude-assets/skills/integration/file-operations.sh +414 -0
  63. package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
  64. package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
  65. package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
  66. package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
  67. package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
  68. package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
  69. package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
  70. package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
  71. package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
  72. package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
  73. package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
  74. package/claude-assets/skills/workflow-codification/test-integration.sh +281 -0
  75. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +445 -0
  76. package/claude-assets/skills/workflow-codification/track-edge-case.sh +323 -0
  77. package/dist/agents/agent-loader.js +165 -146
  78. package/dist/agents/agent-loader.js.map +1 -1
  79. package/dist/cli/config-manager.js +91 -109
  80. package/dist/cli/config-manager.js.map +1 -1
  81. package/dist/integration/DatabaseHandoff.js +507 -0
  82. package/dist/integration/DatabaseHandoff.js.map +1 -0
  83. package/dist/integration/StandardAdapter.js +291 -0
  84. package/dist/integration/StandardAdapter.js.map +1 -0
  85. package/dist/lib/agent-output-parser.js +518 -0
  86. package/dist/lib/agent-output-parser.js.map +1 -0
  87. package/dist/lib/agent-output-validator.js +950 -0
  88. package/dist/lib/agent-output-validator.js.map +1 -0
  89. package/dist/lib/artifact-registry.js +443 -0
  90. package/dist/lib/artifact-registry.js.map +1 -0
  91. package/dist/lib/config-validator.js +687 -0
  92. package/dist/lib/config-validator.js.map +1 -0
  93. package/dist/types/agent-output.js +44 -0
  94. package/dist/types/agent-output.js.map +1 -0
  95. package/dist/types/config.js +28 -0
  96. package/dist/types/config.js.map +1 -0
  97. package/package.json +2 -1
  98. package/scripts/artifact-cleanup.sh +392 -0
  99. package/scripts/build-linux.sh +78 -0
  100. package/scripts/deploy-production.sh +355 -355
  101. package/scripts/docker-playwright-fix.sh +311 -311
  102. package/scripts/docker-rebuild-all-agents.sh +127 -127
  103. package/scripts/memory-leak-prevention.sh +305 -305
  104. package/scripts/migrate-artifacts.sh +563 -0
  105. package/scripts/migrate-yaml-to-json.sh +465 -0
  106. package/scripts/run-marketing-tests.sh +42 -42
  107. 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"