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.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.enhance_swarm/agent_scripts/frontend_agent.md +39 -0
  3. data/.enhance_swarm/user_patterns.json +37 -0
  4. data/CHANGELOG.md +184 -0
  5. data/LICENSE +21 -0
  6. data/PRODUCTION_TEST_LOG.md +502 -0
  7. data/README.md +905 -0
  8. data/Rakefile +28 -0
  9. data/USAGE_EXAMPLES.md +477 -0
  10. data/examples/enhance_workflow.md +346 -0
  11. data/examples/rails_project.md +253 -0
  12. data/exe/enhance-swarm +30 -0
  13. data/lib/enhance_swarm/additional_commands.rb +299 -0
  14. data/lib/enhance_swarm/agent_communicator.rb +460 -0
  15. data/lib/enhance_swarm/agent_reviewer.rb +283 -0
  16. data/lib/enhance_swarm/agent_spawner.rb +462 -0
  17. data/lib/enhance_swarm/cleanup_manager.rb +245 -0
  18. data/lib/enhance_swarm/cli.rb +1592 -0
  19. data/lib/enhance_swarm/command_executor.rb +78 -0
  20. data/lib/enhance_swarm/configuration.rb +324 -0
  21. data/lib/enhance_swarm/control_agent.rb +307 -0
  22. data/lib/enhance_swarm/dependency_validator.rb +195 -0
  23. data/lib/enhance_swarm/error_recovery.rb +785 -0
  24. data/lib/enhance_swarm/generator.rb +194 -0
  25. data/lib/enhance_swarm/interrupt_handler.rb +512 -0
  26. data/lib/enhance_swarm/logger.rb +106 -0
  27. data/lib/enhance_swarm/mcp_integration.rb +85 -0
  28. data/lib/enhance_swarm/monitor.rb +28 -0
  29. data/lib/enhance_swarm/notification_manager.rb +444 -0
  30. data/lib/enhance_swarm/orchestrator.rb +313 -0
  31. data/lib/enhance_swarm/output_streamer.rb +281 -0
  32. data/lib/enhance_swarm/process_monitor.rb +266 -0
  33. data/lib/enhance_swarm/progress_tracker.rb +215 -0
  34. data/lib/enhance_swarm/project_analyzer.rb +612 -0
  35. data/lib/enhance_swarm/resource_manager.rb +177 -0
  36. data/lib/enhance_swarm/retry_handler.rb +40 -0
  37. data/lib/enhance_swarm/session_manager.rb +247 -0
  38. data/lib/enhance_swarm/signal_handler.rb +95 -0
  39. data/lib/enhance_swarm/smart_defaults.rb +708 -0
  40. data/lib/enhance_swarm/task_integration.rb +150 -0
  41. data/lib/enhance_swarm/task_manager.rb +174 -0
  42. data/lib/enhance_swarm/version.rb +5 -0
  43. data/lib/enhance_swarm/visual_dashboard.rb +555 -0
  44. data/lib/enhance_swarm/web_ui.rb +211 -0
  45. data/lib/enhance_swarm.rb +69 -0
  46. data/setup.sh +86 -0
  47. data/sig/enhance_swarm.rbs +4 -0
  48. data/templates/claude/CLAUDE.md +160 -0
  49. data/templates/claude/MCP.md +117 -0
  50. data/templates/claude/PERSONAS.md +114 -0
  51. data/templates/claude/RULES.md +221 -0
  52. data/test_builtin_functionality.rb +121 -0
  53. data/test_core_components.rb +156 -0
  54. data/test_real_claude_integration.rb +285 -0
  55. data/test_security.rb +150 -0
  56. data/test_smart_defaults.rb +155 -0
  57. data/test_task_integration.rb +173 -0
  58. data/test_web_ui.rb +245 -0
  59. data/web/assets/css/main.css +645 -0
  60. data/web/assets/js/kanban.js +499 -0
  61. data/web/assets/js/main.js +525 -0
  62. data/web/templates/dashboard.html.erb +226 -0
  63. data/web/templates/kanban.html.erb +193 -0
  64. 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