resumeSession method

  1. @override
Future<AgentSession> resumeSession(
  1. AgentSessionResumeOptions options
)
override

Implementation

@override
Future<AgentSession> resumeSession(
  semantic.AgentSessionResumeOptions options,
) async {
  _requireOpen();
  _adapter.validateSessionOptions(
    semantic.AgentSessionOptions(
      cwd: options.cwd,
      additionalDirectories: options.additionalDirectories,
      mcpServers: options.mcpServers,
      metadata: options.metadata,
    ),
    capabilities,
  );
  final servers = _adapter.mcpServers(options.mcpServers);
  List<wire.SessionConfigOption>? configOptions;
  try {
    switch (options.replay) {
      case semantic.AgentSessionReplay.none:
        if (!capabilities.resumeSession) {
          throw const AgentCapabilityException(
            'The Agent did not advertise session resume.',
          );
        }
        final response = await _connection.resumeSession(
          wire.ResumeSessionRequest(
            sessionId: wire.SessionId(options.sessionId.value),
            cwd: options.cwd,
            additionalDirectories: options.additionalDirectories.isEmpty
                ? null
                : options.additionalDirectories,
            mcpServers: servers,
            meta: options.metadata.isEmpty ? null : options.metadata,
          ),
        );
        configOptions = response.configOptions;
      case semantic.AgentSessionReplay.fromStart:
        if (!capabilities.loadSession) {
          throw const AgentCapabilityException(
            'The Agent did not advertise replay-from-start session loading.',
          );
        }
        final response = await _connection.loadSession(
          wire.LoadSessionRequest(
            sessionId: wire.SessionId(options.sessionId.value),
            cwd: options.cwd,
            additionalDirectories: options.additionalDirectories.isEmpty
                ? null
                : options.additionalDirectories,
            mcpServers: servers,
            meta: options.metadata.isEmpty ? null : options.metadata,
          ),
        );
        configOptions = response.configOptions;
    }
  } catch (error, stackTrace) {
    throwWrappedAcpConnection(error, stackTrace);
  }
  return _registerSession(
    id: options.sessionId.value,
    configOptions: configOptions,
  );
}