import json, os, pathlib, subprocess, sys, time
checkout = pathlib.Path(sys.argv[1]).resolve()
output = pathlib.Path(sys.argv[2]).resolve() / str(time.time_ns())
output.mkdir(parents=True)
home = output / 'home'
(home / 'userdata').mkdir(parents=True)
(home / 'bin').mkdir()
shim = home / 'bin' / 'hostnamectl'
shim.write_text('#!/bin/sh\necho "Nix proof"\n')
shim.chmod(0o755)
providers = ['codex','claudeAgent','cursor','grok','muse','pi','opencode','antigravity','kiro']
settings = {'providerInstances': {p: {'driver':p,'enabled': p == 'claudeAgent'} for p in providers}, 'enableProviderUpdateChecks': True}
settings['providerInstances']['claudeAgent'].update({'config': {'binaryPath': '/nix/proof/bin/claude', 'homePath': str(home/'claude')}, 'environment': [{'name': 'HOME', 'value': str(home/'provider-home'), 'sensitive': False}]})
(home/'provider-home').mkdir()
(home / 'userdata' / 'settings.json').write_text(json.dumps(settings))
env = dict(os.environ)
env['PATH'] = str(home/'bin') + ':/nix/proof/bin:' + env['PATH']
env['T3CODE_DEV_SEED'] = '0'
env['T3CODE_AUTO_BOOTSTRAP_PROJECT_FROM_CWD'] = '0'
env['CLAUDE_CONFIG_DIR'] = str(home/'claude')
log = open(output/'app.log','w')
child = subprocess.Popen(['vp','run','dev','--home-dir',str(home),'--no-seed'], cwd=checkout,env=env,stdout=log,stderr=subprocess.STDOUT,start_new_session=True)
(output/'pid').write_text(str(child.pid))
print(output,flush=True)
try:
    sys.exit(child.wait())
except KeyboardInterrupt:
    os.killpg(child.pid, 15)
    child.wait()
