Class: Girb::SessionPersistence
- Inherits:
-
Object
- Object
- Girb::SessionPersistence
- Defined in:
- lib/girb/session_persistence.rb
Overview
デバッグセッションの会話履歴を永続化するクラス明示的にGirb.debug_sessionを設定した場合のみ保存される
Constant Summary collapse
- SESSIONS_DIR =
".girb/sessions"
Class Attribute Summary collapse
-
.current_session_id ⇒ Object
Returns the value of attribute current_session_id.
Class Method Summary collapse
-
.clear_session ⇒ Object
現在のセッションをクリア(ファイルも削除).
-
.delete_session(session_id) ⇒ Object
セッションを削除.
-
.enabled? ⇒ Boolean
セッションが有効か(明示的にIDが指定されているか).
-
.list_sessions ⇒ Object
セッション一覧を取得.
-
.load_session(file_path) ⇒ Object
セッションを読み込み.
-
.save_session ⇒ Object
セッションを保存.
-
.session_file_path(session_id) ⇒ Object
セッションファイルのパスを取得.
-
.sessions_dir ⇒ Object
セッションディレクトリを取得(プロジェクトルートから).
-
.start_session ⇒ Object
セッションを開始(既存があれば読み込み) Girb.debug_sessionが設定されている場合のみ有効.
Class Attribute Details
.current_session_id ⇒ Object
Returns the value of attribute current_session_id.
13 14 15 |
# File 'lib/girb/session_persistence.rb', line 13 def current_session_id @current_session_id end |
Class Method Details
.clear_session ⇒ Object
現在のセッションをクリア(ファイルも削除)
93 94 95 96 97 98 99 100 |
# File 'lib/girb/session_persistence.rb', line 93 def clear_session if @current_session_id delete_session(@current_session_id) @current_session_id = nil end ConversationHistory.reset! puts "[girb] Session cleared" end |
.delete_session(session_id) ⇒ Object
セッションを削除
120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/girb/session_persistence.rb', line 120 def delete_session(session_id) file_path = session_file_path(session_id) if File.exist?(file_path) File.delete(file_path) puts "[girb] Session deleted: #{session_id}" true else puts "[girb] Session not found: #{session_id}" false end end |
.enabled? ⇒ Boolean
セッションが有効か(明示的にIDが指定されているか)
16 17 18 |
# File 'lib/girb/session_persistence.rb', line 16 def enabled? !!Girb.debug_session end |
.list_sessions ⇒ Object
セッション一覧を取得
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/girb/session_persistence.rb', line 103 def list_sessions dir = sessions_dir return [] unless Dir.exist?(dir) Dir.glob(File.join(dir, "*.json")).map do |file| data = JSON.parse(File.read(file), symbolize_names: true) { id: data[:session_id], saved_at: data[:saved_at], message_count: data[:messages]&.size || 0 } rescue nil end.compact end |
.load_session(file_path) ⇒ Object
セッションを読み込み
79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/girb/session_persistence.rb', line 79 def load_session(file_path) data = JSON.parse(File.read(file_path), symbolize_names: true) ConversationHistory.reset! (data[:messages]) = data[:messages]&.size || 0 puts "[girb] Loaded #{} messages from previous session" rescue => e puts "[girb] Failed to load session: #{e.}" ConversationHistory.reset! end |
.save_session ⇒ Object
セッションを保存
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/girb/session_persistence.rb', line 61 def save_session return unless enabled? && @current_session_id file_path = session_file_path(@current_session_id) FileUtils.mkdir_p(File.dirname(file_path)) data = { session_id: @current_session_id, saved_at: Time.now.to_s, messages: } File.write(file_path, JSON.pretty_generate(data)) rescue => e puts "[girb] Failed to save session: #{e.}" end |
.session_file_path(session_id) ⇒ Object
セッションファイルのパスを取得
37 38 39 |
# File 'lib/girb/session_persistence.rb', line 37 def session_file_path(session_id) File.join(sessions_dir, "#{session_id}.json") end |
.sessions_dir ⇒ Object
セッションディレクトリを取得(プロジェクトルートから)
21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/girb/session_persistence.rb', line 21 def sessions_dir # カレントディレクトリから.girbディレクトリを探す dir = Dir.pwd while dir != "/" girb_dir = File.join(dir, ".girb") if Dir.exist?(girb_dir) return File.join(girb_dir, "sessions") end dir = File.dirname(dir) end # 見つからなければカレントディレクトリに作成 File.join(Dir.pwd, SESSIONS_DIR) end |
.start_session ⇒ Object
セッションを開始(既存があれば読み込み)Girb.debug_sessionが設定されている場合のみ有効
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/girb/session_persistence.rb', line 43 def start_session return unless enabled? @current_session_id = Girb.debug_session file_path = session_file_path(@current_session_id) if File.exist?(file_path) load_session(file_path) puts "[girb] Resumed session: #{@current_session_id}" else ConversationHistory.reset! puts "[girb] New session: #{@current_session_id}" end @current_session_id end |