lex-tick 0.1.2 → 0.1.3
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/lex-tick.gemspec +8 -0
- data/lib/legion/extensions/tick/runners/orchestrator.rb +13 -15
- data/lib/legion/extensions/tick/version.rb +1 -1
- data/spec/spec_helper.rb +29 -5
- metadata +100 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 67d55a4a8a94f12d6ba0fca7937ff3597e428017e21a2ef09f6a790076316072
|
|
4
|
+
data.tar.gz: 80c0a4c792e8cc3648693926253bd82609326cc32a56adebd39dd9ed9acd1068
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ceba58abf3a0ca2e43249adc62b9e39e3a7ea2f82482778b59f68aaad522f8e766ee4e62a860c51b8d0c706bd4b1611cea4b6f8eeb50cfbadcab8b5c53e88d2c
|
|
7
|
+
data.tar.gz: e1257c6343e35af0dfcd264913f733cd541df4318197edf1b97461adc9d1c734987b516ab981a4fb0e1194eb665e379f4433b3e3dba55fd3fea38bfa6f80eca9
|
data/lex-tick.gemspec
CHANGED
|
@@ -25,4 +25,12 @@ Gem::Specification.new do |spec|
|
|
|
25
25
|
Dir.glob('{lib,spec}/**/*') + %w[lex-tick.gemspec Gemfile]
|
|
26
26
|
end
|
|
27
27
|
spec.require_paths = ['lib']
|
|
28
|
+
|
|
29
|
+
spec.add_dependency 'legion-cache', '>= 1.3.11'
|
|
30
|
+
spec.add_dependency 'legion-crypt', '>= 1.4.9'
|
|
31
|
+
spec.add_dependency 'legion-data', '>= 1.4.17'
|
|
32
|
+
spec.add_dependency 'legion-json', '>= 1.2.1'
|
|
33
|
+
spec.add_dependency 'legion-logging', '>= 1.3.2'
|
|
34
|
+
spec.add_dependency 'legion-settings', '>= 1.3.14'
|
|
35
|
+
spec.add_dependency 'legion-transport', '>= 1.3.9'
|
|
28
36
|
end
|
|
@@ -27,7 +27,7 @@ module Legion
|
|
|
27
27
|
|
|
28
28
|
# Emergency promotion
|
|
29
29
|
if emergency && Helpers::Constants::EMERGENCY_TRIGGERS.include?(emergency)
|
|
30
|
-
|
|
30
|
+
log.warn "[tick] emergency promotion triggered: #{emergency}"
|
|
31
31
|
state.transition_to(:full_active)
|
|
32
32
|
return { transitioned: true, new_mode: :full_active, previous_mode: previous_mode, reason: :emergency }
|
|
33
33
|
end
|
|
@@ -75,26 +75,26 @@ module Legion
|
|
|
75
75
|
{ transitioned: false, current_mode: state.mode }
|
|
76
76
|
else
|
|
77
77
|
state.transition_to(new_mode)
|
|
78
|
-
|
|
78
|
+
log.info "[tick] mode transition: #{previous_mode} -> #{new_mode} (threshold)"
|
|
79
79
|
{ transitioned: true, new_mode: new_mode, previous_mode: previous_mode, reason: :threshold }
|
|
80
80
|
end
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
def tick_status(**)
|
|
84
84
|
status = tick_state.to_h
|
|
85
|
-
|
|
85
|
+
log.debug "[tick] status query: mode=#{status[:mode]} tick_count=#{status[:tick_count]}"
|
|
86
86
|
status
|
|
87
87
|
end
|
|
88
88
|
|
|
89
89
|
def set_mode(mode:, **)
|
|
90
90
|
unless Helpers::Constants::MODES.include?(mode)
|
|
91
|
-
|
|
91
|
+
log.warn "[tick] invalid mode requested: #{mode}"
|
|
92
92
|
return { error: :invalid_mode, valid_modes: Helpers::Constants::MODES }
|
|
93
93
|
end
|
|
94
94
|
|
|
95
95
|
previous = tick_state.mode
|
|
96
96
|
tick_state.transition_to(mode)
|
|
97
|
-
|
|
97
|
+
log.info "[tick] mode forced: #{previous} -> #{mode}"
|
|
98
98
|
{ mode: mode }
|
|
99
99
|
end
|
|
100
100
|
|
|
@@ -107,12 +107,10 @@ module Legion
|
|
|
107
107
|
max_salience = signals.map { |s| s.is_a?(Hash) ? (s[:salience] || 0.0) : 0.0 }.max || 0.0
|
|
108
108
|
state.record_signal(salience: max_salience) unless signals.empty?
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
log.debug "[tick] ##{state.tick_count} starting | mode=#{state.mode} signals=#{signals.size} max_salience=#{max_salience.round(2)}"
|
|
111
111
|
|
|
112
112
|
transition = evaluate_mode_transition(signals: signals)
|
|
113
|
-
if transition[:transitioned]
|
|
114
|
-
Legion::Logging.info "[tick] mode transition: #{transition[:previous_mode]} -> #{transition[:new_mode]} (#{transition[:reason]})"
|
|
115
|
-
end
|
|
113
|
+
log.info "[tick] mode transition: #{transition[:previous_mode]} -> #{transition[:new_mode]} (#{transition[:reason]})" if transition[:transitioned]
|
|
116
114
|
|
|
117
115
|
phases = Helpers::Constants.phases_for_mode(state.mode)
|
|
118
116
|
budget = Helpers::Constants.tick_budget(state.mode)
|
|
@@ -138,11 +136,11 @@ module Legion
|
|
|
138
136
|
results = {}
|
|
139
137
|
budget = ctx[:budget]
|
|
140
138
|
start_time = ctx[:start_time]
|
|
141
|
-
|
|
139
|
+
log.debug "[tick] ##{state.tick_count} running #{phases.size} phases with #{budget}s budget"
|
|
142
140
|
phases.each do |phase|
|
|
143
141
|
elapsed = Time.now.utc - start_time
|
|
144
142
|
if elapsed >= budget
|
|
145
|
-
|
|
143
|
+
log.debug "[tick] ##{state.tick_count} budget exhausted at #{elapsed.round(3)}s, skipping remaining phases"
|
|
146
144
|
break
|
|
147
145
|
end
|
|
148
146
|
|
|
@@ -158,15 +156,15 @@ module Legion
|
|
|
158
156
|
result = handler ? handler.call(state: state, signals: signals, prior_results: results) : { status: :no_handler }
|
|
159
157
|
phase_elapsed = ((Time.now.utc - phase_start) * 1000).round(1)
|
|
160
158
|
status = result.is_a?(Hash) ? (result[:status] || :ok) : :ok
|
|
161
|
-
|
|
159
|
+
log.debug "[tick] ##{state.tick_count} phase=#{phase} status=#{status} (#{phase_elapsed}ms)"
|
|
162
160
|
result
|
|
163
161
|
end
|
|
164
162
|
|
|
165
163
|
def log_tick_complete(state, results, phases, total_elapsed, skipped)
|
|
166
164
|
skipped_suffix = skipped.empty? ? '' : " skipped=#{skipped}"
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
165
|
+
log.info "[tick] ##{state.tick_count} complete | mode=#{state.mode} " \
|
|
166
|
+
"phases=#{results.size}/#{phases.size} " \
|
|
167
|
+
"elapsed=#{(total_elapsed * 1000).round(1)}ms#{skipped_suffix}"
|
|
170
168
|
end
|
|
171
169
|
|
|
172
170
|
def tick_state
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,13 +1,37 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'bundler/setup'
|
|
4
|
+
require 'legion/logging'
|
|
5
|
+
require 'legion/settings'
|
|
6
|
+
require 'legion/cache/helper'
|
|
7
|
+
require 'legion/crypt/helper'
|
|
8
|
+
require 'legion/data/helper'
|
|
9
|
+
require 'legion/json/helper'
|
|
10
|
+
require 'legion/transport/helper'
|
|
4
11
|
|
|
5
12
|
module Legion
|
|
6
|
-
module
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
13
|
+
module Extensions
|
|
14
|
+
module Helpers
|
|
15
|
+
module Lex
|
|
16
|
+
include Legion::Logging::Helper
|
|
17
|
+
include Legion::Settings::Helper
|
|
18
|
+
include Legion::Cache::Helper
|
|
19
|
+
include Legion::Crypt::Helper
|
|
20
|
+
include Legion::Data::Helper
|
|
21
|
+
include Legion::JSON::Helper
|
|
22
|
+
include Legion::Transport::Helper
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
module Actors
|
|
27
|
+
class Every
|
|
28
|
+
include Helpers::Lex
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class Once
|
|
32
|
+
include Helpers::Lex
|
|
33
|
+
end
|
|
34
|
+
end
|
|
11
35
|
end
|
|
12
36
|
end
|
|
13
37
|
|
metadata
CHANGED
|
@@ -1,14 +1,112 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lex-tick
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
-
dependencies:
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: legion-cache
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: 1.3.11
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 1.3.11
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: legion-crypt
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 1.4.9
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: 1.4.9
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: legion-data
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: 1.4.17
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: 1.4.17
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: legion-json
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: 1.2.1
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: 1.2.1
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: legion-logging
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: 1.3.2
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: 1.3.2
|
|
82
|
+
- !ruby/object:Gem::Dependency
|
|
83
|
+
name: legion-settings
|
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
|
85
|
+
requirements:
|
|
86
|
+
- - ">="
|
|
87
|
+
- !ruby/object:Gem::Version
|
|
88
|
+
version: 1.3.14
|
|
89
|
+
type: :runtime
|
|
90
|
+
prerelease: false
|
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
92
|
+
requirements:
|
|
93
|
+
- - ">="
|
|
94
|
+
- !ruby/object:Gem::Version
|
|
95
|
+
version: 1.3.14
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: legion-transport
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - ">="
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: 1.3.9
|
|
103
|
+
type: :runtime
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - ">="
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: 1.3.9
|
|
12
110
|
description: Atomic cognitive processing cycle (11 phases, 3 modes) for brain-modeled
|
|
13
111
|
agentic AI
|
|
14
112
|
email:
|