ai-consultants 2.10.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 (62) hide show
  1. package/.claude/commands/ai-consultants:consult.md +94 -0
  2. package/.claude/commands/ai-consultants:debate.md +103 -0
  3. package/.claude/commands/ai-consultants:help.md +30 -0
  4. package/CLAUDE.md +839 -0
  5. package/LICENSE +21 -0
  6. package/README.md +758 -0
  7. package/SKILL.md +156 -0
  8. package/bin/ai-consultants +96 -0
  9. package/docs/COST_RATES.md +172 -0
  10. package/docs/JSON_SCHEMA.md +305 -0
  11. package/docs/SETUP.md +879 -0
  12. package/docs/SMART_ROUTING.md +219 -0
  13. package/docs/cost_rates.json +143 -0
  14. package/package.json +47 -0
  15. package/references/configuration.md +141 -0
  16. package/references/details.md +60 -0
  17. package/scripts/build_context.sh +562 -0
  18. package/scripts/classify_question.sh +148 -0
  19. package/scripts/config.sh +753 -0
  20. package/scripts/configure.sh +1093 -0
  21. package/scripts/consult_all.sh +934 -0
  22. package/scripts/debate_round.sh +421 -0
  23. package/scripts/doctor.sh +642 -0
  24. package/scripts/followup.sh +197 -0
  25. package/scripts/install.sh +319 -0
  26. package/scripts/lib/api.sh +640 -0
  27. package/scripts/lib/api_query.sh +228 -0
  28. package/scripts/lib/cache.sh +338 -0
  29. package/scripts/lib/chunking.sh +880 -0
  30. package/scripts/lib/code_optimizer.sh +671 -0
  31. package/scripts/lib/common.sh +1088 -0
  32. package/scripts/lib/costs.sh +674 -0
  33. package/scripts/lib/personas.sh +372 -0
  34. package/scripts/lib/progress.sh +251 -0
  35. package/scripts/lib/reflection.sh +447 -0
  36. package/scripts/lib/routing.sh +566 -0
  37. package/scripts/lib/schema.json +165 -0
  38. package/scripts/lib/session.sh +327 -0
  39. package/scripts/lib/symbol_map.sh +445 -0
  40. package/scripts/lib/voting.sh +495 -0
  41. package/scripts/peer_review.sh +460 -0
  42. package/scripts/preflight_check.sh +452 -0
  43. package/scripts/query_aider.sh +83 -0
  44. package/scripts/query_amp.sh +67 -0
  45. package/scripts/query_claude.sh +99 -0
  46. package/scripts/query_codex.sh +92 -0
  47. package/scripts/query_cursor.sh +72 -0
  48. package/scripts/query_deepseek.sh +17 -0
  49. package/scripts/query_gemini.sh +85 -0
  50. package/scripts/query_glm.sh +17 -0
  51. package/scripts/query_grok.sh +17 -0
  52. package/scripts/query_kilo.sh +140 -0
  53. package/scripts/query_kimi.sh +67 -0
  54. package/scripts/query_minimax.sh +17 -0
  55. package/scripts/query_mistral.sh +97 -0
  56. package/scripts/query_ollama.sh +328 -0
  57. package/scripts/query_qwen3.sh +93 -0
  58. package/scripts/setup_wizard.sh +367 -0
  59. package/scripts/skillport-install.sh +196 -0
  60. package/scripts/synthesize.sh +332 -0
  61. package/templates/consultation_report.md +323 -0
  62. package/templates/synthesis_prompt.md +120 -0
