swarm_cli 2.1.13 → 3.0.0.alpha2
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/LICENSE +21 -0
- data/exe/swarm3 +11 -0
- data/lib/swarm_cli/v3/activity_indicator.rb +168 -0
- data/lib/swarm_cli/v3/ansi_colors.rb +70 -0
- data/lib/swarm_cli/v3/cli.rb +721 -0
- data/lib/swarm_cli/v3/command_completer.rb +112 -0
- data/lib/swarm_cli/v3/display.rb +607 -0
- data/lib/swarm_cli/v3/dropdown.rb +130 -0
- data/lib/swarm_cli/v3/event_renderer.rb +161 -0
- data/lib/swarm_cli/v3/file_completer.rb +143 -0
- data/lib/swarm_cli/v3/raw_input_reader.rb +304 -0
- data/lib/swarm_cli/v3/reboot_tool.rb +123 -0
- data/lib/swarm_cli/v3/text_input.rb +235 -0
- data/lib/swarm_cli/v3.rb +52 -0
- metadata +30 -245
- data/exe/swarm +0 -6
- data/lib/swarm_cli/cli.rb +0 -201
- data/lib/swarm_cli/command_registry.rb +0 -61
- data/lib/swarm_cli/commands/mcp_serve.rb +0 -130
- data/lib/swarm_cli/commands/mcp_tools.rb +0 -148
- data/lib/swarm_cli/commands/migrate.rb +0 -55
- data/lib/swarm_cli/commands/run.rb +0 -173
- data/lib/swarm_cli/config_loader.rb +0 -98
- data/lib/swarm_cli/formatters/human_formatter.rb +0 -811
- data/lib/swarm_cli/formatters/json_formatter.rb +0 -62
- data/lib/swarm_cli/interactive_repl.rb +0 -895
- data/lib/swarm_cli/mcp_serve_options.rb +0 -44
- data/lib/swarm_cli/mcp_tools_options.rb +0 -59
- data/lib/swarm_cli/migrate_options.rb +0 -54
- data/lib/swarm_cli/migrator.rb +0 -132
- data/lib/swarm_cli/options.rb +0 -151
- data/lib/swarm_cli/ui/components/agent_badge.rb +0 -33
- data/lib/swarm_cli/ui/components/content_block.rb +0 -120
- data/lib/swarm_cli/ui/components/divider.rb +0 -57
- data/lib/swarm_cli/ui/components/panel.rb +0 -62
- data/lib/swarm_cli/ui/components/usage_stats.rb +0 -70
- data/lib/swarm_cli/ui/formatters/cost.rb +0 -49
- data/lib/swarm_cli/ui/formatters/number.rb +0 -58
- data/lib/swarm_cli/ui/formatters/text.rb +0 -77
- data/lib/swarm_cli/ui/formatters/time.rb +0 -73
- data/lib/swarm_cli/ui/icons.rb +0 -36
- data/lib/swarm_cli/ui/renderers/event_renderer.rb +0 -188
- data/lib/swarm_cli/ui/state/agent_color_cache.rb +0 -45
- data/lib/swarm_cli/ui/state/depth_tracker.rb +0 -40
- data/lib/swarm_cli/ui/state/spinner_manager.rb +0 -170
- data/lib/swarm_cli/ui/state/usage_tracker.rb +0 -62
- data/lib/swarm_cli/version.rb +0 -5
- data/lib/swarm_cli.rb +0 -46
metadata
CHANGED
|
@@ -1,303 +1,88 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: swarm_cli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 3.0.0.alpha2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Paulo Arruda
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 1980-01-
|
|
10
|
+
date: 1980-01-01 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
|
-
- !ruby/object:Gem::Dependency
|
|
13
|
-
name: fast-mcp
|
|
14
|
-
requirement: !ruby/object:Gem::Requirement
|
|
15
|
-
requirements:
|
|
16
|
-
- - "~>"
|
|
17
|
-
- !ruby/object:Gem::Version
|
|
18
|
-
version: '1.6'
|
|
19
|
-
type: :runtime
|
|
20
|
-
prerelease: false
|
|
21
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
-
requirements:
|
|
23
|
-
- - "~>"
|
|
24
|
-
- !ruby/object:Gem::Version
|
|
25
|
-
version: '1.6'
|
|
26
|
-
- !ruby/object:Gem::Dependency
|
|
27
|
-
name: pastel
|
|
28
|
-
requirement: !ruby/object:Gem::Requirement
|
|
29
|
-
requirements:
|
|
30
|
-
- - ">="
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '0'
|
|
33
|
-
type: :runtime
|
|
34
|
-
prerelease: false
|
|
35
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
-
requirements:
|
|
37
|
-
- - ">="
|
|
38
|
-
- !ruby/object:Gem::Version
|
|
39
|
-
version: '0'
|
|
40
|
-
- !ruby/object:Gem::Dependency
|
|
41
|
-
name: reline
|
|
42
|
-
requirement: !ruby/object:Gem::Requirement
|
|
43
|
-
requirements:
|
|
44
|
-
- - "~>"
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: 0.6.3
|
|
47
|
-
type: :runtime
|
|
48
|
-
prerelease: false
|
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
-
requirements:
|
|
51
|
-
- - "~>"
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: 0.6.3
|
|
54
12
|
- !ruby/object:Gem::Dependency
|
|
55
13
|
name: swarm_sdk
|
|
56
14
|
requirement: !ruby/object:Gem::Requirement
|
|
57
15
|
requirements:
|
|
58
16
|
- - "~>"
|
|
59
17
|
- !ruby/object:Gem::Version
|
|
60
|
-
version:
|
|
18
|
+
version: 3.0.alpha
|
|
61
19
|
type: :runtime
|
|
62
20
|
prerelease: false
|
|
63
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
22
|
requirements:
|
|
65
23
|
- - "~>"
|
|
66
24
|
- !ruby/object:Gem::Version
|
|
67
|
-
version:
|
|
68
|
-
- !ruby/object:Gem::Dependency
|
|
69
|
-
name: tty-box
|
|
70
|
-
requirement: !ruby/object:Gem::Requirement
|
|
71
|
-
requirements:
|
|
72
|
-
- - ">="
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '0'
|
|
75
|
-
type: :runtime
|
|
76
|
-
prerelease: false
|
|
77
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
-
requirements:
|
|
79
|
-
- - ">="
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: '0'
|
|
82
|
-
- !ruby/object:Gem::Dependency
|
|
83
|
-
name: tty-cursor
|
|
84
|
-
requirement: !ruby/object:Gem::Requirement
|
|
85
|
-
requirements:
|
|
86
|
-
- - ">="
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: '0'
|
|
89
|
-
type: :runtime
|
|
90
|
-
prerelease: false
|
|
91
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
-
requirements:
|
|
93
|
-
- - ">="
|
|
94
|
-
- !ruby/object:Gem::Version
|
|
95
|
-
version: '0'
|
|
96
|
-
- !ruby/object:Gem::Dependency
|
|
97
|
-
name: tty-link
|
|
98
|
-
requirement: !ruby/object:Gem::Requirement
|
|
99
|
-
requirements:
|
|
100
|
-
- - ">="
|
|
101
|
-
- !ruby/object:Gem::Version
|
|
102
|
-
version: '0'
|
|
103
|
-
type: :runtime
|
|
104
|
-
prerelease: false
|
|
105
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
-
requirements:
|
|
107
|
-
- - ">="
|
|
108
|
-
- !ruby/object:Gem::Version
|
|
109
|
-
version: '0'
|
|
25
|
+
version: 3.0.alpha
|
|
110
26
|
- !ruby/object:Gem::Dependency
|
|
111
27
|
name: tty-markdown
|
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
|
113
|
-
requirements:
|
|
114
|
-
- - ">="
|
|
115
|
-
- !ruby/object:Gem::Version
|
|
116
|
-
version: '0'
|
|
117
|
-
type: :runtime
|
|
118
|
-
prerelease: false
|
|
119
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
-
requirements:
|
|
121
|
-
- - ">="
|
|
122
|
-
- !ruby/object:Gem::Version
|
|
123
|
-
version: '0'
|
|
124
|
-
- !ruby/object:Gem::Dependency
|
|
125
|
-
name: tty-option
|
|
126
|
-
requirement: !ruby/object:Gem::Requirement
|
|
127
|
-
requirements:
|
|
128
|
-
- - ">="
|
|
129
|
-
- !ruby/object:Gem::Version
|
|
130
|
-
version: '0'
|
|
131
|
-
type: :runtime
|
|
132
|
-
prerelease: false
|
|
133
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
-
requirements:
|
|
135
|
-
- - ">="
|
|
136
|
-
- !ruby/object:Gem::Version
|
|
137
|
-
version: '0'
|
|
138
|
-
- !ruby/object:Gem::Dependency
|
|
139
|
-
name: tty-spinner
|
|
140
|
-
requirement: !ruby/object:Gem::Requirement
|
|
141
|
-
requirements:
|
|
142
|
-
- - ">="
|
|
143
|
-
- !ruby/object:Gem::Version
|
|
144
|
-
version: '0'
|
|
145
|
-
type: :runtime
|
|
146
|
-
prerelease: false
|
|
147
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
148
|
-
requirements:
|
|
149
|
-
- - ">="
|
|
150
|
-
- !ruby/object:Gem::Version
|
|
151
|
-
version: '0'
|
|
152
|
-
- !ruby/object:Gem::Dependency
|
|
153
|
-
name: tty-tree
|
|
154
|
-
requirement: !ruby/object:Gem::Requirement
|
|
155
|
-
requirements:
|
|
156
|
-
- - ">="
|
|
157
|
-
- !ruby/object:Gem::Version
|
|
158
|
-
version: '0'
|
|
159
|
-
type: :runtime
|
|
160
|
-
prerelease: false
|
|
161
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
162
|
-
requirements:
|
|
163
|
-
- - ">="
|
|
164
|
-
- !ruby/object:Gem::Version
|
|
165
|
-
version: '0'
|
|
166
|
-
- !ruby/object:Gem::Dependency
|
|
167
|
-
name: zeitwerk
|
|
168
|
-
requirement: !ruby/object:Gem::Requirement
|
|
169
|
-
requirements:
|
|
170
|
-
- - ">="
|
|
171
|
-
- !ruby/object:Gem::Version
|
|
172
|
-
version: '0'
|
|
173
|
-
type: :runtime
|
|
174
|
-
prerelease: false
|
|
175
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
176
|
-
requirements:
|
|
177
|
-
- - ">="
|
|
178
|
-
- !ruby/object:Gem::Version
|
|
179
|
-
version: '0'
|
|
180
|
-
- !ruby/object:Gem::Dependency
|
|
181
|
-
name: csv
|
|
182
|
-
requirement: !ruby/object:Gem::Requirement
|
|
183
|
-
requirements:
|
|
184
|
-
- - ">="
|
|
185
|
-
- !ruby/object:Gem::Version
|
|
186
|
-
version: '0'
|
|
187
|
-
type: :runtime
|
|
188
|
-
prerelease: false
|
|
189
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
190
|
-
requirements:
|
|
191
|
-
- - ">="
|
|
192
|
-
- !ruby/object:Gem::Version
|
|
193
|
-
version: '0'
|
|
194
|
-
- !ruby/object:Gem::Dependency
|
|
195
|
-
name: docx
|
|
196
|
-
requirement: !ruby/object:Gem::Requirement
|
|
197
|
-
requirements:
|
|
198
|
-
- - "~>"
|
|
199
|
-
- !ruby/object:Gem::Version
|
|
200
|
-
version: '0.10'
|
|
201
|
-
type: :runtime
|
|
202
|
-
prerelease: false
|
|
203
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
204
|
-
requirements:
|
|
205
|
-
- - "~>"
|
|
206
|
-
- !ruby/object:Gem::Version
|
|
207
|
-
version: '0.10'
|
|
208
|
-
- !ruby/object:Gem::Dependency
|
|
209
|
-
name: pdf-reader
|
|
210
28
|
requirement: !ruby/object:Gem::Requirement
|
|
211
29
|
requirements:
|
|
212
30
|
- - "~>"
|
|
213
31
|
- !ruby/object:Gem::Version
|
|
214
|
-
version: '
|
|
32
|
+
version: '0.7'
|
|
215
33
|
type: :runtime
|
|
216
34
|
prerelease: false
|
|
217
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
218
36
|
requirements:
|
|
219
37
|
- - "~>"
|
|
220
38
|
- !ruby/object:Gem::Version
|
|
221
|
-
version: '
|
|
39
|
+
version: '0.7'
|
|
222
40
|
- !ruby/object:Gem::Dependency
|
|
223
|
-
name:
|
|
224
|
-
requirement: !ruby/object:Gem::Requirement
|
|
225
|
-
requirements:
|
|
226
|
-
- - "~>"
|
|
227
|
-
- !ruby/object:Gem::Version
|
|
228
|
-
version: 3.0.0
|
|
229
|
-
type: :runtime
|
|
230
|
-
prerelease: false
|
|
231
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
232
|
-
requirements:
|
|
233
|
-
- - "~>"
|
|
234
|
-
- !ruby/object:Gem::Version
|
|
235
|
-
version: 3.0.0
|
|
236
|
-
- !ruby/object:Gem::Dependency
|
|
237
|
-
name: roo
|
|
41
|
+
name: zeitwerk
|
|
238
42
|
requirement: !ruby/object:Gem::Requirement
|
|
239
43
|
requirements:
|
|
240
44
|
- - "~>"
|
|
241
45
|
- !ruby/object:Gem::Version
|
|
242
|
-
version:
|
|
46
|
+
version: '2.6'
|
|
243
47
|
type: :runtime
|
|
244
48
|
prerelease: false
|
|
245
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
246
50
|
requirements:
|
|
247
51
|
- - "~>"
|
|
248
52
|
- !ruby/object:Gem::Version
|
|
249
|
-
version:
|
|
53
|
+
version: '2.6'
|
|
250
54
|
description: |
|
|
251
|
-
SwarmCLI provides a command-line interface for SwarmSDK
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
and
|
|
55
|
+
SwarmCLI V3 provides a lightweight command-line interface for SwarmSDK V3 agents.
|
|
56
|
+
Features interactive REPL mode with always-available input, single-prompt execution,
|
|
57
|
+
and memory maintenance commands. Uses minimal dependencies with custom ANSI styling
|
|
58
|
+
and raw terminal input handling for a responsive experience.
|
|
255
59
|
email:
|
|
256
60
|
- parrudaj@gmail.com
|
|
257
61
|
executables:
|
|
258
|
-
-
|
|
62
|
+
- swarm3
|
|
259
63
|
extensions: []
|
|
260
64
|
extra_rdoc_files: []
|
|
261
65
|
files:
|
|
262
|
-
-
|
|
263
|
-
-
|
|
264
|
-
- lib/swarm_cli/
|
|
265
|
-
- lib/swarm_cli/
|
|
266
|
-
- lib/swarm_cli/
|
|
267
|
-
- lib/swarm_cli/
|
|
268
|
-
- lib/swarm_cli/
|
|
269
|
-
- lib/swarm_cli/
|
|
270
|
-
- lib/swarm_cli/
|
|
271
|
-
- lib/swarm_cli/
|
|
272
|
-
- lib/swarm_cli/
|
|
273
|
-
- lib/swarm_cli/
|
|
274
|
-
- lib/swarm_cli/
|
|
275
|
-
- lib/swarm_cli/
|
|
276
|
-
- lib/swarm_cli/migrate_options.rb
|
|
277
|
-
- lib/swarm_cli/migrator.rb
|
|
278
|
-
- lib/swarm_cli/options.rb
|
|
279
|
-
- lib/swarm_cli/ui/components/agent_badge.rb
|
|
280
|
-
- lib/swarm_cli/ui/components/content_block.rb
|
|
281
|
-
- lib/swarm_cli/ui/components/divider.rb
|
|
282
|
-
- lib/swarm_cli/ui/components/panel.rb
|
|
283
|
-
- lib/swarm_cli/ui/components/usage_stats.rb
|
|
284
|
-
- lib/swarm_cli/ui/formatters/cost.rb
|
|
285
|
-
- lib/swarm_cli/ui/formatters/number.rb
|
|
286
|
-
- lib/swarm_cli/ui/formatters/text.rb
|
|
287
|
-
- lib/swarm_cli/ui/formatters/time.rb
|
|
288
|
-
- lib/swarm_cli/ui/icons.rb
|
|
289
|
-
- lib/swarm_cli/ui/renderers/event_renderer.rb
|
|
290
|
-
- lib/swarm_cli/ui/state/agent_color_cache.rb
|
|
291
|
-
- lib/swarm_cli/ui/state/depth_tracker.rb
|
|
292
|
-
- lib/swarm_cli/ui/state/spinner_manager.rb
|
|
293
|
-
- lib/swarm_cli/ui/state/usage_tracker.rb
|
|
294
|
-
- lib/swarm_cli/version.rb
|
|
66
|
+
- LICENSE
|
|
67
|
+
- exe/swarm3
|
|
68
|
+
- lib/swarm_cli/v3.rb
|
|
69
|
+
- lib/swarm_cli/v3/activity_indicator.rb
|
|
70
|
+
- lib/swarm_cli/v3/ansi_colors.rb
|
|
71
|
+
- lib/swarm_cli/v3/cli.rb
|
|
72
|
+
- lib/swarm_cli/v3/command_completer.rb
|
|
73
|
+
- lib/swarm_cli/v3/display.rb
|
|
74
|
+
- lib/swarm_cli/v3/dropdown.rb
|
|
75
|
+
- lib/swarm_cli/v3/event_renderer.rb
|
|
76
|
+
- lib/swarm_cli/v3/file_completer.rb
|
|
77
|
+
- lib/swarm_cli/v3/raw_input_reader.rb
|
|
78
|
+
- lib/swarm_cli/v3/reboot_tool.rb
|
|
79
|
+
- lib/swarm_cli/v3/text_input.rb
|
|
295
80
|
homepage: https://github.com/parruda/swarm
|
|
296
81
|
licenses:
|
|
297
82
|
- MIT
|
|
298
83
|
metadata:
|
|
299
84
|
source_code_uri: https://github.com/parruda/swarm
|
|
300
|
-
changelog_uri: https://github.com/parruda/swarm/blob/main/docs/
|
|
85
|
+
changelog_uri: https://github.com/parruda/swarm/blob/main/docs/v3/CHANGELOG.md
|
|
301
86
|
rdoc_options: []
|
|
302
87
|
require_paths:
|
|
303
88
|
- lib
|
|
@@ -314,5 +99,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
314
99
|
requirements: []
|
|
315
100
|
rubygems_version: 3.6.9
|
|
316
101
|
specification_version: 4
|
|
317
|
-
summary:
|
|
102
|
+
summary: Lightweight CLI for SwarmSDK V3 agents
|
|
318
103
|
test_files: []
|
data/exe/swarm
DELETED
data/lib/swarm_cli/cli.rb
DELETED
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SwarmCLI
|
|
4
|
-
class CLI
|
|
5
|
-
class << self
|
|
6
|
-
def start(args)
|
|
7
|
-
new(args).run
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def initialize(args)
|
|
12
|
-
@args = args
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def run
|
|
16
|
-
# Handle special cases first
|
|
17
|
-
if @args.empty? || @args.include?("--help") || @args.include?("-h")
|
|
18
|
-
print_help
|
|
19
|
-
exit(0)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
if @args.include?("--version") || @args.include?("-v")
|
|
23
|
-
print_version
|
|
24
|
-
exit(0)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Extract command
|
|
28
|
-
command = @args.first
|
|
29
|
-
|
|
30
|
-
# Route to command
|
|
31
|
-
case command
|
|
32
|
-
when "run"
|
|
33
|
-
run_command(@args[1..])
|
|
34
|
-
when "mcp"
|
|
35
|
-
mcp_command(@args[1..])
|
|
36
|
-
when "migrate"
|
|
37
|
-
migrate_command(@args[1..])
|
|
38
|
-
else
|
|
39
|
-
# Check if it's an extension command
|
|
40
|
-
if CommandRegistry.registered?(command)
|
|
41
|
-
extension_command(command, @args[1..])
|
|
42
|
-
else
|
|
43
|
-
$stderr.puts "Unknown command: #{command}"
|
|
44
|
-
$stderr.puts
|
|
45
|
-
print_help
|
|
46
|
-
exit(1)
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
rescue StandardError => e
|
|
50
|
-
$stderr.puts "Fatal error: #{e.message}"
|
|
51
|
-
exit(1)
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
private
|
|
55
|
-
|
|
56
|
-
def mcp_command(args)
|
|
57
|
-
# MCP has subcommands
|
|
58
|
-
subcommand = args.first
|
|
59
|
-
|
|
60
|
-
case subcommand
|
|
61
|
-
when "serve"
|
|
62
|
-
mcp_serve_command(args[1..])
|
|
63
|
-
when "tools"
|
|
64
|
-
mcp_tools_command(args[1..])
|
|
65
|
-
else
|
|
66
|
-
$stderr.puts "Unknown mcp subcommand: #{subcommand}"
|
|
67
|
-
$stderr.puts
|
|
68
|
-
$stderr.puts "Available mcp subcommands:"
|
|
69
|
-
$stderr.puts " serve Start an MCP server exposing swarm lead agent"
|
|
70
|
-
$stderr.puts " tools Start an MCP server exposing SwarmSDK tools"
|
|
71
|
-
exit(1)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def mcp_serve_command(args)
|
|
76
|
-
# Parse options
|
|
77
|
-
options = McpServeOptions.new
|
|
78
|
-
options.parse(args)
|
|
79
|
-
|
|
80
|
-
# Execute mcp serve command
|
|
81
|
-
Commands::McpServe.new(options).execute
|
|
82
|
-
rescue TTY::Option::InvalidParameter, TTY::Option::InvalidArgument => e
|
|
83
|
-
$stderr.puts "Error: #{e.message}"
|
|
84
|
-
$stderr.puts
|
|
85
|
-
$stderr.puts options.help
|
|
86
|
-
exit(1)
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def mcp_tools_command(args)
|
|
90
|
-
# Parse options
|
|
91
|
-
options = McpToolsOptions.new
|
|
92
|
-
options.parse(args)
|
|
93
|
-
|
|
94
|
-
# Execute mcp tools command
|
|
95
|
-
Commands::McpTools.new(options).execute
|
|
96
|
-
rescue TTY::Option::InvalidParameter, TTY::Option::InvalidArgument => e
|
|
97
|
-
$stderr.puts "Error: #{e.message}"
|
|
98
|
-
$stderr.puts
|
|
99
|
-
$stderr.puts options.help
|
|
100
|
-
exit(1)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def run_command(args)
|
|
104
|
-
# Parse options
|
|
105
|
-
options = Options.new
|
|
106
|
-
options.parse(args)
|
|
107
|
-
|
|
108
|
-
# Execute run command
|
|
109
|
-
Commands::Run.new(options).execute
|
|
110
|
-
rescue TTY::Option::InvalidParameter, TTY::Option::InvalidArgument => e
|
|
111
|
-
$stderr.puts "Error: #{e.message}"
|
|
112
|
-
$stderr.puts
|
|
113
|
-
$stderr.puts options.help
|
|
114
|
-
exit(1)
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
def migrate_command(args)
|
|
118
|
-
# Parse options
|
|
119
|
-
options = MigrateOptions.new
|
|
120
|
-
options.parse(args)
|
|
121
|
-
|
|
122
|
-
# Execute migrate command
|
|
123
|
-
Commands::Migrate.new(options).execute
|
|
124
|
-
rescue TTY::Option::InvalidParameter, TTY::Option::InvalidArgument => e
|
|
125
|
-
$stderr.puts "Error: #{e.message}"
|
|
126
|
-
$stderr.puts
|
|
127
|
-
$stderr.puts options.help
|
|
128
|
-
exit(1)
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
def extension_command(command_name, args)
|
|
132
|
-
# Get extension command class from registry
|
|
133
|
-
command_class = CommandRegistry.get(command_name)
|
|
134
|
-
|
|
135
|
-
# Execute extension command
|
|
136
|
-
command_class.execute(args)
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
def print_help
|
|
140
|
-
puts
|
|
141
|
-
puts "SwarmCLI v#{VERSION} - AI Agent Orchestration"
|
|
142
|
-
puts
|
|
143
|
-
puts "Usage:"
|
|
144
|
-
puts " swarm run CONFIG_FILE -p PROMPT [options]"
|
|
145
|
-
puts " swarm migrate INPUT_FILE [--output OUTPUT_FILE]"
|
|
146
|
-
puts " swarm mcp serve CONFIG_FILE"
|
|
147
|
-
puts " swarm mcp tools [TOOL_NAMES...]"
|
|
148
|
-
|
|
149
|
-
# Show extension commands dynamically
|
|
150
|
-
CommandRegistry.commands.each do |cmd|
|
|
151
|
-
puts " swarm #{cmd} ..."
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
puts
|
|
155
|
-
puts "Commands:"
|
|
156
|
-
puts " run Execute a swarm with AI agents"
|
|
157
|
-
puts " migrate Migrate Claude Swarm v1 config to SwarmSDK v2 format"
|
|
158
|
-
puts " mcp serve Start an MCP server exposing swarm lead agent"
|
|
159
|
-
puts " mcp tools Start an MCP server exposing SwarmSDK tools"
|
|
160
|
-
|
|
161
|
-
# Show extension command descriptions (if registered)
|
|
162
|
-
if CommandRegistry.registered?("memory")
|
|
163
|
-
puts " memory Manage SwarmMemory embeddings"
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
puts
|
|
167
|
-
puts "Options:"
|
|
168
|
-
puts " -p, --prompt PROMPT Task prompt for the swarm"
|
|
169
|
-
puts " -o, --output FILE Output file for migrated config (default: stdout)"
|
|
170
|
-
puts " --output-format FORMAT Output format: 'human' or 'json' (default: human)"
|
|
171
|
-
puts " -q, --quiet Suppress progress output (human format only)"
|
|
172
|
-
puts " --truncate Truncate long outputs for concise view"
|
|
173
|
-
puts " --verbose Show system reminders and additional debug information"
|
|
174
|
-
puts " -h, --help Print help"
|
|
175
|
-
puts " -v, --version Print version"
|
|
176
|
-
puts
|
|
177
|
-
puts "Examples:"
|
|
178
|
-
puts " swarm run team.yml -p 'Build a REST API'"
|
|
179
|
-
puts " echo 'Build a REST API' | swarm run team.yml"
|
|
180
|
-
puts " swarm run team.yml -p 'Refactor code' --output-format json"
|
|
181
|
-
puts " swarm migrate old-config.yml"
|
|
182
|
-
puts " swarm migrate old-config.yml --output new-config.yml"
|
|
183
|
-
puts " swarm mcp serve team.yml"
|
|
184
|
-
puts " swarm mcp tools # Expose all SwarmSDK tools"
|
|
185
|
-
puts " swarm mcp tools Bash Grep Read # Space-separated tools"
|
|
186
|
-
puts " swarm mcp tools ScratchpadWrite,ScratchpadRead # Comma-separated tools"
|
|
187
|
-
|
|
188
|
-
# Show extension command examples dynamically
|
|
189
|
-
if CommandRegistry.registered?("memory")
|
|
190
|
-
puts " swarm memory setup # Setup embeddings (download model)"
|
|
191
|
-
puts " swarm memory status # Check embedding status"
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
puts
|
|
195
|
-
end
|
|
196
|
-
|
|
197
|
-
def print_version
|
|
198
|
-
puts "SwarmCLI v#{VERSION}"
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
end
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module SwarmCLI
|
|
4
|
-
# Registry for CLI command extensions
|
|
5
|
-
#
|
|
6
|
-
# Allows gems (like swarm_memory) to register additional CLI commands
|
|
7
|
-
# that integrate seamlessly with the main swarm CLI.
|
|
8
|
-
#
|
|
9
|
-
# @example
|
|
10
|
-
# # In swarm_memory gem
|
|
11
|
-
# SwarmCLI::CommandRegistry.register(:memory, MyMemoryCommand)
|
|
12
|
-
#
|
|
13
|
-
# # User runs:
|
|
14
|
-
# swarm memory status
|
|
15
|
-
#
|
|
16
|
-
# # SwarmCLI routes to MyMemoryCommand.execute(["status"])
|
|
17
|
-
class CommandRegistry
|
|
18
|
-
@extensions = {}
|
|
19
|
-
|
|
20
|
-
class << self
|
|
21
|
-
# Register a command extension
|
|
22
|
-
#
|
|
23
|
-
# @param command_name [Symbol, String] Command name (e.g., :memory)
|
|
24
|
-
# @param command_class [Class] Command class with execute(args) method
|
|
25
|
-
# @return [void]
|
|
26
|
-
#
|
|
27
|
-
# @example
|
|
28
|
-
# CommandRegistry.register(:memory, SwarmMemory::CLI::Commands)
|
|
29
|
-
def register(command_name, command_class)
|
|
30
|
-
@extensions ||= {}
|
|
31
|
-
@extensions[command_name.to_s] = command_class
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Get command class by name
|
|
35
|
-
#
|
|
36
|
-
# @param command_name [String] Command name
|
|
37
|
-
# @return [Class, nil] Command class or nil if not found
|
|
38
|
-
def get(command_name)
|
|
39
|
-
@extensions ||= {}
|
|
40
|
-
@extensions[command_name.to_s]
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Check if a command is registered
|
|
44
|
-
#
|
|
45
|
-
# @param command_name [String] Command name
|
|
46
|
-
# @return [Boolean] True if command exists
|
|
47
|
-
def registered?(command_name)
|
|
48
|
-
@extensions ||= {}
|
|
49
|
-
@extensions.key?(command_name.to_s)
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# Get all registered command names
|
|
53
|
-
#
|
|
54
|
-
# @return [Array<String>] Command names
|
|
55
|
-
def commands
|
|
56
|
-
@extensions ||= {}
|
|
57
|
-
@extensions.keys
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|