agileflow 2.94.1 → 2.95.1

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 (74) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +3 -3
  3. package/lib/colors.generated.js +117 -0
  4. package/lib/colors.js +59 -109
  5. package/lib/generator-factory.js +333 -0
  6. package/lib/path-utils.js +49 -0
  7. package/lib/session-registry.js +25 -15
  8. package/lib/smart-json-file.js +40 -32
  9. package/lib/state-machine.js +286 -0
  10. package/package.json +1 -1
  11. package/scripts/agileflow-configure.js +7 -6
  12. package/scripts/archive-completed-stories.sh +86 -11
  13. package/scripts/babysit-context-restore.js +89 -0
  14. package/scripts/claude-tmux.sh +111 -5
  15. package/scripts/damage-control/bash-tool-damage-control.js +11 -247
  16. package/scripts/damage-control/edit-tool-damage-control.js +9 -249
  17. package/scripts/damage-control/write-tool-damage-control.js +9 -244
  18. package/scripts/generate-colors.js +314 -0
  19. package/scripts/lib/colors.generated.sh +82 -0
  20. package/scripts/lib/colors.sh +10 -70
  21. package/scripts/lib/configure-features.js +401 -0
  22. package/scripts/lib/context-loader.js +181 -52
  23. package/scripts/precompact-context.sh +54 -17
  24. package/scripts/session-coordinator.sh +2 -2
  25. package/scripts/session-manager.js +653 -10
  26. package/src/core/commands/audit.md +93 -0
  27. package/src/core/commands/auto.md +73 -0
  28. package/src/core/commands/babysit.md +169 -13
  29. package/src/core/commands/baseline.md +73 -0
  30. package/src/core/commands/batch.md +64 -0
  31. package/src/core/commands/blockers.md +60 -0
  32. package/src/core/commands/board.md +66 -0
  33. package/src/core/commands/choose.md +77 -0
  34. package/src/core/commands/ci.md +77 -0
  35. package/src/core/commands/compress.md +27 -1
  36. package/src/core/commands/configure.md +126 -10
  37. package/src/core/commands/council.md +74 -0
  38. package/src/core/commands/debt.md +72 -0
  39. package/src/core/commands/deploy.md +73 -0
  40. package/src/core/commands/deps.md +68 -0
  41. package/src/core/commands/docs.md +60 -0
  42. package/src/core/commands/feedback.md +68 -0
  43. package/src/core/commands/ideate.md +74 -0
  44. package/src/core/commands/impact.md +74 -0
  45. package/src/core/commands/install.md +529 -0
  46. package/src/core/commands/maintain.md +558 -0
  47. package/src/core/commands/metrics.md +75 -0
  48. package/src/core/commands/multi-expert.md +74 -0
  49. package/src/core/commands/packages.md +69 -0
  50. package/src/core/commands/readme-sync.md +64 -0
  51. package/src/core/commands/research/analyze.md +285 -121
  52. package/src/core/commands/research/import.md +281 -109
  53. package/src/core/commands/retro.md +76 -0
  54. package/src/core/commands/review.md +72 -0
  55. package/src/core/commands/rlm.md +83 -0
  56. package/src/core/commands/rpi.md +90 -0
  57. package/src/core/commands/session/cleanup.md +214 -12
  58. package/src/core/commands/session/end.md +155 -17
  59. package/src/core/commands/sprint.md +72 -0
  60. package/src/core/commands/story-validate.md +68 -0
  61. package/src/core/commands/template.md +69 -0
  62. package/src/core/commands/tests.md +83 -0
  63. package/src/core/commands/update.md +59 -0
  64. package/src/core/commands/validate-expertise.md +76 -0
  65. package/src/core/commands/velocity.md +74 -0
  66. package/src/core/commands/verify.md +91 -0
  67. package/src/core/commands/whats-new.md +69 -0
  68. package/src/core/commands/workflow.md +88 -0
  69. package/src/core/templates/command-documentation.md +187 -0
  70. package/tools/cli/commands/session.js +1171 -0
  71. package/tools/cli/commands/setup.js +2 -81
  72. package/tools/cli/installers/core/installer.js +0 -5
  73. package/tools/cli/installers/ide/claude-code.js +6 -0
  74. package/tools/cli/lib/config-manager.js +42 -5
