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.
29
30
31
32
|
# File 'lib/clacky/server/http_server.rb', line 29
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
91
|
# File 'lib/clacky/server/http_server.rb', line 91
def method_missing(name, *args, **kwargs); end
|
Instance Method Details
#respond_to_missing?(name, include_private = false) ⇒ Boolean
92
|
# File 'lib/clacky/server/http_server.rb', line 92
def respond_to_missing?(name, include_private = false); true; end
|
#show_assistant_message(content, files:) ⇒ Object
57
58
59
60
61
|
# File 'lib/clacky/server/http_server.rb', line 57
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
84
85
86
87
88
|
# File 'lib/clacky/server/http_server.rb', line 84
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
|
63
64
65
66
67
|
# File 'lib/clacky/server/http_server.rb', line 63
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
|
80
81
82
|
# File 'lib/clacky/server/http_server.rb', line 80
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/clacky/server/http_server.rb', line 34
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
|