ollama_chat 0.0.93 → 0.0.95

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +117 -42
  3. data/LICENSE +21 -0
  4. data/README.md +10 -6
  5. data/lib/ollama_chat/chat.rb +1 -0
  6. data/lib/ollama_chat/commands.rb +156 -38
  7. data/lib/ollama_chat/information.rb +0 -4
  8. data/lib/ollama_chat/input_content.rb +1 -1
  9. data/lib/ollama_chat/oc.rb +0 -7
  10. data/lib/ollama_chat/ollama_chat_config/default_config.yml +1 -1
  11. data/lib/ollama_chat/parsing.rb +50 -21
  12. data/lib/ollama_chat/personae_management.rb +4 -4
  13. data/lib/ollama_chat/rag_handling.rb +2 -2
  14. data/lib/ollama_chat/session_management.rb +1 -3
  15. data/lib/ollama_chat/state_selectors.rb +1 -1
  16. data/lib/ollama_chat/tool_calling.rb +2 -2
  17. data/lib/ollama_chat/tools/compute_bmi.rb +0 -2
  18. data/lib/ollama_chat/tools/roll_dice.rb +10 -1
  19. data/lib/ollama_chat/utils/chooser.rb +2 -2
  20. data/lib/ollama_chat/utils/png_metadata_extractor.rb +111 -0
  21. data/lib/ollama_chat/utils/utf8_converter.rb +13 -0
  22. data/lib/ollama_chat/utils.rb +2 -1
  23. data/lib/ollama_chat/version.rb +1 -1
  24. data/lib/ollama_chat/web_searching.rb +4 -1
  25. data/ollama_chat.gemspec +5 -5
  26. data/spec/assets/miyu.png +0 -0
  27. data/spec/ollama_chat/parsing_spec.rb +1 -1
  28. data/spec/ollama_chat/state_selectors_spec.rb +1 -1
  29. data/spec/ollama_chat/tool_calling_spec.rb +202 -0
  30. data/spec/ollama_chat/tools/directory_structure_spec.rb +1 -1
  31. data/spec/ollama_chat/tools/roll_dice_spec.rb +6 -1
  32. data/spec/ollama_chat/utils/png_metadata_extractor_spec.rb +122 -0
  33. metadata +11 -5
  34. data/lib/ollama_chat/utils/png_character_extractor.rb +0 -65
  35. data/spec/ollama_chat/utils/png_character_extractor_spec.rb +0 -61
@@ -190,13 +190,6 @@ module OC
190
190
  decode { Pathname.new(_1).expand_path }
191
191
  end
192
192
 
193
- PATCH_TOOL = set do
194
- description 'Patch tool to use'
195
-
196
- default { `which patch`.full?(:chomp) }
197
- check { value.blank? || File.exist?(value) }
198
- end
199
-
200
193
  GHR_URL = set do
201
194
  description 'Base URL for GHR api server, e. g. https://ghr.example.com'
202
195
  sensitive true
@@ -402,7 +402,7 @@ tools:
402
402
  timeout_duration: 66
403
403
  roll_dice:
404
404
  default: true
405
- result_display_timeout: 3
405
+ result_display_timeout: 10
406
406
  get_ghr:
407
407
  default: true
408
408
  result_display_timeout: 3
@@ -52,11 +52,9 @@ module OllamaChat::Parsing
52
52
  when 'application/pdf'
53
53
  pdf_read(source_io)
54
54
  when 'image/png'
55
- if character = parse_character_json(source_io)
56
- "Parsed character profile\n\n%s" % character
57
- else
58
- STDERR.puts "Could not parse character profile from #{source_io&.content_type} document."
59
- end
55
+ results = parse_png(source_io) and return results.join("\n\n---\n\n")
56
+ STDERR.puts "Could not parse metadata from #{source_io&.content_type} document."
57
+ nil
60
58
  when %r(\Aapplication/(json|ld\+json|x-ruby|x-perl|x-gawk|x-python|x-javascript|x-c?sh|x-dosexec|x-shellscript|x-tex|x-latex|x-lyx|x-bibtex)), %r(\Atext/), nil
61
59
  source_io.read
62
60
  else
@@ -65,6 +63,45 @@ module OllamaChat::Parsing
65
63
  end
66
64
  end
67
65
 
66
+ # Extracts embedded metadata from a PNG image, including character profiles,
67
+ # prompts, and workflows. Character profiles are automatically personalized
68
+ # to replace placeholders with the current user's name.
69
+ #
70
+ # @param source_io [IO] The input stream containing the PNG binary data.
71
+ #
72
+ # @return [Array<String>, nil] An array of formatted metadata sections (as
73
+ # strings) if any were found, or nil if no supported metadata was extracted.
74
+ def parse_png(source_io)
75
+ metadata = OllamaChat::Utils::PNGMetadataExtractor.extract_all(source_io) or return
76
+ results = []
77
+
78
+ if data = metadata.delete('chara') and
79
+ char = OllamaChat::Utils::PNGMetadataExtractor.decode_character(data)
80
+ then
81
+ results << "Character Profile:\n\n#{personalize_character_profile(char)}"
82
+ end
83
+
84
+ if data = metadata.delete('parameters') and
85
+ params = OllamaChat::Utils::PNGMetadataExtractor.parse_a1111_parameters(data)
86
+ then
87
+ results << "Generation Settings:\n\n#{params.to_json}"
88
+ end
89
+
90
+ if data = convert_to_utf8(metadata.delete('prompt'))
91
+ results << "Prompt:\n\n#{data}"
92
+ end
93
+
94
+ if data = convert_to_utf8(metadata.delete('workflow'))
95
+ results << "Workflow:\n\n#{data}"
96
+ end
97
+
98
+ if data = metadata.full? { _1.transform_values { |v| convert_to_utf8(v) } }
99
+ results << "Metadata:\n\n#{data}"
100
+ end
101
+
102
+ results.full?
103
+ end
104
+
68
105
  # The parse_rss method processes an RSS feed source and converts it into a
69
106
  # formatted text representation.
70
107
  # It extracts the channel title and iterates through each item in the feed to
@@ -185,21 +222,13 @@ module OllamaChat::Parsing
185
222
  )
186
223
  end
187
224
 
188
- # Extracts and parses a character profile from a PNG image.
189
- #
190
- # Replaces the `{{user}}` placeholder with the current user's name or a
191
- # default string if the name is unavailable.
225
+ # Personalizes a character profile by replacing the {{user}} placeholder.
192
226
  #
193
- # @param io [IO] the input stream containing the PNG data
194
- # @return [String, nil] the parsed and personalized character profile, or nil
195
- # if extraction fails
196
- def parse_character_json(io)
197
- char = OllamaChat::Utils::PNGCharacterExtractor.extract_character_json(io) or return
198
- if user_name
199
- char.gsub('{{user}}', user_name)
200
- else
201
- char.gsub('{{user}}', 'the user')
202
- end
227
+ # @param char [String] The raw character JSON string.
228
+ # @return [String] The personalized character profile.
229
+ def personalize_character_profile(char)
230
+ name = user_name || 'the user'
231
+ char.gsub('{{user}}', name)
203
232
  end
204
233
 
205
234
  # Regular expression to scan content for url/file references
@@ -257,8 +286,8 @@ module OllamaChat::Parsing
257
286
  add_image(images, source_io, source)
258
287
  if source_io&.content_type&.sub_type == 'png'
259
288
  source_io.rewind
260
- if character = parse_character_json(source_io)
261
- contents << "Extracted character profile from %s\n\n%s" % [ source, character ]
289
+ if results = parse_png(source_io)
290
+ contents.concat results
262
291
  end
263
292
  end
264
293
  when 'text', 'application', nil
@@ -1,4 +1,4 @@
1
- # Module for managing personas in Ollama chat application
1
+ # Module for managing personae in Ollama chat application
2
2
  #
3
3
  # This module provides functionality to manage persona files, including
4
4
  # creating, reading, updating, and deleting persona definitions stored as
@@ -156,7 +156,7 @@ module OllamaChat::PersonaeManagement
156
156
  SearchUI::Wrapper.new(name, display:)
