# run-hook.ps1 — 通用 hook dispatcher # 从 .claude/settings.local.json 读取 shell 类型,决定执行 .ps1 还是 .sh 脚本 # 用法:powershell -ExecutionPolicy Bypass -File .claude/hooks/run-hook.ps1 # 示例:run-hook.ps1 session-init → 执行 session-init.ps1 或 session-init.sh param([string]$HookName) $localEnvPath = ".claude\settings.local.json" $shell = "powershell" if (Test-Path $localEnvPath) { try { $config = Get-Content $localEnvPath -Raw | ConvertFrom-Json if ($config.shell) { $shell = $config.shell } } catch {} } $hookDir = ".claude\hooks" $input = [Console]::In.ReadToEnd() if ($shell -eq "powershell") { $scriptPath = Join-Path $hookDir "$HookName.ps1" if (Test-Path $scriptPath) { $input | powershell -ExecutionPolicy Bypass -File $scriptPath } else { Write-Output '{}' } } else { $scriptPath = Join-Path $hookDir "$HookName.sh" if (Test-Path $scriptPath) { $input | bash $scriptPath } else { Write-Output '{}' } }