import json,pathlib,sys
root=pathlib.Path(sys.argv[1])
def upd(value,delay=250):return dict(type='emit_inbound',afterMs=delay,frame=dict(kind='notification',method='session/update',params=dict(sessionId='fixture',update=value)))
def command(key):return [upd(dict(sessionUpdate='tool_call',toolCallId=key,kind='execute',title='echo work-'+key,status='in_progress',rawInput=dict(command='echo work-'+key))),upd(dict(sessionUpdate='tool_call_update',toolCallId=key,status='completed',content=[dict(type='content',content=dict(type='text',text='work-'+key))]))]
prompt=dict(type='expect_outbound',frame=dict(kind='request',method='session/prompt'))
end=dict(type='emit_inbound',frame=dict(kind='response',method='session/prompt',result=dict(stopReason='end_turn')))
answer=lambda text:upd(dict(sessionUpdate='agent_message_chunk',content=dict(type='text',text=text)))
frames=[prompt,*command('before'),*[upd(dict(sessionUpdate='plan',entries=[]),2000) for _ in range(120)],answer('Uninterrupted.'),end,prompt,*command('after'),answer('Done.'),end]
(root/'apps/server/src/orchestration-v2/testkit/fixtures/multi_turn/registry_transcript.ndjson').write_text('\n'.join(map(json.dumps,frames)))
home=root/'.t3/proof'
(home/'userdata').mkdir(parents=True,exist_ok=True)
(home/'bin').mkdir(exist_ok=True)
for name in ['hostnamectl','scutil']:
 f=home/'bin'/name;f.write_text('#!/bin/sh\necho Scenario\n');f.chmod(0o755)
(home/'userdata/settings.json').write_text(json.dumps(dict(defaultModelSelection=dict(instanceId='devReplay',model='multi-turn'),providerInstances={p:dict(driver=p,enabled=False) for p in ['codex','claudeAgent','cursor','grok','muse','pi','opencode','antigravity']})))
