elelem 0.7.0 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f36b6e8749d5c12525548bc5cfd8b270c2bd5f7ada78855f7b4c55e23e3cb52
4
- data.tar.gz: 8bf6ae1b937a7fbf5dc22e0b0b522e903803a6562644afa04cf2b00c8d28133b
3
+ metadata.gz: a284087a47f32b75927bb0fc593aee12c376952f89af2ae61faa96b66810ae87
4
+ data.tar.gz: 138d5d8a0c110a1631c1a3b64024d2f82b5a80bfa1339244ef0d5bb932c2c626
5
5
  SHA512:
6
- metadata.gz: 1eccfe3793dc81e84c8c5a82b287732dccab7be793c350ad65e20466d3c29ea183ec1aca561969e2b8a78c5095668329c672ea650f5a97bb5aa52f1d8680379e
7
- data.tar.gz: c24188e1de12fb63452d4a34cfa48de11795bc18b85e3b95b7f620959c9e2cf084b6f9dba8b492bdbea5f5cd5f27c07d6fa9657e2ea0b37564ddf1736baf1dba
6
+ metadata.gz: b3baefa781ccfef8e2a4882a1b8f65779b672f45918a9e0a9926741dbb80ecfb57c4c182f9074ae71e73b29010d3c349a893f3bde388d7e5340d04a158ae3cde
7
+ data.tar.gz: d4d6d0609f1ef0fa9bc5e9bb67aec6085944706db8a31025a63299f3ea0519f202a4a3f4a2ea4dad647bcb1390a98eb3ea7b1f0ab2f6b16c87ec18f6f1c355e3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.8.0] - 2026-01-14
4
+
5
+ ### Added
6
+ - `fetch` tool for HTTP GET requests (returns status and body)
7
+ - `search_engine` tool for DuckDuckGo Instant Answer API searches
8
+ - Tool aliases: `get`/`web` → `fetch`, `ddg`/`duckduckgo` → `search_engine`
9
+ - `net-hippie` and `cgi` dependencies for HTTP requests
10
+
3
11
  ## [0.7.0] - 2026-01-14
4
12
 
5
13
  ### Added
@@ -2,7 +2,6 @@
2
2
 
3
3
  module Elelem
4
4
  class Toolbox
5
-
6
5
  READ_TOOL = Tool.build("read", "Read complete contents of a file. Requires exact file path.", { path: { type: "string" } }, ["path"]) do |args|
7
6
  path = args["path"]
8
7
  full_path = Pathname.new(path).expand_path
@@ -37,12 +36,30 @@ module Elelem
37
36
  { bytes_written: full_path.write(args["content"]) }
38
37
  end
39
38
 
39
+ FETCH_TOOL = Tool.build("fetch", "Fetch content from a URL. Returns status, headers, and body.", { url: { type: "string", description: "The URL to fetch" } }, ["url"]) do |args|
40
+ client = Net::Hippie::Client.new
41
+ response = client.get(args["url"])
42
+ { status: response.code.to_i, body: response.body }
43
+ end
44
+
45
+ WEB_SEARCH_TOOL = Tool.build("search_engine", "Search the web using DuckDuckGo. Returns raw API response.", { query: { type: "string", description: "The search query" } }, ["query"]) do |args|
46
+ query = CGI.escape(args["query"])
47
+ url = "https://api.duckduckgo.com/?q=#{query}&format=json&no_html=1"
48
+ client = Net::Hippie::Client.new
49
+ response = client.get(url)
50
+ JSON.parse(response.body)
51
+ end
52
+
40
53
  TOOL_ALIASES = {
41
54
  "bash" => "exec",
55
+ "duckduckgo" => "search_engine",
56
+ "ddg" => "search_engine",
42
57
  "execute" => "exec",
58
+ "get" => "fetch",
43
59
  "open" => "read",
44
60
  "search" => "grep",
45
61
  "sh" => "exec",
62
+ "web" => "fetch",
46
63
  }
47
64
 
48
65
  attr_reader :tools
@@ -52,7 +69,9 @@ module Elelem
52
69
  @tool_permissions = {}
53
70
  @tools = { read: [], write: [], execute: [] }
54
71
  add_tool(eval_tool(binding), :execute)
72
+ add_tool(WEB_SEARCH_TOOL, :read)
55
73
  add_tool(EXEC_TOOL, :execute)
74
+ add_tool(FETCH_TOOL, :read)
56
75
  add_tool(GREP_TOOL, :read)
57
76
  add_tool(LIST_TOOL, :read)
58
77
  add_tool(PATCH_TOOL, :write)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Elelem
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0"
5
5
  end
data/lib/elelem.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "cgi"
3
4
  require "cli/ui"
4
5
  require "erb"
5
6
  require "fileutils"
6
7
  require "json"
7
8
  require "json-schema"
8
9
  require "logger"
10
+ require "net/hippie"
9
11
  require "net/llm"
10
12
  require "open3"
11
13
  require "pathname"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elelem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo khan
@@ -9,6 +9,20 @@ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: cgi
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.1'
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: cli-ui
14
28
  requirement: !ruby/object:Gem::Requirement
@@ -93,6 +107,20 @@ dependencies:
93
107
  - - "~>"
94
108
  - !ruby/object:Gem::Version
95
109
  version: '1.0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: net-hippie
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1.0'
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.0'
96
124
  - !ruby/object:Gem::Dependency
97
125
  name: net-llm
98
126
  requirement: !ruby/object:Gem::Requirement