docs: def abort():
      """..."""
      uid_list = list(server_runner.active_execution_responses.keys())
  
      while len(uid_list) > 0:
          uid = uid_list.pop()
  
          response = server_runner.active_execution_responses.get(uid)
          if not response:
              continue
  
          try:
              del server_runner.active_execution_responses[uid]
          except Exception:
              pass
  
          if not response.thread or not response.thread.is_alive():
              continue
  
          # Try to stop the thread gracefully
          response.thread.abort = True
          response.thread.join(2)
  
          try:
              # Force stop the thread explicitly
              if response.thread.is_alive():
                  response.thread.abort_running()
          except Exception:
              pass
  
      project = cd.project.internal_project
  
      if project and project.current_step:
          step = project.current_step
          if step.is_running:
              step.is_running = False
              step.progress = 0
              step.progress_message = None
              step.dumps()
  
          # Make sure this is called prior to printing response information to
          # the console or that will come along for the ride
          redirection.disable(step)
  
      # Make sure no print redirection will survive the abort process regardless
      # of whether an active step was found or not (prevents race conditions)
      redirection.restore_default_configuration()
  
      project_data = project.kernel_serialize() if project else None
  
      return flask.jsonify(
          Response()
          .update(project=project_data)
          .serialize()
      )