resumeSession method
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,
);
}