Files
MoFin/scripts/test_multi_profile.py
T
hmo 57377e9dd3 feat(auto_heal): multi-profile key switching + fix two error classes
Error investigation (from restored monitoring) found 2 root causes:

1. 'Blocked: script path resolves outside scripts dir' (5+ cron jobs):
   Jul 17 symlink refactor replaced real scripts with symlinks; the hermes
   cron scheduler's security check (Path.resolve + relative_to) rejects
   symlink escape. ALL no_agent script jobs blocked since Jul 17 23:12.
   FIX: converted 102 symlinks to hardlinks (same inode, resolve() stays
   inside scripts_dir, single-source still works). Permanent structural fix.

2. HTTP 429 on default profile (知识研究/梦境循环/wiki-self-growth/
   evolution-pulse/大脑任务执行): default gateway used ocg-key1 (weekly
   100%). FIX: switched default profile to ocg-key6 + added missing
   provider block. LLM verified working (3.1s).

auto_heal extended to actually cover these automatically next time:
- PROFILES registry: zhiwei (8643, system svc) + default (8642, user svc)
- current_provider/switch_key/_scan_agent_log parameterized by profile
- health() now reports llm_provider_default (agent.log scan)
- auto_heal: per-profile 429 detection -> best_key -> switch_key(profile)
- _ensure_provider_block: injects missing provider credentials from
  zhiwei config (single source of truth) into target config
2026-07-20 01:12:38 +08:00

22 lines
749 B
Python

import ast, sys, json
p = '/home/hmo/MoFin/xmpp_logger.py'
try:
ast.parse(open(p).read())
print('SYNTAX OK')
except SyntaxError as e:
print('SYNTAX ERROR:', e)
sys.exit(1)
sys.path.insert(0, '/home/hmo/MoFin')
import importlib, xmpp_logger
importlib.reload(xmpp_logger)
x = xmpp_logger
import time
print('== current_provider(zhiwei):', x.current_provider('zhiwei'))
print('== current_provider(default):', x.current_provider('default'))
print('== scan zhiwei:', json.dumps(x._scan_agent_log(time.time(), 'zhiwei'), ensure_ascii=False))
print('== scan default:', json.dumps(x._scan_agent_log(time.time(), 'default'), ensure_ascii=False))
print()
print('== auto_heal ==')
print(json.dumps(x.auto_heal(), ensure_ascii=False, indent=2))