kward 0.67.0 → 0.67.1

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: 6ae9ca171839817a48db907645b6c28a2b8bd2e1f4cd8feeb49a6aa3f60b16a4
4
- data.tar.gz: 950b56a31b8ea74f432c2c6c6537621334ae53286272fd9fa6122835e359a5ee
3
+ metadata.gz: d03a2b137c3ef3a1bc27e44b2629de49a41c70c3044088f9bd0c162cf50e3387
4
+ data.tar.gz: 241753e7eca9acb6ff94cae50afa7ea43ea2e4c13a8d22eb5031d399ae7fad5a
5
5
  SHA512:
6
- metadata.gz: 279325bce39261d7554696ac70362b6a9200626ce48a8b5e279aeb29d16708b9f040fa099d1f4d4a2752544ad09c9c00ba973c32c4e27f586905d1cbb7d98f1a
7
- data.tar.gz: 6bceda790327fd69d5431888315cb2e914b177be59623c213de3a86a2a28ab2d717501c606267f389c7b157e444974a613dff0f6f29a29ccbbff438a4126538d
6
+ metadata.gz: ac0d8465faa573ac9878c4bf5b83327145a7810cbe375b64ce8019531ba00ea3be779a82ed912825de2372ba18917dc56137f67f60161d3234e396b6ec82f3a2
7
+ data.tar.gz: 3e50a23badb84faf825a75cec5f9d0f4b62cc2bb0c76d643ac8bfb41d99a97c0cbc95268508e4b8a0c2e172249d105f3246b8b0e6a44c81725eae52db71235e6
data/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to Kward will be documented in this file.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.67.1] - 2026-06-14
8
+
9
+ ### Fixed
10
+
11
+ - Fixed RPC session listing so it no longer deletes the active empty session file while UI clients are starting a first turn.
12
+
7
13
  ## [0.67.0] - 2026-06-13
8
14
 
9
15
  ### Added
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kward (0.67.0)
4
+ kward (0.67.1)
5
5
  base64
6
6
  nokogiri
7
7
  tiktoken_ruby
@@ -66,7 +66,7 @@ CHECKSUMS
66
66
  date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0
67
67
  drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
68
68
  erb (6.0.4) sha256=38e3803694be357fe2bfe312487c74beaf9fb4e5beb3e22498952fe1645b95d9
69
- kward (0.67.0)
69
+ kward (0.67.1)
70
70
  minitest (6.0.6) sha256=153ea36d1d987a62942382b61075745042a2b3123b1cd48f4c3675af9cc7d6f1
71
71
  nokogiri (1.19.3-arm64-darwin) sha256=71b9bd424b1b7abc18b05052a1a3cfd3627abdca62be280854cc411791357e42
72
72
  pastel (0.8.0) sha256=481da9fb7d2f6e6b1a08faf11fa10363172dc40fd47848f096ae21209f805a75
@@ -218,7 +218,7 @@ module Kward
218
218
  when "sessions/resume"
219
219
  @session_manager.resume_session(path: params.fetch("path"), workspace_root: params["workspaceRoot"])
220
220
  when "sessions/list"
221
- { sessions: @session_manager.list_sessions(workspace_root: params["workspaceRoot"] || Dir.pwd, limit: params["limit"]) }
221
+ { sessions: @session_manager.list_sessions(workspace_root: params["workspaceRoot"] || Dir.pwd, limit: params["limit"], current_session_path: params["currentSessionPath"]) }
222
222
  when "sessions/rename"
223
223
  @session_manager.rename_session(session_id: params.fetch("sessionId"), name: params["name"])
224
224
  when "sessions/clone"
@@ -93,12 +93,12 @@ module Kward
93
93
  payload
94
94
  end
95
95
 
96
- def list_sessions(workspace_root: Dir.pwd, limit: nil)
96
+ def list_sessions(workspace_root: Dir.pwd, limit: nil, current_session_path: nil)
97
97
  root = validate_workspace_root(workspace_root)
98
98
  store = SessionStore.new(config_dir: @config_dir, cwd: root)
99
99
  requested_limit = limit.to_i if limit
100
100
  requested_limit = nil unless requested_limit&.positive?
101
- store.recent(limit: requested_limit)
101
+ store.recent(limit: requested_limit, keep_empty_path: current_session_path)
102
102
  .map { |info| session_info_payload(info, workspace_root: root) }
103
103
  end
104
104
 
@@ -215,8 +215,9 @@ module Kward
215
215
  [session, conversation]
216
216
  end
217
217
 
218
- def recent(limit: 20)
219
- limit ? recent_sessions.first(limit) : recent_sessions
218
+ def recent(limit: 20, keep_empty_path: nil)
219
+ sessions = recent_sessions(keep_empty_path: keep_empty_path)
220
+ limit ? sessions.first(limit) : sessions
220
221
  end
221
222
 
222
223
  def remember_last_session(session)
@@ -241,8 +242,9 @@ module Kward
241
242
  nil
242
243
  end
243
244
 
244
- def recent_tree(limit: 20)
245
- sessions = limit ? recent_sessions.first(limit) : recent_sessions
245
+ def recent_tree(limit: 20, keep_empty_path: nil)
246
+ sessions = recent_sessions(keep_empty_path: keep_empty_path)
247
+ sessions = sessions.first(limit) if limit
246
248
  decorate_tree(sessions)
247
249
  end
248
250
 
@@ -574,18 +576,20 @@ module Kward
574
576
  nil
575
577
  end
576
578
 
577
- def recent_sessions
579
+ def recent_sessions(keep_empty_path: nil)
580
+ keep_empty_path = File.expand_path(keep_empty_path) unless keep_empty_path.to_s.empty?
578
581
  Dir.glob(File.join(session_dir, "*.jsonl")).filter_map do |path|
579
582
  info = session_info(path)
580
583
  next unless info
581
- next if delete_empty_unnamed_session_info(info)
584
+ next if delete_empty_unnamed_session_info(info, keep_empty_path: keep_empty_path)
582
585
 
583
586
  info
584
587
  end.sort_by { |info| info.modified_at || Time.at(0) }.reverse
585
588
  end
586
589
 
587
- def delete_empty_unnamed_session_info(info)
590
+ def delete_empty_unnamed_session_info(info, keep_empty_path: nil)
588
591
  return false unless info.name.to_s.strip.empty? && info.message_count.to_i.zero?
592
+ return true if keep_empty_path && File.expand_path(info.path) == keep_empty_path
589
593
 
590
594
  File.delete(info.path)
591
595
  true
data/lib/kward/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module Kward
2
2
  # Current gem version.
3
- VERSION = "0.67.0"
3
+ VERSION = "0.67.1"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kward
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.67.0
4
+ version: 0.67.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kai Wood