legionio 1.6.0 → 1.6.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: 6413e545fabb634ddda16a99e884701751aa1cdd8245b649799f4836ae0c7360
4
- data.tar.gz: 4239fd5af0278ba21cf33bbd320e62e67b103d93d36f3f5266eb5269019b7859
3
+ metadata.gz: 97707f0bdbc4ad1ce6b714bcb703b6d53725210b6565d700e8677db9912a9ab8
4
+ data.tar.gz: 3e2171d5dd1de801ed929a0581e4d3920845be921a528147c4d6e9ddd122e2de
5
5
  SHA512:
6
- metadata.gz: 2dee1932ef724c587ff8d26c496913cb7b90b1385f7793b3d13c7e3e703440c0b6ad4f7b431215c395ee742cd920afebcda784e29feca058d67a6afb73cb0abb
7
- data.tar.gz: fd476599db94cf729ed3e5b66f82f1f090b44215222c24e6a8cf8e6d67c9837fd204561c6054f83505b0fc194a3766aef365eadaa46712babb5750dde82383c3
6
+ metadata.gz: 1f9f67128de7fa3eac1cff947d2275fdc595f5bec7150c218af10cf08b4245abc455b48324492104c92da9f44e31633792d513eddcb1b6316313381eace45c00
7
+ data.tar.gz: 7b5d3952a503ce07268076a20eecc86828ef5d7b53d87614c2bb874fbe6b55398e740f3bd8ab448f7047130917612bb2b3a18dcb2c116699c32663ab80862647
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Legion Changelog
2
2
 
3
+ ## [1.6.1] - 2026-03-26
4
+
5
+ ### Fixed
6
+ - `legionio update` now shows "(remote check failed)" instead of "(already latest)" when rubygems.org fetch fails
7
+ - Add HTTP timeouts (5s connect, 10s read) to remote version checks to prevent thread pool exhaustion
8
+ - Install failures now show "(install may have failed)" instead of "(already latest)"
9
+ - Distinct statuses: current, check_failed, installed, failed (was single ambiguous "updated" for all)
10
+
3
11
  ## [1.6.0] - 2026-03-26
4
12
 
5
13
  ### Added
data/legionio.gemspec CHANGED
@@ -60,8 +60,8 @@ Gem::Specification.new do |spec|
60
60
  spec.add_dependency 'legion-settings', '>= 1.3.19'
61
61
  spec.add_dependency 'legion-transport', '>= 1.4.0'
62
62
 
63
- spec.add_dependency 'legion-apollo', '>= 0.2.1'
64
- spec.add_dependency 'legion-gaia', '>= 0.9.24'
63
+ spec.add_dependency 'legion-apollo', '>= 0.3.1'
64
+ spec.add_dependency 'legion-gaia', '>= 0.9.26'
65
65
  spec.add_dependency 'legion-llm', '>= 0.5.8'
66
66
  spec.add_dependency 'legion-tty', '>= 0.4.35'
67
67
  spec.add_dependency 'lex-node'
@@ -89,24 +89,38 @@ module Legion
89
89
  remote && local && Gem::Version.new(remote) > Gem::Version.new(local)
90
90
  end
91
91
 
92
- if dry_run
93
- return gem_names.map do |name|
94
- local = local_versions[name]
95
- remote = remote_versions[name]
96
- needs_update = remote && local && Gem::Version.new(remote) > Gem::Version.new(local)
97
- { name: name, from: local, to: remote, status: needs_update ? 'available' : 'current' }
98
- end
92
+ return dry_run_results(gem_names, local_versions, remote_versions, outdated) if dry_run
93
+
94
+ return current_results(gem_names, remote_versions) if outdated.empty?
95
+
96
+ install_results(gem_names, gem_bin, remote_versions, outdated)
97
+ end
98
+
99
+ def dry_run_results(gem_names, local_versions, remote_versions, outdated)
100
+ gem_names.map do |name|
101
+ remote = remote_versions[name]
102
+ status = if outdated.include?(name) then 'available'
103
+ elsif remote then 'current'
104
+ else 'check_failed'
105
+ end
106
+ { name: name, from: local_versions[name], to: remote, status: status }
99
107
  end
108
+ end
100
109
 
101
- return gem_names.map { |name| { name: name, status: 'updated', output: '' } } if outdated.empty?
110
+ def current_results(gem_names, remote_versions)
111
+ gem_names.map do |name|
112
+ { name: name, status: remote_versions[name] ? 'current' : 'check_failed', remote: remote_versions[name] }
113
+ end
114
+ end
102
115
 
