swarm_cli 2.0.0.pre.1 → 2.0.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/lib/swarm_cli/cli.rb +21 -1
- data/lib/swarm_cli/commands/migrate.rb +55 -0
- data/lib/swarm_cli/commands/run.rb +81 -24
- data/lib/swarm_cli/config_loader.rb +97 -0
- data/lib/swarm_cli/formatters/human_formatter.rb +404 -629
- data/lib/swarm_cli/interactive_repl.rb +640 -0
- data/lib/swarm_cli/migrate_options.rb +54 -0
- data/lib/swarm_cli/migrator.rb +132 -0
- data/lib/swarm_cli/options.rb +53 -17
- data/lib/swarm_cli/ui/components/agent_badge.rb +33 -0
- data/lib/swarm_cli/ui/components/content_block.rb +120 -0
- data/lib/swarm_cli/ui/components/divider.rb +57 -0
- data/lib/swarm_cli/ui/components/panel.rb +62 -0
- data/lib/swarm_cli/ui/components/usage_stats.rb +70 -0
- data/lib/swarm_cli/ui/formatters/cost.rb +49 -0
- data/lib/swarm_cli/ui/formatters/number.rb +58 -0
- data/lib/swarm_cli/ui/formatters/text.rb +77 -0
- data/lib/swarm_cli/ui/formatters/time.rb +73 -0
- data/lib/swarm_cli/ui/icons.rb +59 -0
- data/lib/swarm_cli/ui/renderers/event_renderer.rb +188 -0
- data/lib/swarm_cli/ui/state/agent_color_cache.rb +45 -0
- data/lib/swarm_cli/ui/state/depth_tracker.rb +40 -0
- data/lib/swarm_cli/ui/state/spinner_manager.rb +170 -0
- data/lib/swarm_cli/ui/state/usage_tracker.rb +62 -0
- data/lib/swarm_cli/version.rb +1 -1
- data/lib/swarm_cli.rb +3 -1
- metadata +23 -17
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SwarmCLI
|
4
|
+
module UI
|
5
|
+
module State
|
6
|
+
# Tracks cumulative usage statistics during swarm execution
|
7
|
+
class UsageTracker
|
8
|
+
attr_reader :total_cost, :total_tokens, :llm_requests, :tool_calls
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@total_cost = 0.0
|
12
|
+
@total_tokens = 0
|
13
|
+
@llm_requests = 0
|
14
|
+
@tool_calls = 0
|
15
|
+
@agents_seen = Set.new
|
16
|
+
@recent_tool_calls = {} # tool_call_id => tool_name for matching
|
17
|
+
end
|
18
|
+
|
19
|
+
# Track an LLM API call
|
20
|
+
def track_llm_request(usage_data)
|
21
|
+
@llm_requests += 1
|
22
|
+
|
23
|
+
if usage_data
|
24
|
+
@total_cost += usage_data[:total_cost] || 0.0
|
25
|
+
@total_tokens += usage_data[:total_tokens] || 0
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Track a tool call
|
30
|
+
def track_tool_call(tool_call_id: nil, tool_name: nil)
|
31
|
+
@tool_calls += 1
|
32
|
+
@recent_tool_calls[tool_call_id] = tool_name if tool_call_id && tool_name
|
33
|
+
end
|
34
|
+
|
35
|
+
# Track agent usage
|
36
|
+
def track_agent(agent_name)
|
37
|
+
@agents_seen.add(agent_name)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get list of agents seen
|
41
|
+
def agents
|
42
|
+
@agents_seen.to_a
|
43
|
+
end
|
44
|
+
|
45
|
+
# Get tool name from call ID
|
46
|
+
def tool_name_for(tool_call_id)
|
47
|
+
@recent_tool_calls[tool_call_id]
|
48
|
+
end
|
49
|
+
|
50
|
+
# Reset all counters (for testing)
|
51
|
+
def reset
|
52
|
+
@total_cost = 0.0
|
53
|
+
@total_tokens = 0
|
54
|
+
@llm_requests = 0
|
55
|
+
@tool_calls = 0
|
56
|
+
@agents_seen.clear
|
57
|
+
@recent_tool_calls.clear
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
data/lib/swarm_cli/version.rb
CHANGED
data/lib/swarm_cli.rb
CHANGED
@@ -5,13 +5,13 @@ require "json"
|
|
5
5
|
require "pathname"
|
6
6
|
require "yaml"
|
7
7
|
|
8
|
+
require "reline"
|
8
9
|
require "pastel"
|
9
10
|
require "tty-box"
|
10
11
|
require "tty-screen"
|
11
12
|
require "tty/link"
|
12
13
|
require "tty/markdown"
|
13
14
|
require "tty/option"
|
14
|
-
require "tty/prompt"
|
15
15
|
require "tty/spinner"
|
16
16
|
require "tty/spinner/multi"
|
17
17
|
require "tty/tree"
|
@@ -26,6 +26,8 @@ loader = Zeitwerk::Loader.new
|
|
26
26
|
loader.push_dir("#{__dir__}/swarm_cli", namespace: SwarmCLI)
|
27
27
|
loader.inflector.inflect(
|
28
28
|
"cli" => "CLI",
|
29
|
+
"ui" => "UI",
|
30
|
+
"interactive_repl" => "InteractiveREPL",
|
29
31
|
)
|
30
32
|
loader.setup
|
31
33
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swarm_cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paulo Arruda
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: fast-mcp
|
@@ -121,20 +121,6 @@ dependencies:
|
|
121
121
|
- - ">="
|
122
122
|
- !ruby/object:Gem::Version
|
123
123
|
version: '0'
|
124
|
-
- !ruby/object:Gem::Dependency
|
125
|
-
name: tty-prompt
|
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
124
|
- !ruby/object:Gem::Dependency
|
139
125
|
name: tty-spinner
|
140
126
|
requirement: !ruby/object:Gem::Requirement
|
@@ -250,12 +236,32 @@ files:
|
|
250
236
|
- lib/swarm_cli/cli.rb
|
251
237
|
- lib/swarm_cli/commands/mcp_serve.rb
|
252
238
|
- lib/swarm_cli/commands/mcp_tools.rb
|
239
|
+
- lib/swarm_cli/commands/migrate.rb
|
253
240
|
- lib/swarm_cli/commands/run.rb
|
241
|
+
- lib/swarm_cli/config_loader.rb
|
254
242
|
- lib/swarm_cli/formatters/human_formatter.rb
|
255
243
|
- lib/swarm_cli/formatters/json_formatter.rb
|
244
|
+
- lib/swarm_cli/interactive_repl.rb
|
256
245
|
- lib/swarm_cli/mcp_serve_options.rb
|
257
246
|
- lib/swarm_cli/mcp_tools_options.rb
|
247
|
+
- lib/swarm_cli/migrate_options.rb
|
248
|
+
- lib/swarm_cli/migrator.rb
|
258
249
|
- lib/swarm_cli/options.rb
|
250
|
+
- lib/swarm_cli/ui/components/agent_badge.rb
|
251
|
+
- lib/swarm_cli/ui/components/content_block.rb
|
252
|
+
- lib/swarm_cli/ui/components/divider.rb
|
253
|
+
- lib/swarm_cli/ui/components/panel.rb
|
254
|
+
- lib/swarm_cli/ui/components/usage_stats.rb
|
255
|
+
- lib/swarm_cli/ui/formatters/cost.rb
|
256
|
+
- lib/swarm_cli/ui/formatters/number.rb
|
257
|
+
- lib/swarm_cli/ui/formatters/text.rb
|
258
|
+
- lib/swarm_cli/ui/formatters/time.rb
|
259
|
+
- lib/swarm_cli/ui/icons.rb
|
260
|
+
- lib/swarm_cli/ui/renderers/event_renderer.rb
|
261
|
+
- lib/swarm_cli/ui/state/agent_color_cache.rb
|
262
|
+
- lib/swarm_cli/ui/state/depth_tracker.rb
|
263
|
+
- lib/swarm_cli/ui/state/spinner_manager.rb
|
264
|
+
- lib/swarm_cli/ui/state/usage_tracker.rb
|
259
265
|
- lib/swarm_cli/version.rb
|
260
266
|
homepage: https://github.com/parruda/claude-swarm
|
261
267
|
licenses:
|
@@ -277,7 +283,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
277
283
|
- !ruby/object:Gem::Version
|
278
284
|
version: '0'
|
279
285
|
requirements: []
|
280
|
-
rubygems_version: 3.6.
|
286
|
+
rubygems_version: 3.6.9
|
281
287
|
specification_version: 4
|
282
288
|
summary: Command-line interface for SwarmSDK
|
283
289
|
test_files: []
|