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.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/README.md +594 -42
  4. data/lib/shared_tools/{ruby_llm/mcp → mcp}/github_mcp_server.rb +31 -24
  5. data/lib/shared_tools/mcp/imcp.rb +28 -0
  6. data/lib/shared_tools/mcp/tavily_mcp_server.rb +44 -0
  7. data/lib/shared_tools/mcp.rb +24 -0
  8. data/lib/shared_tools/tools/browser/base_driver.rb +64 -0
  9. data/lib/shared_tools/tools/browser/base_tool.rb +50 -0
  10. data/lib/shared_tools/tools/browser/click_tool.rb +54 -0
  11. data/lib/shared_tools/tools/browser/elements/element_grouper.rb +73 -0
  12. data/lib/shared_tools/tools/browser/elements/nearby_element_detector.rb +109 -0
  13. data/lib/shared_tools/tools/browser/formatters/action_formatter.rb +37 -0
  14. data/lib/shared_tools/tools/browser/formatters/data_entry_formatter.rb +135 -0
  15. data/lib/shared_tools/tools/browser/formatters/element_formatter.rb +52 -0
  16. data/lib/shared_tools/tools/browser/formatters/input_formatter.rb +59 -0
  17. data/lib/shared_tools/tools/browser/inspect_tool.rb +87 -0
  18. data/lib/shared_tools/tools/browser/inspect_utils.rb +51 -0
  19. data/lib/shared_tools/tools/browser/page_inspect/button_summarizer.rb +140 -0
  20. data/lib/shared_tools/tools/browser/page_inspect/form_summarizer.rb +98 -0
  21. data/lib/shared_tools/tools/browser/page_inspect/html_summarizer.rb +37 -0
  22. data/lib/shared_tools/tools/browser/page_inspect/link_summarizer.rb +103 -0
  23. data/lib/shared_tools/tools/browser/page_inspect_tool.rb +55 -0
  24. data/lib/shared_tools/tools/browser/page_screenshot_tool.rb +39 -0
  25. data/lib/shared_tools/tools/browser/selector_generator/base_selectors.rb +28 -0
  26. data/lib/shared_tools/tools/browser/selector_generator/contextual_selectors.rb +140 -0
  27. data/lib/shared_tools/tools/browser/selector_generator.rb +73 -0
  28. data/lib/shared_tools/tools/browser/selector_inspect_tool.rb +67 -0
  29. data/lib/shared_tools/tools/browser/text_field_area_set_tool.rb +45 -0
  30. data/lib/shared_tools/tools/browser/visit_tool.rb +43 -0
  31. data/lib/shared_tools/tools/browser/watir_driver.rb +132 -0
  32. data/lib/shared_tools/tools/browser.rb +27 -0
  33. data/lib/shared_tools/tools/browser_tool.rb +255 -0
  34. data/lib/shared_tools/tools/calculator_tool.rb +169 -0
  35. data/lib/shared_tools/tools/composite_analysis_tool.rb +520 -0
  36. data/lib/shared_tools/tools/computer/base_driver.rb +177 -0
  37. data/lib/shared_tools/tools/computer/mac_driver.rb +103 -0
  38. data/lib/shared_tools/tools/computer.rb +21 -0
  39. data/lib/shared_tools/tools/computer_tool.rb +207 -0
  40. data/lib/shared_tools/tools/data_science_kit.rb +707 -0
  41. data/lib/shared_tools/tools/database/base_driver.rb +17 -0
  42. data/lib/shared_tools/tools/database/postgres_driver.rb +30 -0
  43. data/lib/shared_tools/tools/database/sqlite_driver.rb +29 -0
  44. data/lib/shared_tools/tools/database.rb +9 -0
  45. data/lib/shared_tools/tools/database_query_tool.rb +313 -0
  46. data/lib/shared_tools/tools/database_tool.rb +99 -0
  47. data/lib/shared_tools/tools/devops_toolkit.rb +420 -0
  48. data/lib/shared_tools/tools/disk/base_driver.rb +91 -0
  49. data/lib/shared_tools/tools/disk/base_tool.rb +20 -0
  50. data/lib/shared_tools/tools/disk/directory_create_tool.rb +39 -0
  51. data/lib/shared_tools/tools/disk/directory_delete_tool.rb +39 -0
  52. data/lib/shared_tools/tools/disk/directory_list_tool.rb +37 -0
  53. data/lib/shared_tools/tools/disk/directory_move_tool.rb +40 -0
  54. data/lib/shared_tools/tools/disk/file_create_tool.rb +38 -0
  55. data/lib/shared_tools/tools/disk/file_delete_tool.rb +40 -0
  56. data/lib/shared_tools/tools/disk/file_move_tool.rb +43 -0
  57. data/lib/shared_tools/tools/disk/file_read_tool.rb +40 -0
  58. data/lib/shared_tools/tools/disk/file_replace_tool.rb +44 -0
  59. data/lib/shared_tools/tools/disk/file_write_tool.rb +40 -0
  60. data/lib/shared_tools/tools/disk/local_driver.rb +91 -0
  61. data/lib/shared_tools/tools/disk.rb +17 -0
  62. data/lib/shared_tools/tools/disk_tool.rb +132 -0
  63. data/lib/shared_tools/tools/doc/pdf_reader_tool.rb +79 -0
  64. data/lib/shared_tools/tools/doc.rb +8 -0
  65. data/lib/shared_tools/tools/doc_tool.rb +109 -0
  66. data/lib/shared_tools/tools/docker/base_tool.rb +56 -0
  67. data/lib/shared_tools/tools/docker/compose_run_tool.rb +77 -0
  68. data/lib/shared_tools/tools/docker.rb +8 -0
  69. data/lib/shared_tools/tools/error_handling_tool.rb +403 -0
  70. data/lib/shared_tools/tools/eval/python_eval_tool.rb +209 -0
  71. data/lib/shared_tools/tools/eval/ruby_eval_tool.rb +93 -0
  72. data/lib/shared_tools/tools/eval/shell_eval_tool.rb +64 -0
  73. data/lib/shared_tools/tools/eval.rb +10 -0
  74. data/lib/shared_tools/tools/eval_tool.rb +139 -0
  75. data/lib/shared_tools/tools/secure_tool_template.rb +353 -0
  76. data/lib/shared_tools/tools/version.rb +7 -0
  77. data/lib/shared_tools/tools/weather_tool.rb +197 -0
  78. data/lib/shared_tools/tools/workflow_manager_tool.rb +312 -0
  79. data/lib/shared_tools/tools.rb +16 -0
  80. data/lib/shared_tools/version.rb +1 -1
  81. data/lib/shared_tools.rb +9 -33
  82. metadata +189 -68
  83. data/lib/shared_tools/llm_rb/run_shell_command.rb +0 -23
  84. data/lib/shared_tools/llm_rb.rb +0 -9
  85. data/lib/shared_tools/omniai.rb +0 -9
  86. data/lib/shared_tools/raix/what_is_the_weather.rb +0 -18
  87. data/lib/shared_tools/raix.rb +0 -9
  88. data/lib/shared_tools/ruby_llm/edit_file.rb +0 -71
  89. data/lib/shared_tools/ruby_llm/incomplete/calculator_tool.rb +0 -70
  90. data/lib/shared_tools/ruby_llm/incomplete/composite_analysis_tool.rb +0 -89
  91. data/lib/shared_tools/ruby_llm/incomplete/data_science_kit.rb +0 -128
  92. data/lib/shared_tools/ruby_llm/incomplete/database_query_tool.rb +0 -100
  93. data/lib/shared_tools/ruby_llm/incomplete/devops_toolkit.rb +0 -112
  94. data/lib/shared_tools/ruby_llm/incomplete/error_handling_tool.rb +0 -109
  95. data/lib/shared_tools/ruby_llm/incomplete/secure_tool_template.rb +0 -117
  96. data/lib/shared_tools/ruby_llm/incomplete/weather_tool.rb +0 -110
  97. data/lib/shared_tools/ruby_llm/incomplete/workflow_manager_tool.rb +0 -145
  98. data/lib/shared_tools/ruby_llm/list_files.rb +0 -49
  99. data/lib/shared_tools/ruby_llm/mcp/imcp.rb +0 -33
  100. data/lib/shared_tools/ruby_llm/mcp.rb +0 -10
  101. data/lib/shared_tools/ruby_llm/pdf_page_reader.rb +0 -59
  102. data/lib/shared_tools/ruby_llm/python_eval.rb +0 -194
  103. data/lib/shared_tools/ruby_llm/read_file.rb +0 -40
  104. data/lib/shared_tools/ruby_llm/ruby_eval.rb +0 -77
  105. data/lib/shared_tools/ruby_llm/run_shell_command.rb +0 -49
  106. 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