active_harness 0.2.20 → 0.2.21
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/active_harness/pipeline/hooks.rb +77 -0
- data/lib/active_harness/pipeline.rb +1 -70
- data/lib/active_harness.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: de49ac66334a5feb91a5d5f0314ab2b9b3460a5d3a549f08b77538677eae619b
|
|
4
|
+
data.tar.gz: 0bffb6e77d1b8def25121b144dbc956c2c1b0c684826910e3dd0a66ab595a73e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e51c5ab8c3911d2597f6269f695c2f4992f960d771b4284fdd27121939aca14dfea53e568ecbfc069af26b405725106c18b3beebf0232e751ed8144b3134cea7
|
|
7
|
+
data.tar.gz: ea95a9f48993b4dc930addeee4260e6056815ec48d3c2534a6bf6f5001168cad2104fcd988c98e442f940f32faa4161f9b59a4692bc6fa3adf7655a221d5d56b
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
module ActiveHarness
|
|
2
|
+
class Pipeline
|
|
3
|
+
VALID_HOOKS = %i[before_step after_step stopped complete].freeze
|
|
4
|
+
VALID_STEP_HOOKS = %i[before_step after_step].freeze
|
|
5
|
+
|
|
6
|
+
class << self
|
|
7
|
+
# Register a global or per-step hook.
|
|
8
|
+
#
|
|
9
|
+
# Global hooks fire on every step:
|
|
10
|
+
# on :before_step do |step_name, payload| ... end
|
|
11
|
+
# on :after_step do |step_name, result| ... end
|
|
12
|
+
# on :stopped do |step_name, result| ... end
|
|
13
|
+
# on :complete do |last_result| ... end
|
|
14
|
+
#
|
|
15
|
+
# Per-step hooks fire only for the named step (no step_name passed):
|
|
16
|
+
# on :before_step, :translate do |payload| ... end
|
|
17
|
+
# on :after_step, :translate do |result| ... end
|
|
18
|
+
def on(event, step_name = nil, &block)
|
|
19
|
+
if step_name
|
|
20
|
+
unless VALID_STEP_HOOKS.include?(event)
|
|
21
|
+
raise ArgumentError,
|
|
22
|
+
"Per-step hooks support: #{VALID_STEP_HOOKS.join(", ")}. Got :#{event}"
|
|
23
|
+
end
|
|
24
|
+
pipeline_config[:step_hooks][step_name] ||= {}
|
|
25
|
+
pipeline_config[:step_hooks][step_name][event] = block
|
|
26
|
+
else
|
|
27
|
+
unless VALID_HOOKS.include?(event)
|
|
28
|
+
raise ArgumentError,
|
|
29
|
+
"Unknown Pipeline hook :#{event}. Valid: #{VALID_HOOKS.join(", ")}"
|
|
30
|
+
end
|
|
31
|
+
pipeline_config[:hooks][event] = block
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Rails-style aliases for +on+:
|
|
36
|
+
#
|
|
37
|
+
# Global:
|
|
38
|
+
# before :step do |name, payload| end # → on :before_step
|
|
39
|
+
# after :step do |name, result| end # → on :after_step
|
|
40
|
+
# callback :stopped do |name, result| end # → on :stopped
|
|
41
|
+
# callback :complete do |result| end # → on :complete
|
|
42
|
+
#
|
|
43
|
+
# Per-step:
|
|
44
|
+
# after :step, :translate do |result| end
|
|
45
|
+
# before :step, :translate do |payload| end
|
|
46
|
+
def before(event, step_name = nil, &block)
|
|
47
|
+
on(:"before_#{event}", step_name, &block)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def after(event, step_name = nil, &block)
|
|
51
|
+
on(:"after_#{event}", step_name, &block)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def callback(event, &block)
|
|
55
|
+
on(event, &block)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
private
|
|
60
|
+
|
|
61
|
+
# Fires global hook AND pipeline_event_stream. Consistent with Agent#fire and Tribunal#fire.
|
|
62
|
+
def fire(event, step_name, data, config)
|
|
63
|
+
blk = config[:hooks][event]
|
|
64
|
+
instance_exec(step_name, data, &blk) if blk
|
|
65
|
+
@pipeline_event_stream&.call(event, step_name, data)
|
|
66
|
+
rescue IOError, ActionController::Live::ClientDisconnected
|
|
67
|
+
nil
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Per-step hook: receives (data) only — not forwarded to pipeline_event_stream
|
|
71
|
+
# (global fire already covers the step event with step_name context).
|
|
72
|
+
def fire_step(event, step_name, data, config)
|
|
73
|
+
blk = config[:step_hooks][step_name]&.dig(event)
|
|
74
|
+
instance_exec(data, &blk) if blk
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -32,9 +32,6 @@ module ActiveHarness
|
|
|
32
32
|
# pipeline.step_results # => { translate: <Result>, ... }
|
|
33
33
|
#
|
|
34
34
|
class Pipeline
|
|
35
|
-
VALID_HOOKS = %i[before_step after_step stopped complete].freeze
|
|
36
|
-
VALID_STEP_HOOKS = %i[before_step after_step].freeze
|
|
37
|
-
|
|
38
35
|
# -------------------------------------------------------------------------
|
|
39
36
|
# Class-level DSL
|
|
40
37
|
# -------------------------------------------------------------------------
|
|
@@ -53,57 +50,6 @@ module ActiveHarness
|
|
|
53
50
|
pipeline_config[:steps] << Pipeline::Step.new(name, agent_class, &block)
|
|
54
51
|
end
|
|
55
52
|
|
|
56
|
-
# Register a global or per-step hook.
|
|
57
|
-
#
|
|
58
|
-
# Global hooks fire on every step:
|
|
59
|
-
# on :before_step do |step_name, payload| ... end
|
|
60
|
-
# on :after_step do |step_name, result| ... end
|
|
61
|
-
# on :stopped do |step_name, result| ... end
|
|
62
|
-
# on :complete do |last_result| ... end
|
|
63
|
-
#
|
|
64
|
-
# Per-step hooks fire only for the named step (no step_name passed):
|
|
65
|
-
# on :before_step, :translate do |payload| ... end
|
|
66
|
-
# on :after_step, :translate do |result| ... end
|
|
67
|
-
def on(event, step_name = nil, &block)
|
|
68
|
-
if step_name
|
|
69
|
-
unless VALID_STEP_HOOKS.include?(event)
|
|
70
|
-
raise ArgumentError,
|
|
71
|
-
"Per-step hooks support: #{VALID_STEP_HOOKS.join(", ")}. Got :#{event}"
|
|
72
|
-
end
|
|
73
|
-
pipeline_config[:step_hooks][step_name] ||= {}
|
|
74
|
-
pipeline_config[:step_hooks][step_name][event] = block
|
|
75
|
-
else
|
|
76
|
-
unless VALID_HOOKS.include?(event)
|
|
77
|
-
raise ArgumentError,
|
|
78
|
-
"Unknown Pipeline hook :#{event}. Valid: #{VALID_HOOKS.join(", ")}"
|
|
79
|
-
end
|
|
80
|
-
pipeline_config[:hooks][event] = block
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
# Rails-style aliases for +on+:
|
|
85
|
-
#
|
|
86
|
-
# Global:
|
|
87
|
-
# before :step do |name, payload| end # → on :before_step
|
|
88
|
-
# after :step do |name, result| end # → on :after_step
|
|
89
|
-
# callback :stopped do |name, result| end # → on :stopped
|
|
90
|
-
# callback :complete do |result| end # → on :complete
|
|
91
|
-
#
|
|
92
|
-
# Per-step:
|
|
93
|
-
# after :step, :translate do |result| end
|
|
94
|
-
# before :step, :translate do |payload| end
|
|
95
|
-
def before(event, step_name = nil, &block)
|
|
96
|
-
on(:"before_#{event}", step_name, &block)
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
def after(event, step_name = nil, &block)
|
|
100
|
-
on(:"after_#{event}", step_name, &block)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def callback(event, &block)
|
|
104
|
-
on(event, &block)
|
|
105
|
-
end
|
|
106
|
-
|
|
107
53
|
def pipeline_config
|
|
108
54
|
@pipeline_config ||= { steps: [], hooks: {}, step_hooks: {} }
|
|
109
55
|
end
|
|
@@ -219,23 +165,8 @@ module ActiveHarness
|
|
|
219
165
|
).call.result
|
|
220
166
|
end
|
|
221
167
|
end
|
|
222
|
-
|
|
223
|
-
# Fires global hook AND pipeline_event_stream. Consistent with Agent#fire and Tribunal#fire.
|
|
224
|
-
def fire(event, step_name, data, config)
|
|
225
|
-
blk = config[:hooks][event]
|
|
226
|
-
instance_exec(step_name, data, &blk) if blk
|
|
227
|
-
@pipeline_event_stream&.call(event, step_name, data)
|
|
228
|
-
rescue IOError, ActionController::Live::ClientDisconnected
|
|
229
|
-
nil
|
|
230
|
-
end
|
|
231
|
-
|
|
232
|
-
# Per-step hook: receives (data) only — not forwarded to pipeline_event_stream
|
|
233
|
-
# (global fire already covers the step event with step_name context).
|
|
234
|
-
def fire_step(event, step_name, data, config)
|
|
235
|
-
blk = config[:step_hooks][step_name]&.dig(event)
|
|
236
|
-
instance_exec(data, &blk) if blk
|
|
237
|
-
end
|
|
238
168
|
end
|
|
239
169
|
end
|
|
240
170
|
|
|
171
|
+
require_relative "pipeline/hooks"
|
|
241
172
|
require_relative "pipeline/step"
|
data/lib/active_harness.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: active_harness
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.21
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- the-teacher
|
|
@@ -51,6 +51,7 @@ files:
|
|
|
51
51
|
- lib/active_harness/memory/adapter/base.rb
|
|
52
52
|
- lib/active_harness/memory/adapter/file.rb
|
|
53
53
|
- lib/active_harness/pipeline.rb
|
|
54
|
+
- lib/active_harness/pipeline/hooks.rb
|
|
54
55
|
- lib/active_harness/pipeline/step.rb
|
|
55
56
|
- lib/active_harness/providers/PROVIDER_CONTRACT.md
|
|
56
57
|
- lib/active_harness/providers/anthropic.rb
|