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.
- package/.claude/commands/ai-consultants:consult.md +94 -0
- package/.claude/commands/ai-consultants:debate.md +103 -0
- package/.claude/commands/ai-consultants:help.md +30 -0
- package/CLAUDE.md +839 -0
- package/LICENSE +21 -0
- package/README.md +758 -0
- package/SKILL.md +156 -0
- package/bin/ai-consultants +96 -0
- package/docs/COST_RATES.md +172 -0
- package/docs/JSON_SCHEMA.md +305 -0
- package/docs/SETUP.md +879 -0
- package/docs/SMART_ROUTING.md +219 -0
- package/docs/cost_rates.json +143 -0
- package/package.json +47 -0
- package/references/configuration.md +141 -0
- package/references/details.md +60 -0
- package/scripts/build_context.sh +562 -0
- package/scripts/classify_question.sh +148 -0
- package/scripts/config.sh +753 -0
- package/scripts/configure.sh +1093 -0
- package/scripts/consult_all.sh +934 -0
- package/scripts/debate_round.sh +421 -0
- package/scripts/doctor.sh +642 -0
- package/scripts/followup.sh +197 -0
- package/scripts/install.sh +319 -0
- package/scripts/lib/api.sh +640 -0
- package/scripts/lib/api_query.sh +228 -0
- package/scripts/lib/cache.sh +338 -0
- package/scripts/lib/chunking.sh +880 -0
- package/scripts/lib/code_optimizer.sh +671 -0
- package/scripts/lib/common.sh +1088 -0
- package/scripts/lib/costs.sh +674 -0
- package/scripts/lib/personas.sh +372 -0
- package/scripts/lib/progress.sh +251 -0
- package/scripts/lib/reflection.sh +447 -0
- package/scripts/lib/routing.sh +566 -0
- package/scripts/lib/schema.json +165 -0
- package/scripts/lib/session.sh +327 -0
- package/scripts/lib/symbol_map.sh +445 -0
- package/scripts/lib/voting.sh +495 -0
- package/scripts/peer_review.sh +460 -0
- package/scripts/preflight_check.sh +452 -0
- package/scripts/query_aider.sh +83 -0
- package/scripts/query_amp.sh +67 -0
- package/scripts/query_claude.sh +99 -0
- package/scripts/query_codex.sh +92 -0
- package/scripts/query_cursor.sh +72 -0
- package/scripts/query_deepseek.sh +17 -0
- package/scripts/query_gemini.sh +85 -0
- package/scripts/query_glm.sh +17 -0
- package/scripts/query_grok.sh +17 -0
- package/scripts/query_kilo.sh +140 -0
- package/scripts/query_kimi.sh +67 -0
- package/scripts/query_minimax.sh +17 -0
- package/scripts/query_mistral.sh +97 -0
- package/scripts/query_ollama.sh +328 -0
- package/scripts/query_qwen3.sh +93 -0
- package/scripts/setup_wizard.sh +367 -0
- package/scripts/skillport-install.sh +196 -0
- package/scripts/synthesize.sh +332 -0
- package/templates/consultation_report.md +323 -0
- 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
|