feat(ms-ai-architect): add plugin to open marketplace (v1.5.0 baseline)
Initial addition of ms-ai-architect plugin to the open-source marketplace. Private content excluded: orchestrator/ (Linear tooling), docs/utredning/ (client investigation), generated test reports and PDF export script. skill-gen tooling moved from orchestrator/ to scripts/skill-gen/. Security scan: WARNING (risk 20/100) — no secrets, no injection found. False positive fixed: added gitleaks:allow to Python variable reference in output-validation-grounding-verification.md line 109. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
a8d79e4484
commit
6a7632146e
490 changed files with 213249 additions and 2 deletions
110
plugins/ms-ai-architect/tests/test-kb-integrity.sh
Normal file
110
plugins/ms-ai-architect/tests/test-kb-integrity.sh
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
#!/bin/bash
|
||||
# test-kb-integrity.sh — Cross-reference agent KB paths against actual files
|
||||
# Also finds orphaned KB files not referenced by any agent or SKILL.md
|
||||
# Usage: bash tests/test-kb-integrity.sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
PLUGIN_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
PASS=0
|
||||
FAIL=0
|
||||
WARN=0
|
||||
|
||||
pass() { echo -e "\033[0;32m ✓ $1\033[0m"; PASS=$((PASS + 1)); }
|
||||
fail() { echo -e "\033[0;31m ✗ $1\033[0m"; FAIL=$((FAIL + 1)); }
|
||||
warn() { echo -e "\033[1;33m ⚠ $1\033[0m"; WARN=$((WARN + 1)); }
|
||||
|
||||
echo "=== KB Integrity Test ==="
|
||||
echo ""
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Check 1: Agent file references resolve
|
||||
# -------------------------------------------------------
|
||||
echo "--- Check 1: Agent File References ---"
|
||||
|
||||
for agent_file in "$PLUGIN_ROOT"/agents/*.md; do
|
||||
[ -f "$agent_file" ] || continue
|
||||
basename_agent="$(basename "$agent_file")"
|
||||
|
||||
# Extract explicit file paths (references/, skills/) from agent
|
||||
while IFS= read -r ref_path; do
|
||||
ref_path=$(echo "$ref_path" | sed 's/`//g; s/"//g; s/^[[:space:]]*//; s/[[:space:]]*$//')
|
||||
[ -z "$ref_path" ] && continue
|
||||
|
||||
full_path="$PLUGIN_ROOT/$ref_path"
|
||||
|
||||
if [ -e "$full_path" ]; then
|
||||
pass "$basename_agent -> $ref_path"
|
||||
else
|
||||
fail "$basename_agent -> $ref_path (NOT FOUND)"
|
||||
fi
|
||||
done < <(grep -oE '(references|skills)/[a-zA-Z0-9_./-]+\.md' "$agent_file" 2>/dev/null || true)
|
||||
done
|
||||
|
||||
echo ""
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Check 2: SKILL.md file references resolve
|
||||
# -------------------------------------------------------
|
||||
echo "--- Check 2: SKILL.md File References ---"
|
||||
|
||||
for skill_file in "$PLUGIN_ROOT"/skills/*/SKILL.md; do
|
||||
[ -f "$skill_file" ] || continue
|
||||
skill_name="$(basename "$(dirname "$skill_file")")"
|
||||
|
||||
while IFS= read -r ref_path; do
|
||||
ref_path=$(echo "$ref_path" | sed 's/`//g; s/"//g; s/^[[:space:]]*//; s/[[:space:]]*$//')
|
||||
[ -z "$ref_path" ] && continue
|
||||
|
||||
# Resolve: references/ paths are relative to skill dir
|
||||
if [[ "$ref_path" == references/* ]]; then
|
||||
full_path="$PLUGIN_ROOT/skills/$skill_name/$ref_path"
|
||||
else
|
||||
full_path="$PLUGIN_ROOT/$ref_path"
|
||||
fi
|
||||
|
||||
if [ -e "$full_path" ]; then
|
||||
pass "SKILL:$skill_name -> $ref_path"
|
||||
else
|
||||
fail "SKILL:$skill_name -> $ref_path (NOT FOUND)"
|
||||
fi
|
||||
done < <(grep -oE '(references|skills)/[a-zA-Z0-9_./-]+\.md' "$skill_file" 2>/dev/null || true)
|
||||
done
|
||||
|
||||
echo ""
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Check 3: Orphaned KB files
|
||||
# -------------------------------------------------------
|
||||
echo "--- Check 3: Orphaned KB Files ---"
|
||||
|
||||
ORPHAN_COUNT=0
|
||||
|
||||
while IFS= read -r kb_file; do
|
||||
rel_path="${kb_file#$PLUGIN_ROOT/}"
|
||||
kb_basename="$(basename "$kb_file")"
|
||||
|
||||
# Check if this filename appears in any agent or SKILL.md
|
||||
if grep -rql "$kb_basename" "$PLUGIN_ROOT/agents/" "$PLUGIN_ROOT"/skills/*/SKILL.md 2>/dev/null; then
|
||||
: # Referenced, ok
|
||||
else
|
||||
warn "Orphaned: $rel_path"
|
||||
ORPHAN_COUNT=$((ORPHAN_COUNT + 1))
|
||||
fi
|
||||
done < <(find "$PLUGIN_ROOT/skills" -path "*/references/*.md" -type f 2>/dev/null)
|
||||
|
||||
if [ "$ORPHAN_COUNT" -eq 0 ]; then
|
||||
pass "No orphaned KB files found"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# -------------------------------------------------------
|
||||
# Summary
|
||||
# -------------------------------------------------------
|
||||
TOTAL=$((PASS + FAIL))
|
||||
echo "=== Results: $PASS/$TOTAL passed, $FAIL failed, $WARN warnings ==="
|
||||
|
||||
if [ "$FAIL" -gt 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
Loading…
Add table
Add a link
Reference in a new issue