aia 0.3.0 → 0.3.3

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: c4d68353a3458a4a3e485acbf09ec6444e63d33ddaedca66a1f48aaf38b31a96
4
- data.tar.gz: b2d07bde2cb329db6f23ccda5c845b67251f00f5bdfab680406d671a32ee0b32
3
+ metadata.gz: 0d2d934f517983c9854654eeb01d9b5ca6a08c92cb531b315a8b223e6e2ffd23
4
+ data.tar.gz: cd5ac0f18c2a290205c717c2d9e1e2e43ffe0a51f5aac400d3a1fce6137db4c5
5
5
  SHA512:
6
- metadata.gz: d27e5190de909b14a71a52f2eea78b8d948de6cbe5c621f3b10e819404d0a9a78087c5da748598b6dfbf8af88ece61382c407d62382eadb062ad0582d5f4b8f9
7
- data.tar.gz: 6cc9b0ad1d570f0cb994e06af614d4faea07b356303042fa1e1bfe03ed12a62f273824e0240b8bb2cb46a64b6f195dd715b15161a228255f3d2639fc1648e61e
6
+ metadata.gz: 04c859d26173c65d577cd9a49c4333f5c104d69b37205523a1f2249f284de38e1af06ec1870cea9774858e9688eb67639135fe2500b3550693f33ba621eada79
7
+ data.tar.gz: 808e69fc41eaba3396ebfb7157063e43709034a5009fcc06fb01c0055a2b371ef128962bea32a2cae8efc0e8ee0b8d8aeb5f4f180e5e4754176bfc70fecf17a0
@@ -0,0 +1,39 @@
1
+ # lib/aia/aia_completion.bash
2
+ # Setup a prompt completion for use with
3
+ # the bash shell
4
+ #
5
+ # This script assumes that the system environment
6
+ # variable PROMPTS_DIR has been set correctly
7
+
8
+ _aia_completion() {
9
+ # The current word being completed
10
+ local cur_word="${COMP_WORDS[COMP_CWORD]}"
11
+
12
+ # The previous word before the current word
13
+ local prev_word="${COMP_WORDS[COMP_CWORD-1]}"
14
+
15
+ # Store the previous directory to return to it later
16
+ local initial_pwd=$(pwd)
17
+
18
+ # Check if we are currently completing the option that requires prompt IDs
19
+ if [[ "$prev_word" == "aia" ]]; then
20
+ # Change directory to the prompts directory
21
+ cd "$PROMPTS_DIR" || return
22
+
23
+ # Generate a list of relative paths from the ~/.prompts directory (without .txt extension)
24
+ local files=($(find . -name "*.txt" -type f | sed 's|^\./||' | sed 's/\.txt$//'))
25
+
26
+ # Change back to the initial directory
27
+ cd "$initial_pwd" || return
28
+
29
+ # Generate possible matches and store them in the COMPREPLY array
30
+ COMPREPLY=($(compgen -W "${files[*]}" -- "$cur_word"))
31
+ else
32
+ # If not the specific option, perform regular file completion
33
+ COMPREPLY=($(compgen -o default -- "$cur_word"))
34
+ fi
35
+ }
36
+
37
+ # Register the completion function for the aia command
38
+ complete -F _aia_completion aia
39
+
@@ -0,0 +1,34 @@
1
+ # lib/aia/aia_completion.fish
2
+ # Setup a prompt completion for use with the fish shell
3
+ #
4
+ # This script assumes that the system environment
5
+ # variable PROMPTS_DIR has been set correctly
6
+
7
+ function __fish_aia_complete
8
+ # Get the command line and current token
9
+ set -l cmd_line (commandline -opc)
10
+ set -l current_token (commandline -ct)
11
+
12
+ # Check if we are currently completing the option that requires prompt IDs
13
+ if set -q cmd_line[2]
14
+ # Change directory to the prompts directory
15
+ if test -d $PROMPTS_DIR
16
+ pushd $PROMPTS_DIR
17
+ # Generate completions based on .txt files in the PROMPTS_DIR directory
18
+ for file in (find . -name "*.txt" -type f)
19
+ set file (string replace -r '\.txt$' '' -- $file)
20
+ set file (string replace -r '^\./' '' -- $file)
21
+ printf "%s\n" $file
22
+ end
23
+ popd
24
+ end
25
+ else
26
+ # Use the default file completion if we are not completing a prompt ID
27
+ complete -f -c aia -a "(commandline -ct)"
28
+ end
29
+ end
30
+
31
+ # Register the completion function for the aia command
32
+ complete -c aia -a '(__fish_aia_complete)' -f
33
+
34
+
@@ -0,0 +1,39 @@
1
+ # lib/aia/aia_completion.zsh
2
+ # Setup a prompt completion for use with
3
+ # the zsh shell
4
+ #
5
+ # This script assumes that the system environment
6
+ # variable PROMPTS_DIR has been set correctly
7
+
8
+ _aia_completion() {
9
+ # The current word being completed
10
+ local cur_word="$words[$CURRENT]"
11
+
12
+ # The previous word before the current word
13
+ local prev_word="$words[$CURRENT-1]"
14
+
15
+ # Store the previous directory to return to it later
16
+ local initial_pwd=$PWD
17
+
18
+ # Check if we are currently completing the option that requires prompt IDs
19
+ if [[ "$prev_word" == "aia" ]]; then
20
+ # Change directory to the prompts directory
21
+ cd "$PROMPTS_DIR" || return
22
+
23
+ # Generate a list of relative paths from the ~/.prompts directory (without .txt extension)
24
+ local files=($(find . -name "*.txt" -type f | sed 's|^\./||' | sed 's/\.txt$//'))
25
+
26
+ # Change back to the initial directory
27
+ cd "$initial_pwd" || return
28
+
29
+ # Generate possible matches and store them in an array
30
+ _describe 'prompt ID' files
31
+ else
32
+ # If not the specific option, use the standard filename completion
33
+ _files
34
+ fi
35
+ }
36
+
37
+ # Register the completion function for the aia command using compctl
38
+ compctl -K _aia_completion aia
39
+
data/lib/aia/cli.rb CHANGED
@@ -12,6 +12,7 @@ module AIA::Cli
12
12
  version?: [false, "--version", "Print Version"],