116
+ def install_results(gem_names, gem_bin, remote_versions, outdated)
103
117
  output = `#{gem_bin} install #{outdated.join(' ')} --no-document 2>&1`
104
118
  success = $CHILD_STATUS.success?
105
119
  gem_names.map do |name|
106
120
  if outdated.include?(name)
107
- { name: name, status: success ? 'updated' : 'failed', output: output.strip }
121
+ { name: name, status: success ? 'installed' : 'failed', remote: remote_versions[name], output: output.strip }
108
122
  else
109
- { name: name, status: 'updated', output: '' }
123
+ { name: name, status: remote_versions[name] ? 'current' : 'check_failed', remote: remote_versions[name] }
110
124
  end
111
125
  end
112
126
  end
@@ -134,7 +148,11 @@ module Legion
134
148
 
135
149
  def fetch_remote_version(name)
136
150
  uri = URI("https://rubygems.org/api/v1/versions/#{name}/latest.json")
137
- response = Net::HTTP.get_response(uri)
151
+ http = Net::HTTP.new(uri.host, uri.port)
152
+ http.use_ssl = true
153
+ http.open_timeout = 5
154
+ http.read_timeout = 10
155
+ response = http.request(Net::HTTP::Get.new(uri))
138
156
  return nil unless response.is_a?(Net::HTTPSuccess)
139
157
 
140
158
  data = ::JSON.parse(response.body)
@@ -144,6 +162,7 @@ module Legion
144
162
  def display_results(out, results, before, after)
145
163
  updated = []
146
164
  failed = []
165
+ check_failures = 0
147
166
 
148
167
  results.each do |r|
149
168
  name = r[:name]
@@ -152,12 +171,17 @@ module Legion
152
171
  puts " #{name}: #{r[:from]} -> #{r[:to]}"
153
172
  updated << name
154
173
  when 'current'
155
- puts " #{name}: #{r[:from] || '?'} (current)"
156
- when 'updated'
174
+ local = r[:from] || before[name]
175
+ puts " #{name}: #{local || '?'} (already latest)"
176
+ when 'check_failed'
177
+ puts " #{name}: #{before[name]} (remote check failed)"
178
+ check_failures += 1
179
+ when 'installed'
157
180
  old_v = before[name]
158
181
  new_v = after[name]
159
182
  if old_v == new_v
160
- puts " #{name}: #{old_v} (already latest)"
183
+ out.error(" #{name}: #{old_v} (install may have failed)")
184
+ failed << name
161
185
  else
162
186
  out.success(" #{name}: #{old_v} -> #{new_v}")
163
187
  updated << name
@@ -171,6 +195,8 @@ module Legion
171
195
  out.spacer
172
196
  if updated.any?
173
197
  out.success("Updated #{updated.size} gem(s)")
198
+ elsif check_failures.positive?
199
+ puts "#{check_failures} gem(s) could not be checked - retry or use --dry-run for details"
174
200
  else
175
201
  puts 'All gems are up to date'
176
202
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Legion
4
- VERSION = '1.6.0'
4
+ VERSION = '1.6.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legionio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -323,28 +323,28 @@ dependencies:
323
323
  requirements:
324
324
  - - ">="
325
325
  - !ruby/object:Gem::Version
326
- version: 0.2.1
326
+ version: 0.3.1
327
327
  type: :runtime
328
328
  prerelease: false
329
329
  version_requirements: !ruby/object:Gem::Requirement
330
330
  requirements:
331
331
  - - ">="
332
332
  - !ruby/object:Gem::Version
333
- version: 0.2.1
333
+ version: 0.3.1
334
334
  - !ruby/object:Gem::Dependency
335
335
  name: legion-gaia
336
336
  requirement: !ruby/object:Gem::Requirement
337
337
  requirements:
338
338
  - - ">="
339
339
  - !ruby/object:Gem::Version
340
- version: 0.9.24
340
+ version: 0.9.26
341
341
  type: :runtime
342
342
  prerelease: false
343
343
  version_requirements: !ruby/object:Gem::Requirement
344
344
  requirements:
345
345
  - - ">="
346
346
  - !ruby/object:Gem::Version
347
- version: 0.9.24
347
+ version: 0.9.26
348
348
  - !ruby/object:Gem::Dependency
349
349
  name: legion-llm
350
350
  requirement: !ruby/object:Gem::Requirement