claude-flow-novice 2.15.2 → 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 (98) hide show
  1. package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -243
  2. package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
  3. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +78 -78
  4. package/.claude/hooks/cfn-post-edit.config.json +44 -44
  5. package/.claude/skills/agent-lifecycle/SKILL.md +60 -0
  6. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +573 -0
  7. package/.claude/skills/agent-lifecycle/simple-audit.sh +31 -0
  8. package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  9. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  10. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  11. package/.claude/skills/cfn-redis-coordination/get-context.sh +112 -112
  12. package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  13. package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  14. package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  15. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  16. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +92 -92
  17. package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  18. package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
  19. package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
  20. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +78 -78
  21. package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
  22. package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
  23. package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
  24. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +572 -572
  25. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +30 -30
  26. package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
  27. package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
  28. package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
  29. package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
  30. package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  31. package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
  32. package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
  33. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  34. package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
  35. package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
  36. package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
  37. package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
  38. package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
  39. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  40. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +112 -112
  41. package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
  42. package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
  43. package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
  44. package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
  45. package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
  46. package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
  47. package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  48. package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  49. package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  50. package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  51. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +92 -92
  52. package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  53. package/claude-assets/skills/docker-build/SKILL.md +96 -203
  54. package/claude-assets/skills/docker-build/build.sh +73 -73
  55. package/claude-assets/skills/integration/agent-handoff.sh +494 -0
  56. package/claude-assets/skills/integration/file-operations.sh +414 -0
  57. package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
  58. package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
  59. package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
  60. package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
  61. package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
  62. package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
  63. package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
  64. package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
  65. package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
  66. package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
  67. package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
  68. package/claude-assets/skills/workflow-codification/test-integration.sh +281 -0
  69. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +445 -0
  70. package/claude-assets/skills/workflow-codification/track-edge-case.sh +323 -0
  71. package/dist/cli/config-manager.js +91 -109
  72. package/dist/cli/config-manager.js.map +1 -1
  73. package/dist/integration/DatabaseHandoff.js +507 -0
  74. package/dist/integration/DatabaseHandoff.js.map +1 -0
  75. package/dist/integration/StandardAdapter.js +291 -0
  76. package/dist/integration/StandardAdapter.js.map +1 -0
  77. package/dist/lib/agent-output-parser.js +518 -0
  78. package/dist/lib/agent-output-parser.js.map +1 -0
  79. package/dist/lib/agent-output-validator.js +950 -0
  80. package/dist/lib/agent-output-validator.js.map +1 -0
  81. package/dist/lib/artifact-registry.js +443 -0
  82. package/dist/lib/artifact-registry.js.map +1 -0
  83. package/dist/lib/config-validator.js +687 -0
  84. package/dist/lib/config-validator.js.map +1 -0
  85. package/dist/types/agent-output.js +44 -0
  86. package/dist/types/agent-output.js.map +1 -0
  87. package/dist/types/config.js +28 -0
  88. package/dist/types/config.js.map +1 -0
  89. package/package.json +2 -1
  90. package/scripts/artifact-cleanup.sh +392 -0
  91. package/scripts/deploy-production.sh +355 -355
  92. package/scripts/docker-playwright-fix.sh +311 -311
  93. package/scripts/docker-rebuild-all-agents.sh +127 -127
  94. package/scripts/memory-leak-prevention.sh +305 -305
  95. package/scripts/migrate-artifacts.sh +563 -0
  96. package/scripts/migrate-yaml-to-json.sh +465 -0
  97. package/scripts/run-marketing-tests.sh +42 -42
  98. package/scripts/update_paths.sh +46 -46