@@ -0,0 +1,367 @@
1
+ #!/bin/bash
2
+ # setup_wizard.sh - Interactive setup wizard for AI Consultants v2.0
3
+ # Checks CLI installation, tests authentication, and generates .env configuration
4
+
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
9
+
10
+ # Source common.sh (which already sources config.sh)
11
+ source "$SCRIPT_DIR/lib/common.sh"
12
+
13
+ # =============================================================================
14
+ # COLORS AND FORMATTING
15
+ # =============================================================================
16
+
17
+ GREEN="\033[0;32m"
18
+ YELLOW="\033[0;33m"
19
+ RED="\033[0;31m"
20
+ BLUE="\033[0;34m"
21
+ BOLD="\033[1m"
22
+ RESET="\033[0m"
23
+
24
+ # =============================================================================
25
+ # UTILITY FUNCTIONS
26
+ # =============================================================================
27
+
28
+ print_header() {
29
+ echo ""
30
+ echo -e "${BOLD}${BLUE}╔══════════════════════════════════════════════════════════════╗${RESET}"
31
+ echo -e "${BOLD}${BLUE}║ AI Consultants v2.0 - Setup Wizard ║${RESET}"
32
+ echo -e "${BOLD}${BLUE}╚══════════════════════════════════════════════════════════════╝${RESET}"
33
+ echo ""
34
+ }
35
+
36
+ print_section() {
37
+ echo ""
38
+ echo -e "${BOLD}━━━ $1 ━━━${RESET}"
39
+ echo ""
40
+ }
41
+
42
+ status_ok() {
43
+ echo -e " ${GREEN}[OK]${RESET} $1"
44
+ }
45
+
46
+ status_warn() {
47
+ echo -e " ${YELLOW}[WARN]${RESET} $1"
48
+ }
49
+
50
+ status_fail() {
51
+ echo -e " ${RED}[FAIL]${RESET} $1"
52
+ }
53
+
54
+ status_skip() {
55
+ echo -e " ${BLUE}[SKIP]${RESET} $1"
56
+ }
57
+
58
+ # =============================================================================
59
+ # CLI DETECTION
60
+ # =============================================================================
61
+
62
+ # Using map_* functions from common.sh for bash 3.2 compatibility
63
+ # Maps: CLI_STATUS, CLI_AUTH_STATUS
64
+ AVAILABLE_COUNT=0
65
+
66
+ check_cli() {
67
+ local name="$1"
68
+ local cmd="$2"
69
+ local install_hint="$3"
70
+
71
+ if command -v "$cmd" &> /dev/null; then
72
+ map_set "CLI_STATUS" "$name" "installed"
73
+ return 0
74
+ else
75
+ map_set "CLI_STATUS" "$name" "missing"
76
+ return 1
77
+ fi
78
+ }
79
+
80
+ test_cli_auth() {
81
+ local name="$1"
82
+ local cmd="$2"
83
+ local test_args="$3"
84
+
85
+ if [[ "$(map_get "CLI_STATUS" "$name")" != "installed" ]]; then
86
+ map_set "CLI_AUTH_STATUS" "$name" "skipped"
87
+ return 1
88
+ fi
89
+
90
+ # Test with timeout
91
+ if timeout 15 $cmd $test_args &>/dev/null 2>&1; then
92
+ map_set "CLI_AUTH_STATUS" "$name" "authenticated"
93
+ ((AVAILABLE_COUNT++))
94
+ return 0
95
+ else
96
+ map_set "CLI_AUTH_STATUS" "$name" "failed"
97
+ return 1
98
+ fi
99
+ }
100
+
101
+ # =============================================================================
102
+ # MAIN CHECKS
103
+ # =============================================================================
104
+
105
+ check_prerequisites() {
106
+ print_section "Prerequisites"
107
+
108
+ # Check jq (required)
109
+ if command -v jq &> /dev/null; then
110
+ status_ok "jq installed ($(jq --version))"
111
+ else
112
+ status_fail "jq NOT installed - REQUIRED"
113
+ echo ""
114
+ echo " Install jq first:"
115
+ echo " macOS: brew install jq"
116
+ echo " Ubuntu: sudo apt-get install jq"
117
+ echo ""
118
+ exit 1
119
+ fi
120
+
121
+ # Check optional tools
122
+ if command -v timeout &> /dev/null; then
123
+ status_ok "timeout available (GNU coreutils)"
124
+ elif command -v gtimeout &> /dev/null; then
125
+ status_ok "gtimeout available (coreutils)"
126
+ else
127
+ status_warn "timeout not available - using fallback"
128
+ fi
129
+ }
130
+
131
+ check_consultants() {
132
+ print_section "Consultant CLIs"
133
+
134
+ # Gemini
135
+ if check_cli "Gemini" "$GEMINI_CMD" "npm install -g @google/gemini-cli"; then
136
+ status_ok "Gemini CLI installed"
137
+ else
138
+ status_warn "Gemini CLI not found"
139
+ echo " Install: npm install -g @google/gemini-cli"
140
+ fi
141
+
142
+ # Codex
143
+ if check_cli "Codex" "$CODEX_CMD" "npm install -g @openai/codex"; then
144
+ status_ok "Codex CLI installed"
145
+ else
146
+ status_warn "Codex CLI not found"
147
+ echo " Install: npm install -g @openai/codex"
148
+ fi
149
+
150
+ # Mistral
151
+ if check_cli "Mistral" "$MISTRAL_CMD" "pip install mistral-vibe"; then
152
+ status_ok "Mistral Vibe CLI installed"
153
+ else
154
+ status_warn "Mistral Vibe CLI not found"
155
+ echo " Install: pip install mistral-vibe"
156
+ fi
157
+
158
+ # Kilo
159
+ if check_cli "Kilo" "$KILO_CMD" "npm install -g @kilocode/cli"; then
160
+ status_ok "Kilo CLI installed"
161
+ else
162
+ status_warn "Kilo CLI not found"
163
+ echo " Install: npm install -g @kilocode/cli"
164
+ fi
165
+
166
+ # Cursor
167
+ if check_cli "Cursor" "$CURSOR_CMD" "curl https://cursor.com/install -fsS | bash"; then
168
+ status_ok "Cursor CLI installed"
169
+ else
170
+ status_warn "Cursor CLI not found"
171
+ echo " Install: curl https://cursor.com/install -fsS | bash"
172
+ fi
173
+ }
174
+
175
+ test_authentication() {
176
+ print_section "Authentication Test"
177
+
178
+ echo " Testing API connectivity (this may take a moment)..."
179
+ echo ""
180
+
181
+ # Gemini
182
+ if test_cli_auth "Gemini" "$GEMINI_CMD" "--version"; then
183
+ status_ok "Gemini authenticated"
184
+ elif [[ "$(map_get "CLI_STATUS" "Gemini")" == "installed" ]]; then
185
+ status_fail "Gemini auth failed"
186
+ echo " Run: gemini auth login"
187
+ echo " Or set: GOOGLE_API_KEY=your-key"
188
+ else
189
+ status_skip "Gemini (not installed)"
190
+ fi
191
+
192
+ # Codex
193
+ if test_cli_auth "Codex" "$CODEX_CMD" "--help"; then
194
+ status_ok "Codex authenticated"
195
+ elif [[ "$(map_get "CLI_STATUS" "Codex")" == "installed" ]]; then
196
+ status_fail "Codex auth failed"
197
+ echo " Set: OPENAI_API_KEY=sk-your-key"
198
+ else
199
+ status_skip "Codex (not installed)"
200
+ fi
201
+
202
+ # Mistral
203
+ if test_cli_auth "Mistral" "$MISTRAL_CMD" "--help"; then
204
+ status_ok "Mistral authenticated"
205
+ elif [[ "$(map_get "CLI_STATUS" "Mistral")" == "installed" ]]; then
206
+ status_fail "Mistral auth failed"
207
+ echo " Set: MISTRAL_API_KEY=your-key"
208
+ else
209
+ status_skip "Mistral (not installed)"
210
+ fi
211
+
212
+ # Kilo
213
+ if test_cli_auth "Kilo" "$KILO_CMD" "--version"; then
214
+ status_ok "Kilo authenticated"
215
+ elif [[ "$(map_get "CLI_STATUS" "Kilo")" == "installed" ]]; then
216
+ status_fail "Kilo auth failed"
217
+ echo " Run: kilocode auth login"
218
+ else
219
+ status_skip "Kilo (not installed)"
220
+ fi
221
+
222
+ # Cursor
223
+ if test_cli_auth "Cursor" "$CURSOR_CMD" "--help"; then
224
+ status_ok "Cursor authenticated"
225
+ elif [[ "$(map_get "CLI_STATUS" "Cursor")" == "installed" ]]; then
226
+ status_fail "Cursor auth failed"
227
+ echo " Cursor CLI uses your Cursor subscription"
228
+ else
229
+ status_skip "Cursor (not installed)"
230
+ fi
231
+ }
232
+
233
+ # =============================================================================
234
+ # CONFIGURATION GENERATION
235
+ # =============================================================================
236
+
237
+ generate_config() {
238
+ print_section "Recommended Configuration"
239
+
240
+ local gemini_enabled="false"
241
+ local codex_enabled="false"
242
+ local mistral_enabled="false"
243
+ local kilo_enabled="false"
244
+ local cursor_enabled="false"
245
+
246
+ [[ "$(map_get "CLI_AUTH_STATUS" "Gemini")" == "authenticated" ]] && gemini_enabled="true"
247
+ [[ "$(map_get "CLI_AUTH_STATUS" "Codex")" == "authenticated" ]] && codex_enabled="true"
248
+ [[ "$(map_get "CLI_AUTH_STATUS" "Mistral")" == "authenticated" ]] && mistral_enabled="true"
249
+ [[ "$(map_get "CLI_AUTH_STATUS" "Kilo")" == "authenticated" ]] && kilo_enabled="true"
250
+ [[ "$(map_get "CLI_AUTH_STATUS" "Cursor")" == "authenticated" ]] && cursor_enabled="true"
251
+
252
+ echo " Based on your setup, recommended settings:"
253
+ echo ""
254
+ echo -e " ${BOLD}ENABLE_GEMINI=${gemini_enabled}${RESET}"
255
+ echo -e " ${BOLD}ENABLE_CODEX=${codex_enabled}${RESET}"
256
+ echo -e " ${BOLD}ENABLE_MISTRAL=${mistral_enabled}${RESET}"
257
+ echo -e " ${BOLD}ENABLE_KILO=${kilo_enabled}${RESET}"
258
+ echo -e " ${BOLD}ENABLE_CURSOR=${cursor_enabled}${RESET}"
259
+ echo ""
260
+
261
+ # Check minimum requirement
262
+ if [[ $AVAILABLE_COUNT -lt 2 ]]; then
263
+ echo -e " ${RED}${BOLD}WARNING: Only $AVAILABLE_COUNT consultant(s) available.${RESET}"
264
+ echo -e " ${RED}AI Consultants requires at least 2 consultants for comparison.${RESET}"
265
+ echo ""
266
+ echo " Please configure at least one more consultant."
267
+ echo " See docs/SETUP.md for detailed instructions."
268
+ echo ""
269
+ SAVE_CONFIG="no"
270
+ return
271
+ fi
272
+
273
+ echo -e " ${GREEN}${BOLD}Status: $AVAILABLE_COUNT/5 consultants ready${RESET}"
274
+ echo ""
275
+
276
+ # Ask to save
277
+ echo -n " Save configuration to .env? [Y/n] "
278
+ read -r SAVE_CONFIG
279
+ SAVE_CONFIG="${SAVE_CONFIG:-Y}"
280
+
281
+ if [[ "$SAVE_CONFIG" =~ ^[Yy]$ ]]; then
282
+ save_env_file "$gemini_enabled" "$codex_enabled" "$mistral_enabled" "$kilo_enabled" "$cursor_enabled"
283
+ fi
284
+ }
285
+
286
+ save_env_file() {
287
+ local gemini="$1"
288
+ local codex="$2"
289
+ local mistral="$3"
290
+ local kilo="$4"
291
+ local cursor="$5"
292
+
293
+ local env_file="$PROJECT_ROOT/.env"
294
+
295
+ # Backup existing .env if present
296
+ if [[ -f "$env_file" ]]; then
297
+ cp "$env_file" "${env_file}.backup"
298
+ echo ""
299
+ echo -e " ${YELLOW}Backed up existing .env to .env.backup${RESET}"
300
+ fi
301
+
302
+ cat > "$env_file" << EOF
303
+ # =============================================================================
304
+ # AI Consultants v2.0 - Generated Configuration
305
+ # =============================================================================
306
+ # Generated by setup_wizard.sh on $(date -Iseconds)
307
+ # See .env.example for all available options
308
+
309
+ # Enabled consultants (based on detected setup)
310
+ ENABLE_GEMINI=$gemini
311
+ ENABLE_CODEX=$codex
312
+ ENABLE_MISTRAL=$mistral
313
+ ENABLE_KILO=$kilo
314
+ ENABLE_CURSOR=$cursor
315
+
316
+ # Features
317
+ ENABLE_PERSONA=true
318
+ ENABLE_SYNTHESIS=true
319
+ ENABLE_DEBATE=false
320
+ ENABLE_COST_TRACKING=true
321
+
322
+ # Logging
323
+ LOG_LEVEL=INFO
324
+ EOF
325
+
326
+ echo ""
327
+ echo -e " ${GREEN}${BOLD}Configuration saved to .env${RESET}"
328
+ }
329
+
330
+ # =============================================================================
331
+ # SUMMARY
332
+ # =============================================================================
333
+
334
+ print_summary() {
335
+ print_section "Summary"
336
+
337
+ if [[ $AVAILABLE_COUNT -ge 2 ]]; then
338
+ echo -e " ${GREEN}${BOLD}Setup complete!${RESET}"
339
+ echo ""
340
+ echo " You can now run:"
341
+ echo ""
342
+ echo " ./scripts/consult_all.sh \"Your coding question here\""
343
+ echo ""
344
+ echo " For more options, see README.md"
345
+ else
346
+ echo -e " ${YELLOW}${BOLD}Setup incomplete${RESET}"
347
+ echo ""
348
+ echo " You need at least 2 working consultants."
349
+ echo " See docs/SETUP.md for installation instructions."
350
+ fi
351
+ echo ""
352
+ }
353
+
354
+ # =============================================================================
355
+ # MAIN
356
+ # =============================================================================
357
+
358
+ main() {
359
+ print_header
360
+ check_prerequisites
361
+ check_consultants
362
+ test_authentication
363
+ generate_config
364
+ print_summary
365
+ }
366
+
367
+ main "$@"
@@ -0,0 +1,196 @@
1
+ #!/bin/bash
2
+ # AI Consultants - SkillPort Installation Script
3
+ # Installs the skill via SkillPort for multi-agent support
4
+ # Supports: Cursor, Copilot, Windsurf, and other SkillPort-compatible agents
5
+ set -euo pipefail
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ SKILL_DIR="$(dirname "$SCRIPT_DIR")"
9
+
10
+ # Colors for output
11
+ RED='\033[0;31m'
12
+ GREEN='\033[0;32m'
13
+ YELLOW='\033[1;33m'
14
+ BLUE='\033[0;34m'
15
+ NC='\033[0m' # No Color
16
+
17
+ log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
18
+ log_success() { echo -e "${GREEN}[OK]${NC} $1"; }
19
+ log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
20
+ log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
21
+
22
+ print_usage() {
23
+ cat << EOF
24
+ AI Consultants - SkillPort Installation
25
+
26
+ Usage: $0 [command]
27
+
28
+ Commands:
29
+ install Install skill via SkillPort (default)
30
+ uninstall Remove skill from SkillPort
31
+ generate Generate AGENTS.md for Copilot/Cursor/Windsurf
32
+ status Check SkillPort installation status
33
+ help Show this help message
34
+
35
+ Requirements:
36
+ - SkillPort CLI (https://github.com/gotalab/skillport)
37
+
38
+ Examples:
39
+ $0 # Install skill
40
+ $0 install # Install skill
41
+ $0 generate # Generate AGENTS.md
42
+ $0 status # Check status
43
+ EOF
44
+ }
45
+
46
+ check_skillport() {
47
+ if ! command -v skillport &> /dev/null; then
48
+ log_error "SkillPort CLI not found"
49
+ echo ""
50
+ echo "Install SkillPort:"
51
+ echo " npm install -g skillport"
52
+ echo ""
53
+ echo "Or visit: https://github.com/gotalab/skillport"
54
+ return 1
55
+ fi
56
+ log_success "SkillPort CLI found"
57
+ return 0
58
+ }
59
+
60
+ install_skill() {
61
+ log_info "Installing AI Consultants via SkillPort..."
62
+
63
+ if ! check_skillport; then
64
+ return 1
65
+ fi
66
+
67
+ # Add skill to SkillPort
68
+ if skillport add "$SKILL_DIR"; then
69
+ log_success "Skill added to SkillPort"
70
+ else
71
+ log_error "Failed to add skill to SkillPort"
72
+ return 1
73
+ fi
74
+
75
+ # Verify installation
76
+ if skillport list | grep -q "ai-consultants"; then
77
+ log_success "AI Consultants installed successfully"
78
+ echo ""
79
+ echo "Usage:"
80
+ echo " skillport show ai-consultants # Load skill in compatible agents"
81
+ echo " skillport list # View all installed skills"
82
+ else
83
+ log_warn "Skill may not be fully registered"
84
+ fi
85
+ }
86
+
87
+ uninstall_skill() {
88
+ log_info "Removing AI Consultants from SkillPort..."
89
+
90
+ if ! check_skillport; then
91
+ return 1
92
+ fi
93
+
94
+ if skillport remove ai-consultants 2>/dev/null; then
95
+ log_success "Skill removed from SkillPort"
96
+ else
97
+ log_warn "Skill may not have been installed via SkillPort"
98
+ fi
99
+ }
100
+
101
+ generate_agents_md() {
102
+ log_info "Generating AGENTS.md for multi-agent compatibility..."
103
+
104
+ local agents_file="$SKILL_DIR/AGENTS.md"
105
+
106
+ if [[ -f "$agents_file" ]]; then
107
+ log_success "AGENTS.md already exists at $agents_file"
108
+ else
109
+ log_warn "AGENTS.md not found - it should exist in the repository"
110
+ fi
111
+
112
+ # If SkillPort is available, use it to generate
113
+ if command -v skillport &> /dev/null; then
114
+ log_info "Running SkillPort doc generator..."
115
+ if skillport doc "$SKILL_DIR" 2>/dev/null; then
116
+ log_success "SkillPort documentation generated"
117
+ else
118
+ log_warn "SkillPort doc generation skipped (may already exist)"
119
+ fi
120
+ fi
121
+ }
122
+
123
+ check_status() {
124
+ echo "AI Consultants - SkillPort Status"
125
+ echo "=================================="
126
+ echo ""
127
+
128
+ # Check SkillPort
129
+ echo "SkillPort CLI:"
130
+ if command -v skillport &> /dev/null; then
131
+ echo " Status: Installed"
132
+ echo " Version: $(skillport --version 2>/dev/null || echo 'unknown')"
133
+ else
134
+ echo " Status: Not installed"
135
+ echo " Install: npm install -g skillport"
136
+ fi
137
+ echo ""
138
+
139
+ # Check AGENTS.md
140
+ echo "AGENTS.md:"
141
+ if [[ -f "$SKILL_DIR/AGENTS.md" ]]; then
142
+ echo " Status: Present"
143
+ echo " Path: $SKILL_DIR/AGENTS.md"
144
+ else
145
+ echo " Status: Missing"
146
+ echo " Generate: $0 generate"
147
+ fi
148
+ echo ""
149
+
150
+ # Check SKILL.md
151
+ echo "SKILL.md:"
152
+ if [[ -f "$SKILL_DIR/SKILL.md" ]]; then
153
+ echo " Status: Present"
154
+ local skill_name
155
+ skill_name=$(grep "^name:" "$SKILL_DIR/SKILL.md" | head -1 | cut -d: -f2 | tr -d ' ')
156
+ echo " Name: $skill_name"
157
+ else
158
+ echo " Status: Missing"
159
+ fi
160
+ echo ""
161
+
162
+ # Check SkillPort registration
163
+ if command -v skillport &> /dev/null; then
164
+ echo "SkillPort Registration:"
165
+ if skillport list 2>/dev/null | grep -q "ai-consultants"; then
166
+ echo " Status: Registered"
167
+ else
168
+ echo " Status: Not registered"
169
+ echo " Register: $0 install"
170
+ fi
171
+ fi
172
+ }
173
+
174
+ # Main
175
+ case "${1:-install}" in
176
+ install)
177
+ install_skill
178
+ ;;
179
+ uninstall|remove)
180
+ uninstall_skill
181
+ ;;
182
+ generate|doc)
183
+ generate_agents_md
184
+ ;;
185
+ status|check)
186
+ check_status
187
+ ;;
188
+ help|--help|-h)
189
+ print_usage
190
+ ;;
191
+ *)
192
+ log_error "Unknown command: $1"
193
+ print_usage
194
+ exit 1
195
+ ;;
196
+ esac