Class: RubynCode::IDE::Handlers::SessionForkHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/rubyn_code/ide/handlers/session_fork_handler.rb

Overview

Handles the “session/fork” JSON-RPC request.

Loads an existing session, truncates its messages at the given index, and saves the truncated history as a brand-new session. The original session is left untouched.

Instance Method Summary collapse

Constructor Details

#initialize(server) ⇒ SessionForkHandler

Returns a new instance of SessionForkHandler.



14
15
16
# File 'lib/rubyn_code/ide/handlers/session_fork_handler.rb', line 14

def initialize(server)
  @server = server
end

Instance Method Details

#call(params) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rubyn_code/ide/handlers/session_fork_handler.rb', line 18

def call(params)
  session_id = params['sessionId']
  message_index = params['messageIndex']

  return { 'forked' => false, 'error' => 'Missing sessionId' } unless session_id
  return { 'forked' => false, 'error' => 'Missing messageIndex' } unless message_index

  persistence = @server.session_persistence
  return { 'forked' => false, 'error' => 'Session persistence not available' } unless persistence

  data = persistence.load_session(session_id)
  return { 'forked' => false, 'error' => 'Session not found' } unless data

  messages = data[:messages] || []
  truncated = messages[0, message_index.to_i]

  new_session_id = SecureRandom.uuid
  persistence.save_session(
    session_id: new_session_id,
    project_path: data[:project_path] || '',
    messages: truncated,
    title: data[:title] ? "Fork of #{data[:title]}" : nil,
    model: data[:model],
    metadata: { message_count: truncated.size, forked_from: session_id }
  )

  { 'forked' => true, 'newSessionId' => new_session_id }
end