13
13
  help?: [false, "-h --help", "Show Usage"],
14
14
  fuzzy?: [false, "--fuzzy", "Use Fuzzy Matching"],
15
+ completion: [nil, "--completion", "Show completion script for bash|zsh|fish"],
15
16
  # TODO: Consider dropping output in favor of always
16
17
  # going to STDOUT so user can redirect or pipe somewhere else
17
18
  output: [OUTPUT,"-o --output --no-output", "Out FILENAME"],
@@ -32,8 +33,9 @@ module AIA::Cli
32
33
  usage = "\n#{MY_NAME} v#{AIA::VERSION}\n\n"
33
34
  usage += "Usage: #{MY_NAME} [options] prompt_id [context_file]* [-- external_options+]\n\n"
34
35
  usage += usage_options
35
- usage += "\n"
36
- usage += usage_notes if verbose?
36
+ usage += usage_options_details
37
+ usage += "\n"
38
+ usage += usage_notes if verbose?
37
39
 
38
40
  usage
39
41
  end
@@ -63,10 +65,30 @@ module AIA::Cli
63
65
  end
64
66
 
65
67
 
68
+ def usage_options_details
69
+ <<~EOS
70
+
71
+ Details
72
+ -------
73
+
74
+ Use (--help --verbose) or (-h -v) for verbose usage text.
75
+
76
+ Use --completion bash|zsh|fish to show a script
77
+ that will add prompt ID completion to your desired shell.
78
+ You must copy the output from this option into a
79
+ place where the function will be executed for
80
+ your shell.
81
+
82
+ EOS
83
+ end
84
+
85
+
66
86
  def usage_notes
67
87
  <<~EOS
88
+
68
89
  #{usage_envars}
69
- #{AIA::ExternalCommands::HELP}
90
+ #{AIA::External::HELP}
91
+
70
92
  EOS
71
93
  end
72
94
 
@@ -117,6 +139,8 @@ module AIA::Cli
117
139
  check_for option
118
140
  end
119
141
 
142
+ show_completion unless @options[:completion].nil?
143
+
120
144
  # get the options meant for the backend AI command
121
145
  extract_extra_options
122
146
 
@@ -163,7 +187,6 @@ module AIA::Cli
163
187
  end
164
188
 
165
189
 
166
-
167
190
  def show_usage
168
191
  @options[:help?][0] = false
169
192
  puts usage
@@ -172,6 +195,27 @@ module AIA::Cli
172
195
  alias_method :show_help, :show_usage
173
196
 
174
197
 
198
+ def show_completion
199
+ shell = @options[:completion].first
200
+ script = Pathname.new(__dir__) + "aia_completion.#{shell}"
201
+
202
+ if script.exist?
203
+ puts
204
+ puts script.read
205
+ puts
206
+ else
207
+ STDERR.puts <<~EOS
208
+
209
+ ERRORL The shell '#{shell}' is not supported.
210
+
211
+ EOS
212
+ end
213
+
214
+
215
+ exit
216
+ end
217
+
218
+
175
219
  def show_version
