gewuyou 1239fb4651 refactor(skills): 统一文档刷新技能入口
- 新增 gframework-doc-refresh 统一技能入口,并补齐模块扫描、证据顺序、模板与校验脚本

- 更新共享文档规范与模块映射,收口源码模块到 README、docs 和 ai-libs 的固定关联

- 删除旧 vitepress-* 公开技能定义,避免继续以文档类型拆分入口

- 同步 documentation-governance-and-refresh 的恢复点、风险和下一步
2026-04-22 09:13:22 +08:00

66 lines
1.4 KiB
Bash

#!/bin/bash
# 验证 Markdown 内部链接是否指向当前仓库中的真实页面。
set -e
FILE="$1"
if [ -z "$FILE" ]; then
echo "用法: $0 <文件路径>"
exit 1
fi
if [ ! -f "$FILE" ]; then
echo "错误: 文件不存在: $FILE"
exit 1
fi
FILE_DIR=$(dirname "$FILE")
LINKS=$(grep -oP '\[([^\]]+)\]\(([^)]+)\)' "$FILE" | grep -oP '\(([^)]+)\)' | sed 's/[()]//g' || true)
if [ -z "$LINKS" ]; then
echo "✓ 未找到需要验证的链接"
exit 0
fi
ERROR_COUNT=0
while IFS= read -r LINK; do
if [[ "$LINK" =~ ^https?:// ]] || [[ "$LINK" =~ ^mailto: ]] || [[ "$LINK" =~ ^# ]]; then
continue
fi
LINK_PATH=$(echo "$LINK" | sed 's/#.*//')
if [ -z "$LINK_PATH" ]; then
continue
fi
if [[ "$LINK_PATH" =~ ^/ ]]; then
TARGET="docs$LINK_PATH"
if [[ ! "$TARGET" =~ \.[A-Za-z0-9]+$ ]]; then
TARGET="$TARGET.md"
fi
elif [[ "$LINK_PATH" =~ ^\. ]]; then
TARGET="$FILE_DIR/$LINK_PATH"
else
TARGET="$FILE_DIR/$LINK_PATH"
fi
TARGET=$(realpath -m "$TARGET" 2>/dev/null || echo "$TARGET")
if [ ! -f "$TARGET" ] && [ ! -d "$TARGET" ]; then
echo "✗ 损坏的链接: $LINK"
echo " 目标不存在: $TARGET"
ERROR_COUNT=$((ERROR_COUNT + 1))
fi
done <<< "$LINKS"
if [ $ERROR_COUNT -eq 0 ]; then
echo "✓ 链接验证通过"
exit 0
fi
echo "✗ 共发现 $ERROR_COUNT 个损坏链接"
exit 1