74 lines
2.4 KiB
Bash
Executable File
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
|