lawless/docs/ai-collab/WATCHDOG.sh

156 行
3.7 KiB
Bash
可执行文件

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

#!/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 "$@"