sxn 0.2.0 → 0.2.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: 8c4ab07a7db971653928d5f28ad031c215d1366fa3317d8a4ab3c53fe6c10935
4
- data.tar.gz: ece376145596157b9f4c2be71508334f80ce85f542ee40ca9f5af17db6ee3202
3
+ metadata.gz: ce0aa4443b381e4f3e6edb7f5131f5e7749ef37d76c751f6fd9119e12c6e6097
4
+ data.tar.gz: 4458f97e8982e5dffad49023ad7dc918680f4507a69fe4a18c1c54a0c98a154a
5
5
  SHA512:
6
- metadata.gz: 508ece263bcb4fe72595aded4fee96243fe7f440f6ee1c6d91dcc9bfe619de98dac48dd8fd5d717ee3a11e866d057c7cfb8c40d0b1ec6383ad19d9f6f6d2cd20
7
- data.tar.gz: 0e319461455ed3e5212dd1f67e76f94aff6c6a8292d4f3512d4d5a0be81d3b71aabe803b6444cc744f03f23814087b25816e433234c3551c150f3445387e21d0
6
+ metadata.gz: 7bb89bc46f2961d3041c685e0553819e7a32aea6f92f27be4c5f512df1900d3fd7fa85147b49c51bf813d625495b20792ae7ee0a0124aa44c3fff94359316b65
7
+ data.tar.gz: aefb73b0c8072b5a234d6c4979b43de448dcc39c4521c970acf1e5a050b38adf408ce0a0e0f9136a8cdc853ce75ae3878e5df54df5e5f8d0e259a260cedde981
data/CHANGELOG.md CHANGED
@@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.1] - 2025-01-20
9
+
10
+ ### Fixed
11
+ - Fixed SQLite3 datatype mismatch error when listing sessions
12
+ - Fixed `sxn list` showing no sessions even when sessions exist
13
+ - Improved type coercion for database parameters
14
+ - Enhanced error logging for SQLite3 errors
15
+
8
16
  ## [0.2.0] - 2025-01-20
9
17
 
10
18
  ### Added
@@ -111,7 +111,7 @@ module Sxn
111
111
  begin
112
112
  sessions = @session_manager.list_sessions(
113
113
  status: options[:status],
114
- limit: options[:limit]
114
+ limit: options[:limit]&.to_i || 50
115
115
  )
116
116
 
117
117
  @ui.section("Sessions")
@@ -118,8 +118,11 @@ module Sxn
118
118
  # @param offset [Integer] Results offset for pagination (default: 0)
119
119
  # @return [Array<Hash>] Array of session hashes
120
120
  def list_sessions(filters: {}, sort: {}, limit: 100, offset: 0)
121
- # Ensure filters is a Hash
121
+ # Ensure filters is a Hash and parameters are correct types
122
122
  filters ||= {}
123
+ limit = limit.to_i if limit
124
+ offset = offset.to_i if offset
125
+
123
126
  query_parts = ["SELECT * FROM sessions"]
124
127
  params = []
125
128
 
@@ -132,9 +135,9 @@ module Sxn
132
135
  sort_order = sort[:order] || :desc
133
136
  query_parts << "ORDER BY #{sort_field} #{sort_order.to_s.upcase}"
134
137
 
135
- # Add pagination
138
+ # Add pagination - ensure these are integers
136
139
  query_parts << "LIMIT ? OFFSET ?"
137
- params.push(limit, offset)
140
+ params.push(limit || 100, offset || 0)
138
141
 
139
142
  sql = query_parts.join(" ")
140
143
 
@@ -620,7 +623,27 @@ module Sxn
620
623
 
621
624
  # Execute query with parameters and return results
622
625
  def execute_query(sql, params = [])
623
- connection.execute(sql, params)
626
+ # Ensure params are properly typed for SQLite3
627
+ sanitized_params = params.map do |param|
628
+ case param
629
+ when Integer, Float, String, NilClass
630
+ param
631
+ when TrueClass
632
+ 1
633
+ when FalseClass
634
+ 0
635
+ else
636
+ param.to_s
637
+ end
638
+ end
639
+
640
+ connection.execute(sql, sanitized_params)
641
+ rescue SQLite3::MismatchException => e
642
+ # Log the error with details for debugging
643
+ warn "SQLite3 datatype mismatch: #{e.message}"
644
+ warn "SQL: #{sql}"
645
+ warn "Params: #{sanitized_params.inspect}"
646
+ raise e
624
647
  end
625
648
 
626
649
  # Transaction wrapper with rollback support
