aidp 0.32.0 → 0.33.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 +4 -4
- data/lib/aidp/analyze/feature_analyzer.rb +322 -320
- data/lib/aidp/auto_update/coordinator.rb +97 -7
- data/lib/aidp/auto_update.rb +0 -12
- data/lib/aidp/cli/devcontainer_commands.rb +0 -5
- data/lib/aidp/cli.rb +2 -1
- data/lib/aidp/comment_consolidator.rb +78 -0
- data/lib/aidp/concurrency.rb +0 -3
- data/lib/aidp/config.rb +0 -1
- data/lib/aidp/config_paths.rb +71 -0
- data/lib/aidp/execute/work_loop_runner.rb +324 -15
- data/lib/aidp/harness/ai_filter_factory.rb +285 -0
- data/lib/aidp/harness/config_schema.rb +97 -1
- data/lib/aidp/harness/config_validator.rb +1 -1
- data/lib/aidp/harness/configuration.rb +61 -5
- data/lib/aidp/harness/filter_definition.rb +212 -0
- data/lib/aidp/harness/generated_filter_strategy.rb +197 -0
- data/lib/aidp/harness/output_filter.rb +50 -25
- data/lib/aidp/harness/output_filter_config.rb +129 -0
- data/lib/aidp/harness/provider_manager.rb +90 -2
- data/lib/aidp/harness/runner.rb +0 -11
- data/lib/aidp/harness/test_runner.rb +179 -41
- data/lib/aidp/harness/thinking_depth_manager.rb +16 -0
- data/lib/aidp/harness/ui/navigation/submenu.rb +0 -2
- data/lib/aidp/loader.rb +195 -0
- data/lib/aidp/metadata/compiler.rb +29 -17
- data/lib/aidp/metadata/query.rb +1 -1
- data/lib/aidp/metadata/scanner.rb +8 -1
- data/lib/aidp/metadata/tool_metadata.rb +13 -13
- data/lib/aidp/metadata/validator.rb +10 -0
- data/lib/aidp/metadata.rb +16 -0
- data/lib/aidp/pr_worktree_manager.rb +2 -2
- data/lib/aidp/provider_manager.rb +1 -7
- data/lib/aidp/setup/wizard.rb +279 -9
- data/lib/aidp/skills.rb +0 -5
- data/lib/aidp/storage/csv_storage.rb +3 -0
- data/lib/aidp/style_guide/selector.rb +360 -0
- data/lib/aidp/tooling_detector.rb +283 -16
- data/lib/aidp/version.rb +1 -1
- data/lib/aidp/watch/change_request_processor.rb +152 -14
- data/lib/aidp/watch/repository_client.rb +41 -0
- data/lib/aidp/watch/runner.rb +29 -18
- data/lib/aidp/watch.rb +5 -7
- data/lib/aidp/workstream_cleanup.rb +0 -2
- data/lib/aidp/workstream_executor.rb +0 -4
- data/lib/aidp/worktree.rb +0 -1
- data/lib/aidp.rb +21 -106
- metadata +72 -36
- data/lib/aidp/config/paths.rb +0 -131
data/lib/aidp/watch/runner.rb
CHANGED
|
@@ -2,21 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
require "tty-prompt"
|
|
4
4
|
|
|
5
|
-
require_relative "../message_display"
|
|
6
|
-
require_relative "repository_client"
|
|
7
|
-
require_relative "repository_safety_checker"
|
|
8
|
-
require_relative "state_store"
|
|
9
|
-
require_relative "github_state_extractor"
|
|
10
|
-
require_relative "plan_generator"
|
|
11
|
-
require_relative "plan_processor"
|
|
12
|
-
require_relative "build_processor"
|
|
13
|
-
require_relative "../auto_update"
|
|
14
|
-
require_relative "review_processor"
|
|
15
|
-
require_relative "ci_fix_processor"
|
|
16
|
-
require_relative "change_request_processor"
|
|
17
|
-
require_relative "auto_processor"
|
|
18
|
-
require_relative "auto_pr_processor"
|
|
19
|
-
|
|
20
5
|
module Aidp
|
|
21
6
|
module Watch
|
|
22
7
|
# Coordinates the watch mode loop: monitors issues, handles plan/build
|
|
@@ -522,14 +507,21 @@ module Aidp
|
|
|
522
507
|
return unless @auto_update_coordinator.policy.enabled
|
|
523
508
|
return unless time_for_update_check?
|
|
524
509
|
|
|
510
|
+
@last_update_check = Time.now
|
|
525
511
|
update_check = @auto_update_coordinator.check_for_update
|
|
526
512
|
|
|
527
513
|
if update_check.should_update?
|
|
528
514
|
display_message("🔄 Update available: #{update_check.current_version} → #{update_check.available_version}", type: :highlight)
|
|
529
|
-
display_message(" Saving checkpoint and initiating update...", type: :muted)
|
|
530
515
|
|
|
531
|
-
|
|
532
|
-
|
|
516
|
+
# Prefer hot reloading if available (Zeitwerk enabled with reloading)
|
|
517
|
+
if @auto_update_coordinator.hot_reload_available?
|
|
518
|
+
perform_hot_reload(update_check)
|
|
519
|
+
else
|
|
520
|
+
# Fall back to checkpoint + exit approach
|
|
521
|
+
display_message(" Saving checkpoint and initiating update...", type: :muted)
|
|
522
|
+
initiate_update(update_check)
|
|
523
|
+
# Never returns - exits with code 75
|
|
524
|
+
end
|
|
533
525
|
end
|
|
534
526
|
rescue Aidp::AutoUpdate::UpdateLoopError => e
|
|
535
527
|
# Restart loop detected - disable auto-update
|
|
@@ -540,6 +532,25 @@ module Aidp
|
|
|
540
532
|
Aidp.log_error("watch_runner", "update_check_failed", error: e.message)
|
|
541
533
|
end
|
|
542
534
|
|
|
535
|
+
# Perform hot code reload without restarting
|
|
536
|
+
# @param update_check [Aidp::AutoUpdate::UpdateCheck] Update check result
|
|
537
|
+
def perform_hot_reload(update_check)
|
|
538
|
+
display_message(" Performing hot code reload (no restart needed)...", type: :muted)
|
|
539
|
+
|
|
540
|
+
if @auto_update_coordinator.hot_reload_update(update_check)
|
|
541
|
+
display_message("✨ Hot reload complete! Now running #{Aidp::VERSION}", type: :success)
|
|
542
|
+
Aidp.log_info("watch_runner", "hot_reload_success",
|
|
543
|
+
version: Aidp::VERSION)
|
|
544
|
+
else
|
|
545
|
+
display_message("⚠️ Hot reload skipped (no update needed)", type: :muted)
|
|
546
|
+
end
|
|
547
|
+
rescue Aidp::AutoUpdate::UpdateError => e
|
|
548
|
+
display_message("⚠️ Hot reload failed: #{e.message}", type: :warning)
|
|
549
|
+
display_message(" Falling back to checkpoint + restart...", type: :muted)
|
|
550
|
+
# Fall back to cold restart
|
|
551
|
+
initiate_update(update_check)
|
|
552
|
+
end
|
|
553
|
+
|
|
543
554
|
# Determine if it's time to check for updates
|
|
544
555
|
# @return [Boolean]
|
|
545
556
|
def time_for_update_check?
|
data/lib/aidp/watch.rb
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
require_relative "watch/build_processor"
|
|
9
|
-
require_relative "watch/runner"
|
|
3
|
+
module Aidp
|
|
4
|
+
# Watch mode functionality for monitoring GitHub issues and PRs
|
|
5
|
+
module Watch
|
|
6
|
+
end
|
|
7
|
+
end
|
|
@@ -2,10 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
require "concurrent-ruby"
|
|
4
4
|
require "time"
|
|
5
|
-
require_relative "worktree"
|
|
6
|
-
require_relative "workstream_state"
|
|
7
|
-
require_relative "harness/runner"
|
|
8
|
-
require_relative "message_display"
|
|
9
5
|
|
|
10
6
|
module Aidp
|
|
11
7
|
# Executes multiple workstreams in parallel using concurrent-ruby.
|
data/lib/aidp/worktree.rb
CHANGED
data/lib/aidp.rb
CHANGED
|
@@ -1,115 +1,30 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
#
|
|
4
|
-
|
|
3
|
+
# Bootstrap: Load essential files before Zeitwerk
|
|
4
|
+
# These files must be loaded first and are excluded from autoloading:
|
|
5
|
+
# - version.rb: Needed for version checks during load
|
|
6
|
+
# - core_ext: Ruby core extensions that need to be available globally
|
|
7
|
+
# - logger.rb: Logging infrastructure used throughout loading
|
|
5
8
|
|
|
6
|
-
# Shared modules
|
|
7
9
|
require_relative "aidp/version"
|
|
8
|
-
require_relative "aidp/
|
|
9
|
-
require_relative "aidp/util"
|
|
10
|
-
require_relative "aidp/rescue_logging"
|
|
11
|
-
require_relative "aidp/message_display"
|
|
12
|
-
require_relative "aidp/concurrency"
|
|
13
|
-
require_relative "aidp/setup/wizard"
|
|
14
|
-
require_relative "aidp/init"
|
|
15
|
-
require_relative "aidp/watch"
|
|
16
|
-
require_relative "aidp/cli"
|
|
17
|
-
|
|
18
|
-
# Jobs and background execution
|
|
19
|
-
require_relative "aidp/jobs/background_runner"
|
|
20
|
-
|
|
21
|
-
# CLI commands
|
|
22
|
-
require_relative "aidp/cli/jobs_command"
|
|
23
|
-
|
|
24
|
-
# Providers
|
|
25
|
-
require_relative "aidp/providers/base"
|
|
26
|
-
require_relative "aidp/providers/cursor"
|
|
27
|
-
require_relative "aidp/providers/anthropic"
|
|
28
|
-
require_relative "aidp/providers/gemini"
|
|
29
|
-
require_relative "aidp/providers/kilocode"
|
|
30
|
-
# Supervised providers removed - using direct execution model
|
|
31
|
-
require_relative "aidp/provider_manager"
|
|
32
|
-
|
|
33
|
-
# Simple file-based storage
|
|
34
|
-
require_relative "aidp/storage/json_storage"
|
|
35
|
-
require_relative "aidp/storage/csv_storage"
|
|
36
|
-
require_relative "aidp/storage/file_manager"
|
|
37
|
-
|
|
38
|
-
# Analyze mode (simplified - file-based storage only)
|
|
39
|
-
require_relative "aidp/analyze/json_file_storage"
|
|
40
|
-
require_relative "aidp/analyze/error_handler"
|
|
41
|
-
require_relative "aidp/analyze/ruby_maat_integration"
|
|
42
|
-
require_relative "aidp/analyze/runner"
|
|
43
|
-
require_relative "aidp/analyze/steps"
|
|
44
|
-
require_relative "aidp/analyze/progress"
|
|
45
|
-
|
|
46
|
-
# Tree-sitter analysis
|
|
47
|
-
require_relative "aidp/analyze/tree_sitter_grammar_loader"
|
|
48
|
-
require_relative "aidp/analyze/seams"
|
|
49
|
-
require_relative "aidp/analyze/tree_sitter_scan"
|
|
50
|
-
require_relative "aidp/analyze/kb_inspector"
|
|
51
|
-
|
|
52
|
-
# Metadata system
|
|
53
|
-
require_relative "aidp/metadata/tool_metadata"
|
|
54
|
-
require_relative "aidp/metadata/validator"
|
|
55
|
-
require_relative "aidp/metadata/parser"
|
|
56
|
-
require_relative "aidp/metadata/scanner"
|
|
57
|
-
require_relative "aidp/metadata/compiler"
|
|
58
|
-
require_relative "aidp/metadata/query"
|
|
59
|
-
require_relative "aidp/metadata/cache"
|
|
60
|
-
|
|
61
|
-
# Workflows
|
|
62
|
-
require_relative "aidp/workflows/definitions"
|
|
63
|
-
require_relative "aidp/workflows/selector"
|
|
64
|
-
|
|
65
|
-
# Execute mode
|
|
66
|
-
require_relative "aidp/execute/steps"
|
|
67
|
-
require_relative "aidp/execute/runner"
|
|
68
|
-
require_relative "aidp/execute/progress"
|
|
69
|
-
require_relative "aidp/execute/checkpoint"
|
|
70
|
-
require_relative "aidp/execute/checkpoint_display"
|
|
71
|
-
require_relative "aidp/execute/work_loop_state"
|
|
72
|
-
require_relative "aidp/execute/instruction_queue"
|
|
73
|
-
require_relative "aidp/execute/persistent_tasklist"
|
|
74
|
-
require_relative "aidp/execute/async_work_loop_runner"
|
|
75
|
-
require_relative "aidp/execute/interactive_repl"
|
|
76
|
-
|
|
77
|
-
# Logging
|
|
10
|
+
require_relative "aidp/core_ext/class_attribute"
|
|
78
11
|
require_relative "aidp/logger"
|
|
79
12
|
|
|
80
|
-
#
|
|
81
|
-
require_relative "aidp/
|
|
82
|
-
require_relative "aidp/daemon/runner"
|
|
83
|
-
|
|
84
|
-
# Workstream/worktree management
|
|
85
|
-
require_relative "aidp/worktree"
|
|
86
|
-
require_relative "aidp/workstream_state"
|
|
87
|
-
require_relative "aidp/workstream_executor"
|
|
13
|
+
# Now set up Zeitwerk autoloader for the rest of the codebase
|
|
14
|
+
require_relative "aidp/loader"
|
|
88
15
|
|
|
89
|
-
#
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
require_relative "aidp/harness/config_manager"
|
|
95
|
-
require_relative "aidp/harness/ruby_llm_registry"
|
|
96
|
-
require_relative "aidp/harness/model_registry"
|
|
97
|
-
require_relative "aidp/harness/condition_detector"
|
|
98
|
-
require_relative "aidp/harness/user_interface"
|
|
99
|
-
require_relative "aidp/harness/simple_user_interface"
|
|
100
|
-
require_relative "aidp/harness/provider_manager"
|
|
101
|
-
require_relative "aidp/harness/provider_config"
|
|
102
|
-
require_relative "aidp/harness/provider_factory"
|
|
103
|
-
require_relative "aidp/harness/state_manager"
|
|
104
|
-
require_relative "aidp/harness/error_handler"
|
|
105
|
-
require_relative "aidp/harness/status_display"
|
|
106
|
-
require_relative "aidp/harness/runner"
|
|
107
|
-
require_relative "aidp/harness/filter_strategy"
|
|
108
|
-
require_relative "aidp/harness/generic_filter_strategy"
|
|
109
|
-
require_relative "aidp/harness/rspec_filter_strategy"
|
|
110
|
-
require_relative "aidp/harness/output_filter"
|
|
16
|
+
# Configure Zeitwerk based on environment
|
|
17
|
+
# In watch mode or development, enable reloading for hot code updates
|
|
18
|
+
# In production, disable reloading and eager load for performance
|
|
19
|
+
reloading_enabled = ENV["AIDP_ENABLE_RELOADING"] == "1" ||
|
|
20
|
+
ENV["AIDP_WATCH_MODE"] == "1"
|
|
111
21
|
|
|
112
|
-
|
|
113
|
-
|
|
22
|
+
Aidp::Loader.setup(
|
|
23
|
+
enable_reloading: reloading_enabled,
|
|
24
|
+
eager_load: !reloading_enabled && ENV["AIDP_EAGER_LOAD"] == "1"
|
|
25
|
+
)
|
|
114
26
|
|
|
115
|
-
#
|
|
27
|
+
# Manually require files that contain multiple constants (not autoloadable by Zeitwerk)
|
|
28
|
+
require_relative "aidp/errors"
|
|
29
|
+
require_relative "aidp/auto_update/errors"
|
|
30
|
+
require_relative "aidp/harness/state/errors"
|
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.
|
|
4
|
+
version: 0.33.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Bart Agapinan
|
|
@@ -52,61 +52,89 @@ dependencies:
|
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: '1.5'
|
|
54
54
|
- !ruby/object:Gem::Dependency
|
|
55
|
-
name:
|
|
55
|
+
name: ostruct
|
|
56
56
|
requirement: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - "~>"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '
|
|
60
|
+
version: '0.6'
|
|
61
61
|
type: :runtime
|
|
62
62
|
prerelease: false
|
|
63
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - "~>"
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '
|
|
67
|
+
version: '0.6'
|
|
68
68
|
- !ruby/object:Gem::Dependency
|
|
69
|
-
name:
|
|
69
|
+
name: pastel
|
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '0.
|
|
74
|
+
version: '0.8'
|
|
75
75
|
type: :runtime
|
|
76
76
|
prerelease: false
|
|
77
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
79
|
- - "~>"
|
|
80
80
|
- !ruby/object:Gem::Version
|
|
81
|
-
version: '0.
|
|
81
|
+
version: '0.8'
|
|
82
82
|
- !ruby/object:Gem::Dependency
|
|
83
|
-
name:
|
|
83
|
+
name: ruby_llm
|
|
84
84
|
requirement: !ruby/object:Gem::Requirement
|
|
85
85
|
requirements:
|
|
86
86
|
- - "~>"
|
|
87
87
|
- !ruby/object:Gem::Version
|
|
88
|
-
version: '
|
|
88
|
+
version: '1.9'
|
|
89
89
|
type: :runtime
|
|
90
90
|
prerelease: false
|
|
91
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
92
92
|
requirements:
|
|
93
93
|
- - "~>"
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: '
|
|
95
|
+
version: '1.9'
|
|
96
96
|
- !ruby/object:Gem::Dependency
|
|
97
|
-
name:
|
|
97
|
+
name: ruby_tree_sitter
|
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|
|
99
99
|
requirements:
|
|
100
100
|
- - "~>"
|
|
101
101
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: '0
|
|
102
|
+
version: '2.0'
|
|
103
103
|
type: :runtime
|
|
104
104
|
prerelease: false
|
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
106
106
|
requirements:
|
|
107
107
|
- - "~>"
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: '0
|
|
109
|
+
version: '2.0'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: thor
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - "~>"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '1.3'
|
|
117
|
+
type: :runtime
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - "~>"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '1.3'
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: zeitwerk
|
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - "~>"
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '2.7'
|
|
131
|
+
type: :runtime
|
|
132
|
+
prerelease: false
|
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - "~>"
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '2.7'
|
|
110
138
|
- !ruby/object:Gem::Dependency
|
|
111
139
|
name: tty-box
|
|
112
140
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -122,47 +150,47 @@ dependencies:
|
|
|
122
150
|
- !ruby/object:Gem::Version
|
|
123
151
|
version: '0.7'
|
|
124
152
|
- !ruby/object:Gem::Dependency
|
|
125
|
-
name: tty-
|
|
153
|
+
name: tty-command
|
|
126
154
|
requirement: !ruby/object:Gem::Requirement
|
|
127
155
|
requirements:
|
|
128
156
|
- - "~>"
|
|
129
157
|
- !ruby/object:Gem::Version
|
|
130
|
-
version: '0.
|
|
158
|
+
version: '0.10'
|
|
131
159
|
type: :runtime
|
|
132
160
|
prerelease: false
|
|
133
161
|
version_requirements: !ruby/object:Gem::Requirement
|
|
134
162
|
requirements:
|
|
135
163
|
- - "~>"
|
|
136
164
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: '0.
|
|
165
|
+
version: '0.10'
|
|
138
166
|
- !ruby/object:Gem::Dependency
|
|
139
|
-
name: tty-
|
|
167
|
+
name: tty-cursor
|
|
140
168
|
requirement: !ruby/object:Gem::Requirement
|
|
141
169
|
requirements:
|
|
142
170
|
- - "~>"
|
|
143
171
|
- !ruby/object:Gem::Version
|
|
144
|
-
version: '0.
|
|
172
|
+
version: '0.7'
|
|
145
173
|
type: :runtime
|
|
146
174
|
prerelease: false
|
|
147
175
|
version_requirements: !ruby/object:Gem::Requirement
|
|
148
176
|
requirements:
|
|
149
177
|
- - "~>"
|
|
150
178
|
- !ruby/object:Gem::Version
|
|
151
|
-
version: '0.
|
|
179
|
+
version: '0.7'
|
|
152
180
|
- !ruby/object:Gem::Dependency
|
|
153
|
-
name: tty-
|
|
181
|
+
name: tty-progressbar
|
|
154
182
|
requirement: !ruby/object:Gem::Requirement
|
|
155
183
|
requirements:
|
|
156
184
|
- - "~>"
|
|
157
185
|
- !ruby/object:Gem::Version
|
|
158
|
-
version: '0.
|
|
186
|
+
version: '0.18'
|
|
159
187
|
type: :runtime
|
|
160
188
|
prerelease: false
|
|
161
189
|
version_requirements: !ruby/object:Gem::Requirement
|
|
162
190
|
requirements:
|
|
163
191
|
- - "~>"
|
|
164
192
|
- !ruby/object:Gem::Version
|
|
165
|
-
version: '0.
|
|
193
|
+
version: '0.18'
|
|
166
194
|
- !ruby/object:Gem::Dependency
|
|
167
195
|
name: tty-prompt
|
|
168
196
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -178,66 +206,66 @@ dependencies:
|
|
|
178
206
|
- !ruby/object:Gem::Version
|
|
179
207
|
version: '0.23'
|
|
180
208
|
- !ruby/object:Gem::Dependency
|
|
181
|
-
name:
|
|
209
|
+
name: tty-reader
|
|
182
210
|
requirement: !ruby/object:Gem::Requirement
|
|
183
211
|
requirements:
|
|
184
212
|
- - "~>"
|
|
185
213
|
- !ruby/object:Gem::Version
|
|
186
|
-
version: '0.
|
|
214
|
+
version: '0.9'
|
|
187
215
|
type: :runtime
|
|
188
216
|
prerelease: false
|
|
189
217
|
version_requirements: !ruby/object:Gem::Requirement
|
|
190
218
|
requirements:
|
|
191
219
|
- - "~>"
|
|
192
220
|
- !ruby/object:Gem::Version
|
|
193
|
-
version: '0.
|
|
221
|
+
version: '0.9'
|
|
194
222
|
- !ruby/object:Gem::Dependency
|
|
195
|
-
name:
|
|
223
|
+
name: tty-screen
|
|
196
224
|
requirement: !ruby/object:Gem::Requirement
|
|
197
225
|
requirements:
|
|
198
226
|
- - "~>"
|
|
199
227
|
- !ruby/object:Gem::Version
|
|
200
|
-
version: '
|
|
228
|
+
version: '0.8'
|
|
201
229
|
type: :runtime
|
|
202
230
|
prerelease: false
|
|
203
231
|
version_requirements: !ruby/object:Gem::Requirement
|
|
204
232
|
requirements:
|
|
205
233
|
- - "~>"
|
|
206
234
|
- !ruby/object:Gem::Version
|
|
207
|
-
version: '
|
|
235
|
+
version: '0.8'
|
|
208
236
|
- !ruby/object:Gem::Dependency
|
|
209
|
-
name: tty-
|
|
237
|
+
name: tty-spinner
|
|
210
238
|
requirement: !ruby/object:Gem::Requirement
|
|
211
239
|
requirements:
|
|
212
240
|
- - "~>"
|
|
213
241
|
- !ruby/object:Gem::Version
|
|
214
|
-
version: '0.
|
|
242
|
+
version: '0.9'
|
|
215
243
|
type: :runtime
|
|
216
244
|
prerelease: false
|
|
217
245
|
version_requirements: !ruby/object:Gem::Requirement
|
|
218
246
|
requirements:
|
|
219
247
|
- - "~>"
|
|
220
248
|
- !ruby/object:Gem::Version
|
|
221
|
-
version: '0.
|
|
249
|
+
version: '0.9'
|
|
222
250
|
- !ruby/object:Gem::Dependency
|
|
223
|
-
name:
|
|
251
|
+
name: tty-table
|
|
224
252
|
requirement: !ruby/object:Gem::Requirement
|
|
225
253
|
requirements:
|
|
226
254
|
- - "~>"
|
|
227
255
|
- !ruby/object:Gem::Version
|
|
228
|
-
version: '
|
|
256
|
+
version: '0.12'
|
|
229
257
|
type: :runtime
|
|
230
258
|
prerelease: false
|
|
231
259
|
version_requirements: !ruby/object:Gem::Requirement
|
|
232
260
|
requirements:
|
|
233
261
|
- - "~>"
|
|
234
262
|
- !ruby/object:Gem::Version
|
|
235
|
-
version: '
|
|
263
|
+
version: '0.12'
|
|
236
264
|
description: The AI-Dev-Pipeline (AIDP) CLI provides a powerful, markdown-driven workflow
|
|
237
265
|
for software development. It supports in-depth project analysis to understand existing
|
|
238
266
|
codebases and an execution mode to systematically implement new features.
|
|
239
267
|
email:
|
|
240
|
-
- bart@sonic.
|
|
268
|
+
- bart@sonic.net
|
|
241
269
|
executables:
|
|
242
270
|
- aidp
|
|
243
271
|
extensions: []
|
|
@@ -284,12 +312,13 @@ files:
|
|
|
284
312
|
- lib/aidp/cli/providers_command.rb
|
|
285
313
|
- lib/aidp/cli/terminal_io.rb
|
|
286
314
|
- lib/aidp/cli/tools_command.rb
|
|
315
|
+
- lib/aidp/comment_consolidator.rb
|
|
287
316
|
- lib/aidp/concurrency.rb
|
|
288
317
|
- lib/aidp/concurrency/backoff.rb
|
|
289
318
|
- lib/aidp/concurrency/exec.rb
|
|
290
319
|
- lib/aidp/concurrency/wait.rb
|
|
291
320
|
- lib/aidp/config.rb
|
|
292
|
-
- lib/aidp/
|
|
321
|
+
- lib/aidp/config_paths.rb
|
|
293
322
|
- lib/aidp/core_ext/class_attribute.rb
|
|
294
323
|
- lib/aidp/daemon/process_manager.rb
|
|
295
324
|
- lib/aidp/daemon/runner.rb
|
|
@@ -316,6 +345,7 @@ files:
|
|
|
316
345
|
- lib/aidp/execute/workflow_selector.rb
|
|
317
346
|
- lib/aidp/firewall/provider_requirements_collector.rb
|
|
318
347
|
- lib/aidp/harness/ai_decision_engine.rb
|
|
348
|
+
- lib/aidp/harness/ai_filter_factory.rb
|
|
319
349
|
- lib/aidp/harness/capability_registry.rb
|
|
320
350
|
- lib/aidp/harness/completion_checker.rb
|
|
321
351
|
- lib/aidp/harness/condition_detector.rb
|
|
@@ -327,11 +357,14 @@ files:
|
|
|
327
357
|
- lib/aidp/harness/deprecation_cache.rb
|
|
328
358
|
- lib/aidp/harness/enhanced_runner.rb
|
|
329
359
|
- lib/aidp/harness/error_handler.rb
|
|
360
|
+
- lib/aidp/harness/filter_definition.rb
|
|
330
361
|
- lib/aidp/harness/filter_strategy.rb
|
|
362
|
+
- lib/aidp/harness/generated_filter_strategy.rb
|
|
331
363
|
- lib/aidp/harness/generic_filter_strategy.rb
|
|
332
364
|
- lib/aidp/harness/model_cache.rb
|
|
333
365
|
- lib/aidp/harness/model_registry.rb
|
|
334
366
|
- lib/aidp/harness/output_filter.rb
|
|
367
|
+
- lib/aidp/harness/output_filter_config.rb
|
|
335
368
|
- lib/aidp/harness/provider_config.rb
|
|
336
369
|
- lib/aidp/harness/provider_factory.rb
|
|
337
370
|
- lib/aidp/harness/provider_info.rb
|
|
@@ -379,8 +412,10 @@ files:
|
|
|
379
412
|
- lib/aidp/init/project_analyzer.rb
|
|
380
413
|
- lib/aidp/init/runner.rb
|
|
381
414
|
- lib/aidp/jobs/background_runner.rb
|
|
415
|
+
- lib/aidp/loader.rb
|
|
382
416
|
- lib/aidp/logger.rb
|
|
383
417
|
- lib/aidp/message_display.rb
|
|
418
|
+
- lib/aidp/metadata.rb
|
|
384
419
|
- lib/aidp/metadata/cache.rb
|
|
385
420
|
- lib/aidp/metadata/compiler.rb
|
|
386
421
|
- lib/aidp/metadata/parser.rb
|
|
@@ -445,6 +480,7 @@ files:
|
|
|
445
480
|
- lib/aidp/storage/csv_storage.rb
|
|
446
481
|
- lib/aidp/storage/file_manager.rb
|
|
447
482
|
- lib/aidp/storage/json_storage.rb
|
|
483
|
+
- lib/aidp/style_guide/selector.rb
|
|
448
484
|
- lib/aidp/tooling_detector.rb
|
|
449
485
|
- lib/aidp/util.rb
|
|
450
486
|
- lib/aidp/utils/devcontainer_detector.rb
|
data/lib/aidp/config/paths.rb
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "fileutils"
|
|
4
|
-
|
|
5
|
-
module Aidp
|
|
6
|
-
# Centralized path management for all AIDP internal files
|
|
7
|
-
# Ensures consistent file locations and prevents path-related bugs
|
|
8
|
-
module ConfigPaths
|
|
9
|
-
# Get the main AIDP directory for a project
|
|
10
|
-
def self.aidp_dir(project_dir = Dir.pwd)
|
|
11
|
-
File.join(project_dir, ".aidp")
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# Get the main configuration file path
|
|
15
|
-
def self.config_file(project_dir = Dir.pwd)
|
|
16
|
-
File.join(aidp_dir(project_dir), "aidp.yml")
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# Get the configuration directory path
|
|
20
|
-
def self.config_dir(project_dir = Dir.pwd)
|
|
21
|
-
aidp_dir(project_dir)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Get the progress directory path
|
|
25
|
-
def self.progress_dir(project_dir = Dir.pwd)
|
|
26
|
-
File.join(aidp_dir(project_dir), "progress")
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Get the execute progress file path
|
|
30
|
-
def self.execute_progress_file(project_dir = Dir.pwd)
|
|
31
|
-
File.join(progress_dir(project_dir), "execute.yml")
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Get the analyze progress file path
|
|
35
|
-
def self.analyze_progress_file(project_dir = Dir.pwd)
|
|
36
|
-
File.join(progress_dir(project_dir), "analyze.yml")
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Get the harness state directory path
|
|
40
|
-
def self.harness_state_dir(project_dir = Dir.pwd)
|
|
41
|
-
File.join(aidp_dir(project_dir), "harness")
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
# Get the harness state file path for a specific mode
|
|
45
|
-
def self.harness_state_file(mode, project_dir = Dir.pwd)
|
|
46
|
-
File.join(harness_state_dir(project_dir), "#{mode}_state.json")
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Get the providers directory path
|
|
50
|
-
def self.providers_dir(project_dir = Dir.pwd)
|
|
51
|
-
File.join(aidp_dir(project_dir), "providers")
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Get the provider info file path
|
|
55
|
-
def self.provider_info_file(provider_name, project_dir = Dir.pwd)
|
|
56
|
-
File.join(providers_dir(project_dir), "#{provider_name}_info.yml")
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# Get the jobs directory path
|
|
60
|
-
def self.jobs_dir(project_dir = Dir.pwd)
|
|
61
|
-
File.join(aidp_dir(project_dir), "jobs")
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
# Get the checkpoint file path
|
|
65
|
-
def self.checkpoint_file(project_dir = Dir.pwd)
|
|
66
|
-
File.join(aidp_dir(project_dir), "checkpoint.yml")
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
# Get the checkpoint history file path
|
|
70
|
-
def self.checkpoint_history_file(project_dir = Dir.pwd)
|
|
71
|
-
File.join(aidp_dir(project_dir), "checkpoint_history.jsonl")
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# Get the JSON storage directory path
|
|
75
|
-
def self.json_storage_dir(project_dir = Dir.pwd)
|
|
76
|
-
File.join(aidp_dir(project_dir), "json")
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
# Check if the main configuration file exists
|
|
80
|
-
def self.config_exists?(project_dir = Dir.pwd)
|
|
81
|
-
File.exist?(config_file(project_dir))
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# Ensure the main AIDP directory exists
|
|
85
|
-
def self.ensure_aidp_dir(project_dir = Dir.pwd)
|
|
86
|
-
dir = aidp_dir(project_dir)
|
|
87
|
-
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
|
88
|
-
dir
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
# Ensure the configuration directory exists
|
|
92
|
-
def self.ensure_config_dir(project_dir = Dir.pwd)
|
|
93
|
-
ensure_aidp_dir(project_dir)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
# Ensure the progress directory exists
|
|
97
|
-
def self.ensure_progress_dir(project_dir = Dir.pwd)
|
|
98
|
-
dir = progress_dir(project_dir)
|
|
99
|
-
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
|
100
|
-
dir
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
# Ensure the harness state directory exists
|
|
104
|
-
def self.ensure_harness_state_dir(project_dir = Dir.pwd)
|
|
105
|
-
dir = harness_state_dir(project_dir)
|
|
106
|
-
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
|
107
|
-
dir
|
|
108
|
-
end
|
|
109
|
-
|
|
110
|
-
# Ensure the providers directory exists
|
|
111
|
-
def self.ensure_providers_dir(project_dir = Dir.pwd)
|
|
112
|
-
dir = providers_dir(project_dir)
|
|
113
|
-
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
|
114
|
-
dir
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Ensure the jobs directory exists
|
|
118
|
-
def self.ensure_jobs_dir(project_dir = Dir.pwd)
|
|
119
|
-
dir = jobs_dir(project_dir)
|
|
120
|
-
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
|
121
|
-
dir
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
# Ensure the JSON storage directory exists
|
|
125
|
-
def self.ensure_json_storage_dir(project_dir = Dir.pwd)
|
|
126
|
-
dir = json_storage_dir(project_dir)
|
|
127
|
-
FileUtils.mkdir_p(dir) unless Dir.exist?(dir)
|
|
128
|
-
dir
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|