execute method

Future<AgentResult> execute(
  1. IntentCallInvocationEnvelope envelope, {
  2. IntentCallDrainTrigger trigger = IntentCallDrainTrigger.manual,
})

Implementation

Future<AgentResult> execute(
  final IntentCallInvocationEnvelope envelope, {
  final IntentCallDrainTrigger trigger = IntentCallDrainTrigger.manual,
}) async {
  onEnvelope?.call(envelope);
  _emit(
    IntentCallHostEvent(
      kind: IntentCallHostEventKind.envelope,
      trigger: trigger,
      envelope: envelope,
    ),
  );
  try {
    final result = await bridge.execute(envelope);
    if (!result.ok && result.code == 'invocation_denied') {
      onDenied?.call(envelope, result);
      _emit(
        IntentCallHostEvent(
          kind: IntentCallHostEventKind.denied,
          trigger: trigger,
          envelope: envelope,
          result: result,
        ),
      );
    }
    onResult?.call(envelope, result);
    _emit(
      IntentCallHostEvent(
        kind: IntentCallHostEventKind.result,
        trigger: trigger,
        envelope: envelope,
        result: result,
      ),
    );
    return result;
  } catch (error, stackTrace) {
    onError?.call(envelope, error, stackTrace);
    _emit(
      IntentCallHostEvent(
        kind: IntentCallHostEventKind.error,
        trigger: trigger,
        envelope: envelope,
        error: error,
        stackTrace: stackTrace,
      ),
    );
    rethrow;
  }
}