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.
- checksums.yaml +7 -0
- data/.ace-defaults/herdr/config.yml +26 -0
- data/.ace-defaults/herdr/tabs/agent.yml +11 -0
- data/.ace-defaults/herdr/workspaces/development.yml +23 -0
- data/CHANGELOG.md +22 -0
- data/LICENSE +21 -0
- data/README.md +54 -0
- data/Rakefile +12 -0
- data/docs/usage.md +306 -0
- data/exe/ace-herdr +17 -0
- data/lib/ace/herdr/atoms/answer_digest.rb +18 -0
- data/lib/ace/herdr/cli/commands/capture.rb +55 -0
- data/lib/ace/herdr/cli/commands/close.rb +53 -0
- data/lib/ace/herdr/cli/commands/deliver.rb +67 -0
- data/lib/ace/herdr/cli/commands/dispatch.rb +62 -0
- data/lib/ace/herdr/cli/commands/list.rb +71 -0
- data/lib/ace/herdr/cli/commands/list_presets.rb +47 -0
- data/lib/ace/herdr/cli/commands/send.rb +103 -0
- data/lib/ace/herdr/cli/commands/support.rb +68 -0
- data/lib/ace/herdr/cli/commands/tab.rb +54 -0
- data/lib/ace/herdr/cli/commands/tidy.rb +65 -0
- data/lib/ace/herdr/cli/commands/wait.rb +88 -0
- data/lib/ace/herdr/cli/commands/workspace.rb +52 -0
- data/lib/ace/herdr/cli.rb +98 -0
- data/lib/ace/herdr/errors.rb +51 -0
- data/lib/ace/herdr/models/delivery_record.rb +109 -0
- data/lib/ace/herdr/models/dispatch_outcome.rb +29 -0
- data/lib/ace/herdr/molecules/delivery_record_store.rb +150 -0
- data/lib/ace/herdr/molecules/herdr_executor.rb +264 -0
- data/lib/ace/herdr/molecules/pane_tidy_probe.rb +80 -0
- data/lib/ace/herdr/molecules/preset_loader.rb +70 -0
- data/lib/ace/herdr/molecules/preset_resolver.rb +88 -0
- data/lib/ace/herdr/organisms/control_surface.rb +575 -0
- data/lib/ace/herdr/organisms/deliverer.rb +358 -0
- data/lib/ace/herdr/organisms/dispatcher.rb +130 -0
- data/lib/ace/herdr/organisms/tidy.rb +188 -0
- data/lib/ace/herdr/version.rb +7 -0
- data/lib/ace/herdr.rb +103 -0
- 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: []
|