# Hermes vs Anthropic DIRECT — idle turn 5 (run ~6.5 min after Phase A via scheduler).
import json, os, re, sys

KEY = os.environ['ANTHROPIC_API_KEY']  # [sanitized for publication: originally read from a local .env file]
os.environ['ANTHROPIC_API_KEY'] = KEY
os.environ['ANTHROPIC_TOKEN'] = KEY  # priority #1 — beats Claude Code creds auto-discovery
from run_agent import AIAgent

LOG = 'anth-proxy-log.jsonl'
state = json.load(open('hermes-anth-state.json'))

def proxy_lines():
    raw = open(LOG, encoding='utf-8').read().strip()
    return raw.split('\n') if raw else []

def filler(t):
    return ''.join(f"row {t}-{i} a={(i*7919)%104729} b={(i*104729)%7919} c={i%13}; " for i in range(260))

agent = AIAgent(base_url='http://127.0.0.1:18081', api_key=KEY,
                model='claude-sonnet-4-5-20250929', provider='anthropic')

n0 = len(proxy_lines())
user_msg = f"TURN 5 AFTER IDLE: Reply with exactly OK5. Ignore: {filler(5)}"
agent.run_conversation(user_msg, conversation_history=list(state['history']))
lines = proxy_lines()
if len(lines) <= n0:
    print('FATAL: no new proxy line — INVALID.'); sys.exit(2)
last = json.loads(lines[-1])
u = last.get('usage') or {}
row = {'label': 'turn5-after-idle', 'msgs': last.get('nMessages'),
       'markers': [m.get('ttl') for m in (last.get('markers') or [])],
       'input_tokens': u.get('input_tokens'),
       'cache_read': u.get('cache_read_input_tokens'),
       'cache_write': u.get('cache_creation_input_tokens'),
       'write_5m': (u.get('cache_creation') or {}).get('ephemeral_5m_input_tokens'),
       'write_1h': (u.get('cache_creation') or {}).get('ephemeral_1h_input_tokens'),
       'ts': last.get('ts')}
state['turns'].append(row)
json.dump({'harness': 'hermes-agent 0.18.0 (real) — Anthropic DIRECT via API key',
           'model': 'claude-sonnet-4-5-20250929', 'turns': state['turns']},
          open('results-hermes-anthropic-direct.json', 'w'), indent=1)
print(json.dumps(row))
print('HERMES ANTHROPIC-DIRECT COMPLETE')
