Files
gh-djankies-claude-configs-…/hooks/scripts/recommend-skills.sh
2025-11-29 18:22:25 +08:00

74 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CLAUDE_MARKETPLACE_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)"
source "${CLAUDE_MARKETPLACE_ROOT}/marketplace-utils/hook-lifecycle.sh"
init_hook "prisma-6" "PostToolUse"
INPUT=$(read_hook_input)
FILE_PATH=$(get_input_field "tool_input.file_path")
if [[ -z "$FILE_PATH" ]]; then
FILE_PATH=$(get_input_field "tool_input.path")
fi
if [[ -z "$FILE_PATH" ]]; then
finish_hook 0
fi
FILE_NAME="${FILE_PATH##*/}"
FILE_DIR="${FILE_PATH%/*}"
RECOMMENDATION_TYPE=""
SKILLS=""
MESSAGE=""
if [[ "$FILE_NAME" == "schema.prisma" ]]; then
RECOMMENDATION_TYPE="schema_files"
SKILLS="MIGRATIONS-*, CLIENT-*, QUERIES-type-safety"
MESSAGE="Prisma Schema: $SKILLS"
elif [[ "$FILE_DIR" == *"migrations"* ]]; then
RECOMMENDATION_TYPE="migration_files"
SKILLS="MIGRATIONS-dev-workflow, MIGRATIONS-production, MIGRATIONS-v6-upgrade"
MESSAGE="Prisma Migrations: $SKILLS"
elif [[ "$FILE_PATH" =~ \.(ts|js|tsx|jsx)$ ]]; then
PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname "$(dirname "$SCRIPT_DIR")")}"
IMPORTS=$(bash "$PLUGIN_ROOT/hooks/scripts/analyze-imports.sh" "$FILE_PATH" 2>/dev/null || true)
if [[ "$IMPORTS" == *"@prisma/client"* ]]; then
RECOMMENDATION_TYPE="prisma_files"
SKILLS="CLIENT-*, QUERIES-*, TRANSACTIONS-*, SECURITY-*"
MESSAGE="Prisma Client Usage: $SKILLS"
if [[ "$IMPORTS" == *"\$queryRaw"* ]]; then
RECOMMENDATION_TYPE="raw_sql_context"
SKILLS="SECURITY-sql-injection (CRITICAL)"
MESSAGE="Raw SQL Detected: $SKILLS"
fi
fi
if [[ "$FILE_PATH" == *"vercel"* || "$FILE_PATH" == *"lambda"* || "$FILE_PATH" == *"app/"* ]]; then
if ! has_shown_recommendation "prisma-6" "serverless_context"; then
log_info "Recommending skills: CLIENT-serverless-config, PERFORMANCE-connection-pooling for serverless context in $FILE_PATH"
mark_recommendation_shown "prisma-6" "serverless_context"
inject_context "Serverless Context: CLIENT-serverless-config, PERFORMANCE-connection-pooling"
fi
fi
fi
if [[ -z "$RECOMMENDATION_TYPE" ]]; then
finish_hook 0
fi
if ! has_shown_recommendation "prisma-6" "$RECOMMENDATION_TYPE"; then
log_info "Recommending skills: $SKILLS for $FILE_PATH"
mark_recommendation_shown "prisma-6" "$RECOMMENDATION_TYPE"
inject_context "$MESSAGE
Use Skill tool to activate specific skills when needed."
fi
finish_hook 0