Class: Xeno::DevUiController

Inherits:
ApplicationController show all
Defined in:
app/controllers/xeno/dev_ui_controller.rb

Overview

The mounted dev chat UI: chat with the agent, watch the event stream live (over xeno's own SSE endpoint), and approve/deny/answer parked work. Development only.

Instance Method Summary collapse

Instance Method Details

#compactObject



41
42
43
44
45
46
47
# File 'app/controllers/xeno/dev_ui_controller.rb', line 41

def compact
  session_record = Session.find(params[:id])
  unless session_record.turns.where(kind: "compaction", status: %w[pending running]).exists?
    session_record.stage_compaction_turn!(reason: "manual").enqueue!
  end
  redirect_to dev_session_path(session_record)
end

#createObject



12
13
14
15
16
17
18
19
# File 'app/controllers/xeno/dev_ui_controller.rb', line 12

def create
  session_record = Session.start!(
    message: params.require(:message),
    channel: "dev",
    principal: { "user" => "dev-ui" }
  )
  redirect_to dev_session_path(session_record)
end

#indexObject



8
9
10
# File 'app/controllers/xeno/dev_ui_controller.rb', line 8

def index
  @sessions = Session.order(id: :desc).limit(50)
end

#inputObject



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'app/controllers/xeno/dev_ui_controller.rb', line 49

def input
  session_record = Session.find(params[:id])
  action = Action.joins(:turn)
                 .where(xeno_turns: { session_id: session_record.id })
                 .find(params.require(:action_id))

  principal = { "user" => "dev-ui" }
  case params[:decision]
  when "approve" then Inputs.approve!(action, principal: principal)
  when "deny" then Inputs.deny!(action, reason: params[:reason], principal: principal)
  else Inputs.answer!(action, params.require(:answer), principal: principal)
  end

  redirect_to dev_session_path(session_record)
end

#messageObject



30
31
32
33
34
35
36
37
38
39
# File 'app/controllers/xeno/dev_ui_controller.rb', line 30

def message
  session_record = Session.find(params[:id])
  content = params.require(:message)
  if ActiveModel::Type::Boolean.new.cast(params[:steer])
    session_record.steer!(content)
  else
    session_record.receive_message!(content)
  end
  redirect_to dev_session_path(session_record)
end

#showObject



21
22
23
24
25
26
27
28
# File 'app/controllers/xeno/dev_ui_controller.rb', line 21

def show
  @session = Session.find(params[:id])
  @messages = @session.chat.messages_association.order(:id)
  @pending_actions = Action.joins(:turn)
                           .where(xeno_turns: { session_id: @session.id }, status: "pending_approval")
                           .order(:id)
  @events = @session.events.order(:index)
end