lex-mesh 0.3.0 → 0.3.1

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: d736de5644beff024c6acc40ededd1eface48a64dc919b4f1033e0971a7af71f
4
- data.tar.gz: e58b0661aab721ebaf1c7f413691a41f2a5f0f1e455710b3d27f79ad687655fb
3
+ metadata.gz: 85f99c905c7878c400b57d6d7e1868838521ab8d2f7f5fad973d6a813c09f411
4
+ data.tar.gz: b567bb9e7d1defaf1224aa3184fe63c80bc20458fce0d70fb936251e81247634
5
5
  SHA512:
6
- metadata.gz: d1abfff1fe01a29d3b9be8ee75c5f949f753a9fdf33df340e1362ef758236fb411a826eb0ae3c448bc330b8bc06cff725f35d10b5767f39ca7a8ffcb06969782
7
- data.tar.gz: e1266fc12dd23f183439f2ed5c1d2a21a1c11b824652e918b6fc398df40eea46cc5aa0dbabbb14e99b8f41aa4b0cd2e99d71a259aaba8de595088c51336c7a62
6
+ metadata.gz: a7b28d8162556724cae30e898607e38633ad7749d98d10a273188c67c203517fb8aff0fa7408e365c2808f1e4dfc95bca5625077187ce7c814cc6ee30e2d5053
7
+ data.tar.gz: e0e21868a89d6856b83c92d3034aa85d6ba9a1cda02f8afc62a8921c434211e05ad2764395c03b30f3439ca1eb89aa7ae3f616a07e15988b0af28932713f80c2
data/lex-mesh.gemspec CHANGED
@@ -28,4 +28,12 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.add_dependency 'base64'
30
30
  spec.add_dependency 'ed25519', '~> 1.3'
31
+
32
+ spec.add_dependency 'legion-cache', '>= 1.3.11'
33
+ spec.add_dependency 'legion-crypt', '>= 1.4.9'
34
+ spec.add_dependency 'legion-data', '>= 1.4.17'
35
+ spec.add_dependency 'legion-json', '>= 1.2.1'
36
+ spec.add_dependency 'legion-logging', '>= 1.3.2'
37
+ spec.add_dependency 'legion-settings', '>= 1.3.14'
38
+ spec.add_dependency 'legion-transport', '>= 1.3.9'
31
39
  end
@@ -66,7 +66,7 @@ module Legion
66
66
  detail: { to: record[:to_agent_id], depth: record[:depth], consent: record[:consent_level] }
67
67
  ).publish
68
68
  rescue StandardError => e
69
- Legion::Logging.warn "[mesh] failed to publish #{event_type}: #{e.message}" if defined?(Legion::Logging)
69
+ log.warn "[mesh] failed to publish #{event_type}: #{e.message}"
70
70
  end
71
71
 
72
72
  def delegation_tracker
@@ -10,25 +10,25 @@ module Legion
10
10
 
11
11
  def register(agent_id:, capabilities: [], endpoint: nil, **)
12
12
  mesh_registry.register_agent(agent_id, capabilities: capabilities, endpoint: endpoint)
13
- Legion::Logging.info "[mesh] registered: agent=#{agent_id} capabilities=#{capabilities.join(',')}"
13
+ log.info "[mesh] registered: agent=#{agent_id} capabilities=#{capabilities.join(',')}"
14
14
  { registered: true, agent_id: agent_id }
15
15
  end
16
16
 
17
17
  def unregister(agent_id:, **)
18
18
  result = mesh_registry.unregister_agent(agent_id)
19
19
  if result
20
- Legion::Logging.info "[mesh] unregistered: agent=#{agent_id}"
20
+ log.info "[mesh] unregistered: agent=#{agent_id}"
21
21
  publish_mesh_departure(agent_id: agent_id, capabilities: result[:capabilities] || [])
22
22
  { unregistered: true }
23
23
  else
24
- Legion::Logging.debug "[mesh] unregister failed: agent=#{agent_id} not found"
24
+ log.debug "[mesh] unregister failed: agent=#{agent_id} not found"
25
25
  { error: :not_found }
26
26
  end
27
27
  end
28
28
 
29
29
  def heartbeat(agent_id:, **)
30
30
  result = mesh_registry.heartbeat(agent_id)
31
- Legion::Logging.debug "[mesh] heartbeat: agent=#{agent_id} alive=#{!result.nil?}"
31
+ log.debug "[mesh] heartbeat: agent=#{agent_id} alive=#{!result.nil?}"
32
32
  result ? { alive: true } : { error: :not_registered }
33
33
  end
34
34
 
@@ -38,13 +38,13 @@ module Legion
38
38
  msg = mesh_registry.route_message(from: from, to: to, capability: capability,
39
39
  pattern: pattern, payload: payload)
40
40
  count = msg[:delivered_to].size
41
- Legion::Logging.debug "[mesh] message: from=#{from} pattern=#{pattern} delivered=#{count} to=#{msg[:delivered_to].join(',')}"
41
+ log.debug "[mesh] message: from=#{from} pattern=#{pattern} delivered=#{count} to=#{msg[:delivered_to].join(',')}"
42
42
  { sent: true, delivered_to: msg[:delivered_to], count: count }
43
43
  end
44
44
 
45
45
  def find_agents(capability:, **)
46
46
  agents = mesh_registry.find_by_capability(capability)
47
- Legion::Logging.debug "[mesh] find: capability=#{capability} found=#{agents.size}"
47
+ log.debug "[mesh] find: capability=#{capability} found=#{agents.size}"
48
48
  { agents: agents.map { |a| a[:agent_id] }, count: agents.size }
