ollama_chat 0.0.131 → 0.0.133

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: 8e7543207de9d23c4731b5c8b1e768ad28559f57a4d767bfcabaaf25dc7f4541
4
- data.tar.gz: 7a3a03b47e077f2c0b6fa7d042a910d8dab32d30bcd0253c0e706f105d0a4e86
3
+ metadata.gz: 9587b954a06f8bea7be16013029fb1c8464ae82ff49e5f386f9be8636383d33e
4
+ data.tar.gz: 68a5dad823096507c3b718442a45412b113a5dd13bb5affb7bcd5714f97fd337
5
5
  SHA512:
6
- metadata.gz: d585ff38e8daeb72ddccedf4eb0ef1711c35f843fb3028f73c00bad1df84045ba5228b82916dec834bb4c2d518a15c198a5f009eb5bc541bd46eca0513458542
7
- data.tar.gz: 291074810f529cf30873946a74e52a83de45461808ce0cb8aff4f366ef17c8cb70a5fccefc1b98c1b6e0a234dd2d67419788e59ad5da22ea64d1c1e04982b171
6
+ metadata.gz: 8d120d00e82bd94211b6cd7025032624191f1d2d70362715a0896712451f219711207cda98b095144c1ea33d3cde1e5f31ccaa6009087c963ece42a3a74bdf9b
7
+ data.tar.gz: 9ad6d00fc1d244ee9b4ff4f30cf5c7fdad3893c74a69c96e1599dc082c065955f440bfe4218d170e85a1e266d02341d94ad57a7a51f8a24a795f91aedd3a4b0a
data/CHANGES.md CHANGED
@@ -1,5 +1,77 @@
1
1
  # Changes
2
2
 
3
+ ## 2026-10-17 v0.0.133
4
+
5
+ ### Features
6
+
7
+ * **`context_manifest`**: Session-level manifest toggle for
8
+ `context_spook` output.
9
+ * Added `manifest: false` to `context:` in `default_config.yml`.
10
+ * Added `context_manifest_enabled` boolean column via migration `012`.
11
+ * Added `context_manifest` `DatabaseSwitch` in `switches.rb`.
12
+ * Seeded `context_manifest_enabled` from config in
13
+ `Session.with_defaults`.
14
+ * Added `manifest:` kwarg to `context_spook`, resolved via
15
+ `context_manifest.on?`.
16
+ * Added `-M`/`~M` flags to `/input` for tri-state manifest override.
17
+ * Added `context_manifest` to `/toggle` regexp, completion, and help.
18
+ * Displayed `context_manifest` state in `/info session`.
19
+
20
+ ### Dependencies
21
+
22
+ * Updated `ollama-ruby` dependency constraint from `~> 1.24` to `~> 1.25`
23
+ in `Rakefile` and `ollama_chat.gemspec`.
24
+ * Added local `ollama-ruby` gem source to `Gemfile` for development against
25
+ **1.25**.
26
+ * Bumped `context_spook` to **~> 1.7** in `Rakefile` and gemspec.
27
+
28
+ ### Fixes
29
+
30
+ * Replaced bare truthiness guard on `parse_png(source_io)` with `.full?` in
31
+ `parsing.rb` so `concat` is only called when content was actually
32
+ extracted, preventing spurious newlines.
33
+ * Replaced `@model_metadata.can?('thinking')` with
34
+ `@model_metadata&.can?('thinking')` in `use_model` within
35
+ `model_handling.rb` to prevent `NoMethodError` when metadata is `nil`.
36
+ * Updated `session_apply` to call `stringify_keys_recursive` on
37
+ `chat.config.trigger.to_h` to ensure string keys, matching access in
38
+ `trigger_inject` and `set_trigger_enabled`.
39
+ * Updated `plain` in `context_usage.rb` to return `'n/a'` instead of `nil`
40
+ when the context length is unavailable.
41
+ * Corrected YARD doc for the `check` option in
42
+ `lib/ollama_chat/utils/path_validator.rb` to list `false` instead of a
43
+ duplicate `true`, matching the `elsif check == false` branch.
44
+
45
+ ### Testing
46
+
47
+ * Updated `commands_spec.rb` stubs; added `-M`, `~M`, and no-flag tri-state
48
+ specs with session short-circuit assertions.
49
+ * Replaced weak `be_present` assertion in `session_management_spec.rb` with
50
+ a structural `include` check that pins string key types and expected
51
+ values.
52
+
53
+ ## 2026-10-12 v0.0.132
54
+
55
+ * `collection` now returns `@documents.collection.to_s`, making the return
56
+ type strictly `[String]`
57
+ * `clear_whole_collection` replaces the y/n `confirm?` with an `ask?` prompt
58
+ that requires typing the full collection name before clearing
59
+ * Log message includes `target.inspect` for greppability
60
+ * `commands_spec.rb`: `:default` → `'default'` in `rename_collection` and
61
+ `update_collection` expectations
62
+ * `rag_handling_spec.rb`: both `clear_whole_collection` specs rewritten to
63
+ stub `ask?` + `switch_history` instead of the removed `confirm?`
64
+ * Updated the `tins` runtime dependency constraint from `~> 1.60`, `>=
65
+ 1.60.1` to `~> 1.61` in `Rakefile` and `ollama_chat.gemspec`
66
+ * `feedback` gains a `timeout:` kwarg; when set, calls `chat.confirm?` with a
67
+ "press any key to continue (timeout in Xs)" prompt so the message doesn't
68
+ flash by
69
+ * `clear_tag_records` and `clear_collection_sources` in `rag_handling.rb`
70
+ pass `timeout: 3`
71
+ * `dialog.rb` adds `IOError` to the `STDIN.raw` exception rescue list
72
+ * `rag_handling_spec.rb` updated with `timeout: 3` in four `feedback`
73
+ expectations
74
+
3
75
  ## 2026-10-10 v0.0.131
4
76
 
5
77
  * Extracted ANSI, emoji, and formatting logic from `Information` into a new
data/Gemfile CHANGED
@@ -3,3 +3,5 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ gem 'ollama-ruby', path: '../ollama-ruby'
data/Rakefile CHANGED
@@ -39,7 +39,7 @@ GemHadar do
39
39
  )
40
40
 
41
41
  dependency 'excon', '~> 1.0'
42
- dependency 'ollama-ruby', '~> 1.23'
42
+ dependency 'ollama-ruby', '~> 1.25'
43
43
  dependency 'documentrix', '>= 0.8.0'
44
44
  dependency 'unix_socks', '>= 0.4'
45
45
  dependency 'rss', '~> 0.3'
@@ -49,14 +49,14 @@ GemHadar do
49
49
  dependency 'reverse_markdown', '~> 3.0'
50
50
  dependency 'kramdown-ansi', '~> 0.5'
51
51
  dependency 'complex_config', '~> 0.22', '>= 0.22.2'
52
- dependency 'tins', '~> 1.60', '>= 1.60.1'
52
+ dependency 'tins', '~> 1.61'
53
53
  dependency 'search_ui', '>= 0.2'
54
54
  dependency 'amatch', '~> 0.4'
55
55
  dependency 'pdf-reader', '~> 2.0'
56
56
  dependency 'bigdecimal', '~> 3.1'
57
57
  dependency 'csv', '~> 3.0'
58
58
  dependency 'const_conf', '~> 0.9'
