claude-flow-novice 2.14.36 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/.claude/commands/cfn-loop-cli.md +491 -456
  2. package/.claude/commands/switch-api.md +33 -12
  3. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +107 -0
  4. package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh +59 -0
  5. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +24 -6
  6. package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +18 -9
  7. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +220 -220
  8. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +5 -0
  9. package/claude-assets/agents/custom/claude-code-expert.md +151 -2
  10. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +43 -3
  11. package/claude-assets/commands/cfn-loop-cli.md +491 -456
  12. package/claude-assets/commands/switch-api.md +33 -12
  13. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +107 -0
  14. package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh +59 -0
  15. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +24 -6
  16. package/claude-assets/skills/cfn-error-logging/SKILL.md +339 -0
  17. package/claude-assets/skills/cfn-error-logging/cleanup-error-logs.sh +334 -0
  18. package/claude-assets/skills/cfn-error-logging/integrate-cli.sh +232 -0
  19. package/claude-assets/skills/cfn-error-logging/integrate-docker.sh +294 -0
  20. package/claude-assets/skills/cfn-error-logging/invoke-error-logging.sh +839 -0
  21. package/claude-assets/skills/cfn-error-logging/test-error-logging.sh +475 -0
  22. package/claude-assets/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +18 -9
  23. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +5 -3
  24. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +220 -220
  25. package/claude-assets/skills/cfn-task-mode-sanitize/task-mode-env-sanitizer.sh +21 -9
  26. package/claude-assets/skills/cfn-validation-runner-instrumentation/wrapped-executor.sh +3 -1
  27. package/dist/hello.js +27 -3
  28. package/dist/hello.js.map +1 -1
  29. package/dist/server.js +194 -0
  30. package/dist/server.js.map +1 -0
  31. package/dist/server.test.js +207 -0
  32. package/dist/server.test.js.map +1 -0
  33. package/package.json +2 -1
  34. package/scripts/switch-api.sh +140 -12
