
swagger: "2.0"

info:
  version: "1.0.0"
  title: "Chum To JSON"
  description: "A pluggable REST API that reads Chum messages into JSON. Initially targetted at Argus."
  contact:
    name: "Infra"
    email: "infrateam@zoox.com"
    url: "https://git.zooxlabs.com/zooxco/driving/tree/master/argus/chum_to_json_service"

basePath: "/api/v1"

consumes:
  - "application/json"
produces:
  - "application/json"

x-DefaultErrorResponses: &DEFAULT_ERROR_RESPONSES
  "400":
    description: "Client error."
    schema:
      $ref: "#/definitions/Error"
  "404":
    description: "Could not find a resource requested by the client."
    schema:
      $ref: "#/definitions/Error"
  "500":
    description: "Server error."
    schema:
      $ref: "#/definitions/Error"

paths:
  /plugin/AgentCommsSystemStatePlugin:
    get:
      description: "Extract debug information about the state of the Agent Comms system"
      operationId: "agentCommsSystemStatePlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/AgentCommsSystemStatePluginResults"

  /plugin/AgentCommsDebugPlugin:
    get:
      description: "Extract debug information about the Agent Comms system"
      operationId: "agentCommsDebugPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/AgentCommsDebugPluginResults"

  /plugin/AgentCommsEventTriggeredPlugin:
    get:
      description: "Extract debug information when a specific agent comm event occurs"
      operationId: "agentCommsEventTriggeredPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/AgentCommsEventTriggeredPluginResults"

  /plugin/CasPcpCorridorsPlugin:
    get:
      description: "Extract CAS smoothCloud and corridors as JSON."
      operationId: "casPcpCorridorsPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/CasPcpCorridorsPluginResults"

  /plugin/ChumTopicPlugin:
    get:
      description: "Get a list of chum topics for a given URI."
      operationId: "chumTopicPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/ChumTopicPluginResults"
  /plugin/ChumQueryPlugin:
    get:
      description: "Get proto messages published to a topic."
      operationId: "chumQueryPlugin"
      produces:
        - application/octet-stream
      parameters:
        - $ref: "#/parameters/ChumUriWithTopic"
        - $ref: "#/parameters/Limit"
        - $ref: "#/parameters/Whitelist"
        - $ref: "#/parameters/EnumsAsStrings"
        - $ref: "#/parameters/JavaStyleNames"
        - $ref: "#/parameters/SingleRepeat"
        # NOTE: This is where custom plugin args might be declared.
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved encoded in BOB."
            schema:
              $ref: "#/definitions/BobResult"
  /plugin/DebugVisualizationPlugin:
    get:
      description: "Extract JSON from Swopdash Debug Visualizations."
      operationId: "debugVisualizationPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/DebugVisualizationPluginResults"
  /plugin/DeepTrackingNetworkOutputPlugin:
    get:
      description: "Extract Deep Tracking Network output in a JSON format"
      operationId: "deepTrackingNetworkOutputPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - in: "query"
          name: "includeDebugInfo"
          type: "boolean"
        - in: "query"
          name: "dtnObservationIdFilter"
          type: "integer"
          format: "int64"
        - in: "query"
          name: "showUnrefinedBox"
          type: "boolean"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/DTNOutputPluginResults"
  /plugin/DiagnosticsPlugin:
    get:
      description: "Extract JSON diagnostic information from DiagnosticArray."
      operationId: "diagnosticsPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "includeValues"
          type: "boolean"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/DiagnosticsPluginResults"

  /plugin/FnOgmPlugin:
    get:
      description: "Get FN-OGM output."
      operationId: "fnOgmPlugin"
      produces:
        - application/octet-stream
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
          description: "The items retrieved encoded in BOB."
          schema:
            $ref: "#/definitions/BobResult"

  /plugin/GeoPlannerPlugin:
    get:
      description: "Extract JSON from Chum geometric planner search expansions."
      operationId: "geoPlannerPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/GeoPlannerPluginResults"
  /plugin/LidarObjectSegmentationPlugin:
    get:
      description: "Extract Flatbuffer lidar object segmentation."
      operationId: "lidarObjectSegmentationPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      produces:
        - application/octet-stream
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
          description: "The items retrieved in Flatbuffer format."
          schema:
            $ref: "#/definitions/FlatbufferResult"
  /plugin/LidarPointCloudPlugin:
    get:
      description: "Extract JSON lidar point clouds from OfflineSpinLoader."
      operationId: "lidarPointCloudPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        - $ref: "#/parameters/RequestIntensity"
      produces:
        - application/octet-stream
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved in Flatbuffer format."
            schema:
              $ref: "#/definitions/FlatbufferResult"
  /plugin/LidarBlobPlugin:
    get:
      description: "Extract JSON lidar blobs"
      operationId: "lidarBlobPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        - in: "query"
          name: "includeDebugInfo"
          type: "boolean"
        - in: "query"
          name: "blobIdFilter"
          type: "integer"
          format: "int64"
        - in: "query"
          name: "lidarBlobBoxVariant"
          type: "string"
          enum: [selected, default, refiner-full, refiner-tight, vision-yaw, road-yaw, tds, tds-detection]
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/LidarBlobPluginResults"
  /plugin/PerceptionMetricsPlugin:
    get:
      description: "Extract JSON visual perception metrics."
      operationId: "perceptionMetricsPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/PerceptionMetricsPluginResults"

  /plugin/PerceptionObstaclesPlugin:
    get:
      description: "Extract JSON from Chum perception obstacles."
      operationId: "perceptionObstaclesPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "includeDeleted"
          type: "boolean"
        - in: "query"
          name: "includeObservationAssociation"
          type: "boolean"
        - in: "query"
          name: "includeIgnored"
          type: "boolean"
        - in: "query"
          name: "includeDebugInfo"
          type: "boolean"
        - in: "query"
          name: "simGroundTruth"
          type: "boolean"
        - in: "query"
          name: "trackIdFilter"
          type: "integer"
          format: "int64"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/PerceptionObstaclesPluginResults"
  /plugin/PerceptionProjectionsPlugin:
    get:
      description: "Extract JSON from Chum perception obstacles projections."
      operationId: "perceptionProjectionsPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "cameraId"
          type: "string"
          required: true
          x-example: "camera1"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/PerceptionProjectionsPluginResults"
  /plugin/PlannerDecisionPlugin:
    get:
      description: "Convert Protos To JSON"
      operationId: "plannerDecisionPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - $ref: "#/parameters/ChumTopic"
        - in: "query"
          name: "subPath"
          type: "string"
          required: true
          x-example: "/"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/PlannerDecisionPluginResults"
  /plugin/PlannerTrajectoriesPlugin:
    get:
      description: "Extract JSON from the Planner trajectories."
      operationId: "plannerTrajectoriesPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "trajectoryType"
          type: "string"
          required: true
          enum: [decision, actionReference, teleop, smoother, activePrediction, actionSearchRollouts, allActionReferences, trafficFlow]
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/PlannerTrajectoryPluginResults"
  /plugin/PlannerCorridorsPlugin:
    get:
      description: "Extract JSON from the Planner corridors."
      operationId: "plannerCorridorsPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "corridorType"
          type: "string"
          required: true
          enum: [dynamicOffsets ,staticOffsets, biasedLaneOffsets, zrnCurbOffsets, drivableSurfaceOffsets, clutterOffsets, parkedCarOffsets, kVegetationOffsets, kParkedTwoWheelOffsets, kStoppedPedestrianOffsets, carOffsets, pedestrianOffsets, bikeOffsets, fusedCorridor, occlusionOffsets, laneOffsets, expandedOffsets]
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/PlannerCorridorPluginResults"
  /plugin/PlannerMetricsPedestrianPlugin:
    get:
      description: "Extract JSON from Chum Planner Pedestrian Metrics."
      operationId: "plannerMetricsPedestrianPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/PlannerMetricsPedestrianPluginResults"

  /plugin/PosePlugin:
    get:
      description: "Extract JSON pose information from HeroState."
      operationId: "posePlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/PosePluginResults"
  /plugin/PredictionPlugin:
    get:
      description: "Extract JSON from the Prediction."
      operationId: "predictionPlugin"
      produces:
        - application/octet-stream
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "startTime"
          description: "Start time in seconds since the epoch of this run or chum uri."
          type: "number"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved encoded in BOB."
            schema:
              $ref: "#/definitions/BobResult"
  /plugin/RadarPointCloudPlugin:
    get:
      description: "Extract JSON radar point clouds."
      operationId: "radarPointCloudPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/RadarPointCloudPluginResults"

  /plugin/SafetyNetPlugin:
    get:
      description: "Extract JSON SafetyNet output."
      operationId: "safetyNetPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      produces:
        - application/octet-stream
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
          description: "The items retrieved in Flatbuffer format."
          schema:
            $ref: "#/definitions/FlatbufferResult"

  /plugin/ScaleGroundtruthPlugin:
    get:
      description: "Extract Scale groundtruth data in a JSON format"
      operationId: "scaleGroundtruthPlugin"
      parameters:
        - in: "query"
          name: "chumUri"
          type: "string"
          required: true
          x-example: "chum://20190913T201011-kitt_22@1568409458.52-1568409628.64"
        - $ref: "#/parameters/Limit"
        - in: "query"
          name: "jobId"
          type: "string"
          required: true
          x-example: "20190922T035227:20190913T201011-kitt_22@1568409457.22-1568409473.22"
        - in: "query"
          name: "includeDebugInfo"
          type: "boolean"
        - in: "query"
          name: "annotationIdFilter"
          type: "integer"
          format: "int64"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/ScaleGroundtruthPluginResults"

  /plugin/ZooxGroundTruthPlugin:
    get:
      description: "Extract Zoox's 3D Labeling groundtruth data in a JSON format"
      operationId: "zooxGroundtruthPlugin"
      parameters:
        - in: "query"
          name: "chumUri"
          type: "string"
          required: true
          x-example: "chum://20190913T201011-kitt_22@1568409458.52-1568409628.64"
        - $ref: "#/parameters/Limit"
        - in: "query"
          name: "jobId"
          type: "string"
          required: true
          x-example: "20190913T201011-kitt_22"
        - in: "query"
          name: "taskType"
          type: "string"
          x-example: "full_scene_labeling_test"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/ZooxGroundtruthPluginResults"

  /plugin/SimVideoPlugin:
    get:
      description: "Sim video locations"
      operationId: "simVideoPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/SimVideoPluginResults"

  /plugin/TdsInputPlugin:
    get:
      description: "Extract Flatbuffer lidar TDS input"
      operationId: "tdsInputPlugin"
      produces:
        - application/octet-stream
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        - in: "query"
          name: "inputChannel"
          type: "string"
          enum: [occupancy, mean, covariance, semseg, freespace, raycast, aggregated_occupancy, binary_semseg, mean_intensity]
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved in Flatbuffer format."
            schema:
              $ref: "#/definitions/FlatbufferResult"

  /plugin/TdsLabelsPlugin:
    get:
      description: "Extract Flatbuffer lidar TDS labels"
      operationId: "tdsLabelsPlugin"
      produces:
        - application/octet-stream
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved in Flatbuffer format."
            schema:
              $ref: "#/definitions/FlatbufferResult"

  /plugin/UriParserPlugin:
    get:
      description: "Parse the given Chum URI."
      operationId: "uriParserPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/UriParserPluginResults"
  /plugin/VisionDetectionsPlugin:
    get:
      description: "Vision Detection Results."
      operationId: "VisionDetectionsPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "cameraId"
          type: "integer"
          format: "int32"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/VisionDetectionsPluginResults"

  /plugin/VisionTracksPlugin:
    get:
      description: "Vision Track Results."
      operationId: "visionTracksPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "cameraId"
          type: "integer"
          format: "int32"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/VisionTracksPluginResults"
  /plugin/VisionTrack3DPPlugin:
    get:
      description: "Extract JSON from Chum Vision Track 3DP Obstacles."
      operationId: "visionTrack3DPPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        - in: "query"
          name: "includeDebugInfo"
          type: "boolean"
        - in: "query"
          name: "trackIdFilter"
          type: "number"
          format: "string"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/VisionTrack3DPPluginResults"

  /plugin/ZciTimelinePlugin:
    get:
      description: "Get component timings and zci faults for a single ZCI topic"
      operationId: "zciTimelinePlugin"
      parameters:
        - in: "query"
          name: "chumUri"
          type: "string"
          required: true
          x-example: "chum://20181010T035554-kitt_07@1539143968.00-1539143969.00?t=/ai_monitor/fault_handler/reproducibility,/ai_monitor/fault_handler/zci_faults"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved."
            schema:
              $ref: "#/definitions/ZciTimelinePluginResults"
  /plugin/ZrnMonitorPlugin:
    get:
      description: "Extract ZrnMonitor output."
      operationId: "zrnMonitorPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
      produces:
        - application/octet-stream
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
          description: "The items retrieved in Flatbuffer format."
          schema:
            $ref: "#/definitions/FlatbufferResult"
  /plugin/ZrnPlugin:
    get:
      description: "Get Zrn."
      operationId: "zrnPlugin"
      produces:
        - application/octet-stream
      parameters:
        - in: "query"
          name: "chumUri"
          type: "string"
          required: true
          x-example: "chum://20181010T035554-kitt_07"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved encoded in BOB."
            schema:
              $ref: "#/definitions/BobResult"

  /plugin/ZrnProjectionsPlugin:
    get:
      description: "Project the ZRN into the requested camera frame"
      operationId: "zrnProjectionsPlugin"
      produces:
        - application/octet-stream
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "cameraId"
          type: "string"
          required: true
          x-example: "camera1"
        - in: "query"
          name: "cameraName"
          type: "string"
          required: true
          x-example: "north_wide_left"
        - in: "query"
          name: "runId"
          type: "string"
          required: true
          x-example: "20200312T200534-kitt_01"
        - in: "query"
          name: "roadLines"
          type: "boolean"
          x-example: true
        - in: "query"
          name: "trafficLights"
          type: "boolean"
        - in: "query"
          name: "annotations"
          type: "boolean"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved encoded in BOB."
            schema:
              $ref: "#/definitions/BobResult"
  /plugin/VisualLocalizationPlugin:
    get:
      description: "Projects Visual Localization residuals into camera frames"
      operationId: "visualLocalizationPlugin"
      parameters:
        - $ref: "#/parameters/ChumUri"
        - $ref: "#/parameters/Limit"
        # NOTE: This is where custom plugin args might be declared.
        - in: "query"
          name: "cameraName"
          type: "string"
          required: true
          x-example: "nw_n_wide"
        - in: "query"
          name: "visualMap"
          type: "string"
          required: true
          x-example: "s3://zoox-clams/visual-localization/maps/tests/1-26-21/slac_map.pb"
      responses:
        <<: *DEFAULT_ERROR_RESPONSES
        "200":
            description: "The items retrieved encoded in Json."
            schema:
              $ref: "#/definitions/VisualLocalizationPluginResults"


