import json, pathlib, sys
# Synthetic ACP transcript for the real dev replay provider. No clocks or UI logic are mocked.
root=pathlib.Path(sys.argv[1])
for scenario,folder in [('question','acp_elicitation'),('approval','tool_call_read_only_on_request')]:
    rows=[]
    def emit(kind,method,params=None,result=None,delay=None):
        f={'kind':kind,'method':method}
        if params is not None:f['params']=params
        if result is not None:f['result']=result
        row={'type':'emit_inbound','frame':f}
        if delay is not None:row['afterMs']=delay
        rows.append(row)
    def update(u,delay=2000):emit('notification','session/update',{'sessionId':'synthetic','update':u},delay=delay)
    rows.append({'type':'expect_outbound','frame':{'kind':'request','method':'session/prompt'}})
    update({'sessionUpdate':'tool_call','toolCallId':'work','kind':'execute','title':'Prepare synthetic report','status':'in_progress','rawInput':{'command':'generate-report --synthetic'}})
    for i in range(2):update({'sessionUpdate':'tool_call_update','toolCallId':'work','status':'in_progress'})
    if scenario=='question':
        emit('request','elicitation/create',{'sessionId':'synthetic','mode':'form','message':'Choose the report format.','requestedSchema':{'type':'object','properties':{'format':{'type':'string','title':'Report format','enum':['Summary','Detailed']}},'required':['format']}},delay=250)
    else:
        emit('request','session/request_permission',{'sessionId':'synthetic','toolCall':{'toolCallId':'work','kind':'execute','title':'Generate synthetic report','status':'in_progress','rawInput':{'command':'generate-report --synthetic'}},'options':[{'optionId':'allow-once','name':'Allow once','kind':'allow_once'},{'optionId':'reject-once','name':'Reject','kind':'reject_once'}]},delay=250)
    # Forty seconds of real post-answer work makes the resumed live timer visible.
    for i in range(20):update({'sessionUpdate':'tool_call_update','toolCallId':'work','status':'in_progress'})
    update({'sessionUpdate':'tool_call_update','toolCallId':'work','status':'completed','rawOutput':{'exitCode':0,'stdout':'Synthetic report ready.'}},250)
    update({'sessionUpdate':'agent_message_chunk','content':{'type':'text','text':'The synthetic report is complete.'}},250)
    emit('response','session/prompt',result={'stopReason':'end_turn'})
    (root/'apps/server/src/orchestration-v2/testkit/fixtures'/folder/'registry_transcript.ndjson').write_text('\n'.join(map(json.dumps,rows))+'\n')