data/lib/sxn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sxn
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
data/sxn.gemspec ADDED
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/sxn/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "sxn"
7
+ spec.version = Sxn::VERSION
8
+ spec.authors = ["Ernest Sim"]
9
+ spec.email = ["ernest.codes@gmail.com"]
10
+
11
+ spec.summary = "Session management for multi-repository development"
12
+ spec.description = "Sxn simplifies git worktree management with intelligent project rules and secure automation"
13
+ spec.homepage = "https://github.com/idl3/sxn"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 3.2.0"
16
+
17
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
18
+ spec.metadata["homepage_uri"] = spec.homepage
19
+ spec.metadata["source_code_uri"] = spec.homepage
20
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/main/CHANGELOG.md"
21
+ spec.metadata["rubygems_mfa_required"] = "true"
22
+
23
+ # Specify which files should be added to the gem when it is released.
24
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
25
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
26
+ `git ls-files -z`.split("\x0").reject do |f|
27
+ (f == __FILE__) ||
28
+ f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)}) ||
29
+ f.match(/\.db-(?:shm|wal)\z/) || # Exclude SQLite temp files
30
+ f.match(/\.gem\z/) # Exclude gem files
31
+ end
32
+ end
33
+
34
+ spec.bindir = "bin"
35
+ spec.executables = spec.files.grep(%r{\Abin/}) { |f| File.basename(f) }
36
+ spec.require_paths = ["lib"]
37
+
38
+ # Core CLI dependencies
39
+ spec.add_dependency "pastel", "~> 0.8" # Terminal colors
40
+ spec.add_dependency "thor", "~> 1.3" # CLI framework
41
+ spec.add_dependency "tty-progressbar", "~> 0.18" # Progress bars
42
+ spec.add_dependency "tty-prompt", "~> 0.23" # Interactive prompts
43
+ spec.add_dependency "tty-table", "~> 0.12" # Table formatting
44
+
45
+ # Configuration and data management
46
+ spec.add_dependency "dry-configurable", "~> 1.0" # Configuration management
47
+ spec.add_dependency "sqlite3", "~> 1.6" # Session database
48
+ spec.add_dependency "zeitwerk", "~> 2.6" # Code loading
49
+
50
+ # Template engine (secure, sandboxed)
51
+ spec.add_dependency "liquid", "~> 5.4" # Safe template processing
52
+
53
+ # MCP server dependencies
54
+ spec.add_dependency "async", "~> 2.0" # Async operations
55
+ spec.add_dependency "json-schema", "~> 4.0" # Schema validation
56
+
57
+ # Security and encryption
58
+ spec.add_dependency "bcrypt", "~> 3.1" # Password hashing
59
+ spec.add_dependency "openssl", ">= 3.0" # Encryption support
60
+ spec.add_dependency "ostruct" # OpenStruct for Ruby 3.5+ compatibility
61
+
62
+ # File system operations
63
+ spec.add_dependency "listen", "~> 3.8" # File watching for config cache
64
+ spec.add_dependency "parallel", "~> 1.23" # Parallel execution
65
+
66
+ # Development dependencies
67
+ spec.add_development_dependency "aruba", "~> 2.1" # CLI testing
68
+ spec.add_development_dependency "benchmark" # Benchmark for Ruby 3.5+ compatibility
69
+ spec.add_development_dependency "benchmark-ips", "~> 2.12" # Performance benchmarking
70
+ spec.add_development_dependency "bundler", "~> 2.4"
71
+ spec.add_development_dependency "climate_control", "~> 1.2" # Environment variable testing
72
+ spec.add_development_dependency "faker", "~> 3.2" # Test data generation
73
+ spec.add_development_dependency "memory_profiler", "~> 1.0" # Memory profiling
74
+ spec.add_development_dependency "rake", "~> 13.0"
75
+ spec.add_development_dependency "rspec", "~> 3.12"
76
+ spec.add_development_dependency "rubocop", "~> 1.50" # Code linting
77
+ spec.add_development_dependency "rubocop-performance", "~> 1.16"
78
+ spec.add_development_dependency "rubocop-rspec", "~> 2.19"
79
+ spec.add_development_dependency "simplecov", "~> 0.22" # Code coverage
80
+ spec.add_development_dependency "vcr", "~> 6.2" # HTTP interaction recording
81
+ spec.add_development_dependency "webmock", "~> 3.19" # HTTP mocking for MCP tests
82
+
83
+ # For more information and examples about making a new gem, check out our
84
+ # guide at: https://bundler.io/guides/creating_gem.html
85
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sxn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ernest Sim
@@ -606,6 +606,7 @@ files:
606
606
  - sig/sxn/ui/prompt.rbs
607
607
  - sig/sxn/ui/table.rbs
608
608
  - sig/sxn/version.rbs
609
+ - sxn.gemspec
609
610
  homepage: https://github.com/idl3/sxn
610
611
  licenses:
611
612
  - MIT