@@ -0,0 +1,314 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * generate-colors.js - Generate color files from YAML config
5
+ *
6
+ * Reads config/colors.yaml and generates:
7
+ * - lib/colors.js (JavaScript module)
8
+ * - scripts/lib/colors.sh (Bash script)
9
+ *
10
+ * Usage:
11
+ * node scripts/generate-colors.js
12
+ * node scripts/generate-colors.js --check # Verify files are up-to-date
13
+ *
14
+ * This ensures a single source of truth for all color definitions.
15
+ */
16
+
17
+ const fs = require('fs');
18
+ const path = require('path');
19
+ const { safeLoad } = require('../lib/yaml-utils');
20
+
21
+ const ROOT = path.resolve(__dirname, '..');
22
+ const CONFIG_PATH = path.join(ROOT, 'config', 'colors.yaml');
23
+ const JS_OUTPUT = path.join(ROOT, 'lib', 'colors.generated.js');
24
+ const SH_OUTPUT = path.join(ROOT, 'scripts', 'lib', 'colors.generated.sh');
25
+
26
+ /**
27
+ * Load colors configuration from YAML
28
+ * @returns {Object} Colors configuration
29
+ */
30
+ function loadConfig() {
31
+ const content = fs.readFileSync(CONFIG_PATH, 'utf8');
32
+ return safeLoad(content);
33
+ }
34
+
35
+ /**
36
+ * Generate JavaScript module content
37
+ * @param {Object} config - Colors configuration
38
+ * @returns {string} JavaScript module content
39
+ */
40
+ function generateJS(config) {
41
+ const lines = [
42
+ '/**',
43
+ ' * colors.generated.js - Auto-generated from config/colors.yaml',
44
+ ' *',
45
+ ' * DO NOT EDIT THIS FILE DIRECTLY.',
46
+ ' * Run: node scripts/generate-colors.js',
47
+ ' *',
48
+ ` * Generated: ${new Date().toISOString()}`,
49
+ ' */',
50
+ '',
51
+ "'use strict';",
52
+ '',
53
+ ];
54
+
55
+ // Brand color
56
+ lines.push(`// Brand color`);
57
+ lines.push(`const BRAND_HEX = '${config.brand.hex}';`);
58
+ lines.push('');
59
+
60
+ // Modifiers
61
+ lines.push('// Modifiers');
62
+ lines.push('const modifiers = {');
63
+ for (const [name, code] of Object.entries(config.modifiers)) {
64
+ lines.push(` ${name}: '\\x1b[${code}m',`);
65
+ }
66
+ lines.push('};');
67
+ lines.push('');
68
+
69
+ // Standard colors
70
+ lines.push('// Standard ANSI colors');
71
+ lines.push('const standard = {');
72
+ for (const [name, code] of Object.entries(config.standard)) {
73
+ lines.push(` ${name}: '\\x1b[${code}m',`);
74
+ }
75
+ lines.push('};');
76
+ lines.push('');
77
+
78
+ // Bright colors
79
+ lines.push('// Bright ANSI colors');
80
+ lines.push('const bright = {');
81
+ for (const [name, code] of Object.entries(config.bright)) {
82
+ lines.push(` bright${name.charAt(0).toUpperCase() + name.slice(1)}: '\\x1b[${code}m',`);
83
+ }
84
+ lines.push('};');
85
+ lines.push('');
86
+
87
+ // 256-color palette
88
+ lines.push('// 256-color palette');
89
+ lines.push('const palette256 = {');
90
+ for (const [name, def] of Object.entries(config.palette256)) {
91
+ const comment = def.comment ? ` // ${def.comment}` : '';
92
+ lines.push(` ${name}: '\\x1b[${def.code}m',${comment}`);
93
+ }
94
+ lines.push('};');
95
+ lines.push('');
96
+
97
+ // Background colors
98
+ lines.push('// Background colors');
99
+ lines.push('const backgrounds = {');
100
+ for (const [name, code] of Object.entries(config.backgrounds)) {
101
+ lines.push(` bg${name.charAt(0).toUpperCase() + name.slice(1)}: '\\x1b[${code}m',`);
102
+ }
103
+ lines.push('};');
104
+ lines.push('');
105
+
106
+ // Brand color ANSI
107
+ lines.push('// Brand color ANSI');
108
+ lines.push(`const brand = '\\x1b[${config.brand.ansi}m';`);
109
+ lines.push('');
110
+
111
+ // High contrast colors
112
+ lines.push('// High-contrast mode colors (WCAG AAA)');
113
+ lines.push('const highContrast = {');
114
+ for (const [name, code] of Object.entries(config.highContrast)) {
115
+ lines.push(` ${name}: '\\x1b[${code}m',`);
116
+ }
117
+ lines.push('};');
118
+ lines.push('');
119
+
120
+ // Combined cStandard object (for backward compatibility)
121
+ lines.push('// Combined standard color palette');
122
+ lines.push('const cStandard = {');
123
+ lines.push(' ...modifiers,');
124
+ lines.push(' ...standard,');
125
+ lines.push(' ...bright,');
126
+ lines.push(' ...palette256,');
127
+ lines.push(' ...backgrounds,');
128
+ lines.push(' brand,');
129
+ lines.push(` orange: brand, // Alias`);
130
+ lines.push(' // Semantic aliases');
131
+ for (const [semantic, target] of Object.entries(config.semantic)) {
132
+ lines.push(` ${semantic}: standard.${target},`);
133
+ }
134
+ lines.push('};');
135
+ lines.push('');
136
+
137
+ // Exports
138
+ lines.push('module.exports = {');
139
+ lines.push(' BRAND_HEX,');
140
+ lines.push(' modifiers,');
141
+ lines.push(' standard,');
142
+ lines.push(' bright,');
143
+ lines.push(' palette256,');
144
+ lines.push(' backgrounds,');
145
+ lines.push(' brand,');
146
+ lines.push(' highContrast,');
147
+ lines.push(' cStandard,');
148
+ lines.push('};');
149
+ lines.push('');
150
+
151
+ return lines.join('\n');
152
+ }
153
+
154
+ /**
155
+ * Generate Bash script content
156
+ * @param {Object} config - Colors configuration
157
+ * @returns {string} Bash script content
158
+ */
159
+ function generateSH(config) {
160
+ const lines = [
161
+ '#!/bin/bash',
162
+ '# colors.generated.sh - Auto-generated from config/colors.yaml',
163
+ '#',
164
+ '# DO NOT EDIT THIS FILE DIRECTLY.',
165
+ '# Run: node scripts/generate-colors.js',
166
+ '#',
167
+ `# Generated: ${new Date().toISOString()}`,
168
+ '#',
169
+ '# Usage: source "$(dirname "${BASH_SOURCE[0]}")/colors.generated.sh"',
170
+ '',
171
+ '# ============================================================================',
172
+ '# Modifiers',
173
+ '# ============================================================================',
174
+ ];
175
+
176
+ for (const [name, code] of Object.entries(config.modifiers)) {
177
+ lines.push(`${name.toUpperCase()}="\\033[${code}m"`);
178
+ }
179
+ lines.push('');
180
+
181
+ lines.push('# ============================================================================');
182
+ lines.push('# Standard ANSI Colors');
183
+ lines.push('# ============================================================================');
184
+ for (const [name, code] of Object.entries(config.standard)) {
185
+ lines.push(`${name.toUpperCase()}="\\033[${code}m"`);
186
+ }
187
+ lines.push('');
188
+
189
+ lines.push('# ============================================================================');
190
+ lines.push('# Bright Variants');
191
+ lines.push('# ============================================================================');
192
+ for (const [name, code] of Object.entries(config.bright)) {
193
+ lines.push(`BRIGHT_${name.toUpperCase()}="\\033[${code}m"`);
194
+ }
195
+ lines.push('');
196
+
197
+ lines.push('# ============================================================================');
198
+ lines.push('# Semantic Aliases');
199
+ lines.push('# ============================================================================');
200
+ for (const [semantic, target] of Object.entries(config.semantic)) {
201
+ lines.push(`${semantic.toUpperCase()}="$${target.toUpperCase()}"`);
202
+ }
203
+ lines.push('');
204
+
205
+ lines.push('# ============================================================================');
206
+ lines.push('# 256-Color Palette');
207
+ lines.push('# ============================================================================');
208
+ for (const [name, def] of Object.entries(config.palette256)) {
209
+ const varName = name.replace(/([A-Z])/g, '_$1').toUpperCase();
210
+ const comment = def.comment ? ` # ${def.comment}` : '';
211
+ lines.push(`${varName}="\\033[${def.code}m"${comment}`);
212
+ }
213
+ lines.push('');
214
+
215
+ lines.push('# ============================================================================');
216
+ lines.push('# Brand Color');
217
+ lines.push('# ============================================================================');
218
+ lines.push(`BRAND="\\033[${config.brand.ansi}m"`);
219
+ lines.push('ORANGE="$BRAND" # Alias');
220
+ lines.push('');
221
+
222
+ lines.push('# ============================================================================');
223
+ lines.push('# Background Colors');
224
+ lines.push('# ============================================================================');
225
+ for (const [name, code] of Object.entries(config.backgrounds)) {
226
+ lines.push(`BG_${name.toUpperCase()}="\\033[${code}m"`);
227
+ }
228
+ lines.push('');
229
+
230
+ return lines.join('\n');
231
+ }
232
+
233
+ /**
234
+ * Main function
235
+ */
236
+ function main() {
237
+ const checkMode = process.argv.includes('--check');
238
+
239
+ console.log('🎨 Color Generator');
240
+ console.log('==================');
241
+ console.log(`Config: ${CONFIG_PATH}`);
242
+
243
+ // Load configuration
244
+ const config = loadConfig();
245
+ console.log('✓ Loaded colors.yaml');
246
+
247
+ // Generate content
248
+ const jsContent = generateJS(config);
249
+ const shContent = generateSH(config);
250
+
251
+ if (checkMode) {
252
+ // Check if files are up-to-date
253
+ let upToDate = true;
254
+
255
+ try {
256
+ const existingJS = fs.readFileSync(JS_OUTPUT, 'utf8');
257
+ // Compare without timestamp line
258
+ const normalizeJS = content =>
259
+ content
260
+ .split('\n')
261
+ .filter(line => !line.includes('Generated:'))
262
+ .join('\n');
263
+ if (normalizeJS(existingJS) !== normalizeJS(jsContent)) {
264
+ console.log('✗ lib/colors.generated.js is out of date');
265
+ upToDate = false;
266
+ } else {
267
+ console.log('✓ lib/colors.generated.js is up to date');
268
+ }
269
+ } catch {
270
+ console.log('✗ lib/colors.generated.js does not exist');
271
+ upToDate = false;
272
+ }
273
+
274
+ try {
275
+ const existingSH = fs.readFileSync(SH_OUTPUT, 'utf8');
276
+ const normalizeSH = content =>
277
+ content
278
+ .split('\n')
279
+ .filter(line => !line.includes('Generated:'))
280
+ .join('\n');
281
+ if (normalizeSH(existingSH) !== normalizeSH(shContent)) {
282
+ console.log('✗ scripts/lib/colors.generated.sh is out of date');
283
+ upToDate = false;
284
+ } else {
285
+ console.log('✓ scripts/lib/colors.generated.sh is up to date');
286
+ }
287
+ } catch {
288
+ console.log('✗ scripts/lib/colors.generated.sh does not exist');
289
+ upToDate = false;
290
+ }
291
+
292
+ if (!upToDate) {
293
+ console.log('\nRun: node scripts/generate-colors.js');
294
+ process.exit(1);
295
+ }
296
+ console.log('\n✓ All color files are up to date');
297
+ return;
298
+ }
299
+
300
+ // Write files
301
+ fs.writeFileSync(JS_OUTPUT, jsContent);
302
+ console.log(`✓ Generated ${JS_OUTPUT}`);
303
+
304
+ fs.writeFileSync(SH_OUTPUT, shContent);
305
+ console.log(`✓ Generated ${SH_OUTPUT}`);
306
+
307
+ console.log('\n✓ Color generation complete!');
308
+ }
309
+
310
+ if (require.main === module) {
311
+ main();
312
+ }
313
+
314
+ module.exports = { loadConfig, generateJS, generateSH };
@@ -0,0 +1,82 @@
1
+ #!/bin/bash
2
+ # colors.generated.sh - Auto-generated from config/colors.yaml
3
+ #
4
+ # DO NOT EDIT THIS FILE DIRECTLY.
5
+ # Run: node scripts/generate-colors.js
6
+ #
7
+ # Generated: 2026-01-29T08:28:33.726Z
8
+ #
9
+ # Usage: source "$(dirname "${BASH_SOURCE[0]}")/colors.generated.sh"
10
+
11
+ # ============================================================================
12
+ # Modifiers
13
+ # ============================================================================
14
+ RESET="\033[0m"
15
+ BOLD="\033[1m"
16
+ DIM="\033[2m"
17
+ ITALIC="\033[3m"
18
+ UNDERLINE="\033[4m"
19
+
20
+ # ============================================================================
21
+ # Standard ANSI Colors
22
+ # ============================================================================
23
+ RED="\033[31m"
24
+ GREEN="\033[32m"
25
+ YELLOW="\033[33m"
26
+ BLUE="\033[34m"
27
+ MAGENTA="\033[35m"
28
+ CYAN="\033[36m"
29
+ WHITE="\033[37m"
30
+ BLACK="\033[30m"
31
+
32
+ # ============================================================================
33
+ # Bright Variants
34
+ # ============================================================================
35
+ BRIGHT_RED="\033[91m"
36
+ BRIGHT_GREEN="\033[92m"
37
+ BRIGHT_YELLOW="\033[93m"
38
+ BRIGHT_BLUE="\033[94m"
39
+ BRIGHT_MAGENTA="\033[95m"
40
+ BRIGHT_CYAN="\033[96m"
41
+ BRIGHT_WHITE="\033[97m"
42
+ BRIGHT_BLACK="\033[90m"
43
+
44
+ # ============================================================================
45
+ # Semantic Aliases
46
+ # ============================================================================
47
+ SUCCESS="$GREEN"
48
+ ERROR="$RED"
49
+ WARNING="$YELLOW"
50
+ INFO="$CYAN"
51
+
52
+ # ============================================================================
53
+ # 256-Color Palette
54
+ # ============================================================================
55
+ MINT_GREEN="\033[38;5;158m" # Healthy/success states
56
+ PEACH="\033[38;5;215m" # Warning states
57
+ CORAL="\033[38;5;203m" # Critical/error states
58
+ LIGHT_GREEN="\033[38;5;194m" # Session healthy
59
+ LIGHT_YELLOW="\033[38;5;228m" # Session warning
60
+ LIGHT_PINK="\033[38;5;210m" # Session critical
61
+ SKY_BLUE="\033[38;5;117m" # Directories/paths, ready states
62
+ LAVENDER="\033[38;5;147m" # Model info, story IDs
63
+ SOFT_GOLD="\033[38;5;222m" # Cost/money
64
+ TEAL="\033[38;5;80m" # Pending states
65
+ SLATE="\033[38;5;103m" # Secondary info
66
+ ROSE="\033[38;5;211m" # Blocked/critical accent
67
+ AMBER="\033[38;5;214m" # WIP/in-progress accent
68
+ POWDER="\033[38;5;153m" # Labels/headers
69
+
70
+ # ============================================================================
71
+ # Brand Color
72
+ # ============================================================================
73
+ BRAND="\033[38;2;232;104;58m"
74
+ ORANGE="$BRAND" # Alias
75
+
76
+ # ============================================================================
77
+ # Background Colors
78
+ # ============================================================================
79
+ BG_RED="\033[41m"
80
+ BG_GREEN="\033[42m"
81
+ BG_YELLOW="\033[43m"
82
+ BG_BLUE="\033[44m"
@@ -3,6 +3,10 @@
3
3
  #
