diff --git a/CLAUDE.md b/CLAUDE.md index fa83828..4ef34f3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,20 +4,20 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co ## 项目概述 -NMFS Agents:基于 Claude CLI 的 AI 项目自动化维护与调研系统。支持代码修复、板端测试、成熟度评估、架构整合、市场洞察与基础技术调研,运行在 RK3588 NPU 开发平台上。 +NMFS Agents:基于 Claude CLI 的 AI 多角色自动化系统。通过 30+ Agent 协作完成代码修复、板端测试、成熟度评估、架构整合、市场洞察与基础技术调研,支持 RK3588/RK3566 NPU 开发平台及 nRF54L15/ESP32S3 扩展平台。 ## 目录约定 ``` -src/ # 包源码(Python 包) -tests/ # pytest 单元测试 +src/ # 包源码(Python 包 nmfs_agents) +tests/ # pytest 单元测试(314+) scripts/ # 工具脚本(run.py CLI 入口、start_daemon.sh 等) -configs/ # projects.yaml / agents.yaml / devices.yaml +configs/ # projects.yaml / agents.yaml / devices.yaml / org.yaml data/ # 运行时数据(tasks.db / insight_tasks.db / base_opt_tasks.db / task_logs/) logs/ # daemon 日志(daemon_*.log, daemon.pid) tmp/ # 临时文件,使用后删除 venv/ # Python 虚拟环境(不入仓) -dashboard/ # React 前端源码 +dashboard/ # React 前端源码(Vite + Tailwind) README.md # 快速开始 DEVELOP.md # 开发指南 RELEASE.md # 发布记录 @@ -26,14 +26,14 @@ RELEASE.md # 发布记录 ## 环境 ```bash -# 创建虚拟环境(Python 3.10,兼容 rknn-toolkit2) +# 创建虚拟环境(Python 3.10) python3.10 -m venv venv && source venv/bin/activate pip install -e ".[dev]" ``` -- **x86 开发机**:rknn-toolkit2 2.3.2(ONNX→RKNN 转换、仿真),Python 3.10 +- **x86 开发机**:Python 3.10,rknn-toolkit2 2.3.2(ONNX→RKNN 转换) - **rk3566 设备**(算法默认):orangepi@192.168.123.183,OrangePi -- **rk3588 设备**(高性能):pi@192.168.123.181,NanoPC-T6 +- **rk3588 设备**(高性能):pi@192.168.123.137,NanoPC-T6 ## 认证 @@ -44,27 +44,13 @@ Agent 以子进程调用 `claude --print`,优先使用 CLI OAuth(`claude log ## 常用命令 ```bash -# 环境激活 source venv/bin/activate - -# 运行测试 -pytest tests/ -q - -# 后台启动调度器 -bash scripts/start_daemon.sh - -# 监控状态 -bash scripts/watch_daemon.sh -python scripts/run.py status - -# 扫描预览(不执行) -python scripts/run.py scan - -# 执行下一个任务(须在普通终端执行) -python scripts/run.py run-next - -# 查看任务队列 -sqlite3 data/tasks.db "SELECT id,project,agent_role,title,status FROM tasks ORDER BY id DESC LIMIT 10;" +pytest tests/ -q # 运行测试 +bash scripts/start_daemon.sh # 后台启动调度器 +bash scripts/watch_daemon.sh # 监控状态 +python scripts/run.py status # 查看任务状态 +python scripts/run.py scan # 扫描预览(不执行) +python scripts/run.py run-next # 执行下一个任务(须在普通终端) ``` ## 项目结构 @@ -78,8 +64,11 @@ src/nmfs_agents/ │ ├── productizer.py # Productizer Agent(成熟度评分,规则引擎) │ ├── architect.py # Architect Agent(跨项目分析) │ ├── manager.py # Manager Agent(顶层协调) -│ ├── planner.py # Planner Agent(市场洞察规划) -│ ├── market_pm.py # MarketPm Agent(市场分析) +│ ├── planner.py # Planner Agent(差距分析规划) +│ ├── market_pm.py # MarketPm Agent(市场分析基类) +│ ├── market_sport.py # MarketSport Agent(运动健康市场) +│ ├── market_elder.py # MarketElder Agent(适老辅助市场) +│ ├── market_safety.py # MarketSafety Agent(AI安全市场) │ ├── vision_analyst.py # VisionAnalyst Agent(视觉分析) │ ├── media_producer.py # MediaProducer Agent(内容生产) │ ├── rtp_researcher.py # RTP/RTCP 调研 @@ -94,12 +83,19 @@ src/nmfs_agents/ │ ├── base_validator.py # 基础架构验证 │ ├── algo_antishake.py # 防抖算法专项 │ ├── algo_position.py # 定位算法专项 -│ └── algo_nav.py # 导航算法专项 +│ ├── algo_nav.py # 导航算法专项 +│ ├── algo_vision.py # 视觉算法组基类 +│ ├── nrf_dev.py # nRF54L15 平台开发(运动健康) +│ ├── esp32_dev.py # ESP32S3 平台开发(适老辅助) +│ ├── boss.py # Boss Agent(战略决策) +│ ├── group_leader.py # GroupLeader Agent(部门长) +│ ├── senior_dev.py # SeniorDev Agent(高级研发) +│ └── ops.py # Ops Agent(巡检)+ OpsHub(事件消费) ├── core/ │ ├── scanner.py # 项目扫描器(README/TODO/CLAUDE.md) │ ├── queue.py # SQLite 任务队列(原子 dequeue,6 种状态) │ ├── executor.py # asyncio 并发调度(semaphore 限流,agent_role 路由) -│ ├── scheduler.py # APScheduler 定时入口(多队列) +│ ├── scheduler.py # APScheduler 定时入口(多队列 + EventBus) │ └── watchdog.py # 超时检测 + 优先级防饥饿 └── tools/ ├── feishu.py # 飞书通知 @@ -110,11 +106,33 @@ src/nmfs_agents/ ├── arch_version.py # 架构优化版本管理(snapshot/promote/rollback) ├── project_discovery.py # 非硬编码项目发现 ├── project_memory.py # 项目记忆(goals/facts/history SQLite) - └── env_collector.py # 板端环境信息采集 -configs/ # projects.yaml / agents.yaml / devices.yaml -data/tasks.db # project_delivery 队列(运行时生成) -data/base_opt_tasks.db # base_opt 队列 -data/insight_tasks.db # insight 队列 + ├── env_collector.py # 板端环境信息采集 + ├── event_bus.py # Redis Streams 事件总线(5 consumer groups) + ├── daily_report.py # 日报系统(append-only SQLite + Boss 决策视图) + ├── agent_score.py # Agent 评分系统(4 维度:完成/质量/自主/协作) + ├── version_pipeline.py # 并行版本流水线(反幻觉门控) + └── knowledge_base.py # 知识库(组织架构 + 项目 facts 聚合) +``` + +## 组织架构(org v2) + +``` +Boss(战略决策,周报) +├── 基础技术部(os-base-leader) +│ ├── base-architect / base-validator / hw-engineer +│ ├── os-engineer / dev-kernel / dev-lowlevel / system-tester +│ ├── 算法组:algo-antishake / algo-position / algo-nav +│ ├── 调研组:rtp-researcher / net-researcher / kernel-analyzer +│ └── 平台扩展:nrf-dev / esp32-dev +├── 市场洞察部(market-leader) +│ ├── market-pm(通用) +│ └── market-sport / market-elder / market-safety(专项) +├── 项目交付部 +│ ├── architect / developer / tester +│ └── planner / productizer / vision-analyst / media-producer +└── Ops(独立运营,星形枢纽) + ├── OpsAgent:每日巡检(AI 推理) + └── OpsHub:事件消费 → 日报写入(纯逻辑,快) ``` ## Agent 角色路由 @@ -136,15 +154,20 @@ data/insight_tasks.db # insight 队列 | `algo-position` | AlgoPositionAgent | R | W | 定位算法专项 | | `algo-nav` | AlgoNavAgent | R | W | 导航算法专项 | -### 基础技术组补充(project_delivery 队列,技术专项) +### 调研专项(project_delivery 队列,`__research__.*` 记忆域) -> 属于基础技术组的架构师/高级研发,有独立的专项记忆域(`__research__.*`) +| agent_role | Agent 类 | 记忆域 | 用途 | +|-----------|---------|------|------| +| `rtp-researcher` | RtpResearcherAgent | `__research__.rtp.*` | RTP/RTCP 协议调研 | +| `net-researcher` | NetResearcherAgent | `__research__.net.*` | 网络栈优化调研 | +| `kernel-analyzer` | KernelAnalyzerAgent | `__research__.kernel.*` | 内核调度分析 | -| agent_role | Agent 类 | goals | facts | 记忆域 | 用途 | -|-----------|---------|:---:|:---:|------|------| -| `rtp-researcher` | RtpResearcherAgent | R | W | `__research__.rtp.*` | RTP/RTCP 协议调研 | -| `net-researcher` | NetResearcherAgent | R | W | `__research__.net.*` | 网络栈优化调研 | -| `kernel-analyzer` | KernelAnalyzerAgent | R | W | `__research__.kernel.*` | 内核调度分析 | +### 平台扩展(project_delivery 队列) + +| agent_role | Agent 类 | 用途 | +|-----------|---------|------| +| `nrf-dev` | NrfDevAgent | nRF54L15 / BLE 5.4 / Zephyr(运动健康) | +| `esp32-dev` | Esp32DevAgent | ESP32S3 / mmWave(适老辅助) | ### 项目交付组(project_delivery 队列) @@ -152,22 +175,47 @@ data/insight_tasks.db # insight 队列 |-----------|---------|:---:|:---:|------| | `architect` | ArchitectAgent | W | W | 跨项目架构分析 | | `developer` | DeveloperAgent | R | R | 代码修复/重构(默认) | -| `dev-refactor` | DeveloperAgent | R | R | 重构专项 | -| `dev-embedded` | DeveloperAgent | R | R | 嵌入式固件 | | `tester` | TesterAgent | R | R | 本地+板端测试 | -| `market-pm` | MarketPmAgent | R | W | 市场分析(兼 insight)| ### 产品洞察组(insight 队列) -| agent_role | Agent 类 | goals | facts | 用途 | -|-----------|---------|:---:|:---:|------| -| `planner` | PlannerAgent | R | W | 差距分析,洞察任务规划 | -| `productizer` | ProductizerAgent | W | W | 成熟度评估(100分制) | -| `vision-analyst` | VisionAnalystAgent | R | W | 视觉效果分析 | -| `media-producer` | MediaProducerAgent | R | R | 技术内容生产 | +| agent_role | Agent 类 | 用途 | +|-----------|---------|------| +| `planner` | PlannerAgent | 差距分析,洞察任务规划 | +| `productizer` | ProductizerAgent | 成熟度评估(100分制) | +| `vision-analyst` | VisionAnalystAgent | 视觉效果分析 | +| `media-producer` | MediaProducerAgent | 技术内容生产 | + +### 市场专项(insight 队列) + +| agent_role | Agent 类 | 记忆域 | 用途 | +|-----------|---------|------|------| +| `market-pm` | MarketPmAgent | `__market__.*` | 市场分析(通用) | +| `market-sport` | MarketSportAgent | `__market__.sport.*` | 运动健康市场 | +| `market-elder` | MarketElderAgent | `__market__.elder.*` | 适老辅助市场 | +| `market-safety` | MarketSafetyAgent | `__market__.safety.*` | AI 安全市场 | + +### 组织管理层 + +| agent_role | Agent 类 | 用途 | +|-----------|---------|------| +| `boss` | BossAgent | 战略决策,周报 | +| `os-base-leader` | GroupLeaderAgent | 基础技术部部门长 | +| `vision-algo-leader` | GroupLeaderAgent | 视觉算法组组长 | +| `senior-dev` | SeniorDevAgent | 高级研发(跨组支援) | +| `ops` | OpsAgent | 项目健康巡检 + 文档维护 | > W=可写 R=只读 | goals/facts 写权限受 `WRITE_ROLES` 常量约束(project_memory.py) +## 事件总线与日报 + +- **EventBus**(`tools/event_bus.py`):Redis Streams,executor 任务完成/失败自动发布事件 +- **Consumer Groups**:ops-hub / leader-os-base / leader-vision-algo / leader-market / boss +- **OpsHub**(`agents/ops.py`):消费事件 → 写入 DailyReport,重大事件广播 leader +- **DailyReport**(`tools/daily_report.py`):append-only SQLite,时间线 + Boss 决策视图 +- **AgentScorer**(`tools/agent_score.py`):4 维评分(完成度 40% + 质量 30% + 自主性 20% + 协作 10%) +- **VersionPipeline**(`tools/version_pipeline.py`):反幻觉门控,dev agent 只能 start_testing,tester 才能 mark_done/mark_failed + ## 编码规范 - `from __future__ import annotations`(保持跨版本兼容) @@ -175,10 +223,3 @@ data/insight_tasks.db # insight 队列 - 日志使用 `logging` 模块,不使用 `print` - 命名:类 `PascalCase`,函数/变量 `snake_case`,常量 `UPPER_CASE` - 测试放 `tests/`,调试 demo 放 `tmp/` 并确认后删除 - -## RK3588 关键技术 - -- NPU 三核并行:`core_mask=RKNNLite.NPU_CORE_ALL`(可提升 1.3~1.9x) -- RKNN INT8 量化:rknn-toolkit2 对 onnx 版本有限制(需 < 1.17),安装顺序先 rknn-toolkit2 再 onnx -- 平台检测:通过 CPU 架构和设备树自动判断,推理引擎据此选 Toolkit2 或 Lite2 -- 可复用推理模块:`/data/rockchip/yolo`(目标检测)、`/data/rockchip/mediapipe`(关键点)、`/data/rockchip/embedding`(向量检索) diff --git a/DEVELOP.md b/DEVELOP.md index 518538b..fef610b 100644 --- a/DEVELOP.md +++ b/DEVELOP.md @@ -36,29 +36,25 @@ DeveloperAgent.run(task) "<任务描述>" ], cwd="<项目路径>", - env={CLAUDECODE 已清除}, # 允许在 Claude Code 会话中嵌套运行 + env={CLAUDECODE 已清除}, ) ``` -**confirm 模式审批机制**:通过 claude-wx hook 基础设施实现,每个 Write/Edit/Bash 工具调用前均发飞书卡片请求审批,而非任务级一次性审批。环境变量 `CLAUDE_WX_AGENT_MODE=default` 触发此行为。 - ### 任务队列状态机 ``` pending → running → done → failed - → waiting_approval → done(审批通过后 callback 触发) - → failed(审批拒绝) - → vetoed → pending(否决后重入队,带否决原因) + → waiting_approval → done / failed / vetoed → pending ``` ### 多队列架构 ``` scheduler.py - ├─> project_delivery 队列(tasks.db) ─> 项目开发/研究类任务 + ├─> project_delivery 队列(tasks.db) ─> 项目开发/研究/管理类任务 ├─> base_opt 队列(base_opt_tasks.db) ─> 算法/硬件优化类任务 - └─> insight 队列(insight_tasks.db) ─> 洞察/分析类任务 + └─> insight 队列(insight_tasks.db) ─> 洞察/分析/市场类任务 ``` 每个队列独立的 `role_filter` 确保任务只被有资格的 Agent 执行。 @@ -70,9 +66,30 @@ Scanner.scan_all() # 扫描 README/TODO/CLAUDE.md └─> TaskQueue.enqueue() # SQLite,BEGIN EXCLUSIVE 原子操作,去重 └─> Executor.run_all_pending() # asyncio Semaphore 限流并发 ├─> _make_agent(role) # 按 agent_role 路由到对应 Agent + ├─> EventBus.publish_task_done/failed() # Redis Streams 事件广播 └─> FeishuNotifier.send_task_result() ``` +### EventBus 事件流 + +``` +Executor 任务完成/失败 + └─> EventBus.publish() → Redis Stream "nmfs:events" + ├─> ops-hub → OpsHub → DailyReport 写入 + ├─> leader-os-base → 基础技术部部门长 + ├─> leader-vision-algo → 视觉算法组组长 + ├─> leader-market → 市场洞察部 + └─> boss → Boss 战略决策 +``` + +### 反幻觉门控(VersionPipeline) + +``` +Dev Agent 开发完毕 → vp.start_testing() ← Dev 只能到这一步 +TesterAgent 测试 → vp.mark_done() ← 只有 Tester 能标记完成 + → vp.mark_failed() ← 只有 Tester 能标记失败 +``` + ## Web Dashboard Dashboard 是首选操作入口,访问地址:`http://localhost:9080`(Docker 环境同端口)。 @@ -81,50 +98,21 @@ Dashboard 是首选操作入口,访问地址:`http://localhost:9080`(Docke | 标签页 | 功能 | |--------|------| -| 看板(Kanban) | 按项目查看任务状态(待处理/运行中/完成/失败),可拖拽调整优先级 | -| 洞察(Insight) | 市场目标卡片(运动/适老/AI安全)+ 基础技术调研展示 + 历史记录 | -| 配置(Config) | 查看/编辑全局和项目级 CLAUDE.md / README.md,触发 CLAUDE.md 刷新 | - -### 常见操作 - -**提交开发需求**(点击右上角「提交需求」): -- 选择项目 → 选择类型(修复问题/新功能/代码审查等)→ 填写描述 → 提交 -- 提交后自动路由到 `project_delivery` 队列 - -**发起技术攻关**: -- 需求类型选「技术攻关」→ 选择角色(RTP/网络栈/内核调度/OS/硬件)→ 填写描述 → 提交 -- 自动路由到 `base_opt` 队列;调研结论写入 `__research__.*`,洞察页自动展示 - -**触发市场洞察**(洞察页): -- 点击目标卡片的「触发洞察」按钮 → insight 队列入队 → market-pm 执行 -- 调研结论写入 `__market__.{goal}.*`,目标卡片下次刷新时自动更新 - -**刷新项目指导**(配置页,选中项目后可见): -- 点击「🔄 刷新项目指导」→ 创建 `architect` 任务 → Agent 综合调研结论自动重写 CLAUDE.md +| 看板(Kanban) | 按项目查看任务状态,可拖拽调整优先级 | +| 洞察(Insight) | 市场目标卡片(运动/适老/AI安全)+ 基础技术调研 | +| 日报(Daily) | 时间线视图(全部事件)+ Boss 决策视图(组织健康 + 待决策) | +| 配置(Config) | 查看/编辑 CLAUDE.md / README.md,触发 CLAUDE.md 刷新 | ## 常用命令 ```bash -# 查看任务状态(多队列) -python scripts/run.py status - -# 后台启动调度器 -bash scripts/start_daemon.sh - -# 监控日志 -bash scripts/watch_daemon.sh - -# 预览扫描结果(只打印,不入队) -python scripts/run.py scan - -# 执行队列中下一个任务(须在普通终端执行) -python scripts/run.py run-next - -# 入队三专项调研任务(须在普通终端执行) -python scripts/run.py research - -# 全量测试 -pytest tests/ -q +python scripts/run.py status # 查看任务状态(多队列) +bash scripts/start_daemon.sh # 后台启动调度器 +bash scripts/watch_daemon.sh # 监控日志 +python scripts/run.py scan # 预览扫描结果 +python scripts/run.py run-next # 执行下一个任务(须在普通终端) +python scripts/run.py research # 入队三专项调研(须在普通终端) +pytest tests/ -q # 全量测试 ``` ## 调试 @@ -132,13 +120,8 @@ pytest tests/ -q ### 查看任务队列 ```bash -# project_delivery 队列 sqlite3 data/tasks.db "SELECT id,project,agent_role,title,status FROM tasks ORDER BY id DESC LIMIT 20;" - -# base_opt 队列 sqlite3 data/base_opt_tasks.db "SELECT id,project,agent_role,title,status FROM tasks ORDER BY id DESC LIMIT 10;" - -# insight 队列 sqlite3 data/insight_tasks.db "SELECT id,project,agent_role,title,status FROM tasks ORDER BY id DESC LIMIT 10;" ``` @@ -169,27 +152,19 @@ EOF |------|---------|--------| | `README.md` 的 `## 已知问题` | 每一行问题 → `fix_bug` 任务 | 2 | | `.py` 文件中的 `TODO/FIXME/HACK` | 注释 → `code_review` 任务 | 4 | -| `CLAUDE.md` 含 ❌/⚠ 的行 | 约束违反 → `fix_bug` 任务 | 2 | -| `projects.yaml` description 关键词 | 待修复/零检出 → `fix_bug`;FPS偏低 → `improve_perf` | 2/3 | +| `CLAUDE.md` 含 `❌/⚠` 的行 | 约束违反 → `fix_bug` 任务 | 2 | | 兜底 | 每个项目固定生成定期代码巡检 | 5 | -自动跳过:`venv`, `.venv`, `.git`, `__pycache__`, `node_modules`, `build`, `dist` - ### 架构优化版本管理 ``` arch_optimize 任务入队 └─> ArchitectAgent._optimize() - ├─ ArchVersion.snapshot() # 备份当前 .py 文件 - ├─ claude --dangerously-skip-permissions # 应用架构改动 - ├─ pytest tests/ -q # 验证测试 - ├─ 通过 → ArchVersion.promote() # 晋升 - └─ 失败 → ArchVersion.rollback() # 恢复备份 -``` - -```bash -python scripts/run.py arch-versions yolo # 查看版本历史 -python scripts/run.py arch-restore yolo v001 # 手动恢复 + ├─ ArchVersion.snapshot() + ├─ claude --dangerously-skip-permissions + ├─ pytest tests/ -q + ├─ 通过 → ArchVersion.promote() + └─ 失败 → ArchVersion.rollback() ``` ## 添加新项目 @@ -201,7 +176,6 @@ projects: my-project: path: /data/company/my-project # 省略则从 scan_dirs 自动发现 mode: auto # auto | confirm | report - description: "项目描述,含待修复/FPS偏低等关键词可自动生成任务" ``` ## 添加新 Agent @@ -216,52 +190,53 @@ projects: ### configs/projects.yaml ```yaml -scan_dirs: # 自动扫描目录(发现项目) +scan_dirs: - /data/company -exclude_projects: # 跳过的目录名(防止噪音) +- /data/company/algo-base +exclude_projects: - rknn-toolkit2 -projects: # 显式配置(可覆盖自动发现的项目) +- agents +projects: my-project: path: /data/company/my-project mode: confirm - description: "项目描述" ``` ### configs/agents.yaml ```yaml scheduler: - interval_hours: 1 # 扫描间隔 - max_concurrent: 3 # 全局最大并发 + interval_hours: 1 + max_concurrent: 3 queues: project_delivery: db: data/tasks.db max_concurrent: 3 - scan_interval_hours: 1 - roles: # 仅执行此列表中角色的任务 - - developer - - architect + roles: [developer, architect, tester, rtp-researcher, ...] + base_opt: + db: data/base_opt_tasks.db + max_concurrent: 2 + roles: [algo-antishake, algo-position, ...] + insight: + db: data/insight_tasks.db + max_concurrent: 2 + roles: [planner, productizer, market-pm, ...] ``` ### configs/devices.yaml ```yaml devices: - rk3566: # 算法默认验证设备 - type: linux - connect: ssh + rk3566: host: 192.168.123.183 user: orangepi password: "orangepi" workspace: /home/orangepi/Desktop - rk3588: # 高性能验证设备 - type: linux - connect: ssh - host: 192.168.123.181 + rk3588: + host: 192.168.123.137 user: pi - password: "123123" + password: "pi" workspace: /home/pi/Desktop - pre_cmd: "clashon && clashproxy on" ``` ## 环境变量 @@ -270,48 +245,34 @@ devices: |------|------|------| | `ANTHROPIC_API_KEY` | Claude API 密钥(已 `claude login` 则不需要) | 否 | | `FEISHU_WEBHOOK_URL` | 飞书 Webhook,任务结果通知 | 否 | -| `FEISHU_BOT_TOKEN` | 飞书 Bot Token,confirm 模式 hook 审批需要 | 否 | | `DB_PATH` | 任务数据库路径(默认 `data/tasks.db`) | 否 | | `DASHBOARD_PORT` | Dashboard 端口(默认 8080) | 否 | ## API 端点参考 -Dashboard 后端 FastAPI,主要端点: - | 方法 | 路径 | 说明 | |------|------|------| -| GET | `/api/tasks` | 获取任务列表(支持 `?project=` 过滤) | -| POST | `/api/tasks` | 创建任务(`queue` 字段路由到不同数据库) | +| GET | `/api/tasks` | 获取任务列表 | +| POST | `/api/tasks` | 创建任务(`queue` 字段路由) | | PATCH | `/api/tasks/{id}` | 更新优先级 | | POST | `/api/tasks/{id}/retry` | 重试失败任务 | -| POST | `/api/tasks/{id}/cancel` | 取消任务 | -| POST | `/api/tasks/{id}/approve` | 审批 waiting_approval 任务 | -| POST | `/api/tasks/{id}/reject` | 拒绝任务(附原因) | | GET | `/api/projects` | 获取项目列表 | | POST | `/api/projects/import` | 导入新项目 | -| DELETE | `/api/projects/{name}` | 删除项目 | -| GET | `/api/projects/{name}/config` | 获取项目 CLAUDE.md / README.md | -| PUT | `/api/projects/{name}/config/{type}` | 保存配置文件(`claude`/`readme`) | -| POST | `/api/projects/{name}/refresh-claude-md` | 触发 architect 更新 CLAUDE.md | -| GET | `/api/config/global` | 获取全局 CLAUDE.md | -| PUT | `/api/config/global` | 保存全局 CLAUDE.md | -| GET | `/api/market/facts` | 获取市场洞察 facts(`__market__.*`) | -| POST | `/api/market/trigger/{goal}` | 触发市场洞察任务 | -| GET | `/api/market/history` | 获取洞察任务历史 | -| GET | `/api/research/facts` | 获取三专项调研 facts(`__research__.*`) | -| GET | `/api/executor/status` | 执行器状态 | -| POST | `/api/executor/start` | 启动执行器 | -| POST | `/api/executor/stop` | 停止执行器 | +| GET | `/api/market/facts` | 市场洞察 facts | +| POST | `/api/market/trigger/{goal}` | 触发市场洞察 | +| GET | `/api/research/facts` | 三专项调研 facts | +| GET | `/api/daily/timeline` | 日报时间线 | +| GET | `/api/daily/boss` | Boss 决策视图 | +| GET | `/api/daily/dates` | 可用日期列表 | +| GET | `/api/daily/scores` | Agent 评分 | -### 队列路由规则 - -`POST /api/tasks` 的 `queue` 字段: +### 队列路由 | queue 值 | 路由到 | 典型 agent_role | |----------|--------|-----------------| -| `project_delivery`(默认)| `data/tasks.db` | developer / architect | -| `base_opt` | `data/base_opt_tasks.db` | rtp-researcher / kernel-analyzer / hw-engineer | -| `insight` | `data/insight_tasks.db` | market-pm / planner / productizer | +| `project_delivery`(默认)| `data/tasks.db` | developer / architect / boss / ops | +| `base_opt` | `data/base_opt_tasks.db` | algo-* / hw-engineer / os-engineer | +| `insight` | `data/insight_tasks.db` | market-* / planner / productizer | ## 项目记忆系统 @@ -320,34 +281,18 @@ Dashboard 后端 FastAPI,主要端点: | 层 | 读写规则 | |----|---------| | goals(目标) | 仅 productizer/architect 可写 | -| facts(事实) | 任意 agent;architect 通过 `[记忆]` 标签写入 | +| facts(事实) | 任意 agent;通过 `[记忆]` 标签写入 | | history(历史) | executor 每次任务完成/失败后自动写入 | ### 特殊 facts 命名约定 -| key 前缀 | 写入者 | 用途 | Dashboard 展示位置 | -|----------|--------|------|-------------------| -| `__research__.rtp.*` | rtp-researcher | RTP/RTCP 调研结论 | 洞察页"基础技术调研" | -| `__research__.net.*` | net-researcher | 网络栈调优结论 | 洞察页"基础技术调研" | -| `__research__.kernel.*` | kernel-analyzer | 内核调度分析结论 | 洞察页"基础技术调研" | -| `__market__.{goal}.*` | market-pm | 市场洞察结论(goal=运动/适老/AI安全) | 洞察页目标卡片 | -| `__env__.*` | env-collector | 板端硬件/软件环境信息 | Agent 系统提示 | - -```bash -python scripts/run.py goals # 查看项目长期目标 -python scripts/run.py facts # 查看项目知识事实 -python scripts/run.py set-fact embedding api_port "8000" -``` - -## Claude-WX 集成 - -| Agent 模式 | CLAUDE_WX_AGENT_MODE | 飞书行为 | -|-----------|---------------------|---------| -| `auto` | `trust` | 工具执行通知,不阻塞 | -| `confirm` | `default` | 每个 Write/Edit/Bash 需飞书逐一审批 | -| `report` | `silent` | 静默,只读工具无需通知 | - -配置 `agents.yaml` 中的 `claude_wx_url` 后,Executor 在任务开始/结束时调用 `/agent/task-start` 和 `/agent/task-end` 更新飞书调度中心。 +| key 前缀 | 写入者 | Dashboard 展示 | +|----------|--------|---------------| +| `__research__.rtp.*` | rtp-researcher | 洞察页"基础技术调研" | +| `__research__.net.*` | net-researcher | 洞察页"基础技术调研" | +| `__research__.kernel.*` | kernel-analyzer | 洞察页"基础技术调研" | +| `__market__.{goal}.*` | market-* | 洞察页目标卡片 | +| `__env__.*` | env-collector | Agent 系统提示 | ## Watchdog diff --git a/README.md b/README.md index 3ba7968..7a5285b 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,14 @@ # NMFS Agents -基于 Claude CLI 的 AI 项目自动化维护与调研系统,运行在 RK3588 NPU 开发平台上。 -支持代码修复、板端测试、成熟度评估、架构整合、市场洞察与基础技术调研。 +基于 Claude CLI 的 AI 多角色自动化系统。30+ Agent 协作完成代码修复、板端测试、 +成熟度评估、架构整合、市场洞察与基础技术调研。 ## 组织架构 ``` -AI 自动化平台 +Boss(战略决策,周报) │ -├── 基础技术组(base_opt + project_delivery 队列) +├── 基础技术部(os-base-leader) │ ├── 架构设计 base-architect — 平台架构整合,跨组技术决策 │ ├── 架构验证 base-validator — 基准测试,架构方案验证 │ ├── 硬件工程 hw-engineer — 硬件选型,功耗/算力权衡 @@ -18,68 +18,72 @@ AI 自动化平台 │ ├── 系统测试 system-tester — 集成测试,端到端验证 │ ├── 算法专项 │ │ ├── algo-antishake 防抖算法(IMU/滤波/卡尔曼) -│ │ ├── algo-position 定位算法(GNSS/视觉里程计) +│ │ ├── algo-position 定位算法(UWB/BLE/视觉) │ │ └── algo-nav 导航算法(路径规划/避障) -│ └── 技术专项(架构师/高级研发,有独立专项记忆) -│ ├── rtp-researcher — RTP/RTCP 实时传输协议(__research__.rtp.*) -│ ├── net-researcher — 网络栈优化调研(__research__.net.*) -│ └── kernel-analyzer — 内核调度分析(__research__.kernel.*) +│ ├── 技术调研(有独立专项记忆 __research__.*) +│ │ ├── rtp-researcher — RTP/RTCP 实时传输协议 +│ │ ├── net-researcher — 网络栈优化 +│ │ └── kernel-analyzer — 内核调度分析 +│ └── 平台扩展 +│ ├── nrf-dev — nRF54L15 / BLE 5.4 / Zephyr(运动健康) +│ └── esp32-dev — ESP32S3 / mmWave(适老辅助) │ -├── 项目交付组(project_delivery 队列,1h 扫描) -│ ├── architect — 跨项目架构分析,技术债识别 -│ ├── developer — 代码修复/重构(含 dev-refactor/dev-embedded) -│ └── tester — 本地 pytest + 板端 SSH 测试 +├── 市场洞察部(market-leader) +│ ├── market-pm — 市场分析(通用) +│ ├── market-sport — 运动健康专项 +│ ├── market-elder — 适老辅助专项 +│ └── market-safety — AI 安全专项 │ -└── 产品洞察组(insight 队列,6h 扫描) - ├── planner — 差距分析,洞察任务规划 - ├── productizer — 成熟度评估(100分制,规则引擎) - ├── market-pm — 市场分析,竞品调研,众筹追踪 - ├── vision-analyst — 视觉效果分析,截图回归 - └── media-producer — 技术内容生产 +├── 项目交付部 +│ ├── architect — 跨项目架构分析 +│ ├── developer — 代码修复/重构 +│ ├── tester — 本地 pytest + 板端 SSH 测试 +│ ├── planner — 差距分析,洞察任务规划 +│ ├── productizer — 成熟度评估(100分制) +│ ├── vision-analyst — 视觉效果分析 +│ └── media-producer — 技术内容生产 +│ +└── Ops(独立运营,星形枢纽) + ├── OpsAgent — 每日巡检,项目健康评分 + └── OpsHub — EventBus 事件消费 → 日报写入 ``` ## 人员矩阵 -| 角色 | 所属组 | 队列 | memory goals | memory facts | 设备访问 | 主要项目 | -|------|--------|------|:---:|:---:|:---:|------| -| base-architect | 基础技术 | base_opt | W | W | ─ | 跨平台架构 | -| base-validator | 基础技术 | base_opt | R | W | rk3566/rk3588 | 算法验证 | -| hw-engineer | 基础技术 | base_opt | R | W | ─ | 硬件设计 | -| os-engineer | 基础技术 | base_opt | R | W | rk3566/rk3588 | OS 调优 | -| dev-kernel | 基础技术 | base_opt | R | W | rk3566/rk3588 | 内核驱动 | -| dev-lowlevel | 基础技术 | base_opt | R | W | rk3566/rk3588 | 嵌入式固件 | -| system-tester | 基础技术 | base_opt | R | W | rk3566/rk3588 | 集成测试 | -| algo-antishake | 基础技术 | base_opt | R | W | rk3566(默认)| algo-base | -| algo-position | 基础技术 | base_opt | R | W | rk3566(默认)| algo-base | -| algo-nav | 基础技术 | base_opt | R | W | rk3566(默认)| algo-base | -| rtp-researcher | 基础技术 | project_delivery | R | W | ─ | rtp-research | -| net-researcher | 基础技术 | project_delivery | R | W | ─ | net-research | -| kernel-analyzer | 基础技术 | project_delivery | R | W | ─ | kernel-analysis | -| architect | 项目交付 | project_delivery | W | W | ─ | 全项目 | -| developer | 项目交付 | project_delivery | R | R | ─ | 全项目 | -| tester | 项目交付 | project_delivery | R | R | rk3566/rk3588 | 全项目 | -| planner | 产品洞察 | insight | R | W | ─ | insight | -| productizer | 产品洞察 | insight | W | W | ─ | 全项目 | -| market-pm | 产品洞察 | insight | R | W | ─ | 市场调研 | -| vision-analyst | 产品洞察 | insight | R | W | rk3566/rk3588 | 视觉验证 | -| media-producer | 产品洞察 | insight | R | R | ─ | 内容输出 | +| 角色 | 所属组 | 队列 | memory | 设备 | +|------|--------|------|:---:|:---:| +| base-architect | 基础技术 | base_opt | W/W | ─ | +| base-validator | 基础技术 | base_opt | R/W | rk3566/rk3588 | +| hw-engineer | 基础技术 | base_opt | R/W | ─ | +| os-engineer | 基础技术 | base_opt | R/W | rk3566/rk3588 | +| dev-kernel | 基础技术 | base_opt | R/W | rk3566/rk3588 | +| dev-lowlevel | 基础技术 | base_opt | R/W | rk3566/rk3588 | +| system-tester | 基础技术 | base_opt | R/W | rk3566/rk3588 | +| algo-antishake | 基础技术 | base_opt | R/W | rk3566 | +| algo-position | 基础技术 | base_opt | R/W | rk3566 | +| algo-nav | 基础技术 | base_opt | R/W | rk3566 | +| rtp-researcher | 基础技术 | project_delivery | R/W | ─ | +| net-researcher | 基础技术 | project_delivery | R/W | ─ | +| kernel-analyzer | 基础技术 | project_delivery | R/W | ─ | +| nrf-dev | 基础技术 | project_delivery | R/W | ─ | +| esp32-dev | 基础技术 | project_delivery | R/W | ─ | +| architect | 项目交付 | project_delivery | W/W | ─ | +| developer | 项目交付 | project_delivery | R/R | ─ | +| tester | 项目交付 | project_delivery | R/R | rk3566/rk3588 | +| planner | 产品洞察 | insight | R/W | ─ | +| productizer | 产品洞察 | insight | W/W | ─ | +| market-pm | 市场洞察 | insight | R/W | ─ | +| market-sport | 市场洞察 | insight | R/W | ─ | +| market-elder | 市场洞察 | insight | R/W | ─ | +| market-safety | 市场洞察 | insight | R/W | ─ | +| vision-analyst | 产品洞察 | insight | R/W | rk3566/rk3588 | +| media-producer | 产品洞察 | insight | R/R | ─ | +| boss | 管理层 | project_delivery | R/W | ─ | +| os-base-leader | 管理层 | project_delivery | R/W | ─ | +| senior-dev | 管理层 | project_delivery | R/W | ─ | +| ops | 独立运营 | project_delivery | R/W | ─ | -> W=可写 R=只读 ─=不访问 | 设备栏:rk3566=192.168.123.183,rk3588=192.168.123.181 - -## 托管项目 - -| 项目 | 路径 | 模式 | 主要负责组 | -|------|------|------|-----------| -| yolo | /data/company/yolo | confirm | 项目交付 | -| mediapipe | /data/company/mediapipe | auto | 项目交付 | -| embedding | /data/company/embedding | report | 项目交付 | -| info-privacy | /data/company/info-privacy | confirm | 项目交付 | -| logodetect-x86 | /data/company/logodetect-x86 | auto | 项目交付 | -| rtp-research | /data/company/os-base/rtp-research | auto | 调研 | -| net-research | /data/company/os-base/net-research | auto | 调研 | -| kernel-analysis | /data/company/os-base/kernel-analysis | auto | 调研 | -| claude-wx | /data/company/claude-wx | auto | 项目交付 | -| ui-tars | /data/company/ui-tars | auto | 基础技术 | +> memory 格式:goals/facts(W=可写 R=只读)| 设备:rk3566=192.168.123.183,rk3588=192.168.123.137 ## 快速开始 @@ -93,33 +97,28 @@ python scripts/run.py status # 查看任务状态 ## 工作原理 -系统有两条触发路径,均汇入同一个三队列执行引擎: - ``` -┌─ Web Dashboard(主操作入口,http://localhost:9080)────────────────────────┐ -│ 提交需求(修复/重构/文档) → project_delivery 队列 → developer/architect│ -│ 技术攻关(RTP/网络/内核) → base_opt 队列 → 专项研究 Agent │ -│ 触发市场洞察 → insight 队列 → market-pm/planner │ -│ 刷新项目指导(CLAUDE.md) → project_delivery 队列 → architect 分析写入 │ -└────────────────────────────────────────────────────────────────────────────┘ +┌─ Web Dashboard(http://localhost:9080)──────────────────────────────────┐ +│ 提交需求 → project_delivery 队列 → developer/architect │ +│ 技术攻关 → base_opt 队列 → 专项研究 Agent │ +│ 触发市场洞察 → insight 队列 → market-*/planner │ +│ 查看日报 → /api/daily/* → 时间线 + Boss 决策视图 │ +└──────────────────────────────────────────────────────────────────────────┘ -┌─ APScheduler(定时自动)───────────────────────────────────────────────────┐ -│ Scanner 扫描 README/TODO/CLAUDE.md → 自动入对应队列(1h/6h 间隔) │ -└────────────────────────────────────────────────────────────────────────────┘ +┌─ APScheduler(定时自动)────────────────────────────────────────────────┐ +│ Scanner 扫描 → 自动入对应队列 | Boss 周报 | Ops 巡检 | 调研/算法轮次 │ +└──────────────────────────────────────────────────────────────────────────┘ - ↓ 三队列并发执行 + ↓ 三队列并发执行 + EventBus 事件广播 -project_delivery(tasks.db) ─> developer / architect / tester -base_opt(base_opt_tasks.db) ─> 算法专项 / 调研 / 硬件优化 Agent -insight(insight_tasks.db) ─> market-pm / planner / productizer +project_delivery(tasks.db) ─> developer / architect / tester / boss / ops +base_opt(base_opt_tasks.db) ─> 算法 / 调研 / 硬件优化 Agent +insight(insight_tasks.db) ─> market-* / planner / productizer - ↓ 调研结论写入 ProjectMemory + ↓ EventBus(Redis Streams)→ OpsHub → DailyReport -__research__.rtp.* / __research__.net.* / __research__.kernel.* - └─> Dashboard"基础技术调研"区块自动展示 - -__market__.{goal}.*(运动 / 适老 / AI安全) - └─> Dashboard"市场洞察"目标卡片自动更新 +任务完成/失败 → publish_task_done/failed → 5 consumer groups 消费 +Ops 日报自动聚合 → Dashboard 日报 Tab 展示 ``` ## 执行模式 diff --git a/RELEASE.md b/RELEASE.md index 40c68d5..8ec8a71 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,52 +1,69 @@ # Release Notes +## v0.6.0(2026-03-10) + +### 新增 +- **组织架构 v2**:Boss / GroupLeader / SeniorDev / Ops 四层管理,org.yaml 配置 +- **EventBus**:Redis Streams 事件总线,5 consumer groups(ops-hub/leader-*/boss) +- **OpsHub**:事件消费星形枢纽,纯逻辑快速消费 → DailyReport 写入 +- **DailyReport**:append-only 日报(时间线 + Boss 决策视图),Dashboard 日报 Tab +- **AgentScorer**:4 维 Agent 评分(完成度 40% + 质量 30% + 自主性 20% + 协作 10%) +- **VersionPipeline 反幻觉门控**:dev agent 只能 start_testing,tester 才能 mark_done/mark_failed +- **平台扩展 Agent**:NrfDevAgent(nRF54L15/BLE/Zephyr)、Esp32DevAgent(ESP32S3/mmWave) +- **市场专项化**:MarketSportAgent / MarketElderAgent / MarketSafetyAgent 三专项拆分 +- **Executor EventBus 集成**:任务完成/失败/崩溃自动发布事件 +- **Scheduler EventBus 注入**:Redis 可用时自动创建 EventBus,不可用时降级 +- **KnowledgeBase**:组织架构 + 项目 facts 聚合,Boss/Leader 上下文注入 +- **Dashboard Markdown 渲染修复**:react-markdown + remark-gfm 替代 `
` 标签
+
+### 修复
+- Executor 崩溃路径缺少 EventBus 事件发布
+- OpsHub 类型注解缺失
+- `import redis` 从函数体移至文件顶部(try/except 保护)
+
## v0.5.0(2026-03-09)
### 新增
-- **三专项独立项目**:rtp-research / net-research / kernel-analysis 从 os-base 拆分为独立项目,各有独立工作目录
-- **executor 修复**:agent 返回 `status="failed"` 时正确调用 `mark_failed()`,不再错误标记为完成
-- **task_logs 权限修复**:chown 解决 daemon 以 qiurui 运行但目录 root 所有导致的 Permission denied
+- **三专项独立项目**:rtp-research / net-research / kernel-analysis 独立工作目录
+- **executor 修复**:agent 返回 `status="failed"` 时正确调用 `mark_failed()`
+- **task_logs 权限修复**:chown 解决 Permission denied
## v0.4.0(2026-03-09)
### 新增
-- **多队列调度**:project_delivery / base_opt / insight 三队列独立 DB、独立并发、独立扫描间隔
-- **Dashboard Web UI**:FastAPI + React 看板,WebSocket 实时推送,支持 KanbanBoard / InsightView / ConfigView / VisualView
-- **市场洞察(InsightView)**:planner/productizer/vision-analyst/media-producer 角色,前端触发
+- **多队列调度**:project_delivery / base_opt / insight 三队列独立 DB
+- **Dashboard Web UI**:FastAPI + React 看板,WebSocket 实时推送
+- **市场洞察(InsightView)**:planner/productizer/vision-analyst/media-producer
- **三专项 Agent**:RtpResearcherAgent / NetResearcherAgent / KernelAnalyzerAgent
- **Dashboard Docker 部署**:`nmfs-agents-dashboard:latest`,端口 9080
-- **rk3566 设备接入**:算法任务默认用 rk3566(192.168.123.183)验证,rk3588 作为高性能备选
+- **rk3566 设备接入**:算法任务默认用 rk3566(192.168.123.183)
### 修复
-- confirm 模式改为 hook 级审批(claude-wx),移除 task-level 审批卡
-- visual_tester pip install 后 sys.path 未更新导致 Visual 标签 404
+- confirm 模式改为 hook 级审批(claude-wx)
+- visual_tester sys.path 未更新导致 Visual 标签 404
## v0.3.0(2026-03-07)
### 新增
-- **Watchdog**:core/watchdog.py,60s 间隔检查,running 超 2h → failed,pending 超 2h 提升优先级
-- **Task 字段扩展**:initiator(任务发起人)、discussion(沟通纪要)
-- **Dashboard 会议纪要风格**:TaskDetail 参与人区 / 沟通纪要区 / 时间线
-- **TaskCard 重设计**:P1-P5 优先级徽章 + 类型标签 + 发起人→执行者链 + 计时
-- **claude-wx 集成**:DeveloperAgent 自动注入 CLAUDE_WX_AGENT_MODE / CLAUDE_WX_AGENT,调度中心 task-start/end 事件
+- **Watchdog**:60s 间隔检查,running 超 2h → failed,pending 超 2h 提升优先级
+- **Task 字段扩展**:initiator / discussion
+- **claude-wx 集成**:DeveloperAgent 自动注入 CLAUDE_WX_AGENT_MODE
### 修复
-- `queue.py mark_vetoed()`:retry_count 从 SQLite 读取后类型为字符串,修复 int() 转换
+- `queue.py mark_vetoed()`:retry_count 类型转换修复
## v0.2.0(2026-03-05)
### 新增
-- **ProjectMemory**:SQLite 三层记忆(goals/facts/history),architect 写目标/事实,executor 写历史
-- **EnvCollector**:SSH 采集板端模型/包/磁盘信息,注入 Agent 上下文
-- **ArchVersion**:架构优化快照 → 测试 → promote/rollback 循环
-- **ProjectDiscovery**:非硬编码项目发现,扫描父目录或单项目目录
-- **os-base 虚拟项目**:基础技术组 RTP/网络/内核调研,任务由调度器直接入队
-- **exclude_projects**:projects.yaml 支持黑名单,防止大型 SDK 产生噪音
-- **algo-base 迁移**:算法专项项目迁移至 /data/company/algo-base
+- **ProjectMemory**:SQLite 三层记忆(goals/facts/history)
+- **EnvCollector**:SSH 采集板端环境信息
+- **ArchVersion**:快照 → 测试 → promote/rollback
+- **ProjectDiscovery**:非硬编码项目发现
+- **exclude_projects**:projects.yaml 黑名单
### 修复
-- paramiko lazy init:`_get_client()` 延迟创建 client,解决 SOCKS 代理不兼容问题
-- asyncio 兼容:改用 `get_running_loop().run_in_executor()`
+- paramiko lazy init(SOCKS 代理兼容)
+- asyncio `get_running_loop().run_in_executor()`
## v0.1.0(2026-02-27)
@@ -54,18 +71,13 @@
- **多角色 Agent 体系**:Developer / Tester / Productizer / Architect / Manager
- **Claude CLI 驱动**:`claude --print` 子进程,CLI OAuth 认证
- **三种执行模式**:auto / confirm / report
-- **SQLite 任务队列**:原子 dequeue(BEGIN EXCLUSIVE),优先级排序,去重
-- **APScheduler 定时调度**:每小时扫描 + asyncio Semaphore 并发
-- **飞书集成**:Webhook 通知 + HTTP Callback Server
-- **SSH Device Agent**:rsync 同步 + 板端 pytest 验证
-
-### 托管项目(初始)
-yolo(confirm)、mediapipe(auto)、embedding(report)、info-privacy(confirm)、logodetect-x86(auto)
+- **SQLite 任务队列**:原子 dequeue,优先级排序,去重
+- **APScheduler 定时调度**
+- **飞书集成** + **SSH Device Agent**
### 发布检查清单
- [ ] `pytest tests/ -q` 全部通过
- [ ] `claude --version` 可用,已通过 `claude login` 认证
- [ ] `configs/agents.yaml` model 字段正确
-- [ ] 设备连通性:`ssh orangepi@192.168.123.183 echo ok` / `ssh pi@192.168.123.181 echo ok`
-- [ ] 飞书 Webhook 有效(可选)
+- [ ] 设备连通性:`ssh orangepi@192.168.123.183 echo ok`
diff --git a/dashboard/src/components/ImportProjectModal.tsx b/dashboard/src/components/ImportProjectModal.tsx
index cb32677..321814b 100644
--- a/dashboard/src/components/ImportProjectModal.tsx
+++ b/dashboard/src/components/ImportProjectModal.tsx
@@ -117,7 +117,7 @@ export function ImportProjectModal({ onClose }: Props) {
value={form.path}
onChange={e => handlePathChange(e.target.value)}
className={inputCls}
- placeholder="/data/rockchip/my-project"
+ placeholder="/data/company/my-project"
/>
diff --git a/scripts/test_24h.py b/scripts/test_24h.py
index 268efdc..a888401 100644
--- a/scripts/test_24h.py
+++ b/scripts/test_24h.py
@@ -3,8 +3,8 @@
24小时项目自动化运行测试 - 基于 Playwright 浏览器自动化
用法:
- python scripts/test_24h.py --hours 24 --project /data/rockchip/logodetect-x86
- python scripts/test_24h.py --hours 1 --project /data/rockchip/logodetect-x86 --dry-run
+ python scripts/test_24h.py --hours 24 --project /data/company/algo-base/logodetect-x86
+ python scripts/test_24h.py --hours 1 --project /data/company/algo-base/logodetect-x86 --dry-run
"""
from __future__ import annotations
@@ -318,7 +318,7 @@ def generate_report(
def main() -> None:
parser = argparse.ArgumentParser(description="24h 项目自动化运行测试")
- parser.add_argument("--project", default="/data/rockchip/logodetect-x86",
+ parser.add_argument("--project", default="/data/company/algo-base/logodetect-x86",
help="项目目录路径")
parser.add_argument("--linked", default="/data/test-platform/logo-collect",
help="关联项目路径(用于集成任务)")
diff --git a/src/nmfs_agents/tools/project_discovery.py b/src/nmfs_agents/tools/project_discovery.py
index ea2e6fa..8a802ea 100644
--- a/src/nmfs_agents/tools/project_discovery.py
+++ b/src/nmfs_agents/tools/project_discovery.py
@@ -39,9 +39,9 @@ class ProjectDiscovery:
"""Discover Claude-managed projects under a directory tree.
Supports two usage patterns:
- - Parent directory (e.g. /data/rockchip): scans subdirectories,
+ - Parent directory (e.g. /data/company): scans subdirectories,
returns all subdirs that look like Claude projects.
- - Single project dir (e.g. /data/rockchip/yolo): returns that project
+ - Single project dir (e.g. /data/company/yolo): returns that project
directly, ignoring subdirectories.
Embedded vs host detection uses keyword heuristics on CLAUDE.md,
diff --git a/tests/test_config.py b/tests/test_config.py
index 32f22fb..52ba583 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -7,7 +7,7 @@ from nmfs_agents.config import load_config, AgentsConfig
def _write_base_yamls(tmp_path: Path, projects_extra: str = "") -> None:
(tmp_path / "projects.yaml").write_text(
- "projects:\n yolo:\n path: /data/rockchip/yolo\n mode: confirm\n"
+ "projects:\n yolo:\n path: /data/company/yolo\n mode: confirm\n"
+ projects_extra
)
(tmp_path / "agents.yaml").write_text(
@@ -26,7 +26,7 @@ def test_load_config_returns_typed_config(tmp_path):
cfg = load_config(tmp_path)
assert "yolo" in cfg.projects
assert cfg.projects["yolo"].mode == "confirm"
- assert cfg.projects["yolo"].path == Path("/data/rockchip/yolo")
+ assert cfg.projects["yolo"].path == Path("/data/company/yolo")
assert cfg.scheduler.interval_hours == 1
assert cfg.claude.model == "claude-sonnet-4-6"
assert "rk3588" in cfg.devices
diff --git a/tests/test_env_collector.py b/tests/test_env_collector.py
index f89fb71..1b27169 100644
--- a/tests/test_env_collector.py
+++ b/tests/test_env_collector.py
@@ -10,14 +10,14 @@ from nmfs_agents.tools.project_memory import ProjectMemory
def test_collect_local_env_vars(tmp_path):
"""collect_local 应收集含 MODEL/RKNN/ONNX 关键词的环境变量。"""
env = {
- "RKNN_MODEL_PATH": "/data/rockchip/models",
+ "RKNN_MODEL_PATH": "/data/company/models",
"HOME": "/home/pi",
"ONNX_WEIGHT_DIR": "/data/weights",
}
with patch.dict(os.environ, env, clear=True):
col = EnvCollector()
facts = col.collect_local(scan_dirs=[])
- assert facts.get("local.envvar.RKNN_MODEL_PATH") == "/data/rockchip/models"
+ assert facts.get("local.envvar.RKNN_MODEL_PATH") == "/data/company/models"
assert facts.get("local.envvar.ONNX_WEIGHT_DIR") == "/data/weights"
assert "local.envvar.HOME" not in facts