ace-herdr 0.1.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 (39) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/herdr/config.yml +26 -0
  3. data/.ace-defaults/herdr/tabs/agent.yml +11 -0
  4. data/.ace-defaults/herdr/workspaces/development.yml +23 -0
  5. data/CHANGELOG.md +22 -0
  6. data/LICENSE +21 -0
  7. data/README.md +54 -0
  8. data/Rakefile +12 -0
  9. data/docs/usage.md +306 -0
  10. data/exe/ace-herdr +17 -0
  11. data/lib/ace/herdr/atoms/answer_digest.rb +18 -0
  12. data/lib/ace/herdr/cli/commands/capture.rb +55 -0
  13. data/lib/ace/herdr/cli/commands/close.rb +53 -0
  14. data/lib/ace/herdr/cli/commands/deliver.rb +67 -0
  15. data/lib/ace/herdr/cli/commands/dispatch.rb +62 -0
  16. data/lib/ace/herdr/cli/commands/list.rb +71 -0
  17. data/lib/ace/herdr/cli/commands/list_presets.rb +47 -0
  18. data/lib/ace/herdr/cli/commands/send.rb +103 -0
  19. data/lib/ace/herdr/cli/commands/support.rb +68 -0
  20. data/lib/ace/herdr/cli/commands/tab.rb +54 -0
  21. data/lib/ace/herdr/cli/commands/tidy.rb +65 -0
  22. data/lib/ace/herdr/cli/commands/wait.rb +88 -0
  23. data/lib/ace/herdr/cli/commands/workspace.rb +52 -0
  24. data/lib/ace/herdr/cli.rb +98 -0
  25. data/lib/ace/herdr/errors.rb +51 -0
  26. data/lib/ace/herdr/models/delivery_record.rb +109 -0
  27. data/lib/ace/herdr/models/dispatch_outcome.rb +29 -0
  28. data/lib/ace/herdr/molecules/delivery_record_store.rb +150 -0
  29. data/lib/ace/herdr/molecules/herdr_executor.rb +264 -0
  30. data/lib/ace/herdr/molecules/pane_tidy_probe.rb +80 -0
  31. data/lib/ace/herdr/molecules/preset_loader.rb +70 -0
  32. data/lib/ace/herdr/molecules/preset_resolver.rb +88 -0
  33. data/lib/ace/herdr/organisms/control_surface.rb +575 -0
  34. data/lib/ace/herdr/organisms/deliverer.rb +358 -0
  35. data/lib/ace/herdr/organisms/dispatcher.rb +130 -0
  36. data/lib/ace/herdr/organisms/tidy.rb +188 -0
  37. data/lib/ace/herdr/version.rb +7 -0
  38. data/lib/ace/herdr.rb +103 -0
  39. metadata +224 -0
