Class: Clacky::Server::HistoryCollector
- Inherits:
-
Object
- Object
- Clacky::Server::HistoryCollector
show all
- Defined in:
- lib/clacky/server/http_server.rb
Overview
Lightweight UI collector used by api_session_messages to capture events emitted by Agent#replay_history without broadcasting over WebSocket. Implements the same show_* interface as WebUIController.
Instance Method Summary
collapse
-
#initialize(session_id, events) ⇒ HistoryCollector
constructor
A new instance of HistoryCollector.
-
#method_missing(name, *args, **kwargs) ⇒ Object
Ignore all other UI methods (progress, errors, etc.) during history replay.
-
#respond_to_missing?(name, include_private = false) ⇒ Boolean
-
#show_assistant_message(content, files:) ⇒ Object
-
#show_token_usage(token_data) ⇒ Object
-
#show_tool_call(name, args) ⇒ Object
-
#show_tool_result(result) ⇒ Object
-
#show_user_message(content, created_at: nil, files: []) ⇒ Object
Constructor Details
#initialize(session_id, events) ⇒ HistoryCollector
Returns a new instance of HistoryCollector.
27
28
29
30
|
# File 'lib/clacky/server/http_server.rb', line 27
def initialize(session_id, events)
@session_id = session_id
@events = events
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, **kwargs) ⇒ Object
Ignore all other UI methods (progress, errors, etc.) during history replay
89
|
# File 'lib/clacky/server/http_server.rb', line 89
def method_missing(name, *args, **kwargs); end
|
Instance Method Details
#respond_to_missing?(name, include_private = false) ⇒ Boolean
90
|
# File 'lib/clacky/server/http_server.rb', line 90
def respond_to_missing?(name, include_private = false); true; end
|
#show_assistant_message(content, files:) ⇒ Object
55
56
57
58
59
|
# File 'lib/clacky/server/http_server.rb', line 55
def show_assistant_message(content, files:)
return if content.nil? || content.to_s.strip.empty?
@events << { type: "assistant_message", session_id: @session_id, content: content }
end
|
#show_token_usage(token_data) ⇒ Object
82
83
84
85
86
|
# File 'lib/clacky/server/http_server.rb', line 82
def show_token_usage(token_data)
return unless token_data.is_a?(Hash)
@events << { type: "token_usage", session_id: @session_id }.merge(token_data)
end
|
61
62
63
64
65
|
# File 'lib/clacky/server/http_server.rb', line 61
def show_tool_call(name, args)
args_data = args.is_a?(String) ? (JSON.parse(args) rescue args) : args
summary = tool_call_summary(name, args_data)
@events << { type: "tool_call", session_id: @session_id, name: name, args: args_data, summary: summary }
end
|
78
79
80
|
# File 'lib/clacky/server/http_server.rb', line 78
def show_tool_result(result)
@events << { type: "tool_result", session_id: @session_id, result: result }
end
|
#show_user_message(content, created_at: nil, files: []) ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# File 'lib/clacky/server/http_server.rb', line 32
def show_user_message(content, created_at: nil, files: [])
ev = { type: "history_user_message", session_id: @session_id, content: content }
ev[:created_at] = created_at if created_at
rendered = Array(files).filter_map do |f|
url = f[:data_url] || f["data_url"]
name = f[:name] || f["name"]
path = f[:path] || f["path"]
if url
url
elsif path && File.exist?(path.to_s)
Utils::FileProcessor.image_path_to_data_url(path) rescue "expired:#{name}"
elsif name
type = f[:type] || f["type"] || ""
type.to_s == "image" ? "expired:#{name}" : "pdf:#{name}"
end
end
ev[:images] = rendered unless rendered.empty?
@events << ev
end
|