Features: - 30+ Custom Skills (cognitive, development, UI/UX, autonomous agents) - RalphLoop autonomous agent integration - Multi-AI consultation (Qwen) - Agent management system with sync capabilities - Custom hooks for session management - MCP servers integration - Plugin marketplace setup - Comprehensive installation script Components: - Skills: always-use-superpowers, ralph, brainstorming, ui-ux-pro-max, etc. - Agents: 100+ agents across engineering, marketing, product, etc. - Hooks: session-start-superpowers, qwen-consult, ralph-auto-trigger - Commands: /brainstorm, /write-plan, /execute-plan - MCP Servers: zai-mcp-server, web-search-prime, web-reader, zread - Binaries: ralphloop wrapper Installation: ./supercharge.sh
199 lines
6.7 KiB
Bash
Executable File
199 lines
6.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Test: Skill Priority Resolution
|
|
# Verifies that skills are resolved with correct priority: project > personal > superpowers
|
|
# NOTE: These tests require OpenCode to be installed and configured
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
echo "=== Test: Skill Priority Resolution ==="
|
|
|
|
# Source setup to create isolated environment
|
|
source "$SCRIPT_DIR/setup.sh"
|
|
|
|
# Trap to cleanup on exit
|
|
trap cleanup_test_env EXIT
|
|
|
|
# Create same skill "priority-test" in all three locations with different markers
|
|
echo "Setting up priority test fixtures..."
|
|
|
|
# 1. Create in superpowers location (lowest priority)
|
|
mkdir -p "$HOME/.config/opencode/superpowers/skills/priority-test"
|
|
cat > "$HOME/.config/opencode/superpowers/skills/priority-test/SKILL.md" <<'EOF'
|
|
---
|
|
name: priority-test
|
|
description: Superpowers version of priority test skill
|
|
---
|
|
# Priority Test Skill (Superpowers Version)
|
|
|
|
This is the SUPERPOWERS version of the priority test skill.
|
|
|
|
PRIORITY_MARKER_SUPERPOWERS_VERSION
|
|
EOF
|
|
|
|
# 2. Create in personal location (medium priority)
|
|
mkdir -p "$HOME/.config/opencode/skills/priority-test"
|
|
cat > "$HOME/.config/opencode/skills/priority-test/SKILL.md" <<'EOF'
|
|
---
|
|
name: priority-test
|
|
description: Personal version of priority test skill
|
|
---
|
|
# Priority Test Skill (Personal Version)
|
|
|
|
This is the PERSONAL version of the priority test skill.
|
|
|
|
PRIORITY_MARKER_PERSONAL_VERSION
|
|
EOF
|
|
|
|
# 3. Create in project location (highest priority)
|
|
mkdir -p "$TEST_HOME/test-project/.opencode/skills/priority-test"
|
|
cat > "$TEST_HOME/test-project/.opencode/skills/priority-test/SKILL.md" <<'EOF'
|
|
---
|
|
name: priority-test
|
|
description: Project version of priority test skill
|
|
---
|
|
# Priority Test Skill (Project Version)
|
|
|
|
This is the PROJECT version of the priority test skill.
|
|
|
|
PRIORITY_MARKER_PROJECT_VERSION
|
|
EOF
|
|
|
|
echo " Created priority-test skill in all three locations"
|
|
|
|
# Test 1: Verify fixture setup
|
|
echo ""
|
|
echo "Test 1: Verifying test fixtures..."
|
|
|
|
if [ -f "$HOME/.config/opencode/superpowers/skills/priority-test/SKILL.md" ]; then
|
|
echo " [PASS] Superpowers version exists"
|
|
else
|
|
echo " [FAIL] Superpowers version missing"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -f "$HOME/.config/opencode/skills/priority-test/SKILL.md" ]; then
|
|
echo " [PASS] Personal version exists"
|
|
else
|
|
echo " [FAIL] Personal version missing"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -f "$TEST_HOME/test-project/.opencode/skills/priority-test/SKILL.md" ]; then
|
|
echo " [PASS] Project version exists"
|
|
else
|
|
echo " [FAIL] Project version missing"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if opencode is available for integration tests
|
|
if ! command -v opencode &> /dev/null; then
|
|
echo ""
|
|
echo " [SKIP] OpenCode not installed - skipping integration tests"
|
|
echo " To run these tests, install OpenCode: https://opencode.ai"
|
|
echo ""
|
|
echo "=== Priority fixture tests passed (integration tests skipped) ==="
|
|
exit 0
|
|
fi
|
|
|
|
# Test 2: Test that personal overrides superpowers
|
|
echo ""
|
|
echo "Test 2: Testing personal > superpowers priority..."
|
|
echo " Running from outside project directory..."
|
|
|
|
# Run from HOME (not in project) - should get personal version
|
|
cd "$HOME"
|
|
output=$(timeout 60s opencode run --print-logs "Use the use_skill tool to load the priority-test skill. Show me the exact content including any PRIORITY_MARKER text." 2>&1) || {
|
|
exit_code=$?
|
|
if [ $exit_code -eq 124 ]; then
|
|
echo " [FAIL] OpenCode timed out after 60s"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
if echo "$output" | grep -qi "PRIORITY_MARKER_PERSONAL_VERSION"; then
|
|
echo " [PASS] Personal version loaded (overrides superpowers)"
|
|
elif echo "$output" | grep -qi "PRIORITY_MARKER_SUPERPOWERS_VERSION"; then
|
|
echo " [FAIL] Superpowers version loaded instead of personal"
|
|
exit 1
|
|
else
|
|
echo " [WARN] Could not verify priority marker in output"
|
|
echo " Output snippet:"
|
|
echo "$output" | grep -i "priority\|personal\|superpowers" | head -10
|
|
fi
|
|
|
|
# Test 3: Test that project overrides both personal and superpowers
|
|
echo ""
|
|
echo "Test 3: Testing project > personal > superpowers priority..."
|
|
echo " Running from project directory..."
|
|
|
|
# Run from project directory - should get project version
|
|
cd "$TEST_HOME/test-project"
|
|
output=$(timeout 60s opencode run --print-logs "Use the use_skill tool to load the priority-test skill. Show me the exact content including any PRIORITY_MARKER text." 2>&1) || {
|
|
exit_code=$?
|
|
if [ $exit_code -eq 124 ]; then
|
|
echo " [FAIL] OpenCode timed out after 60s"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
if echo "$output" | grep -qi "PRIORITY_MARKER_PROJECT_VERSION"; then
|
|
echo " [PASS] Project version loaded (highest priority)"
|
|
elif echo "$output" | grep -qi "PRIORITY_MARKER_PERSONAL_VERSION"; then
|
|
echo " [FAIL] Personal version loaded instead of project"
|
|
exit 1
|
|
elif echo "$output" | grep -qi "PRIORITY_MARKER_SUPERPOWERS_VERSION"; then
|
|
echo " [FAIL] Superpowers version loaded instead of project"
|
|
exit 1
|
|
else
|
|
echo " [WARN] Could not verify priority marker in output"
|
|
echo " Output snippet:"
|
|
echo "$output" | grep -i "priority\|project\|personal" | head -10
|
|
fi
|
|
|
|
# Test 4: Test explicit superpowers: prefix bypasses priority
|
|
echo ""
|
|
echo "Test 4: Testing superpowers: prefix forces superpowers version..."
|
|
|
|
cd "$TEST_HOME/test-project"
|
|
output=$(timeout 60s opencode run --print-logs "Use the use_skill tool to load superpowers:priority-test specifically. Show me the exact content including any PRIORITY_MARKER text." 2>&1) || {
|
|
exit_code=$?
|
|
if [ $exit_code -eq 124 ]; then
|
|
echo " [FAIL] OpenCode timed out after 60s"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
if echo "$output" | grep -qi "PRIORITY_MARKER_SUPERPOWERS_VERSION"; then
|
|
echo " [PASS] superpowers: prefix correctly forces superpowers version"
|
|
elif echo "$output" | grep -qi "PRIORITY_MARKER_PROJECT_VERSION\|PRIORITY_MARKER_PERSONAL_VERSION"; then
|
|
echo " [FAIL] superpowers: prefix did not force superpowers version"
|
|
exit 1
|
|
else
|
|
echo " [WARN] Could not verify priority marker in output"
|
|
fi
|
|
|
|
# Test 5: Test explicit project: prefix
|
|
echo ""
|
|
echo "Test 5: Testing project: prefix forces project version..."
|
|
|
|
cd "$HOME" # Run from outside project but with project: prefix
|
|
output=$(timeout 60s opencode run --print-logs "Use the use_skill tool to load project:priority-test specifically. Show me the exact content." 2>&1) || {
|
|
exit_code=$?
|
|
if [ $exit_code -eq 124 ]; then
|
|
echo " [FAIL] OpenCode timed out after 60s"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
# Note: This may fail since we're not in the project directory
|
|
# The project: prefix only works when in a project context
|
|
if echo "$output" | grep -qi "not found\|error"; then
|
|
echo " [PASS] project: prefix correctly fails when not in project context"
|
|
else
|
|
echo " [INFO] project: prefix behavior outside project context may vary"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== All priority tests passed ==="
|