definitions:
  Error:
    required:
      - "code"
      - "message"
    properties:
      code:
        type: "integer"
        format: "int32"
      message:
        type: "string"

  Attribute:
    required:
      - "type"
      - "label"
      - "score"
    properties:
      type:
        type: "number"
      label:
        type: "number"
      score:
        type: "number"
      distribution:
        $ref: "#/definitions/Distribution"

  Distribution:
    required:
      - "bin"
      - "labels"
      - "probabilities"
    properties:
      bin:
        type: "array"
        items:
          $ref: "#/definitions/Bin"
      labels:
        $ref: "#/definitions/Int32Array"
      probabilities:
        $ref: "#/definitions/DoubleArray"

  Bin:
    required:
     - "label"
     - "probability"
    properties:
      label:
        type: "number"
      probability:
        type: "number"

  HeroMode:
    type: "string"
    enum: [Autonomous, ACC, Fault, Manual, TeleGuided]

  Region:
    required:
      - "x1"
      - "y1"
      - "x2"
      - "y2"
      - "labelId"
      - "attribute"
    properties:
      x1:
        type: "number"
      y1:
        type: "number"
      x2:
        type: "number"
      y2:
        type: "number"
      labelId:
        description: "Class label (See vision/models/models.proto)."
        type: "number"
      attribute:
        type: "array"
        items:
          $ref: "#/definitions/Attribute"

  VisionDetectionResult:
    required:
      - "imageTimestamp"
      - "publishTimestamp"
      - "timestamp"
      - "cameraId"
      - "cameraName"
      - "regions"
    properties:
      imageTimestamp:
        type: "number"
      publishTimestamp:
        type: "number"
      timestamp:
        type: "number"
      cameraId:
        type: "integer"
        format: "int32"
      cameraName:
        type: "string"
      regions:
        description: "Detection regions."
        type: "array"
        items:
          $ref: "#/definitions/Region"

  VisionDetectionsPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/VisionDetectionResult"
      nextStartTime:
        description: "The next startTime the user should request ot continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  VisionTrack:
    required:
      - "id"
      - "region"
      - "label"
      - "labelId"
    properties:
      id:
        type: "number"
      region:
        $ref: "#/definitions/Region"
      label:
        type: "string"
      labelId:
        type: "number"

  VisionTrackResult:
    required:
      - "imageTimestamp"
      - "publishTimestamp"
      - "timestamp"
      - "cameraId"
      - "cameraName"
      - "tracks"
    properties:
      imageTimestamp:
        type: "number"
      publishTimestamp:
        type: "number"
      timestamp:
        type: "number"
      cameraId:
        type: "integer"
        format: "int32"
      cameraName:
        type: "string"
      tracks:
        description: "Detection tracks."
        type: "array"
        items:
          $ref: "#/definitions/VisionTrack"

  VisionTracksPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/VisionTrackResult"
      nextStartTime:
        description: "The next startTime the user should request ot continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  CasCorridors:
    required:
      - casAssociatedRadarsPosition
      - casBeamLineCandidatePoints
      - casBeamLineCandidatePointsColorCode
      - casBeamLines
      - casClosestObjInCorrPolygon
      - casClosestObjPolygon
      - casClosestObstacleClusterPoints
      - casClosestObstacleClusterPointsColorCode
      - casClosestObstacleRbCov
      - casClosestObstacleRbResult
      - casClosestObstacleRbRms
      - casClosestObstacleRelativeVelocity
      - casClosestObstacleTrackingPoint
      - casClosestObstacleLidarEstDir
      - casClosestObstacleUseRbUpdate
      - casClosestObstacleVelocity
      - casClosestObstacleVelocitySource
      - casCorridorRadarsDistToInCorrPoly
      - casCorridorRadarsDistToPoly
      - casCorridorRadarsDistToTraj
      - casCorridorRadarsIdx
      - casCorridorRadarsPosition
      - casCorridorRadarsRcs
      - casCorridorRadarsTimestamp
      - casCorridorRadarsTrackAngle
      - casCorridorRadarsTrackRange
      - casCorridorRadarsTrackRangeRate
      - casCorridors
      - casGroundCandidatePoints
      - casGroundCandidatePointsColorCode
      - casHeroPathPolygon
      - casObstaclesAvgSll
      - casObstaclesAzMax
      - casObstaclesAzMin
      - casObstaclesBeamIdxMax
      - casObstaclesBeamIdxMaxEst
      - casObstaclesBeamIdxMaxRelevant
      - casObstaclesBeamIdxMin
      - casObstaclesBeamIdxMinEst
      - casObstaclesBeamIdxMinRelevant
      - casObstaclesCritSll
      - casObstaclesDistToTrajInAMax
      - casObstaclesDistToTrajInAMin
      - casObstaclesDistToTrajInBMax
      - casObstaclesDistToTrajInBMin
      - casObstaclesDistance
      - casObstaclesDistanceClustered
      - casObstaclesDistanceExtended
      - casObstaclesInCorrPolygonArea
      - casObstaclesInsideCoreCorridorA
      - casObstaclesInsideCoreCorridorB
      - casObstaclesNeedToCheckInCorrAssoc
      - casObstaclesNumOfAssocRadarObs
      - casObstaclesNumOfLidarPts
      - casObstaclesPointPosition
      - casObstaclesPolygonArea
      - casObstaclesRadarInvalid
      - casObstaclesSizeInvalid
      - casObstaclesTimestamp
      - casObstaclesTimestampRadar
      - casObstaclesValidity
      - casObstaclesInDeadzone
      - casObstaclesZFromGndInAMax
      - casObstaclesZFromGndInAMin
      - casObstaclesZHeight
      - casObstaclesZHeightEst
      - casObstaclesZHeightRelevant
      - casObstaclesZMax
      - casObstaclesZMaxEst
      - casObstaclesZMaxRelevant
      - casObstaclesZMin
      - casObstaclesZMinEst
      - casObstaclesZMinRelevant
      - casSmoothCloud
      - casSmoothCloudColorCode
      - casStoppingLine
      - casVertebraeTraj
      - casVertebraeTrajArcLength
      - timestamp
    properties:
      casClosestObjPolygon:
        $ref: "#/definitions/FloatArray"
      casClosestPtClusterPoints:
        $ref: "#/definitions/FloatArray"
      casClosestPtClusterPointsColorCode:
        $ref: "#/definitions/Int32Array"
      casSmoothCloud:
        description: "CAS smooth cloud points geometry"
        $ref: "#/definitions/FloatArray"
      casSmoothCloudColorCode:
        description: "CAS smooth cloud points color code"
        $ref: "#/definitions/Int32Array"
      casCorridorRadarsPosition:
        description: "CAS radar points geometry in lastCorridor"
        $ref: "#/definitions/FloatArray"
      casAssociatedRadarsPosition:
        description: "CAS radar points geometry associated"
        $ref: "#/definitions/FloatArray"
      casClosestObstacleTrackingPoint:
        description: "Closest Obstacle's tracking point"
        $ref: "#/definitions/FloatArray"
      casClosestObstacleLidarEstDir:
        description: "Closest Obstacle's moving direction from lidar"
        $ref: "#/definitions/FloatArray"
      casGroundCandidatePoints:
        description: "CAS ground candidate points"
        $ref: "#/definitions/FloatArray"
      casGroundCandidatePointsColorCode:
        description: "CAS ground candidate points color code"
        $ref: "#/definitions/Int32Array"
      casBeamLineCandidatePoints:
        description: "CAS beam line candidate points"
        $ref: "#/definitions/FloatArray"
      casBeamLineCandidatePointsColorCode:
        description: "CAS beam line candidate points color code"
        $ref: "#/definitions/Int32Array"
      casCorridors:
        description: "CAS corridor points"
        $ref: "#/definitions/FloatArray"
      casHeroPathPolygon:
        description: "Hero path polygon"
        $ref: "#/definitions/FloatArray"
      casVertebraeTraj:
        description: "Hero vertebrae trajectory"
        $ref: "#/definitions/FloatArray"
      casVertebraeTrajArcLength:
        description: "Hero vertebrae trajectory arc lengths"
        $ref: "#/definitions/FloatArray"
      casStoppingLine:
        description: "CAS stopping line"
        $ref: "#/definitions/FloatArray"
      casBeamLines:
        description: "CAS beam lines"
        $ref: "#/definitions/FloatArray"
      casClosestObjInCorrPolygon:
        $ref: "#/definitions/FloatArray"
      casClosestObstacleClusterPointsColorCode:
        $ref: "#/definitions/FloatArray"
      casClosestObstacleRbCov:
        $ref: "#/definitions/FloatArray"
      casClosestObstacleRbResult:
        $ref: "#/definitions/FloatArray"
      casClosestObstacleRbRms:
        $ref: "#/definitions/FloatArray"
      casClosestObstacleRelativeVelocity:
        $ref: "#/definitions/FloatArray"
      casClosestObstacleUseRbUpdate:
        $ref: "#/definitions/FloatArray"
      casClosestObstacleVelocity:
        $ref: "#/definitions/FloatArray"
      casClosestObstacleVelocitySource:
        $ref: "#/definitions/FloatArray"
      casCorridorRadarsDistToInCorrPoly:
        $ref: "#/definitions/FloatArray"
      casCorridorRadarsDistToPoly:
        $ref: "#/definitions/FloatArray"
      casCorridorRadarsDistToTraj:
        $ref: "#/definitions/FloatArray"
      casCorridorRadarsIdx:
        $ref: "#/definitions/FloatArray"
      casCorridorRadarsRcs:
        $ref: "#/definitions/FloatArray"
      casCorridorRadarsTimestamp:
        $ref: "#/definitions/FloatArray"
      casCorridorRadarsTrackAngle:
        $ref: "#/definitions/FloatArray"
      casCorridorRadarsTrackRange:
        $ref: "#/definitions/FloatArray"
      casCorridorRadarsTrackRangeRate:
        $ref: "#/definitions/FloatArray"
      casObstaclesAvgSll:
        $ref: "#/definitions/FloatArray"
      casObstaclesAzMax:
        $ref: "#/definitions/FloatArray"
      casObstaclesAzMin:
        $ref: "#/definitions/FloatArray"
      casObstaclesBeamIdxMax:
        $ref: "#/definitions/FloatArray"
      casObstaclesBeamIdxMaxEst:
        $ref: "#/definitions/FloatArray"
      casObstaclesBeamIdxMaxRelevant:
        $ref: "#/definitions/FloatArray"
      casObstaclesBeamIdxMin:
        $ref: "#/definitions/FloatArray"
      casObstaclesBeamIdxMinEst:
        $ref: "#/definitions/FloatArray"
      casObstaclesBeamIdxMinRelevant:
        $ref: "#/definitions/FloatArray"
      casObstaclesCritSll:
        $ref: "#/definitions/FloatArray"
      casObstaclesDistToTrajInAMax:
        $ref: "#/definitions/FloatArray"
      casObstaclesDistToTrajInAMin:
        $ref: "#/definitions/FloatArray"
      casObstaclesDistToTrajInBMax:
        $ref: "#/definitions/FloatArray"
      casObstaclesDistToTrajInBMin:
        $ref: "#/definitions/FloatArray"
      casObstaclesDistance:
        $ref: "#/definitions/FloatArray"
      casObstaclesDistanceClustered:
        $ref: "#/definitions/FloatArray"
      casObstaclesDistanceExtended:
        $ref: "#/definitions/FloatArray"
      casObstaclesInCorrPolygonArea:
        $ref: "#/definitions/FloatArray"
      casObstaclesInsideCoreCorridorA:
        $ref: "#/definitions/FloatArray"
      casObstaclesInsideCoreCorridorB:
        $ref: "#/definitions/FloatArray"
      casObstaclesNeedToCheckInCorrAssoc:
        $ref: "#/definitions/FloatArray"
      casObstaclesNumOfAssocRadarObs:
        $ref: "#/definitions/FloatArray"
      casObstaclesNumOfLidarPts:
        $ref: "#/definitions/FloatArray"
      casObstaclesPointPosition:
        $ref: "#/definitions/FloatArray"
      casObstaclesPolygonArea:
        $ref: "#/definitions/FloatArray"
      casObstaclesRadarInvalid:
        $ref: "#/definitions/FloatArray"
      casObstaclesSizeInvalid:
        $ref: "#/definitions/FloatArray"
      casObstaclesTimestamp:
        $ref: "#/definitions/FloatArray"
      casObstaclesTimestampRadar:
        $ref: "#/definitions/FloatArray"
      casObstaclesValidity:
        $ref: "#/definitions/FloatArray"
      casObstaclesInDeadzone:
        $ref: "#/definitions/FloatArray"
      casObstaclesZFromGndInAMax:
        $ref: "#/definitions/FloatArray"
      casObstaclesZFromGndInAMin:
        $ref: "#/definitions/FloatArray"
      casObstaclesZHeight:
        $ref: "#/definitions/FloatArray"
      casObstaclesZHeightEst:
        $ref: "#/definitions/FloatArray"
      casObstaclesZHeightRelevant:
        $ref: "#/definitions/FloatArray"
      casObstaclesZMax:
        $ref: "#/definitions/FloatArray"
      casObstaclesZMaxEst:
        $ref: "#/definitions/FloatArray"
      casObstaclesZMaxRelevant:
        $ref: "#/definitions/FloatArray"
      casObstaclesZMin:
        $ref: "#/definitions/FloatArray"
      casObstaclesZMinEst:
        $ref: "#/definitions/FloatArray"
      casObstaclesZMinRelevant:
        $ref: "#/definitions/FloatArray"
      casClosestObstacleClusterPoints:
        $ref: "#/definitions/FloatArray"
      casState:
        description: "CAS state code"
        $ref: "#/definitions/Int32Array"
      timestamp:
        type: "number"

  CasPcpCorridorsPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/CasCorridors"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  GeoPlannerPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/ExpansionTrajectoriesSet"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  ExpansionTrajectoriesSet:
    required:
      - timestamp
      - geometricExpansionEdgeSets
    properties:
      timestamp:
        type: "number"
      geometricExpansionEdgeSets:
        type: "array"
        items:
          $ref: "#/definitions/GeometricExpansionEdgeset"

  GeometricExpansionEdgeset:
    required:
      - expansionIteration
      - geometricExpansionEdges
    properties:
      expansionIteration:
        type: "integer"
      geometricExpansionEdges:
        type: "array"
        items:
          $ref: "#/definitions/CarTrajectory"

  PlannerDecisionPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/PlannerDecisionPluginResult"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  PlannerDecisionPluginResult:
    properties:
      timestamp:
        type: "number"
      result: {}

  PlannerTrajectoryPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/PlannerTrajectory"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  PlannerTrajectory:
    required:
      - timestamp
    properties:
      timestamp:
        type: "number"
      heroTrajectory:
        $ref: "#/definitions/CarTrajectory"
      entityTrajectories:
        type: "array"
        items:
          $ref: "#/definitions/PlannerPrediction"

  PlannerCorridorPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/PlannerCorridor"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  PlannerCorridor:
    properties:
      timestamp:
        type: "number"
      leftX:
        type: "array"
        items:
          type: "number"
      leftY:
        type: "array"
        items:
          type: "number"
      rightX:
        type: "array"
        items:
          type: "number"
      rightY:
        type: "array"
        items:
          type: "number"

  PlannerPrediction:
    required:
      - id
      - trajectory
    properties:
      id:
        type: "integer"
        description: "Entity-id that the car-trajectory belongs to"
      trajectory:
        $ref: "#/definitions/CarTrajectory"

  PathGeneratorDebug:
    properties:
      probabilityMotion:
        type: "number"
      probabilityStationary:
        type: "number"
      probabilityTurning:
        type: "number"
      probabilityStraight:
        type: "number"
      numberOfLinePaths:
        type: "number"
      numberOfArcPaths:
        type: "number"

  CarTrajectory:
    required:
      - "times"
      - "x"
      - "y"
      - "z"
      - "yaw"
      - "vx"
      - "vy"
    properties:
      times:
        $ref: "#/definitions/FloatArray"
      x:
        $ref: "#/definitions/FloatArray"
      y:
        $ref: "#/definitions/FloatArray"
      z:
        $ref: "#/definitions/FloatArray"
      yaw:
        $ref: "#/definitions/FloatArray"
      vx:
        $ref: "#/definitions/FloatArray"
      vy:
        $ref: "#/definitions/FloatArray"

  ChumTopicPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/AllTopics"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  AllTopics:
    type: "array"
    items:
      type: "string"

  UriParserPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved Chum URI payload. Only a single result in this Array"
        type: "array"
        items:
          $ref: "#/definitions/ParsedChumUri"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  ParsedChumUri:
    required:
      - "vehicle"
      - "start"
      - "end"
      - "inputs"
      - "variants"
    properties:
      vehicle:
        type: "string"
      metaId:
        type: "string"
      start:
        type: "number"
        format: "double"
      end:
        type: "number"
        format: "double"
      inputs:
        type: array
        items:
          type: string
      variants:
        type: array
        items:
          type: string

  Color:
    required:
      - "r"
      - "b"
      - "g"
      - "a"
    properties:
      r:
        type: "number"
      b:
        type: "number"
      g:
        type: "number"
      a:
        type: "number"

  Transform:
    required:
      - "translation"
    properties:
      translation:
        $ref: "#/definitions/DoubleArray"
      quaternionRotation:
        $ref: "#/definitions/DoubleArray"
      eulerRotation:
        $ref: "#/definitions/DoubleArray"

  DebugPose:
    required:
      - "frame"
      - "transform"
    properties:
      frame:
        description: "[Utm, LocalUtm, Smooth, BaseLink]"
        type: "integer"
        enum: [0, 1, 2, 3]
      transform:
        $ref: "#/definitions/Transform"

  PointList:
    required:
      - "pose"
      - "color"
      - "pointSize"
      - "xyzPoints"
    properties:
      pose:
        $ref: "#/definitions/DebugPose"
      color:
        $ref: "#/definitions/Color"
      pointSize:
        $ref: "#/definitions/FloatArray"
      xyzPoints:
        $ref: "#/definitions/FloatArray"

  Ellipsoid:
    required:
      - "x"
      - "y"
      - "width"
      - "height"
      - "angle"
      - "color"
    properties:
      x:
        type: "number"
        format: "double"
      y:
        type: "number"
        format: "double"
      width:
        type: "number"
        format: "double"
      height:
        type: "number"
        format: "double"
      angle:
        type: "number"
        format: "double"
      color:
        $ref: "#/definitions/Color"

  LineStrip:
    required:
      - "pose"
      - "color"
      - "lineWidth"
      - "xyzPoints"
    properties:
      pose:
        $ref: "#/definitions/DebugPose"
      color:
        $ref: "#/definitions/Color"
      lineWidth:
        $ref: "#/definitions/FloatArray"
      xyzPoints:
        $ref: "#/definitions/FloatArray"

  TriangleList:
    required:
      - "pose"
      - "color"
      - "xyzPoints"
    properties:
      pose:
        $ref: "#/definitions/DebugPose"
      color:
        $ref: "#/definitions/Color"
      xyzPoints:
        $ref: "#/definitions/FloatArray"

  GeometryList:
    required:
      - "pose"
      - "color"
      - "type"
      - "xyzPoints"
      - "xyzScales"
      - "xyzwRotations"
    properties:
      pose:
        $ref: "#/definitions/DebugPose"
      color:
        $ref: "#/definitions/Color"
      type:
        description: "[Spheres, Cubes, Cylinders]"
        type: "integer"
        enum: [0, 1, 2]
      xyzPoints:
        $ref: "#/definitions/FloatArray"
      xyzScales:
        $ref: "#/definitions/FloatArray"
      xyzwRotations:
        $ref: "#/definitions/FloatArray"

  TextAnchorPoint:
    description: "[UpperLeft, UppperCenter, UpperRight, MiddleLeft, MiddleCenter, MiddleRight, LowerLeft, LowerCenter, LowerRight]"
    type: "integer"
    enum: [0, 1, 2, 3, 4, 5, 6, 7, 8]

  TextScreen:
    required:
      - "screenX"
      - "screenY"
      - "textAnchorPoint"
      - "fontSize"
      - "color"
      - "text"
    properties:
      screenX:
        type: "number"
      screenY:
        type: "number"
      textAnchorPoint:
        $ref: "#/definitions/TextAnchorPoint"
      fontSize:
        type: "number"
      color:
        $ref: "#/definitions/Color"
      text:
        type: "string"

  TextWorld:
    required:
      - "pose"
      - "textAnchorPoint"
      - "behavior"
      - "fontSize"
      - "color"
      - "text"
    properties:
      pose:
        $ref: "#/definitions/DebugPose"
      textAnchorPoint:
        $ref: "#/definitions/TextAnchorPoint"
      behavior:
        description: "[BillboardedFixedSize, BillboardedVariableSize, FixedInWorld]"
        type: "integer"
        enum: [0, 1, 2]
      fontSize:
        type: "number"
      color:
        $ref: "#/definitions/Color"
      text:
        type: "string"

  DebugVisualization:
    required:
      - "id"
      - "timestamp"
      - "groupName"
      - "lifetimeSeconds"
      - "timestampSeconds"
      - "pointLists"
      - "lineStrips"
      - "triangleLists"
      - "geometryLists"
      - "textScreens"
      - "textWorlds"
    description: "The status of a diagnostic."
    properties:
      id:
        type: "string"
      timestamp:
        type: "number"
        format: "double"
      groupName:
        type: "string"
      lifetimeSeconds:
        type: "number"
      timestampSeconds:
        type: "number"
      pointLists:
        type: "array"
        items:
          $ref: "#/definitions/PointList"
      lineStrips:
        type: "array"
        items:
          $ref: "#/definitions/LineStrip"
      triangleLists:
        type: "array"
        items:
          $ref: "#/definitions/TriangleList"
      geometryLists:
        type: "array"
        items:
          $ref: "#/definitions/GeometryList"
      textScreens:
        type: "array"
        items:
          $ref: "#/definitions/TextScreen"
      textWorlds:
        type: "array"
        items:
          $ref: "#/definitions/TextWorld"

  DebugVisualizationSnapshot:
    required:
      - timestamp
      - visualizations
    description: "Batched debug visualizations"
    properties:
      timestamp:
        type: "number"
      visualizations:
        type: "array"
        items:
          $ref: "#/definitions/DebugVisualization"

  DebugVisualizationPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/DebugVisualizationSnapshot"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  DiagnosticStatus:
    required:
      - level
      - name
      - message
    description: "The status of a diagnostic."
    properties:
      level:
        type: "integer"
        format: "int32"
      name:
        description: "The name for this level of hierarchical portion (e.g. Base)"
        type: "string"
      message:
        type: "string"
      values:
        description: "This contains many keys and values, both strings, which indicate diagnostic values."
        type: "object"
      children:
        type: "array"
        items:
          $ref: "#/definitions/DiagnosticStatus"

  DiagnosticSnapshot:
    required:
      - time
      - data
    description: "The status of all diagnostics for a particular point in time."
    properties:
      time:
        type: "number"
        format: "double"
      data:
        $ref: "#/definitions/DiagnosticStatus"

  DiagnosticsPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/DiagnosticSnapshot"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  FlatbufferResult:
    type: string
    format: "binary"
    description: "Flatbuffer: argus/chum_to_json/plugins/data.fbs"

  BobResult:
    type: string
    format: "binary"
    description: "BOB (Binary Object Buffer) encoded object. Use bobjs or bobcpp to decode."

  LidarBlob:
    required:
      - "id"
      - "timestamp"
      - "classId"
      - "boxes"
      - "source"
      - "isMerged"
      - "isAcceptedForTrackCreation"
    properties:
      id:
        type: "integer"
        format: "int32"
      classId:
        type: "integer"
        format: "int32"
      timestamp:
        type: "number"
      boxes:
        type: "array"
        items:
          $ref: "#/definitions/OrientedBoundingBox"
      outsideTightBoxes:
        type: "array"
        items:
          $ref: "#/definitions/OrientedBoundingBox"
      articulatedAgentObb:
        type: "array"
        items:
          $ref: "#/definitions/OrientedBoundingBox"
      source:
        type: "string"
      debugInfo:
        type: "string"
      isMerged:
        type: "boolean"
      isAcceptedForTrackCreation:
        type: "boolean"
      velocity:
        $ref: "#/definitions/Vector3d"

  LidarBlobFrame:
    required:
      - timestamp
      - blobs
    description: "The data required to render one metaspin of Lidar Point Cloud data."
    properties:
      timestamp:
        type: "number"
      blobs:
        type: "array"
        items:
          $ref: "#/definitions/LidarBlob"

  LidarBlobPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results"
        type: "array"
        items:
          $ref: "#/definitions/LidarBlobFrame"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all the results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  DTNObservation:
    properties:
      id:
        type: "integer"
        format: "int64"
      timestamp:
        type: "number"
        format: "float"
      confidence:
        type: "number"
        format: "float"
      box:
        $ref: "#/definitions/OrientedBoundingBox"
      classId:
        type: "integer"
        format: "int32"
      additionalBoxes:
        type: "array"
        items:
          $ref: "#/definitions/OrientedBoundingBox"
      fineGrainedClassification:
        type: "integer"
        format: "int32"
      debugInfo:
        type: "string"
      velocity:
        $ref: "#/definitions/Vector3d"
      velocityValid:
        type: "boolean"

    required:
      - 'id'
      - 'timestamp'
      - 'confidence'
      - 'box'
      - 'classId'

  DTNObservationFrame:
    required:
      - timestamp
      - observations
    type: "object"
    description: "The data required to render one metaspin of DeepTrackingNetwork output."
    properties:
      timestamp:
        type: "number"
      observations:
        type: "array"
        items:
          $ref: "#/definitions/DTNObservation"

  DTNOutputPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results"
        type: "array"
        items:
          $ref: "#/definitions/DTNObservationFrame"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all the results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  RadarPointCloud:
    required:
      - timestamp
      - timestamps
      - points
      - doppler
      - doppler2d
      - rcs0
      - rcs1
      - range
      - az0
      - az1
      - elevation
      - rangeVar
      - dopplerVar
      - snr
      - dopplerInterval
      - isFarScan
      - frameId
      - frameIds
    description: "The data required to render one metaspin of Radar Point Cloud data."
    properties:
      timestamp:
        type: "number"
        format: "double"
      timestamps:
        description: "single radar observation timestamp"
        $ref: "#/definitions/FloatArray"
      points:
        description: "Flattened array for Smooth frame (x,y) in [x1, y1, x2, ...]"
        $ref: "#/definitions/FloatArray"
      doppler:
        description: "range rate from radar"
        $ref: "#/definitions/FloatArray"
      doppler2d:
        description: "Compensated ground doppler velocity in smooth frame [vx1, vy1, vx2, ...]"
        $ref: "#/definitions/FloatArray"
      rcs0:
        description: "first RCS hypothesis from radar"
        $ref: "#/definitions/FloatArray"
      rcs1:
        description: "second RCS hypothesis from radar"
        $ref: "#/definitions/FloatArray"
      range:
        description: "range from radar"
        $ref: "#/definitions/FloatArray"
      az0:
        description: "first azimuth hypothesis from radar"
        $ref: "#/definitions/FloatArray"
      az1:
        description: "second azimuth hypothesis from radar"
        $ref: "#/definitions/FloatArray"
      elevation:
        description: "elevation angle from radar"
        $ref: "#/definitions/FloatArray"
      rangeVar:
        description: "range var from radar"
        $ref: "#/definitions/FloatArray"
      dopplerVar:
        description: "doppler var from radar"
        $ref: "#/definitions/FloatArray"
      snr:
        description: "SNR from radar"
        $ref: "#/definitions/FloatArray"
      dopplerInterval:
        description: "doppler interval from radar"
        $ref: "#/definitions/FloatArray"
      isFarScan:
        description: "indicate if it is a far scan return"
        $ref: "#/definitions/FloatArray"
      frameId:
        description: "radar name per detection"
        type: "array"
        items:
          type: "string"
      frameIds:
        description: "a list of all radar names on this vehicle"
        type: "array"
        items:
          type: "string"

  RadarPointCloudPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results"
        type: "array"
        items:
          $ref: "#/definitions/RadarPointCloud"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all the results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  PlannerMetricsPedestrianPluginResult:
    properties:
      intField:
        type: "integer"
      repeatedStringField:
        type: "array"
        items:
          type: "string"

  PlannerMetricsPedestrianPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          # NOTE: This `$ref` is the only thing you should override to provide a
          #       custom result type.
          $ref: "#/definitions/PlannerMetricsPedestrianPluginResult"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  OrientedBoundingBox:
    required:
      - "center"
      - "extent"
      - "yaw"
    properties:
      center:
        $ref: "#/definitions/Vector3d"
      extent:
        $ref: "#/definitions/Vector3f"
      yaw:
        type: "number"
        format: "double"

  Track:
    required:
      - "id"
      - "classId"
      - "ignored"
      - "modality"
      - "box"
      - "velocity"
    properties:
      id:
        type: "integer"
        format: "int64"
      classId:
        type: "integer"
        format: "int32"
      ignored:
        type: "boolean"
      modality:
        type: "string"
      box:
        $ref: "#/definitions/OrientedBoundingBox"
      extraBoxes:
        type: "array"
        items:
          $ref: "#/definitions/OrientedBoundingBox"
      velocity:
        $ref: "#/definitions/Vector3d"
      associatedLidarObs:
        type: "array"
        items:
          $ref: "#/definitions/OrientedBoundingBox"
      associatedLidarObsCoveredByDTN:
        type: "array"
        items:
          type: "boolean"
      associatedVisionObs:
        type: "array"
        items:
          $ref: "#/definitions/OrientedBoundingBox"
      associatedVisionObsCoveredByDTN:
        type: "array"
        items:
          type: "boolean"
      associatedRadarObs:
        type: "array"
        items:
          $ref: "#/definitions/OrientedBoundingBox"
      associatedRadarObsCoveredByDTN:
        type: "array"
        items:
          type: "boolean"
      associatedDTNObs:
        type: "array"
        items:
          $ref: "#/definitions/OrientedBoundingBox"
      debugInfo:
        type: "string"
      agentDebugInfo:
        type: "string"
        description: "Textual information concerning agent debug info."

  StaticContour:
    required:
      - "vertexX"
      - "vertexY"
    properties:
      vertexX:
        type: "array"
        items:
          type: "number"
      vertexY:
        type: "array"
        items:
          type: "number"

  StaticPoints:
    required:
      - "x"
      - "y"
    properties:
      x:
        type: "array"
        items:
          type: "number"
      y:
        type: "array"
        items:
          type: "number"
      heightOffGround:
        type: "array"
        items:
          type: "number"
      height:
        type: "array"
        items:
          type: "number"
      type:
        type: "array"
        items:
          type: "integer"

  DeepVMAOutput:
    required:
      - "pointInOutProb"
      - "ignorePoint"
      - "inFrustum"
      - "radarPointInOutProb"
      - "radarIgnorePoint"
      - "radarInFrustum"
    properties:
      pointInOutProb:
        type: "array"
        items:
          type: "number"
      ignorePoint:
        type: "array"
        items:
          type: "boolean"
      inFrustum:
        type: "array"
        items:
          type: "boolean"
      radarPointInOutProb:
        type: "array"
        items:
          type: "number"
      radarIgnorePoint:
        type: "array"
        items:
          type: "boolean"
      radarInFrustum:
        type: "array"
        items:
          type: "boolean"

  VisionTrack3DP:
    required:
      - "timestamp"
      - "uniqueId"
      - "trackId"
      - "cameraId"
      - "position"
      - "labelId"
      - "yawRadians"
      - "deepVMABox"
      - "rejectedDeepVMABox"
      - "frustumPoints"
      - "radarFrustumPoints"
      - "pfvBox"
      - "visionMonoBox"
    properties:
      timestamp:
        type: "number"
      uniqueId:
        type: "string"
        description: "trackId-cameraId together uniquely identify a track"
      trackId:
        type: "integer"
        format: "int64"
      cameraId:
        type: "integer"
        format: "int64"
      position:
        $ref: "#/definitions/Vector3d"
      labelId:
        type: "integer"
        format: "int32"
      yawRadians:
        type: "number"
        format: "double"
      deepVMABox:
        $ref: "#/definitions/OrientedBoundingBox"
      rejectedDeepVMABox:
        $ref: "#/definitions/OrientedBoundingBox"
      frustumPoints:
        $ref: "#/definitions/FloatArray"
      radarFrustumPoints:
        $ref: "#/definitions/FloatArray"
      deepVMAOutput:
        $ref: "#/definitions/DeepVMAOutput"
      pfvBox:
        $ref: "#/definitions/OrientedBoundingBox"
      visionMonoBox:
        $ref: "#/definitions/OrientedBoundingBox"
      detectionScore:
        type: "number"
        format: "float"
      fineGrainedClassification:
        type: "integer"
        format: "int32"
      debugInfo:
        type: "string"
      velocity:
        $ref: "#/definitions/Vector3d"


  VisionTrack3DPFrame:
    required:
      - "timestamp"
      - "tracks"
    properties:
      timestamp:
        type: "number"
      tracks:
        type: "array"
        items:
          $ref: "#/definitions/VisionTrack3DP"

  VisionTrack3DPPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/VisionTrack3DPFrame"
      nextStartTime:
        description: "The next startTime the user should request ot continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  PcpTrackFrame:
    required:
      - "timestamp"
      - "timestampFullUpdate"
    properties:
      timestamp:
        type: "number"
      timestampFullUpdate:
        description: "Timestamp for last full update. Currently this is the timestamp of lidar metaspin."
        type: "number"
      tracks:
        type: "array"
        items:
          $ref: "#/definitions/Track"
      staticContours:
        type: "array"
        items:
          $ref: "#/definitions/StaticContour"
      staticPoints:
        $ref: "#/definitions/StaticPoints"
      staticPointWidth:
        type: "number"
        format: "float"

  PerceptionObstaclesPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/PcpTrackFrame"
      nextStartTime:
        description: "The next startTime the user should request ot continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  PerceptionProjectionTrackBox:
    required:
      - "classId"
      - "isDynamic"
      - "modality"
      - "modalityX"
      - "modalityY"
      - "lines"
    properties:
      classId:
        type: "string"
      isDynamic:
        type: "boolean"
      modality:
        type: "string"
      modalityX:
        type: "integer"
      modalityY:
        type: "integer"
      lines:
        type: "array"
        items:
          type: "array"
          description: "Specifically, a 4-element array of [x1, y1, x2, y2]."
          items:
            type: "integer"
          minItems: 4
          maxItems: 4

  PerceptionProjections:
    required:
      - "frameNumber"
      - "imageTimestamp"
      - "trackBoxes"
    properties:
      frameNumber:
        type: "integer"
      imageTimestamp:
        type: "number"
        format: "double"
      trackBoxes:
        type: "array"
        items:
          $ref: "#/definitions/PerceptionProjectionTrackBox"

  PerceptionProjectionsPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/PerceptionProjections"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  LatLngPose:
    required:
      - "time"
      - "lat"
      - "lng"
      - "yaw"
      - "mode"
    properties:
      time:
        type: "number"
        format: "double"
      lat:
        type: "number"
        format: "double"
      lng:
        type: "number"
        format: "double"
      yaw:
        type: "number"
        format: "double"
      mode:
        $ref: "#/definitions/HeroMode"

  PosePluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/LatLngPose"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  ZciTimelinePluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/ZciNode"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  ZciNode:
    required:
      - states
      - faults
    properties:
      states:
        description: "A list of contiguous state sections"
        type: "array"
        items:
          $ref: "#/definitions/ZciNodeState"
      faults:
        description: "A list of sections where faults occured"
        type: "array"
        items:
          $ref: "#/definitions/ZciNodeFaultSection"

  ZciNodeState:
    required:
      - topic
      - id
      - start
      - end
      - state
    properties:
      topic:
        type: "string"
      id:
        type: "string"
      start:
        description: "Timestamp in nanoseconds"
        type: "integer"
        format: "int64"
      end:
        description: "Timestamp in nanoseconds"
        type: "integer"
        format: "int64"
      state:
        type: "string"
        enum:
          - initializing
          - running
          - unrecoverable

  ZciNodeFaultSection:
    required:
      - topic
      - id
      - start
      - end
      - faultSet
    properties:
      topic:
        type: "string"
      id:
        type: "string"
      start:
        description: "Timestamp in nanoseconds"
        type: "integer"
        format: "int64"
      end:
        description: "Timestamp in nanoseconds"
        type: "integer"
        format: "int64"
      faultSet:
        type: "array"
        items:
          $ref: "#/definitions/ZciFault"

  ZciFault:
    required:
      - count
      - timestamp
      - description
    properties:
      count:
        type: "integer"
      timestamp:
        description: "Timestamp in nanoseconds"
        type: "integer"
        format: "int64"
      description:
        type: "string"

  ScaleGroundtruthAnnotation:
    properties:
      id:
        type: "integer"
        format: "int32"
      className:
        type: "string"
      box:
        $ref: "#/definitions/OrientedBoundingBox"
      debugInfo:
        type: "string"
      relevant:
        type: "boolean"
      occludedFraction:
        type: "number"
      featured:
        type: "boolean"
    required:
      - "id"
      - "className"
      - "box"

  ScaleGroundtruthFrame:
    required:
      - timestamp
      - annotations
    properties:
      timestamp:
        type: "number"
      annotations:
        type: "array"
        items:
          $ref: "#/definitions/ScaleGroundtruthAnnotation"

  ScaleGroundtruthPluginResults:
    type: "object"
    description: "The data required to render one metaspin of scale groundtruth annotation."
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/ScaleGroundtruthFrame"
      nextStartTime:
        description: "The next startTime the user should request ot continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  ZooxGroundtruthAnnotation:
    required:
      - "id"
      - "className"
      - "box"
    properties:
      id:
        type: "number"
      cuboid_uuid:
        type: "string"
      className:
        type: "string"
      box:
        $ref: "#/definitions/OrientedBoundingBox"
      original_human_label:
        type: "string"

  ZooxGroundtruthFrame:
    required:
      - timestamp
      - annotations
    properties:
      timestamp:
        type: "number"
      annotations:
        type: "array"
        items:
          $ref: "#/definitions/ZooxGroundtruthAnnotation"

  ZooxGroundtruthPluginResults:
    type: "object"
    description: "The data required to render one metaspin of a Zoox 3D-Labeling groundtruth annotation."
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/ZooxGroundtruthFrame"

  SimVideoLocation:
    required:
      - video
      - timestamps
    properties:
      video:
        description: "Path to the video file."
        type: "string"
      timestamps:
        description: "Path to the timestamps file."
        type: "string"

  SimVideoLocations:
    type: "object"
    description: "The locations of sim videos. Key is the name of the camera, value is a SimVideoLocation object."
    additionalProperties:
      $ref: "#/definitions/SimVideoLocation"

  SimVideoPluginResults:
    type: "object"
    properties:
      data:
        description: "The retrieved results."
        type: "array"
        items:
          $ref: "#/definitions/SimVideoLocations"
      nextStartTime:
        description: "The next startTime the user should request ot continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  PerceptionMetricsFrame:
    required:
      - timestamp
      - rgbaImage
      - singleChannelImage
      - tooltipInfo
      - maskProjection
      - metricsIds
      - frameTransform
    properties:
      timestamp:
        type: "number"
      rgbaImage:
        description: "Base64-encoded RGBA bitmap image representing the current frame."
        type: "string"
      singleChannelImage:
        description: "Base64-encoded single channel bitmap image representing the current
          frame in a single channel, uint8 format suitable for tooltip lookup."
        type: "string"
      tooltipInfo:
        type: "object"
        description: "Textual information required to render tooltips."
      maskProjection:
        type: "object"
        description: "Geometric information to project mask images properly in space."
      metricsIds:
        type: "string"
        description: "Identifier to represent the different mask filters available"
      frameTransform:
        type: "object"
        description: "Transform information to project mask images properly in space."
    description: "The data required to render one frame of visual perception metrics."

  PerceptionMetricsPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The retrieved results"
        type: "array"
        items:
          $ref: "#/definitions/PerceptionMetricsFrame"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all the results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  DeploymentInformation:
    type: "object"
    properties:
      UUID:
        type: "integer"
      configurationID:
        type: "integer"

  RegisteredBehavior:
    type: "object"
    properties:
      behaviorClass:
        type: "string"
      behaviorState:
        type: "string"

  LuxState:
    type: "object"
    properties:
      haloEvent:
        type: "string"
      startTime:
        type: "integer"
        format: "int64"

  VoxState:
    type: "object"
    properties:
      broadcastName:
        type: "string"
      directedName:
        type: "string"
      multichannelName:
        type: "string"
      volumePercent:
        type: "integer"
      startTime:
        type: "integer"
        format: "int64"

  AgentCommsSystemState:
    type: "object"
    properties:
      activeContentClass:
        type: "string"
      deploymentInformation:
        $ref: "#/definitions/DeploymentInformation"
      registeredBehaviors:
        type: array
        items:
          $ref: "#/definitions/RegisteredBehavior"
      northLux:
        $ref: "#/definitions/LuxState"
      southLux:
        $ref: "#/definitions/LuxState"
      northVox:
        $ref: "#/definitions/VoxState"
      southVox:
        $ref: "#/definitions/VoxState"

  AgentCommsSystemStatePluginResults:
    required:
      - "data"
    properties:
      data:
        description: "Provides information about the overall state of the Agent Comms System. What behaviors/hardware are active and config information."
        type: "array"
        items:
          $ref: "#/definitions/AgentCommsSystemState"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  TriggerDebugEntry:
    properties:
      agentType:
        type: "string"
      agentID:
        type: "integer"
      startNS:
        type: "integer"
        format: "int64"
      endNS:
        type: "integer"
        format: "int64"
      jaywalkerReason:
        type: "string"
      crosswalkReason:
        type: "string"


  ExecutorDebugEntry:
    properties:
      modificationReason:
        type: "string"

  GeneratorCrosswalkEntry:
    properties:
      startNS:
        type: "integer"
        format: "int64"
      criteriaMet:
        type: "string"
      happensSoon:
        type: "boolean"
      fullyStops:
        type: "boolean"

  GeneratorLeavingCrosswalkEntry:
    properties:
      startNS:
        type: "integer"
        format: "int64"
      happensSoon:
        type: "boolean"

  GeneratorJaywalkerEntry:
    properties:
      startNS:
        type: "integer"
        format: "int64"
      agentID:
        type: "integer"
        format: "int64"
      criteriaMet:
        type: "boolean"
      happensSoon:
        type: "boolean"
      directionAllowed:
        type: "boolean"
      inDriveline:
        type: "boolean"


  AgentCommsDebugContainer:
    required:
      - timestamp
    properties:
      timestamp:
        type: "number"
      triggerDebugEntries:
        type: array
        items:
          $ref: "#/definitions/TriggerDebugEntry"
      exteriorDebugEntries:
        type: array
        items:
          $ref: "#/definitions/ExecutorDebugEntry"
      generatorCrosswalkEntries:
        type: array
        items:
          $ref: "#/definitions/GeneratorCrosswalkEntry"
      generatorLeavingCrosswalkEntries:
        type: array
        items:
          $ref: "#/definitions/GeneratorLeavingCrosswalkEntry"
      generatorJaywalkerEntries:
        type: array
        items:
          $ref: "#/definitions/GeneratorJaywalkerEntry"

  AgentCommsDebugPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "Provides developer debug information about the reason why certain interactions did/didn't happen."
        type: "array"
        items:
          $ref: "#/definitions/AgentCommsDebugContainer"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  AgentCommsEventTriggeredContainer:
    required:
      - timestamp
    properties:
      timestamp:
        type: "number"
      triggerTimeNS:
        type: "integer"
        format: "int64"
      agentID:
        type: "integer"
        format: "int64"
      voxAngleRad:
        type: "number"
        format: "double"
      voxMultichannelFadeTimeMS:
        type: "integer"
        format: "int64"
      voxDebugRawSoundID:
        type: "integer"
        format: "int64"
      voxDebugPlaybackMode:
        type: "string"
      leftDimVH6AOn:
        type: "boolean"
      leftDimVH6AColor:
        type: "string"
      leftDimVH6AAnimation:
        type: "string"
      rightDimVH6AOn:
        type: "boolean"
      rightDimVH6AColor:
        type: "string"
      rightDimVH6AAnimation:
        type: "string"
      interiorAudioEventName:
        type: "string"
      leftDoorEvent:
        type: "string"
      rightDoorEvent:
        type: "string"
      sideLogoLeftVH6ABrightness:
        type: "string"
      sideLogoRightVH6ABrightness:
        type: "string"
      taskFrontLeftVH6ABrightness:
        type: "string"
      taskFrontRightVH6ABrightness:
        type: "string"
      taskRearLeftVH6ABrightness:
        type: "string"
      taskRearRightVH6ABrightness:
        type: "string"
      elbowFrontVH6ABrightness:
        type: "string"
      elbowRearVH6ABrightness:
        type: "string"
      waterfallFrontVH6ABrightness:
        type: "string"
      waterfallRearVH6ABrightness:
        type: "string"
      celiAnimID:
        type: "integer"
        format: "int64"
      celiRepeat:
        type: "boolean"
      celiCommand:
        type: "string"

  AgentCommsEventTriggeredPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "Provides the event start information sent to the Lux/Vox hardware."
        type: "array"
        items:
          $ref: "#/definitions/AgentCommsEventTriggeredContainer"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  VisualLocalizationPluginResults:
    required:
      - "data"
    properties:
      data:
        description: "The residuals for a single camera, ready to be drawn."
        type: "array"
        items:
          $ref: "#/definitions/VisualLocalizationResiduals"
      nextStartTime:
        description: "The next startTime the user should request to continue iterating over all results. Omission indicates all results have been returned."
        type: "integer"
        format: "int64"

  VisualLocalizationResiduals:
    required:
      - timestamp
      - projectedLandmarks
      - projectedFeatures
    properties:
      timestamp:
        type: "number"
      projectedLandmarks:
        type: "array"
        items:
          $ref: "#/definitions/Ellipsoid"
      projectedFeatures:
        type: "array"
        items:
          $ref: "#/definitions/Ellipsoid"

  Vector3d:
    type: "array"
    items:
      type: "number"
      format: "double"
    minItems: 3
    maxItems: 3

  Vector3f:
    type: "array"
    items:
      type: "number"
      format: "float"
    minItems: 3
    maxItems: 3

  FloatArray:
    type: "array"
    items:
      type: "number"
      format: "float"

  DoubleArray:
    type: "array"
    items:
      type: "number"
      format: "double"

  Int32Array:
    type: "array"
    items:
      type: "integer"
      format: "int32"

