ace-overseer 0.25.0 → 0.26.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/CHANGELOG.md +11 -0
- data/README.md +11 -0
- data/lib/ace/overseer/cli/commands/handoff.rb +1 -1
- data/lib/ace/overseer/cli/commands/observe.rb +24 -0
- data/lib/ace/overseer/cli.rb +3 -0
- data/lib/ace/overseer/molecules/event_observation.rb +33 -0
- data/lib/ace/overseer/organisms/report_processor.rb +1 -1
- data/lib/ace/overseer/version.rb +1 -1
- metadata +28 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 105fc700308987490a9f933ca8ce93eb6ce73a1322bd1892df9d7c7aaf94dd9f
|
|
4
|
+
data.tar.gz: 14574baa5c684cc096927171dbdae1fc2a3070939ad3160c1ace410c2304eae6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 66ee73e26f7a17d4d090d86e12b24e93292cefbddd44d11eb445297a2dab4e9f37a691b2aabc74e528d6715737046be4fd7296aa5a21cceaff97d8922807adbd
|
|
7
|
+
data.tar.gz: 88e2d7c66ec0d186a872c1deca9a47a2e0d0da984f122465029f627b46642def5a45363cf436b3f50111e85cf4ac53fb41d8174ef47cfcf8443e8dee1c15edfc
|
data/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.26.0] - 2026-10-23
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Expose canonical report observation and adoption filtering for event-driven continuation without creating another state owner.
|
|
15
|
+
|
|
16
|
+
## [0.25.1] - 2026-10-20
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
- Preserve installed toolchain selection in next-role handoff commands.
|
|
20
|
+
|
|
10
21
|
|
|
11
22
|
## [0.25.0] - 2026-10-20
|
|
12
23
|
|
data/README.md
CHANGED
|
@@ -98,3 +98,14 @@ or create your own.
|
|
|
98
98
|
|
|
99
99
|
---
|
|
100
100
|
[Getting Started](docs/getting-started.md) | [Usage Guide](docs/usage.md) | [Handbook - Skills, Agents, Templates](docs/handbook.md) | Part of [ACE](https://github.com/cs3b/ace)
|
|
101
|
+
|
|
102
|
+
### Read-only event observation
|
|
103
|
+
|
|
104
|
+
`ace-overseer observe --owner self --scope all --limit 500` combines the HITL
|
|
105
|
+
owner's semantic incoming-event projection with canonical report adoption from
|
|
106
|
+
the existing private task tree. `self` must be a configured HITL recipient alias.
|
|
107
|
+
The JSON contains `events` requiring reconciliation and `settled` revisions whose
|
|
108
|
+
matched managing tree is fully terminal (including archived managers). Recorded
|
|
109
|
+
reports on active managers remain eligible: adoption does not prove continuation.
|
|
110
|
+
No report, task, assignment, worktree, process or external operation is mutated.
|
|
111
|
+
Pi eyes uses this view, then the agent uses normal `process-reports` gates.
|
|
@@ -56,7 +56,7 @@ module Ace
|
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
puts "Handoff ready. In the worktree terminal run:"
|
|
59
|
-
puts " ace-coworker start --config
|
|
59
|
+
puts " #{Ace::Support::Cli::Toolchain.shell_command("ace-coworker", "start", "--config", next_leg["start_config"])}"
|
|
60
60
|
rescue Ace::Support::Cli::Error
|
|
61
61
|
raise
|
|
62
62
|
rescue => e
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "json"
|
|
3
|
+
require_relative "../../molecules/event_observation"
|
|
4
|
+
module Ace
|
|
5
|
+
module Overseer
|
|
6
|
+
module CLI
|
|
7
|
+
module Commands
|
|
8
|
+
class Observe < Ace::Support::Cli::Command
|
|
9
|
+
desc "Read incoming semantic revisions requiring owner reconciliation; no effects"
|
|
10
|
+
option :owner, type: :string, required: true, desc: "Configured HITL recipient for this observer"
|
|
11
|
+
option :scope, type: :string, default: "current", desc: "current or all linked worktrees"
|
|
12
|
+
option :limit, type: :integer, default: 500, desc: "Maximum canonical events"
|
|
13
|
+
def call(owner:, scope: "current", limit: 500, **)
|
|
14
|
+
raise Ace::Support::Cli::Error, "invalid scope" unless %w[current all].include?(scope)
|
|
15
|
+
puts JSON.generate(Molecules::EventObservation.new.call(owner: owner, scope: scope, limit: limit))
|
|
16
|
+
rescue ArgumentError, Ace::Hitl::Molecules::HitlAddressResolver::UnknownRecipientError,
|
|
17
|
+
Ace::Hitl::Molecules::HitlAddressResolver::InvalidAddressError => e
|
|
18
|
+
raise Ace::Support::Cli::Error, e.message
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/lib/ace/overseer/cli.rb
CHANGED
|
@@ -6,6 +6,7 @@ require_relative "cli/commands/work_on"
|
|
|
6
6
|
require_relative "cli/commands/handoff"
|
|
7
7
|
require_relative "cli/commands/process_reports"
|
|
8
8
|
require_relative "cli/commands/status"
|
|
9
|
+
require_relative "cli/commands/observe"
|
|
9
10
|
require_relative "cli/commands/prune"
|
|
10
11
|
require_relative "cli/commands/projects"
|
|
11
12
|
require_relative "cli/commands/agents"
|
|
@@ -21,6 +22,7 @@ module Ace
|
|
|
21
22
|
["work-on", "Start local task work"],
|
|
22
23
|
["handoff", "Hand the task worktree to the next role"],
|
|
23
24
|
["process-reports", "Process ace-hitl reports and continue the queue"],
|
|
25
|
+
["observe", "Read semantic events needing reconciliation"],
|
|
24
26
|
["status", "Show status of task worktrees"],
|
|
25
27
|
["prune", "Remove stale task worktrees"],
|
|
26
28
|
["projects", "List visible public projects"],
|
|
@@ -38,6 +40,7 @@ module Ace
|
|
|
38
40
|
register "work-on", Commands::WorkOn
|
|
39
41
|
register "handoff", Commands::Handoff
|
|
40
42
|
register "process-reports", Commands::ProcessReports
|
|
43
|
+
register "observe", Commands::Observe
|
|
41
44
|
register "status", Commands::Status
|
|
42
45
|
register "prune", Commands::Prune
|
|
43
46
|
register "projects", Commands::Projects
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "ace/hitl/molecules/event_observation"
|
|
3
|
+
|
|
4
|
+
module Ace
|
|
5
|
+
module Overseer
|
|
6
|
+
module Molecules
|
|
7
|
+
# Read-only adoption filter. HITL owns semantic revisions; the existing
|
|
8
|
+
# private task tree owns report adoption and continuation, never this view.
|
|
9
|
+
class EventObservation
|
|
10
|
+
def initialize(hitl: nil, task_manager: nil)
|
|
11
|
+
@hitl = hitl || Ace::Hitl::Molecules::EventObservation.new
|
|
12
|
+
@tasks = task_manager || Ace::Task::Organisms::TaskManager.new
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def call(owner:, scope: "current", limit: 500)
|
|
16
|
+
projection = @hitl.call(owner: owner, scope: scope, limit: limit)
|
|
17
|
+
managers = @tasks.list(in_folder: "all").select { |task| !task.metadata["project_task"].to_s.empty? }
|
|
18
|
+
settled, pending = projection.fetch("events").partition do |event|
|
|
19
|
+
next false unless event["type"] == "report"
|
|
20
|
+
verdict = Atoms::ReportInterpretation.evaluate(event: event, managers: managers)
|
|
21
|
+
next false unless verdict[:status] == :duplicate
|
|
22
|
+
manager = managers.find { |task| task.id.to_s == verdict[:manager_ref] }
|
|
23
|
+
# A persisted report alone is not proof its continuation ran. Keep
|
|
24
|
+
# active managers eligible after restart; their existing gates reconcile
|
|
25
|
+
# the same attempt. Only completed trees suppress historical reports.
|
|
26
|
+
manager && ([manager] + Array(manager.subtasks)).all? { |task| Ace::Task::Atoms::TaskValidationRules.terminal_status?(task.status.to_s) }
|
|
27
|
+
end
|
|
28
|
+
projection.merge("events" => pending, "settled" => settled)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -159,7 +159,7 @@ module Ace
|
|
|
159
159
|
# guess, and so does this description).
|
|
160
160
|
def start_command_of(next_leg)
|
|
161
161
|
config = next_leg.is_a?(Hash) ? next_leg["start_config"].to_s : ""
|
|
162
|
-
config.empty? ? nil : "ace-coworker start --config
|
|
162
|
+
config.empty? ? nil : Ace::Support::Cli::Toolchain.shell_command("ace-coworker", "start", "--config", config)
|
|
163
163
|
end
|
|
164
164
|
|
|
165
165
|
# First non-terminal step (id order) whose recorded dependencies
|
data/lib/ace/overseer/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ace-overseer
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.26.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Michal Czyz
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date: 2026-10-
|
|
10
|
+
date: 2026-10-23 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: ace-support-cli
|
|
@@ -16,6 +16,9 @@ dependencies:
|
|
|
16
16
|
- - "~>"
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
18
|
version: '0.6'
|
|
19
|
+
- - ">="
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 0.6.10
|
|
19
22
|
type: :runtime
|
|
20
23
|
prerelease: false
|
|
21
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -23,6 +26,9 @@ dependencies:
|
|
|
23
26
|
- - "~>"
|
|
24
27
|
- !ruby/object:Gem::Version
|
|
25
28
|
version: '0.6'
|
|
29
|
+
- - ">="
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: 0.6.10
|
|
26
32
|
- !ruby/object:Gem::Dependency
|
|
27
33
|
name: ace-support-core
|
|
28
34
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -72,6 +78,9 @@ dependencies:
|
|
|
72
78
|
- - "~>"
|
|
73
79
|
- !ruby/object:Gem::Version
|
|
74
80
|
version: '0.70'
|
|
81
|
+
- - ">="
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: 0.73.1
|
|
75
84
|
type: :runtime
|
|
76
85
|
prerelease: false
|
|
77
86
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -79,6 +88,9 @@ dependencies:
|
|
|
79
88
|
- - "~>"
|
|
80
89
|
- !ruby/object:Gem::Version
|
|
81
90
|
version: '0.70'
|
|
91
|
+
- - ">="
|
|
92
|
+
- !ruby/object:Gem::Version
|
|
93
|
+
version: 0.73.1
|
|
82
94
|
- !ruby/object:Gem::Dependency
|
|
83
95
|
name: ace-git
|
|
84
96
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -127,28 +139,28 @@ dependencies:
|
|
|
127
139
|
requirements:
|
|
128
140
|
- - "~>"
|
|
129
141
|
- !ruby/object:Gem::Version
|
|
130
|
-
version:
|
|
142
|
+
version: 0.6.2
|
|
131
143
|
type: :runtime
|
|
132
144
|
prerelease: false
|
|
133
145
|
version_requirements: !ruby/object:Gem::Requirement
|
|
134
146
|
requirements:
|
|
135
147
|
- - "~>"
|
|
136
148
|
- !ruby/object:Gem::Version
|
|
137
|
-
version:
|
|
149
|
+
version: 0.6.2
|
|
138
150
|
- !ruby/object:Gem::Dependency
|
|
139
151
|
name: ace-hitl
|
|
140
152
|
requirement: !ruby/object:Gem::Requirement
|
|
141
153
|
requirements:
|
|
142
154
|
- - "~>"
|
|
143
155
|
- !ruby/object:Gem::Version
|
|
144
|
-
version: '0.
|
|
156
|
+
version: '0.24'
|
|
145
157
|
type: :runtime
|
|
146
158
|
prerelease: false
|
|
147
159
|
version_requirements: !ruby/object:Gem::Requirement
|
|
148
160
|
requirements:
|
|
149
161
|
- - "~>"
|
|
150
162
|
- !ruby/object:Gem::Version
|
|
151
|
-
version: '0.
|
|
163
|
+
version: '0.24'
|
|
152
164
|
- !ruby/object:Gem::Dependency
|
|
153
165
|
name: ace-runtime
|
|
154
166
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -184,6 +196,9 @@ dependencies:
|
|
|
184
196
|
- - "~>"
|
|
185
197
|
- !ruby/object:Gem::Version
|
|
186
198
|
version: '0.6'
|
|
199
|
+
- - ">="
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: 0.8.1
|
|
187
202
|
type: :runtime
|
|
188
203
|
prerelease: false
|
|
189
204
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -191,6 +206,9 @@ dependencies:
|
|
|
191
206
|
- - "~>"
|
|
192
207
|
- !ruby/object:Gem::Version
|
|
193
208
|
version: '0.6'
|
|
209
|
+
- - ">="
|
|
210
|
+
- !ruby/object:Gem::Version
|
|
211
|
+
version: 0.8.1
|
|
194
212
|
- !ruby/object:Gem::Dependency
|
|
195
213
|
name: ace-lab
|
|
196
214
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -211,14 +229,14 @@ dependencies:
|
|
|
211
229
|
requirements:
|
|
212
230
|
- - "~>"
|
|
213
231
|
- !ruby/object:Gem::Version
|
|
214
|
-
version: 0.62.
|
|
232
|
+
version: 0.62.2
|
|
215
233
|
type: :runtime
|
|
216
234
|
prerelease: false
|
|
217
235
|
version_requirements: !ruby/object:Gem::Requirement
|
|
218
236
|
requirements:
|
|
219
237
|
- - "~>"
|
|
220
238
|
- !ruby/object:Gem::Version
|
|
221
|
-
version: 0.62.
|
|
239
|
+
version: 0.62.2
|
|
222
240
|
- !ruby/object:Gem::Dependency
|
|
223
241
|
name: ace-support-test-helpers
|
|
224
242
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -313,6 +331,7 @@ files:
|
|
|
313
331
|
- lib/ace/overseer/cli.rb
|
|
314
332
|
- lib/ace/overseer/cli/commands/agents.rb
|
|
315
333
|
- lib/ace/overseer/cli/commands/handoff.rb
|
|
334
|
+
- lib/ace/overseer/cli/commands/observe.rb
|
|
316
335
|
- lib/ace/overseer/cli/commands/process_reports.rb
|
|
317
336
|
- lib/ace/overseer/cli/commands/projects.rb
|
|
318
337
|
- lib/ace/overseer/cli/commands/prune.rb
|
|
@@ -324,6 +343,7 @@ files:
|
|
|
324
343
|
- lib/ace/overseer/models/work_context.rb
|
|
325
344
|
- lib/ace/overseer/molecules/assignment_launcher.rb
|
|
326
345
|
- lib/ace/overseer/molecules/assignment_prune_safety_checker.rb
|
|
346
|
+
- lib/ace/overseer/molecules/event_observation.rb
|
|
327
347
|
- lib/ace/overseer/molecules/git_preservation_checker.rb
|
|
328
348
|
- lib/ace/overseer/molecules/handoff_probe.rb
|
|
329
349
|
- lib/ace/overseer/molecules/hitl_inbox.rb
|