diff --git a/docs/DASHBOARD.md b/docs/DASHBOARD.md index 7f9e073e..a2acbcc9 100644 --- a/docs/DASHBOARD.md +++ b/docs/DASHBOARD.md @@ -8,7 +8,7 @@ ``` MoFin Dashboard -├── Services — 服务状态总览(MoFin API / Dashboard / 知微 Gateway / ejabberd / DB) +├── Services — 服务状态总览(MoFin API+Dashboard / 知微 Gateway / ejabberd / DB,共4项) └── 开发原则 ├── G 规范 — 开发规范 + Spec 文档 └── F 健康 — 系统健康监控(Tier1/Tier2) @@ -50,7 +50,7 @@ MoFin Dashboard "detail": "HTTP 200" } ], - "summary": {"ok": 5, "total": 5} + "summary": {"ok": 4, "total": 4} } ``` @@ -60,14 +60,16 @@ MoFin Dashboard "tasks": [ {"name": "agents-health-check", "status": "cron_ok"}, {"name": "agents-daily-health", "status": "not_deployed"}, - {"name": "dashboard", "status": "running", "detail": "services: 5/5"} + {"name": "dashboard", "status": "running", "detail": "services: 4/4"} ], - "tier1": {"summary": {"ok": 5, "total": 5}, "services": [...]}, + "tier1": {"summary": {"ok": 4, "total": 4}, "services": [...]}, "tier2": {"summary": {"ok": 0, "total": 0}, "services": []}, "generated_at": "2026-07-19 10:00:00" } ``` +> 注:实际服务 4 项(mofin_api / zhiwei_gateway / ejabberd / mofin_db)。Dashboard 服务已并入 mofin_api(:8899 一体)。 + --- ## 前端架构 diff --git a/docs/DEPLOY.md b/docs/DEPLOY.md index 6166c976..0e704bee 100644 --- a/docs/DEPLOY.md +++ b/docs/DEPLOY.md @@ -1,6 +1,6 @@ # MoFin — 部署指南 -> 版本: v1.0 | 部署目标: Linux 192.168.1.246 +> 版本: v2.0 | 部署目标: Linux 192.168.1.246 | 更新: 2026-08-11 --- @@ -8,92 +8,96 @@ | 组件 | 守护方式 | 端口 | 说明 | |------|---------|------|------| -| **server.py** | systemd `mofin-api` | 8899 | 持仓情报 API(已有,不动) | -| **dashboard.py** | systemd `mofin-dashboard` | 8899 | 管理门户(新增) | -| **health_check** | crontab `*/5 * * * *` | — | Tier1 健康检查(新增) | +| **server.py**(API+Dashboard 一体)| systemd `mofin-dashboard` | 8899 | 持仓情报 API + 管理门户(2026-07-19 合并)| +| **hermes gateway**(知微)| systemd `hermes-gateway-zhiwei` | 8643 | 知微 Bot 网关 | +| **hermes gateway**(mohe)| systemd `hermes-gateway@mohe` | 8646 | mohe Bot 网关 | +| **Tier1 健康检查** | crontab `*/5 * * * *` | — | agents_health_check.py | + +> ⚠️ 无独立 `mofin-api` 服务——API 与 Dashboard 合并为 `mofin-dashboard.service`。 --- -## 1. Dashboard 部署 +## 1. 部署流程(正确工作流) -### 1.1 创建 systemd 服务 +> **本地开发 → push Gitea → 246 pull 部署**。不直接在 246 上改代码,否则被 deploy_guard 回滚。 ```bash -sudo tee /etc/systemd/system/mofin-dashboard.service << 'EOF' -[Unit] -Description=MoFin Dashboard -After=network.target +# 1. 本地开发环境(D:\...\projects\MoFin)提交并推送 +git add . && git commit -m '说明' +git push origin master # 推送到 Gitea (git.yoin.fun) -[Service] -Type=simple -User=hmo -WorkingDirectory=/home/hmo/MoFin -Environment=MOFIN_ROOT=/home/hmo/MoFin -ExecStart=/usr/bin/python3 /home/hmo/MoFin/dashboard.py -Restart=always -RestartSec=10 +# 2. 246 部署:从 Gitea 拉取 +ssh hmo@192.168.1.246 "cd ~/MoFin && git pull --rebase" -[Install] -WantedBy=multi-user.target -EOF +# 3. 同步脚本硬链接(如有脚本变更) +ssh hmo@192.168.1.246 "cd ~/MoFin && bash deploy/profile-scripts/sync_profile_scripts.sh" + +# 4. 重启受影响服务 +ssh hmo@192.168.1.246 "sudo systemctl restart mofin-dashboard" + +# 5. 验证 +ssh hmo@192.168.1.246 "curl -s http://127.0.0.1:8899/api/health" ``` -### 1.2 启动 +--- + +## 2. 服务管理 ```bash -sudo systemctl daemon-reload -sudo systemctl enable --now mofin-dashboard +# 状态/重启(API+Dashboard 一体) sudo systemctl status mofin-dashboard -``` +sudo systemctl restart mofin-dashboard -### 1.3 验证 +# 日志(journald) +sudo journalctl -u mofin-dashboard -n 50 -```bash -curl http://127.0.0.1:8899/api/health -curl http://127.0.0.1:8899/api/services | python3 -m json.tool -# 浏览器访问: http://192.168.1.246:8899 +# 知微/amohe 网关 +sudo systemctl restart hermes-gateway-zhiwei +sudo systemctl restart hermes-gateway@mohe ``` --- -## 2. 健康管线部署 +## 3. 健康管线 ```bash -# 添加到 crontab -(crontab -l 2>/dev/null; echo '# MoFin health pipeline'; echo '*/5 * * * * cd /home/hmo/MoFin && /usr/bin/python3 agents_health_check.py >> gateway/logs/health_check_cron.log 2>&1') | crontab - - -# 验证 +# Tier1 已在 crontab(*/5 分钟) crontab -l | grep health + +# 手动运行(无输出 = 全正常) +cd ~/MoFin && python3 agents_health_check.py + +# 最近报告 +cat ~/MoFin/gateway/temp/last_health_check.json | python3 -m json.tool ``` --- -## 3. 防火墙 +## 4. 防火墙 ```bash -sudo ufw status | grep -E '8899|8899' +sudo ufw status | grep 8899 # 如果未开放: # sudo ufw allow 8899/tcp ``` --- -## 4. 部署后验证清单 +## 5. 部署后验证清单 - [ ] `curl http://127.0.0.1:8899/api/health` → `{"status":"ok"}` -- [ ] `curl http://127.0.0.1:8899/api/services` → 返回 5 个服务状态 +- [ ] `curl http://127.0.0.1:8899/api/services` → 返回 4 个服务状态 - [ ] 浏览器打开 `http://192.168.1.246:8899` → Services Tab 显示服务状态 - [ ] Dashboard F 健康 Tab → 定时任务状态显示正常 -- [ ] 点击各模块 ?§ 按钮 → 弹出 spec 帮助内容 - [ ] `python3 agents_health_check.py` → 无输出(全正常) --- -## 5. 故障恢复 +## 6. 故障恢复 | 问题 | 命令 | |------|------| -| Dashboard 挂了 | `ssh hmo@246 'sudo systemctl restart mofin-dashboard'` | +| Dashboard/API 挂了 | `ssh hmo@246 'sudo systemctl restart mofin-dashboard'` | | 健康检查不运行 | `ssh hmo@246 'crontab -l \| grep health'` | -| MoFin API 挂了 | `ssh hmo@246 'sudo systemctl restart mofin-api'` | -| 知微 Gateway 挂了 | `ssh hmo@246 'sudo systemctl restart hermes-gateway@zhiwei'` | +| 知微 Gateway 挂了 | `ssh hmo@246 'sudo systemctl restart hermes-gateway-zhiwei'` | +| deploy_guard 回滚了改动 | 说明改动未提交——先在本地 commit + push,再 246 pull | diff --git a/docs/HEALTH-PIPELINE.md b/docs/HEALTH-PIPELINE.md index 1ece180e..58366377 100644 --- a/docs/HEALTH-PIPELINE.md +++ b/docs/HEALTH-PIPELINE.md @@ -22,7 +22,7 @@ └──────────┘ └──────────┘ │ │ agents_health_check agents_daily_health - │ (规划中) + │ (已部署 8/06) ┌────▼─────┐ │ TODO 文件 │ │ .jsonl │ @@ -51,19 +51,19 @@ --- -## Tier 2: 每日全面检查(规划中) +## Tier 2: 每日全面检查(已部署) -**计划脚本**: `agents_daily_health.py` -**计划调度**: `crontab: 0 8 * * * 1-5`(交易日 8:00) +**脚本**: `agents_daily_health.py`(位于 `/home/hmo/AgentsMeeting/gateway/scripts/`) +**调度**: `crontab: 0 8 * * *`(每日 8:00,2026-08-06 部署) -**计划检查内容**: +**检查内容**: - 在 Tier 1 基础上增加: - 磁盘空间检查(阈值 10G 警告 / 2G 严重) - crontab 存活检查(验证关键定时任务) - MoFin DB 大小和新鲜度检查 - 生成结构化 JSON 报告 -**注意**: MoFin 已有 `system_health_check.py`(每日 9:00)和 `morning_health_check.py`(交易日 8:00,8层48项),Tier2 将与现有检查互补,不重复。 +**注意**: MoFin 已有 `morning_health_check.py`(交易日 8:00,8 类 40 项,历史存 `health_check_log` 表),Tier2 与其互补,不重复。 --- diff --git a/docs/QUICKSTART.md b/docs/QUICKSTART.md index 0a8fa604..609b50f6 100644 --- a/docs/QUICKSTART.md +++ b/docs/QUICKSTART.md @@ -25,20 +25,22 @@ ssh hmo@192.168.1.246 "sudo systemctl status mofin-dashboard" # 重启 ssh hmo@192.168.1.246 "sudo systemctl restart mofin-dashboard" -# 查看日志 -ssh hmo@192.168.1.246 "tail -50 ~/MoFin/gateway/logs/dashboard.log" +# 查看日志(API+Dashboard 一体,日志走 journald) +ssh hmo@192.168.1.246 "sudo journalctl -u mofin-dashboard -n 50" ``` --- ## MoFin API -```bash -# 查看状态 -ssh hmo@192.168.1.246 "sudo systemctl status mofin-api" +> ⚠️ API 与 Dashboard 已合并为 `mofin-dashboard.service`(:8899),无独立 mofin-api 服务。 -# 重启 -ssh hmo@192.168.1.246 "sudo systemctl restart mofin-api" +```bash +# 查看状态(用 mofin-dashboard) +ssh hmo@192.168.1.246 "sudo systemctl status mofin-dashboard" + +# 重启(用 mofin-dashboard) +ssh hmo@192.168.1.246 "sudo systemctl restart mofin-dashboard" # 测试 API curl http://192.168.1.246:8899/api/portfolio @@ -63,14 +65,20 @@ ssh hmo@192.168.1.246 "cat ~/MoFin/gateway/temp/last_health_check.json | python3 ## 部署更新 +> 正确工作流:**本地开发 → push Gitea → 246 pull 部署**(不直接在 246 上改代码,避免 deploy_guard 拦截) + ```bash -# 1. 拉代码 +# 1. 本地开发环境提交并推送(D:\...\projects\MoFin) +git add . && git commit -m '说明' +git push origin master + +# 2. 246 部署:拉取最新代码 ssh hmo@192.168.1.246 "cd ~/MoFin && git pull --rebase" -# 2. 重启受影响的服务 +# 3. 重启受影响的服务 ssh hmo@192.168.1.246 "sudo systemctl restart mofin-dashboard" -# 3. 验证 +# 4. 验证 ssh hmo@192.168.1.246 "curl -s http://127.0.0.1:8899/api/health" ``` @@ -82,5 +90,5 @@ ssh hmo@192.168.1.246 "curl -s http://127.0.0.1:8899/api/health" |------|------| | Dashboard 不响应 | `ssh hmo@246 sudo systemctl restart mofin-dashboard` | | F Tab 定时任务显示"未部署" | `ssh hmo@246 crontab -l \| grep health` 确认 | -| MoFin API 不响应 | `ssh hmo@246 sudo systemctl restart mofin-api` | -| 数据库查询失败 | `ssh hmo@246 'ls -la /home/hmo/web-dashboard/data/mofin.db'` | +| MoFin API 不响应 | `ssh hmo@246 sudo systemctl restart mofin-dashboard`(API+Dashboard 一体)| +| 数据库查询失败 | `ssh hmo@246 'ls -la /home/hmo/MoFin/data/mofin.db'` | diff --git a/docs/README.md b/docs/README.md index 2476b128..e5d64e88 100644 --- a/docs/README.md +++ b/docs/README.md @@ -30,12 +30,14 @@ | 文档 | 内容 | |------|------| | [cron-review-poversold-20260811.md](cron-review-poversold-20260811.md) | **Cron 梳理报告**(对照 p_oversold 部署,停8/保持30/调整8/新增2)| -| [cron-catalog.md](cron-catalog.md) | Cron 任务清单(⚠️ 6/27 版,过时待重建)| | [QUICKSTART.md](QUICKSTART.md) | 快速操作手册 | +| [DEPLOY.md](DEPLOY.md) | 部署指南(本地→Gitea→246 工作流)| | [DASHBOARD.md](DASHBOARD.md) | Dashboard API 参考 | | [HEALTH-PIPELINE.md](HEALTH-PIPELINE.md) | 健康监控管线 | | [doc-audit-20260811.md](doc-audit-20260811.md) | **文档治理核实报告**(15 份文档对照系统实际)| +> ⚠️ cron-catalog.md(6/27 版)已归档至 archive/——当前 cron 清单以 cron-review-poversold-20260811.md 为准。 + ### 📈 策略研究(2026-08 起,小小莫维护) | 文档 | 内容 | diff --git a/docs/SELF_GROWTH_SYSTEM.md b/docs/SELF_GROWTH_SYSTEM.md index 75e37a3f..459a3b3c 100644 --- a/docs/SELF_GROWTH_SYSTEM.md +++ b/docs/SELF_GROWTH_SYSTEM.md @@ -1,7 +1,16 @@ # MoFin 自成长系统设计文档 -> 状态:设计文档 | 最后更新:2026-06-23 | 维护人:知微 -> 当前架构见 [SYSTEM_ARCHITECTURE.md](SYSTEM_ARCHITECTURE.md) | 开发规范见 [DEVELOPMENT_STANDARDS.md](DEVELOPMENT_STANDARDS.md) +> 状态:设计文档(部分调度已变更,见下方"现状更新")| 最后更新:2026-06-23 | 维护人:知微 +> 当前架构见 [DEVELOPMENT_STANDARDS.md](DEVELOPMENT_STANDARDS.md) | 开发规范见 [DEVELOPMENT_STANDARDS.md](DEVELOPMENT_STANDARDS.md) + +## 现状更新(2026-08-11 核实) + +- ✅ **分支自成长/元自成长/硬编码扫描** 仍在 jobs.json 运行 +- ⚠️ **调度变更**:branch_scanner 实际 `15,30,45,00 9-15`(每15分);分支剪枝实际 **每日 21:00**(非周六6:00) +- ❌ **xiaoguo_scanner 已退役**(7/20 归档)——SENSE 层不再有小果扫描 +- ⚠️ **market_watch 已恢复运行**(文档称"暂停被小果替代"已过时) +- ⚠️ **stale_push_wlin 未调度**(现由 per_stock_reassess / watchlist_12d_backfill 承接) +- ❌ **per_stock_reassess 已暂停**(8/10 22:43,由 watchlist_12d_backfill 承接) --- diff --git a/docs/cron-catalog.md b/docs/archive/cron-catalog.md similarity index 100% rename from docs/cron-catalog.md rename to docs/archive/cron-catalog.md diff --git a/docs/system-audit-20260810.md b/docs/archive/system-audit-20260810.md similarity index 100% rename from docs/system-audit-20260810.md rename to docs/archive/system-audit-20260810.md diff --git a/docs/lifecycle-management.md b/docs/lifecycle-management.md index d33495b3..78ac7525 100644 --- a/docs/lifecycle-management.md +++ b/docs/lifecycle-management.md @@ -41,7 +41,8 @@ ## 二、对象一:信号(Signal) ### 定义 -xiaoguo_scanner 或 trend_detector 产出的原始信号,表示一只股票在某方面有异常。 +宏观/背离/行业等数据源产出的原始信号(如 macro_watch / divergence_detector),表示一只股票或市场在某方面有异常。 +> 现状更新(2026-08-11):xiaoguo_scanner 已退役(7/20 归档),信号来源改为 macro_watch / divergence_detector 等。 ### 状态流转 ``` @@ -49,7 +50,7 @@ source写入(signal_news表) │ ▼ ┌──────┐ - │ 未处理 │ ←─ source='xiaoguo' 或 'xiaoguo_risk' 或 'trend' + │ 未处理 │ ←─ source='macro_watch' 或 'divergence_watch' 等 └──┬───┘ │ 知微(盯盘cron)读取并评估 ├──────────────────────────────────────┐ @@ -61,17 +62,17 @@ source写入(signal_news表) ``` ### 处理流程 -1. **写入**:xiaoguo_scanner(每5min) / trend_detector(每25min) → INSERT INTO signal_news -2. **读取**:盯盘cron(每15-25min) → SELECT FROM signal_news WHERE source LIKE 'xiaoguo%' ORDER BY id DESC +1. **写入**:macro_context_collector / divergence_detector → INSERT INTO signal_news +2. **读取**:盯盘cron → SELECT FROM signal_news WHERE processed=0 3. **评估**:五维全面分析(大盘→行业→个股,消息+基本面+技术面) 4. **分流**: - - 采纳 → 加入自选(watchlist) + 生成策略(decisions.json) + - 采纳 → 加入自选(watchlist) + 生成策略(holding_strategies) - 关注 → 加入关注列表(watchlist status=watching) - 忽略 → 不处理 ### 当前缺口 - [x] signal_news 缺 processed 标记 → 已修复(6/22): 加processed列,cron处理完后UPDATE标记 -- [x] xiaoguo_risk 信号已接入(cron prompt处理) +- [x] xiaoguo_risk 信号已接入(cron prompt处理)→ 小果已退役(7/20),此条已失效 ### 修复方案 为 signal_news 表新增 `processed` 字段(0=未处理, 1=已处理),cron处理完后 UPDATE 标记。 diff --git a/docs/morning-health-check.md b/docs/morning-health-check.md index 304ff8b0..6b500739 100644 --- a/docs/morning-health-check.md +++ b/docs/morning-health-check.md @@ -15,7 +15,7 @@ trigger: 交易日 8:00 AM 自动运行 1. **health_checklist.json** — 可动态维护的检查清单(新增功能自动加入) 2. **morning_health_check.py** — 每日8:00开盘前运行,逐项比对 3. **self_discovery()** — 自动发现新增cron任务并追加到检查清单 -4. **历史追踪** — health_check_history.json 保留90天体检记录 +4. **历史追踪** — `health_check_log` 表(SQLite,替代原 health_check_history.json) ## 架构 @@ -24,13 +24,13 @@ morning_health_check.py (no_agent, 8:00 Cron) │ ├── 读 health_checklist.json (检查清单) │ - ├── 分层检查 (8层) + ├── 分层检查 (8类) │ ├── 基础设施 — XMPP/Gateway/Dashboard/API/磁盘 - │ ├── SENSE — price_monitor/xiaoguo/宏观/汇率/板块 + │ ├── SENSE — price_monitor/宏观/汇率/板块 │ ├── RESPOND — 推送cron/价格事件/信号积压 │ ├── ADAPT — 策略重评/策略树/时效性 │ ├── IMPROVE — 知识萃取/硬编码/审计/剪枝/元成长 - │ ├── 数据文件 — 全部关键JSON/DB文件新鲜度 + │ ├── 数据库健康度 — 关键表新鲜度/死锁检查 │ ├── 管道完整性 — cron异常/误暂停/delivery目标/信号桥/cron全局审计 │ └── 元自检 — 昨日体检完成/checklist覆盖/cron调度 │ @@ -47,7 +47,7 @@ morning_health_check.py (no_agent, 8:00 Cron) 位于 `/home/hmo/MoFin/data/health_checklist.json` -累计8类48项检查。项目定期检查:盘中自检每15分钟,每日早检8:00,每周深度审计。 +累计 **8类40项** 检查(2026-08-10 清理小果残留项后:48→40)。项目定期检查:盘中自检每15分钟,每日早检8:00,每周深度审计。 检查清单位于 `/home/hmo/MoFin/data/health_checklist.json` - id/description: 唯一标识和描述 @@ -114,6 +114,6 @@ MoFin 系统体检 | 2026-06-25 周四 | 08:00 ## 历史记录 -保存在 `/home/hmo/MoFin/data/health_check_history.json` +保存在 `health_check_log` 表(mofin.db,替代原 `health_check_history.json`) - 每次运行记录时间戳、各等级计数、耗时 -- 保留最近90条(约3个月) +- 每行一条体检结果,长期保留 diff --git a/docs/portfolio-data-model.md b/docs/portfolio-data-model.md index 726bc624..01cb803d 100644 --- a/docs/portfolio-data-model.md +++ b/docs/portfolio-data-model.md @@ -1,6 +1,7 @@ # MoFin 数据模型 -> 数据已从 JSON 迁移到 SQLite。portfolio.json / decisions.json / watchlist.json 不再使用。 +> 数据已从 JSON 迁移到 SQLite。**decisions.json / watchlist.json 已移除**; +> ⚠️ **portfolio.json 仍在用**(update_data.py 写、stock_profile.py 读,2026-08-11 核实)。 ## 核心表 @@ -58,7 +59,7 @@ price_monitor (cron: */2 9-16) → write_holdings_batch() → holdings 表 (price 更新) → write_portfolio_summary() → portfolio_summary (total_mv/total_assets 重算) -regenerate_all (cron: 手动/定时) +regenerate_strategies.py (cron: 盘前 8:10 premarket_full_review) → batch_fetch_prices() → 从 DB 读价格 → 技术分析 → 止损/止盈/买入区 → write_holding_strategy() → holding_strategies 表