forkSession method

Future<String> forkSession(
  1. String sessionId, {
  2. required int fromTurnIndex,
})

Fork a session from a specific point.

Implementation

Future<String> forkSession(
  String sessionId, {
  required int fromTurnIndex,
}) async {
  final entries = await getSessionHistory(sessionId);
  final forked = entries.where((e) => e.turnIndex <= fromTurnIndex).toList();

  final newId = 'fork_${DateTime.now().millisecondsSinceEpoch}';

  // Write forked entries.
  for (final entry in forked) {
    await record(
      sessionId: newId,
      type: entry.type,
      role: entry.role,
      content: entry.content,
      metadata: {
        ...?entry.metadata,
        'forkedFrom': sessionId,
        'forkPoint': fromTurnIndex,
      },
      toolName: entry.toolName,
      toolId: entry.toolId,
      tokenCount: entry.tokenCount,
      cost: entry.cost,
      latency: entry.latency,
      turnIndex: entry.turnIndex,
    );
  }

  return newId;
}