Module: OllamaAgent::Session::Store
- Defined in:
- lib/ollama_agent/session/store.rb
Overview
NDJSON-based session persistence under <root>/.ollama_agent/sessions/. Each call to .save appends one JSON line — crash-safe by design.
Class Method Summary collapse
-
.list(root:) ⇒ Object
List sessions for a root, newest first.
-
.load(session_id:, root:) ⇒ Object
Load all saved messages for a session.
-
.resume(session_id:, root:) ⇒ Object
Load messages ready to seed Agent#run.
-
.save(session_id:, root:, message:) ⇒ Object
Append one message to a session file.
- .session_path(dir, session_id) ⇒ Object
- .sessions_dir(root) ⇒ Object
Class Method Details
.list(root:) ⇒ Object
List sessions for a root, newest first.
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ollama_agent/session/store.rb', line 49 def list(root:) dir = sessions_dir(root) return [] unless Dir.exist?(dir) Dir.glob(File.join(dir, "*.ndjson")) .sort_by { |f| -File.mtime(f).to_f } .map do |path| id = File.basename(path, ".ndjson") mtime = File.mtime(path).utc.strftime("%Y-%m-%dT%H:%M:%SZ") SessionMeta.new(session_id: id, path: path, started_at: mtime) end end |
.load(session_id:, root:) ⇒ Object
Load all saved messages for a session.
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/ollama_agent/session/store.rb', line 31 def load(session_id:, root:) path = session_path(sessions_dir(root), session_id) return [] unless File.file?(path) File.readlines(path, encoding: Encoding::UTF_8) .map(&:chomp) .reject(&:empty?) .map { |line| JSON.parse(line) } rescue StandardError [] end |
.resume(session_id:, root:) ⇒ Object
Load messages ready to seed Agent#run.
44 45 46 |
# File 'lib/ollama_agent/session/store.rb', line 44 def resume(session_id:, root:) load(session_id: session_id, root: root) end |
.save(session_id:, root:, message:) ⇒ Object
Append one message to a session file.
19 20 21 22 23 24 25 26 27 28 |
# File 'lib/ollama_agent/session/store.rb', line 19 def save(session_id:, root:, message:) dir = sessions_dir(root) FileUtils.mkdir_p(dir) path = session_path(dir, session_id) File.open(path, "a", encoding: Encoding::UTF_8) do |f| f.puts(JSON.generate(.transform_keys(&:to_s))) end rescue StandardError nil # best-effort; never crash the agent end |
.session_path(dir, session_id) ⇒ Object
62 63 64 65 |
# File 'lib/ollama_agent/session/store.rb', line 62 def session_path(dir, session_id) safe_id = session_id.to_s.gsub(/[^a-zA-Z0-9_-]/, "_") File.join(dir, "#{safe_id}.ndjson") end |