AIOCJ: A choreographic framework for safe adaptive distributed applications