enhance_swarm 1.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.
- checksums.yaml +7 -0
- data/.enhance_swarm/agent_scripts/frontend_agent.md +39 -0
- data/.enhance_swarm/user_patterns.json +37 -0
- data/CHANGELOG.md +184 -0
- data/LICENSE +21 -0
- data/PRODUCTION_TEST_LOG.md +502 -0
- data/README.md +905 -0
- data/Rakefile +28 -0
- data/USAGE_EXAMPLES.md +477 -0
- data/examples/enhance_workflow.md +346 -0
- data/examples/rails_project.md +253 -0
- data/exe/enhance-swarm +30 -0
- data/lib/enhance_swarm/additional_commands.rb +299 -0
- data/lib/enhance_swarm/agent_communicator.rb +460 -0
- data/lib/enhance_swarm/agent_reviewer.rb +283 -0
- data/lib/enhance_swarm/agent_spawner.rb +462 -0
- data/lib/enhance_swarm/cleanup_manager.rb +245 -0
- data/lib/enhance_swarm/cli.rb +1592 -0
- data/lib/enhance_swarm/command_executor.rb +78 -0
- data/lib/enhance_swarm/configuration.rb +324 -0
- data/lib/enhance_swarm/control_agent.rb +307 -0
- data/lib/enhance_swarm/dependency_validator.rb +195 -0
- data/lib/enhance_swarm/error_recovery.rb +785 -0
- data/lib/enhance_swarm/generator.rb +194 -0
- data/lib/enhance_swarm/interrupt_handler.rb +512 -0
- data/lib/enhance_swarm/logger.rb +106 -0
- data/lib/enhance_swarm/mcp_integration.rb +85 -0
- data/lib/enhance_swarm/monitor.rb +28 -0
- data/lib/enhance_swarm/notification_manager.rb +444 -0
- data/lib/enhance_swarm/orchestrator.rb +313 -0
- data/lib/enhance_swarm/output_streamer.rb +281 -0
- data/lib/enhance_swarm/process_monitor.rb +266 -0
- data/lib/enhance_swarm/progress_tracker.rb +215 -0
- data/lib/enhance_swarm/project_analyzer.rb +612 -0
- data/lib/enhance_swarm/resource_manager.rb +177 -0
- data/lib/enhance_swarm/retry_handler.rb +40 -0
- data/lib/enhance_swarm/session_manager.rb +247 -0
- data/lib/enhance_swarm/signal_handler.rb +95 -0
- data/lib/enhance_swarm/smart_defaults.rb +708 -0
- data/lib/enhance_swarm/task_integration.rb +150 -0
- data/lib/enhance_swarm/task_manager.rb +174 -0
- data/lib/enhance_swarm/version.rb +5 -0
- data/lib/enhance_swarm/visual_dashboard.rb +555 -0
- data/lib/enhance_swarm/web_ui.rb +211 -0
- data/lib/enhance_swarm.rb +69 -0
- data/setup.sh +86 -0
- data/sig/enhance_swarm.rbs +4 -0
- data/templates/claude/CLAUDE.md +160 -0
- data/templates/claude/MCP.md +117 -0
- data/templates/claude/PERSONAS.md +114 -0
- data/templates/claude/RULES.md +221 -0
- data/test_builtin_functionality.rb +121 -0
- data/test_core_components.rb +156 -0
- data/test_real_claude_integration.rb +285 -0
- data/test_security.rb +150 -0
- data/test_smart_defaults.rb +155 -0
- data/test_task_integration.rb +173 -0
- data/test_web_ui.rb +245 -0
- data/web/assets/css/main.css +645 -0
- data/web/assets/js/kanban.js +499 -0
- data/web/assets/js/main.js +525 -0
- data/web/templates/dashboard.html.erb +226 -0
- data/web/templates/kanban.html.erb +193 -0
- metadata +293 -0
@@ -0,0 +1,195 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'command_executor'
|
4
|
+
|
5
|
+
module EnhanceSwarm
|
6
|
+
class DependencyValidator
|
7
|
+
REQUIRED_TOOLS = {
|
8
|
+
'git' => {
|
9
|
+
min_version: '2.20.0',
|
10
|
+
check_command: 'git --version',
|
11
|
+
version_regex: /git version (\d+\.\d+\.\d+)/,
|
12
|
+
critical: true
|
13
|
+
}
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
OPTIONAL_TOOLS = {
|
17
|
+
'claude' => {
|
18
|
+
min_version: '1.0.0',
|
19
|
+
check_command: 'claude --version',
|
20
|
+
version_regex: /(\d+\.\d+\.\d+)/,
|
21
|
+
description: 'Claude CLI for enhanced agent spawning'
|
22
|
+
},
|
23
|
+
'gemini' => {
|
24
|
+
min_version: '0.1.0',
|
25
|
+
check_command: 'gemini --version',
|
26
|
+
version_regex: /(\d+\.\d+\.\d+)/,
|
27
|
+
description: 'Gemini CLI for large context analysis'
|
28
|
+
}
|
29
|
+
}.freeze
|
30
|
+
|
31
|
+
def self.validate_all
|
32
|
+
results = {}
|
33
|
+
all_critical_passed = true
|
34
|
+
|
35
|
+
# Check required tools
|
36
|
+
REQUIRED_TOOLS.each do |tool, config|
|
37
|
+
result = validate_tool(tool, config)
|
38
|
+
results[tool] = result
|
39
|
+
|
40
|
+
if config[:critical] && !result[:passed]
|
41
|
+
all_critical_passed = false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Check optional tools
|
46
|
+
OPTIONAL_TOOLS.each do |tool, config|
|
47
|
+
result = validate_tool(tool, config)
|
48
|
+
result[:optional] = true
|
49
|
+
results[tool] = result
|
50
|
+
end
|
51
|
+
|
52
|
+
# Check Ruby version
|
53
|
+
ruby_result = validate_ruby_version
|
54
|
+
results['ruby'] = ruby_result
|
55
|
+
all_critical_passed = false unless ruby_result[:passed]
|
56
|
+
|
57
|
+
{
|
58
|
+
passed: all_critical_passed,
|
59
|
+
results: results,
|
60
|
+
summary: generate_summary(results),
|
61
|
+
optional_summary: generate_optional_summary(results)
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.validate_tool(tool, config)
|
66
|
+
begin
|
67
|
+
output = CommandExecutor.execute(config[:check_command].split.first,
|
68
|
+
*config[:check_command].split[1..],
|
69
|
+
timeout: 10)
|
70
|
+
|
71
|
+
if config[:version_regex]
|
72
|
+
version_match = output.match(config[:version_regex])
|
73
|
+
if version_match
|
74
|
+
version = version_match[1]
|
75
|
+
meets_requirement = version_meets_requirement?(version, config[:min_version])
|
76
|
+
|
77
|
+
{
|
78
|
+
passed: meets_requirement,
|
79
|
+
available: true,
|
80
|
+
version: version,
|
81
|
+
required: config[:min_version],
|
82
|
+
error: meets_requirement ? nil : "Version #{version} is below required #{config[:min_version]}"
|
83
|
+
}
|
84
|
+
else
|
85
|
+
{
|
86
|
+
passed: false,
|
87
|
+
available: true,
|
88
|
+
version: 'unknown',
|
89
|
+
required: config[:min_version],
|
90
|
+
error: "Could not parse version from: #{output}"
|
91
|
+
}
|
92
|
+
end
|
93
|
+
else
|
94
|
+
# Tool exists but version check not configured
|
95
|
+
{
|
96
|
+
passed: true,
|
97
|
+
available: true,
|
98
|
+
version: 'unknown',
|
99
|
+
required: config[:min_version],
|
100
|
+
error: nil
|
101
|
+
}
|
102
|
+
end
|
103
|
+
rescue CommandExecutor::CommandError => e
|
104
|
+
{
|
105
|
+
passed: false,
|
106
|
+
available: false,
|
107
|
+
version: nil,
|
108
|
+
required: config[:min_version],
|
109
|
+
error: "Tool not available: #{e.message}"
|
110
|
+
}
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def self.validate_ruby_version
|
115
|
+
current = RUBY_VERSION
|
116
|
+
required = '3.0.0'
|
117
|
+
meets_requirement = version_meets_requirement?(current, required)
|
118
|
+
|
119
|
+
{
|
120
|
+
passed: meets_requirement,
|
121
|
+
available: true,
|
122
|
+
version: current,
|
123
|
+
required: required,
|
124
|
+
error: meets_requirement ? nil : "Ruby #{current} is below required #{required}"
|
125
|
+
}
|
126
|
+
end
|
127
|
+
|
128
|
+
def self.version_meets_requirement?(current, required)
|
129
|
+
Gem::Version.new(current) >= Gem::Version.new(required)
|
130
|
+
rescue ArgumentError
|
131
|
+
false
|
132
|
+
end
|
133
|
+
|
134
|
+
def self.generate_summary(results)
|
135
|
+
# Only count required tools for main summary
|
136
|
+
required_results = results.reject { |_, result| result[:optional] }
|
137
|
+
total = required_results.size
|
138
|
+
passed = required_results.count { |_, result| result[:passed] }
|
139
|
+
failed = total - passed
|
140
|
+
|
141
|
+
"Dependency validation: #{passed}/#{total} required dependencies passed"
|
142
|
+
end
|
143
|
+
|
144
|
+
def self.generate_optional_summary(results)
|
145
|
+
optional_results = results.select { |_, result| result[:optional] }
|
146
|
+
return "No optional tools checked" if optional_results.empty?
|
147
|
+
|
148
|
+
total = optional_results.size
|
149
|
+
passed = optional_results.count { |_, result| result[:passed] }
|
150
|
+
|
151
|
+
"Optional tools: #{passed}/#{total} available"
|
152
|
+
end
|
153
|
+
|
154
|
+
# Functional validation beyond version checking
|
155
|
+
def self.validate_functionality
|
156
|
+
validations = {}
|
157
|
+
|
158
|
+
# Test git functionality
|
159
|
+
validations[:git_functional] = test_git_functionality
|
160
|
+
|
161
|
+
# Test enhance-swarm built-in functionality
|
162
|
+
validations[:session_manager_functional] = test_session_manager_functionality
|
163
|
+
|
164
|
+
validations
|
165
|
+
end
|
166
|
+
|
167
|
+
private
|
168
|
+
|
169
|
+
def self.test_git_functionality
|
170
|
+
begin
|
171
|
+
# Test basic git operations
|
172
|
+
CommandExecutor.execute('git', 'status', timeout: 5)
|
173
|
+
CommandExecutor.execute('git', 'config', 'user.name', timeout: 5)
|
174
|
+
{ passed: true, error: nil }
|
175
|
+
rescue CommandExecutor::CommandError => e
|
176
|
+
{ passed: false, error: "Git functionality test failed: #{e.message}" }
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def self.test_session_manager_functionality
|
181
|
+
begin
|
182
|
+
# Test built-in session manager
|
183
|
+
require_relative 'session_manager'
|
184
|
+
session_manager = EnhanceSwarm::SessionManager.new
|
185
|
+
|
186
|
+
# Try to read session status (should work even if no session exists)
|
187
|
+
session_status = session_manager.session_status
|
188
|
+
|
189
|
+
{ passed: true, error: nil }
|
190
|
+
rescue StandardError => e
|
191
|
+
{ passed: false, error: "Session manager functionality test failed: #{e.message}" }
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|