4
4
  # Source this file: source "$(dirname "${BASH_SOURCE[0]}")/lib/colors.sh"
5
5
  #
6
+ # Color definitions are sourced from colors.generated.sh which is
7
+ # auto-generated from config/colors.yaml (single source of truth).
8
+ # Run: node scripts/generate-colors.js
9
+ #
6
10
  # WCAG AA Contrast Ratios (verified against #1a1a1a dark terminal background):
7
11
  # - Green (#32CD32): 4.5:1 ✓ (meets AA for normal text)
8
12
  # - Red (#FF6B6B): 5.0:1 ✓ (meets AA for normal text)
@@ -18,66 +22,15 @@
18
22
  # echo -e "${BRAND}AgileFlow${RESET}"
19
23
 
20
24
  # ============================================================================
21
- # Reset and Modifiers
22
- # ============================================================================
23
- RESET="\033[0m"
24
- BOLD="\033[1m"
25
- DIM="\033[2m"
26
- ITALIC="\033[3m"
27
- UNDERLINE="\033[4m"
28
-
29
- # ============================================================================
30
- # Standard ANSI Colors (8 colors)
31
- # ============================================================================
32
- RED="\033[31m"
33
- GREEN="\033[32m"
34
- YELLOW="\033[33m"
35
- BLUE="\033[34m"
36
- MAGENTA="\033[35m"
37
- CYAN="\033[36m"
38
- WHITE="\033[37m"
39
- BLACK="\033[30m"
40
-
41
- # ============================================================================
42
- # Bright Variants
43
- # ============================================================================
44
- BRIGHT_RED="\033[91m"
45
- BRIGHT_GREEN="\033[92m"
46
- BRIGHT_YELLOW="\033[93m"
47
- BRIGHT_BLUE="\033[94m"
48
- BRIGHT_MAGENTA="\033[95m"
49
- BRIGHT_CYAN="\033[96m"
50
- BRIGHT_WHITE="\033[97m"
51
- BRIGHT_BLACK="\033[90m"
52
-
53
- # ============================================================================
54
- # Semantic Aliases (for consistent meaning across codebase)
25
+ # Source generated colors from YAML
55
26
  # ============================================================================