@@ -0,0 +1,294 @@
1
+ #!/bin/bash
2
+
3
+ ##############################################################################
4
+ # CFN Error Logging - Docker Integration Script
5
+ # Version: 1.0.0
6
+ #
7
+ # Integration script for Docker CFN Loop error logging
8
+ # Automatically triggers error capture on Docker container failures
9
+ #
10
+ # Usage: Source this script in Docker commands or orchestrator scripts
11
+ # source /path/to/integrate-docker.sh
12
+ ##############################################################################
13
+
14
+ # CFN Error Logging Docker Integration
15
+ # This script provides helper functions for Docker CFN Loop error logging
16
+
17
+ # Get the script directory
18
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
19
+ ERROR_LOGGING_SCRIPT="$SCRIPT_DIR/invoke-error-logging.sh"
20
+
21
+ # Helper function
22
+ log() {
23
+ echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
24
+ }
25
+
26
+ # Ensure error logging script exists
27
+ if [ ! -f "$ERROR_LOGGING_SCRIPT" ]; then
28
+ echo "⚠️ Warning: CFN error logging script not found at $ERROR_LOGGING_SCRIPT"
29
+ return 1
30
+ fi
31
+
32
+ # Docker-specific environment detection
33
+ is_docker_environment() {
34
+ [ -f /.dockerenv ] || [ -n "${DOCKER_CONTAINER:-}" ] || grep -q 'docker\|container' /proc/1/cgroup 2>/dev/null
35
+ }
36
+
37
+ # Function to capture Docker container error
38
+ cfn_capture_docker_error() {
39
+ local task_id="$1"
40
+ local container_name="$2"
41
+ local error_type="${3:-docker}"
42
+ local error_message="${4:-Docker container failed}"
43
+ local exit_code="${5:-$?}"
44
+ local context_json="${6:-}"
45
+
46
+ # Add Docker-specific context
47
+ local docker_context="{"
48
+ docker_context+=","
49
+ docker_context+="\"container_name\": \"$container_name\","
50
+ docker_context+="\"docker_id\": \"${DOCKER_CONTAINER_ID:-unknown}\","
51
+ docker_context+="\"docker_image\": \"${DOCKER_IMAGE:-unknown}\","
52
+ docker_context+="\"docker_network\": \"${DOCKER_NETWORK:-unknown}\""
53
+
54
+ # Container resource information
55
+ if command -v docker >/dev/null 2>&1 && [ -n "$container_name" ]; then
56
+ local container_info=$(docker inspect "$container_name" 2>/dev/null || echo "{}")
57
+ local memory_usage=$(echo "$container_info" | jq -r '.[0].MemoryUsage // 0' 2>/dev/null || echo "0")
58
+ local cpu_usage=$(echo "$container_info" | jq -r '.[0].CPUUsage // 0' 2>/dev/null || echo "0")
59
+
60
+ docker_context+=","
61
+ docker_context+="\"memory_usage_mb\": $memory_usage,"
62
+ docker_context+="\"cpu_usage_percent\": $cpu_usage"
63
+ fi
64
+
65
+ docker_context+="}"
66
+
67
+ # Merge with provided context
68
+ if [ -n "$CONTEXT_JSON" ]; then
69
+ docker_context="$docker_context,$CONTEXT_JSON"
70
+ fi
71
+
72
+ docker_context+="}"
73
+
74
+ # Only capture if we have a task ID
75
+ if [ -n "$task_id" ]; then
76
+ "$ERROR_LOGGING_SCRIPT" \
77
+ --action capture \
78
+ --task-id "$task_id" \
79
+ --error-type "$error_type" \
80
+ --error-message "$error_message" \
81
+ --exit-code "$exit_code" \
82
+ --context "$docker_context" \
83
+ >/dev/null 2>&1 || true
84
+ fi
85
+ }
86
+
87
+ # Function to capture Docker logs
88
+ cfn_capture_docker_logs() {
89
+ local task_id="$1"
90
+ local container_name="$2"
91
+ local lines="${3:-100}"
92
+
93
+ if [ -n "$container_name" ] && command -v docker >/dev/null 2>&1; then
94
+ local log_file="$LOG_BASE_DIR/docker-logs-${task_id}-$(date +%s).txt"
95
+ mkdir -p "$LOG_BASE_DIR"
96
+
97
+ log "INFO Capturing Docker logs for container: $container_name"
98
+
99
+ docker logs --tail "$lines" "$container_name" 2>" "$log_file" || true
100
+
101
+ log "Docker logs captured: $log_file"
102
+ fi
103
+ }
104
+
105
+ # Function to capture Docker container state
106
+ cfn_capture_docker_state() {
107
+ local task_id="$1"
108
+ local container_name="$2"
109
+
110
+ if [ -n "$container_name" ] && command -v docker >/dev/null 2>&1; then
111
+ local state_file="$LOG_BASE_DIR/docker-state-${task_id}-$(date +%s).json"
112
+ mkdir -p "$LOG_BASE_DIR"
113
+
114
+ log "CAPTURING Capturing Docker container state for: $container_name"
115
+
116
+ docker inspect "$container_name" 2> "$state_file" || true
117
+
118
+ log "Docker state captured: $state_file"
119
+ fi
120
+ }
121
+
122
+ # Enhanced Docker command wrapper with error logging
123
+ cfn_docker_wrapper() {
124
+ local docker_command="$1"
125
+ local container_name="$2"
126
+ local task_id="$3"
127
+ shift 3
128
+
129
+ # Generate task ID if not provided
130
+ if [ -z "$task_id" ]; then
131
+ task_id="cfn-docker-$(date +%s%N | tail -c 7)-${RANDOM}"
132
+ fi
133
+
134
+ # Generate container name if not provided
135
+ if [ -z "$container_name" ]; then
136
+ container_name="cfn-${task_id}"
137
+ fi
138
+
139
+ log "Starting Docker container: $container_name (task: $task_id)"
140
+
141
+ # Execute Docker command with error capture
142
+ if $docker_command; then
143
+ local exit_code=$?
144
+ log "SUCCESS Docker command succeeded for task: $task_id (container: $container_name)"
145
+ return $exit_code
146
+ else
147
+ local exit_code=$?
148
+ log "ERROR Docker command failed for task: $task_id (container: $container_name, exit code: $exit_code)"
149
+
150
+ # Capture comprehensive Docker error information
151
+ cfn_capture_docker_error "$task_id" "$container_name" "docker" "Docker command failed: $docker_command" "$exit_code"
152
+ cfn_capture_docker_logs "$task_id" "$container_name"
153
+ cfn_capture_docker_state "$task_id" "$container_name"
154
+
155
+ # Generate and show report
156
+ echo ""
157
+ echo "INFO Generating Docker error report..."
158
+ cfn_generate_report "$task_id"
159
+
160
+ return $exit_code
161
+ fi
162
+ }
163
+
164
+ # Docker container monitoring
165
+ cfn_monitor_docker_container() {
166
+ local container_name="$1"
167
+ local task_id="$2"
168
+ local duration="${3:-60}" # Default 60 seconds
169
+
170
+ if [ -z "$container_name" ]; then
171
+ echo "ERROR Error: Container name required for monitoring"
172
+ return 1
173
+ fi
174
+
175
+ log "WATCHING Monitoring Docker container: $container_name (duration: ${duration}s)"
176
+
177
+ local start_time=$(date +%s)
178
+ local end_time=$((start_time + duration))
179
+ local current_time
180
+
181
+ while [ $current_time -lt $end_time ]; do
182
+ if command -v docker >/dev/null 2>&1 && docker ps --filter "name=$container_name" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | grep -q "$container_name"; then
183
+ # Container is running
184
+ local container_status=$(docker ps --filter "name=$container_name" --format "{{.Status}}" 2>/dev/null)
185
+ local resource_usage=$(docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" --filter "name=$container_name" 2>/dev/null | tail -n +2)
186
+
187
+ if [ -n "$resource_usage" ]; then
188
+ log "MONITORING Container $container_name ($container_status): $resource_usage"
189
+ fi
190
+ else
191
+ # Container stopped or failed
192
+ log "⚠️ Container $container_name is no longer running"
193
+
194
+ # Capture final state and error information
195
+ cfn_capture_docker_error "$task_id" "$container_name" "docker-monitoring" "Container stopped during monitoring"
196
+ break
197
+ fi
198
+
199
+ sleep 5
200
+ current_time=$(date +%s)
201
+ done
202
+
203
+ log "WATCHING Docker monitoring completed for: $container_name"
204
+ }
205
+
206
+ # Docker cleanup with error logging
207
+ cfn_docker_cleanup() {
208
+ local task_id="$1"
209
+ local container_pattern="$2"
210
+
211
+ log "CLEANING Running Docker cleanup for task: $task_id"
212
+
213
+ # Stop and remove containers matching pattern
214
+ if [ -n "$container_pattern" ]; then
215
+ local containers=$(docker ps -a --filter "name=$container_pattern" --format "{{.Names}}" 2>/dev/null || echo "")
216
+
217
+ for container in $containers; do
218
+ log " Stopping container: $container"
219
+ docker stop "$container" >/dev/null 2>&1 || true
220
+ docker rm "$container" >/dev/null 2>/dev/null || true
221
+ done
222
+ fi
223
+
224
+ # Remove Docker networks if they belong to this task
225
+ local networks=$(docker network ls --filter "name=cfn-$task_id-*" --format "{{.Name}}" 2>/dev/null || echo "")
226
+
227
+ for network in $networks; do
228
+ log " Removing network: $network"
229
+ docker network rm "$network" >/dev/null 2>/dev/null || true
230
+ done
231
+
232
+ # Remove Docker volumes if they belong to this task
233
+ local volumes=$(docker volume ls --filter "name=cfn-$task_id-*" --format "{{.Name}}" 2>/dev/null || echo "")
234
+
235
+ for volume in $volumes; do
236
+ log " Removing volume: $volume"
237
+ docker volume rm "$volume" >/dev/null 2/dv/null || true
238
+ done
239
+
240
+ # Capture cleanup state
241
+ cfn_capture_docker_error "$task_id" "docker-cleanup" "Docker cleanup completed" "0"
242
+
243
+ # Run standard cleanup
244
+ if [ -f "$ERROR_LOGGING_SCRIPT" ]; then
245
+ "$ERROR_LOGGING_SCRIPT" --action cleanup --retention-days 7 >/dev/null 2>&1 || true
246
+ fi
247
+
248
+ log "SUCCESS Docker cleanup completed"
249
+ }
250
+
251
+ # Docker resource monitoring
252
+ cfn_monitor_docker_resources() {
253
+ local task_id="$1"
254
+
255
+ log "MONITORING Monitoring Docker resources for task: $task_id"
256
+
257
+ if command -v docker >/dev/null 2>&1; then
258
+ echo "Docker System Status:"
259
+ docker system df
260
+ echo ""
261
+
262
+ echo "Running Containers:"
263
+ docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}\t{{.Size}}"
264
+ echo ""
265
+
266
+ echo "Resource Usage:"
267
+ docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\{{.MemUsage}}\t{{.NetIO}}" | head -10
268
+ echo ""
269
+
270
+ # CFN-specific containers
271
+ echo "CFN Loop Containers:"
272
+ docker ps --filter "name=cfn-*" --format "table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.CreatedAt}}" 2>/dev/null || echo "No CFN containers running"
273
+ fi
274
+ }
275
+
276
+ # Export functions for use in other scripts
277
+ export -f cfn_capture_docker_error
278
+ export -f cfn_capture_docker_logs
279
+ export -f cfn_capture_docker_state
280
+ export -f cfn_docker_wrapper
281
+ export -f cfn_monitor_docker_container
282
+ export -f cfn_docker_cleanup
283
+ export -f cfn_monitor_docker_resources
284
+
285
+ # Convenience aliases
286
+ if is_docker_environment; then
287
+ alias cfn-docker-logs='cfn_capture_docker_logs'
288
+ alias cfn-docker-state='cfn_capture_docker_state'
289
+ alias cfn-docker-monitor='cfn_monitor_docker_container'
290
+ alias cfn-docker-cleanup='cfn_docker_cleanup'
291
+ alias cfn-docker-resources='cfn_monitor_docker_resources'
292
+ fi
293
+
294
+ log "CFN Error Logging Docker integration loaded"