Files
kompas3d-mcp/tools/sync-agent-assets.ps1
T
mikhail 62fbc3742b fix(tools): UTF-8 BOM для PowerShell 5.1, безопасный AllowCopy, доп. тесты
- AgentAssets.psm1 и sync-agent-assets.ps1 пересохранены в UTF-8 с BOM:
  powershell.exe читает файлы без BOM в системной ANSI-кодировке и ломает
  парсинг на кириллических строковых литералах (pwsh 7 работал за счёт
  автодетекта и маскировал баг).
- Copy-Item в ветке -AllowCopy получил -ErrorAction Stop: без него ошибка
  копирования писалась как non-terminating и функция возвращала 'Copied'
  при частично скопированном каталоге, если вызывающий не выставил
  $ErrorActionPreference='Stop' сам.
- Test-AgentSkillLink сравнивает пути через
  [string]::Equals(...,OrdinalIgnoreCase) явно, а не через регистронезависимый -eq.
- Добавлены тесты: отсутствующий SourcePath, перелинковка на другой
  источник (старый target остаётся нетронутым) и AllowCopy-регрессия
  (мок Copy-Item с [CmdletBinding()], чтобы корректно эмулировать
  ErrorAction реального cmdlet).
2026-07-31 01:58:06 +03:00

43 lines
1.0 KiB
PowerShell

#requires -Version 5.1
[CmdletBinding()]
param(
[switch] $Check,
[switch] $AllowCopy
)
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
Import-Module (Join-Path $PSScriptRoot 'AgentAssets.psm1') -Force
$repoRoot = Split-Path -Parent $PSScriptRoot
$skills = @('kompas-3d', 'kompas-fdm-design')
$targetRoots = @(
(Join-Path $repoRoot '.claude\skills'),
(Join-Path $repoRoot '.agents\skills')
)
$failed = $false
foreach ($root in $targetRoots) {
foreach ($skill in $skills) {
$source = Join-Path $repoRoot "plugin\skills\$skill"
$link = Join-Path $root $skill
if ($Check) {
if (Test-AgentSkillLink -SourcePath $source -LinkPath $link) {
Write-Host "ok $link"
}
else {
Write-Host "БИТО $link"
$failed = $true
}
continue
}
$state = Sync-AgentSkillLink -SourcePath $source -LinkPath $link -AllowCopy:$AllowCopy
Write-Host "$state $link"
}
}
if ($failed) { exit 1 }