156 行
3.7 KiB
Bash
156 行
3.7 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
# 多Agent协作文件监控脚本
|
|||
|
|
# 用途:监控GDD文件变化,自动通知其他agent
|
|||
|
|
# 使用:./WATCHDOG.sh
|
|||
|
|
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
# 配置
|
|||
|
|
WATCH_DIR="/Users/xuqinmin/Projects/NewsProject/lawless/docs/设计文档"
|
|||
|
|
SYNC_FILE="/Users/xuqinmin/Projects/NewsProject/lawless/docs/ai-collab/SYNC.md"
|
|||
|
|
LOG_FILE="/Users/xuqinmin/Projects/NewsProject/lawless/docs/ai-collab/watchdog.log"
|
|||
|
|
|
|||
|
|
# 颜色输出
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
NC='\033[0m' # No Color
|
|||
|
|
|
|||
|
|
# 日志函数
|
|||
|
|
log() {
|
|||
|
|
echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 检查依赖
|
|||
|
|
check_dependencies() {
|
|||
|
|
if ! command -v fswatch &> /dev/null; then
|
|||
|
|
echo -e "${RED}错误:fswatch 未安装${NC}"
|
|||
|
|
echo "请运行:brew install fswatch"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 更新SYNC.md
|
|||
|
|
update_sync() {
|
|||
|
|
local message="$1"
|
|||
|
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|||
|
|
|
|||
|
|
# 在SYNC.md的"最近更新日志"部分添加新日志
|
|||
|
|
if grep -q "最近更新日志" "$SYNC_FILE"; then
|
|||
|
|
# 使用sed在"最近更新日志"后添加新行
|
|||
|
|
sed -i '' "/最近更新日志/a\\
|
|||
|
|
\\
|
|||
|
|
[${timestamp}] ${message}" "$SYNC_FILE"
|
|||
|
|
else
|
|||
|
|
echo -e "\n## 最近更新日志\n\n[${timestamp}] ${message}" >> "$SYNC_FILE"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 监控文件变化
|
|||
|
|
watch_files() {
|
|||
|
|
log "${GREEN}开始监控文件变化...${NC}"
|
|||
|
|
log "${YELLOW}监控目录:${WATCH_DIR}${NC}"
|
|||
|
|
log "${YELLOW}同步文件:${SYNC_FILE}${NC}"
|
|||
|
|
log "${YELLOW}日志文件:${LOG_FILE}${NC}"
|
|||
|
|
log ""
|
|||
|
|
|
|||
|
|
# 使用fswatch监控文件变化
|
|||
|
|
fswatch -o "$WATCH_DIR" | while read f; do
|
|||
|
|
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
|||
|
|
local changed_files=$(find "$WATCH_DIR" -name "*.md" -newer "$LOG_FILE" -type f 2>/dev/null)
|
|||
|
|
|
|||
|
|
if [ -n "$changed_files" ]; then
|
|||
|
|
log "${GREEN}检测到文件变化:${NC}"
|
|||
|
|
echo "$changed_files" | while read file; do
|
|||
|
|
local filename=$(basename "$file")
|
|||
|
|
log " - ${filename}"
|
|||
|
|
update_sync "📄 文件变化:${filename}"
|
|||
|
|
done
|
|||
|
|
log ""
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 显示帮助
|
|||
|
|
show_help() {
|
|||
|
|
echo "多Agent协作文件监控脚本"
|
|||
|
|
echo ""
|
|||
|
|
echo "用法:"
|
|||
|
|
echo " ./WATCHDOG.sh # 开始监控"
|
|||
|
|
echo " ./WATCHDOG.sh --help # 显示帮助"
|
|||
|
|
echo " ./WATCHDOG.sh --status # 显示当前状态"
|
|||
|
|
echo ""
|
|||
|
|
echo "功能:"
|
|||
|
|
echo " - 监控GDD文件变化"
|
|||
|
|
echo " - 自动更新SYNC.md"
|
|||
|
|
echo " - 记录变化日志"
|
|||
|
|
echo ""
|
|||
|
|
echo "依赖:"
|
|||
|
|
echo " - fswatch: brew install fswatch"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 显示当前状态
|
|||
|
|
show_status() {
|
|||
|
|
echo "当前监控状态:"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查SYNC.md
|
|||
|
|
if [ -f "$SYNC_FILE" ]; then
|
|||
|
|
echo "SYNC.md 存在"
|
|||
|
|
echo "最近更新:"
|
|||
|
|
tail -5 "$SYNC_FILE"
|
|||
|
|
else
|
|||
|
|
echo "SYNC.md 不存在"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# 检查日志文件
|
|||
|
|
if [ -f "$LOG_FILE" ]; then
|
|||
|
|
echo "日志文件存在"
|
|||
|
|
echo "最近日志:"
|
|||
|
|
tail -5 "$LOG_FILE"
|
|||
|
|
else
|
|||
|
|
echo "日志文件不存在"
|
|||
|
|
fi
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 主函数
|
|||
|
|
main() {
|
|||
|
|
# 检查参数
|
|||
|
|
case "${1:-}" in
|
|||
|
|
--help|-h)
|
|||
|
|
show_help
|
|||
|
|
exit 0
|
|||
|
|
;;
|
|||
|
|
--status|-s)
|
|||
|
|
show_status
|
|||
|
|
exit 0
|
|||
|
|
;;
|
|||
|
|
"")
|
|||
|
|
# 继续执行
|
|||
|
|
;;
|
|||
|
|
*)
|
|||
|
|
echo -e "${RED}未知参数:$1${NC}"
|
|||
|
|
show_help
|
|||
|
|
exit 1
|
|||
|
|
;;
|
|||
|
|
esac
|
|||
|
|
|
|||
|
|
# 检查依赖
|
|||
|
|
check_dependencies
|
|||
|
|
|
|||
|
|
# 检查文件
|
|||
|
|
if [ ! -f "$SYNC_FILE" ]; then
|
|||
|
|
echo -e "${RED}错误:SYNC.md 不存在${NC}"
|
|||
|
|
echo "请先创建 SYNC.md 文件"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# 开始监控
|
|||
|
|
watch_files
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# 运行主函数
|
|||
|
|
main "$@"
|