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 +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/sxn/commands/sessions.rb +1 -1
- data/lib/sxn/database/session_database.rb +27 -4
- data/lib/sxn/version.rb +1 -1
- data/sxn.gemspec +85 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce0aa4443b381e4f3e6edb7f5131f5e7749ef37d76c751f6fd9119e12c6e6097
|
4
|
+
data.tar.gz: 4458f97e8982e5dffad49023ad7dc918680f4507a69fe4a18c1c54a0c98a154a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
@@ -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
|
-
|
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
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.
|
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
|