aidp 0.8.2 → 0.8.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9c14dc26b8cedb7e1beb09f9799dcbbcedf3e6aeb33b908256d7c67bd864b22
4
- data.tar.gz: 3af751e93b47bf20566796c4ebf7519aa425e9851531b954be059b7bf649fc7d
3
+ metadata.gz: 60b61133b8f3b07ef7fbdd76bce1485bd89b75f78c4130f195c786331f383ded
4
+ data.tar.gz: e81f6387d6c6941da8b2ae1ff2b3153a3911fd2bb0405c4982f52b166681fc64
5
5
  SHA512:
6
- metadata.gz: 3991a8477fc0f4293473a06083b734f7ea544d46847747688cda8c0c7d9b59e4dde2bbb41faaa92a9edaad88e920a0d6faca939c11d3a32c4da6f9b3740c62fe
7
- data.tar.gz: b11ab471251fd86f4d9ff2acbd8c3c8fb0e9bf360292dc51e6a9697ba97b0e520dbcf9dc115331e1eb6800268dc08055b0e7fd4584f5af9e7a6609a7d3fac058
6
+ metadata.gz: 42b8c458bd6dcbfce249d12bb7a1e7eab1d09a61259ea231b935fd4d28c39170baf57d099bb3a5fd3037a3501a4d5daa9abc3696e3c7b91e07137ffce24b22a6
7
+ data.tar.gz: e2f038cc38c7b32f9bda535ac6bfb8a0bc39c54ef252dc9d7f333f66c71de41dc8e88a6479e8319bad64e5e9dc8adffb2d4dd03febddb82081df2ddf91e8efe0
@@ -6,7 +6,7 @@ require_relative "configuration"
6
6
  require_relative "state_manager"
7
7
  require_relative "condition_detector"
8
8
  require_relative "provider_manager"
9
- require_relative "user_interface"
9
+ require_relative "simple_user_interface"
10
10
  require_relative "error_handler"
11
11
  require_relative "status_display"
12
12
  require_relative "completion_checker"
@@ -47,7 +47,7 @@ module Aidp
47
47
  @state_manager = StateManager.new(project_dir, @mode)
48
48
  @condition_detector = ConditionDetector.new
49
49
  @provider_manager = ProviderManager.new(@configuration)
50
- @user_interface = UserInterface.new
50
+ @user_interface = SimpleUserInterface.new
51
51
  @error_handler = ErrorHandler.new(@provider_manager, @configuration)
52
52
  @status_display = StatusDisplay.new