56
- SUCCESS="$GREEN"
57
- ERROR="$RED"
58
- WARNING="$YELLOW"
59
- INFO="$CYAN"
60
-
61
- # ============================================================================
62
- # 256-Color Palette (vibrant, modern look)
63
- # ============================================================================
64
- MINT_GREEN="\033[38;5;158m" # Healthy/success states
65
- PEACH="\033[38;5;215m" # Warning states
66
- CORAL="\033[38;5;203m" # Critical/error states
67
- LIGHT_GREEN="\033[38;5;194m" # Session healthy
68
- LIGHT_YELLOW="\033[38;5;228m" # Session warning
69
- LIGHT_PINK="\033[38;5;210m" # Session critical
70
- SKY_BLUE="\033[38;5;117m" # Directories/paths, ready states
71
- LAVENDER="\033[38;5;147m" # Model info, story IDs
72
- SOFT_GOLD="\033[38;5;222m" # Cost/money
73
- TEAL="\033[38;5;80m" # Pending states
74
- SLATE="\033[38;5;103m" # Secondary info
75
- ROSE="\033[38;5;211m" # Blocked/critical accent
76
- AMBER="\033[38;5;214m" # WIP/in-progress accent
77
- POWDER="\033[38;5;153m" # Labels/headers
27
+ _COLORS_DIR="$(dirname "${BASH_SOURCE[0]}")"
28
+ # shellcheck source=colors.generated.sh
29
+ source "${_COLORS_DIR}/colors.generated.sh"
78
30
 
