Commit 818e0d2

mo khan <mo@mokhan.ca>
2026-01-09 23:03:16
feat: print help for /env command
1 parent 608c8b6
Changed files (1)
lib
elelem
lib/elelem/agent.rb
@@ -81,6 +81,18 @@ module Elelem
                 end
               end
             end
+          when "/env"
+            puts "  Usage: /env VAR cmd..."
+            puts ""
+            ENV_VARS.each do |var|
+              value = ENV[var]
+              if value
+                masked = value.length > 8 ? "#{value[0..3]}...#{value[-4..]}" : "****"
+                puts "  #{var}=#{masked}"
+              else
+                puts "  #{var}=(not set)"
+              end
+            end
           when %r{^/env\s+(\w+)\s+(.+)$}
             var_name = $1
             command = $2
@@ -127,11 +139,35 @@ module Elelem
         PROVIDERS.select { |p| p.start_with?(target) }
       when '/env'
         ENV_VARS.select { |v| v.start_with?(target) }
+      when %r{^/env\s+\w+\s+pass\s+show\s*$}
+        complete_pass_entries(target)
+      when %r{^/env\s+\w+\s+pass\s*$}
+        %w[show ls insert generate edit rm].select { |c| c.start_with?(target) }
+      when %r{^/env\s+\w+$}
+        complete_commands(target)
       else
-        []
+        complete_files(target)
       end
     end
 
+    def complete_commands(target)
+      result = Elelem.shell.execute("bash", args: ["-c", "compgen -c #{target}"])
+      result["stdout"].lines.map(&:strip).first(20)
+    end
+
+    def complete_files(target)
+      result = Elelem.shell.execute("bash", args: ["-c", "compgen -f #{target}"])
+      result["stdout"].lines.map(&:strip).first(20)
+    end
+
+    def complete_pass_entries(target)
+      store = ENV.fetch("PASSWORD_STORE_DIR", File.expand_path("~/.password-store"))
+      result = Elelem.shell.execute("find", args: [store, "-name", "*.gpg"])
+      result["stdout"].lines.map { |l|
+        l.strip.sub("#{store}/", "").sub(/\.gpg$/, "")
+      }.select { |e| e.start_with?(target) }.first(20)
+    end
+
     def strip_ansi(text)
       text.gsub(/^Script started.*?\n/, '')
           .gsub(/\nScript done.*$/, '')