shared_tools 0.2.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/README.md +594 -42
- data/lib/shared_tools/{ruby_llm/mcp → mcp}/github_mcp_server.rb +31 -24
- data/lib/shared_tools/mcp/imcp.rb +28 -0
- data/lib/shared_tools/mcp/tavily_mcp_server.rb +44 -0
- data/lib/shared_tools/mcp.rb +24 -0
- data/lib/shared_tools/tools/browser/base_driver.rb +64 -0
- data/lib/shared_tools/tools/browser/base_tool.rb +50 -0
- data/lib/shared_tools/tools/browser/click_tool.rb +54 -0
- data/lib/shared_tools/tools/browser/elements/element_grouper.rb +73 -0
- data/lib/shared_tools/tools/browser/elements/nearby_element_detector.rb +109 -0
- data/lib/shared_tools/tools/browser/formatters/action_formatter.rb +37 -0
- data/lib/shared_tools/tools/browser/formatters/data_entry_formatter.rb +135 -0
- data/lib/shared_tools/tools/browser/formatters/element_formatter.rb +52 -0
- data/lib/shared_tools/tools/browser/formatters/input_formatter.rb +59 -0
- data/lib/shared_tools/tools/browser/inspect_tool.rb +87 -0
- data/lib/shared_tools/tools/browser/inspect_utils.rb +51 -0
- data/lib/shared_tools/tools/browser/page_inspect/button_summarizer.rb +140 -0
- data/lib/shared_tools/tools/browser/page_inspect/form_summarizer.rb +98 -0
- data/lib/shared_tools/tools/browser/page_inspect/html_summarizer.rb +37 -0
- data/lib/shared_tools/tools/browser/page_inspect/link_summarizer.rb +103 -0
- data/lib/shared_tools/tools/browser/page_inspect_tool.rb +55 -0
- data/lib/shared_tools/tools/browser/page_screenshot_tool.rb +39 -0
- data/lib/shared_tools/tools/browser/selector_generator/base_selectors.rb +28 -0
- data/lib/shared_tools/tools/browser/selector_generator/contextual_selectors.rb +140 -0
- data/lib/shared_tools/tools/browser/selector_generator.rb +73 -0
- data/lib/shared_tools/tools/browser/selector_inspect_tool.rb +67 -0
- data/lib/shared_tools/tools/browser/text_field_area_set_tool.rb +45 -0
- data/lib/shared_tools/tools/browser/visit_tool.rb +43 -0
- data/lib/shared_tools/tools/browser/watir_driver.rb +132 -0
- data/lib/shared_tools/tools/browser.rb +27 -0
- data/lib/shared_tools/tools/browser_tool.rb +255 -0
- data/lib/shared_tools/tools/calculator_tool.rb +169 -0
- data/lib/shared_tools/tools/composite_analysis_tool.rb +520 -0
- data/lib/shared_tools/tools/computer/base_driver.rb +177 -0
- data/lib/shared_tools/tools/computer/mac_driver.rb +103 -0
- data/lib/shared_tools/tools/computer.rb +21 -0
- data/lib/shared_tools/tools/computer_tool.rb +207 -0
- data/lib/shared_tools/tools/data_science_kit.rb +707 -0
- data/lib/shared_tools/tools/database/base_driver.rb +17 -0
- data/lib/shared_tools/tools/database/postgres_driver.rb +30 -0
- data/lib/shared_tools/tools/database/sqlite_driver.rb +29 -0
- data/lib/shared_tools/tools/database.rb +9 -0
- data/lib/shared_tools/tools/database_query_tool.rb +313 -0
- data/lib/shared_tools/tools/database_tool.rb +99 -0
- data/lib/shared_tools/tools/devops_toolkit.rb +420 -0
- data/lib/shared_tools/tools/disk/base_driver.rb +91 -0
- data/lib/shared_tools/tools/disk/base_tool.rb +20 -0
- data/lib/shared_tools/tools/disk/directory_create_tool.rb +39 -0
- data/lib/shared_tools/tools/disk/directory_delete_tool.rb +39 -0
- data/lib/shared_tools/tools/disk/directory_list_tool.rb +37 -0
- data/lib/shared_tools/tools/disk/directory_move_tool.rb +40 -0
- data/lib/shared_tools/tools/disk/file_create_tool.rb +38 -0
- data/lib/shared_tools/tools/disk/file_delete_tool.rb +40 -0
- data/lib/shared_tools/tools/disk/file_move_tool.rb +43 -0
- data/lib/shared_tools/tools/disk/file_read_tool.rb +40 -0
- data/lib/shared_tools/tools/disk/file_replace_tool.rb +44 -0
- data/lib/shared_tools/tools/disk/file_write_tool.rb +40 -0
- data/lib/shared_tools/tools/disk/local_driver.rb +91 -0
- data/lib/shared_tools/tools/disk.rb +17 -0
- data/lib/shared_tools/tools/disk_tool.rb +132 -0
- data/lib/shared_tools/tools/doc/pdf_reader_tool.rb +79 -0
- data/lib/shared_tools/tools/doc.rb +8 -0
- data/lib/shared_tools/tools/doc_tool.rb +109 -0
- data/lib/shared_tools/tools/docker/base_tool.rb +56 -0
- data/lib/shared_tools/tools/docker/compose_run_tool.rb +77 -0
- data/lib/shared_tools/tools/docker.rb +8 -0
- data/lib/shared_tools/tools/error_handling_tool.rb +403 -0
- data/lib/shared_tools/tools/eval/python_eval_tool.rb +209 -0
- data/lib/shared_tools/tools/eval/ruby_eval_tool.rb +93 -0
- data/lib/shared_tools/tools/eval/shell_eval_tool.rb +64 -0
- data/lib/shared_tools/tools/eval.rb +10 -0
- data/lib/shared_tools/tools/eval_tool.rb +139 -0
- data/lib/shared_tools/tools/secure_tool_template.rb +353 -0
- data/lib/shared_tools/tools/version.rb +7 -0
- data/lib/shared_tools/tools/weather_tool.rb +197 -0
- data/lib/shared_tools/tools/workflow_manager_tool.rb +312 -0
- data/lib/shared_tools/tools.rb +16 -0
- data/lib/shared_tools/version.rb +1 -1
- data/lib/shared_tools.rb +9 -33
- metadata +189 -68
- data/lib/shared_tools/llm_rb/run_shell_command.rb +0 -23
- data/lib/shared_tools/llm_rb.rb +0 -9
- data/lib/shared_tools/omniai.rb +0 -9
- data/lib/shared_tools/raix/what_is_the_weather.rb +0 -18
- data/lib/shared_tools/raix.rb +0 -9
- data/lib/shared_tools/ruby_llm/edit_file.rb +0 -71
- data/lib/shared_tools/ruby_llm/incomplete/calculator_tool.rb +0 -70
- data/lib/shared_tools/ruby_llm/incomplete/composite_analysis_tool.rb +0 -89
- data/lib/shared_tools/ruby_llm/incomplete/data_science_kit.rb +0 -128
- data/lib/shared_tools/ruby_llm/incomplete/database_query_tool.rb +0 -100
- data/lib/shared_tools/ruby_llm/incomplete/devops_toolkit.rb +0 -112
- data/lib/shared_tools/ruby_llm/incomplete/error_handling_tool.rb +0 -109
- data/lib/shared_tools/ruby_llm/incomplete/secure_tool_template.rb +0 -117
- data/lib/shared_tools/ruby_llm/incomplete/weather_tool.rb +0 -110
- data/lib/shared_tools/ruby_llm/incomplete/workflow_manager_tool.rb +0 -145
- data/lib/shared_tools/ruby_llm/list_files.rb +0 -49
- data/lib/shared_tools/ruby_llm/mcp/imcp.rb +0 -33
- data/lib/shared_tools/ruby_llm/mcp.rb +0 -10
- data/lib/shared_tools/ruby_llm/pdf_page_reader.rb +0 -59
- data/lib/shared_tools/ruby_llm/python_eval.rb +0 -194
- data/lib/shared_tools/ruby_llm/read_file.rb +0 -40
- data/lib/shared_tools/ruby_llm/ruby_eval.rb +0 -77
- data/lib/shared_tools/ruby_llm/run_shell_command.rb +0 -49
- data/lib/shared_tools/ruby_llm.rb +0 -12
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../shared_tools'
|
|
4
|
-
|
|
5
|
-
module SharedTools
|
|
6
|
-
verify_gem :ruby_llm
|
|
7
|
-
|
|
8
|
-
class RubyEval < ::RubyLLM::Tool
|
|
9
|
-
def self.name = 'ruby_eval'
|
|
10
|
-
|
|
11
|
-
description <<~DESCRIPTION
|
|
12
|
-
Execute Ruby source code safely and return the result.
|
|
13
|
-
|
|
14
|
-
This tool evaluates Ruby code in a sandboxed context and returns
|
|
15
|
-
the result of the last expression or any output produced.
|
|
16
|
-
|
|
17
|
-
WARNING: This tool executes arbitrary Ruby code. Use with caution.
|
|
18
|
-
DESCRIPTION
|
|
19
|
-
param :code, desc: "The Ruby code to execute"
|
|
20
|
-
|
|
21
|
-
def execute(code:)
|
|
22
|
-
RubyLLM.logger.info("Requesting permission to execute Ruby code")
|
|
23
|
-
|
|
24
|
-
if code.strip.empty?
|
|
25
|
-
error_msg = "Ruby code cannot be empty"
|
|
26
|
-
RubyLLM.logger.error(error_msg)
|
|
27
|
-
return { error: error_msg }
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Show user the code and ask for confirmation
|
|
31
|
-
allowed = SharedTools.execute?(tool: self.class.to_s, stuff: code)
|
|
32
|
-
|
|
33
|
-
unless allowed
|
|
34
|
-
RubyLLM.logger.warn("User declined to execute the Ruby code")
|
|
35
|
-
return { error: "User declined to execute the Ruby code" }
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
RubyLLM.logger.info("Executing Ruby code")
|
|
39
|
-
|
|
40
|
-
# Capture both stdout and the result of evaluation
|
|
41
|
-
original_stdout = $stdout
|
|
42
|
-
captured_output = StringIO.new
|
|
43
|
-
$stdout = captured_output
|
|
44
|
-
|
|
45
|
-
begin
|
|
46
|
-
result = eval(code)
|
|
47
|
-
output = captured_output.string
|
|
48
|
-
|
|
49
|
-
RubyLLM.logger.debug("Ruby code execution completed successfully")
|
|
50
|
-
|
|
51
|
-
response = {
|
|
52
|
-
result: result,
|
|
53
|
-
output: output.empty? ? nil : output,
|
|
54
|
-
success: true
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
# Include both result and output in a readable format
|
|
58
|
-
if output.empty?
|
|
59
|
-
response[:display] = result.inspect
|
|
60
|
-
else
|
|
61
|
-
response[:display] = output + (result.nil? ? "" : "\n=> #{result.inspect}")
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
response
|
|
65
|
-
rescue SyntaxError, StandardError => e
|
|
66
|
-
RubyLLM.logger.error("Ruby code execution failed: #{e.message}")
|
|
67
|
-
{
|
|
68
|
-
error: e.message,
|
|
69
|
-
backtrace: e.backtrace&.first(5),
|
|
70
|
-
success: false
|
|
71
|
-
}
|
|
72
|
-
ensure
|
|
73
|
-
$stdout = original_stdout
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative '../../shared_tools'
|
|
4
|
-
|
|
5
|
-
module SharedTools
|
|
6
|
-
SharedTools.verify_gem :ruby_llm
|
|
7
|
-
|
|
8
|
-
class RunShellCommand < ::RubyLLM::Tool
|
|
9
|
-
def self.name = 'run_shell_command'
|
|
10
|
-
|
|
11
|
-
description "Execute a shell command"
|
|
12
|
-
param :command, desc: "The command to execute"
|
|
13
|
-
|
|
14
|
-
def execute(command:)
|
|
15
|
-
RubyLLM.logger.info("Requesting permission to execute command: '#{command}'")
|
|
16
|
-
|
|
17
|
-
if command.strip.empty?
|
|
18
|
-
error_msg = "Command cannot be empty"
|
|
19
|
-
RubyLLM.logger.error(error_msg)
|
|
20
|
-
return { error: error_msg }
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Show user the command and ask for confirmation
|
|
24
|
-
allowed = SharedTools.execute?(tool: self.class.to_s, stuff: command)
|
|
25
|
-
|
|
26
|
-
unless allowed
|
|
27
|
-
RubyLLM.logger.warn("User declined to execute the command: '#{command}'")
|
|
28
|
-
return { error: "User declined to execute the command" }
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
RubyLLM.logger.info("Executing command: '#{command}'")
|
|
32
|
-
|
|
33
|
-
# Use Open3 for safer command execution with proper error handling
|
|
34
|
-
require "open3"
|
|
35
|
-
stdout, stderr, status = Open3.capture3(command)
|
|
36
|
-
|
|
37
|
-
if status.success?
|
|
38
|
-
RubyLLM.logger.debug("Command execution completed successfully with #{stdout.bytesize} bytes of output")
|
|
39
|
-
{ stdout: stdout, exit_status: status.exitstatus }
|
|
40
|
-
else
|
|
41
|
-
RubyLLM.logger.warn("Command execution failed with exit code #{status.exitstatus}: #{stderr}")
|
|
42
|
-
{ error: "Command failed with exit code #{status.exitstatus}", stderr: stderr, exit_status: status.exitstatus }
|
|
43
|
-
end
|
|
44
|
-
rescue => e
|
|
45
|
-
RubyLLM.logger.error("Command execution failed: #{e.message}")
|
|
46
|
-
{ error: e.message }
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require_relative '../shared_tools'
|
|
4
|
-
|
|
5
|
-
SharedTools.verify_gem :ruby_llm
|
|
6
|
-
|
|
7
|
-
# This excludes the sub-directories and mcp.rb
|
|
8
|
-
Dir.glob(File.join(__dir__, "ruby_llm", "*.rb"))
|
|
9
|
-
.reject { |f| File.basename(f) == 'mcp.rb' }
|
|
10
|
-
.each do |file|
|
|
11
|
-
require file
|
|
12
|
-
end
|