hmo 9509b80d8b feat(xmpp_monitor): dynamic key switching + coalesce auto-heal
- xmpp_logger.py:
  - Add switch_key(key_id): switch Hermes model.provider via sed + systemctl restart
  - Add current_provider() reading model: block correctly (not just first '  provider:' line)
  - Add KEY_TO_PROVIDER mapping (AgentsMeeting key_id -> Hermes provider name)
  - Add RESTART_COOLDOWN_FILE/SEC = 180s to prevent restart loops
  - auto_heal(): detect HTTP 429 / Weekly usage limit -> call best_key() -> switch_key()
  - auto_heal(): detect timeout/error -> async systemctl restart (Popen, not blocking)
  - _verify_llm(): bump timeout 25s -> 90s (cold-start gateway takes 20-40s)
  - health(): urlopen timeout 8s -> 90s (match verify window)
  - Use sudo NOPASSWD (hmo ALL=(ALL) NOPASSWD: ALL already configured)

- agents_health_check.py:
  - Replace inline pkill+Popen restart logic (caused multiple instances) with systemctl
  - Add RESTART_COOLDOWN_FILE state to skip restart within 3 min of last
  - Call xmpp_logger.auto_heal() at end of every cron cycle
  - Both inline restart and auto_heal restarts share cooldown file

- scripts/key_status.py: Reports weekly/monthly/rolling status of all 6 OCG keys
- scripts/test_llm.py: 90s timeout test (was 15s, gateway cold-start >= 30s)
- scripts/test_production.py: smoke test on /home/hmo/MoFin/ (hardlinked to web-dashboard)

Fixes:
- Old assumption 'Cloudflare blocks Python User-Agent' was WRONG.
  True cause was HTTP 429 Weekly usage limit on key5 (12hr reset window).
  Hermes silently ignored providers.X.headers config keys; only model.default_headers works.
  Config already has model.default_headers: User-Agent: curl/8.5.0 (defense in depth).
- Multiple gateway instances were caused by 3 competing systemd units
  (hermes-gateway@.service template + hermes-gateway-zhiwei.service named).
  Masked the template unit @position-analyst and @zhiwei so only the named one wins.
2026-07-19 20:12:47 +08:00
2026-06-20 12:04:21 +08:00
2026-06-20 12:04:21 +08:00
2026-06-20 12:04:21 +08:00
2026-06-20 12:04:21 +08:00
2026-06-25 19:58:00 +08:00
2026-06-20 12:04:21 +08:00
2026-06-20 12:43:24 +08:00
2026-06-20 12:04:21 +08:00
2026-06-20 12:04:21 +08:00

MoFin 文档中心

文档驱动开发。每次代码变更必须同步更新对应文档。


阅读指引

🚀 新手入门(按顺序读)

# 文档 内容 时间
1 SYSTEM_ARCHITECTURE.md 系统总览:架构图、数据流、模块职责 10 min
2 portfolio-data-model.md 核心数据模型:表结构、币种规则、常见错误 10 min
3 DEVELOPMENT_STANDARDS.md 开发规范:代码结构、DB 规范、Prompt 规范、开发流程 15 min
4 CHANGELOG.md 变更日志:所有改动的完整记录 5 min

🔧 日常开发

文档 何时查阅
DEVELOPMENT_STANDARDS.md 每次写代码前
TEST_PLAN.md 每次改完代码后跑测试
CHANGELOG.md 改完后追加变更记录

📊 运维参考

文档 内容
cron-catalog.md Cron 任务清单(知微维护)
decisions-db-migration.md JSON→DB 迁移记录( 已完成)

📦 历史文档(archive/

旧的设计文档、需求文档、分析报告。仅供参考,不代表当前系统状态。


文档规范

  • 每个 .md 文件顶部标注版本和日期
  • 过时内容追加 > **已废弃** — 见 XXX 替代
  • 不直接删除旧文档,移到 archive/ 保留
  • 交叉引用使用相对路径 [xxx](xxx.md)

当前系统状态

  • 数据:纯 SQLite/home/hmo/web-dashboard/data/mofin.db
  • 币种:港股存 HKD,A 股存 CNY,汇总时转换
  • JSON:已全部移除,无残留
  • 测试scripts/run_all_tests.py — 33/33 通过
  • 最新CHANGELOG.md 查看完整变更
S
Description
No description provided
Readme
187 MiB
Languages
Python 83.7%
TeX 6.5%
HTML 6.4%
BibTeX Style 2.3%
Shell 0.9%
Other 0.2%