49
49
  end
50
50
 
@@ -52,14 +52,14 @@ module Legion
52
52
  online = mesh_registry.online_agents
53
53
  total = mesh_registry.count
54
54
  msgs = mesh_registry.messages.size
55
- Legion::Logging.debug "[mesh] status: total=#{total} online=#{online.size} messages=#{msgs}"
55
+ log.debug "[mesh] status: total=#{total} online=#{online.size} messages=#{msgs}"
56
56
  { total: total, online: online.size, message_count: msgs }
57
57
  end
58
58
 
59
59
  def expire_silent_agents(**)
60
60
  expired = mesh_registry.expire_silent_agents
61
61
  expired.each do |agent_id|
62
- Legion::Logging.info "[mesh] expired silent agent: #{agent_id}"
62
+ log.info "[mesh] expired silent agent: #{agent_id}"
63
63
  end
64
64
  { success: true, expired: expired, count: expired.size }
65
65
  end
@@ -116,9 +116,9 @@ module Legion
116
116
  Legion::Extensions::Mesh::Transport::Messages::MeshDeparture.new(
117
117
  agent_id: agent_id, capabilities: capabilities
118
118
  ).publish
119
- Legion::Logging.debug "[mesh] departure signal published: agent=#{agent_id}"
119
+ log.debug "[mesh] departure signal published: agent=#{agent_id}"
120
120
  rescue StandardError => e
121
- Legion::Logging.warn "[mesh] failed to publish departure signal: #{e.message}"
121
+ log.warn "[mesh] failed to publish departure signal: #{e.message}"
122
122
  end
123
123
 
124
124
  def publish_gossip_message(peers)
@@ -75,10 +75,12 @@ module Legion
75
75
 
76
76
  def local_agent_id
77
77
  if defined?(Legion::Settings)
78
- Legion::Settings['client']['name']
78
+ Legion::Settings[:client][:name]
79
79
  else
80
80
  'unknown'
81
81
  end
82
+ rescue StandardError
83
+ 'unknown'
82
84
  end
83
85
 
84
86
  def publish_preference_response(msg, profile)
@@ -37,7 +37,7 @@ module Legion
37
37
  payload: { type: :task_request, correlation_id: correlation_id,
38
38
  task: task, payload: payload, reply_to: from })
39
39
 
40
- Legion::Logging.info "[mesh-task] request: from=#{from} to=#{target_id} task=#{task} cid=#{correlation_id[0..11]}"
40
+ log.info "[mesh-task] request: from=#{from} to=#{target_id} task=#{task} cid=#{correlation_id[0..11]}"
41
41
  { success: true, correlation_id: correlation_id, delegation_id: delegation[:delegation_id],
42
42
  target_agent: target_id }
43
43
  end
@@ -45,7 +45,7 @@ module Legion
45
45
  def handle_task_reply(correlation_id:, result:, **)
46
46
  resolved = task_pending.resolve(correlation_id: correlation_id, result: result)
47
47
  if resolved
48
- Legion::Logging.debug "[mesh-task] reply resolved: cid=#{correlation_id[0..11]}"
48
+ log.debug "[mesh-task] reply resolved: cid=#{correlation_id[0..11]}"
49
49
  { success: true, resolved: true, correlation_id: correlation_id }
50
50
  else
51
51
  { success: false, reason: :not_found, correlation_id: correlation_id }
@@ -58,7 +58,7 @@ module Legion
58
58
 
59
59
  def expire_pending_tasks(**)
60
60
  expired = task_pending.expire
61
- Legion::Logging.debug "[mesh-task] expired #{expired.size} pending tasks" unless expired.empty?
61
+ log.debug "[mesh-task] expired #{expired.size} pending tasks" unless expired.empty?
62
62
  { success: true, expired_count: expired.size, expired_ids: expired }
63
63
  end
64
64
 
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Mesh
6
- VERSION = '0.3.0'
6
+ VERSION = '0.3.1'
7
7
  end
8
8
  end
9
9
  end
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,43 @@
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'
4
11
 
5
12
  module Legion
6
- module Logging
7
- def self.debug(_msg); end
8
- def self.info(_msg); end
9
- def self.warn(_msg); end
10
- def self.error(_msg); end
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
 
38
+ Legion::Settings.loader.settings[:client] ||= {}
39
+ Legion::Settings.loader.settings[:client][:name] = 'test-agent'
40
+
14
41
  require 'legion/extensions/mesh'
15
42
 
16
43
  RSpec.configure do |config|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-mesh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -37,6 +37,104 @@ dependencies:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '1.3'
40
+ - !ruby/object:Gem::Dependency
41
+ name: legion-cache
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.3.11
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.3.11
54
+ - !ruby/object:Gem::Dependency
55
+ name: legion-crypt
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 1.4.9
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.4.9
68
+ - !ruby/object:Gem::Dependency
69
+ name: legion-data
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.4.17
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 1.4.17
82
+ - !ruby/object:Gem::Dependency
83
+ name: legion-json
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 1.2.1
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 1.2.1
96
+ - !ruby/object:Gem::Dependency
97
+ name: legion-logging
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.3.2
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.2
110
+ - !ruby/object:Gem::Dependency
111
+ name: legion-settings
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 1.3.14
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: 1.3.14
124
+ - !ruby/object:Gem::Dependency
125
+ name: legion-transport
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 1.3.9
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: 1.3.9
40
138
  description: Agent-to-agent mesh communication protocol for brain-modeled agentic
41
139
  AI
42
140
  email: