import asyncio,json,sys
from pathlib import Path
sys.path.insert(0,str(Path.cwd()/'server'))
from device_gateway.control.projects import ProjectRegistry
from device_gateway.control.models import Project,Settings
from device_gateway.control.codex import CodexAdapter
from device_gateway.control.pi import PiAdapter
from device_gateway.integrations.pi import PiSessionRegistry
async def main():
 folder=Path.cwd()/'.cache/native-probe';folder.mkdir(parents=True,exist_ok=True)
 projects=ProjectRegistry(folder/'projects.json')
 if not projects.list():projects.add(Project(id='probe',name='Navigator native probe',path=str(folder)))
 codex=CodexAdapter(projects)
 try:
  models=await codex.list_models();print('codex models',[(m['id'],m['available_efforts']) for m in models[:8]],flush=True)
  created=[]
  result=await codex.create_session(projects.get('probe'),'Reply exactly NAVIGATOR_NATIVE_OK. Do not run any tools.',Settings(model='gpt-5.6-luna',effort='low',permissions='user'),created.append)
  sid=result['session_id'];print('native create + first input',result,flush=True)
  for _ in range(120):
   session=await codex.get_session(sid)
   if session.state in ('DONE','FAILED'):break
   await asyncio.sleep(.5)
  print('native first turn',session.state,flush=True)
  permission=await codex.permissions(sid);print('native permissions',permission,flush=True)
  await codex.call('thread/settings/update',{'threadId':sid,'approvalsReviewer':'auto_review'})
  assert (await codex.permissions(sid))['current']=='auto_review'
  await codex.call('thread/settings/update',{'threadId':sid,'approvalsReviewer':'user'})
  assert (await codex.permissions(sid))['current']=='user'
  print('Codex native permission read/change/readback PASS',flush=True)
 finally:await codex.close()
 pi=PiAdapter(projects,PiSessionRegistry())
 try:
  models=await pi.creation_models(projects.get('probe'));print('pi native models',[(m['id'],m['available_efforts']) for m in models[:6]],flush=True)
 finally:await pi.close()
asyncio.run(main())
