llm-shell 0.9.2 → 0.11.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 +4 -4
- data/LICENSE +21 -0
- data/README.md +24 -165
- data/exe/llm-shell +7 -0
- data/llm-shell.gemspec +26 -36
- metadata +32 -198
- data/bin/llm-shell +0 -21
- data/lib/io/line.rb +0 -26
- data/lib/llm/function.rb +0 -17
- data/lib/llm/shell/command/extension.rb +0 -42
- data/lib/llm/shell/command.rb +0 -88
- data/lib/llm/shell/commands/clear_screen.rb +0 -32
- data/lib/llm/shell/commands/dir_import.rb +0 -49
- data/lib/llm/shell/commands/file_import.rb +0 -41
- data/lib/llm/shell/commands/help.rb +0 -66
- data/lib/llm/shell/commands/show_chat.rb +0 -46
- data/lib/llm/shell/commands/show_version.rb +0 -33
- data/lib/llm/shell/commands/system_prompt.rb +0 -35
- data/lib/llm/shell/commands/utils.rb +0 -21
- data/lib/llm/shell/completion.rb +0 -40
- data/lib/llm/shell/config.rb +0 -35
- data/lib/llm/shell/default.rb +0 -23
- data/lib/llm/shell/formatter.rb +0 -42
- data/lib/llm/shell/functions/read_file.rb +0 -22
- data/lib/llm/shell/functions/write_file.rb +0 -22
- data/lib/llm/shell/markdown.rb +0 -83
- data/lib/llm/shell/options.rb +0 -39
- data/lib/llm/shell/renderer.rb +0 -52
- data/lib/llm/shell/repl.rb +0 -106
- data/lib/llm/shell/version.rb +0 -8
- data/lib/llm/shell.rb +0 -88
- data/lib/llm-shell.rb +0 -3
- data/libexec/llm-shell/shell +0 -45
- data/share/llm-shell/prompts/default.txt +0 -21
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 893a1e0d06613c74c57690458a780c334a30f0e265a3bdfd0e2a17b93f96d8f3
|
|
4
|
+
data.tar.gz: cf2cb67da47f2817fa7c1fa52b491c3564918c228766a915d93b1c1bd2f59f9e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 414008dcde8859de7f6189b75a883c82afc622143fe06bf1cb6a9fc8f60f113f681235224be75f1dd5aa8d62acd9bc921d32f315b2603edbdf3b5081e2033e7f
|
|
7
|
+
data.tar.gz: 2c54a22daf9ad8cb887797027d3012b482f3c782585736268a6bdd7a2eaa0ea22fde3d7ab168769d71d679520d80d9890155d5b675bfa6ef30cd3a154aa23f8d
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Robert Gleeson
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
|
@@ -1,169 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
- 🤖 Builtin auto-complete powered by Readline
|
|
25
|
-
- 🎨 Builtin syntax highlighting powered by Coderay
|
|
26
|
-
- 📄 Deploys the less pager for long outputs
|
|
27
|
-
- 📝 Advanced Markdown formatting and output
|
|
28
|
-
|
|
29
|
-
## Demo
|
|
30
|
-
|
|
31
|
-
<details>
|
|
32
|
-
<summary>Reveal demo</summary>
|
|
33
|
-
<img src="share/llm-shell/examples/demo.gif/">
|
|
34
|
-
</details>
|
|
35
|
-
|
|
36
|
-
<details>
|
|
37
|
-
<summary>Reveal demo</summary>
|
|
38
|
-
<img src="share/llm-shell/examples/demo.png/">
|
|
39
|
-
</details>
|
|
40
|
-
|
|
41
|
-
## Customization
|
|
42
|
-
|
|
43
|
-
#### Functions
|
|
44
|
-
|
|
45
|
-
> For security and safety reasons, a user must confirm the execution of
|
|
46
|
-
> all function calls before they happen
|
|
47
|
-
|
|
48
|
-
llm-shell can be extended with your own functions (also known as tool calls).
|
|
49
|
-
This can be done by creating a Ruby file in the `~/.llm-shell/functions/`
|
|
50
|
-
directory – with one file per function.
|
|
51
|
-
|
|
52
|
-
The functions are loaded at boot time. The functions are shared with
|
|
53
|
-
the LLM and the LLM can request their execution. The LLM is also made
|
|
54
|
-
aware of a function's return value after it has been called.
|
|
55
|
-
See the
|
|
56
|
-
[functions/](lib/llm/shell/functions/)
|
|
57
|
-
directory for more examples:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
```ruby
|
|
61
|
-
LLM.function(:system) do |fn|
|
|
62
|
-
fn.description "Run a shell command"
|
|
63
|
-
fn.params do |schema|
|
|
64
|
-
schema.object(command: schema.string.required)
|
|
65
|
-
end
|
|
66
|
-
fn.define do |command:|
|
|
67
|
-
ro, wo = IO.pipe
|
|
68
|
-
re, we = IO.pipe
|
|
69
|
-
Process.wait Process.spawn(command, out: wo, err: we)
|
|
70
|
-
[wo,we].each(&:close)
|
|
71
|
-
{stderr: re.read, stdout: ro.read}
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
#### Commands
|
|
77
|
-
|
|
78
|
-
llm-shell can be extended with your own console commands. This can be
|
|
79
|
-
done by creating a Ruby file in the `~/.llm-shell/commands/` directory –
|
|
80
|
-
with one file per command. The commands are loaded at boot time.
|
|
81
|
-
See the
|
|
82
|
-
[commands/](lib/llm/shell/commands/)
|
|
83
|
-
directory for more examples:
|
|
84
|
-
|
|
85
|
-
```ruby
|
|
86
|
-
LLM.command "say-hello" do |cmd|
|
|
87
|
-
cmd.description "Say hello to somebody"
|
|
88
|
-
cmd.define do |name|
|
|
89
|
-
io.rewind.print "Hello #{name}!"
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
#### Prompts
|
|
95
|
-
|
|
96
|
-
> It is recommended that custom prompts instruct the LLM to emit markdown,
|
|
97
|
-
> otherwise you might see unexpected results because llm-shell assumes the LLM
|
|
98
|
-
> will emit markdown.
|
|
99
|
-
|
|
100
|
-
The first message in a conversation is sometimes known as a "system prompt",
|
|
101
|
-
and it defines the expectations and rules to be followed by an LLM throughout
|
|
102
|
-
a conversation. The default prompt used by llm-shell can be found at
|
|
103
|
-
[default.txt](share/llm-shell/prompts/default.txt).
|
|
104
|
-
|
|
105
|
-
The prompt can be changed by adding a file to the `~/.llm-shell/prompts/` directory,
|
|
106
|
-
and then choosing it at boot time with the `-r PROMPT`, `--prompt PROMPT` options.
|
|
107
|
-
Generally you probably want to fork [default.txt](share/llm-shell/prompts/default.txt)
|
|
108
|
-
to conserve the original prompt rules around markdown and files, then modify it to
|
|
109
|
-
suit your own needs and preferences.
|
|
110
|
-
|
|
111
|
-
## Settings
|
|
112
|
-
|
|
113
|
-
#### YAML
|
|
114
|
-
|
|
115
|
-
The console client can be configured at the command line through option switches,
|
|
116
|
-
or through a YAML file. The YAML file can contain the same options that could be
|
|
117
|
-
specified at the command line. For cloud providers the key option is the only
|
|
118
|
-
required parameter, everything else has defaults. The YAML file is read from the
|
|
119
|
-
path `${HOME}/.llm-shell/config.yml` and it has the following format:
|
|
120
|
-
|
|
121
|
-
```yaml
|
|
122
|
-
# ~/.config/llm-shell.yml
|
|
123
|
-
openai:
|
|
124
|
-
key: YOURKEY
|
|
125
|
-
gemini:
|
|
126
|
-
key: YOURKEY
|
|
127
|
-
anthropic:
|
|
128
|
-
key: YOURKEY
|
|
129
|
-
xai:
|
|
130
|
-
key: YOURKEY
|
|
131
|
-
deepseek:
|
|
132
|
-
key: YOURKEY
|
|
133
|
-
ollama:
|
|
134
|
-
host: localhost
|
|
135
|
-
model: deepseek-coder:6.7b
|
|
136
|
-
llamacpp:
|
|
137
|
-
host: localhost
|
|
138
|
-
model: qwen3
|
|
139
|
-
tools:
|
|
140
|
-
- system
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
## Usage
|
|
144
|
-
|
|
145
|
-
#### CLI
|
|
146
|
-
|
|
147
|
-
```bash
|
|
148
|
-
Usage: llm-shell [OPTIONS]
|
|
149
|
-
-p, --provider NAME Required. Options: gemini, openai, anthropic, ollama or llamacpp.
|
|
150
|
-
-k, --key [KEY] Optional. Required by gemini, openai, and anthropic.
|
|
151
|
-
-m, --model [MODEL] Optional. The name of a model.
|
|
152
|
-
-h, --host [HOST] Optional. Sometimes required by ollama.
|
|
153
|
-
-o, --port [PORT] Optional. Sometimes required by ollama.
|
|
154
|
-
-f, --files [GLOB] Optional. Glob pattern(s) separated by a comma.
|
|
155
|
-
-r, --prompt [PROMPT] Optional. The prompt to use.
|
|
156
|
-
-v, --version Optional. Print the version and exit
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
## Install
|
|
160
|
-
|
|
161
|
-
llm-shell can be installed via [rubygems.org](https://rubygems.org/gems/llm-shell)
|
|
162
|
-
|
|
163
|
-
gem install llm-shell
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="https://r.uby.dev">
|
|
3
|
+
<img
|
|
4
|
+
src="rubydev.svg"
|
|
5
|
+
width="400"
|
|
6
|
+
height="200"
|
|
7
|
+
border="0"
|
|
8
|
+
alt="a r.uby.dev project"
|
|
9
|
+
>
|
|
10
|
+
</a>
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
> [r.uby.dev](https://r.uby.dev/) project.
|
|
14
|
+
|
|
15
|
+
Welcome to the canonical llm-shell repository.
|
|
16
|
+
|
|
17
|
+
This repository provides a RubyGem that includes
|
|
18
|
+
the [llm.rb](https://github.com/r-uby-dev/llm) runtime
|
|
19
|
+
and the optional dependencies that it requires to
|
|
20
|
+
run the llm.rb console.
|
|
21
|
+
|
|
22
|
+
It is a convenience gem that reduces installing the
|
|
23
|
+
llm.rb console to a single line: `gem install llm-shell`.
|
|
164
24
|
|
|
165
25
|
## License
|
|
166
26
|
|
|
167
|
-
|
|
168
|
-
<br>
|
|
27
|
+
MIT. <br>
|
|
169
28
|
See [LICENSE](./LICENSE)
|
data/exe/llm-shell
ADDED
data/llm-shell.gemspec
CHANGED
|
@@ -1,46 +1,36 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative "lib/llm/shell/version"
|
|
4
|
-
|
|
5
3
|
Gem::Specification.new do |spec|
|
|
6
4
|
spec.name = "llm-shell"
|
|
7
|
-
spec.version =
|
|
8
|
-
spec.authors = ["
|
|
9
|
-
spec.email = ["
|
|
5
|
+
spec.version = "0.11.0"
|
|
6
|
+
spec.authors = ["Robert Gleeson"]
|
|
7
|
+
spec.email = ["robert@r.uby.dev"]
|
|
8
|
+
|
|
9
|
+
spec.summary = "The llm.rb console in a single RubyGem"
|
|
10
|
+
spec.description = <<~DESCRIPTION
|
|
11
|
+
The llm.rb console distributed as a single RubyGem that includes the optional
|
|
12
|
+
llm.rb dependencies. It is a convenience gem that reduces installing the
|
|
13
|
+
llm.rb console to a single line: `gem install llm-shell`.
|
|
14
|
+
DESCRIPTION
|
|
10
15
|
|
|
11
|
-
spec.
|
|
12
|
-
|
|
13
|
-
"Large Language Models (LLMs)."
|
|
14
|
-
spec.description = spec.summary
|
|
15
|
-
spec.homepage = "https://github.com/llmrb/llm-shell"
|
|
16
|
-
spec.license = "0BSD"
|
|
17
|
-
spec.required_ruby_version = ">= 3.2"
|
|
16
|
+
spec.license = "MIT"
|
|
17
|
+
spec.required_ruby_version = ">= 3.3.0"
|
|
18
18
|
|
|
19
|
+
spec.homepage = "https://r.uby.dev"
|
|
19
20
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
20
|
-
spec.metadata["source_code_uri"] =
|
|
21
|
+
spec.metadata["source_code_uri"] = "https://github.com/r-uby-dev/llm-shell"
|
|
22
|
+
spec.metadata["documentation_uri"] = spec.homepage
|
|
21
23
|
|
|
22
|
-
spec.files = Dir[
|
|
23
|
-
|
|
24
|
-
"lib/*.rb", "lib/**/*.rb",
|
|
25
|
-
"libexec/*", "libexec/**/*",
|
|
26
|
-
"share/llm-shell/prompts/*",
|
|
27
|
-
"bin/*", "llm-shell.gemspec"
|
|
28
|
-
]
|
|
29
|
-
spec.require_paths = ["lib"]
|
|
24
|
+
spec.files = Dir["LICENSE", "README.md", "llm-shell.gemspec", "exe/llm-shell"]
|
|
25
|
+
spec.bindir = "exe"
|
|
30
26
|
spec.executables = ["llm-shell"]
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
spec.add_dependency "
|
|
36
|
-
spec.
|
|
37
|
-
spec.
|
|
38
|
-
spec.
|
|
39
|
-
spec.
|
|
40
|
-
spec.add_development_dependency "test-cmd.rb", "~> 0.12.0"
|
|
41
|
-
spec.add_development_dependency "rake", "~> 13.0"
|
|
42
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
|
43
|
-
spec.add_development_dependency "standard", "~> 1.40"
|
|
44
|
-
spec.add_development_dependency "vcr", "~> 6.0"
|
|
45
|
-
spec.add_development_dependency "dotenv", "~> 2.8"
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
# The dependencies that are required to run
|
|
30
|
+
# the llm.rb console
|
|
31
|
+
spec.add_dependency "llm.rb", "~> 15.3"
|
|
32
|
+
spec.add_dependency "test-cmd.rb", "~> 2.7"
|
|
33
|
+
spec.add_dependency "curses", "~> 1.7"
|
|
34
|
+
spec.add_dependency "kramdown", "~> 2.5"
|
|
35
|
+
spec.add_dependency "unicode-display_width", "~> 3.2"
|
|
46
36
|
end
|
metadata
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: llm-shell
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.11.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
bindir: bin
|
|
7
|
+
- Robert Gleeson
|
|
8
|
+
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
@@ -16,256 +15,92 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '15.3'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
25
|
+
version: '15.3'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
27
|
+
name: test-cmd.rb
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
30
|
- - "~>"
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '2.
|
|
32
|
+
version: '2.7'
|
|
34
33
|
type: :runtime
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - "~>"
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '2.
|
|
39
|
+
version: '2.7'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
41
|
+
name: curses
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
44
43
|
requirements:
|
|
45
44
|
- - "~>"
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
46
|
+
version: '1.7'
|
|
48
47
|
type: :runtime
|
|
49
48
|
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - "~>"
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
53
|
+
version: '1.7'
|
|
55
54
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
55
|
+
name: kramdown
|
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
|
58
57
|
requirements:
|
|
59
58
|
- - "~>"
|
|
60
59
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
60
|
+
version: '2.5'
|
|
62
61
|
type: :runtime
|
|
63
62
|
prerelease: false
|
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
64
|
requirements:
|
|
66
65
|
- - "~>"
|
|
67
66
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
67
|
+
version: '2.5'
|
|
69
68
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
69
|
+
name: unicode-display_width
|
|
71
70
|
requirement: !ruby/object:Gem::Requirement
|
|
72
71
|
requirements:
|
|
73
72
|
- - "~>"
|
|
74
73
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
74
|
+
version: '3.2'
|
|
76
75
|
type: :runtime
|
|
77
76
|
prerelease: false
|
|
78
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
78
|
requirements:
|
|
80
79
|
- - "~>"
|
|
81
80
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: 3.24.0
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: 3.24.0
|
|
97
|
-
- !ruby/object:Gem::Dependency
|
|
98
|
-
name: yard
|
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
|
100
|
-
requirements:
|
|
101
|
-
- - "~>"
|
|
102
|
-
- !ruby/object:Gem::Version
|
|
103
|
-
version: 0.9.37
|
|
104
|
-
type: :development
|
|
105
|
-
prerelease: false
|
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
-
requirements:
|
|
108
|
-
- - "~>"
|
|
109
|
-
- !ruby/object:Gem::Version
|
|
110
|
-
version: 0.9.37
|
|
111
|
-
- !ruby/object:Gem::Dependency
|
|
112
|
-
name: kramdown
|
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
|
114
|
-
requirements:
|
|
115
|
-
- - "~>"
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: '2.4'
|
|
118
|
-
type: :development
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
requirements:
|
|
122
|
-
- - "~>"
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: '2.4'
|
|
125
|
-
- !ruby/object:Gem::Dependency
|
|
126
|
-
name: webrick
|
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
|
128
|
-
requirements:
|
|
129
|
-
- - "~>"
|
|
130
|
-
- !ruby/object:Gem::Version
|
|
131
|
-
version: '1.8'
|
|
132
|
-
type: :development
|
|
133
|
-
prerelease: false
|
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
-
requirements:
|
|
136
|
-
- - "~>"
|
|
137
|
-
- !ruby/object:Gem::Version
|
|
138
|
-
version: '1.8'
|
|
139
|
-
- !ruby/object:Gem::Dependency
|
|
140
|
-
name: test-cmd.rb
|
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
|
142
|
-
requirements:
|
|
143
|
-
- - "~>"
|
|
144
|
-
- !ruby/object:Gem::Version
|
|
145
|
-
version: 0.12.0
|
|
146
|
-
type: :development
|
|
147
|
-
prerelease: false
|
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
-
requirements:
|
|
150
|
-
- - "~>"
|
|
151
|
-
- !ruby/object:Gem::Version
|
|
152
|
-
version: 0.12.0
|
|
153
|
-
- !ruby/object:Gem::Dependency
|
|
154
|
-
name: rake
|
|
155
|
-
requirement: !ruby/object:Gem::Requirement
|
|
156
|
-
requirements:
|
|
157
|
-
- - "~>"
|
|
158
|
-
- !ruby/object:Gem::Version
|
|
159
|
-
version: '13.0'
|
|
160
|
-
type: :development
|
|
161
|
-
prerelease: false
|
|
162
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
-
requirements:
|
|
164
|
-
- - "~>"
|
|
165
|
-
- !ruby/object:Gem::Version
|
|
166
|
-
version: '13.0'
|
|
167
|
-
- !ruby/object:Gem::Dependency
|
|
168
|
-
name: rspec
|
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
|
170
|
-
requirements:
|
|
171
|
-
- - "~>"
|
|
172
|
-
- !ruby/object:Gem::Version
|
|
173
|
-
version: '3.0'
|
|
174
|
-
type: :development
|
|
175
|
-
prerelease: false
|
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
-
requirements:
|
|
178
|
-
- - "~>"
|
|
179
|
-
- !ruby/object:Gem::Version
|
|
180
|
-
version: '3.0'
|
|
181
|
-
- !ruby/object:Gem::Dependency
|
|
182
|
-
name: standard
|
|
183
|
-
requirement: !ruby/object:Gem::Requirement
|
|
184
|
-
requirements:
|
|
185
|
-
- - "~>"
|
|
186
|
-
- !ruby/object:Gem::Version
|
|
187
|
-
version: '1.40'
|
|
188
|
-
type: :development
|
|
189
|
-
prerelease: false
|
|
190
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
-
requirements:
|
|
192
|
-
- - "~>"
|
|
193
|
-
- !ruby/object:Gem::Version
|
|
194
|
-
version: '1.40'
|
|
195
|
-
- !ruby/object:Gem::Dependency
|
|
196
|
-
name: vcr
|
|
197
|
-
requirement: !ruby/object:Gem::Requirement
|
|
198
|
-
requirements:
|
|
199
|
-
- - "~>"
|
|
200
|
-
- !ruby/object:Gem::Version
|
|
201
|
-
version: '6.0'
|
|
202
|
-
type: :development
|
|
203
|
-
prerelease: false
|
|
204
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
-
requirements:
|
|
206
|
-
- - "~>"
|
|
207
|
-
- !ruby/object:Gem::Version
|
|
208
|
-
version: '6.0'
|
|
209
|
-
- !ruby/object:Gem::Dependency
|
|
210
|
-
name: dotenv
|
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
|
212
|
-
requirements:
|
|
213
|
-
- - "~>"
|
|
214
|
-
- !ruby/object:Gem::Version
|
|
215
|
-
version: '2.8'
|
|
216
|
-
type: :development
|
|
217
|
-
prerelease: false
|
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
219
|
-
requirements:
|
|
220
|
-
- - "~>"
|
|
221
|
-
- !ruby/object:Gem::Version
|
|
222
|
-
version: '2.8'
|
|
223
|
-
description: llm-shell is an extensible, developer-oriented command-line console that
|
|
224
|
-
can interact with multiple Large Language Models (LLMs).
|
|
81
|
+
version: '3.2'
|
|
82
|
+
description: |
|
|
83
|
+
The llm.rb console distributed as a single RubyGem that includes the optional
|
|
84
|
+
llm.rb dependencies. It is a convenience gem that reduces installing the
|
|
85
|
+
llm.rb console to a single line: `gem install llm-shell`.
|
|
225
86
|
email:
|
|
226
|
-
-
|
|
227
|
-
- 0x1eef@proton.me
|
|
87
|
+
- robert@r.uby.dev
|
|
228
88
|
executables:
|
|
229
89
|
- llm-shell
|
|
230
90
|
extensions: []
|
|
231
91
|
extra_rdoc_files: []
|
|
232
92
|
files:
|
|
93
|
+
- LICENSE
|
|
233
94
|
- README.md
|
|
234
|
-
-
|
|
235
|
-
- lib/io/line.rb
|
|
236
|
-
- lib/llm-shell.rb
|
|
237
|
-
- lib/llm/function.rb
|
|
238
|
-
- lib/llm/shell.rb
|
|
239
|
-
- lib/llm/shell/command.rb
|
|
240
|
-
- lib/llm/shell/command/extension.rb
|
|
241
|
-
- lib/llm/shell/commands/clear_screen.rb
|
|
242
|
-
- lib/llm/shell/commands/dir_import.rb
|
|
243
|
-
- lib/llm/shell/commands/file_import.rb
|
|
244
|
-
- lib/llm/shell/commands/help.rb
|
|
245
|
-
- lib/llm/shell/commands/show_chat.rb
|
|
246
|
-
- lib/llm/shell/commands/show_version.rb
|
|
247
|
-
- lib/llm/shell/commands/system_prompt.rb
|
|
248
|
-
- lib/llm/shell/commands/utils.rb
|
|
249
|
-
- lib/llm/shell/completion.rb
|
|
250
|
-
- lib/llm/shell/config.rb
|
|
251
|
-
- lib/llm/shell/default.rb
|
|
252
|
-
- lib/llm/shell/formatter.rb
|
|
253
|
-
- lib/llm/shell/functions/read_file.rb
|
|
254
|
-
- lib/llm/shell/functions/write_file.rb
|
|
255
|
-
- lib/llm/shell/markdown.rb
|
|
256
|
-
- lib/llm/shell/options.rb
|
|
257
|
-
- lib/llm/shell/renderer.rb
|
|
258
|
-
- lib/llm/shell/repl.rb
|
|
259
|
-
- lib/llm/shell/version.rb
|
|
260
|
-
- libexec/llm-shell/shell
|
|
95
|
+
- exe/llm-shell
|
|
261
96
|
- llm-shell.gemspec
|
|
262
|
-
|
|
263
|
-
homepage: https://github.com/llmrb/llm-shell
|
|
97
|
+
homepage: https://r.uby.dev
|
|
264
98
|
licenses:
|
|
265
|
-
-
|
|
99
|
+
- MIT
|
|
266
100
|
metadata:
|
|
267
|
-
homepage_uri: https://
|
|
268
|
-
source_code_uri: https://github.com/
|
|
101
|
+
homepage_uri: https://r.uby.dev
|
|
102
|
+
source_code_uri: https://github.com/r-uby-dev/llm-shell
|
|
103
|
+
documentation_uri: https://r.uby.dev
|
|
269
104
|
rdoc_options: []
|
|
270
105
|
require_paths:
|
|
271
106
|
- lib
|
|
@@ -273,15 +108,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
273
108
|
requirements:
|
|
274
109
|
- - ">="
|
|
275
110
|
- !ruby/object:Gem::Version
|
|
276
|
-
version:
|
|
111
|
+
version: 3.3.0
|
|
277
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
278
113
|
requirements:
|
|
279
114
|
- - ">="
|
|
280
115
|
- !ruby/object:Gem::Version
|
|
281
116
|
version: '0'
|
|
282
117
|
requirements: []
|
|
283
|
-
rubygems_version:
|
|
118
|
+
rubygems_version: 4.0.16
|
|
284
119
|
specification_version: 4
|
|
285
|
-
summary: llm
|
|
286
|
-
can interact with multiple Large Language Models (LLMs).
|
|
120
|
+
summary: The llm.rb console in a single RubyGem
|
|
287
121
|
test_files: []
|
data/bin/llm-shell
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
def wait
|
|
5
|
-
Process.wait
|
|
6
|
-
rescue Interrupt
|
|
7
|
-
retry
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def libexec
|
|
11
|
-
File.realpath File.join(__dir__, "..", "libexec", "llm-shell")
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def main(argv)
|
|
15
|
-
Process.spawn File.join(libexec, "shell"), *ARGV[0..]
|
|
16
|
-
Process.wait
|
|
17
|
-
rescue Interrupt
|
|
18
|
-
wait
|
|
19
|
-
end
|
|
20
|
-
main(ARGV)
|
|
21
|
-
exit $?&.exitstatus || 1
|
data/lib/io/line.rb
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class IO::Line
|
|
4
|
-
require "io/console"
|
|
5
|
-
|
|
6
|
-
attr_reader :io
|
|
7
|
-
|
|
8
|
-
def initialize(io)
|
|
9
|
-
@io = io
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def print(*strs)
|
|
13
|
-
tap { @io.print(strs.join.gsub($/, "")) }
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def end
|
|
17
|
-
tap { @io.print($/) }
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def rewind
|
|
21
|
-
tap do
|
|
22
|
-
@io.erase_line(2)
|
|
23
|
-
@io.goto_column(0)
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|