submit method

Future<Message> submit(
  1. String prompt
)

Submit a user message and process the response.

Implementation

Future<Message> submit(String prompt) async {
  if (_status == RemoteSessionStatus.processing) {
    throw StateError('Session is already processing a request');
  }

  _startedAt = DateTime.now();
  _setStatus(RemoteSessionStatus.processing);

  final userMessage = Message.user(prompt);
  _addMessage(userMessage);

  try {
    final response = await _engine.query(
      messages: _messages,
      onPermissionRequest: _handlePermissionRequest,
    );

    _addMessage(response);
    _totalTokens += _estimateTokens(response);
    _setStatus(RemoteSessionStatus.idle);

    _events.add(
      CompletionEvent(
        totalTokens: _totalTokens,
        toolCalls: _toolCalls,
        elapsed: DateTime.now().difference(_startedAt!),
      ),
    );

    return response;
  } catch (e) {
    _setStatus(RemoteSessionStatus.error);
    _events.add(ErrorEvent(e.toString()));
    rethrow;
  }
}