9509b80d8bab6310cd567ce28fb229a44b368dec
- 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.
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查看完整变更
Languages
Python
83.7%
TeX
6.5%
HTML
6.4%
BibTeX Style
2.3%
Shell
0.9%
Other
0.2%