176
220
  puts AIA::VERSION
177
221
  exit
@@ -36,9 +36,4 @@ module AIA::Configuration
36
36
  @extra_options = @arguments.slice!(extra_index..-1)[1..]
37
37
  end
38
38
  end
39
-
40
-
41
-
42
-
43
-
44
39
  end
data/lib/aia/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module AIA
5
- VERSION = "0.3.0"
5
+ VERSION = "0.3.3"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-29 00:00:00.000000000 Z
11
+ date: 2023-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prompt_manager
@@ -90,7 +90,6 @@ email:
90
90
  - dvanhoozer@gmail.com
91
91
  executables:
92
92
  - aia
93
- - aia_completion.sh
94
93
  extensions: []
95
94
  extra_rdoc_files: []
96
95
  files:
@@ -101,8 +100,10 @@ files:
101
100
  - README.md
102
101
  - Rakefile
103
102
  - bin/aia
104
- - bin/aia_completion.sh
105
103
  - lib/aia.rb
104
+ - lib/aia/aia_completion.bash
105
+ - lib/aia/aia_completion.fish
106
+ - lib/aia/aia_completion.zsh
106
107
  - lib/aia/cli.rb
107
108
  - lib/aia/configuration.rb
108
109
  - lib/aia/external.rb
@@ -116,7 +117,6 @@ files:
116
117
  - lib/aia/external/rg.rb
117
118
  - lib/aia/external/sgpt.rb
118
119
  - lib/aia/external/subl.rb
119
- - lib/aia/external/temp.md
120
120
  - lib/aia/external/tool.rb
121
121
  - lib/aia/external_two.rb
122
122
  - lib/aia/logging.rb
@@ -1,37 +0,0 @@
1
- # bin/aia_completion.sh
2
- # Setup a prompt completion for use with
3
- # aia (a Ruby program) AI Assistant
4
- #
5
-
6
- if [ -z "$PROMPTS_DIR" ]; then
7
- echo "Error: PROMPTS_DIR environment variable is not set"
8
- exit 1
9
- fi
10
-
11
- # SMELL: Is this BASH-only or will it work with other shells?
12
-
13
- # Function to generate prompt completions for aia
14
-
15
- _aia_completion() {
16
- # The current word being completed
17
- local cur_word="${COMP_WORDS[COMP_CWORD]}"
18
-
19
- # Store the previous directory to return to it later
20
- local initial_pwd=$(pwd)
21
-
22
- # Change directory to the prompts directory
23
- cd $PROMPTS_DIR
24
-
25
- # Generate a list of relative paths from the ~/.prompts directory (without .txt extension)
26
- local files=($(find . -name "*.txt" -type f | sed 's|^\./||' | sed 's/\.txt$//'))
27
-
28
- # Change back to the initial directory
29
- cd "$initial_pwd"
30
-
31
- # Generate possible matches and store them in the COMPREPLY array
32
- COMPREPLY=($(compgen -W "${files[*]}" -- "$cur_word"))
33
- }
34
-
35
-
36
- # Register the completion function for the aip command
37
- complete -F _aia_completion aia
@@ -1,37 +0,0 @@
1
- If you want to find out which classes have inherited from a class named `Tool`, you can leverage Ruby's `ObjectSpace` module to iterate through all the classes and select those that are descendants of `Tool`. Here's how you could write the code:
2
-
3
- ```ruby
4
- class Tool
5
- # Tool class implementation
6
- end
7
-
8
- # Other classes that inherit from Tool
9
- class Hammer < Tool; end
10
- class Screwdriver < Tool; end
11
- class Wrench < Tool; end
12
-
13
- # Non-inheriting classes
14
- class RandomClass; end
15
-
16
- def find_descendants_of(klass)
17
- ObjectSpace.each_object(Class).select { |c| c < klass }.map(&:name)
18
- end
19
-
20
- # Get the list of class names that inherit from Tool
21
- descendant_classes = find_descendants_of(Tool)
22
-
23
- # Format the list as markdown (as required)
24
- markdown_list = descendant_classes.map { |name| "- #{name}" }.join("\n")
25
- puts markdown_list
26
- ```
27
-
28
- When you run this code, you will get an output similar to the following (the actual order may vary):
29
-
30
- ```
31
- - Hammer
32
- - Screwdriver
33
- - Wrench
34
- ```
35
-
36
- This list shows the class names that have inherited from the `Tool` class, and it is formatted as a markdown list without enclosing backticks as requested.
37
-