Class: SimpleAcp::Server::Context

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_acp/server/context.rb

Overview

Request context passed to agent handlers during execution.

Provides access to input messages, session state, conversation history, and methods for controlling execution flow.

Examples:

Accessing input

server.agent("echo") do |context|
  text = context.input.first.text_content
  Models::Message.agent("You said: #{text}")
end

Using session state

server.agent("counter") do |context|
  count = (context.state || 0) + 1
  context.set_state(count)
  Models::Message.agent("Count: #{count}")
end

Direct Known Subclasses

ResumeContext

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(run:, session:, input:, server:) ⇒ Context

Initialize a new context.

Parameters:



41
42
43
44
45
46
47
# File 'lib/simple_acp/server/context.rb', line 41

def initialize(run:, session:, input:, server:)
  @run = run
  @session = session
  @input = input
  @server = server
  @cancelled = false
end

Instance Attribute Details

#input ⇒ Array<Models::Message> (readonly)

Returns input messages for this run.

Returns:



30
31
32
# File 'lib/simple_acp/server/context.rb', line 30

def input
  @input
end

#run ⇒ Models::Run (readonly)

Returns the current run being executed.

Returns:



24
25
26
# File 'lib/simple_acp/server/context.rb', line 24

def run
  @run
end

#server ⇒ Server::Base (readonly)

Returns reference to the server.

Returns:



33
34
35
# File 'lib/simple_acp/server/context.rb', line 33

def server
  @server
end

#session ⇒ Models::Session? (readonly)

Returns the session (if any).

Returns:



27
28
29
# File 'lib/simple_acp/server/context.rb', line 27

def session
  @session
end

Instance Method Details

#agent_name ⇒ String

Returns the name of the agent being executed.

Returns:

  • (String) —

    the name of the agent being executed



50
51
52
# File 'lib/simple_acp/server/context.rb', line 50

def agent_name
  @run.agent_name
end

#await_message(prompt_message) ⇒ RunYieldAwait

Request additional input from the client, pausing execution.

This puts the run into an "awaiting" state until the client calls resume with the requested input.

Examples:

Multi-turn conversation

server.agent("questioner") do |context|
  Enumerator.new do |yielder|
    result = context.await_message(Models::Message.agent("What is your name?"))
    yielder << result
    name = context.resume_message&.text_content
    yielder << RunYield.new(Models::Message.agent("Hello, #{name}!"))
  end
end

Parameters:

Returns:



118
119
120
121
122
123
124
125
# File 'lib/simple_acp/server/context.rb', line 118

def await_message(prompt_message)
  request = Models::MessageAwaitRequest.new(message: prompt_message)
  @run.await!(request)
  @server.storage.save_run(@run)

  # Return a result that indicates the run is awaiting
  RunYieldAwait.new(request: request)
end

#cancel! ⇒ void

This method returns an undefined value.

Mark the run as cancelled.



74
75
76
# File 'lib/simple_acp/server/context.rb', line 74

def cancel!
  @cancelled = true
end

#cancelled? ⇒ Boolean

Check if the run has been cancelled.

Returns:

  • (Boolean) —

    true if cancelled



67
68
69
# File 'lib/simple_acp/server/context.rb', line 67

def cancelled?
  @cancelled
end

#history ⇒ Array<Models::Message>

Get conversation history from the session.

Returns:



81
82
83
# File 'lib/simple_acp/server/context.rb', line 81

def history
  @session&.history || []
end

#log(message) ⇒ void

This method returns an undefined value.

Log a message for debugging or trajectory tracking.

Parameters:

  • message (String) —

    the message to log



131
132
133
# File 'lib/simple_acp/server/context.rb', line 131

def log(message)
  SimpleAcp.logger&.info("[#{agent_name}] #{message}")
end

#resume_message ⇒ Models::Message?

Get the resume message (only available during resume).

This method returns nil for initial contexts. Override in ResumeContext to return the actual resume message.

Returns:



141
142
143
# File 'lib/simple_acp/server/context.rb', line 141

def resume_message
  nil
end

#run_id ⇒ String

Returns the unique run ID.

Returns:

  • (String) —

    the unique run ID



55
56
57
# File 'lib/simple_acp/server/context.rb', line 55

def run_id
  @run.run_id
end

#session_id ⇒ String?

Returns the session ID if a session is active.

Returns:

  • (String, nil) —

    the session ID if a session is active



60
61
62
# File 'lib/simple_acp/server/context.rb', line 60

def session_id
  @session&.id
end

#set_state(new_state) ⇒ void

This method returns an undefined value.

Update the session state with new data.

Parameters:

  • new_state (Object) —

    the state data to store



96
97
98
99
# File 'lib/simple_acp/server/context.rb', line 96

def set_state(new_state)
  @session&.set_state(new_state)
  @server.storage.save_session(@session) if @session
end

#state ⇒ Object?

Get arbitrary state data from the session.

Returns:

  • (Object, nil) —

    the stored state data



88
89
90
# File 'lib/simple_acp/server/context.rb', line 88

def state
  @session&.state
end