swarm_cli 2.1.11 → 2.1.13

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: 4ee5672e70a48d14f42fcf2bac9e170b3c7c624dc5c3e46facf537b52ce6c559
4
- data.tar.gz: 8dd7c06ba3ba2c4ebfdcddd9e09b98e0930bfbc993abcffe96353589594ba538
3
+ metadata.gz: af3e0c037fa25f545dd90fe21908da554c7cb3242d752c58eabec95b7453c840
4
+ data.tar.gz: 52aee53c8a31b17a0035d95e814f756ae01ca7b895aa94216e77a8a03af14b89
5
5
  SHA512:
6
- metadata.gz: 5c22ce6fcbb75e2584e790a7fce90b3f4a0750c8daf0380e02ee211862827ed64807051aab1015d2cda972d88b22f5821510aeb717ccec6023498617cc2bd71e
7
- data.tar.gz: 3692ba7db68739e3e93bb1e33939cb540c4443be98d78e8e4953eba414317b2ab2736fc00daf8373586b614d56efb75ff170848583f30aac624614520a73052b
6
+ metadata.gz: 444bfa6029186f64b6d6fea74c1bf6c7dd1976971a6ea383ac1c49bf128d1c515f074d53266a35414a1cd32f58cdfd2d83b8ecd3a934293d01e691a7b4df8d68
7
+ data.tar.gz: 05e3f8f1e937f19c916f72fd78f74591df2b2862ad34885010b8b63dd4958e178f7112e1e9227192ef480da2efa53ce6f4d7563be3fba85893ddb086de828b09
@@ -6,7 +6,6 @@ require "tty-markdown"
6
6
  require "tty-box"
7
7
  require "pastel"
8
8
  require "async"
9
- require "async/condition"
10
9
 
11
10
  module SwarmCLI
12
11
  # InteractiveREPL provides a professional, interactive terminal interface
@@ -91,54 +90,26 @@ module SwarmCLI
91
90
  # Execute a message with Ctrl+C cancellation support
92
91
  # Public for testing
93
92
  #
93
+ # Uses swarm.stop for thread-safe cancellation via IO.pipe signaling.
94
+ # The INT trap handler calls swarm.stop which writes to the pipe,
95
+ # waking the Async scheduler's stop listener to cancel all tasks.
96
+ #
94
97
  # @param input [String] User input to execute
95
98
  # @return [SwarmSDK::Result, nil] Result or nil if cancelled
96
99
  def execute_with_cancellation(input, &log_callback)
97
- cancelled = false
98
- result = nil
99
-
100
- # Execute in Async block to enable Ctrl+C cancellation
101
- Async do |task|
102
- # Use Async::Condition for trap-safe cancellation
103
- # (Condition#signal uses Thread::Queue which is safe from trap context)
104
- cancel_condition = Async::Condition.new
105
-
106
- # Install trap ONLY during execution
107
- # When Ctrl+C is pressed, signal the condition instead of calling task.stop
108
- old_trap = trap("INT") do
109
- cancel_condition.signal(:cancel)
110
- end
111
-
112
- begin
113
- # Execute swarm in async task
114
- llm_task = task.async do
115
- @swarm.execute(input, &log_callback)
116
- end
117
-
118
- # Monitor task - watches for cancellation signal
119
- # Must be created AFTER llm_task so it can reference it
120
- monitor_task = task.async do
121
- if cancel_condition.wait == :cancel
122
- cancelled = true
123
- llm_task.stop
124
- end
125
- end
100
+ # Install trap ONLY during execution
101
+ # swarm.stop is safe to call from trap context (IO.pipe write)
102
+ old_trap = trap("INT") do
103
+ @swarm.stop
104
+ end
126
105
 
127
- result = llm_task.wait
128
- rescue Async::Stop
129
- # Task was stopped by Ctrl+C
130
- cancelled = true
131
- ensure
132
- # Clean up monitor task
133
- monitor_task&.stop if monitor_task&.alive?
134
-
135
- # CRITICAL: Restore old trap when done
136
- # This ensures Ctrl+C at the prompt still exits the REPL
137
- trap("INT", old_trap)
138
- end
139
- end.wait
106
+ result = @swarm.execute(input, &log_callback)
140
107
 
141
- cancelled ? nil : result
108
+ result&.interrupted? ? nil : result
109
+ ensure
110
+ # CRITICAL: Restore old trap when done
111
+ # This ensures Ctrl+C at the prompt still exits the REPL
112
+ trap("INT", old_trap)
142
113
  end
143
114
 
144
115
  # Handle slash commands
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SwarmCLI
4
- VERSION = "2.1.11"
4
+ VERSION = "2.1.13"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swarm_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.11
4
+ version: 2.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo Arruda
@@ -57,14 +57,14 @@ dependencies:
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '2.6'
60
+ version: '2.7'
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '2.6'
67
+ version: '2.7'
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: tty-box
70
70
  requirement: !ruby/object:Gem::Requirement