lex-agentic-defense 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/CHANGELOG.md +12 -0
- data/Gemfile +5 -0
- data/LICENSE +21 -0
- data/README.md +13 -0
- data/lex-agentic-defense.gemspec +30 -0
- data/lib/legion/extensions/agentic/defense/avalanche/client.rb +22 -0
- data/lib/legion/extensions/agentic/defense/avalanche/helpers/avalanche_engine.rb +132 -0
- data/lib/legion/extensions/agentic/defense/avalanche/helpers/cascade.rb +76 -0
- data/lib/legion/extensions/agentic/defense/avalanche/helpers/constants.rb +44 -0
- data/lib/legion/extensions/agentic/defense/avalanche/helpers/snowpack.rb +86 -0
- data/lib/legion/extensions/agentic/defense/avalanche/runners/cognitive_avalanche.rb +75 -0
- data/lib/legion/extensions/agentic/defense/avalanche/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/avalanche.rb +22 -0
- data/lib/legion/extensions/agentic/defense/bias/actors/update.rb +45 -0
- data/lib/legion/extensions/agentic/defense/bias/client.rb +30 -0
- data/lib/legion/extensions/agentic/defense/bias/helpers/bias_detector.rb +107 -0
- data/lib/legion/extensions/agentic/defense/bias/helpers/bias_event.rb +44 -0
- data/lib/legion/extensions/agentic/defense/bias/helpers/bias_store.rb +84 -0
- data/lib/legion/extensions/agentic/defense/bias/helpers/constants.rb +28 -0
- data/lib/legion/extensions/agentic/defense/bias/runners/bias.rb +151 -0
- data/lib/legion/extensions/agentic/defense/bias/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/bias.rb +20 -0
- data/lib/legion/extensions/agentic/defense/confabulation/actors/decay.rb +45 -0
- data/lib/legion/extensions/agentic/defense/confabulation/client.rb +28 -0
- data/lib/legion/extensions/agentic/defense/confabulation/helpers/claim.rb +67 -0
- data/lib/legion/extensions/agentic/defense/confabulation/helpers/confabulation_engine.rb +120 -0
- data/lib/legion/extensions/agentic/defense/confabulation/helpers/constants.rb +29 -0
- data/lib/legion/extensions/agentic/defense/confabulation/runners/confabulation.rb +74 -0
- data/lib/legion/extensions/agentic/defense/confabulation/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/confabulation.rb +19 -0
- data/lib/legion/extensions/agentic/defense/dissonance/client.rb +32 -0
- data/lib/legion/extensions/agentic/defense/dissonance/helpers/belief.rb +46 -0
- data/lib/legion/extensions/agentic/defense/dissonance/helpers/constants.rb +27 -0
- data/lib/legion/extensions/agentic/defense/dissonance/helpers/dissonance_event.rb +52 -0
- data/lib/legion/extensions/agentic/defense/dissonance/helpers/dissonance_model.rb +159 -0
- data/lib/legion/extensions/agentic/defense/dissonance/runners/dissonance.rb +163 -0
- data/lib/legion/extensions/agentic/defense/dissonance/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/dissonance.rb +20 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance/actors/update.rb +45 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance/client.rb +27 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/claim.rb +78 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/client.rb +23 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/constants.rb +37 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/source.rb +64 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine.rb +195 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance/runners/epistemic_vigilance.rb +91 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/epistemic_vigilance.rb +20 -0
- data/lib/legion/extensions/agentic/defense/erosion/client.rb +23 -0
- data/lib/legion/extensions/agentic/defense/erosion/helpers/channel.rb +84 -0
- data/lib/legion/extensions/agentic/defense/erosion/helpers/constants.rb +47 -0
- data/lib/legion/extensions/agentic/defense/erosion/helpers/erosion_engine.rb +134 -0
- data/lib/legion/extensions/agentic/defense/erosion/helpers/formation.rb +100 -0
- data/lib/legion/extensions/agentic/defense/erosion/runners/cognitive_erosion.rb +93 -0
- data/lib/legion/extensions/agentic/defense/erosion/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/erosion.rb +21 -0
- data/lib/legion/extensions/agentic/defense/error_monitoring/actors/tick.rb +45 -0
- data/lib/legion/extensions/agentic/defense/error_monitoring/client.rb +28 -0
- data/lib/legion/extensions/agentic/defense/error_monitoring/helpers/constants.rb +50 -0
- data/lib/legion/extensions/agentic/defense/error_monitoring/helpers/error_monitor.rb +174 -0
- data/lib/legion/extensions/agentic/defense/error_monitoring/helpers/error_signal.rb +60 -0
- data/lib/legion/extensions/agentic/defense/error_monitoring/runners/error_monitoring.rb +102 -0
- data/lib/legion/extensions/agentic/defense/error_monitoring/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/error_monitoring.rb +19 -0
- data/lib/legion/extensions/agentic/defense/extinction/actors/protocol_monitor.rb +45 -0
- data/lib/legion/extensions/agentic/defense/extinction/client.rb +27 -0
- data/lib/legion/extensions/agentic/defense/extinction/helpers/levels.rb +43 -0
- data/lib/legion/extensions/agentic/defense/extinction/helpers/protocol_state.rb +125 -0
- data/lib/legion/extensions/agentic/defense/extinction/local_migrations/20260316000040_create_extinction_state.rb +13 -0
- data/lib/legion/extensions/agentic/defense/extinction/runners/extinction.rb +130 -0
- data/lib/legion/extensions/agentic/defense/extinction/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/extinction.rb +25 -0
- data/lib/legion/extensions/agentic/defense/friction/client.rb +15 -0
- data/lib/legion/extensions/agentic/defense/friction/helpers/constants.rb +38 -0
- data/lib/legion/extensions/agentic/defense/friction/helpers/friction_engine.rb +131 -0
- data/lib/legion/extensions/agentic/defense/friction/helpers/state_transition.rb +73 -0
- data/lib/legion/extensions/agentic/defense/friction/runners/cognitive_friction.rb +82 -0
- data/lib/legion/extensions/agentic/defense/friction/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/friction.rb +19 -0
- data/lib/legion/extensions/agentic/defense/immune_response/client.rb +19 -0
- data/lib/legion/extensions/agentic/defense/immune_response/helpers/antibody.rb +72 -0
- data/lib/legion/extensions/agentic/defense/immune_response/helpers/antigen.rb +87 -0
- data/lib/legion/extensions/agentic/defense/immune_response/helpers/constants.rb +75 -0
- data/lib/legion/extensions/agentic/defense/immune_response/helpers/immune_engine.rb +184 -0
- data/lib/legion/extensions/agentic/defense/immune_response/helpers/immune_response.rb +76 -0
- data/lib/legion/extensions/agentic/defense/immune_response/runners/cognitive_immune_response.rb +114 -0
- data/lib/legion/extensions/agentic/defense/immune_response/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/immune_response.rb +21 -0
- data/lib/legion/extensions/agentic/defense/immunology/client.rb +29 -0
- data/lib/legion/extensions/agentic/defense/immunology/helpers/antibody.rb +55 -0
- data/lib/legion/extensions/agentic/defense/immunology/helpers/constants.rb +43 -0
- data/lib/legion/extensions/agentic/defense/immunology/helpers/immune_engine.rb +187 -0
- data/lib/legion/extensions/agentic/defense/immunology/helpers/threat.rb +67 -0
- data/lib/legion/extensions/agentic/defense/immunology/runners/cognitive_immunology.rb +92 -0
- data/lib/legion/extensions/agentic/defense/immunology/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/immunology.rb +20 -0
- data/lib/legion/extensions/agentic/defense/phantom/client.rb +29 -0
- data/lib/legion/extensions/agentic/defense/phantom/helpers/constants.rb +54 -0
- data/lib/legion/extensions/agentic/defense/phantom/helpers/phantom_engine.rb +106 -0
- data/lib/legion/extensions/agentic/defense/phantom/helpers/phantom_limb.rb +103 -0
- data/lib/legion/extensions/agentic/defense/phantom/helpers/phantom_signal.rb +40 -0
- data/lib/legion/extensions/agentic/defense/phantom/runners/cognitive_phantom.rb +79 -0
- data/lib/legion/extensions/agentic/defense/phantom/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/phantom.rb +21 -0
- data/lib/legion/extensions/agentic/defense/quicksand/client.rb +15 -0
- data/lib/legion/extensions/agentic/defense/quicksand/helpers/constants.rb +48 -0
- data/lib/legion/extensions/agentic/defense/quicksand/helpers/pit.rb +82 -0
- data/lib/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine.rb +137 -0
- data/lib/legion/extensions/agentic/defense/quicksand/helpers/trap.rb +101 -0
- data/lib/legion/extensions/agentic/defense/quicksand/runners/cognitive_quicksand.rb +84 -0
- data/lib/legion/extensions/agentic/defense/quicksand/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/quicksand.rb +22 -0
- data/lib/legion/extensions/agentic/defense/quicksilver/client.rb +29 -0
- data/lib/legion/extensions/agentic/defense/quicksilver/helpers/constants.rb +50 -0
- data/lib/legion/extensions/agentic/defense/quicksilver/helpers/droplet.rb +126 -0
- data/lib/legion/extensions/agentic/defense/quicksilver/helpers/pool.rb +83 -0
- data/lib/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine.rb +124 -0
- data/lib/legion/extensions/agentic/defense/quicksilver/runners/cognitive_quicksilver.rb +130 -0
- data/lib/legion/extensions/agentic/defense/quicksilver/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/quicksilver.rb +21 -0
- data/lib/legion/extensions/agentic/defense/version.rb +11 -0
- data/lib/legion/extensions/agentic/defense/whirlpool/client.rb +65 -0
- data/lib/legion/extensions/agentic/defense/whirlpool/helpers/captured_thought.rb +67 -0
- data/lib/legion/extensions/agentic/defense/whirlpool/helpers/constants.rb +45 -0
- data/lib/legion/extensions/agentic/defense/whirlpool/helpers/vortex.rb +91 -0
- data/lib/legion/extensions/agentic/defense/whirlpool/helpers/whirlpool_engine.rb +92 -0
- data/lib/legion/extensions/agentic/defense/whirlpool/runners/cognitive_whirlpool.rb +117 -0
- data/lib/legion/extensions/agentic/defense/whirlpool/version.rb +13 -0
- data/lib/legion/extensions/agentic/defense/whirlpool.rb +22 -0
- data/lib/legion/extensions/agentic/defense.rb +32 -0
- data/spec/legion/extensions/agentic/defense/avalanche/client_spec.rb +96 -0
- data/spec/legion/extensions/agentic/defense/avalanche/helpers/avalanche_engine_spec.rb +276 -0
- data/spec/legion/extensions/agentic/defense/avalanche/helpers/cascade_spec.rb +190 -0
- data/spec/legion/extensions/agentic/defense/avalanche/helpers/constants_spec.rb +129 -0
- data/spec/legion/extensions/agentic/defense/avalanche/helpers/snowpack_spec.rb +197 -0
- data/spec/legion/extensions/agentic/defense/avalanche/runners/cognitive_avalanche_spec.rb +211 -0
- data/spec/legion/extensions/agentic/defense/bias/client_spec.rb +16 -0
- data/spec/legion/extensions/agentic/defense/bias/helpers/bias_detector_spec.rb +160 -0
- data/spec/legion/extensions/agentic/defense/bias/helpers/bias_event_spec.rb +64 -0
- data/spec/legion/extensions/agentic/defense/bias/helpers/bias_store_spec.rb +143 -0
- data/spec/legion/extensions/agentic/defense/bias/runners/bias_spec.rb +155 -0
- data/spec/legion/extensions/agentic/defense/confabulation/client_spec.rb +34 -0
- data/spec/legion/extensions/agentic/defense/confabulation/helpers/claim_spec.rb +119 -0
- data/spec/legion/extensions/agentic/defense/confabulation/helpers/confabulation_engine_spec.rb +163 -0
- data/spec/legion/extensions/agentic/defense/confabulation/helpers/constants_spec.rb +55 -0
- data/spec/legion/extensions/agentic/defense/confabulation/runners/confabulation_spec.rb +119 -0
- data/spec/legion/extensions/agentic/defense/dissonance/client_spec.rb +51 -0
- data/spec/legion/extensions/agentic/defense/dissonance/helpers/belief_spec.rb +103 -0
- data/spec/legion/extensions/agentic/defense/dissonance/helpers/constants_spec.rb +60 -0
- data/spec/legion/extensions/agentic/defense/dissonance/helpers/dissonance_event_spec.rb +113 -0
- data/spec/legion/extensions/agentic/defense/dissonance/helpers/dissonance_model_spec.rb +252 -0
- data/spec/legion/extensions/agentic/defense/dissonance/runners/dissonance_spec.rb +323 -0
- data/spec/legion/extensions/agentic/defense/epistemic_vigilance/client_spec.rb +28 -0
- data/spec/legion/extensions/agentic/defense/epistemic_vigilance/helpers/claim_spec.rb +135 -0
- data/spec/legion/extensions/agentic/defense/epistemic_vigilance/helpers/constants_spec.rb +59 -0
- data/spec/legion/extensions/agentic/defense/epistemic_vigilance/helpers/source_spec.rb +117 -0
- data/spec/legion/extensions/agentic/defense/epistemic_vigilance/helpers/vigilance_engine_spec.rb +273 -0
- data/spec/legion/extensions/agentic/defense/epistemic_vigilance/runners/epistemic_vigilance_spec.rb +157 -0
- data/spec/legion/extensions/agentic/defense/erosion/client_spec.rb +90 -0
- data/spec/legion/extensions/agentic/defense/erosion/helpers/channel_spec.rb +173 -0
- data/spec/legion/extensions/agentic/defense/erosion/helpers/constants_spec.rb +137 -0
- data/spec/legion/extensions/agentic/defense/erosion/helpers/erosion_engine_spec.rb +263 -0
- data/spec/legion/extensions/agentic/defense/erosion/helpers/formation_spec.rb +206 -0
- data/spec/legion/extensions/agentic/defense/erosion/runners/cognitive_erosion_spec.rb +153 -0
- data/spec/legion/extensions/agentic/defense/error_monitoring/client_spec.rb +40 -0
- data/spec/legion/extensions/agentic/defense/error_monitoring/helpers/error_monitor_spec.rb +178 -0
- data/spec/legion/extensions/agentic/defense/error_monitoring/helpers/error_signal_spec.rb +76 -0
- data/spec/legion/extensions/agentic/defense/error_monitoring/runners/error_monitoring_spec.rb +87 -0
- data/spec/legion/extensions/agentic/defense/extinction/actors/protocol_monitor_spec.rb +45 -0
- data/spec/legion/extensions/agentic/defense/extinction/client_spec.rb +13 -0
- data/spec/legion/extensions/agentic/defense/extinction/helpers/levels_spec.rb +180 -0
- data/spec/legion/extensions/agentic/defense/extinction/helpers/protocol_state_spec.rb +291 -0
- data/spec/legion/extensions/agentic/defense/extinction/local_persistence_spec.rb +188 -0
- data/spec/legion/extensions/agentic/defense/extinction/runners/extinction_spec.rb +114 -0
- data/spec/legion/extensions/agentic/defense/friction/helpers/constants_spec.rb +46 -0
- data/spec/legion/extensions/agentic/defense/friction/helpers/friction_engine_spec.rb +175 -0
- data/spec/legion/extensions/agentic/defense/friction/helpers/state_transition_spec.rb +124 -0
- data/spec/legion/extensions/agentic/defense/friction/runners/cognitive_friction_spec.rb +89 -0
- data/spec/legion/extensions/agentic/defense/immune_response/client_spec.rb +32 -0
- data/spec/legion/extensions/agentic/defense/immune_response/cognitive_immune_response_spec.rb +7 -0
- data/spec/legion/extensions/agentic/defense/immune_response/helpers/antibody_spec.rb +117 -0
- data/spec/legion/extensions/agentic/defense/immune_response/helpers/antigen_spec.rb +125 -0
- data/spec/legion/extensions/agentic/defense/immune_response/helpers/constants_spec.rb +45 -0
- data/spec/legion/extensions/agentic/defense/immune_response/helpers/immune_engine_spec.rb +222 -0
- data/spec/legion/extensions/agentic/defense/immune_response/helpers/immune_response_spec.rb +84 -0
- data/spec/legion/extensions/agentic/defense/immune_response/runners_spec.rb +141 -0
- data/spec/legion/extensions/agentic/defense/immunology/client_spec.rb +61 -0
- data/spec/legion/extensions/agentic/defense/immunology/helpers/antibody_spec.rb +98 -0
- data/spec/legion/extensions/agentic/defense/immunology/helpers/constants_spec.rb +86 -0
- data/spec/legion/extensions/agentic/defense/immunology/helpers/immune_engine_spec.rb +275 -0
- data/spec/legion/extensions/agentic/defense/immunology/helpers/threat_spec.rb +133 -0
- data/spec/legion/extensions/agentic/defense/immunology/runners/cognitive_immunology_spec.rb +177 -0
- data/spec/legion/extensions/agentic/defense/phantom/client_spec.rb +53 -0
- data/spec/legion/extensions/agentic/defense/phantom/helpers/constants_spec.rb +87 -0
- data/spec/legion/extensions/agentic/defense/phantom/helpers/phantom_engine_spec.rb +222 -0
- data/spec/legion/extensions/agentic/defense/phantom/helpers/phantom_limb_spec.rb +180 -0
- data/spec/legion/extensions/agentic/defense/phantom/helpers/phantom_signal_spec.rb +59 -0
- data/spec/legion/extensions/agentic/defense/phantom/runners/cognitive_phantom_spec.rb +193 -0
- data/spec/legion/extensions/agentic/defense/quicksand/client_spec.rb +35 -0
- data/spec/legion/extensions/agentic/defense/quicksand/helpers/constants_spec.rb +58 -0
- data/spec/legion/extensions/agentic/defense/quicksand/helpers/pit_spec.rb +103 -0
- data/spec/legion/extensions/agentic/defense/quicksand/helpers/quicksand_engine_spec.rb +153 -0
- data/spec/legion/extensions/agentic/defense/quicksand/helpers/trap_spec.rb +166 -0
- data/spec/legion/extensions/agentic/defense/quicksand/runners/cognitive_quicksand_spec.rb +90 -0
- data/spec/legion/extensions/agentic/defense/quicksilver/client_spec.rb +72 -0
- data/spec/legion/extensions/agentic/defense/quicksilver/helpers/constants_spec.rb +105 -0
- data/spec/legion/extensions/agentic/defense/quicksilver/helpers/droplet_spec.rb +310 -0
- data/spec/legion/extensions/agentic/defense/quicksilver/helpers/pool_spec.rb +174 -0
- data/spec/legion/extensions/agentic/defense/quicksilver/helpers/quicksilver_engine_spec.rb +226 -0
- data/spec/legion/extensions/agentic/defense/quicksilver/runners/cognitive_quicksilver_spec.rb +227 -0
- data/spec/legion/extensions/agentic/defense/whirlpool/client_spec.rb +63 -0
- data/spec/legion/extensions/agentic/defense/whirlpool/helpers/captured_thought_spec.rb +171 -0
- data/spec/legion/extensions/agentic/defense/whirlpool/helpers/constants_spec.rb +65 -0
- data/spec/legion/extensions/agentic/defense/whirlpool/helpers/vortex_spec.rb +189 -0
- data/spec/legion/extensions/agentic/defense/whirlpool/helpers/whirlpool_engine_spec.rb +227 -0
- data/spec/legion/extensions/agentic/defense/whirlpool/runners/cognitive_whirlpool_spec.rb +226 -0
- data/spec/spec_helper.rb +46 -0
- metadata +303 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 38b6880ab2168a8ec8e0e037c8f031d175eb30312cea1b00981b7d5b67a631b1
|
|
4
|
+
data.tar.gz: ee8f26503794b5f3168120b1bd9537f9fdcad7eedfb5dd0efab75b016ce55b59
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 8cfe651310f156f79c8c1476e210fd17b90a2344d689d5b636edd94396d59353b42f8ae53e36f4e4e400f0c7584272dbc79ae6d0fa434fded2a8f2f3c4e4fcd7
|
|
7
|
+
data.tar.gz: 929f72c0515d624586865faed6ed4ecd65cfa8f3c65849f66363539b1d7c66c2b65210c8cca8190f4dccf19eb4fe5fe4f9634e55a61d477e4662e9a841fa0eae
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [Unreleased]
|
|
4
|
+
|
|
5
|
+
## [0.1.0] - 2026-03-18
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- Initial release as domain consolidation gem
|
|
9
|
+
- Consolidated source extensions into unified domain gem under `Legion::Extensions::Agentic::<Domain>`
|
|
10
|
+
- All sub-modules loaded from single entry point
|
|
11
|
+
- Full spec suite with zero failures
|
|
12
|
+
- RuboCop compliance across all files
|
data/Gemfile
ADDED
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Matthew Iverson
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'lib/legion/extensions/agentic/defense/version'
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = 'lex-agentic-defense'
|
|
7
|
+
spec.version = Legion::Extensions::Agentic::Defense::VERSION
|
|
8
|
+
spec.authors = ['Esity']
|
|
9
|
+
spec.email = ['matthewdiverson@gmail.com']
|
|
10
|
+
|
|
11
|
+
spec.summary = 'LEX Agentic Defense'
|
|
12
|
+
spec.description = 'LEX agentic defense domain: threat detection, stress response, boundaries'
|
|
13
|
+
spec.homepage = 'https://github.com/LegionIO/lex-agentic-defense'
|
|
14
|
+
spec.license = 'MIT'
|
|
15
|
+
spec.required_ruby_version = '>= 3.4'
|
|
16
|
+
|
|
17
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
|
18
|
+
spec.metadata['source_code_uri'] = spec.homepage
|
|
19
|
+
spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/main/CHANGELOG.md"
|
|
20
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
|
21
|
+
|
|
22
|
+
spec.files = Dir.chdir(__dir__) do
|
|
23
|
+
Dir.glob('{lib,spec}/**/*.rb') + %w[lex-agentic-defense.gemspec Gemfile LICENSE README.md CHANGELOG.md]
|
|
24
|
+
end
|
|
25
|
+
spec.require_paths = ['lib']
|
|
26
|
+
|
|
27
|
+
spec.add_development_dependency 'rspec', '~> 3.13'
|
|
28
|
+
spec.add_development_dependency 'rubocop', '~> 1.60'
|
|
29
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.26'
|
|
30
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Agentic
|
|
6
|
+
module Defense
|
|
7
|
+
module Avalanche
|
|
8
|
+
class Client
|
|
9
|
+
include Runners::CognitiveAvalanche
|
|
10
|
+
|
|
11
|
+
attr_reader :engine
|
|
12
|
+
|
|
13
|
+
def initialize(engine: nil, **)
|
|
14
|
+
@engine = engine || Helpers::AvalancheEngine.new
|
|
15
|
+
@avalanche_engine = @engine
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Agentic
|
|
6
|
+
module Defense
|
|
7
|
+
module Avalanche
|
|
8
|
+
module Helpers
|
|
9
|
+
class AvalancheEngine
|
|
10
|
+
include Constants
|
|
11
|
+
|
|
12
|
+
attr_reader :snowpacks, :cascade_history
|
|
13
|
+
|
|
14
|
+
def initialize
|
|
15
|
+
@snowpacks = {}
|
|
16
|
+
@cascade_history = []
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def create_snowpack(snowpack_type:, domain:, content:, depth: 0.0, stability: 1.0, **)
|
|
20
|
+
raise ArgumentError, 'snowpack limit reached' if @snowpacks.size >= Constants::MAX_SNOWPACKS
|
|
21
|
+
|
|
22
|
+
pack = Snowpack.new(
|
|
23
|
+
snowpack_type: snowpack_type,
|
|
24
|
+
domain: domain,
|
|
25
|
+
content: content,
|
|
26
|
+
depth: depth,
|
|
27
|
+
stability: stability
|
|
28
|
+
)
|
|
29
|
+
@snowpacks[pack.id] = pack
|
|
30
|
+
{ success: true, snowpack_id: pack.id, snowpack: pack.to_h }
|
|
31
|
+
rescue ArgumentError => e
|
|
32
|
+
{ success: false, error: e.message }
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def trigger(snowpack_id:, force:, cascade_type: :chaotic, **)
|
|
36
|
+
pack = @snowpacks[snowpack_id]
|
|
37
|
+
raise ArgumentError, "snowpack not found: #{snowpack_id}" unless pack
|
|
38
|
+
|
|
39
|
+
pack.destabilize!(force)
|
|
40
|
+
instability = pack.instability
|
|
41
|
+
|
|
42
|
+
return { success: true, triggered: false, instability: instability, reason: :below_threshold } \
|
|
43
|
+
if (force + instability) < Constants::TRIGGER_THRESHOLD
|
|
44
|
+
|
|
45
|
+
cascade = Cascade.new(
|
|
46
|
+
cascade_type: cascade_type,
|
|
47
|
+
trigger_source: snowpack_id,
|
|
48
|
+
magnitude: ((force + instability) / 2.0).clamp(0.0, 1.0).round(10),
|
|
49
|
+
propagation_speed: instability.round(10),
|
|
50
|
+
debris: [pack.content]
|
|
51
|
+
)
|
|
52
|
+
record_cascade(cascade)
|
|
53
|
+
{ success: true, triggered: true, cascade_id: cascade.id, cascade: cascade.to_h, instability: instability }
|
|
54
|
+
rescue ArgumentError => e
|
|
55
|
+
{ success: false, error: e.message }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def accumulate_all!(rate: Constants::ACCUMULATION_RATE, **)
|
|
59
|
+
count = 0
|
|
60
|
+
@snowpacks.each_value do |pack|
|
|
61
|
+
pack.accumulate!(rate)
|
|
62
|
+
count += 1
|
|
63
|
+
end
|
|
64
|
+
{ success: true, packs_accumulated: count, rate: rate }
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def melt_all!(rate: Constants::MELT_RATE, **)
|
|
68
|
+
count = 0
|
|
69
|
+
@snowpacks.each_value do |pack|
|
|
70
|
+
pack.melt!(rate)
|
|
71
|
+
count += 1
|
|
72
|
+
end
|
|
73
|
+
{ success: true, packs_melted: count, rate: rate }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def active_cascades
|
|
77
|
+
@cascade_history.select(&:active?)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def most_unstable
|
|
81
|
+
@snowpacks.values.min_by(&:stability)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def terrain_report
|
|
85
|
+
packs = @snowpacks.values
|
|
86
|
+
active_cascades = self.active_cascades
|
|
87
|
+
critical_packs = packs.select(&:critical?)
|
|
88
|
+
unstable_packs = packs.select(&:unstable?)
|
|
89
|
+
|
|
90
|
+
{
|
|
91
|
+
total_snowpacks: packs.size,
|
|
92
|
+
critical_count: critical_packs.size,
|
|
93
|
+
unstable_count: unstable_packs.size,
|
|
94
|
+
stable_count: packs.count(&:stable?),
|
|
95
|
+
active_cascades: active_cascades.size,
|
|
96
|
+
cascade_history: @cascade_history.size,
|
|
97
|
+
avg_stability: avg_stability(packs),
|
|
98
|
+
avg_depth: avg_depth(packs),
|
|
99
|
+
most_unstable_id: most_unstable&.id,
|
|
100
|
+
recent_cascades: recent_cascades(5)
|
|
101
|
+
}
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
def record_cascade(cascade)
|
|
107
|
+
@cascade_history << cascade
|
|
108
|
+
@cascade_history.shift if @cascade_history.size > Constants::MAX_CASCADE_HISTORY
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def avg_stability(packs)
|
|
112
|
+
return 0.0 if packs.empty?
|
|
113
|
+
|
|
114
|
+
(packs.sum(&:stability) / packs.size.to_f).round(10)
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def avg_depth(packs)
|
|
118
|
+
return 0.0 if packs.empty?
|
|
119
|
+
|
|
120
|
+
(packs.sum(&:depth) / packs.size.to_f).round(10)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def recent_cascades(count)
|
|
124
|
+
@cascade_history.last(count).map(&:to_h)
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'securerandom'
|
|
4
|
+
|
|
5
|
+
module Legion
|
|
6
|
+
module Extensions
|
|
7
|
+
module Agentic
|
|
8
|
+
module Defense
|
|
9
|
+
module Avalanche
|
|
10
|
+
module Helpers
|
|
11
|
+
class Cascade
|
|
12
|
+
include Constants
|
|
13
|
+
|
|
14
|
+
attr_reader :id, :cascade_type, :trigger_source, :started_at
|
|
15
|
+
attr_accessor :magnitude, :propagation_speed, :debris
|
|
16
|
+
|
|
17
|
+
def initialize(cascade_type:, trigger_source:, magnitude:, propagation_speed: 0.5, debris: [], **)
|
|
18
|
+
raise ArgumentError, "unknown cascade_type: #{cascade_type}" unless Constants::CASCADE_TYPES.include?(cascade_type)
|
|
19
|
+
|
|
20
|
+
@id = SecureRandom.uuid
|
|
21
|
+
@cascade_type = cascade_type
|
|
22
|
+
@trigger_source = trigger_source
|
|
23
|
+
@magnitude = magnitude.clamp(0.0, 1.0)
|
|
24
|
+
@propagation_speed = propagation_speed.clamp(0.0, 1.0)
|
|
25
|
+
@debris = Array(debris).dup
|
|
26
|
+
@active = true
|
|
27
|
+
@started_at = Time.now.utc
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def propagate!(rate = 0.1)
|
|
31
|
+
return unless @active
|
|
32
|
+
|
|
33
|
+
@magnitude = (@magnitude + rate.abs).clamp(0.0, 1.0).round(10)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def dissipate!(rate = 0.08)
|
|
37
|
+
@magnitude = (@magnitude - rate.abs).clamp(0.0, 1.0).round(10)
|
|
38
|
+
@active = false if @magnitude <= 0.0
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def active?
|
|
42
|
+
@active && @magnitude > 0.0
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def spent?
|
|
46
|
+
!@active || @magnitude <= 0.0
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def magnitude_label
|
|
50
|
+
Constants.label_for(:MAGNITUDE_LABELS, @magnitude)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def add_debris(item)
|
|
54
|
+
@debris << item
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def to_h
|
|
58
|
+
{
|
|
59
|
+
id: @id,
|
|
60
|
+
cascade_type: @cascade_type,
|
|
61
|
+
trigger_source: @trigger_source,
|
|
62
|
+
magnitude: @magnitude,
|
|
63
|
+
magnitude_label: magnitude_label,
|
|
64
|
+
propagation_speed: @propagation_speed,
|
|
65
|
+
debris: @debris.dup,
|
|
66
|
+
active: @active,
|
|
67
|
+
started_at: @started_at
|
|
68
|
+
}
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Agentic
|
|
6
|
+
module Defense
|
|
7
|
+
module Avalanche
|
|
8
|
+
module Helpers
|
|
9
|
+
module Constants
|
|
10
|
+
MAX_SNOWPACKS = 100
|
|
11
|
+
MAX_CASCADE_HISTORY = 500
|
|
12
|
+
TRIGGER_THRESHOLD = 0.75
|
|
13
|
+
ACCUMULATION_RATE = 0.06
|
|
14
|
+
MELT_RATE = 0.02
|
|
15
|
+
|
|
16
|
+
SNOWPACK_TYPES = %i[ideas emotions memories associations impulses].freeze
|
|
17
|
+
CASCADE_TYPES = %i[creative emotional analytical chaotic convergent].freeze
|
|
18
|
+
|
|
19
|
+
STABILITY_LABELS = {
|
|
20
|
+
(0.0...0.2) => :catastrophic,
|
|
21
|
+
(0.2...0.4) => :critical,
|
|
22
|
+
(0.4...0.6) => :unstable,
|
|
23
|
+
(0.6...0.8) => :moderate,
|
|
24
|
+
(0.8..1.0) => :bedrock
|
|
25
|
+
}.freeze
|
|
26
|
+
|
|
27
|
+
MAGNITUDE_LABELS = {
|
|
28
|
+
(0.0...0.2) => :minor,
|
|
29
|
+
(0.2...0.4) => :moderate,
|
|
30
|
+
(0.4...0.6) => :significant,
|
|
31
|
+
(0.6...0.8) => :major,
|
|
32
|
+
(0.8..1.0) => :devastating
|
|
33
|
+
}.freeze
|
|
34
|
+
|
|
35
|
+
def self.label_for(table, value)
|
|
36
|
+
const_get(table).find { |range, _| range.cover?(value.clamp(0.0, 1.0)) }&.last || :unknown
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'securerandom'
|
|
4
|
+
|
|
5
|
+
module Legion
|
|
6
|
+
module Extensions
|
|
7
|
+
module Agentic
|
|
8
|
+
module Defense
|
|
9
|
+
module Avalanche
|
|
10
|
+
module Helpers
|
|
11
|
+
class Snowpack
|
|
12
|
+
include Constants
|
|
13
|
+
|
|
14
|
+
attr_reader :id, :snowpack_type, :domain, :content, :created_at
|
|
15
|
+
attr_accessor :depth, :stability
|
|
16
|
+
|
|
17
|
+
def initialize(snowpack_type:, domain:, content:, depth: 0.0, stability: 1.0, **)
|
|
18
|
+
raise ArgumentError, "unknown snowpack_type: #{snowpack_type}" unless Constants::SNOWPACK_TYPES.include?(snowpack_type)
|
|
19
|
+
|
|
20
|
+
@id = SecureRandom.uuid
|
|
21
|
+
@snowpack_type = snowpack_type
|
|
22
|
+
@domain = domain
|
|
23
|
+
@content = content
|
|
24
|
+
@depth = depth.clamp(0.0, 1.0)
|
|
25
|
+
@stability = stability.clamp(0.0, 1.0)
|
|
26
|
+
@created_at = Time.now.utc
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def accumulate!(rate = Constants::ACCUMULATION_RATE)
|
|
30
|
+
@depth = (@depth + rate.abs).clamp(0.0, 1.0).round(10)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def compact!
|
|
34
|
+
@stability = (@stability + 0.05).clamp(0.0, 1.0).round(10)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def melt!(rate = Constants::MELT_RATE)
|
|
38
|
+
@depth = (@depth - rate.abs).clamp(0.0, 1.0).round(10)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def destabilize!(force)
|
|
42
|
+
@stability = (@stability - force.abs).clamp(0.0, 1.0).round(10)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def stable?
|
|
46
|
+
@stability >= 0.6
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def unstable?
|
|
50
|
+
@stability < 0.4
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def critical?
|
|
54
|
+
@stability < 0.2
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def stability_label
|
|
58
|
+
Constants.label_for(:STABILITY_LABELS, @stability)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def instability
|
|
62
|
+
(1.0 - @stability).round(10)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def to_h
|
|
66
|
+
{
|
|
67
|
+
id: @id,
|
|
68
|
+
snowpack_type: @snowpack_type,
|
|
69
|
+
domain: @domain,
|
|
70
|
+
content: @content,
|
|
71
|
+
depth: @depth,
|
|
72
|
+
stability: @stability,
|
|
73
|
+
stable: stable?,
|
|
74
|
+
unstable: unstable?,
|
|
75
|
+
critical: critical?,
|
|
76
|
+
stability_label: stability_label,
|
|
77
|
+
created_at: @created_at
|
|
78
|
+
}
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Legion
|
|
4
|
+
module Extensions
|
|
5
|
+
module Agentic
|
|
6
|
+
module Defense
|
|
7
|
+
module Avalanche
|
|
8
|
+
module Runners
|
|
9
|
+
module CognitiveAvalanche
|
|
10
|
+
extend self
|
|
11
|
+
|
|
12
|
+
include Legion::Extensions::Helpers::Lex if defined?(Legion::Extensions::Helpers::Lex)
|
|
13
|
+
|
|
14
|
+
def create_snowpack(snowpack_type: nil, domain: nil, content: nil,
|
|
15
|
+
depth: 0.0, stability: 1.0, engine: nil, **)
|
|
16
|
+
raise ArgumentError, 'snowpack_type is required' if snowpack_type.nil?
|
|
17
|
+
raise ArgumentError, 'domain is required' if domain.nil?
|
|
18
|
+
raise ArgumentError, 'content is required' if content.nil?
|
|
19
|
+
|
|
20
|
+
avalanche_engine(engine).create_snowpack(
|
|
21
|
+
snowpack_type: snowpack_type,
|
|
22
|
+
domain: domain,
|
|
23
|
+
content: content,
|
|
24
|
+
depth: depth,
|
|
25
|
+
stability: stability
|
|
26
|
+
)
|
|
27
|
+
rescue ArgumentError => e
|
|
28
|
+
{ success: false, error: e.message }
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def trigger(snowpack_id: nil, force: 0.5, cascade_type: :chaotic, engine: nil, **)
|
|
32
|
+
raise ArgumentError, 'snowpack_id is required' if snowpack_id.nil?
|
|
33
|
+
|
|
34
|
+
avalanche_engine(engine).trigger(
|
|
35
|
+
snowpack_id: snowpack_id,
|
|
36
|
+
force: force,
|
|
37
|
+
cascade_type: cascade_type
|
|
38
|
+
)
|
|
39
|
+
rescue ArgumentError => e
|
|
40
|
+
{ success: false, error: e.message }
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def accumulate(rate: Helpers::Constants::ACCUMULATION_RATE, engine: nil, **)
|
|
44
|
+
avalanche_engine(engine).accumulate_all!(rate: rate)
|
|
45
|
+
rescue ArgumentError => e
|
|
46
|
+
{ success: false, error: e.message }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def list_snowpacks(engine: nil, **)
|
|
50
|
+
eng = avalanche_engine(engine)
|
|
51
|
+
packs = eng.snowpacks.values.map(&:to_h)
|
|
52
|
+
{ success: true, snowpacks: packs, count: packs.size }
|
|
53
|
+
rescue ArgumentError => e
|
|
54
|
+
{ success: false, error: e.message }
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def terrain_status(engine: nil, **)
|
|
58
|
+
report = avalanche_engine(engine).terrain_report
|
|
59
|
+
{ success: true }.merge(report)
|
|
60
|
+
rescue ArgumentError => e
|
|
61
|
+
{ success: false, error: e.message }
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
def avalanche_engine(engine)
|
|
67
|
+
engine || @avalanche_engine ||= Helpers::AvalancheEngine.new
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'securerandom'
|
|
4
|
+
|
|
5
|
+
require 'legion/extensions/agentic/defense/avalanche/version'
|
|
6
|
+
require 'legion/extensions/agentic/defense/avalanche/helpers/constants'
|
|
7
|
+
require 'legion/extensions/agentic/defense/avalanche/helpers/snowpack'
|
|
8
|
+
require 'legion/extensions/agentic/defense/avalanche/helpers/cascade'
|
|
9
|
+
require 'legion/extensions/agentic/defense/avalanche/helpers/avalanche_engine'
|
|
10
|
+
require 'legion/extensions/agentic/defense/avalanche/runners/cognitive_avalanche'
|
|
11
|
+
require 'legion/extensions/agentic/defense/avalanche/client'
|
|
12
|
+
|
|
13
|
+
module Legion
|
|
14
|
+
module Extensions
|
|
15
|
+
module Agentic
|
|
16
|
+
module Defense
|
|
17
|
+
module Avalanche
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'legion/extensions/actors/every'
|
|
4
|
+
|
|
5
|
+
module Legion
|
|
6
|
+
module Extensions
|
|
7
|
+
module Agentic
|
|
8
|
+
module Defense
|
|
9
|
+
module Bias
|
|
10
|
+
module Actor
|
|
11
|
+
class Update < Legion::Extensions::Actors::Every
|
|
12
|
+
def runner_class
|
|
13
|
+
Legion::Extensions::Agentic::Defense::Bias::Runners::Bias
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def runner_function
|
|
17
|
+
'update_bias'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def time
|
|
21
|
+
60
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def run_now?
|
|
25
|
+
false
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def use_runner?
|
|
29
|
+
false
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def check_subtask?
|
|
33
|
+
false
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def generate_task?
|
|
37
|
+
false
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'legion/extensions/agentic/defense/bias/helpers/constants'
|
|
4
|
+
require 'legion/extensions/agentic/defense/bias/helpers/bias_event'
|
|
5
|
+
require 'legion/extensions/agentic/defense/bias/helpers/bias_detector'
|
|
6
|
+
require 'legion/extensions/agentic/defense/bias/helpers/bias_store'
|
|
7
|
+
require 'legion/extensions/agentic/defense/bias/runners/bias'
|
|
8
|
+
|
|
9
|
+
module Legion
|
|
10
|
+
module Extensions
|
|
11
|
+
module Agentic
|
|
12
|
+
module Defense
|
|
13
|
+
module Bias
|
|
14
|
+
class Client
|
|
15
|
+
include Runners::Bias
|
|
16
|
+
|
|
17
|
+
def initialize(**)
|
|
18
|
+
@bias_detector = Helpers::BiasDetector.new
|
|
19
|
+
@bias_store = Helpers::BiasStore.new
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
attr_reader :bias_detector, :bias_store
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|