53
53
  @completion_checker = CompletionChecker.new(@project_dir, @workflow_type)
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tty-prompt"
4
+
5
+ module Aidp
6
+ module Harness
7
+ # Simple, focused user interface for collecting feedback
8
+ # Replaces the bloated UserInterface with minimal, clean code
9
+ class SimpleUserInterface
10
+ def initialize
11
+ @prompt = TTY::Prompt.new
12
+ end
13
+
14
+ # Main method - collect responses for questions
15
+ def collect_feedback(questions, context = nil)
16
+ show_context(context) if context
17
+
18
+ responses = {}
19
+ questions.each_with_index do |question_data, index|
20
+ key = "question_#{question_data[:number] || index + 1}"
21
+ responses[key] = ask_question(question_data)
22
+ end
23
+
24
+ responses
25
+ end
26
+
27
+ private
28
+
29
+ def show_context(context)
30
+ puts "\nšŸ¤– Agent needs feedback"
31
+ puts "Context: #{context[:description]}" if context[:description]
32
+ puts ""
33
+ end
34
+
35
+ def ask_question(question_data)
36
+ question = question_data[:question]
37
+ type = question_data[:type] || "text"
38
+ default = question_data[:default]
39
+ required = question_data[:required] != false
40
+ options = question_data[:options]
41
+
42
+ puts "\n#{question}"
43
+
44
+ case type
45
+ when "text"
46
+ ask_text(question, default, required)
47
+ when "choice"
48
+ @prompt.select("Choose:", options, default: default)
49
+ when "confirmation"
50
+ @prompt.yes?("#{question}?", default: default)
51
+ when "file"
52
+ ask_file(question, default, required)
53
+ when "number"
54
+ ask_number(question, default, required)
55
+ when "email"
56
+ ask_email(question, default, required)
57
+ when "url"
58
+ ask_url(question, default, required)
59
+ else
60
+ ask_text(question, default, required)
61
+ end
62
+ end
63
+
64
+ def ask_text(question, default, required)
65
+ options = {}
66
+ options[:default] = default if default
67
+ options[:required] = required
68
+
69
+ @prompt.ask("Response:", **options)
70
+ end
71
+
72
+ def ask_file(question, default, required)
73
+ input = @prompt.ask("File path:", default: default, required: required)
74
+
75
+ # Handle @ file selection
76
+ if input&.start_with?("@")
77
+ search_term = input[1..].strip
78
+ files = find_files(search_term)
79
+
80
+ return nil if files.empty?
81
+
82
+ @prompt.select("Select file:", files, per_page: 15)
83
+ else
84
+ input
85
+ end
86
+ end
87
+
88
+ def ask_number(question, default, required)
89
+ @prompt.ask("Number:", default: default, required: required) do |q|
90
+ q.convert :int
91
+ q.validate(/^\d+$/, "Please enter a valid number")
92
+ end
93
+ end
94
+
95
+ def ask_email(question, default, required)
96
+ @prompt.ask("Email:", default: default, required: required) do |q|
97
+ q.validate(/\A[\w+\-.]+@[a-z\d-]+(\.[a-z\d-]+)*\.[a-z]+\z/i, "Please enter a valid email")
98
+ end
99
+ end
100
+
101
+ def ask_url(question, default, required)
102
+ @prompt.ask("URL:", default: default, required: required) do |q|
103
+ q.validate(/\Ahttps?:\/\/.+/i, "Please enter a valid URL (http:// or https://)")
104
+ end
105
+ end
106
+
107
+ def find_files(search_term)
108
+ if search_term.empty?
109
+ # Show common files
110
+ Dir.glob("**/*").select { |f| File.file?(f) }.first(20)
111
+ elsif search_term.start_with?(".")
112
+ # Extension search (e.g., .rb)
113
+ Dir.glob("**/*#{search_term}").select { |f| File.file?(f) }
114
+ elsif search_term.end_with?("/")
115
+ # Directory search (e.g., lib/)
116
+ dir = search_term.chomp("/")
117
+ Dir.glob("#{dir}/**/*").select { |f| File.file?(f) }
118
+ else
119
+ # Name search
120
+ Dir.glob("**/*#{search_term}*").select { |f| File.file?(f) }
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
data/lib/aidp/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aidp
4
- VERSION = "0.8.2"
4
+ VERSION = "0.8.3"
5
5
  end
data/lib/aidp.rb CHANGED
@@ -51,6 +51,7 @@ require_relative "aidp/harness/config_loader"
51
51
  require_relative "aidp/harness/config_manager"
52
52
  require_relative "aidp/harness/condition_detector"
53
53
  require_relative "aidp/harness/user_interface"
54
+ require_relative "aidp/harness/simple_user_interface"
54
55
  require_relative "aidp/harness/provider_manager"
55
56
  require_relative "aidp/harness/provider_config"
56
57
  require_relative "aidp/harness/provider_factory"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aidp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bart Agapinan
@@ -272,6 +272,7 @@ files:
272
272
  - lib/aidp/harness/provider_manager.rb
273
273
  - lib/aidp/harness/provider_type_checker.rb
274
274
  - lib/aidp/harness/runner.rb
275
+ - lib/aidp/harness/simple_user_interface.rb
275
276
  - lib/aidp/harness/state/errors.rb
276
277
  - lib/aidp/harness/state/metrics.rb
277
278
  - lib/aidp/harness/state/persistence.rb