data/lib/ace/herdr.rb ADDED
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "herdr/version"
4
+ require "ace/support/config"
5
+
6
+ module Ace
7
+ module Herdr
8
+ class Error < StandardError; end
9
+
10
+ # Raised when the caller's herdr workspace/session/pane cannot be resolved
11
+ class TargetResolutionError < Error; end
12
+
13
+ # Raised when arguments or refs fail validation
14
+ class ValidationError < Error; end
15
+
16
+ # Raised when a bounded wait exceeds its timeout
17
+ class WaitTimeoutError < Error; end
18
+ end
19
+ end
20
+
21
+ # Executor error hierarchy (subclasses Ace::Herdr::Error)
22
+ require_relative "herdr/errors"
23
+
24
+ # Load all ace-herdr components
25
+ require_relative "herdr/atoms/answer_digest"
26
+ require_relative "herdr/models/delivery_record"
27
+ require_relative "herdr/models/dispatch_outcome"
28
+ require_relative "herdr/molecules/herdr_executor"
29
+ require_relative "herdr/molecules/pane_tidy_probe"
30
+ require_relative "herdr/molecules/delivery_record_store"
31
+ require_relative "herdr/molecules/preset_loader"
32
+ require_relative "herdr/molecules/preset_resolver"
33
+ require_relative "herdr/organisms/deliverer"
34
+ require_relative "herdr/organisms/dispatcher"
35
+ require_relative "herdr/organisms/control_surface"
36
+ require_relative "herdr/organisms/tidy"
37
+ require_relative "herdr/cli"
38
+
39
+ module Ace
40
+ module Herdr
41
+ # Returns the gem root directory
42
+ # @return [String] Path to the gem root directory
43
+ def self.gem_root
44
+ @gem_root ||= Gem.loaded_specs["ace-herdr"]&.gem_dir ||
45
+ File.expand_path("../..", __dir__)
46
+ end
47
+
48
+ # Check if debug mode is enabled
49
+ # @return [Boolean]
50
+ def self.debug?
51
+ ENV["ACE_DEBUG"] == "1" || ENV["DEBUG"] == "1"
52
+ end
53
+
54
+ # Load ace-herdr configuration using ace-config cascade
55
+ # Thread-safe: uses mutex for initialization
56
+ # @return [Hash] Merged configuration hash with defaults
57
+ def self.config
58
+ return @config if defined?(@config) && @config
59
+
60
+ @config_mutex.synchronize do
61
+ @config ||= load_config
62
+ end
63
+ end
64
+
65
+ # Reset config cache (useful for testing)
66
+ def self.reset_config!
67
+ @config_mutex.synchronize do
68
+ @config = nil
69
+ end
70
+ end
71
+
72
+ @config_mutex = Mutex.new
73
+
74
+ # Load configuration using Ace::Support::Config cascade
75
+ # @return [Hash] Merged configuration
76
+ def self.load_config
77
+ resolver = Ace::Support::Config.create(
78
+ config_dir: ".ace",
79
+ defaults_dir: ".ace-defaults",
80
+ gem_path: gem_root
81
+ )
82
+
83
+ resolver.resolve_namespace("herdr").data
84
+ rescue => e
85
+ warn "ace-herdr: Could not load config: #{e.class} - #{e.message}" if debug?
86
+ load_gem_defaults_fallback
87
+ end
88
+ private_class_method :load_config
89
+
90
+ # Load gem defaults directly as fallback
91
+ # @return [Hash] Defaults hash or empty hash
92
+ def self.load_gem_defaults_fallback
93
+ defaults_path = File.join(gem_root, ".ace-defaults", "herdr", "config.yml")
94
+ return {} unless File.exist?(defaults_path)
95
+
96
+ require "yaml"
97
+ YAML.safe_load_file(defaults_path, permitted_classes: [Date], aliases: true) || {}
98
+ rescue
99
+ {}
100
+ end
101
+ private_class_method :load_gem_defaults_fallback
102
+ end
103
+ end
metadata ADDED
@@ -0,0 +1,224 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ace-herdr
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Michal Czyz
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 2026-09-28 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: ace-hitl
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.10'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.10'
26
+ - !ruby/object:Gem::Dependency
27
+ name: ace-support-cli
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.6'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.6'
40
+ - !ruby/object:Gem::Dependency
41
+ name: ace-support-core
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.31'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.31'
54
+ - !ruby/object:Gem::Dependency
55
+ name: ace-support-config
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '0.18'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.18'
68
+ - !ruby/object:Gem::Dependency
69
+ name: ace-support-test-helpers
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.14'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.14'
82
+ - !ruby/object:Gem::Dependency
83
+ name: bundler
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '2.0'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '2.0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: minitest
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '5.0'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '5.0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rake
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '13.0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '13.0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: rubocop
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.88'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '1.88'
138
+ - !ruby/object:Gem::Dependency
139
+ name: simplecov
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.22'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.22'
152
+ description: 'Push delivery and agent bootstrap for the Herdr runtime: deliver(ref,
153
+ answer) -> herdr agent prompt <pane>, bootstrap missing agents, and dispatch agents
154
+ with deterministic defaults. Implements the ace-hitl provider delivery contract.'
155
+ email:
156
+ - mc@cs3b.com
157
+ executables:
158
+ - ace-herdr
159
+ extensions: []
160
+ extra_rdoc_files: []
161
+ files:
162
+ - ".ace-defaults/herdr/config.yml"
163
+ - ".ace-defaults/herdr/tabs/agent.yml"
164
+ - ".ace-defaults/herdr/workspaces/development.yml"
165
+ - CHANGELOG.md
166
+ - LICENSE
167
+ - README.md
168
+ - Rakefile
169
+ - docs/usage.md
170
+ - exe/ace-herdr
171
+ - lib/ace/herdr.rb
172
+ - lib/ace/herdr/atoms/answer_digest.rb
173
+ - lib/ace/herdr/cli.rb
174
+ - lib/ace/herdr/cli/commands/capture.rb
175
+ - lib/ace/herdr/cli/commands/close.rb
176
+ - lib/ace/herdr/cli/commands/deliver.rb
177
+ - lib/ace/herdr/cli/commands/dispatch.rb
178
+ - lib/ace/herdr/cli/commands/list.rb
179
+ - lib/ace/herdr/cli/commands/list_presets.rb
180
+ - lib/ace/herdr/cli/commands/send.rb
181
+ - lib/ace/herdr/cli/commands/support.rb
182
+ - lib/ace/herdr/cli/commands/tab.rb
183
+ - lib/ace/herdr/cli/commands/tidy.rb
184
+ - lib/ace/herdr/cli/commands/wait.rb
185
+ - lib/ace/herdr/cli/commands/workspace.rb
186
+ - lib/ace/herdr/errors.rb
187
+ - lib/ace/herdr/models/delivery_record.rb
188
+ - lib/ace/herdr/models/dispatch_outcome.rb
189
+ - lib/ace/herdr/molecules/delivery_record_store.rb
190
+ - lib/ace/herdr/molecules/herdr_executor.rb
191
+ - lib/ace/herdr/molecules/pane_tidy_probe.rb
192
+ - lib/ace/herdr/molecules/preset_loader.rb
193
+ - lib/ace/herdr/molecules/preset_resolver.rb
194
+ - lib/ace/herdr/organisms/control_surface.rb
195
+ - lib/ace/herdr/organisms/deliverer.rb
196
+ - lib/ace/herdr/organisms/dispatcher.rb
197
+ - lib/ace/herdr/organisms/tidy.rb
198
+ - lib/ace/herdr/version.rb
199
+ homepage: https://github.com/cs3b/ace
200
+ licenses:
201
+ - MIT
202
+ metadata:
203
+ allowed_push_host: https://rubygems.org
204
+ homepage_uri: https://github.com/cs3b/ace
205
+ source_code_uri: https://github.com/cs3b/ace/tree/main/ace-herdr/
206
+ changelog_uri: https://github.com/cs3b/ace/blob/main/ace-herdr/CHANGELOG.md
207
+ rdoc_options: []
208
+ require_paths:
209
+ - lib
210
+ required_ruby_version: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: 3.2.0
215
+ required_rubygems_version: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - ">="
218
+ - !ruby/object:Gem::Version
219
+ version: '0'
220
+ requirements: []
221
+ rubygems_version: 3.6.9
222
+ specification_version: 4
223
+ summary: Zero-token ergonomic wrapper over the herdr CLI for agent panes
224
+ test_files: []