Class: ToolClient

Inherits:
Object
  • Object
show all
Defined in:
lib/clacky/default_skills/channel-setup/feishu_setup.rb

Overview


ToolClient — proxies browser calls through /api/tool/browser on clacky server


Instance Method Summary collapse

Constructor Details

#initialize(server_url) ⇒ ToolClient

Returns a new instance of ToolClient.



87
88
89
90
# File 'lib/clacky/default_skills/channel-setup/feishu_setup.rb', line 87

def initialize(server_url)
  @server_url = server_url
  @http = nil  # lazy init, rebuilt on connection errors
end

Instance Method Details

#call(action, **params) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/clacky/default_skills/channel-setup/feishu_setup.rb', line 92

def call(action, **params)
  uri     = URI("#{@server_url}/api/tool/browser")
  request = Net::HTTP::Post.new(uri, "Content-Type" => "application/json")
  request.body = JSON.generate({ "action" => action.to_s }.merge(params.transform_keys(&:to_s)))
  response = http.request(request)
  raise "Server error #{response.code}: #{response.body}" unless response.code.to_i < 500
  result = JSON.parse(response.body)
  raise "Browser error: #{result["error"]}" if result["error"]
  result
rescue Errno::ECONNREFUSED, Errno::ECONNRESET, EOFError, Net::ReadTimeout, IOError => e
  # Connection dropped (keep-alive expired or server restarted) — rebuild and retry once
  @http = nil
  raise "ToolClient connection failed: #{e.message}"
end

#httpObject



108
109
110
111
112
113
114
115
# File 'lib/clacky/default_skills/channel-setup/feishu_setup.rb', line 108

def http
  return @http if @http
  uri  = URI("#{@server_url}/api/tool/browser")
  @http = Net::HTTP.new(uri.host, uri.port)
  @http.open_timeout = 5
  @http.read_timeout = 60
  @http
end