swarm_cli 2.0.0.pre.1 → 2.0.0

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.
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SwarmCLI
4
- VERSION = "2.0.0-1"
4
+ VERSION = "2.0.0"
5
5
  end
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.0.pre.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo Arruda
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-10-14 00:00:00.000000000 Z
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.2
286
+ rubygems_version: 3.6.9
281
287
  specification_version: 4
282
288
  summary: Command-line interface for SwarmSDK
283
289
  test_files: []