parameters:
  ChumUri:
    name: "chumUri"
    type: "string"
    in: "query"
    required: true
    x-example: "chum://20181010T035554-kitt_07@1539143968.00-1539143969.00"

  ChumUriWithTopic:
    name: "chumUri"
    type: "string"
    in: "query"
    required: true
    x-example: "chum://20181010T035554-kitt_07@1539143968.00-1539143969.00?t=/planner/hero_state"

  Limit:
    name: "limit"
    type: "integer"
    format: "int32"
    in: "query"
    x-example: 1

  RequestIntensity:
    name: "requestIntensity"
    type: "string"
    in: "query"
    x-example: "true"

  ChumTopic:
    in: "query"
    name: "chumTopic"
    type: "string"
    required: true
    x-example: "/planner/decision/introspection"

  SingleRepeat:
    name: "singleRepeat"
    type: "string"
    in: "query"
    x-example: "true"

  JavaStyleNames:
    name: "javaStyleNames"
    type: "string"
    in: "query"
    x-example: "true"

  EnumsAsStrings:
    name: "enumsAsStrings"
    type: "string"
    in: "query"
    x-example: "true"

  Whitelist:
    name: "whitelist"
    type: "string"
    in: "query"
    x-example: "fieldA.fieldB,fieldc.2.fieldD"
