690414:1113 Update README.md /.agents/skills, /.windsurf/workflows
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
# audit-skills.ps1 - Verify skill completeness and health
|
||||
# Part of LCBP3-DMS Phase 2 improvements
|
||||
|
||||
param(
|
||||
[string]$BaseDir = (Split-Path -Parent (Split-Path -Parent $PSScriptRoot))
|
||||
)
|
||||
|
||||
# Colors for output
|
||||
$Colors = @{
|
||||
Red = "`e[0;31m"
|
||||
Green = "`e[0;32m"
|
||||
Yellow = "`e[1;33m"
|
||||
Blue = "`e[0;34m"
|
||||
NoColor = "`e[0m"
|
||||
}
|
||||
|
||||
$AgentsDir = Join-Path $BaseDir ".agents"
|
||||
$SkillsDir = Join-Path $AgentsDir "skills"
|
||||
|
||||
Write-Host "=== Skills Health Audit ===" -ForegroundColor Cyan
|
||||
Write-Host "Base directory: $BaseDir"
|
||||
Write-Host ""
|
||||
|
||||
# Function to check if skill has required files
|
||||
function Test-SkillHealth {
|
||||
param(
|
||||
[string]$SkillDir
|
||||
)
|
||||
|
||||
$skillName = Split-Path $SkillDir -Leaf
|
||||
$issues = 0
|
||||
|
||||
# Check for SKILL.md
|
||||
$skillFile = Join-Path $SkillDir "SKILL.md"
|
||||
if (Test-Path $skillFile) {
|
||||
Write-Host " OK: $skillName/SKILL.md" -ForegroundColor $Colors.Green
|
||||
} else {
|
||||
Write-Host " MISSING: $skillName/SKILL.md" -ForegroundColor $Colors.Red
|
||||
$issues++
|
||||
}
|
||||
|
||||
# Check for templates directory (optional)
|
||||
$templatesDir = Join-Path $SkillDir "templates"
|
||||
if (Test-Path $templatesDir) {
|
||||
$templateCount = (Get-ChildItem -Path $templatesDir -Filter "*.md" -File | Measure-Object).Count
|
||||
if ($templateCount -gt 0) {
|
||||
Write-Host " OK: $skillName/templates ($templateCount files)" -ForegroundColor $Colors.Green
|
||||
} else {
|
||||
Write-Host " EMPTY: $skillName/templates (no files)" -ForegroundColor $Colors.Yellow
|
||||
}
|
||||
}
|
||||
|
||||
# Check SKILL.md content if exists
|
||||
if (Test-Path $skillFile) {
|
||||
$content = Get-Content $skillFile -Raw
|
||||
|
||||
# Check for required front matter fields
|
||||
$requiredFields = @("name", "description", "version")
|
||||
foreach ($field in $requiredFields) {
|
||||
if ($content -match "^$field:") {
|
||||
Write-Host " FIELD: $field" -ForegroundColor $Colors.Green
|
||||
} else {
|
||||
Write-Host " MISSING FIELD: $field" -ForegroundColor $Colors.Red
|
||||
$issues++
|
||||
}
|
||||
}
|
||||
|
||||
# Check for Role section
|
||||
if ($content -match "^## Role$") {
|
||||
Write-Host " SECTION: Role" -ForegroundColor $Colors.Green
|
||||
} else {
|
||||
Write-Host " MISSING SECTION: Role" -ForegroundColor $Colors.Yellow
|
||||
$issues++
|
||||
}
|
||||
|
||||
# Check for Task section
|
||||
if ($content -match "^## Task$") {
|
||||
Write-Host " SECTION: Task" -ForegroundColor $Colors.Green
|
||||
} else {
|
||||
Write-Host " MISSING SECTION: Task" -ForegroundColor $Colors.Yellow
|
||||
$issues++
|
||||
}
|
||||
}
|
||||
|
||||
return $issues
|
||||
}
|
||||
|
||||
# Function to get skill version from SKILL.md
|
||||
function Get-SkillVersion {
|
||||
param(
|
||||
[string]$SkillFile
|
||||
)
|
||||
|
||||
if (Test-Path $SkillFile) {
|
||||
try {
|
||||
$content = Get-Content $SkillFile -Raw
|
||||
if ($content -match "^version:\s*(.+)") {
|
||||
return $matches[1].Trim()
|
||||
}
|
||||
} catch {
|
||||
return "error"
|
||||
}
|
||||
}
|
||||
return "no_file"
|
||||
}
|
||||
|
||||
# Check skills directory
|
||||
if (-not (Test-Path $SkillsDir)) {
|
||||
Write-Host "ERROR: Skills directory not found" -ForegroundColor $Colors.Red
|
||||
exit 1
|
||||
}
|
||||
|
||||
Write-Host "Scanning skills directory: $SkillsDir"
|
||||
Write-Host ""
|
||||
|
||||
# Get all skill directories
|
||||
$skillDirs = Get-ChildItem -Path $SkillsDir -Directory | Sort-Object Name
|
||||
|
||||
Write-Host "Found $($skillDirs.Count) skill directories"
|
||||
Write-Host ""
|
||||
|
||||
# Audit each skill
|
||||
$totalIssues = 0
|
||||
$skillSummary = @()
|
||||
|
||||
foreach ($skillDir in $skillDirs) {
|
||||
$skillName = $skillDir.Name
|
||||
Write-Host "Auditing: $skillName"
|
||||
Write-Host "------------------------"
|
||||
|
||||
$issues = Test-SkillHealth -SkillDir $skillDir.FullName
|
||||
|
||||
$skillVersion = Get-SkillVersion -SkillFile (Join-Path $skillDir.FullName "SKILL.md")
|
||||
$skillSummary += @{
|
||||
Name = $skillName
|
||||
Issues = $issues
|
||||
Version = $skillVersion
|
||||
}
|
||||
|
||||
$totalIssues += $issues
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
# Summary report
|
||||
Write-Host "=== Skills Audit Summary ===" -ForegroundColor Cyan
|
||||
Write-Host ""
|
||||
|
||||
Write-Host "Skill Status:"
|
||||
Write-Host "-----------"
|
||||
foreach ($summary in $skillSummary) {
|
||||
if ($summary.Issues -eq 0) {
|
||||
Write-Host " HEALTHY: $($summary.Name) (v$($summary.Version))" -ForegroundColor $Colors.Green
|
||||
} else {
|
||||
Write-Host " ISSUES: $($summary.Name) (v$($summary.Version)) - $($summary.Issues) issues" -ForegroundColor $Colors.Red
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
|
||||
# Check skills.md version consistency
|
||||
$skillsVersionFile = Join-Path $SkillsDir "VERSION"
|
||||
if (Test-Path $skillsVersionFile) {
|
||||
$content = Get-Content $skillsVersionFile -Raw
|
||||
if ($content -match "^version:\s*(.+)") {
|
||||
$globalVersion = $matches[1].Trim()
|
||||
Write-Host "Global skills version: v$globalVersion"
|
||||
Write-Host ""
|
||||
|
||||
# Check for version mismatches
|
||||
Write-Host "Version Consistency Check:"
|
||||
Write-Host "------------------------"
|
||||
$versionMismatches = 0
|
||||
|
||||
foreach ($summary in $skillSummary) {
|
||||
if ($summary.Version -ne "unknown" -and $summary.Version -ne "no_file" -and $summary.Version -ne $globalVersion) {
|
||||
Write-Host " MISMATCH: $($summary.Name) is v$($summary.Version), global is v$globalVersion" -ForegroundColor $Colors.Yellow
|
||||
$versionMismatches++
|
||||
}
|
||||
}
|
||||
|
||||
if ($versionMismatches -eq 0) {
|
||||
Write-Host " All skills match global version" -ForegroundColor $Colors.Green
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
|
||||
# Overall health
|
||||
if ($totalIssues -eq 0) {
|
||||
Write-Host "=== SUCCESS: All skills healthy ===" -ForegroundColor $Colors.Green
|
||||
Write-Host "Total skills: $($skillDirs.Count)"
|
||||
exit 0
|
||||
} else {
|
||||
Write-Host "=== ISSUES FOUND: $totalIssues total issues ===" -ForegroundColor $Colors.Red
|
||||
Write-Host ""
|
||||
Write-Host "Recommendations:"
|
||||
Write-Host "1. Fix missing SKILL.md files"
|
||||
Write-Host "2. Add required front matter fields"
|
||||
Write-Host "3. Ensure Role and Task sections exist"
|
||||
Write-Host "4. Align skill versions with global version"
|
||||
exit 1
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
# validate-versions.ps1 - Check version consistency across .agents files
|
||||
# Part of LCBP3-DMS Phase 2 improvements
|
||||
|
||||
param(
|
||||
[string]$BaseDir = (Split-Path -Parent (Split-Path -Parent $PSScriptRoot)),
|
||||
[string]$ExpectedVersion = "1.8.6"
|
||||
)
|
||||
|
||||
# Colors for output
|
||||
$Colors = @{
|
||||
Red = "`e[0;31m"
|
||||
Green = "`e[0;32m"
|
||||
Yellow = "`e[1;33m"
|
||||
NoColor = "`e[0m"
|
||||
}
|
||||
|
||||
$AgentsDir = Join-Path $BaseDir ".agents"
|
||||
|
||||
Write-Host "=== .agents Version Validation ===" -ForegroundColor Cyan
|
||||
Write-Host "Base directory: $BaseDir"
|
||||
Write-Host "Expected version: $ExpectedVersion"
|
||||
Write-Host ""
|
||||
|
||||
# Function to extract version from file
|
||||
function Get-VersionFromFile {
|
||||
param(
|
||||
[string]$FilePath,
|
||||
[string]$Pattern
|
||||
)
|
||||
|
||||
if (Test-Path $FilePath) {
|
||||
try {
|
||||
$content = Get-Content $FilePath -Raw
|
||||
if ($content -match $Pattern) {
|
||||
return $matches[1]
|
||||
} else {
|
||||
return "NOT_FOUND"
|
||||
}
|
||||
} catch {
|
||||
return "ERROR"
|
||||
}
|
||||
} else {
|
||||
return "FILE_NOT_FOUND"
|
||||
}
|
||||
}
|
||||
|
||||
# Files to check
|
||||
$FilesToCheck = @{
|
||||
(Join-Path $AgentsDir "README.md") = "Version: ([0-9]+\.[0-9]+\.[0-9]+)"
|
||||
(Join-Path $AgentsDir "skills\VERSION") = "version: ([0-9]+\.[0-9]+\.[0-9]+)"
|
||||
(Join-Path $AgentsDir "rules\00-project-context.md") = "Version: ([0-9]+\.[0-9]+\.[0-9]+)"
|
||||
(Join-Path $AgentsDir "skills\skills.md") = "V([0-9]+\.[0-9]+\.[0-9]+)"
|
||||
}
|
||||
|
||||
# Track issues
|
||||
$Issues = 0
|
||||
|
||||
Write-Host "Checking version consistency..."
|
||||
Write-Host ""
|
||||
|
||||
foreach ($file in $FilesToCheck.Keys) {
|
||||
$pattern = $FilesToCheck[$file]
|
||||
$relativePath = $file.Replace($BaseDir + "\", "")
|
||||
|
||||
$version = Get-VersionFromFile -FilePath $file -Pattern $pattern
|
||||
|
||||
if ($version -eq "NOT_FOUND" -or $version -eq "FILE_NOT_FOUND") {
|
||||
Write-Host " ERROR: $relativePath - Version not found" -ForegroundColor $Colors.Red
|
||||
$Issues++
|
||||
} elseif ($version -ne $ExpectedVersion) {
|
||||
Write-Host " ERROR: $relativePath - Found v$version, expected v$ExpectedVersion" -ForegroundColor $Colors.Red
|
||||
$Issues++
|
||||
} else {
|
||||
Write-Host " OK: $relativePath - v$version" -ForegroundColor $Colors.Green
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
|
||||
# Check for version mismatches in skill files
|
||||
Write-Host "Checking skill file versions..."
|
||||
$SkillsVersionFile = Join-Path $AgentsDir "skills\VERSION"
|
||||
if (Test-Path $SkillsVersionFile) {
|
||||
$skillsVersion = Get-VersionFromFile -FilePath $SkillsVersionFile -Pattern "version: ([0-9]+\.[0-9]+\.[0-9]+)"
|
||||
Write-Host "Skills version file: v$skillsVersion"
|
||||
}
|
||||
|
||||
# Check workflow versions (in .windsurf\workflows)
|
||||
$WorkflowsDir = Join-Path $BaseDir ".windsurf\workflows"
|
||||
if (Test-Path $WorkflowsDir) {
|
||||
Write-Host "Checking workflow files..."
|
||||
$workflowCount = (Get-ChildItem -Path $WorkflowsDir -Filter "*.md" -File | Measure-Object).Count
|
||||
Write-Host " OK: Found $workflowCount workflow files" -ForegroundColor $Colors.Green
|
||||
} else {
|
||||
Write-Host " WARNING: Workflows directory not found at $WorkflowsDir" -ForegroundColor $Colors.Yellow
|
||||
}
|
||||
|
||||
Write-Host ""
|
||||
|
||||
# Summary
|
||||
if ($Issues -eq 0) {
|
||||
Write-Host "=== SUCCESS: All versions consistent ===" -ForegroundColor $Colors.Green
|
||||
exit 0
|
||||
} else {
|
||||
Write-Host "=== FAILED: $Issues version issues found ===" -ForegroundColor $Colors.Red
|
||||
Write-Host ""
|
||||
Write-Host "To fix version issues:"
|
||||
Write-Host "1. Update files to use v$ExpectedVersion"
|
||||
Write-Host "2. Ensure LCBP3 project version matches"
|
||||
Write-Host "3. Run this script again to verify"
|
||||
exit 1
|
||||
}
|
||||
Reference in New Issue
Block a user