diff --git a/scripts/install.ps1 b/scripts/install.ps1 new file mode 100644 index 0000000..18eb065 --- /dev/null +++ b/scripts/install.ps1 @@ -0,0 +1,46 @@ +# Install skills// into ~\.claude\skills\\ (or $env:CLAUDE_SKILLS_DIR) +# Usage: install.ps1 [-Names ,] (no args = all) +# +# PowerShell port of install.sh — same behavior, native cmdlets, no bash dependency. + +[CmdletBinding()] +param( + [string[]]$Names = @() +) + +$ErrorActionPreference = 'Stop' + +$root = Split-Path -Parent $PSScriptRoot +$src = Join-Path $root 'skills' + +if ($env:CLAUDE_SKILLS_DIR) { + $target = $env:CLAUDE_SKILLS_DIR +} else { + $target = Join-Path $env:USERPROFILE '.claude\skills' +} + +if (-not (Test-Path $target)) { + New-Item -ItemType Directory -Force -Path $target | Out-Null +} + +if ($Names.Count -eq 0) { + $Names = Get-ChildItem -Path $src -Directory | Sort-Object Name | Select-Object -ExpandProperty Name +} + +foreach ($name in $Names) { + $srcDir = Join-Path $src $name + $dstDir = Join-Path $target $name + if (-not (Test-Path $srcDir -PathType Container)) { + Write-Warning "skip: $name (not found in skills/)" + continue + } + if (-not (Test-Path (Join-Path $srcDir 'SKILL.md'))) { + Write-Warning "skip: $name (missing SKILL.md)" + continue + } + if (Test-Path $dstDir) { + Remove-Item -Recurse -Force $dstDir + } + Copy-Item -Recurse $srcDir $dstDir + Write-Host "installed: $name -> $dstDir" +}