#!/usr/bin/env python3
import os,sys,subprocess,threading,json,time,pathlib
if (pathlib.Path.cwd()/'.proof-isolated-user').exists():
 os.environ['CLAUDE_CONFIG_DIR']=str(pathlib.Path(__file__).parent/(pathlib.Path.cwd().parent.name+('-'+(pathlib.Path.cwd()/'.proof-isolated-user').read_text().strip() if (pathlib.Path.cwd()/'.proof-isolated-user').read_text().strip() else '')+'-claude-config'))
if '--output-format' not in sys.argv: os.execv(os.environ['PROOF_CLAUDE_BIN'],['claude',*sys.argv[1:]])
logdir=pathlib.Path(os.environ['PROOF_PROTOCOL_DIR']);logdir.mkdir(parents=True,exist_ok=True)
p=subprocess.Popen([os.environ['PROOF_CLAUDE_BIN'],*sys.argv[1:]],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=None)
f=open(logdir/f'{p.pid}.jsonl','a',buffering=1)
def copy(src,dst,direction):
 for line in iter(src.readline,b''):
  try:
   d=json.loads(line)
   if d.get('type') in ['control_request','control_response']:
    f.write(json.dumps({'direction':direction,'message':d})+'\n')
  except Exception: pass
  try: dst.write(line);dst.flush()
  except BrokenPipeError:break
threading.Thread(target=copy,args=(sys.stdin.buffer,p.stdin,'to-cli'),daemon=True).start()
copy(p.stdout,sys.stdout.buffer,'from-cli');sys.exit(p.wait())
