Commit d5c5726
lib/elelem/tools/git.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+Elelem::Plugins.register(:git) do |agent|
+ allowed = %w[status diff log show branch checkout add reset stash].freeze
+
+ agent.toolbox.add("git",
+ description: "Run git command",
+ params: { command: { type: "string" }, args: { type: "array" } },
+ required: ["command"]
+ ) do |a|
+ cmd = a["command"]
+ next { error: "not allowed: #{cmd}" } unless allowed.include?(cmd)
+
+ agent.toolbox.exec("git", cmd, *(a["args"] || []))
+ end
+
+ agent.toolbox.after("git") do |_, result|
+ agent.terminal.say " ! #{result[:error]}" if result[:error]
+ end
+end
lib/elelem/tools/glob.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+Elelem::Plugins.register(:glob) do |agent|
+ agent.toolbox.add("glob",
+ description: "Find files matching pattern",
+ params: { pattern: { type: "string" }, path: { type: "string" } },
+ required: ["pattern"]
+ ) do |a|
+ path = a["path"] || "."
+ result = agent.toolbox.exec("fd", "--glob", a["pattern"], path)
+ result[:ok] ? result : agent.toolbox.exec("find", path, "-name", a["pattern"])
+ end
+end
lib/elelem/tools/grep.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+Elelem::Plugins.register(:grep) do |agent|
+ agent.toolbox.add("grep",
+ description: "Search file contents",
+ params: { pattern: { type: "string" }, path: { type: "string" }, glob: { type: "string" } },
+ required: ["pattern"]
+ ) do |a|
+ path = a["path"] || "."
+ glob = a["glob"]
+ rg_args = ["rg", "-n", a["pattern"], path]
+ rg_args += ["-g", glob] if glob
+ result = agent.toolbox.exec(*rg_args)
+ next result if result[:ok]
+
+ grep_args = ["grep", "-rn"]
+ grep_args += ["--include", glob] if glob
+ grep_args += [a["pattern"], path]
+ agent.toolbox.exec(*grep_args)
+ end
+end
lib/elelem/tools/list.rb
@@ -0,0 +1,14 @@
+# frozen_string_literal: true
+
+Elelem::Plugins.register(:list) do |agent|
+ agent.toolbox.add("list",
+ description: "List directory contents",
+ params: { path: { type: "string" }, recursive: { type: "boolean" } },
+ required: [],
+ aliases: ["ls"]
+ ) do |a|
+ path = a["path"] || "."
+ flags = a["recursive"] ? "-laR" : "-la"
+ agent.toolbox.exec("ls", flags, path)
+ end
+end