lex-coldstart 0.1.0 → 0.1.2
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
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f19f29521fd880a8354fb8e598df257f12773b16b23e3d5425b8961c31454b8b
|
|
4
|
+
data.tar.gz: ad5904f977bcae3f39598caba2ead15addcc31aadb7be337443fe1394e15cf5d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2f15ed7d23e7a3db41f906b0ed4d604fdd743ef4b03b698ffdddd0caa50789f67668f56522550d3b20c129468a8b80b8195d3273d4573fe6fbb5a8fc4c78bf4d
|
|
7
|
+
data.tar.gz: ea7ec53dacc0e4e2e7ed61d40fe4c3359b1a4ee1569bbd4d97cf91d95dd8df1730e50142df141482d33586e5408bbc416bf68bd7fcac8743cee356fbefeda93d
|
data/lex-coldstart.gemspec
CHANGED
|
@@ -25,6 +25,13 @@ Gem::Specification.new do |spec|
|
|
|
25
25
|
Dir.glob('{lib,spec}/**/*') + %w[lex-coldstart.gemspec Gemfile]
|
|
26
26
|
end
|
|
27
27
|
spec.require_paths = ['lib']
|
|
28
|
+
spec.add_dependency 'legion-cache', '>= 1.3.11'
|
|
29
|
+
spec.add_dependency 'legion-crypt', '>= 1.4.9'
|
|
30
|
+
spec.add_dependency 'legion-data', '>= 1.4.17'
|
|
31
|
+
spec.add_dependency 'legion-json', '>= 1.2.1'
|
|
32
|
+
spec.add_dependency 'legion-logging', '>= 1.3.2'
|
|
33
|
+
spec.add_dependency 'legion-settings', '>= 1.3.14'
|
|
34
|
+
spec.add_dependency 'legion-transport', '>= 1.3.9'
|
|
28
35
|
spec.add_development_dependency 'sequel', '~> 5.70'
|
|
29
36
|
spec.add_development_dependency 'sqlite3', '~> 2.0'
|
|
30
37
|
end
|
|
@@ -14,7 +14,7 @@ module Legion
|
|
|
14
14
|
dur = Helpers::Imprint::IMPRINT_DURATION
|
|
15
15
|
mul = Helpers::Imprint::IMPRINT_MULTIPLIER
|
|
16
16
|
tier = Helpers::Imprint::IMPRINT_CONSENT_TIER
|
|
17
|
-
|
|
17
|
+
log.info "[coldstart] imprint begun: duration=#{dur}s multiplier=#{mul}x consent=#{tier}"
|
|
18
18
|
{
|
|
19
19
|
started: true,
|
|
20
20
|
imprint_duration: Helpers::Imprint::IMPRINT_DURATION,
|
|
@@ -25,8 +25,8 @@ module Legion
|
|
|
25
25
|
|
|
26
26
|
def record_observation(**)
|
|
27
27
|
bootstrap.record_observation
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
log.debug "[coldstart] observation: count=#{bootstrap.observation_count} " \
|
|
29
|
+
"calibration=#{bootstrap.calibration_state} layer=#{bootstrap.current_layer}"
|
|
30
30
|
{
|
|
31
31
|
observation_count: bootstrap.observation_count,
|
|
32
32
|
calibration_state: bootstrap.calibration_state,
|
|
@@ -36,20 +36,20 @@ module Legion
|
|
|
36
36
|
|
|
37
37
|
def coldstart_progress(**)
|
|
38
38
|
progress = bootstrap.progress
|
|
39
|
-
|
|
39
|
+
log.debug "[coldstart] progress: #{progress.inspect}"
|
|
40
40
|
progress
|
|
41
41
|
end
|
|
42
42
|
|
|
43
43
|
def imprint_active?(**) # rubocop:disable Naming/PredicateMethod
|
|
44
44
|
active = bootstrap.imprint_active?
|
|
45
|
-
|
|
45
|
+
log.debug "[coldstart] imprint_active?=#{active}"
|
|
46
46
|
{ active: active }
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
def current_multiplier(**)
|
|
50
50
|
active = bootstrap.imprint_active?
|
|
51
51
|
multiplier = active ? Helpers::Imprint::IMPRINT_MULTIPLIER : 1.0
|
|
52
|
-
|
|
52
|
+
log.debug "[coldstart] multiplier=#{multiplier} imprint_active=#{active}"
|
|
53
53
|
{ multiplier: multiplier, imprint_active: active }
|
|
54
54
|
end
|
|
55
55
|
|
|
@@ -8,21 +8,21 @@ module Legion
|
|
|
8
8
|
include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
|
|
9
9
|
Legion::Extensions::Helpers.const_defined?(:Lex)
|
|
10
10
|
|
|
11
|
-
# Ingest a single Claude memory or CLAUDE.md file into
|
|
12
|
-
# If lex-memory is not loaded, returns the parsed traces without storing.
|
|
11
|
+
# Ingest a single Claude memory or CLAUDE.md file into agentic memory traces.
|
|
12
|
+
# If lex-agentic-memory is not loaded, returns the parsed traces without storing.
|
|
13
13
|
#
|
|
14
14
|
# @param file_path [String] absolute path to the markdown file
|
|
15
|
-
# @param store_traces [Boolean] whether to store into
|
|
15
|
+
# @param store_traces [Boolean] whether to store into agentic memory (default: true)
|
|
16
16
|
# @return [Hash] { file:, file_type:, traces_parsed:, traces_stored:, traces: }
|
|
17
17
|
def ingest_file(file_path:, store_traces: true, **)
|
|
18
18
|
unless File.exist?(file_path)
|
|
19
|
-
|
|
19
|
+
log.warn "[coldstart:ingest] file not found: #{file_path}"
|
|
20
20
|
return { file: file_path, error: 'file not found' }
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
candidates = Helpers::ClaudeParser.parse_file(file_path)
|
|
24
24
|
file_type = Helpers::ClaudeParser.detect_file_type(file_path)
|
|
25
|
-
|
|
25
|
+
log.info "[coldstart:ingest] parsed #{candidates.size} traces from #{file_path} (#{file_type})"
|
|
26
26
|
|
|
27
27
|
stored = store_traces ? store_candidates(candidates) : []
|
|
28
28
|
|
|
@@ -39,17 +39,17 @@ module Legion
|
|
|
39
39
|
#
|
|
40
40
|
# @param dir_path [String] absolute path to the directory
|
|
41
41
|
# @param pattern [String] glob pattern (default: '**/{CLAUDE,MEMORY}.md')
|
|
42
|
-
# @param store_traces [Boolean] whether to store into
|
|
42
|
+
# @param store_traces [Boolean] whether to store into agentic memory (default: true)
|
|
43
43
|
# @return [Hash] { directory:, files_found:, total_parsed:, total_stored:, files: }
|
|
44
44
|
def ingest_directory(dir_path:, pattern: '**/{CLAUDE,MEMORY}.md', store_traces: true, **)
|
|
45
45
|
unless Dir.exist?(dir_path)
|
|
46
|
-
|
|
46
|
+
log.warn "[coldstart:ingest] directory not found: #{dir_path}"
|
|
47
47
|
return { directory: dir_path, error: 'directory not found' }
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
candidates = Helpers::ClaudeParser.parse_directory(dir_path, pattern: pattern)
|
|
51
51
|
files = candidates.map { |c| c[:source_file] }.uniq
|
|
52
|
-
|
|
52
|
+
log.info "[coldstart:ingest] parsed #{candidates.size} traces from #{files.size} files in #{dir_path}"
|
|
53
53
|
|
|
54
54
|
stored = store_traces ? store_candidates(candidates) : []
|
|
55
55
|
|
|
@@ -101,14 +101,14 @@ module Legion
|
|
|
101
101
|
)
|
|
102
102
|
stored << result if result
|
|
103
103
|
rescue StandardError => e
|
|
104
|
-
|
|
104
|
+
log.warn "[coldstart:ingest] failed to store trace: #{e.message}"
|
|
105
105
|
end
|
|
106
106
|
|
|
107
107
|
# Flush the cache-backed store if it supports it
|
|
108
108
|
store = runner.send(:default_store)
|
|
109
109
|
store.flush if store.respond_to?(:flush)
|
|
110
110
|
|
|
111
|
-
|
|
111
|
+
log.info "[coldstart:ingest] stored #{stored.size} traces (imprint_active=#{imprint})"
|
|
112
112
|
|
|
113
113
|
# Co-activate traces from the same section to form Hebbian links
|
|
114
114
|
coactivate_section_traces(stored, candidates, runner)
|
|
@@ -117,13 +117,15 @@ module Legion
|
|
|
117
117
|
end
|
|
118
118
|
|
|
119
119
|
def memory_available?
|
|
120
|
-
Legion::Extensions.const_defined?(:
|
|
121
|
-
Legion::Extensions::
|
|
122
|
-
Legion::Extensions::Memory
|
|
120
|
+
Legion::Extensions.const_defined?(:Agentic) &&
|
|
121
|
+
Legion::Extensions::Agentic.const_defined?(:Memory) &&
|
|
122
|
+
Legion::Extensions::Agentic::Memory.const_defined?(:Trace) &&
|
|
123
|
+
Legion::Extensions::Agentic::Memory::Trace.const_defined?(:Runners) &&
|
|
124
|
+
Legion::Extensions::Agentic::Memory::Trace::Runners.const_defined?(:Traces)
|
|
123
125
|
end
|
|
124
126
|
|
|
125
127
|
def memory_runner
|
|
126
|
-
@memory_runner ||= Object.new.extend(Legion::Extensions::Memory::Runners::Traces)
|
|
128
|
+
@memory_runner ||= Object.new.extend(Legion::Extensions::Agentic::Memory::Trace::Runners::Traces)
|
|
127
129
|
end
|
|
128
130
|
|
|
129
131
|
def imprint_active_now?
|
|
@@ -163,9 +165,9 @@ module Legion
|
|
|
163
165
|
end
|
|
164
166
|
end
|
|
165
167
|
|
|
166
|
-
|
|
168
|
+
log.debug "[coldstart:ingest] co-activated #{coactivations} trace pairs across #{groups.size} sections"
|
|
167
169
|
rescue StandardError => e
|
|
168
|
-
|
|
170
|
+
log.warn "[coldstart:ingest] co-activation failed: #{e.message}"
|
|
169
171
|
end
|
|
170
172
|
end
|
|
171
173
|
end
|
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,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lex-coldstart
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Esity
|
|
@@ -9,6 +9,104 @@ bindir: bin
|
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
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
|
- !ruby/object:Gem::Dependency
|
|
13
111
|
name: sequel
|
|
14
112
|
requirement: !ruby/object:Gem::Requirement
|