157
157
  end
158
158
 
159
- # Retrieves a list of available personas, decorated with their favourite
159
+ # Retrieves a list of available personae, decorated with their favourite
160
160
  # status.
161
161
  #
162
162
  # @return [Array<SearchUI::Wrapper>] a list of wrappers containing the
@@ -172,7 +172,7 @@ module OllamaChat::PersonaeManagement
172
172
  # Creates a new persona file interactively.
173
173
  #
174
174
  # The method prompts the user to enter a name for the persona, creates an
175
- # empty Markdown file with that name in the personas directory (if it does
175
+ # empty Markdown file with that name in the personae directory (if it does
176
176
  # not already exist), opens the file in the configured editor, and finally
177
177
  # returns the result of calling `#personae_result` on the created file.
178
178
  def add_persona
@@ -372,7 +372,7 @@ module OllamaChat::PersonaeManagement
372
372
  # Allows the user to choose a persona from available options or exit.
373
373
  # Selected persona is returned if successful, nil if user exits.
374
374
  #
375
- # @param chosen [Set, nil] Optional set of already selected personas
375
+ # @param chosen [Set, nil] Optional set of already selected personae
376
376
  # @param none [Boolean] whether to include a '[NONE]' option in the list
377
377
  # @param prompt [String] the prompt message to display when asking for input
378
378
  # (default: 'Select a persona: ')
@@ -44,7 +44,7 @@ module OllamaChat::RAGHandling
44
44
  tags = @documents.tags.to_a.unshift('[ALL]').unshift('[EXIT]')
45
45
  tag = choose_entry(
46
46
  tags,
47
- prompt: 'What obsolete records are to be excised from the annals? '
47
+ prompt: 'What obsolete records are to be excised from the annals? %s'
48
48
  )
49
49
  case tag
50
50
  when nil, '[EXIT]'
@@ -85,7 +85,7 @@ module OllamaChat::RAGHandling
85
85
  collections.unshift('[EXIT]').unshift('[NEW]')
86
86
  collection = choose_entry(
87
87
  collections,
88
- prompt: 'Which archive of knowledge shall we delve into?'
88
+ prompt: 'Which archive of knowledge shall we delve into? %s'
89
89
  ) || current_collection
90
90
  case collection&.to_s
91
91
  when '[NEW]'
@@ -153,7 +153,7 @@ module OllamaChat::SessionManagement
153
153
  prompt: "❓ Enter new session name #{action}, C-c ⇒ cancel: ",
154
154
  prefill: default_name
155
155
  )
156
- if session_name.nil?
156
+ if session_name.blank?
157
157
  STDOUT.puts "Cancelled."
158
158
  return nil
159
159
  end
@@ -200,8 +200,6 @@ module OllamaChat::SessionManagement
200
200
  # This method creates a copy of the current session's attributes and
201
201
  # prompts the user for a new name and whether to clear the duplicated
202
202
  # session's message history.
203
- #
204
- # @return [nil]
205
203
  def duplicate_session