79
31
  # ============================================================================
80
32
  # Context/Usage Colors (for status indicators)
33
+ # These are additional aliases not in the generated file
81
34
  # ============================================================================
82
35
  CTX_GREEN="$MINT_GREEN" # Healthy context
83
36
  CTX_YELLOW="$PEACH" # Moderate usage
@@ -86,21 +39,8 @@ CTX_RED="$CORAL" # Critical
86
39
 
87
40
  # ============================================================================
88
41
  # Session Time Colors
42
+ # These are additional aliases not in the generated file
89
43
  # ============================================================================
90
44
  SESSION_GREEN="$LIGHT_GREEN" # Plenty of time
91
45
  SESSION_YELLOW="$LIGHT_YELLOW" # Getting low
92
46
  SESSION_RED="$LIGHT_PINK" # Critical
93
-
94
- # ============================================================================
95
- # Brand Color (#e8683a - burnt orange/terracotta)
96
- # ============================================================================
97
- BRAND="\033[38;2;232;104;58m"
98
- ORANGE="$BRAND" # Alias for brand color
99
-
100
- # ============================================================================
101
- # Background Colors
102
- # ============================================================================
103
- BG_RED="\033[41m"
104
- BG_GREEN="\033[42m"
105
- BG_YELLOW="\033[43m"
106
- BG_BLUE="\033[44m"