<# .SYNOPSIS Installs shared @deepseek-ai/* plugins from the Gitea npm registry into a DSH profile and wires them into cordis.patch.yml. .DESCRIPTION Adds the three shared plugins to the profile's package.json as direct tarball URLs pointing at the Gitea npm registry, installs them, removes stale link: dependencies, and idempotently appends insert rows to cordis.patch.yml. Transitive @deepseek-ai/* core dependencies resolve from the public npmjs registry (NOT scoped to Gitea). .PARAMETER Profile Profile name (directory under $DshHome\profiles). Default: 'web'. .PARAMETER DshHome DSH config root. Default: $env:DSH_HOME, else ~/.dsh. .PARAMETER Token Gitea token for the private npm registry. Default: $env:GITEA_NPM_TOKEN. .EXAMPLE .\scripts\dsh-plugin-install.ps1 -Token #> [CmdletBinding()] param( [string]$Profile = 'web', [string]$DshHome, [string]$Token = $env:GITEA_NPM_TOKEN ) $baseUrl = 'https://git.byte-mate.ru/api/packages/Coder/npm' # Ordered: name → tarball path within the Gitea npm registry. $plugins = [ordered]@{ '@deepseek-ai/dsh-tool-lab' = @{ Version = '0.1.0-rc.7'; Id = 'tool-lab' } '@deepseek-ai/dsh-web-search-searxng' = @{ Version = '0.1.0-rc.7'; Id = 'web-search-searxng' } '@deepseek-ai/dsh-telegram-remote' = @{ Version = '0.1.0'; Id = 'telegram-remote' } } if (-not $DshHome) { $DshHome = if ($env:DSH_HOME) { $env:DSH_HOME } else { Join-Path $HOME '.dsh' } } $profileDir = Join-Path $DshHome "profiles\$Profile" if (-not (Test-Path $profileDir)) { Write-Error "Profile dir not found: $profileDir" exit 1 } Write-Host "Profile dir: $profileDir" # 1. Remove stale link: dependencies (installed under the old scoped registry). & pnpm --dir $profileDir remove @deepseek-ai/dsh-tool-lab @deepseek-ai/dsh-web-search-searxng @deepseek-ai/dsh-telegram-remote 2>$null | Out-Null Write-Host "Removed stale versions (if any)" # 2. Add plugins as direct tarball URLs from the Gitea npm registry. $specs = @() foreach ($pkg in $plugins.Keys) { $esc = $pkg -replace '/', '%2F' $basename = ($pkg -split '/')[-1] $meta = $plugins[$pkg] $tarball = "$baseUrl/$esc/-/$($meta.Version)/$basename-$($meta.Version).tgz" $specs += "$pkg@$tarball" } & pnpm --dir $profileDir add $specs # 3. Idempotently append insert blocks to cordis.patch.yml. $patchFile = Join-Path $profileDir 'cordis.patch.yml' $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path foreach ($pkg in $plugins.Keys) { & node (Join-Path $scriptDir 'patch-cordis.mjs') --file $patchFile --name $pkg --id $plugins[$pkg].Id } Write-Host "`nDone. Plugins installed into $Profile profile. Restart dsh to load them." exit 0