包含从项目创建至今的全部代码首次入库: 核心框架: - TaskQueue(SQLite,6 种状态,原子 dequeue) - Executor(asyncio 并发,semaphore 限流,agent_role 路由) - Scheduler(APScheduler,三队列独立调度) - Watchdog(超时检测 + 优先级防饥饿) - Scanner(项目扫描,README/TODO/CLAUDE.md 提取) Agent 体系(20+ 角色): - 项目交付组:architect/developer/tester/productizer - 基础技术组:base-architect/validator/hw/os/kernel/lowlevel/system-tester - 算法组:algo-antishake/position/nav - 洞察组:planner/vision-analyst/media-producer - 市场组:market-pm/sport/elder/safety - 组织层:boss/group-leader/senior-dev/ops - 平台扩展:nrf-dev/esp32-dev - 三专项调研:rtp-researcher/net-researcher/kernel-analyzer 工具层: - ProjectMemory(goals/facts/history SQLite) - VersionPipeline(并行版本流水线 + 反幻觉门控) - EventBus(Redis Streams,5 consumer groups) - DailyReport(append-only 日报 + Boss 决策视图) - AgentScorer(4 维评分:完成度/质量/自主性/协作) - DeviceAgent(SSH rsync + 板端执行) - EnvCollector(本机+SSH 环境采集) - ArchVersion(快照/优化/promote/rollback) Dashboard(React + Vite + Tailwind): - 看板/项目/配置/洞察/日报/Visual 六标签页 - WebSocket 实时更新 - Markdown 渲染(react-markdown + remark-gfm) 测试:314 passed Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
52 lines
2.0 KiB
Bash
Executable File
52 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# NMFS Agents 后台守护启动脚本
|
||
# 用法:bash scripts/start_daemon.sh [--hours 24]
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
||
LOG_DIR="$PROJECT_ROOT/logs"
|
||
PID_FILE="$PROJECT_ROOT/logs/daemon.pid"
|
||
LOG_FILE="$LOG_DIR/daemon_$(date '+%Y%m%d_%H%M%S').log"
|
||
|
||
mkdir -p "$LOG_DIR"
|
||
|
||
# ── 检查是否已在运行 ────────────────────────────────────────────
|
||
if [[ -f "$PID_FILE" ]]; then
|
||
OLD_PID=$(cat "$PID_FILE")
|
||
if kill -0 "$OLD_PID" 2>/dev/null; then
|
||
echo "⚠️ 守护进程已在运行(PID=$OLD_PID),如需重启请先执行:"
|
||
echo " kill $OLD_PID && rm $PID_FILE"
|
||
exit 1
|
||
else
|
||
echo "旧 PID 文件残留,已清理"
|
||
rm -f "$PID_FILE"
|
||
fi
|
||
fi
|
||
|
||
# ── 激活虚拟环境 ────────────────────────────────────────────────
|
||
VENV="$PROJECT_ROOT/venv"
|
||
if [[ ! -f "$VENV/bin/activate" ]]; then
|
||
echo "❌ 未找到虚拟环境: $VENV/bin/activate"
|
||
echo "请先执行: python3.10 -m venv venv && pip install -r requirements.txt"
|
||
exit 1
|
||
fi
|
||
source "$VENV/bin/activate"
|
||
|
||
# ── 启动调度器(后台 nohup)────────────────────────────────────
|
||
echo "🚀 启动 NMFS Agents 守护进程"
|
||
echo " 日志文件: $LOG_FILE"
|
||
echo " PID 文件: $PID_FILE"
|
||
|
||
nohup python "$PROJECT_ROOT/scripts/run.py" start \
|
||
>> "$LOG_FILE" 2>&1 &
|
||
|
||
DAEMON_PID=$!
|
||
echo "$DAEMON_PID" > "$PID_FILE"
|
||
echo "✅ 守护进程已启动(PID=$DAEMON_PID)"
|
||
echo ""
|
||
echo "查看日志: tail -f $LOG_FILE"
|
||
echo "查看状态: $VENV/bin/python $PROJECT_ROOT/scripts/run.py status"
|
||
echo "查看目标: $VENV/bin/python $PROJECT_ROOT/scripts/run.py goals"
|
||
echo "停止进程: kill $DAEMON_PID"
|