src/Integration/Set-ps12exeAgentSkill.ps1
|
# 把 ps12exe 的 Agent Skill 写入或移出用户级通用技能目录(~/.agents/skills), # 供 opencode、Codex、Cursor、Copilot 等支持 Agent Skills 的 agent 读取。 # 独立脚本,不导出为命令:由 Set-ps12exeIntegration 直接调用。 [CmdletBinding()] param ( [ValidateScript({ . $PSScriptRoot\..\predicate.ps1 (IsEnable $_) -or (IsDisable $_) -or ($_ -eq 'reset') })] [ArgumentCompleter({ param($Command, $Parameter, $WordToComplete, $CommandAst, $FakeBoundParams) . $PSScriptRoot\..\predicate.ps1 if (-not $WordToComplete) { @('enable', 'disable', 'reset') } else { @($DisablePredicates; $EnablePredicates; 'reset') | Where-Object { $_ -like "$WordToComplete*" } } })] $action = 'on', [ArgumentCompleter({ Param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters) . "$PSScriptRoot\..\LocaleArgCompleter.ps1" @PSBoundParameters })] [string]$Locale ) $LocalizeData = . $PSScriptRoot\..\LocaleLoader.ps1 -Locale $Locale $AgentSkillName = 'ps12exe' $AgentSkillSource = "$PSScriptRoot\..\AgentSkill\SKILL.md" function Get-AgentSkillDir { Join-Path $HOME ".agents\skills\$AgentSkillName" } # 将 ps12exe 的 Agent Skill 复制到用户级通用技能目录。 function Install-AgentSkill { $InstallingMessage = if ($LocalizeData.AgentSkillInstalling) { $LocalizeData.AgentSkillInstalling } else { 'Installing the ps12exe agent skill to {0} ...' } $FailedMessage = if ($LocalizeData.AgentSkillInstallFailed) { $LocalizeData.AgentSkillInstallFailed } else { 'Failed to install the ps12exe agent skill to {0}: {1}' } $skillDir = Get-AgentSkillDir $skillFile = Join-Path $skillDir 'SKILL.md' try { $content = [System.IO.File]::ReadAllText($AgentSkillSource, [System.Text.Encoding]::UTF8) New-Item -Path $skillDir -ItemType Directory -Force | Out-Null Write-Host ($InstallingMessage -f $skillFile) -ForegroundColor Gray [System.IO.File]::WriteAllText($skillFile, $content, [System.Text.UTF8Encoding]::new($false)) } catch { Write-Warning ($FailedMessage -f @($skillFile, $_.Exception.Message)) } } # 从用户级通用技能目录移除 ps12exe 的 Agent Skill。 function Uninstall-AgentSkill { $UninstallingMessage = if ($LocalizeData.AgentSkillUninstalling) { $LocalizeData.AgentSkillUninstalling } else { 'Removing the ps12exe agent skill from {0} ...' } $FailedMessage = if ($LocalizeData.AgentSkillUninstallFailed) { $LocalizeData.AgentSkillUninstallFailed } else { 'Failed to remove the ps12exe agent skill from {0}: {1}' } $skillDir = Get-AgentSkillDir try { if (Test-Path -LiteralPath $skillDir) { Write-Host ($UninstallingMessage -f $skillDir) -ForegroundColor Gray Remove-Item -LiteralPath $skillDir -Recurse -Force } } catch { Write-Warning ($FailedMessage -f @($skillDir, $_.Exception.Message)) } } . $PSScriptRoot\..\predicate.ps1 if ('reset' -eq $action -or (IsDisable $action)) { Uninstall-AgentSkill } if ('reset' -eq $action -or (IsEnable $action)) { Install-AgentSkill } |