59
- dependency 'context_spook', '~> 1.6'
59
+ dependency 'context_spook', '~> 1.7'
60
60
  dependency 'infobar', '>= 0.13.1'
61
61
  dependency 'rubyzip', '~> 3.0'
62
62
  dependency 'sequel', '~> 5.0'
@@ -161,14 +161,14 @@ module OllamaChat::Commands
161
161
 
162
162
  command(
163
163
  name: :toggle,
164
- regexp: %r(^/toggle(?:\s+(markdown|stream|location|runtime_info|voice|think_loud|think_strip|embedding|memory_trigger)(?:\s+(-[yn]))?)?$),
165
- complete: [ 'toggle', %w[ markdown stream location runtime_info voice think_loud think_strip embedding memory_trigger ] ],
164
+ regexp: %r(^/toggle(?:\s+(markdown|stream|location|runtime_info|voice|think_loud|think_strip|embedding|memory_trigger|context_manifest)(?:\s+(-[yn]))?)?$),
165
+ complete: [ 'toggle', %w[ markdown stream location runtime_info voice think_loud think_strip embedding memory_trigger context_manifest ] ],
166
166
  options: '[-y|-n]',
167
167
  help: <<~EOT
168
168
  🎛️ Toggle feature switches
169
- (markdown, stream, location, runtime_info,
170
- voice, think_loud, think_strip, embedding, memory_trigger)
171
- Options: -y (on), -n (off)
169
+ (markdown, stream, location, runtime_info,
170
+ voice, think_loud, think_strip, embedding, memory_trigger,
171
+ context_manifest)
172
172
  EOT
173
173
  ) do |toggle_name, flag|
174
174
  if toggle_name == 'embedding'
@@ -191,7 +191,7 @@ module OllamaChat::Commands
191
191
  end
192
192
  else
193
193
  feedback(
194
- "Available toggles: markdown|stream|location|runtime_info|voice|think_loud|think_strip|embedding|memory_trigger"
194
+ "Available toggles: markdown|stream|location|runtime_info|voice|think_loud|think_strip|embedding|memory_trigger|context_manifest"
195
195
  )
196
196
  end
197
197
  :next
@@ -859,12 +859,13 @@ module OllamaChat::Commands
859
859
 
