Files
nmfs-agents/scripts/start_daemon.sh
T
qiuruiandClaude Sonnet 4.6 df59fc0c83 feat: NMFS Agents 全量入库(org v2 + dashboard + 多队列 + 组织架构)
包含从项目创建至今的全部代码首次入库:

核心框架:
- 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>
2026-03-10 07:24:19 +08:00

52 lines
2.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"