v24: flyt roster-agenter, .mcp.json og find-altool.ps1 fra repo til maskine

19 af 21 agent-filer, de to standard MCP-servere (al, businesscentral) og
find-altool.ps1 var byte-identiske kopier duplikeret ind i hvert af de 14
CURABIS-repos. De flyttes til ~/.claude/ (én kopi pr. maskine i stedet for
pr. repo), gated paa den eksisterende .github/.agents/bcquality.agent.md-
markoer. Kun bcquality.agent.md og feynman.agent.md forbliver repo-lokale
(Mode C support-brugere har intet ~/.claude/ at laese globalt indhold fra),
og CLAUDE.md's machine-self-heal-blok forbliver repo-lokal (den installerer
selve den globale fil, kan ikke ligge i den).

find-altool.ps1 finder nu repo-roden ved cwd-walkup til en .AL-Go-markoer
i stedet for sin egen placering, og MCP-registrering sker idempotent via
`claude mcp add --scope user`. Mode B faar en engangs-migreringssektion for
de 14 eksisterende v23-repos; .mcp.json-oprydningen kraever eksplicit
bekraeftelse af at alle udviklere paa repoet har migreret foerst, da filen
er delt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Michael Dieringer 2026-07-30 13:06:58 +02:00
parent 34d9d765d0
commit 11b4e2ec99
5 changed files with 591 additions and 402 deletions

View file

@ -0,0 +1,78 @@
# find-altool.ps1 - CURABIS-artefakt (deployes fra BCQuality, ikke genereret
# af AL-extensionen - der findes ingen VS Code-kommando til dette).
#
# v24: MASKIN-GLOBALT artefakt (%USERPROFILE%\.claude\find-altool.ps1),
# deployes af sync-bcquality-knowledge.ps1 - ligger IKKE i noget repo.
#
# Finder altool.exe dynamisk i den NYESTE installerede AL Language extension
# og videresender alle argumenter. Dette opslag er 100% maskinlokalt og har
# intet med repoet at goere.
#
# Specialargument 'auto': erstattes med alle AL-projektmapper fundet under
# det AKTUELLE repos apps-mappe (.apps/Apps/apps - mapper med app.json).
# Repo-roden findes IKKE via scriptets egen placering ($PSScriptRoot - det
# giver ~/.claude, hvilket er forkert nu scriptet er globalt) men ved at
# walke op fra cwd og lede efter en <appsName>\.AL-Go-markoer. Sessioner
# binder cwd til apps-workspace-mappen (en app-undermappe, ikke repo-roden),
# saa opslaget skal fungere uanset hvor i repoet cwd peger:
# ... find-altool.ps1 launchmcpserver auto --transport stdio
#
# BEMAERK: altool launchmcpserver KRAEVER projektstier - uden doer serveren.
$ext = Get-ChildItem "$env:USERPROFILE\.vscode\extensions" -Filter "ms-dynamics-smb.al-*" -Directory |
Sort-Object { [version]($_.Name -replace '^ms-dynamics-smb\.al-', '' -replace '-.*$', '') } -Descending |
Select-Object -First 1
if (-not $ext) {
Write-Error "AL Language extension ikke fundet. Installer ms-dynamics-smb.al fra VS Code Marketplace."
exit 1
}
$altool = Join-Path $ext.FullName "bin\win32\altool.exe"
if (-not (Test-Path $altool)) {
Write-Error "altool.exe ikke fundet i $($ext.FullName) - opdater AL-extensionen (MCP-serveren kraever en nyere version)."
exit 1
}
if ($args -contains 'auto') {
# Walk op fra cwd og led efter <appsName>\.AL-Go som repo-rod-markoer.
# Case-insensitive filsystem (Windows) betyder .apps/Apps/apps kan matche
# den samme fysiske mappe flere gange - stop ved foerste match i stedet
# for at tjekke alle tre ubetinget (undgaar dubletter i projektlisten).
$d = (Get-Location).Path
$repo = $null
$appsFolderName = $null
while ($d.Length -gt 3) {
foreach ($appsName in @('.apps', 'Apps', 'apps')) {
if (Test-Path (Join-Path $d "$appsName\.AL-Go")) {
$repo = $d
$appsFolderName = $appsName
break
}
}
if ($repo) { break }
$d = Split-Path $d
}
if (-not $repo) {
Write-Error "Ingen AL-Go repo-rod (<.apps|Apps|apps>\.AL-Go) fundet ved opadgaaende soegning fra $((Get-Location).Path)."
exit 1
}
$appsDir = Join-Path $repo $appsFolderName
$projects = Get-ChildItem $appsDir -Directory |
Where-Object { Test-Path (Join-Path $_.FullName 'app.json') } |
ForEach-Object { $_.FullName }
if (-not $projects) {
Write-Error "Ingen AL-projektmapper (med app.json) fundet under $appsDir."
exit 1
}
$resolved = @()
foreach ($a in $args) {
if ($a -eq 'auto') { $resolved += $projects } else { $resolved += $a }
}
& $altool @resolved
} else {
& $altool @args
}