206
204
  name = determine_valid_new_name_for_session(
207
205
  'to create', default_name: session.name
@@ -92,7 +92,7 @@ module OllamaChat::StateSelectors
92
92
 
93
93
  chosen = choose_entry(
94
94
  states,
95
- prompt: 'Which operational paradigm should be engaged?'
95
+ prompt: 'Which operational paradigm should be engaged? %s'
96
96
  )
97
97
  case chosen
98
98
  when '[EXIT]', nil
@@ -54,7 +54,7 @@ module OllamaChat::ToolCalling
54
54
  #
55
55
  # @return [ Hash ] a hash containing the registered tools
56
56
  def tools
57
- @tools_support.off? and return []
57
+ tools_support.off? and return []
58
58
  enabled_tools.filter_map { OllamaChat::Tools.registered[it]&.to_hash }
59
59
  end
60
60
 
@@ -186,7 +186,7 @@ module OllamaChat::ToolCalling
186
186
  select { |name, value| tool_enabled?(name) && value[:allowed].present? }.
187
187
  sort_by(&:first).
188
188
  each_with_object({}) do |(name, value), hash|
189
- hash[name] = value[:allowed].filter_map do
189
+ hash[name.to_s] = value[:allowed].filter_map do
190
190
  pathname = Pathname.new(_1).expand_path
191
191
  pathname.exist?.full? { pathname.to_path }
192
192
  end
@@ -1,5 +1,3 @@
1
- require 'json'
2
-
3
1
  # A tool for calculating Body Mass Index (BMI) with support for different unit
4
2
  # systems.
5
3
  #
@@ -66,11 +66,20 @@ class OllamaChat::Tools::RollDice
66
66
  rolls = count.times.map { rand(1..sides) }
67
67
  total = rolls.sum + modifier
68
68
 
69
+ message = "Dice roll was: %s = (%s)" % [ dice, rolls * ' + ' ]
70
+ if modifier > 0
71
+ message << " + %u" % modifier
72
+ elsif modifier < 0
73
+ message << " - %u" % -modifier
74
+ end
75
+ message << " = %u" % total
76
+
69
77
  {
70
78
  dice:,
71
79
  rolls:,
72
80
  modifier:,
73
- total: total
81
+ total: total,
82
+ message:
74
83
  }.to_json
75
84
  rescue => e
76
85
  { error: e.class, message: e.message }.to_json
@@ -12,7 +12,7 @@ require 'term/ansicolor'
12
12
  #
13
13
  # @example Using the chooser in an interactive menu
14
14
  # entries = ['apple', 'banana', 'cherry']
15
- # selected = choose_entry(entries, prompt: 'Choose a fruit:')
15
+ # selected = choose_entry(entries, prompt: 'Choose a fruit: %s')
16
16
  #
17
17
  # @example Returning immediately if only one entry exists
18
18
  # entries = ['single_option']
@@ -37,7 +37,7 @@ module OllamaChat::Utils::Chooser
37
37
  # @return [Object] the selected entry, or nil if no entry was chosen
38
38
  #
39
39
  # @example
40
- # choose_entry(['entry1', 'entry2'], prompt: 'Choose an option:')
40
+ # choose_entry(['entry1', 'entry2'], prompt: 'Choose an option: %s')
41
41
  def choose_entry(entries, prompt: 'Search? %s', return_immediately: false)
42
42
  if return_immediately && entries.size <= 1
43
43
  return entries.first
@@ -0,0 +1,111 @@
1
+ require 'base64'
2
+
3
+ # Extracts embedded metadata from PNG image files, such as character profiles,
4
+ # ComfyUI workflows, and prompts stored in 'tEXt' chunks.
5
+ module OllamaChat::Utils::PNGMetadataExtractor
6
+ include OllamaChat::Utils::UTF8Converter
7
+ extend OllamaChat::Utils::UTF8Converter
8
+
9
+ module_function
10
+
11
+ # Extracts all 'tEXt' chunk metadata from the provided IO object.
12
+ #
13
+ # @param io [IO] An IO-like object providing access to the PNG binary data.
14
+ # @return [Hash, nil] A hash of { keyword => text } if a valid PNG is found,
15
+ # otherwise nil.
16
+ def extract_all(io)
17
+ data = if io.respond_to?(:binmode)
18
+ io.binmode
19
+ io.read
20
+ elsif io.respond_to?(:binread)
21
+ io.binread
22
+ else
23
+ return nil
24
+ end
25
+
26
+ # PNG Signature is 8 bytes: \x89PNG\r\n\x1a\n
27
+ pos = 8
28
+ metadata = {}
29
+
30
+ while pos < data.length
31
+ # 1. Read Length (4 bytes, Big Endian)
32
+ length = data[pos, 4]&.unpack1('L>')
33
+ break unless length
34
+
35
+ pos += 4
36
+
37
+ # 2. Read Chunk Type (4 bytes)
38
+ type = data[pos, 4]
39
+ pos += 4
40
+
41
+ # 3. Read Chunk Data
42
+ chunk_data = data[pos, length]
43
+ pos += length
44
+
45
+ # 4. Skip CRC (4 bytes)
46
+ pos += 4
47
+
48
+ if type == 'tEXt'
49
+ # tEXt chunks are formatted as: Keyword + NULL Byte + Text
50
+ keyword, text = chunk_data.split("\x00", 2)
51
+ metadata[keyword] = text if keyword
52
+ end
53
+ end
54
+
55
+ metadata.empty? ? nil : metadata
56
+ ensure
57
+ io.ask_and_send(:rewind)
58
+ end
59
+
60
+ # Decodes a Base64 encoded character profile and validates it as JSON.
61
+ #
62
+ # @param text [String] The raw 'chara' metadata value.
63
+ # @return [String, nil] The decoded JSON string if valid, otherwise nil.
64
+ def decode_character(text)
65
+ return nil unless text
66
+
67
+ begin
68
+ decoded = Base64.decode64(text)
69
+ decoded = convert_to_utf8(decoded)
70
+ JSON.parse(decoded) # Validation check
71
+ decoded
72
+ rescue JSON::ParserError, ArgumentError
73
+ nil
74
+ end
75
+ end
76
+
77
+ # Parses Automatic1111 / Stable Diffusion WebUI parameters metadata.
78
+ #
79
+ # @param text [String] The raw 'parameters' metadata value.
80
+ # @return [Hash, nil] A hash containing :prompt, :negative_prompt, and :settings.
81
+ def parse_a1111_parameters(text)
82
+ text or return
83
+
84
+ lines = text.split("\n")
85
+ result = { prompt: lines[0], negative_prompt: nil, settings: {} }
86
+
87
+ lines[1..].each do |line|
88
+ if line.start_with?('Negative prompt: ')
89
+ result[:negative_prompt] = line.sub('Negative prompt: ', '')
90
+ else
91
+ # Parse comma-separated key-value pairs (e.g., "Steps: 20, Sampler: Euler")
92
+ line.split(', ').each do |pair|
93
+ key, value = pair.split(': ', 2)
94
+ result[:settings][key.downcase.to_sym] = value if key && value
95
+ end
96
+ end
97
+ end
98
+
99
+ result
100
+ end
101
+
102
+ # Convenience method to extract a character profile from a PNG.
103
+ # Maintained for backward compatibility with existing call sites.
104
+ #
105
+ # @param io [IO] An IO-like object providing access to the PNG binary data.
106
+ # @return [String, nil] The decoded JSON string if found and valid, otherwise nil.
107
+ def extract_character(io)
108
+ metadata = extract_all(io) or return
109
+ decode_character(metadata['chara'])
110
+ end
111
+ end
@@ -0,0 +1,13 @@
1
+ # A utility module for converting strings to UTF-8 encoding. This module
2
+ # provides methods to ensure text is properly encoded as UTF-8, replacing
3
+ # invalid or undefined characters to prevent encoding errors.
4
+ module OllamaChat::Utils::UTF8Converter
5
+ # Converts the given text to UTF-8 encoding, replacing invalid or undefined
6
+ # characters.
7
+ #
8
+ # @param text [String, nil] the text to be converted if any
9
+ # @return [String, nil] the UTF-8 encoded string or nil
10
+ def convert_to_utf8(text)
11
+ text&.encode('UTF-8', invalid: :replace, undef: :replace)
12
+ end
13
+ end
@@ -9,6 +9,7 @@
9
9
  module OllamaChat::Utils
10
10
  end
11
11
 
12
+ require 'ollama_chat/utils/utf8_converter'
12
13
  require 'ollama_chat/utils/analyze_directory'
13
14
  require 'ollama_chat/utils/backup'
14
15
  require 'ollama_chat/utils/cache_fetcher'
@@ -17,7 +18,7 @@ require 'ollama_chat/utils/fetcher'
17
18
  require 'ollama_chat/utils/json_jsonl_io'
18
19
  require 'ollama_chat/utils/path_completer'
19
20
  require 'ollama_chat/utils/path_validator'
20
- require 'ollama_chat/utils/png_character_extractor'
21
+ require 'ollama_chat/utils/png_metadata_extractor'
21
22
  require 'ollama_chat/utils/tag_resolver'
22
23
  require 'ollama_chat/utils/token_estimator'
23
24
  require 'ollama_chat/utils/value_formatter'
@@ -1,6 +1,6 @@
1
1
  module OllamaChat
2
2
  # OllamaChat version
3
- VERSION = '0.0.93'
3
+ VERSION = '0.0.95'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -108,7 +108,10 @@ module OllamaChat::WebSearching
108
108
  choose_with_state do
109
109
  loop do
110
110
  links_options = links.to_a.unshift('[ALL]').unshift('[EXIT]')
111
- link = choose_entry(links_options, prompt: 'Clear? %s')
111
+ link = choose_entry(
112
+ links_options,
113
+ prompt: 'Which links of knowledge shall we sever? %s'
114
+ )
112
115
  case link
113
116
  when nil, '[EXIT]'
114
117
  STDOUT.puts "Exiting chooser."
data/ollama_chat.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: ollama_chat 0.0.93 ruby lib
2
+ # stub: ollama_chat 0.0.95 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "ollama_chat".freeze
6
- s.version = "0.0.93".freeze
6
+ s.version = "0.0.95".freeze
7
7
 
8
8
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
@@ -12,15 +12,15 @@ Gem::Specification.new do |s|
12
12
  s.description = "The app provides a command-line interface (CLI) to an Ollama AI model,\nallowing users to engage in text-based conversations and generate\nhuman-like responses. Users can import data from local files or web pages,\nwhich are then processed through three different modes: fully importing the\ncontent into the conversation context, summarizing the information for\nconcise reference, or storing it in an embedding vector database for later\nretrieval based on the conversation.\n".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.executables = ["ollama_chat".freeze, "ollama_chat_send".freeze]
15
- s.extra_rdoc_files = ["README.md".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/command_concern.rb".freeze, "lib/ollama_chat/commands.rb".freeze, "lib/ollama_chat/config_handling.rb".freeze, "lib/ollama_chat/conversation.rb".freeze, "lib/ollama_chat/database.rb".freeze, "lib/ollama_chat/database/duplicatable.rb".freeze, "lib/ollama_chat/database/migrations.rb".freeze, "lib/ollama_chat/database/migrations/001_initial_schema.rb".freeze, "lib/ollama_chat/database/migrations/002_add_links_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/003_add_history_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/004_add_profile_to_model_options.rb".freeze, "lib/ollama_chat/database/models/favourite.rb".freeze, "lib/ollama_chat/database/models/model_options.rb".freeze, "lib/ollama_chat/database/models/prompt.rb".freeze, "lib/ollama_chat/database/models/session.rb".freeze, "lib/ollama_chat/database/session_locking.rb".freeze, "lib/ollama_chat/dialog.rb".freeze, "lib/ollama_chat/document_cache.rb".freeze, "lib/ollama_chat/favourites_management.rb".freeze, "lib/ollama_chat/file_editing.rb".freeze, "lib/ollama_chat/follow_chat.rb".freeze, "lib/ollama_chat/history.rb".freeze, "lib/ollama_chat/http_handling.rb".freeze, "lib/ollama_chat/information.rb".freeze, "lib/ollama_chat/input_content.rb".freeze, "lib/ollama_chat/kramdown_ansi.rb".freeze, "lib/ollama_chat/links_set.rb".freeze, "lib/ollama_chat/location_handling.rb".freeze, "lib/ollama_chat/logging.rb".freeze, "lib/ollama_chat/message.rb".freeze, "lib/ollama_chat/message_editing.rb".freeze, "lib/ollama_chat/message_format.rb".freeze, "lib/ollama_chat/message_list.rb".freeze, "lib/ollama_chat/message_output.rb".freeze, "lib/ollama_chat/model_handling.rb".freeze, "lib/ollama_chat/oc.rb".freeze, "lib/ollama_chat/ollama_chat_config.rb".freeze, "lib/ollama_chat/pager.rb".freeze, "lib/ollama_chat/parsing.rb".freeze, "lib/ollama_chat/personae_management.rb".freeze, "lib/ollama_chat/prompt_handling.rb".freeze, "lib/ollama_chat/prompt_management.rb".freeze, "lib/ollama_chat/rag_handling.rb".freeze, "lib/ollama_chat/redis_cache.rb".freeze, "lib/ollama_chat/server_socket.rb".freeze, "lib/ollama_chat/session_management.rb".freeze, "lib/ollama_chat/source_fetching.rb".freeze, "lib/ollama_chat/state_selectors.rb".freeze, "lib/ollama_chat/switches.rb".freeze, "lib/ollama_chat/system_prompt_management.rb".freeze, "lib/ollama_chat/think_control.rb".freeze, "lib/ollama_chat/tool_calling.rb".freeze, "lib/ollama_chat/tools.rb".freeze, "lib/ollama_chat/tools/browse.rb".freeze, "lib/ollama_chat/tools/compute_bmi.rb".freeze, "lib/ollama_chat/tools/concern.rb".freeze, "lib/ollama_chat/tools/copy_to_clipboard.rb".freeze, "lib/ollama_chat/tools/delete_file.rb".freeze, "lib/ollama_chat/tools/directory_structure.rb".freeze, "lib/ollama_chat/tools/eval_ruby.rb".freeze, "lib/ollama_chat/tools/execute_grep.rb".freeze, "lib/ollama_chat/tools/execute_ri.rb".freeze, "lib/ollama_chat/tools/file_context.rb".freeze, "lib/ollama_chat/tools/gem_path_lookup.rb".freeze, "lib/ollama_chat/tools/generate_image.rb".freeze, "lib/ollama_chat/tools/generate_password.rb".freeze, "lib/ollama_chat/tools/get_current_weather.rb".freeze, "lib/ollama_chat/tools/get_cve.rb".freeze, "lib/ollama_chat/tools/get_endoflife.rb".freeze, "lib/ollama_chat/tools/get_ghr.rb".freeze, "lib/ollama_chat/tools/get_jira_issue.rb".freeze, "lib/ollama_chat/tools/get_location.rb".freeze, "lib/ollama_chat/tools/get_rfc.rb".freeze, "lib/ollama_chat/tools/get_time.rb".freeze, "lib/ollama_chat/tools/get_url.rb".freeze, "lib/ollama_chat/tools/move_file.rb".freeze, "lib/ollama_chat/tools/open_file_in_editor.rb".freeze, "lib/ollama_chat/tools/paste_from_clipboard.rb".freeze, "lib/ollama_chat/tools/paste_into_editor.rb".freeze, "lib/ollama_chat/tools/patch_file.rb".freeze, "lib/ollama_chat/tools/read_file.rb".freeze, "lib/ollama_chat/tools/resolve_tag.rb".freeze, "lib/ollama_chat/tools/retrieve_document_snippets.rb".freeze, "lib/ollama_chat/tools/roll_dice.rb".freeze, "lib/ollama_chat/tools/run_tests.rb".freeze, "lib/ollama_chat/tools/search_web.rb".freeze, "lib/ollama_chat/tools/write_file.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/analyze_directory.rb".freeze, "lib/ollama_chat/utils/backup.rb".freeze, "lib/ollama_chat/utils/cache_fetcher.rb".freeze, "lib/ollama_chat/utils/chooser.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/json_jsonl_io.rb".freeze, "lib/ollama_chat/utils/path_completer.rb".freeze, "lib/ollama_chat/utils/path_validator.rb".freeze, "lib/ollama_chat/utils/png_character_extractor.rb".freeze, "lib/ollama_chat/utils/tag_resolver.rb".freeze, "lib/ollama_chat/utils/token_estimator.rb".freeze, "lib/ollama_chat/utils/value_formatter.rb".freeze, "lib/ollama_chat/version.rb".freeze, "lib/ollama_chat/vim.rb".freeze, "lib/ollama_chat/web_searching.rb".freeze]
16
- s.files = [".utilsrc".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "README.md".freeze, "Rakefile".freeze, "bin/ollama_chat".freeze, "bin/ollama_chat_send".freeze, "config/searxng/settings.yml".freeze, "config/sherlock.md".freeze, "docker-compose.yml".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/command_concern.rb".freeze, "lib/ollama_chat/commands.rb".freeze, "lib/ollama_chat/config_handling.rb".freeze, "lib/ollama_chat/conversation.rb".freeze, "lib/ollama_chat/database.rb".freeze, "lib/ollama_chat/database/duplicatable.rb".freeze, "lib/ollama_chat/database/migrations.rb".freeze, "lib/ollama_chat/database/migrations/001_initial_schema.rb".freeze, "lib/ollama_chat/database/migrations/002_add_links_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/003_add_history_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/004_add_profile_to_model_options.rb".freeze, "lib/ollama_chat/database/models/favourite.rb".freeze, "lib/ollama_chat/database/models/model_options.rb".freeze, "lib/ollama_chat/database/models/prompt.rb".freeze, "lib/ollama_chat/database/models/session.rb".freeze, "lib/ollama_chat/database/session_locking.rb".freeze, "lib/ollama_chat/dialog.rb".freeze, "lib/ollama_chat/document_cache.rb".freeze, "lib/ollama_chat/favourites_management.rb".freeze, "lib/ollama_chat/file_editing.rb".freeze, "lib/ollama_chat/follow_chat.rb".freeze, "lib/ollama_chat/history.rb".freeze, "lib/ollama_chat/http_handling.rb".freeze, "lib/ollama_chat/information.rb".freeze, "lib/ollama_chat/input_content.rb".freeze, "lib/ollama_chat/kramdown_ansi.rb".freeze, "lib/ollama_chat/links_set.rb".freeze, "lib/ollama_chat/location_handling.rb".freeze, "lib/ollama_chat/logging.rb".freeze, "lib/ollama_chat/message.rb".freeze, "lib/ollama_chat/message_editing.rb".freeze, "lib/ollama_chat/message_format.rb".freeze, "lib/ollama_chat/message_list.rb".freeze, "lib/ollama_chat/message_output.rb".freeze, "lib/ollama_chat/model_handling.rb".freeze, "lib/ollama_chat/oc.rb".freeze, "lib/ollama_chat/ollama_chat_config.rb".freeze, "lib/ollama_chat/ollama_chat_config/default_config.yml".freeze, "lib/ollama_chat/pager.rb".freeze, "lib/ollama_chat/parsing.rb".freeze, "lib/ollama_chat/personae_management.rb".freeze, "lib/ollama_chat/prompt_handling.rb".freeze, "lib/ollama_chat/prompt_management.rb".freeze, "lib/ollama_chat/rag_handling.rb".freeze, "lib/ollama_chat/redis_cache.rb".freeze, "lib/ollama_chat/server_socket.rb".freeze, "lib/ollama_chat/session_management.rb".freeze, "lib/ollama_chat/source_fetching.rb".freeze, "lib/ollama_chat/state_selectors.rb".freeze, "lib/ollama_chat/switches.rb".freeze, "lib/ollama_chat/system_prompt_management.rb".freeze, "lib/ollama_chat/think_control.rb".freeze, "lib/ollama_chat/tool_calling.rb".freeze, "lib/ollama_chat/tools.rb".freeze, "lib/ollama_chat/tools/browse.rb".freeze, "lib/ollama_chat/tools/compute_bmi.rb".freeze, "lib/ollama_chat/tools/concern.rb".freeze, "lib/ollama_chat/tools/copy_to_clipboard.rb".freeze, "lib/ollama_chat/tools/delete_file.rb".freeze, "lib/ollama_chat/tools/directory_structure.rb".freeze, "lib/ollama_chat/tools/eval_ruby.rb".freeze, "lib/ollama_chat/tools/execute_grep.rb".freeze, "lib/ollama_chat/tools/execute_ri.rb".freeze, "lib/ollama_chat/tools/file_context.rb".freeze, "lib/ollama_chat/tools/gem_path_lookup.rb".freeze, "lib/ollama_chat/tools/generate_image.rb".freeze, "lib/ollama_chat/tools/generate_password.rb".freeze, "lib/ollama_chat/tools/get_current_weather.rb".freeze, "lib/ollama_chat/tools/get_cve.rb".freeze, "lib/ollama_chat/tools/get_endoflife.rb".freeze, "lib/ollama_chat/tools/get_ghr.rb".freeze, "lib/ollama_chat/tools/get_jira_issue.rb".freeze, "lib/ollama_chat/tools/get_location.rb".freeze, "lib/ollama_chat/tools/get_rfc.rb".freeze, "lib/ollama_chat/tools/get_time.rb".freeze, "lib/ollama_chat/tools/get_url.rb".freeze, "lib/ollama_chat/tools/move_file.rb".freeze, "lib/ollama_chat/tools/open_file_in_editor.rb".freeze, "lib/ollama_chat/tools/paste_from_clipboard.rb".freeze, "lib/ollama_chat/tools/paste_into_editor.rb".freeze, "lib/ollama_chat/tools/patch_file.rb".freeze, "lib/ollama_chat/tools/read_file.rb".freeze, "lib/ollama_chat/tools/resolve_tag.rb".freeze, "lib/ollama_chat/tools/retrieve_document_snippets.rb".freeze, "lib/ollama_chat/tools/roll_dice.rb".freeze, "lib/ollama_chat/tools/run_tests.rb".freeze, "lib/ollama_chat/tools/search_web.rb".freeze, "lib/ollama_chat/tools/write_file.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/analyze_directory.rb".freeze, "lib/ollama_chat/utils/backup.rb".freeze, "lib/ollama_chat/utils/cache_fetcher.rb".freeze, "lib/ollama_chat/utils/chooser.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/json_jsonl_io.rb".freeze, "lib/ollama_chat/utils/path_completer.rb".freeze, "lib/ollama_chat/utils/path_validator.rb".freeze, "lib/ollama_chat/utils/png_character_extractor.rb".freeze, "lib/ollama_chat/utils/tag_resolver.rb".freeze, "lib/ollama_chat/utils/token_estimator.rb".freeze, "lib/ollama_chat/utils/value_formatter.rb".freeze, "lib/ollama_chat/version.rb".freeze, "lib/ollama_chat/vim.rb".freeze, "lib/ollama_chat/web_searching.rb".freeze, "ollama_chat.gemspec".freeze, "redis/redis.conf".freeze, "spec/assets/api_show.json".freeze, "spec/assets/api_tags.json".freeze, "spec/assets/api_version.json".freeze, "spec/assets/conversation.json".freeze, "spec/assets/conversation.jsonl".freeze, "spec/assets/deep/deeper/empty.txt".freeze, "spec/assets/deep/deeper/not-empty.txt".freeze, "spec/assets/deep/empty.txt".freeze, "spec/assets/duckduckgo.html".freeze, "spec/assets/example.atom".freeze, "spec/assets/example.csv".freeze, "spec/assets/example.html".freeze, "spec/assets/example.pdf".freeze, "spec/assets/example.ps".freeze, "spec/assets/example.rb".freeze, "spec/assets/example.rss".freeze, "spec/assets/example.xml".freeze, "spec/assets/example_with_quote.html".freeze, "spec/assets/fluffy.png".freeze, "spec/assets/kitten.jpg".freeze, "spec/assets/pirateweather.json".freeze, "spec/assets/prompt.txt".freeze, "spec/assets/searxng.json".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/database/models/favourite_spec.rb".freeze, "spec/ollama_chat/file_editing_spec.rb".freeze, "spec/ollama_chat/follow_chat_spec.rb".freeze, "spec/ollama_chat/history_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/input_content_spec.rb".freeze, "spec/ollama_chat/kramdown_ansi_spec.rb".freeze, "spec/ollama_chat/message_editing_spec.rb".freeze, "spec/ollama_chat/message_list_spec.rb".freeze, "spec/ollama_chat/message_output_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/redis_cache_spec.rb".freeze, "spec/ollama_chat/server_socket_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/state_selectors_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/think_control_spec.rb".freeze, "spec/ollama_chat/tools/browse_spec.rb".freeze, "spec/ollama_chat/tools/compute_bmi_spec.rb".freeze, "spec/ollama_chat/tools/copy_to_clipboard_spec.rb".freeze, "spec/ollama_chat/tools/delete_file_spec.rb".freeze, "spec/ollama_chat/tools/directory_structure_spec.rb".freeze, "spec/ollama_chat/tools/execute_grep_spec.rb".freeze, "spec/ollama_chat/tools/execute_ri_spec.rb".freeze, "spec/ollama_chat/tools/file_context_spec.rb".freeze, "spec/ollama_chat/tools/gem_path_lookup_spec.rb".freeze, "spec/ollama_chat/tools/generate_image_spec.rb".freeze, "spec/ollama_chat/tools/generate_password_spec.rb".freeze, "spec/ollama_chat/tools/get_current_weather_spec.rb".freeze, "spec/ollama_chat/tools/get_cve_spec.rb".freeze, "spec/ollama_chat/tools/get_endoflife_spec.rb".freeze, "spec/ollama_chat/tools/get_ghr_spec.rb".freeze, "spec/ollama_chat/tools/get_jira_issue_spec.rb".freeze, "spec/ollama_chat/tools/get_location_spec.rb".freeze, "spec/ollama_chat/tools/get_rfc_spec.rb".freeze, "spec/ollama_chat/tools/get_time_spec.rb".freeze, "spec/ollama_chat/tools/get_url_spec.rb".freeze, "spec/ollama_chat/tools/move_file_spec.rb".freeze, "spec/ollama_chat/tools/open_file_in_editor_spec.rb".freeze, "spec/ollama_chat/tools/paste_from_clipboard_spec.rb".freeze, "spec/ollama_chat/tools/paste_into_editor_spec.rb".freeze, "spec/ollama_chat/tools/patch_file_spec.rb".freeze, "spec/ollama_chat/tools/read_file_spec.rb".freeze, "spec/ollama_chat/tools/resolve_tag_spec.rb".freeze, "spec/ollama_chat/tools/retrieve_document_snippets_spec.rb".freeze, "spec/ollama_chat/tools/roll_dice_spec.rb".freeze, "spec/ollama_chat/tools/run_tests_spec.rb".freeze, "spec/ollama_chat/tools/search_web_spec.rb".freeze, "spec/ollama_chat/tools/write_file_spec.rb".freeze, "spec/ollama_chat/utils/analyze_directory_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/path_completer_spec.rb".freeze, "spec/ollama_chat/utils/png_character_extractor_spec.rb".freeze, "spec/ollama_chat/vim_spec.rb".freeze, "spec/ollama_chat/web_searching_spec.rb".freeze, "spec/spec_helper.rb".freeze, "tmp/.keep".freeze]
15
+ s.extra_rdoc_files = ["README.md".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/command_concern.rb".freeze, "lib/ollama_chat/commands.rb".freeze, "lib/ollama_chat/config_handling.rb".freeze, "lib/ollama_chat/conversation.rb".freeze, "lib/ollama_chat/database.rb".freeze, "lib/ollama_chat/database/duplicatable.rb".freeze, "lib/ollama_chat/database/migrations.rb".freeze, "lib/ollama_chat/database/migrations/001_initial_schema.rb".freeze, "lib/ollama_chat/database/migrations/002_add_links_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/003_add_history_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/004_add_profile_to_model_options.rb".freeze, "lib/ollama_chat/database/models/favourite.rb".freeze, "lib/ollama_chat/database/models/model_options.rb".freeze, "lib/ollama_chat/database/models/prompt.rb".freeze, "lib/ollama_chat/database/models/session.rb".freeze, "lib/ollama_chat/database/session_locking.rb".freeze, "lib/ollama_chat/dialog.rb".freeze, "lib/ollama_chat/document_cache.rb".freeze, "lib/ollama_chat/favourites_management.rb".freeze, "lib/ollama_chat/file_editing.rb".freeze, "lib/ollama_chat/follow_chat.rb".freeze, "lib/ollama_chat/history.rb".freeze, "lib/ollama_chat/http_handling.rb".freeze, "lib/ollama_chat/information.rb".freeze, "lib/ollama_chat/input_content.rb".freeze, "lib/ollama_chat/kramdown_ansi.rb".freeze, "lib/ollama_chat/links_set.rb".freeze, "lib/ollama_chat/location_handling.rb".freeze, "lib/ollama_chat/logging.rb".freeze, "lib/ollama_chat/message.rb".freeze, "lib/ollama_chat/message_editing.rb".freeze, "lib/ollama_chat/message_format.rb".freeze, "lib/ollama_chat/message_list.rb".freeze, "lib/ollama_chat/message_output.rb".freeze, "lib/ollama_chat/model_handling.rb".freeze, "lib/ollama_chat/oc.rb".freeze, "lib/ollama_chat/ollama_chat_config.rb".freeze, "lib/ollama_chat/pager.rb".freeze, "lib/ollama_chat/parsing.rb".freeze, "lib/ollama_chat/personae_management.rb".freeze, "lib/ollama_chat/prompt_handling.rb".freeze, "lib/ollama_chat/prompt_management.rb".freeze, "lib/ollama_chat/rag_handling.rb".freeze, "lib/ollama_chat/redis_cache.rb".freeze, "lib/ollama_chat/server_socket.rb".freeze, "lib/ollama_chat/session_management.rb".freeze, "lib/ollama_chat/source_fetching.rb".freeze, "lib/ollama_chat/state_selectors.rb".freeze, "lib/ollama_chat/switches.rb".freeze, "lib/ollama_chat/system_prompt_management.rb".freeze, "lib/ollama_chat/think_control.rb".freeze, "lib/ollama_chat/tool_calling.rb".freeze, "lib/ollama_chat/tools.rb".freeze, "lib/ollama_chat/tools/browse.rb".freeze, "lib/ollama_chat/tools/compute_bmi.rb".freeze, "lib/ollama_chat/tools/concern.rb".freeze, "lib/ollama_chat/tools/copy_to_clipboard.rb".freeze, "lib/ollama_chat/tools/delete_file.rb".freeze, "lib/ollama_chat/tools/directory_structure.rb".freeze, "lib/ollama_chat/tools/eval_ruby.rb".freeze, "lib/ollama_chat/tools/execute_grep.rb".freeze, "lib/ollama_chat/tools/execute_ri.rb".freeze, "lib/ollama_chat/tools/file_context.rb".freeze, "lib/ollama_chat/tools/gem_path_lookup.rb".freeze, "lib/ollama_chat/tools/generate_image.rb".freeze, "lib/ollama_chat/tools/generate_password.rb".freeze, "lib/ollama_chat/tools/get_current_weather.rb".freeze, "lib/ollama_chat/tools/get_cve.rb".freeze, "lib/ollama_chat/tools/get_endoflife.rb".freeze, "lib/ollama_chat/tools/get_ghr.rb".freeze, "lib/ollama_chat/tools/get_jira_issue.rb".freeze, "lib/ollama_chat/tools/get_location.rb".freeze, "lib/ollama_chat/tools/get_rfc.rb".freeze, "lib/ollama_chat/tools/get_time.rb".freeze, "lib/ollama_chat/tools/get_url.rb".freeze, "lib/ollama_chat/tools/move_file.rb".freeze, "lib/ollama_chat/tools/open_file_in_editor.rb".freeze, "lib/ollama_chat/tools/paste_from_clipboard.rb".freeze, "lib/ollama_chat/tools/paste_into_editor.rb".freeze, "lib/ollama_chat/tools/patch_file.rb".freeze, "lib/ollama_chat/tools/read_file.rb".freeze, "lib/ollama_chat/tools/resolve_tag.rb".freeze, "lib/ollama_chat/tools/retrieve_document_snippets.rb".freeze, "lib/ollama_chat/tools/roll_dice.rb".freeze, "lib/ollama_chat/tools/run_tests.rb".freeze, "lib/ollama_chat/tools/search_web.rb".freeze, "lib/ollama_chat/tools/write_file.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/analyze_directory.rb".freeze, "lib/ollama_chat/utils/backup.rb".freeze, "lib/ollama_chat/utils/cache_fetcher.rb".freeze, "lib/ollama_chat/utils/chooser.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/json_jsonl_io.rb".freeze, "lib/ollama_chat/utils/path_completer.rb".freeze, "lib/ollama_chat/utils/path_validator.rb".freeze, "lib/ollama_chat/utils/png_metadata_extractor.rb".freeze, "lib/ollama_chat/utils/tag_resolver.rb".freeze, "lib/ollama_chat/utils/token_estimator.rb".freeze, "lib/ollama_chat/utils/utf8_converter.rb".freeze, "lib/ollama_chat/utils/value_formatter.rb".freeze, "lib/ollama_chat/version.rb".freeze, "lib/ollama_chat/vim.rb".freeze, "lib/ollama_chat/web_searching.rb".freeze]
16
+ s.files = [".utilsrc".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "bin/ollama_chat".freeze, "bin/ollama_chat_send".freeze, "config/searxng/settings.yml".freeze, "config/sherlock.md".freeze, "docker-compose.yml".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/command_concern.rb".freeze, "lib/ollama_chat/commands.rb".freeze, "lib/ollama_chat/config_handling.rb".freeze, "lib/ollama_chat/conversation.rb".freeze, "lib/ollama_chat/database.rb".freeze, "lib/ollama_chat/database/duplicatable.rb".freeze, "lib/ollama_chat/database/migrations.rb".freeze, "lib/ollama_chat/database/migrations/001_initial_schema.rb".freeze, "lib/ollama_chat/database/migrations/002_add_links_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/003_add_history_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/004_add_profile_to_model_options.rb".freeze, "lib/ollama_chat/database/models/favourite.rb".freeze, "lib/ollama_chat/database/models/model_options.rb".freeze, "lib/ollama_chat/database/models/prompt.rb".freeze, "lib/ollama_chat/database/models/session.rb".freeze, "lib/ollama_chat/database/session_locking.rb".freeze, "lib/ollama_chat/dialog.rb".freeze, "lib/ollama_chat/document_cache.rb".freeze, "lib/ollama_chat/favourites_management.rb".freeze, "lib/ollama_chat/file_editing.rb".freeze, "lib/ollama_chat/follow_chat.rb".freeze, "lib/ollama_chat/history.rb".freeze, "lib/ollama_chat/http_handling.rb".freeze, "lib/ollama_chat/information.rb".freeze, "lib/ollama_chat/input_content.rb".freeze, "lib/ollama_chat/kramdown_ansi.rb".freeze, "lib/ollama_chat/links_set.rb".freeze, "lib/ollama_chat/location_handling.rb".freeze, "lib/ollama_chat/logging.rb".freeze, "lib/ollama_chat/message.rb".freeze, "lib/ollama_chat/message_editing.rb".freeze, "lib/ollama_chat/message_format.rb".freeze, "lib/ollama_chat/message_list.rb".freeze, "lib/ollama_chat/message_output.rb".freeze, "lib/ollama_chat/model_handling.rb".freeze, "lib/ollama_chat/oc.rb".freeze, "lib/ollama_chat/ollama_chat_config.rb".freeze, "lib/ollama_chat/ollama_chat_config/default_config.yml".freeze, "lib/ollama_chat/pager.rb".freeze, "lib/ollama_chat/parsing.rb".freeze, "lib/ollama_chat/personae_management.rb".freeze, "lib/ollama_chat/prompt_handling.rb".freeze, "lib/ollama_chat/prompt_management.rb".freeze, "lib/ollama_chat/rag_handling.rb".freeze, "lib/ollama_chat/redis_cache.rb".freeze, "lib/ollama_chat/server_socket.rb".freeze, "lib/ollama_chat/session_management.rb".freeze, "lib/ollama_chat/source_fetching.rb".freeze, "lib/ollama_chat/state_selectors.rb".freeze, "lib/ollama_chat/switches.rb".freeze, "lib/ollama_chat/system_prompt_management.rb".freeze, "lib/ollama_chat/think_control.rb".freeze, "lib/ollama_chat/tool_calling.rb".freeze, "lib/ollama_chat/tools.rb".freeze, "lib/ollama_chat/tools/browse.rb".freeze, "lib/ollama_chat/tools/compute_bmi.rb".freeze, "lib/ollama_chat/tools/concern.rb".freeze, "lib/ollama_chat/tools/copy_to_clipboard.rb".freeze, "lib/ollama_chat/tools/delete_file.rb".freeze, "lib/ollama_chat/tools/directory_structure.rb".freeze, "lib/ollama_chat/tools/eval_ruby.rb".freeze, "lib/ollama_chat/tools/execute_grep.rb".freeze, "lib/ollama_chat/tools/execute_ri.rb".freeze, "lib/ollama_chat/tools/file_context.rb".freeze, "lib/ollama_chat/tools/gem_path_lookup.rb".freeze, "lib/ollama_chat/tools/generate_image.rb".freeze, "lib/ollama_chat/tools/generate_password.rb".freeze, "lib/ollama_chat/tools/get_current_weather.rb".freeze, "lib/ollama_chat/tools/get_cve.rb".freeze, "lib/ollama_chat/tools/get_endoflife.rb".freeze, "lib/ollama_chat/tools/get_ghr.rb".freeze, "lib/ollama_chat/tools/get_jira_issue.rb".freeze, "lib/ollama_chat/tools/get_location.rb".freeze, "lib/ollama_chat/tools/get_rfc.rb".freeze, "lib/ollama_chat/tools/get_time.rb".freeze, "lib/ollama_chat/tools/get_url.rb".freeze, "lib/ollama_chat/tools/move_file.rb".freeze, "lib/ollama_chat/tools/open_file_in_editor.rb".freeze, "lib/ollama_chat/tools/paste_from_clipboard.rb".freeze, "lib/ollama_chat/tools/paste_into_editor.rb".freeze, "lib/ollama_chat/tools/patch_file.rb".freeze, "lib/ollama_chat/tools/read_file.rb".freeze, "lib/ollama_chat/tools/resolve_tag.rb".freeze, "lib/ollama_chat/tools/retrieve_document_snippets.rb".freeze, "lib/ollama_chat/tools/roll_dice.rb".freeze, "lib/ollama_chat/tools/run_tests.rb".freeze, "lib/ollama_chat/tools/search_web.rb".freeze, "lib/ollama_chat/tools/write_file.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/analyze_directory.rb".freeze, "lib/ollama_chat/utils/backup.rb".freeze, "lib/ollama_chat/utils/cache_fetcher.rb".freeze, "lib/ollama_chat/utils/chooser.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/json_jsonl_io.rb".freeze, "lib/ollama_chat/utils/path_completer.rb".freeze, "lib/ollama_chat/utils/path_validator.rb".freeze, "lib/ollama_chat/utils/png_metadata_extractor.rb".freeze, "lib/ollama_chat/utils/tag_resolver.rb".freeze, "lib/ollama_chat/utils/token_estimator.rb".freeze, "lib/ollama_chat/utils/utf8_converter.rb".freeze, "lib/ollama_chat/utils/value_formatter.rb".freeze, "lib/ollama_chat/version.rb".freeze, "lib/ollama_chat/vim.rb".freeze, "lib/ollama_chat/web_searching.rb".freeze, "ollama_chat.gemspec".freeze, "redis/redis.conf".freeze, "spec/assets/api_show.json".freeze, "spec/assets/api_tags.json".freeze, "spec/assets/api_version.json".freeze, "spec/assets/conversation.json".freeze, "spec/assets/conversation.jsonl".freeze, "spec/assets/deep/deeper/empty.txt".freeze, "spec/assets/deep/deeper/not-empty.txt".freeze, "spec/assets/deep/empty.txt".freeze, "spec/assets/duckduckgo.html".freeze, "spec/assets/example.atom".freeze, "spec/assets/example.csv".freeze, "spec/assets/example.html".freeze, "spec/assets/example.pdf".freeze, "spec/assets/example.ps".freeze, "spec/assets/example.rb".freeze, "spec/assets/example.rss".freeze, "spec/assets/example.xml".freeze, "spec/assets/example_with_quote.html".freeze, "spec/assets/fluffy.png".freeze, "spec/assets/kitten.jpg".freeze, "spec/assets/miyu.png".freeze, "spec/assets/pirateweather.json".freeze, "spec/assets/prompt.txt".freeze, "spec/assets/searxng.json".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/database/models/favourite_spec.rb".freeze, "spec/ollama_chat/file_editing_spec.rb".freeze, "spec/ollama_chat/follow_chat_spec.rb".freeze, "spec/ollama_chat/history_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/input_content_spec.rb".freeze, "spec/ollama_chat/kramdown_ansi_spec.rb".freeze, "spec/ollama_chat/message_editing_spec.rb".freeze, "spec/ollama_chat/message_list_spec.rb".freeze, "spec/ollama_chat/message_output_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/redis_cache_spec.rb".freeze, "spec/ollama_chat/server_socket_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/state_selectors_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/think_control_spec.rb".freeze, "spec/ollama_chat/tool_calling_spec.rb".freeze, "spec/ollama_chat/tools/browse_spec.rb".freeze, "spec/ollama_chat/tools/compute_bmi_spec.rb".freeze, "spec/ollama_chat/tools/copy_to_clipboard_spec.rb".freeze, "spec/ollama_chat/tools/delete_file_spec.rb".freeze, "spec/ollama_chat/tools/directory_structure_spec.rb".freeze, "spec/ollama_chat/tools/execute_grep_spec.rb".freeze, "spec/ollama_chat/tools/execute_ri_spec.rb".freeze, "spec/ollama_chat/tools/file_context_spec.rb".freeze, "spec/ollama_chat/tools/gem_path_lookup_spec.rb".freeze, "spec/ollama_chat/tools/generate_image_spec.rb".freeze, "spec/ollama_chat/tools/generate_password_spec.rb".freeze, "spec/ollama_chat/tools/get_current_weather_spec.rb".freeze, "spec/ollama_chat/tools/get_cve_spec.rb".freeze, "spec/ollama_chat/tools/get_endoflife_spec.rb".freeze, "spec/ollama_chat/tools/get_ghr_spec.rb".freeze, "spec/ollama_chat/tools/get_jira_issue_spec.rb".freeze, "spec/ollama_chat/tools/get_location_spec.rb".freeze, "spec/ollama_chat/tools/get_rfc_spec.rb".freeze, "spec/ollama_chat/tools/get_time_spec.rb".freeze, "spec/ollama_chat/tools/get_url_spec.rb".freeze, "spec/ollama_chat/tools/move_file_spec.rb".freeze, "spec/ollama_chat/tools/open_file_in_editor_spec.rb".freeze, "spec/ollama_chat/tools/paste_from_clipboard_spec.rb".freeze, "spec/ollama_chat/tools/paste_into_editor_spec.rb".freeze, "spec/ollama_chat/tools/patch_file_spec.rb".freeze, "spec/ollama_chat/tools/read_file_spec.rb".freeze, "spec/ollama_chat/tools/resolve_tag_spec.rb".freeze, "spec/ollama_chat/tools/retrieve_document_snippets_spec.rb".freeze, "spec/ollama_chat/tools/roll_dice_spec.rb".freeze, "spec/ollama_chat/tools/run_tests_spec.rb".freeze, "spec/ollama_chat/tools/search_web_spec.rb".freeze, "spec/ollama_chat/tools/write_file_spec.rb".freeze, "spec/ollama_chat/utils/analyze_directory_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/path_completer_spec.rb".freeze, "spec/ollama_chat/utils/png_metadata_extractor_spec.rb".freeze, "spec/ollama_chat/vim_spec.rb".freeze, "spec/ollama_chat/web_searching_spec.rb".freeze, "spec/spec_helper.rb".freeze, "tmp/.keep".freeze]
17
17
  s.homepage = "https://github.com/flori/ollama_chat".freeze
18
18
  s.licenses = ["MIT".freeze]
19
19
  s.rdoc_options = ["--title".freeze, "OllamaChat - A command-line interface (CLI) for interacting with an Ollama AI model.".freeze, "--main".freeze, "README.md".freeze]
20
20
  s.required_ruby_version = Gem::Requirement.new(">= 3.2".freeze)
21
21
  s.rubygems_version = "4.0.10".freeze
22
22
  s.summary = "A command-line interface (CLI) for interacting with an Ollama AI model.".freeze
23
- s.test_files = ["spec/assets/example.rb".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/database/models/favourite_spec.rb".freeze, "spec/ollama_chat/file_editing_spec.rb".freeze, "spec/ollama_chat/follow_chat_spec.rb".freeze, "spec/ollama_chat/history_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/input_content_spec.rb".freeze, "spec/ollama_chat/kramdown_ansi_spec.rb".freeze, "spec/ollama_chat/message_editing_spec.rb".freeze, "spec/ollama_chat/message_list_spec.rb".freeze, "spec/ollama_chat/message_output_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/redis_cache_spec.rb".freeze, "spec/ollama_chat/server_socket_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/state_selectors_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/think_control_spec.rb".freeze, "spec/ollama_chat/tools/browse_spec.rb".freeze, "spec/ollama_chat/tools/compute_bmi_spec.rb".freeze, "spec/ollama_chat/tools/copy_to_clipboard_spec.rb".freeze, "spec/ollama_chat/tools/delete_file_spec.rb".freeze, "spec/ollama_chat/tools/directory_structure_spec.rb".freeze, "spec/ollama_chat/tools/execute_grep_spec.rb".freeze, "spec/ollama_chat/tools/execute_ri_spec.rb".freeze, "spec/ollama_chat/tools/file_context_spec.rb".freeze, "spec/ollama_chat/tools/gem_path_lookup_spec.rb".freeze, "spec/ollama_chat/tools/generate_image_spec.rb".freeze, "spec/ollama_chat/tools/generate_password_spec.rb".freeze, "spec/ollama_chat/tools/get_current_weather_spec.rb".freeze, "spec/ollama_chat/tools/get_cve_spec.rb".freeze, "spec/ollama_chat/tools/get_endoflife_spec.rb".freeze, "spec/ollama_chat/tools/get_ghr_spec.rb".freeze, "spec/ollama_chat/tools/get_jira_issue_spec.rb".freeze, "spec/ollama_chat/tools/get_location_spec.rb".freeze, "spec/ollama_chat/tools/get_rfc_spec.rb".freeze, "spec/ollama_chat/tools/get_time_spec.rb".freeze, "spec/ollama_chat/tools/get_url_spec.rb".freeze, "spec/ollama_chat/tools/move_file_spec.rb".freeze, "spec/ollama_chat/tools/open_file_in_editor_spec.rb".freeze, "spec/ollama_chat/tools/paste_from_clipboard_spec.rb".freeze, "spec/ollama_chat/tools/paste_into_editor_spec.rb".freeze, "spec/ollama_chat/tools/patch_file_spec.rb".freeze, "spec/ollama_chat/tools/read_file_spec.rb".freeze, "spec/ollama_chat/tools/resolve_tag_spec.rb".freeze, "spec/ollama_chat/tools/retrieve_document_snippets_spec.rb".freeze, "spec/ollama_chat/tools/roll_dice_spec.rb".freeze, "spec/ollama_chat/tools/run_tests_spec.rb".freeze, "spec/ollama_chat/tools/search_web_spec.rb".freeze, "spec/ollama_chat/tools/write_file_spec.rb".freeze, "spec/ollama_chat/utils/analyze_directory_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/path_completer_spec.rb".freeze, "spec/ollama_chat/utils/png_character_extractor_spec.rb".freeze, "spec/ollama_chat/vim_spec.rb".freeze, "spec/ollama_chat/web_searching_spec.rb".freeze, "spec/spec_helper.rb".freeze]
23
+ s.test_files = ["spec/assets/example.rb".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/database/models/favourite_spec.rb".freeze, "spec/ollama_chat/file_editing_spec.rb".freeze, "spec/ollama_chat/follow_chat_spec.rb".freeze, "spec/ollama_chat/history_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/input_content_spec.rb".freeze, "spec/ollama_chat/kramdown_ansi_spec.rb".freeze, "spec/ollama_chat/message_editing_spec.rb".freeze, "spec/ollama_chat/message_list_spec.rb".freeze, "spec/ollama_chat/message_output_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/redis_cache_spec.rb".freeze, "spec/ollama_chat/server_socket_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/state_selectors_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/think_control_spec.rb".freeze, "spec/ollama_chat/tool_calling_spec.rb".freeze, "spec/ollama_chat/tools/browse_spec.rb".freeze, "spec/ollama_chat/tools/compute_bmi_spec.rb".freeze, "spec/ollama_chat/tools/copy_to_clipboard_spec.rb".freeze, "spec/ollama_chat/tools/delete_file_spec.rb".freeze, "spec/ollama_chat/tools/directory_structure_spec.rb".freeze, "spec/ollama_chat/tools/execute_grep_spec.rb".freeze, "spec/ollama_chat/tools/execute_ri_spec.rb".freeze, "spec/ollama_chat/tools/file_context_spec.rb".freeze, "spec/ollama_chat/tools/gem_path_lookup_spec.rb".freeze, "spec/ollama_chat/tools/generate_image_spec.rb".freeze, "spec/ollama_chat/tools/generate_password_spec.rb".freeze, "spec/ollama_chat/tools/get_current_weather_spec.rb".freeze, "spec/ollama_chat/tools/get_cve_spec.rb".freeze, "spec/ollama_chat/tools/get_endoflife_spec.rb".freeze, "spec/ollama_chat/tools/get_ghr_spec.rb".freeze, "spec/ollama_chat/tools/get_jira_issue_spec.rb".freeze, "spec/ollama_chat/tools/get_location_spec.rb".freeze, "spec/ollama_chat/tools/get_rfc_spec.rb".freeze, "spec/ollama_chat/tools/get_time_spec.rb".freeze, "spec/ollama_chat/tools/get_url_spec.rb".freeze, "spec/ollama_chat/tools/move_file_spec.rb".freeze, "spec/ollama_chat/tools/open_file_in_editor_spec.rb".freeze, "spec/ollama_chat/tools/paste_from_clipboard_spec.rb".freeze, "spec/ollama_chat/tools/paste_into_editor_spec.rb".freeze, "spec/ollama_chat/tools/patch_file_spec.rb".freeze, "spec/ollama_chat/tools/read_file_spec.rb".freeze, "spec/ollama_chat/tools/resolve_tag_spec.rb".freeze, "spec/ollama_chat/tools/retrieve_document_snippets_spec.rb".freeze, "spec/ollama_chat/tools/roll_dice_spec.rb".freeze, "spec/ollama_chat/tools/run_tests_spec.rb".freeze, "spec/ollama_chat/tools/search_web_spec.rb".freeze, "spec/ollama_chat/tools/write_file_spec.rb".freeze, "spec/ollama_chat/utils/analyze_directory_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/path_completer_spec.rb".freeze, "spec/ollama_chat/utils/png_metadata_extractor_spec.rb".freeze, "spec/ollama_chat/vim_spec.rb".freeze, "spec/ollama_chat/web_searching_spec.rb".freeze, "spec/spec_helper.rb".freeze]
24
24
 
25
25
  s.specification_version = 4
26
26
 
Binary file
@@ -282,7 +282,7 @@ describe OllamaChat::Parsing do
282
282
  "example.atom", "example.csv", "example.html", "example.pdf",
283
283
  "example.ps", "example.rb", "example.rss", "example.xml",
284
284
  "example_with_quote.html", "kitten.jpg", "prompt.txt",
285
- "searxng.json", "pirateweather.json", "fluffy.png",
285
+ "searxng.json", "pirateweather.json", "fluffy.png", "miyu.png",
286
286
  ].sort
287
287
  )
288
288
  end
@@ -124,7 +124,7 @@ describe OllamaChat::StateSelectors::StateSelector do
124
124
  # Mock the chooser to return a specific choice
125
125
  expect(selector).to receive(:choose_entry).with(
126
126
  %w[ [EXIT] enabled disabled low high ],
127
- prompt: 'Which operational paradigm should be engaged?'
127
+ prompt: 'Which operational paradigm should be engaged? %s'
128
128
  ).and_return(double(value: 'low'))
129
129
 
130
130
  selector.choose