860
860
  command(
861
861
  name: :input,
862
- regexp: %r(^/input(?:\s+(path|context|embedding|summary)(?:\s*(?=\z))?)?((?:\s+-(?:[apreim]|c\s*#{OllamaChat::COLLECTION_NAME_REGEXP.source}|w\s*\d+|t\s*[-\w\.]+(?:,[-\w\.]+)*|l\s*[-\w]+))*)(?:\s+([^-].*))?$),
862
+ regexp: %r(^/input(?:\s+(path|context|embedding|summary)(?:\s*(?=\z))?)?((?:\s+(?:-(?:[apreimM]|c\s*#{OllamaChat::COLLECTION_NAME_REGEXP.source}|w\s*\d+|t\s*[-\w\.]+(?:,[-\w\.]+)*|l\s*[-\w]+)|~M))*)(?:\s+([^-].*))?$),
863
863
  optional: true,
864
864
  complete: [ 'input', %w[ path context embedding summary ] ],
865
865
  options: <<~EOT,
866
866
  [
867
867
  -w|-a|-p|-e|-m|-i|
868
+ -M|~M|
868
869
  -c <collection>|
869
870
  -t <tags>|
870
871
  -l <language>
@@ -879,8 +880,8 @@ module OllamaChat::Commands
879
880
  path → raw file read (no parsing)
880
881
  Options: -p (pattern), -w [words], -a (all),
881
882
  -c [collection], -t [tags], -e (edit),
882
- -m (monochrome), -i (summary instruction),
883
- -l [language]
883
+ -m (monochrome), -M/~M (manifest),
884
+ -i (summary instruction), -l [language]
884
885
  EOT
885
886
  ) do |input_mode,opts,arg|
886
887
  disable_content_parsing
@@ -907,15 +908,17 @@ module OllamaChat::Commands
907
908
  next :next
908
909
  end
909
910
  when 'context'
910
- opts = go_command('pa', opts)
911
+ manifest_passed = opts =~ /[-~]M/
912
+ opts = go_command('paM', opts)
913
+ manifest = manifest_passed ? opts[?M] : session.context_manifest_enabled
911
914
  if opts[?p]
912
915
  all = opts.fetch(?a, false)
913
916
  patterns = extract_patterns(arg).full? || [ '**/*' ]
914
- next context_spook(patterns, all:) || :next
917
+ next context_spook(patterns, all:, manifest: ) || :next
915
918
  elsif arg
916
- next context_spook(Array(arg.to_s), all: true) || :next
919
+ next context_spook(Array(arg.to_s), all: true, manifest:) || :next
917
920
  else
918
- next context_spook(nil) || :next
921
+ next context_spook(nil, manifest:) || :next
919
922
  end
920
923
  when 'embedding'
921
924
  disable_content_parsing
@@ -50,11 +50,11 @@ module OllamaChat
50
50
 
51
51
  # Plain (uncolored) usage string, e.g. `73.1 KT of 262.1 KT (27.9%)`.
52
52
  #
53
- # @return [String, nil] the usage string, or nil when the context length
53
+ # @return [String] the usage string, or 'n/a' when the context length
54
54
  # is unknown.
55
55
  def plain
56
56
  ctx = @chat.current_context_length
57
- return nil unless ctx
57
+ return 'n/a' unless ctx
58
58
 
59
59
  es = estimate
60
60
  '%s · %s of %s' % [
@@ -0,0 +1,6 @@
1
+ Sequel.migration do
2
+ change do
3
+ add_column :sessions, :context_manifest_enabled, :boolean,
4
+ null: false, default: false
5
+ end
6
+ end
@@ -28,6 +28,7 @@ class OllamaChat::Database::Models::Session < Sequel::Model(OllamaChat::DB)
28
28
  validates_presence :created_at
29
29
 
30
30
  validates_presence :context_format
31
+ validates_presence :context_manifest_enabled
31
32
  validates_presence :current_voice
32
33
  validates_presence :document_policy
33
34
  validates_presence :embedding_enabled
@@ -146,6 +147,9 @@ class OllamaChat::Database::Models::Session < Sequel::Model(OllamaChat::DB)
146
147
  # @!attribute [v] context_format
147
148
  # @return [String] The format used for project context generation (e.g., 'JSON', 'TOON').
148
149
  #
150
+ # @!attribute [v] context_manifest_enabled
151
+ # @return [Boolean] Whether context files use manifest mode (metadata only, no content).
152
+ #
149
153
  # @!attribute [v] working_directory
150
154
  # @return [String] The directory used as the working context for this session.
151
155
  #
@@ -193,29 +197,30 @@ class OllamaChat::Database::Models::Session < Sequel::Model(OllamaChat::DB)
193
197
  current_model = chat.initial_model
194
198
  model_options = chat.get_stored_model_options(current_model)
195
199
  attributes = {
196
- name: ,
197
- current_model: ,
198
- current_collection: chat.initial_collection,
199
- default_persona_name: chat.initial_persona_name,
200
- current_system_prompt: chat.initial_system_prompt,
201
- tools_enabled: chat.config.tools.enabled,
202
- tools_default_enabled: ,
203
- think_mode: chat.config.think.mode,
204
- think_loud_enabled: chat.config.think.loud,
205
- embedding_enabled: chat.config.embedding.enabled,
206
- document_policy: chat.config.document_policy,
207
- runtime_info_enabled: chat.config.runtime_info.enabled,
208
- think_strip_enabled: chat.config.think.strip,
209
- markdown_enabled: chat.config.markdown,
210
- stream_enabled: chat.config.stream,
211
- location_enabled: chat.config.location.enabled,
212
- voice_enabled: chat.config.voice.enabled,
213
- model_options: ,
214
- current_voice: chat.config.voice.default,
215
- context_format: chat.config.context.format,
216
- working_directory: Dir.pwd,
217
- messages: '',
218
- trigger: nil,
200
+ name: ,
201
+ current_model: ,
202
+ current_collection: chat.initial_collection,
203
+ default_persona_name: chat.initial_persona_name,
204
+ current_system_prompt: chat.initial_system_prompt,
205
+ tools_enabled: chat.config.tools.enabled,
206
+ tools_default_enabled: ,
207
+ think_mode: chat.config.think.mode,
208
+ think_loud_enabled: chat.config.think.loud,
209
+ embedding_enabled: chat.config.embedding.enabled,
210
+ document_policy: chat.config.document_policy,
211
+ runtime_info_enabled: chat.config.runtime_info.enabled,
212
+ think_strip_enabled: chat.config.think.strip,
213
+ markdown_enabled: chat.config.markdown,
214
+ stream_enabled: chat.config.stream,
215
+ location_enabled: chat.config.location.enabled,
216
+ voice_enabled: chat.config.voice.enabled,
217
+ model_options: ,
218
+ current_voice: chat.config.voice.default,
219
+ context_format: chat.config.context.format,
220
+ context_manifest_enabled: chat.config.context.manifest,
221
+ working_directory: Dir.pwd,
222
+ messages: '',
223
+ trigger: nil,
219
224
  }
220
225
  new(attributes)
221
226
  end
@@ -73,7 +73,7 @@ module OllamaChat::Dialog
73
73
  min = 0
74
74
  time = timeout
75
75
  end
76
- exceptions = [ (IRB::Abort if defined? IRB), Interrupt ].compact
76
+ exceptions = [ (IRB::Abort if defined? IRB), Interrupt, IOError ].compact
77
77
  begin
78
78
  keypress = STDIN.raw(min:, time:, intr: true) do |io|
79
79
  io.getc
@@ -33,9 +33,12 @@ module OllamaChat::Feedback
33
33
  # message ends with exactly one newline before writing.
34
34
  # Set to false for mid-line or no-trailing-newline output.
35
35
  # @return [nil]
36
- def feedback(msg, type: nil, output: STDOUT, newline: true)
36
+ def feedback(msg, type: nil, output: STDOUT, newline: true, timeout: nil)
37
37
  prefix = PREFIXES[type&.to_sym]&.+(' ')
38
38
  newline and msg = msg.sub(/(?<!\n)\z/, ?\n)
39
39
  output.print(prefix.to_s + msg)
40
+ timeout.nil? and return
41
+ chat.confirm?(prompt: '⏎ Press any key to continue (%s). ', timeout:)
42
+ nil
40
43
  end
41
44
  end
@@ -165,6 +165,7 @@ module OllamaChat::Information
165
165
  end
166
166
  output.print ' '; location.show(output:)
167
167
  output.print ' '; context_format.show(output:)
168
+ output.print ' '; context_manifest.show(output:)
168
169
  end
169
170
 
170
171
  # Displays the current runtime environment details, split into static
@@ -80,6 +80,8 @@ module OllamaChat::InputContent
80
80
  #
81
81
  # @param patterns [Array<String>, nil] Optional array of glob patterns to
82
82
  # filter files
83
+ # @param manifest [Boolean, nil] Override manifest mode; nil uses the
84
+ # session default (`/toggle context_manifest`)
83
85
  # @return [String, nil] JSON string of context data or nil if no context
84
86
  # could be generated
85
87
  #
@@ -91,12 +93,13 @@ module OllamaChat::InputContent
91
93
  #
92
94
  # @example Load default context
93
95
  # context_spook(nil)
94
- def context_spook(patterns, all: false)
95
- format = @context_format.selected
96
- myself = self
96
+ def context_spook(patterns, all: false, manifest: nil)
97
+ manifest = manifest.nil? ? context_manifest.on? : manifest
98
+ format = @context_format.selected
99
+ myself = self
97
100
  if patterns
98
101
  count = 0
99
- ctx = ContextSpook::generate_context(verbose: true, format:) do |context|
102
+ ctx = ContextSpook::generate_context(verbose: true, format:, manifest:) do |context|
100
103
  context do
101
104
  myself.file_set_each(patterns, all:) do |filename|
102
105
  filename.file? or next
@@ -113,7 +116,7 @@ module OllamaChat::InputContent
113
116
  end
114
117
  else
115
118
  if context_filename = choose_filename('.contexts/*.rb')
116
- ContextSpook.generate_context(context_filename, verbose: true, format:).
119
+ ContextSpook.generate_context(context_filename, verbose: true, format:, manifest:).
117
120
  send("to_#{format.downcase}")
118
121
  end
119
122
  end
@@ -595,7 +595,7 @@ module OllamaChat::ModelHandling
595
595
 
596
596
  if old_model != @model
597
597
  reconfigure_model_options(profile:, keep_options:)
598
- if @model_metadata.can?('thinking')
598
+ if @model_metadata&.can?('thinking')
599
599
  unless think_mode_states.include?(session.think_mode)
600
600
  default_think_mode = @model_metadata&.thinking&.default
601
601
  if default_think_mode
@@ -507,6 +507,7 @@ think:
507
507
  strip: false
508
508
  context:
509
509
  format: JSON
510
+ manifest: false
510
511
  compaction:
511
512
  enabled: true
512
513
  reserve:
@@ -325,7 +325,7 @@ module OllamaChat::Parsing
325
325
  add_image(images, source_io, source)
326
326
  if source_io&.content_type&.sub_type == 'png'
327
327
  source_io.rewind
328
- if results = parse_png(source_io)
328
+ if results = parse_png(source_io).full?
329
329
  contents.concat results
330
330
  end
331
331
  end
@@ -63,9 +63,9 @@ module OllamaChat::RAGHandling
63
63
 
64
64
  # Returns the name of the currently active document collection.
65
65
  #
66
- # @return [String, Symbol] the name of the current collection
66
+ # @return [String] the name of the current collection
67
67
  def collection
68
- @documents.collection
68
+ @documents.collection.to_s
69
69
  end
70
70
 
71
71
  # Sets the documents collection to collection.
@@ -246,9 +246,15 @@ module OllamaChat::RAGHandling
246
246
  # @return [ nil, OllamaChat::Chat ] when the user declines the confirmation
247
247
  # prompt, self otherwise.
248
248
  def clear_whole_collection
249
- if confirm?(prompt: '🔔 Really delete the whole collection? Are you sure? (y/n) ', yes: /\Ay/i)
249
+ target = collection
250
+ prompt = "🔥 This will incinerate every record in #{target.inspect}. " \
251
+ "Type the name to confirm (C-c ⇒ cancel): "
252
+ typed = switch_history(:collection_name) do
253
+ ask?(prompt:, prefill: target).full?(:strip)
254
+ end
255
+ if typed == target
250
256
  @documents.clear
251
- log(:info, "Collection cleared", data: { collection: })
257
+ log(:info, "Collection #{target.inspect} cleared", data: { collection: })
252
258
  feedback("Cleared collection #{bold{collection}}.", type: :info)
253
259
  self
254
260
  else
@@ -350,7 +356,8 @@ module OllamaChat::RAGHandling
350
356
  data: { collection:, tag:, source: })
351
357
  feedback(
352
358
  "Cleared tag #{tag} from collection #{bold{collection}}.",
353
- type: :info
359
+ type: :info,
360
+ timeout: 3,
354
361
  )
355
362
  end
356
363
 
@@ -411,7 +418,8 @@ module OllamaChat::RAGHandling
411
418
  data: { collection:, source: })
412
419
  feedback(
413
420
  "Removed source #{source} from collection #{bold{collection}}.",
414
- type: :info
421
+ type: :info,
422
+ timeout: 3,
415
423
  )
416
424
  end
417
425
  end
@@ -282,7 +282,9 @@ module OllamaChat::SessionManagement
282
282
  initial_persona_name.full? do |persona_name|
283
283
  collection = create_memory_collection(persona_name)
284
284
  session.trigger.present? or
285
- session.trigger = { collection => chat.config.trigger.to_h }
285
+ session.trigger = {
286
+ collection => chat.config.trigger.to_h.stringify_keys_recursive
287
+ }
286
288
  end
287
289
  session.update(working_directory: Dir.pwd)
288
290
  init_history
@@ -335,6 +335,13 @@ module OllamaChat::Switches
335
335
  # @return [OllamaChat::Switches::Switch] the memory trigger switch instance
336
336
  attr_reader :memory_trigger
337
337
 
338
+ # Controls whether context files are generated in manifest mode
339
+ # (metadata only, no file content).
340
+ #
341
+ # @!attribute [r] context_manifest
342
+ # @return [OllamaChat::Switches::DatabaseSwitch] the context manifest switch
343
+ attr_reader :context_manifest
344
+
338
345
  # Initializes the various switches for configuring the application's behavior.
339
346
  #
340
347
  # This method creates and configures the database and local switch objects
@@ -457,5 +464,13 @@ module OllamaChat::Switches
457
464
  false => "Memory trigger inactive.",
458
465
  },
459
466
  )
467
+ @context_manifest = DatabaseSwitch.new(
468
+ chat: self,
469
+ attribute: :context_manifest_enabled,
470
+ msg: {
471
+ true => "Context manifest enabled.",
472
+ false => "Context manifest disabled.",
473
+ }
474
+ )
460
475
  end
461
476
  end
@@ -30,7 +30,7 @@ module OllamaChat::Utils::PathValidator
30
30
  # * `:file` - Verifies that the path exists and is a file.
31
31
  # * `:directory` - Verifies that the path exists and is a directory.
32
32
  # * `true` - Verifies only that the path exists (resolves symlinks).
33
- # * `true` - Verifies only that the path does not exist (resolves symlinks).
33
+ # * `false` - Verifies only that the path does not exist (resolves symlinks).
34
34
  # * `nil` (default) - No existence or type check is performed.
35
35
  #
36
36
  # @return [Pathname] The canonicalised absolute path if validation passes.
@@ -1,6 +1,6 @@
1
1
  module OllamaChat
2
2
  # OllamaChat version
3
- VERSION = '0.0.131'
3
+ VERSION = '0.0.133'
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:
data/ollama_chat.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: ollama_chat 0.0.131 ruby lib
2
+ # stub: ollama_chat 0.0.133 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "ollama_chat".freeze
6
- s.version = "0.0.131".freeze
6
+ s.version = "0.0.133".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,8 +12,8 @@ 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, "ollama_chat_log".freeze]
15
- s.extra_rdoc_files = ["README.md".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/asr.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/collection_search.rb".freeze, "lib/ollama_chat/command_concern.rb".freeze, "lib/ollama_chat/commands.rb".freeze, "lib/ollama_chat/compaction.rb".freeze, "lib/ollama_chat/config_handling.rb".freeze, "lib/ollama_chat/context_usage.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/migrations/005_add_context_format_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/006_rename_system_prompt_context_to_system.rb".freeze, "lib/ollama_chat/database/migrations/007_add_collections_table.rb".freeze, "lib/ollama_chat/database/migrations/008_drop_think_mode_constraint.rb".freeze, "lib/ollama_chat/database/migrations/009_add_app_states_table.rb".freeze, "lib/ollama_chat/database/migrations/010_add_enabled_to_collections.rb".freeze, "lib/ollama_chat/database/migrations/011_add_trigger_to_sessions.rb".freeze, "lib/ollama_chat/database/models/app_state.rb".freeze, "lib/ollama_chat/database/models/collection.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/feedback.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/invidious.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/say.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/speaker.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/token_estimator.rb".freeze, "lib/ollama_chat/token_estimator/crude.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/eval_ruby.rb".freeze, "lib/ollama_chat/tools/execute_grep.rb".freeze, "lib/ollama_chat/tools/execute_jira_twg.rb".freeze, "lib/ollama_chat/tools/execute_ri.rb".freeze, "lib/ollama_chat/tools/execute_shell.rb".freeze, "lib/ollama_chat/tools/forget.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/list_directory.rb".freeze, "lib/ollama_chat/tools/lookup_gem_path.rb".freeze, "lib/ollama_chat/tools/lookup_group.rb".freeze, "lib/ollama_chat/tools/memorize.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/roll_dice.rb".freeze, "lib/ollama_chat/tools/run_tests.rb".freeze, "lib/ollama_chat/tools/search_knowledge.rb".freeze, "lib/ollama_chat/tools/search_web.rb".freeze, "lib/ollama_chat/tools/write_file.rb".freeze, "lib/ollama_chat/tts.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/analyze_directory.rb".freeze, "lib/ollama_chat/utils/audio_player.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/excon_logger.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/json_jsonl_io.rb".freeze, "lib/ollama_chat/utils/log_rotation.rb".freeze, "lib/ollama_chat/utils/log_viewer.rb".freeze, "lib/ollama_chat/utils/ordered_queue.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/strip_ansi.rb".freeze, "lib/ollama_chat/utils/tag_resolver.rb".freeze, "lib/ollama_chat/utils/utf8_converter.rb".freeze, "lib/ollama_chat/utils/value_formatter.rb".freeze, "lib/ollama_chat/uuid_v7.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_log".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/asr.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/collection_search.rb".freeze, "lib/ollama_chat/command_concern.rb".freeze, "lib/ollama_chat/commands.rb".freeze, "lib/ollama_chat/compaction.rb".freeze, "lib/ollama_chat/config_handling.rb".freeze, "lib/ollama_chat/context_usage.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/migrations/005_add_context_format_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/006_rename_system_prompt_context_to_system.rb".freeze, "lib/ollama_chat/database/migrations/007_add_collections_table.rb".freeze, "lib/ollama_chat/database/migrations/008_drop_think_mode_constraint.rb".freeze, "lib/ollama_chat/database/migrations/009_add_app_states_table.rb".freeze, "lib/ollama_chat/database/migrations/010_add_enabled_to_collections.rb".freeze, "lib/ollama_chat/database/migrations/011_add_trigger_to_sessions.rb".freeze, "lib/ollama_chat/database/models/app_state.rb".freeze, "lib/ollama_chat/database/models/collection.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/feedback.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/invidious.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/say.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/speaker.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/token_estimator.rb".freeze, "lib/ollama_chat/token_estimator/crude.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/eval_ruby.rb".freeze, "lib/ollama_chat/tools/execute_grep.rb".freeze, "lib/ollama_chat/tools/execute_jira_twg.rb".freeze, "lib/ollama_chat/tools/execute_ri.rb".freeze, "lib/ollama_chat/tools/execute_shell.rb".freeze, "lib/ollama_chat/tools/forget.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/list_directory.rb".freeze, "lib/ollama_chat/tools/lookup_gem_path.rb".freeze, "lib/ollama_chat/tools/lookup_group.rb".freeze, "lib/ollama_chat/tools/memorize.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/roll_dice.rb".freeze, "lib/ollama_chat/tools/run_tests.rb".freeze, "lib/ollama_chat/tools/search_knowledge.rb".freeze, "lib/ollama_chat/tools/search_web.rb".freeze, "lib/ollama_chat/tools/write_file.rb".freeze, "lib/ollama_chat/tts.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/analyze_directory.rb".freeze, "lib/ollama_chat/utils/audio_player.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/excon_logger.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/json_jsonl_io.rb".freeze, "lib/ollama_chat/utils/log_rotation.rb".freeze, "lib/ollama_chat/utils/log_viewer.rb".freeze, "lib/ollama_chat/utils/ordered_queue.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/strip_ansi.rb".freeze, "lib/ollama_chat/utils/tag_resolver.rb".freeze, "lib/ollama_chat/utils/utf8_converter.rb".freeze, "lib/ollama_chat/utils/value_formatter.rb".freeze, "lib/ollama_chat/uuid_v7.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_ps.json".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.epub".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/linux.oga".freeze, "spec/assets/miyu.png".freeze, "spec/assets/pirateweather.json".freeze, "spec/assets/prompt.txt".freeze, "spec/assets/searxng.json".freeze, "spec/ollama_chat/asr_spec.rb".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/collection_search_spec.rb".freeze, "spec/ollama_chat/command_concern_spec.rb".freeze, "spec/ollama_chat/commands_spec.rb".freeze, "spec/ollama_chat/compaction_spec.rb".freeze, "spec/ollama_chat/config_handling_spec.rb".freeze, "spec/ollama_chat/context_usage_spec.rb".freeze, "spec/ollama_chat/conversation_spec.rb".freeze, "spec/ollama_chat/database/models/favourite_spec.rb".freeze, "spec/ollama_chat/favourites_management_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/http_handling_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/input_content_spec.rb".freeze, "spec/ollama_chat/invidious_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/message_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/prompt_handling_spec.rb".freeze, "spec/ollama_chat/prompt_management_spec.rb".freeze, "spec/ollama_chat/rag_handling_spec.rb".freeze, "spec/ollama_chat/redis_cache_spec.rb".freeze, "spec/ollama_chat/server_socket_spec.rb".freeze, "spec/ollama_chat/session_management_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/speaker_spec.rb".freeze, "spec/ollama_chat/state_selectors_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/system_prompt_management_spec.rb".freeze, "spec/ollama_chat/think_control_spec.rb".freeze, "spec/ollama_chat/token_estimator_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/concern_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/execute_grep_spec.rb".freeze, "spec/ollama_chat/tools/execute_jira_twg_spec.rb".freeze, "spec/ollama_chat/tools/execute_ri_spec.rb".freeze, "spec/ollama_chat/tools/execute_shell_spec.rb".freeze, "spec/ollama_chat/tools/forget_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/list_directory_spec.rb".freeze, "spec/ollama_chat/tools/lookup_gem_path_spec.rb".freeze, "spec/ollama_chat/tools/lookup_group_spec.rb".freeze, "spec/ollama_chat/tools/memorize_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/roll_dice_spec.rb".freeze, "spec/ollama_chat/tools/run_tests_spec.rb".freeze, "spec/ollama_chat/tools/search_knowledge_spec.rb".freeze, "spec/ollama_chat/tools/search_web_spec.rb".freeze, "spec/ollama_chat/tools/write_file_spec.rb".freeze, "spec/ollama_chat/tts_spec.rb".freeze, "spec/ollama_chat/utils/analyze_directory_spec.rb".freeze, "spec/ollama_chat/utils/audio_player_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/excon_logger_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/log_rotation_spec.rb".freeze, "spec/ollama_chat/utils/log_viewer_spec.rb".freeze, "spec/ollama_chat/utils/ordered_queue_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]
15
+ s.extra_rdoc_files = ["README.md".freeze, "lib/ollama_chat.rb".freeze, "lib/ollama_chat/asr.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/collection_search.rb".freeze, "lib/ollama_chat/command_concern.rb".freeze, "lib/ollama_chat/commands.rb".freeze, "lib/ollama_chat/compaction.rb".freeze, "lib/ollama_chat/config_handling.rb".freeze, "lib/ollama_chat/context_usage.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/migrations/005_add_context_format_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/006_rename_system_prompt_context_to_system.rb".freeze, "lib/ollama_chat/database/migrations/007_add_collections_table.rb".freeze, "lib/ollama_chat/database/migrations/008_drop_think_mode_constraint.rb".freeze, "lib/ollama_chat/database/migrations/009_add_app_states_table.rb".freeze, "lib/ollama_chat/database/migrations/010_add_enabled_to_collections.rb".freeze, "lib/ollama_chat/database/migrations/011_add_trigger_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/012_add_context_manifest_enabled_to_sessions.rb".freeze, "lib/ollama_chat/database/models/app_state.rb".freeze, "lib/ollama_chat/database/models/collection.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/feedback.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/invidious.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/say.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/speaker.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/token_estimator.rb".freeze, "lib/ollama_chat/token_estimator/crude.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/eval_ruby.rb".freeze, "lib/ollama_chat/tools/execute_grep.rb".freeze, "lib/ollama_chat/tools/execute_jira_twg.rb".freeze, "lib/ollama_chat/tools/execute_ri.rb".freeze, "lib/ollama_chat/tools/execute_shell.rb".freeze, "lib/ollama_chat/tools/forget.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/list_directory.rb".freeze, "lib/ollama_chat/tools/lookup_gem_path.rb".freeze, "lib/ollama_chat/tools/lookup_group.rb".freeze, "lib/ollama_chat/tools/memorize.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/roll_dice.rb".freeze, "lib/ollama_chat/tools/run_tests.rb".freeze, "lib/ollama_chat/tools/search_knowledge.rb".freeze, "lib/ollama_chat/tools/search_web.rb".freeze, "lib/ollama_chat/tools/write_file.rb".freeze, "lib/ollama_chat/tts.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/analyze_directory.rb".freeze, "lib/ollama_chat/utils/audio_player.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/excon_logger.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/json_jsonl_io.rb".freeze, "lib/ollama_chat/utils/log_rotation.rb".freeze, "lib/ollama_chat/utils/log_viewer.rb".freeze, "lib/ollama_chat/utils/ordered_queue.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/strip_ansi.rb".freeze, "lib/ollama_chat/utils/tag_resolver.rb".freeze, "lib/ollama_chat/utils/utf8_converter.rb".freeze, "lib/ollama_chat/utils/value_formatter.rb".freeze, "lib/ollama_chat/uuid_v7.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_log".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/asr.rb".freeze, "lib/ollama_chat/chat.rb".freeze, "lib/ollama_chat/clipboard.rb".freeze, "lib/ollama_chat/collection_search.rb".freeze, "lib/ollama_chat/command_concern.rb".freeze, "lib/ollama_chat/commands.rb".freeze, "lib/ollama_chat/compaction.rb".freeze, "lib/ollama_chat/config_handling.rb".freeze, "lib/ollama_chat/context_usage.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/migrations/005_add_context_format_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/006_rename_system_prompt_context_to_system.rb".freeze, "lib/ollama_chat/database/migrations/007_add_collections_table.rb".freeze, "lib/ollama_chat/database/migrations/008_drop_think_mode_constraint.rb".freeze, "lib/ollama_chat/database/migrations/009_add_app_states_table.rb".freeze, "lib/ollama_chat/database/migrations/010_add_enabled_to_collections.rb".freeze, "lib/ollama_chat/database/migrations/011_add_trigger_to_sessions.rb".freeze, "lib/ollama_chat/database/migrations/012_add_context_manifest_enabled_to_sessions.rb".freeze, "lib/ollama_chat/database/models/app_state.rb".freeze, "lib/ollama_chat/database/models/collection.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/feedback.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/invidious.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/say.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/speaker.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/token_estimator.rb".freeze, "lib/ollama_chat/token_estimator/crude.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/eval_ruby.rb".freeze, "lib/ollama_chat/tools/execute_grep.rb".freeze, "lib/ollama_chat/tools/execute_jira_twg.rb".freeze, "lib/ollama_chat/tools/execute_ri.rb".freeze, "lib/ollama_chat/tools/execute_shell.rb".freeze, "lib/ollama_chat/tools/forget.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/list_directory.rb".freeze, "lib/ollama_chat/tools/lookup_gem_path.rb".freeze, "lib/ollama_chat/tools/lookup_group.rb".freeze, "lib/ollama_chat/tools/memorize.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/roll_dice.rb".freeze, "lib/ollama_chat/tools/run_tests.rb".freeze, "lib/ollama_chat/tools/search_knowledge.rb".freeze, "lib/ollama_chat/tools/search_web.rb".freeze, "lib/ollama_chat/tools/write_file.rb".freeze, "lib/ollama_chat/tts.rb".freeze, "lib/ollama_chat/utils.rb".freeze, "lib/ollama_chat/utils/analyze_directory.rb".freeze, "lib/ollama_chat/utils/audio_player.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/excon_logger.rb".freeze, "lib/ollama_chat/utils/fetcher.rb".freeze, "lib/ollama_chat/utils/json_jsonl_io.rb".freeze, "lib/ollama_chat/utils/log_rotation.rb".freeze, "lib/ollama_chat/utils/log_viewer.rb".freeze, "lib/ollama_chat/utils/ordered_queue.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/strip_ansi.rb".freeze, "lib/ollama_chat/utils/tag_resolver.rb".freeze, "lib/ollama_chat/utils/utf8_converter.rb".freeze, "lib/ollama_chat/utils/value_formatter.rb".freeze, "lib/ollama_chat/uuid_v7.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_ps.json".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.epub".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/linux.oga".freeze, "spec/assets/miyu.png".freeze, "spec/assets/pirateweather.json".freeze, "spec/assets/prompt.txt".freeze, "spec/assets/searxng.json".freeze, "spec/ollama_chat/asr_spec.rb".freeze, "spec/ollama_chat/chat_spec.rb".freeze, "spec/ollama_chat/clipboard_spec.rb".freeze, "spec/ollama_chat/collection_search_spec.rb".freeze, "spec/ollama_chat/command_concern_spec.rb".freeze, "spec/ollama_chat/commands_spec.rb".freeze, "spec/ollama_chat/compaction_spec.rb".freeze, "spec/ollama_chat/config_handling_spec.rb".freeze, "spec/ollama_chat/context_usage_spec.rb".freeze, "spec/ollama_chat/conversation_spec.rb".freeze, "spec/ollama_chat/database/models/favourite_spec.rb".freeze, "spec/ollama_chat/favourites_management_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/http_handling_spec.rb".freeze, "spec/ollama_chat/information_spec.rb".freeze, "spec/ollama_chat/input_content_spec.rb".freeze, "spec/ollama_chat/invidious_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/message_spec.rb".freeze, "spec/ollama_chat/model_handling_spec.rb".freeze, "spec/ollama_chat/parsing_spec.rb".freeze, "spec/ollama_chat/prompt_handling_spec.rb".freeze, "spec/ollama_chat/prompt_management_spec.rb".freeze, "spec/ollama_chat/rag_handling_spec.rb".freeze, "spec/ollama_chat/redis_cache_spec.rb".freeze, "spec/ollama_chat/server_socket_spec.rb".freeze, "spec/ollama_chat/session_management_spec.rb".freeze, "spec/ollama_chat/source_fetching_spec.rb".freeze, "spec/ollama_chat/speaker_spec.rb".freeze, "spec/ollama_chat/state_selectors_spec.rb".freeze, "spec/ollama_chat/switches_spec.rb".freeze, "spec/ollama_chat/system_prompt_management_spec.rb".freeze, "spec/ollama_chat/think_control_spec.rb".freeze, "spec/ollama_chat/token_estimator_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/concern_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/execute_grep_spec.rb".freeze, "spec/ollama_chat/tools/execute_jira_twg_spec.rb".freeze, "spec/ollama_chat/tools/execute_ri_spec.rb".freeze, "spec/ollama_chat/tools/execute_shell_spec.rb".freeze, "spec/ollama_chat/tools/forget_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/list_directory_spec.rb".freeze, "spec/ollama_chat/tools/lookup_gem_path_spec.rb".freeze, "spec/ollama_chat/tools/lookup_group_spec.rb".freeze, "spec/ollama_chat/tools/memorize_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/roll_dice_spec.rb".freeze, "spec/ollama_chat/tools/run_tests_spec.rb".freeze, "spec/ollama_chat/tools/search_knowledge_spec.rb".freeze, "spec/ollama_chat/tools/search_web_spec.rb".freeze, "spec/ollama_chat/tools/write_file_spec.rb".freeze, "spec/ollama_chat/tts_spec.rb".freeze, "spec/ollama_chat/utils/analyze_directory_spec.rb".freeze, "spec/ollama_chat/utils/audio_player_spec.rb".freeze, "spec/ollama_chat/utils/cache_fetcher_spec.rb".freeze, "spec/ollama_chat/utils/excon_logger_spec.rb".freeze, "spec/ollama_chat/utils/fetcher_spec.rb".freeze, "spec/ollama_chat/utils/log_rotation_spec.rb".freeze, "spec/ollama_chat/utils/log_viewer_spec.rb".freeze, "spec/ollama_chat/utils/ordered_queue_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]
@@ -33,7 +33,7 @@ Gem::Specification.new do |s|
33
33
  s.add_development_dependency(%q<simplecov>.freeze, [">= 0".freeze])
34
34
  s.add_development_dependency(%q<utils>.freeze, [">= 0".freeze])
35
35
  s.add_runtime_dependency(%q<excon>.freeze, ["~> 1.0".freeze])
36
- s.add_runtime_dependency(%q<ollama-ruby>.freeze, ["~> 1.23".freeze])
36
+ s.add_runtime_dependency(%q<ollama-ruby>.freeze, ["~> 1.25".freeze])
37
37
  s.add_runtime_dependency(%q<documentrix>.freeze, [">= 0.8.0".freeze])
38
38
  s.add_runtime_dependency(%q<unix_socks>.freeze, [">= 0.4".freeze])
39
39
  s.add_runtime_dependency(%q<rss>.freeze, ["~> 0.3".freeze])
@@ -43,14 +43,14 @@ Gem::Specification.new do |s|
43
43
  s.add_runtime_dependency(%q<reverse_markdown>.freeze, ["~> 3.0".freeze])
44
44
  s.add_runtime_dependency(%q<kramdown-ansi>.freeze, ["~> 0.5".freeze])
45
45
  s.add_runtime_dependency(%q<complex_config>.freeze, ["~> 0.22".freeze, ">= 0.22.2".freeze])
46
- s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.60".freeze, ">= 1.60.1".freeze])
46
+ s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.61".freeze])
47
47
  s.add_runtime_dependency(%q<search_ui>.freeze, [">= 0.2".freeze])
48
48
  s.add_runtime_dependency(%q<amatch>.freeze, ["~> 0.4".freeze])
49
49
  s.add_runtime_dependency(%q<pdf-reader>.freeze, ["~> 2.0".freeze])
50
50
  s.add_runtime_dependency(%q<bigdecimal>.freeze, ["~> 3.1".freeze])
51
51
  s.add_runtime_dependency(%q<csv>.freeze, ["~> 3.0".freeze])
52
52
  s.add_runtime_dependency(%q<const_conf>.freeze, ["~> 0.9".freeze])
53
- s.add_runtime_dependency(%q<context_spook>.freeze, ["~> 1.6".freeze])
53
+ s.add_runtime_dependency(%q<context_spook>.freeze, ["~> 1.7".freeze])
54
54
  s.add_runtime_dependency(%q<infobar>.freeze, [">= 0.13.1".freeze])
55
55
  s.add_runtime_dependency(%q<rubyzip>.freeze, ["~> 3.0".freeze])
56
56
  s.add_runtime_dependency(%q<sequel>.freeze, ["~> 5.0".freeze])
@@ -357,7 +357,7 @@ describe OllamaChat::Commands, protect_env: true do
357
357
  expect(chat.handle_input("/collection change")).to eq :next
358
358
  expect(STDOUT).to receive(:puts).with(/default/)
359
359
  expect(chat.handle_input("/collection list")).to eq :next
360
- expect(chat).to receive(:rename_collection).with(:default)
360
+ expect(chat).to receive(:rename_collection).with('default')
361
361
  expect(chat.handle_input("/collection rename")).to eq :next
362
362
  end
363
363
 
@@ -391,13 +391,13 @@ describe OllamaChat::Commands, protect_env: true do
391
391
  end
392
392
 
393
393
  it 'returns :next when "/collection update" has no changes' do
394
- expect(chat).to receive(:update_collection).with(:default)
394
+ expect(chat).to receive(:update_collection).with('default')
395
395
  .and_return nil
396
396
  expect(chat.handle_input("/collection update")).to eq :next
397
397
  end
398
398
 
399
399
  it 'returns results when "/collection update" has content' do
400
- expect(chat).to receive(:update_collection).with(:default)
400
+ expect(chat).to receive(:update_collection).with('default')
401
401
  .and_return 'updated 3'
402
402
  expect(chat.handle_input("/collection update")).to eq 'updated 3'
403
403
  end
@@ -606,27 +606,49 @@ describe OllamaChat::Commands, protect_env: true do
606
606
 
607
607
  context 'context' do
608
608
  it 'returns "success" when input is "/input context (.+)"' do
609
+ expect(chat.session).to receive(:context_manifest_enabled).and_call_original
609
610
  expect(chat).to receive(:context_spook).
610
- with([asset('example.rb')], all: true).and_return('success')
611
+ with([asset('example.rb')], all: true, manifest: false).and_return('success')
611
612
  expect(chat.handle_input("/input context #{asset('example.rb')}")).to eq 'success'
612
613
  end
613
614
 
614
615
  it 'returns "success" when input is "/input context -a -p (.+)"' do
616
+ expect(chat.session).to receive(:context_manifest_enabled).and_call_original
615
617
  expect(chat).to receive(:context_spook).
616
- with([asset('*.rb')], all: 1).and_return 'success'
618
+ with([asset('*.rb')], all: 1, manifest: false).and_return 'success'
617
619
  expect(chat.handle_input("/input context -a -p #{asset('*.rb')}")).
618
620
  to eq 'success'
619
621
  end
620
622
 
621
623
  it 'returns :next when input is "/input context" with "success"' do
624
+ expect(chat.session).to receive(:context_manifest_enabled).and_call_original
622
625
  expect(chat).to receive(:context_spook).and_return 'success'
623
626
  expect(chat.handle_input("/input context")).to eq 'success'
624
627
  end
625
628
 
626
629
  it 'returns :next when input is "/input context" without choosing' do
630
+ expect(chat.session).to receive(:context_manifest_enabled).and_call_original
627
631
  expect(chat).to receive(:context_spook).and_return nil
628
632
  expect(chat.handle_input("/input context")).to eq :next
629
633
  end
634
+
635
+ it 'forces manifest on with -M' do
636
+ expect(chat.session).not_to receive(:context_manifest_enabled)
637
+ expect(chat).to receive(:context_spook).
638
+ with([asset('example.rb')], all: true, manifest: 1).
639
+ and_return('success')
640
+ expect(chat.handle_input("/input context -M #{asset('example.rb')}")).
641
+ to eq 'success'
642
+ end
643
+
644
+ it 'forces manifest off with ~M' do
645
+ expect(chat.session).not_to receive(:context_manifest_enabled)
646
+ expect(chat).to receive(:context_spook).
647
+ with([asset('example.rb')], all: true, manifest: false).
648
+ and_return('success')
649
+ expect(chat.handle_input("/input context ~M #{asset('example.rb')}")).
650
+ to eq 'success'
651
+ end
630
652
  end
631
653
  end
632
654
 
@@ -46,9 +46,9 @@ describe OllamaChat::ContextUsage do
46
46
  expect(described_class.new(chat).plain).to eq '10.0% · 100.0 T of 1.0 KT'
47
47
  end
48
48
 
49
- it 'returns nil for plain when the context length is unknown' do
49
+ it 'returns "n/a" for plain when the context length is unknown' do
50
50
  expect(chat).to receive(:current_context_length).and_return nil
51
- expect(described_class.new(chat).plain).to be_nil
51
+ expect(described_class.new(chat).plain).to eq 'n/a'
52
52
  end
53
53
 
54
54
  it 'falls back to a bold n/a for colored when unknown' do
@@ -90,17 +90,20 @@ describe OllamaChat::RAGHandling do
90
90
  end
91
91
 
92
92
  describe '#clear_whole_collection' do
93
- it 'clears all documents and returns self when confirmed' do
94
- expect(chat).to receive(:confirm?).and_return(true)
95
- expect(docs).to receive(:collection).twice.and_return('default')
93
+ it 'clears all documents and returns self when name is typed' do
94
+ expect(docs).to receive(:collection).and_return('default').at_least(:once)
95
+ expect(chat).to receive(:switch_history) { |*, &blk| blk.call }
96
+ expect(chat).to receive(:ask?).and_return('default')
96
97
  expect(docs).to receive(:clear)
97
98
  expect(chat).to receive(:feedback)
98
99
  .with(a_string_including('Cleared collection'), type: :info)
99
100
  expect(chat.clear_whole_collection).to eq chat
100
101
  end
101
102
 
102
- it 'returns nil and reports denied when declined' do
103
- expect(chat).to receive(:confirm?).and_return(false)
103
+ it 'returns nil and reports denied when name does not match' do
104
+ expect(docs).to receive(:collection).and_return('default')
105
+ expect(chat).to receive(:switch_history) { |*, &blk| blk.call }
106
+ expect(chat).to receive(:ask?).and_return('other')
104
107
  expect(docs).not_to receive(:clear)
105
108
  expect(chat).to receive(:feedback).with('Denied.', type: :denied)
106
109
  expect(chat.clear_whole_collection).to be_nil
@@ -147,7 +150,7 @@ describe OllamaChat::RAGHandling do
147
150
  expect(docs).to receive(:clear).with(tags: [ 'mem' ])
148
151
  expect(chat).to receive(:log)
149
152
  expect(chat).to receive(:feedback)
150
- .with(a_string_including('Cleared tag mem'), type: :info)
153
+ .with(a_string_including('Cleared tag mem'), type: :info, timeout: 3)
151
154
  expect(chat).to receive(:feedback).with('Exiting chooser.')
152
155
  chat.clear_collection_tags
153
156
  expect(buf.string).to include('hello world')
@@ -192,7 +195,7 @@ describe OllamaChat::RAGHandling do
192
195
  expect(docs).to receive(:source_remove).with('a.rb')
193
196
  expect(chat).to receive(:log)
194
197
  expect(chat).to receive(:feedback)
195
- .with(a_string_including('Cleared tag t1'), type: :info)
198
+ .with(a_string_including('Cleared tag t1'), type: :info, timeout: 3)
196
199
  expect(chat).to receive(:feedback).with('Exiting chooser.')
197
200
  chat.clear_collection_tags
198
201
  expect(buf.string).to include('hello')
@@ -220,7 +223,7 @@ describe OllamaChat::RAGHandling do
220
223
  expect(docs).to receive(:source_remove).with('a.rb')
221
224
  expect(chat).to receive(:log)
222
225
  expect(chat).to receive(:feedback)
223
- .with(a_string_including('Cleared tag t1'), type: :info)
226
+ .with(a_string_including('Cleared tag t1'), type: :info, timeout: 3)
224
227
  expect(chat).to receive(:feedback).with('Exiting chooser.')
225
228
  chat.clear_collection_tags
226
229
  end
@@ -269,7 +272,7 @@ describe OllamaChat::RAGHandling do
269
272
  expect(docs).to receive(:source_remove).with('a.rb')
270
273
  expect(chat).to receive(:log)
271
274
  expect(chat).to receive(:feedback)
272
- .with(a_string_including('Removed source a.rb'), type: :info)
275
+ .with(a_string_including('Removed source a.rb'), type: :info, timeout: 3)
273
276
  expect(chat).to receive(:feedback).with('Exiting chooser.')
274
277
  chat.clear_collection_sources
275
278
  end
@@ -208,8 +208,14 @@ describe OllamaChat::SessionManagement do
208
208
  expect(chat.session).to receive(:update).with(working_directory: '/curr')
209
209
  expect(chat).to receive(:init_history)
210
210
  expect(chat.session_apply).to eq(chat.session)
211
- expect(chat.session.trigger).to be_present
212
211
  collection = 'memory-%s' % chat.session.default_persona_name
212
+ expect(chat.session.trigger).to include(
213
+ collection => a_hash_including(
214
+ 'enabled' => true,
215
+ 'prompt_name' => 'memory_rerank',
216
+ 'text_count' => 3
217
+ )
218
+ )
213
219
  expect(chat.database_collection?(collection)).to be_truthy
214
220
  end
215
221
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ollama_chat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.131
4
+ version: 0.0.133
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
@@ -141,14 +141,14 @@ dependencies:
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '1.23'
144
+ version: '1.25'
145
145
  type: :runtime
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '1.23'
151
+ version: '1.25'
152
152
  - !ruby/object:Gem::Dependency
153
153
  name: documentrix
154
154
  requirement: !ruby/object:Gem::Requirement
@@ -287,20 +287,14 @@ dependencies:
287
287
  requirements:
288
288
  - - "~>"
289
289
  - !ruby/object:Gem::Version
290
- version: '1.60'
291
- - - ">="
292
- - !ruby/object:Gem::Version
293
- version: 1.60.1
290
+ version: '1.61'
294
291
  type: :runtime
295
292
  prerelease: false
296
293
  version_requirements: !ruby/object:Gem::Requirement
297
294
  requirements:
298
295
  - - "~>"
299
296
  - !ruby/object:Gem::Version
300
- version: '1.60'
301
- - - ">="
302
- - !ruby/object:Gem::Version
303
- version: 1.60.1
297
+ version: '1.61'
304
298
  - !ruby/object:Gem::Dependency
305
299
  name: search_ui
306
300
  requirement: !ruby/object:Gem::Requirement
@@ -391,14 +385,14 @@ dependencies:
391
385
  requirements:
392
386
  - - "~>"
393
387
  - !ruby/object:Gem::Version
394
- version: '1.6'
388
+ version: '1.7'
395
389
  type: :runtime
396
390
  prerelease: false
397
391
  version_requirements: !ruby/object:Gem::Requirement
398
392
  requirements:
399
393
  - - "~>"
400
394
  - !ruby/object:Gem::Version
401
- version: '1.6'
395
+ version: '1.7'
402
396
  - !ruby/object:Gem::Dependency
403
397
  name: infobar
404
398
  requirement: !ruby/object:Gem::Requirement
@@ -510,6 +504,7 @@ extra_rdoc_files:
510
504
  - lib/ollama_chat/database/migrations/009_add_app_states_table.rb
511
505
  - lib/ollama_chat/database/migrations/010_add_enabled_to_collections.rb
512
506
  - lib/ollama_chat/database/migrations/011_add_trigger_to_sessions.rb
507
+ - lib/ollama_chat/database/migrations/012_add_context_manifest_enabled_to_sessions.rb
513
508
  - lib/ollama_chat/database/models/app_state.rb
514
509
  - lib/ollama_chat/database/models/collection.rb
515
510
  - lib/ollama_chat/database/models/favourite.rb
@@ -660,6 +655,7 @@ files:
660
655
  - lib/ollama_chat/database/migrations/009_add_app_states_table.rb
661
656
  - lib/ollama_chat/database/migrations/010_add_enabled_to_collections.rb
662
657
  - lib/ollama_chat/database/migrations/011_add_trigger_to_sessions.rb
658
+ - lib/ollama_chat/database/migrations/012_add_context_manifest_enabled_to_sessions.rb
663
659
  - lib/ollama_chat/database/models/app_state.rb
664
660
  - lib/ollama_chat/database/models/collection.rb
665
661
  - lib/ollama_chat/database/models/favourite.rb