startTool method

Future<void> startTool(
  1. String toolId, {
  2. required void onData(
    1. CommandResultDto commandOutput
    ),
  3. required void onError(
    1. CommandResultDto commandOutput
    ),
  4. void onStreamError(
    1. Object error,
    2. StackTrace stackTrace
    )?,
  5. int timeoutSeconds = -1,
})

POST /tools/{toolId}/start

Implementation

Future<void> startTool(
  String toolId, {
  required void Function(CommandResultDto commandOutput) onData,
  required void Function(CommandResultDto commandError) onError,
  void Function(Object error, StackTrace stackTrace)? onStreamError,
  int timeoutSeconds = -1,
}) async {
  try {
    Map<String, dynamic>? queryParameters;
    if (timeoutSeconds >= 0) {
      queryParameters = {'timeout': '$timeoutSeconds'};
    }
    Stream<String> sseStream = await toolSse.request(
      '/${toolId}/start',
      queryParameters: queryParameters,
    );
    void Function(String event, Map<String, dynamic> data) onEvent =
        (String event, Map<String, dynamic> data) {
          if (event == EventType.DATA) {
            onData(CommandResultDto.fromJson(data));
          } else if (event == EventType.DONE) {
            onError(CommandResultDto.fromJson(data));
          }
        };
    sseStream.listen(
      (data) => SseClient.parse(data, onEvent),
      onError: (error, stackTrace) {
        onStreamError?.call(error, stackTrace);
      },
      cancelOnError: true,
    );
  } catch (error, stackTrace) {
    if (onStreamError != null) {
      onStreamError(error, stackTrace);
      return;
    }
    rethrow;
  }
}