@@ -1,326 +1,326 @@
1
- #!/bin/bash
2
- # CFN Node.js Heap Size Limiter for Task Mode
3
- # Dynamically adjusts NODE_OPTIONS based on execution mode to prevent memory bloat
4
-
5
- set -euo pipefail
6
-
7
- # Configuration
8
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
10
-
11
- # Mode-based heap sizes (in MB)
12
- declare -A HEAP_SIZES=(
13
- ["task"]="2048" # 2GB for Task mode (conservative)
14
- ["cli"]="8192" # 8GB for CLI mode (production)
15
- ["debug"]="1024" # 1GB for debugging (minimal)
16
- ["test"]="3072" # 3GB for testing (moderate)
17
- )
18
-
19
- # Default heap sizes by tool type
20
- declare -A TOOL_HEAPS=(
21
- ["node"]="2048"
22
- ["bun"]="3072"
23
- ["playwright"]="4096"
24
- ["test"]="1536"
25
- ["validator"]="1024"
26
- ["reviewer"]="1024"
27
- ["tester"]="1024"
28
- })
29
-
30
- # Function to detect current execution mode
31
- detect_execution_mode() {
32
- # Use existing mode detection if available
33
- if [[ -f "$PROJECT_ROOT/.claude/skills/cfn-task-mode-safety/mode-detection.sh" ]]; then
34
- source "$PROJECT_ROOT/.claude/skills/cfn-task-mode-safety/mode-detection.sh"
35
- detect_execution_mode 2>/dev/null && return 0
36
- fi
37
-
38
- # Fallback detection
39
- if [[ -n "${CFN_MODE:-}" ]]; then
40
- echo "$CFN_MODE"
41
- elif [[ -n "${TASK_ID:-}" && -n "${AGENT_ID:-}" ]]; then
42
- echo "cli"
43
- else
44
- echo "task" # Safe default
45
- fi
46
- }
47
-
48
- # Function to determine tool type from command line
49
- detect_tool_type() {
50
- local command="$1"
51
- local command_name=$(basename "$command")
52
-
53
- case "$command_name" in
54
- "node"|"bun")
55
- # Look at script name to determine tool type
56
- if [[ $# -gt 1 ]]; then
57
- local script_name=$(basename "$2" | tr '[:upper:]' '[:lower:]')
58
- case "$script_name" in
59
- *"test"*) echo "test" ;;
60
- *"validator"*) echo "validator" ;;
61
- *"reviewer"*) echo "reviewer" ;;
62
- *"tester"*) echo "tester" ;;
63
- *) echo "$command_name" ;;
64
- esac
65
- else
66
- echo "$command_name"
67
- fi
68
- ;;
69
- "npx")
70
- if [[ $# -gt 1 ]]; then
71
- local tool_name=$(basename "$2" | tr '[:upper:]' '[:lower:]')
72
- case "$tool_name" in
73
- *"playwright"*) echo "playwright" ;;
74
- *) echo "npx" ;;
75
- esac
76
- else
77
- echo "npx"
78
- fi
79
- ;;
80
- *)
81
- echo "unknown"
82
- ;;
83
- esac
84
- }
85
-
86
- # Function to calculate appropriate heap size
87
- calculate_heap_size() {
88
- local mode="$1"
89
- local tool_type="$2"
90
- local override_heap="${3:-}"
91
-
92
- # Use override if provided
93
- if [[ -n "$override_heap" && "$override_heap" =~ ^[0-9]+$ ]]; then
94
- echo "$override_heap"
95
- return 0
96
- fi
97
-
98
- # Use tool-specific heap size if available
99
- local tool_heap="${TOOL_HEAPS[$tool_type]:-}"
100
- if [[ -n "$tool_heap" ]]; then
101
- echo "$tool_heap"
102
- return 0
103
- fi
104
-
105
- # Fall back to mode-based heap size
106
- echo "${HEAP_SIZES[$mode]:-2048}"
107
- }
108
-
109
- # Function to configure NODE_OPTIONS
110
- configure_node_options() {
111
- local mode="$1"
112
- local tool_type="$2"
113
- local heap_size="$3"
114
-
115
- echo "🎛️ Configuring Node.js heap size for Task mode..." >&2
116
-
117
- # Base NODE_OPTIONS
118
- local node_opts="${NODE_OPTIONS:-}"
119
-
120
- # Remove existing heap size settings
121
- node_opts=$(echo "$node_opts" | sed 's/--max-old-space-size=[0-9]*//g')
122
- node_opts=$(echo "$node_opts" | sed 's/--max-semi-space-size=[0-9]*//g')
123
-
124
- # Add new heap size
125
- node_opts="$node_opts --max-old-space-size=$heap_size"
126
-
127
- # Add semi-space size (quarter of heap size)
128
- local semi_space=$((heap_size / 4))
129
- node_opts="$node_opts --max-semi-space-size=$semi_space"
130
-
131
- # Add Task mode specific optimizations
132
- if [[ "$mode" == "task" ]]; then
133
- node_opts="$node_opts --optimize-for-size"
134
- node_opts="$node_opts --max-executable-size=512"
135
- node_opts="$node_opts --gc-interval=100"
136
- fi
137
-
138
- # Export updated NODE_OPTIONS
139
- export NODE_OPTIONS="$node_opts"
140
-
141
- echo "✅ NODE_OPTIONS configured: $NODE_OPTIONS" >&2
142
- echo " Mode: $mode" >&2
143
- echo " Tool: $tool_type" >&2
144
- echo " Heap: ${heap_size}MB" >&2
145
- echo " Semi-space: ${semi_space}MB" >&2
146
-
147
- # Log configuration
148
- if [[ -n "${CFN_VALIDATION_LOG_DIR:-}" ]]; then
149
- local log_file="$CFN_VALIDATION_LOG_DIR/heap-config_$(date +%Y%m%d_%H%M%S).log"
150
- mkdir -p "$(dirname "$log_file")"
151
- cat > "$log_file" <<EOF
152
- {
153
- "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
154
- "mode": "$mode",
155
- "tool_type": "$tool_type",
156
- "heap_size_mb": $heap_size,
157
- "semi_space_size_mb": $semi_space,
158
- "node_options": "$NODE_OPTIONS",
159
- "command": "${BASH_SOURCE[*]}",
160
- "pid": $$,
161
- "ppid": ${PPID:-0}
162
- }
163
- EOF
164
- echo "📝 Heap configuration logged: $log_file" >&2
165
- fi
166
- }
167
-
168
- # Function to validate heap size
169
- validate_heap_configuration() {
170
- local current_heap="${NODE_OPTIONS:-}"
171
-
172
- if echo "$current_heap" | grep -q "max-old-space-size"; then
173
- local heap_value=$(echo "$current_heap" | grep -o "max-old-space-size=[0-9]*" | cut -d= -f2)
174
- local mode=$(detect_execution_mode)
175
- local max_heap="${HEAP_SIZES[$mode]:-2048}"
176
-
177
- if [[ "$heap_value" -gt "$max_heap" ]]; then
178
- echo "⚠️ Heap size ($heap_value MB) exceeds recommended maximum for $mode mode ($max_heap MB)" >&2
179
- return 1
180
- else
181
- echo "✅ Heap size ($heap_value MB) within recommended limits for $mode mode" >&2
182
- return 0
183
- fi
184
- else
185
- echo "⚠️ No heap size configured in NODE_OPTIONS" >&2
186
- return 1
187
- fi
188
- }
189
-
190
- # Main heap limiting function
191
- limit_node_heap() {
192
- local command="$1"
193
- local heap_override="${2:-}"
194
-
195
- # Detect execution mode
196
- local mode=$(detect_execution_mode)
197
-
198
- # Detect tool type
199
- local tool_type=$(detect_tool_type "$command" "${@:2}")
200
-
201
- # Calculate appropriate heap size
202
- local heap_size=$(calculate_heap_size "$mode" "$tool_type" "$heap_override")
203
-
204
- # Configure NODE_OPTIONS
205
- configure_node_options "$mode" "$tool_type" "$heap_size"
206
-
207
- echo "🎯 Node.js heap size limited to ${heap_size}MB for $tool_type in $mode mode" >&2
208
- }
209
-
210
- # Function to execute command with heap limiting
211
- exec_with_heap_limit() {
212
- local command="$1"
213
- local heap_override="${2:-}"
214
- shift 2
215
- local args=("$@")
216
-
217
- # Apply heap limiting
218
- limit_node_heap "$command" "$heap_override"
219
-
220
- # Execute command
221
- echo "🚀 Executing: $command ${args[*]}" >&2
222
- echo " NODE_OPTIONS: $NODE_OPTIONS" >&2
223
-
224
- # Use wrapped executor if available
225
- if [[ -f "$PROJECT_ROOT/.claude/skills/cfn-validation-runner-instrumentation/wrapped-executor.sh" ]]; then
226
- source "$PROJECT_ROOT/.claude/skills/cfn-validation-runner-instrumentation/wrapped-executor.sh"
227
- execute_instrumented "$command" 300 2048 "${args[@]}"
228
- else
229
- "$command" "${args[@]}"
230
- fi
231
- }
232
-
233
- # Show usage
234
- show_usage() {
235
- cat <<'EOF'
236
- CFN Node.js Heap Size Limiter for Task Mode
237
-
238
- USAGE:
239
- source "$(dirname "${BASH_SOURCE[0]}")/task-mode-heap-limiter.sh"
240
-
241
- # Configuration
242
- limit_node_heap <command> [heap_override_mb] # Limit heap size for command
243
- configure_node_options <mode> <tool_type> <size> # Configure NODE_OPTIONS
244
- validate_heap_configuration # Validate current configuration
245
-
246
- # Execution
247
- exec_with_heap_limit <command> [heap_override] [args...]
248
-
249
- ENVIRONMENT VARIABLES:
250
- NODE_OPTIONS # Modified to include heap size limits
251
- CFN_MODE # Detected or set execution mode
252
- CFN_VALIDATION_LOG_DIR # Directory for heap configuration logs
253
-
254
- HEAP SIZES BY MODE:
255
- task: 2048 MB (conservative)
256
- cli: 8192 MB (production)
257
- debug: 1024 MB (minimal)
258
- test: 3072 MB (moderate)
259
-
260
- HEAP SIZES BY TOOL TYPE:
261
- node: 2048 MB
262
- bun: 3072 MB
263
- playwright: 4096 MB
264
- test: 1536 MB
265
- validator: 1024 MB
266
- reviewer: 1024 MB
267
- tester: 1024 MB
268
-
269
- EXAMPLES:
270
- # Limit heap for Node.js execution
271
- limit_node_heap "node" 1024
272
- node script.js
273
-
274
- # Execute with automatic heap limiting
275
- exec_with_heap_limit "bun" "build.ts"
276
-
277
- # Custom heap size
278
- exec_with_heap_limit "node" "4096" "heavy-script.js"
279
-
280
- # Configure manually
281
- configure_node_options "task" "validator" 1024
282
-
283
- # Validate current configuration
284
- validate_heap_configuration
285
-
286
- EOF
287
- }
288
-
289
- # Main execution block
290
- if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
291
- if [[ "$1" == "--help" || "$1" == "-h" ]]; then
292
- show_usage
293
- exit 0
294
- fi
295
-
296
- # Execute operation if provided
297
- if [[ $# -gt 0 ]]; then
298
- case "$1" in
299
- "limit")
300
- shift
301
- limit_node_heap "$@"
302
- ;;
303
- "configure")
304
- shift
305
- configure_node_options "$@"
306
- ;;
307
- "validate")
308
- validate_heap_configuration
309
- ;;
310
- "exec")
311
- shift
312
- exec_with_heap_limit "$@"
313
- ;;
314
- *)
315
- echo "Unknown command: $1" >&2
316
- echo "Use --help for usage information" >&2
317
- exit 1
318
- ;;
319
- esac
320
- else
321
- echo "CFN Node.js Heap Size Limiter for Task Mode" >&2
322
- echo "Current mode: $(detect_execution_mode)" >&2
323
- echo "Current NODE_OPTIONS: ${NODE_OPTIONS:-unset}" >&2
324
- echo "Use --help for usage information" >&2
325
- fi
1
+ #!/bin/bash
2
+ # CFN Node.js Heap Size Limiter for Task Mode
3
+ # Dynamically adjusts NODE_OPTIONS based on execution mode to prevent memory bloat
4
+
5
+ set -euo pipefail
6
+
7
+ # Configuration
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
10
+
11
+ # Mode-based heap sizes (in MB)
12
+ declare -A HEAP_SIZES=(
13
+ ["task"]="2048" # 2GB for Task mode (conservative)
14
+ ["cli"]="8192" # 8GB for CLI mode (production)
15
+ ["debug"]="1024" # 1GB for debugging (minimal)
16
+ ["test"]="3072" # 3GB for testing (moderate)
17
+ )
18
+
19
+ # Default heap sizes by tool type
20
+ declare -A TOOL_HEAPS=(
21
+ ["node"]="2048"
22
+ ["bun"]="3072"
23
+ ["playwright"]="4096"
24
+ ["test"]="1536"
25
+ ["validator"]="1024"
26
+ ["reviewer"]="1024"
27
+ ["tester"]="1024"
28
+ })
29
+
30
+ # Function to detect current execution mode
31
+ detect_execution_mode() {
32
+ # Use existing mode detection if available
33
+ if [[ -f "$PROJECT_ROOT/.claude/skills/cfn-task-mode-safety/mode-detection.sh" ]]; then
34
+ source "$PROJECT_ROOT/.claude/skills/cfn-task-mode-safety/mode-detection.sh"
35
+ detect_execution_mode 2>/dev/null && return 0
36
+ fi
37
+
38
+ # Fallback detection
39
+ if [[ -n "${CFN_MODE:-}" ]]; then
40
+ echo "$CFN_MODE"
41
+ elif [[ -n "${TASK_ID:-}" && -n "${AGENT_ID:-}" ]]; then
42
+ echo "cli"
43
+ else
44
+ echo "task" # Safe default
45
+ fi
46
+ }
47
+
48
+ # Function to determine tool type from command line
49
+ detect_tool_type() {
50
+ local command="$1"
51
+ local command_name=$(basename "$command")
52
+
53
+ case "$command_name" in
54
+ "node"|"bun")
55
+ # Look at script name to determine tool type
56
+ if [[ $# -gt 1 ]]; then
57
+ local script_name=$(basename "$2" | tr '[:upper:]' '[:lower:]')
58
+ case "$script_name" in
59
+ *"test"*) echo "test" ;;
60
+ *"validator"*) echo "validator" ;;
61
+ *"reviewer"*) echo "reviewer" ;;
62
+ *"tester"*) echo "tester" ;;
63
+ *) echo "$command_name" ;;
64
+ esac
65
+ else
66
+ echo "$command_name"
67
+ fi
68
+ ;;
69
+ "npx")
70
+ if [[ $# -gt 1 ]]; then
71
+ local tool_name=$(basename "$2" | tr '[:upper:]' '[:lower:]')
72
+ case "$tool_name" in
73
+ *"playwright"*) echo "playwright" ;;
74
+ *) echo "npx" ;;
75
+ esac
76
+ else
77
+ echo "npx"
78
+ fi
79
+ ;;
80
+ *)
81
+ echo "unknown"
82
+ ;;
83
+ esac
84
+ }
85
+
86
+ # Function to calculate appropriate heap size
87
+ calculate_heap_size() {
88
+ local mode="$1"
89
+ local tool_type="$2"
90
+ local override_heap="${3:-}"
91
+
92
+ # Use override if provided
93
+ if [[ -n "$override_heap" && "$override_heap" =~ ^[0-9]+$ ]]; then
94
+ echo "$override_heap"
95
+ return 0
96
+ fi
97
+
98
+ # Use tool-specific heap size if available
99
+ local tool_heap="${TOOL_HEAPS[$tool_type]:-}"
100
+ if [[ -n "$tool_heap" ]]; then
101
+ echo "$tool_heap"
102
+ return 0
103
+ fi
104
+
105
+ # Fall back to mode-based heap size
106
+ echo "${HEAP_SIZES[$mode]:-2048}"
107
+ }
108
+
109
+ # Function to configure NODE_OPTIONS
110
+ configure_node_options() {
111
+ local mode="$1"
112
+ local tool_type="$2"
113
+ local heap_size="$3"
114
+
115
+ echo "🎛️ Configuring Node.js heap size for Task mode..." >&2
116
+
117
+ # Base NODE_OPTIONS
118
+ local node_opts="${NODE_OPTIONS:-}"
119
+
120
+ # Remove existing heap size settings
121
+ node_opts=$(echo "$node_opts" | sed 's/--max-old-space-size=[0-9]*//g')
122
+ node_opts=$(echo "$node_opts" | sed 's/--max-semi-space-size=[0-9]*//g')
123
+
124
+ # Add new heap size
125
+ node_opts="$node_opts --max-old-space-size=$heap_size"
126
+
127
+ # Add semi-space size (quarter of heap size)
128
+ local semi_space=$((heap_size / 4))
129
+ node_opts="$node_opts --max-semi-space-size=$semi_space"
130
+
131
+ # Add Task mode specific optimizations
132
+ if [[ "$mode" == "task" ]]; then
133
+ node_opts="$node_opts --optimize-for-size"
134
+ node_opts="$node_opts --max-executable-size=512"
135
+ node_opts="$node_opts --gc-interval=100"
136
+ fi
137
+
138
+ # Export updated NODE_OPTIONS
139
+ export NODE_OPTIONS="$node_opts"
140
+
141
+ echo "✅ NODE_OPTIONS configured: $NODE_OPTIONS" >&2
142
+ echo " Mode: $mode" >&2
143
+ echo " Tool: $tool_type" >&2
144
+ echo " Heap: ${heap_size}MB" >&2
145
+ echo " Semi-space: ${semi_space}MB" >&2
146
+
147
+ # Log configuration
148
+ if [[ -n "${CFN_VALIDATION_LOG_DIR:-}" ]]; then
149
+ local log_file="$CFN_VALIDATION_LOG_DIR/heap-config_$(date +%Y%m%d_%H%M%S).log"
150
+ mkdir -p "$(dirname "$log_file")"
151
+ cat > "$log_file" <<EOF
152
+ {
153
+ "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
154
+ "mode": "$mode",
155
+ "tool_type": "$tool_type",
156
+ "heap_size_mb": $heap_size,
157
+ "semi_space_size_mb": $semi_space,
158
+ "node_options": "$NODE_OPTIONS",
159
+ "command": "${BASH_SOURCE[*]}",
160
+ "pid": $$,
161
+ "ppid": ${PPID:-0}
162
+ }
163
+ EOF
164
+ echo "📝 Heap configuration logged: $log_file" >&2
165
+ fi
166
+ }
167
+
168
+ # Function to validate heap size
169
+ validate_heap_configuration() {
170
+ local current_heap="${NODE_OPTIONS:-}"
171
+
172
+ if echo "$current_heap" | grep -q "max-old-space-size"; then
173
+ local heap_value=$(echo "$current_heap" | grep -o "max-old-space-size=[0-9]*" | cut -d= -f2)
174
+ local mode=$(detect_execution_mode)
175
+ local max_heap="${HEAP_SIZES[$mode]:-2048}"
176
+
177
+ if [[ "$heap_value" -gt "$max_heap" ]]; then
178
+ echo "⚠️ Heap size ($heap_value MB) exceeds recommended maximum for $mode mode ($max_heap MB)" >&2
179
+ return 1
180
+ else
181
+ echo "✅ Heap size ($heap_value MB) within recommended limits for $mode mode" >&2
182
+ return 0
183
+ fi
184
+ else
185
+ echo "⚠️ No heap size configured in NODE_OPTIONS" >&2
186
+ return 1
187
+ fi
188
+ }
189
+
190
+ # Main heap limiting function
191
+ limit_node_heap() {
192
+ local command="$1"
193
+ local heap_override="${2:-}"
194
+
195
+ # Detect execution mode
196
+ local mode=$(detect_execution_mode)
197
+
198
+ # Detect tool type
199
+ local tool_type=$(detect_tool_type "$command" "${@:2}")
200
+
201
+ # Calculate appropriate heap size
202
+ local heap_size=$(calculate_heap_size "$mode" "$tool_type" "$heap_override")
203
+
204
+ # Configure NODE_OPTIONS
205
+ configure_node_options "$mode" "$tool_type" "$heap_size"
206
+
207
+ echo "🎯 Node.js heap size limited to ${heap_size}MB for $tool_type in $mode mode" >&2
208
+ }
209
+
210
+ # Function to execute command with heap limiting
211
+ exec_with_heap_limit() {
212
+ local command="$1"
213
+ local heap_override="${2:-}"
214
+ shift 2
215
+ local args=("$@")
216
+
217
+ # Apply heap limiting
218
+ limit_node_heap "$command" "$heap_override"
219
+
220
+ # Execute command
221
+ echo "🚀 Executing: $command ${args[*]}" >&2
222
+ echo " NODE_OPTIONS: $NODE_OPTIONS" >&2
223
+
224
+ # Use wrapped executor if available
225
+ if [[ -f "$PROJECT_ROOT/.claude/skills/cfn-validation-runner-instrumentation/wrapped-executor.sh" ]]; then
226
+ source "$PROJECT_ROOT/.claude/skills/cfn-validation-runner-instrumentation/wrapped-executor.sh"
227
+ execute_instrumented "$command" 300 2048 "${args[@]}"
228
+ else
229
+ "$command" "${args[@]}"
230
+ fi
231
+ }
232
+
233
+ # Show usage
234
+ show_usage() {
235
+ cat <<'EOF'
236
+ CFN Node.js Heap Size Limiter for Task Mode
237
+
238
+ USAGE:
239
+ source "$(dirname "${BASH_SOURCE[0]}")/task-mode-heap-limiter.sh"
240
+
241
+ # Configuration
242
+ limit_node_heap <command> [heap_override_mb] # Limit heap size for command
243
+ configure_node_options <mode> <tool_type> <size> # Configure NODE_OPTIONS
244
+ validate_heap_configuration # Validate current configuration
245
+
246
+ # Execution
247
+ exec_with_heap_limit <command> [heap_override] [args...]
248
+
249
+ ENVIRONMENT VARIABLES:
250
+ NODE_OPTIONS # Modified to include heap size limits
251
+ CFN_MODE # Detected or set execution mode
252
+ CFN_VALIDATION_LOG_DIR # Directory for heap configuration logs
253
+
254
+ HEAP SIZES BY MODE:
255
+ task: 2048 MB (conservative)
256
+ cli: 8192 MB (production)
257
+ debug: 1024 MB (minimal)
258
+ test: 3072 MB (moderate)
259
+
260
+ HEAP SIZES BY TOOL TYPE:
261
+ node: 2048 MB
262
+ bun: 3072 MB
263
+ playwright: 4096 MB
264
+ test: 1536 MB
265
+ validator: 1024 MB
266
+ reviewer: 1024 MB
267
+ tester: 1024 MB
268
+
269
+ EXAMPLES:
270
+ # Limit heap for Node.js execution
271
+ limit_node_heap "node" 1024
272
+ node script.js
273
+
274
+ # Execute with automatic heap limiting
275
+ exec_with_heap_limit "bun" "build.ts"
276
+
277
+ # Custom heap size
278
+ exec_with_heap_limit "node" "4096" "heavy-script.js"
279
+
280
+ # Configure manually
281
+ configure_node_options "task" "validator" 1024
282
+
283
+ # Validate current configuration
284
+ validate_heap_configuration
285
+
286
+ EOF
287
+ }
288
+
289
+ # Main execution block
290
+ if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
291
+ if [[ "$1" == "--help" || "$1" == "-h" ]]; then
292
+ show_usage
293
+ exit 0
294
+ fi
295
+
296
+ # Execute operation if provided
297
+ if [[ $# -gt 0 ]]; then
298
+ case "$1" in
299
+ "limit")
300
+ shift
301
+ limit_node_heap "$@"
302
+ ;;
303
+ "configure")
304
+ shift
305
+ configure_node_options "$@"
306
+ ;;
307
+ "validate")
308
+ validate_heap_configuration
309
+ ;;
310
+ "exec")
311
+ shift
312
+ exec_with_heap_limit "$@"
313
+ ;;
314
+ *)
315
+ echo "Unknown command: $1" >&2
316
+ echo "Use --help for usage information" >&2
317
+ exit 1
318
+ ;;
319
+ esac
320
+ else
321
+ echo "CFN Node.js Heap Size Limiter for Task Mode" >&2
322
+ echo "Current mode: $(detect_execution_mode)" >&2
323
+ echo "Current NODE_OPTIONS: ${NODE_OPTIONS:-unset}" >&2
324
+ echo "Use --help for usage information" >&2
325
+ fi
326
326
  fi