agent99 0.0.3 → 0.0.5
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/A2A_SPEC-dev.md +1829 -0
- data/CHANGELOG.md +38 -0
- data/COMMITS.md +196 -0
- data/DOCS.md +96 -0
- data/README.md +212 -84
- data/Rakefile +62 -0
- data/docs/AI/htm.md +215 -0
- data/docs/AI/htm.rb +141 -0
- data/docs/AI/htm_demo.db +0 -0
- data/docs/AI/notes_on_htm_implementation.md +1319 -0
- data/docs/AI/some_code.rb +692 -0
- data/docs/advanced-topics/a2a-protocol.md +13 -0
- data/docs/{advanced_features.md → advanced-topics/advanced-features.md} +9 -4
- data/docs/{control_actions.md → advanced-topics/control-actions.md} +2 -0
- data/docs/advanced-topics/model-context-protocol.md +4 -0
- data/docs/advanced-topics/multi-agent-processing.md +674 -0
- data/docs/agent-development/request-response-handling.md +512 -0
- data/docs/agent99_framework/central_registry.md +94 -0
- data/docs/agent99_framework/message_client.md +120 -0
- data/docs/agent99_framework/registry_client.md +119 -0
- data/docs/api-reference/agent99-base.md +463 -0
- data/docs/api-reference/message-clients.md +495 -0
- data/docs/{api_reference.md → api-reference/overview.md} +14 -4
- data/docs/api-reference/registry-client.md +470 -0
- data/docs/api-reference/schemas.md +518 -0
- data/docs/assets/css/custom.css +27 -0
- data/docs/assets/images/agent-lifecycle.svg +73 -0
- data/docs/assets/images/agent-registry-process.svg +86 -0
- data/docs/assets/images/agent-registry-processes.svg +114 -0
- data/docs/assets/images/agent-types-overview.svg +51 -0
- data/docs/assets/images/agent99-architecture.svg +85 -0
- data/docs/assets/images/agent99_logo.png +0 -0
- data/docs/assets/images/control-actions-state.svg +83 -0
- data/docs/assets/images/knowledge-graph.svg +77 -0
- data/docs/assets/images/message-processing-flow.svg +148 -0
- data/docs/assets/images/multi-agent-system.svg +66 -0
- data/docs/assets/images/proxy-pattern-sequence.svg +48 -0
- data/docs/assets/images/request-flow.svg +97 -0
- data/docs/assets/images/request-processing-lifecycle.svg +50 -0
- data/docs/assets/images/request-response-sequence.svg +39 -0
- data/docs/{agent_lifecycle.md → core-concepts/agent-lifecycle.md} +2 -0
- data/docs/core-concepts/agent-types.md +255 -0
- data/docs/{architecture.md → core-concepts/architecture.md} +5 -5
- data/docs/core-concepts/what-is-an-agent.md +293 -0
- data/docs/diagrams/message-flow-sequence.svg +198 -0
- data/docs/diagrams/p2p-network-topology.svg +181 -0
- data/docs/diagrams/smart-transport-routing.svg +165 -0
- data/docs/diagrams/three-layer-architecture.svg +77 -0
- data/docs/diagrams/transport-extension-api.svg +309 -0
- data/docs/diagrams/transport-extension-architecture.svg +234 -0
- data/docs/diagrams/transport-selection-flowchart.svg +264 -0
- data/docs/examples/advanced-examples.md +951 -0
- data/docs/examples/basic-examples.md +268 -0
- data/docs/{agent_discovery.md → framework-components/agent-discovery.md} +9 -5
- data/docs/{agent_registry_processes.md → framework-components/agent-registry.md} +9 -3
- data/docs/{message_processing.md → framework-components/message-processing.md} +3 -1
- data/docs/getting-started/basic-example.md +306 -0
- data/docs/getting-started/installation.md +160 -0
- data/docs/getting-started/overview.md +64 -0
- data/docs/getting-started/quick-start.md +179 -0
- data/docs/index.md +97 -0
- data/docs/operations/breaking-changes.md +26 -0
- data/examples/DEMO.md +148 -0
- data/examples/README.md +50 -0
- data/examples/agent_watcher.rb +5 -1
- data/examples/bad_agent.rb +32 -0
- data/examples/chief_agent.rb +17 -6
- data/examples/control.rb +16 -7
- data/examples/example_agent.rb +16 -3
- data/examples/maxwell_agent86.rb +15 -26
- data/examples/registry.rb +10 -9
- data/examples/run_demo.rb +433 -0
- data/lib/agent99/agent_discovery.rb +4 -0
- data/lib/agent99/agent_lifecycle.rb +34 -10
- data/lib/agent99/amqp_message_client.rb +2 -2
- data/lib/agent99/base.rb +6 -2
- data/lib/agent99/message_processing.rb +6 -10
- data/lib/agent99/registry_client.rb +15 -11
- data/lib/agent99/tcp_message_client.rb +183 -0
- data/lib/agent99/version.rb +1 -1
- data/lib/agent99.rb +1 -1
- data/mkdocs.yml +195 -0
- data/p2p_plan.md +533 -0
- data/p2p_roadmap.md +299 -0
- data/registry_plan.md +1818 -0
- metadata +93 -30
- data/docs/README.md +0 -57
- data/docs/diagrams/agent_registry_processes.dot +0 -42
- data/docs/diagrams/agent_registry_processes.png +0 -0
- data/docs/diagrams/high_level_architecture.dot +0 -26
- data/docs/diagrams/high_level_architecture.png +0 -0
- data/docs/diagrams/request_flow.dot +0 -42
- data/docs/diagrams/request_flow.png +0 -0
- /data/docs/{extending_the_framework.md → advanced-topics/extending-the-framework.md} +0 -0
- /data/docs/{custom_agent_implementation.md → agent-development/custom-agent-implementation.md} +0 -0
- /data/docs/{error_handling_and_logging.md → agent-development/error-handling-and-logging.md} +0 -0
- /data/docs/{schema_definition.md → agent-development/schema-definition.md} +0 -0
- /data/docs/{messaging_system.md → framework-components/messaging-system.md} +0 -0
- /data/docs/{configuration.md → operations/configuration.md} +0 -0
- /data/docs/{preformance_considerations.md → operations/performance-considerations.md} +0 -0
- /data/docs/{security.md → operations/security.md} +0 -0
- /data/docs/{troubleshooting.md → operations/troubleshooting.md} +0 -0
@@ -0,0 +1,309 @@
|
|
1
|
+
<svg width="1000" height="900" xmlns="http://www.w3.org/2000/svg">
|
2
|
+
<!-- Background transparent -->
|
3
|
+
|
4
|
+
<!-- Title -->
|
5
|
+
<text x="500" y="30" text-anchor="middle" fill="#f7fafc"
|
6
|
+
font-family="Arial, sans-serif" font-size="20" font-weight="bold">
|
7
|
+
SmartMessage Transport Extension API Design
|
8
|
+
</text>
|
9
|
+
|
10
|
+
<!-- Core SmartMessage Interface -->
|
11
|
+
<rect x="50" y="70" width="900" height="120"
|
12
|
+
fill="#553c9a" stroke="#7c3aed" stroke-width="2" rx="8"/>
|
13
|
+
<text x="500" y="100" text-anchor="middle" fill="#e9d5ff"
|
14
|
+
font-family="Arial, sans-serif" font-size="16" font-weight="bold">
|
15
|
+
SmartMessage::Transport::Base (Core Interface)
|
16
|
+
</text>
|
17
|
+
|
18
|
+
<!-- Core methods -->
|
19
|
+
<text x="80" y="125" fill="#c4b5fd"
|
20
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
21
|
+
def publish(message, options = {})
|
22
|
+
</text>
|
23
|
+
<text x="350" y="125" fill="#c4b5fd"
|
24
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
25
|
+
def subscribe(queue, &block)
|
26
|
+
</text>
|
27
|
+
<text x="620" y="125" fill="#c4b5fd"
|
28
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
29
|
+
def connect
|
30
|
+
</text>
|
31
|
+
<text x="750" y="125" fill="#c4b5fd"
|
32
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
33
|
+
def disconnect
|
34
|
+
</text>
|
35
|
+
|
36
|
+
<text x="80" y="145" fill="#c4b5fd"
|
37
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
38
|
+
def setup(config)
|
39
|
+
</text>
|
40
|
+
<text x="250" y="145" fill="#c4b5fd"
|
41
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
42
|
+
def healthy?
|
43
|
+
</text>
|
44
|
+
<text x="380" y="145" fill="#c4b5fd"
|
45
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
46
|
+
def stats
|
47
|
+
</text>
|
48
|
+
<text x="500" y="145" fill="#c4b5fd"
|
49
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
50
|
+
def cleanup
|
51
|
+
</text>
|
52
|
+
|
53
|
+
<text x="80" y="165" fill="#a78bfa"
|
54
|
+
font-family="Arial, sans-serif" font-size="10">
|
55
|
+
Required methods all transport extensions must implement
|
56
|
+
</text>
|
57
|
+
|
58
|
+
<!-- Extension Implementations -->
|
59
|
+
|
60
|
+
<!-- AMQP Extension -->
|
61
|
+
<rect x="50" y="220" width="430" height="160"
|
62
|
+
fill="#7c2d12" stroke="#dc2626" stroke-width="2" rx="8" opacity="0.9"/>
|
63
|
+
<text x="265" y="245" text-anchor="middle" fill="#fef2f2"
|
64
|
+
font-family="Arial, sans-serif" font-size="14" font-weight="bold">
|
65
|
+
smart_message-transport-amqp
|
66
|
+
</text>
|
67
|
+
|
68
|
+
<text x="70" y="270" fill="#fecaca"
|
69
|
+
font-family="monospace" font-size="10">
|
70
|
+
class SmartMessage::Transport::AMQP < Base
|
71
|
+
</text>
|
72
|
+
<text x="70" y="290" fill="#fecaca"
|
73
|
+
font-family="monospace" font-size="9">
|
74
|
+
def publish(message, options = {})
|
75
|
+
</text>
|
76
|
+
<text x="90" y="305" fill="#fca5a5"
|
77
|
+
font-family="monospace" font-size="9">
|
78
|
+
@bunny_exchange.publish(message.to_json,
|
79
|
+
</text>
|
80
|
+
<text x="90" y="320" fill="#fca5a5"
|
81
|
+
font-family="monospace" font-size="9">
|
82
|
+
routing_key: message.to)
|
83
|
+
</text>
|
84
|
+
<text x="70" y="340" fill="#fecaca"
|
85
|
+
font-family="monospace" font-size="9">
|
86
|
+
def subscribe(queue, &block)
|
87
|
+
</text>
|
88
|
+
<text x="90" y="355" fill="#fca5a5"
|
89
|
+
font-family="monospace" font-size="9">
|
90
|
+
@bunny_queue.subscribe do |delivery, props, body|
|
91
|
+
</text>
|
92
|
+
<text x="90" y="370" fill="#fca5a5"
|
93
|
+
font-family="monospace" font-size="9">
|
94
|
+
yield SmartMessage.parse(body)
|
95
|
+
</text>
|
96
|
+
|
97
|
+
<!-- Lanet Extension -->
|
98
|
+
<rect x="520" y="220" width="430" height="160"
|
99
|
+
fill="#065f46" stroke="#10b981" stroke-width="2" rx="8" opacity="0.9"/>
|
100
|
+
<text x="735" y="245" text-anchor="middle" fill="#d1fae5"
|
101
|
+
font-family="Arial, sans-serif" font-size="14" font-weight="bold">
|
102
|
+
smart_message-transport-lanet
|
103
|
+
</text>
|
104
|
+
|
105
|
+
<text x="540" y="270" fill="#a7f3d0"
|
106
|
+
font-family="monospace" font-size="10">
|
107
|
+
class SmartMessage::Transport::Lanet < Base
|
108
|
+
</text>
|
109
|
+
<text x="540" y="290" fill="#a7f3d0"
|
110
|
+
font-family="monospace" font-size="9">
|
111
|
+
def publish(message, options = {})
|
112
|
+
</text>
|
113
|
+
<text x="560" y="305" fill="#6ee7b7"
|
114
|
+
font-family="monospace" font-size="9">
|
115
|
+
target_ip = resolve_agent_ip(message.to)
|
116
|
+
</text>
|
117
|
+
<text x="560" y="320" fill="#6ee7b7"
|
118
|
+
font-family="monospace" font-size="9">
|
119
|
+
@lanet.send_to(target_ip, message.to_json)
|
120
|
+
</text>
|
121
|
+
<text x="540" y="340" fill="#a7f3d0"
|
122
|
+
font-family="monospace" font-size="9">
|
123
|
+
def subscribe(queue, &block)
|
124
|
+
</text>
|
125
|
+
<text x="560" y="355" fill="#6ee7b7"
|
126
|
+
font-family="monospace" font-size="9">
|
127
|
+
@lanet.listen do |msg|
|
128
|
+
</text>
|
129
|
+
<text x="560" y="370" fill="#6ee7b7"
|
130
|
+
font-family="monospace" font-size="9">
|
131
|
+
yield SmartMessage.parse(msg)
|
132
|
+
</text>
|
133
|
+
|
134
|
+
<!-- NATS Extension -->
|
135
|
+
<rect x="50" y="410" width="430" height="160"
|
136
|
+
fill="#1e40af" stroke="#3b82f6" stroke-width="2" rx="8" opacity="0.9"/>
|
137
|
+
<text x="265" y="435" text-anchor="middle" fill="#dbeafe"
|
138
|
+
font-family="Arial, sans-serif" font-size="14" font-weight="bold">
|
139
|
+
smart_message-transport-nats
|
140
|
+
</text>
|
141
|
+
|
142
|
+
<text x="70" y="460" fill="#bfdbfe"
|
143
|
+
font-family="monospace" font-size="10">
|
144
|
+
class SmartMessage::Transport::NATS < Base
|
145
|
+
</text>
|
146
|
+
<text x="70" y="480" fill="#bfdbfe"
|
147
|
+
font-family="monospace" font-size="9">
|
148
|
+
def publish(message, options = {})
|
149
|
+
</text>
|
150
|
+
<text x="90" y="495" fill="#93c5fd"
|
151
|
+
font-family="monospace" font-size="9">
|
152
|
+
subject = build_subject(message)
|
153
|
+
</text>
|
154
|
+
<text x="90" y="510" fill="#93c5fd"
|
155
|
+
font-family="monospace" font-size="9">
|
156
|
+
@nats.publish(subject, message.to_json)
|
157
|
+
</text>
|
158
|
+
<text x="70" y="530" fill="#bfdbfe"
|
159
|
+
font-family="monospace" font-size="9">
|
160
|
+
def subscribe(queue, &block)
|
161
|
+
</text>
|
162
|
+
<text x="90" y="545" fill="#93c5fd"
|
163
|
+
font-family="monospace" font-size="9">
|
164
|
+
@nats.subscribe(queue) do |msg|
|
165
|
+
</text>
|
166
|
+
<text x="90" y="560" fill="#93c5fd"
|
167
|
+
font-family="monospace" font-size="9">
|
168
|
+
yield SmartMessage.parse(msg.data)
|
169
|
+
</text>
|
170
|
+
|
171
|
+
<!-- Plugin Registration -->
|
172
|
+
<rect x="520" y="410" width="430" height="160"
|
173
|
+
fill="#1f2937" stroke="#374151" stroke-width="2" rx="8" opacity="0.9"/>
|
174
|
+
<text x="735" y="435" text-anchor="middle" fill="#f9fafb"
|
175
|
+
font-family="Arial, sans-serif" font-size="14" font-weight="bold">
|
176
|
+
Plugin Registration System
|
177
|
+
</text>
|
178
|
+
|
179
|
+
<text x="540" y="460" fill="#e5e7eb"
|
180
|
+
font-family="monospace" font-size="10">
|
181
|
+
SmartMessage::Transport.register(:amqp) do
|
182
|
+
</text>
|
183
|
+
<text x="560" y="475" fill="#d1d5db"
|
184
|
+
font-family="monospace" font-size="9">
|
185
|
+
SmartMessage::Transport::AMQP
|
186
|
+
</text>
|
187
|
+
<text x="540" y="490" fill="#e5e7eb"
|
188
|
+
font-family="monospace" font-size="10">
|
189
|
+
end
|
190
|
+
</text>
|
191
|
+
|
192
|
+
<text x="540" y="510" fill="#e5e7eb"
|
193
|
+
font-family="monospace" font-size="10">
|
194
|
+
SmartMessage::Transport.register(:lanet) do
|
195
|
+
</text>
|
196
|
+
<text x="560" y="525" fill="#d1d5db"
|
197
|
+
font-family="monospace" font-size="9">
|
198
|
+
SmartMessage::Transport::Lanet
|
199
|
+
</text>
|
200
|
+
<text x="540" y="540" fill="#e5e7eb"
|
201
|
+
font-family="monospace" font-size="10">
|
202
|
+
end
|
203
|
+
</text>
|
204
|
+
|
205
|
+
<text x="540" y="555" fill="#9ca3af"
|
206
|
+
font-family="Arial, sans-serif" font-size="9">
|
207
|
+
Auto-discovered when gem is loaded
|
208
|
+
</text>
|
209
|
+
|
210
|
+
<!-- Usage Examples -->
|
211
|
+
<rect x="50" y="600" width="900" height="120"
|
212
|
+
fill="#0f172a" stroke="#334155" stroke-width="2" rx="8" opacity="0.9"/>
|
213
|
+
<text x="500" y="625" text-anchor="middle" fill="#f1f5f9"
|
214
|
+
font-family="Arial, sans-serif" font-size="16" font-weight="bold">
|
215
|
+
Usage Examples
|
216
|
+
</text>
|
217
|
+
|
218
|
+
<text x="70" y="650" fill="#60a5fa"
|
219
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
220
|
+
# Agent99 with enhanced BunnyFarm
|
221
|
+
</text>
|
222
|
+
<text x="70" y="665" fill="#93c5fd"
|
223
|
+
font-family="monospace" font-size="10">
|
224
|
+
class CapabilityRequest < SmartMessage::Base
|
225
|
+
</text>
|
226
|
+
<text x="90" y="680" fill="#bfdbfe"
|
227
|
+
font-family="monospace" font-size="10">
|
228
|
+
config do
|
229
|
+
</text>
|
230
|
+
<text x="110" y="695" fill="#dbeafe"
|
231
|
+
font-family="monospace" font-size="10">
|
232
|
+
transport :amqp # or :lanet, :nats, :redis, :memory
|
233
|
+
</text>
|
234
|
+
<text x="90" y="710" fill="#bfdbfe"
|
235
|
+
font-family="monospace" font-size="10">
|
236
|
+
end
|
237
|
+
</text>
|
238
|
+
|
239
|
+
<text x="500" y="650" fill="#fbbf24"
|
240
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
241
|
+
# Dynamic transport selection
|
242
|
+
</text>
|
243
|
+
<text x="500" y="665" fill="#fcd34d"
|
244
|
+
font-family="monospace" font-size="10">
|
245
|
+
message.config do
|
246
|
+
</text>
|
247
|
+
<text x="520" y="680" fill="#fde68a"
|
248
|
+
font-family="monospace" font-size="10">
|
249
|
+
transport select_transport(target_agent)
|
250
|
+
</text>
|
251
|
+
<text x="500" y="695" fill="#fcd34d"
|
252
|
+
font-family="monospace" font-size="10">
|
253
|
+
end
|
254
|
+
</text>
|
255
|
+
<text x="500" y="710" fill="#fcd34d"
|
256
|
+
font-family="monospace" font-size="10">
|
257
|
+
message.publish
|
258
|
+
</text>
|
259
|
+
|
260
|
+
<!-- Configuration -->
|
261
|
+
<rect x="50" y="750" width="900" height="120"
|
262
|
+
fill="#1a202c" stroke="#2d3748" stroke-width="1" rx="5" opacity="0.9"/>
|
263
|
+
<text x="500" y="775" text-anchor="middle" fill="#f7fafc"
|
264
|
+
font-family="Arial, sans-serif" font-size="16" font-weight="bold">
|
265
|
+
Configuration & Installation
|
266
|
+
</text>
|
267
|
+
|
268
|
+
<text x="70" y="800" fill="#68d391"
|
269
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
270
|
+
# Gemfile
|
271
|
+
</text>
|
272
|
+
<text x="70" y="815" fill="#9ae6b4"
|
273
|
+
font-family="monospace" font-size="10">
|
274
|
+
gem 'smart_message' # Core + Memory/Redis
|
275
|
+
</text>
|
276
|
+
<text x="70" y="830" fill="#9ae6b4"
|
277
|
+
font-family="monospace" font-size="10">
|
278
|
+
gem 'smart_message-transport-amqp' # Enterprise messaging
|
279
|
+
</text>
|
280
|
+
<text x="70" y="845" fill="#9ae6b4"
|
281
|
+
font-family="monospace" font-size="10">
|
282
|
+
gem 'smart_message-transport-lanet' # P2P LAN optimization
|
283
|
+
</text>
|
284
|
+
<text x="70" y="860" fill="#9ae6b4"
|
285
|
+
font-family="monospace" font-size="10">
|
286
|
+
gem 'smart_message-transport-nats' # High-performance distributed
|
287
|
+
</text>
|
288
|
+
|
289
|
+
<text x="500" y="800" fill="#fbb6ce"
|
290
|
+
font-family="monospace" font-size="11" font-weight="bold">
|
291
|
+
# Auto-registration on require
|
292
|
+
</text>
|
293
|
+
<text x="500" y="815" fill="#f687b3"
|
294
|
+
font-family="monospace" font-size="10">
|
295
|
+
require 'smart_message-transport-amqp'
|
296
|
+
</text>
|
297
|
+
<text x="500" y="830" fill="#f687b3"
|
298
|
+
font-family="monospace" font-size="10">
|
299
|
+
# Transport now available as :amqp
|
300
|
+
</text>
|
301
|
+
<text x="500" y="845" fill="#f687b3"
|
302
|
+
font-family="monospace" font-size="10">
|
303
|
+
SmartMessage::Transport.available_transports
|
304
|
+
</text>
|
305
|
+
<text x="500" y="860" fill="#f687b3"
|
306
|
+
font-family="monospace" font-size="10">
|
307
|
+
# => [:memory, :redis, :amqp]
|
308
|
+
</text>
|
309
|
+
</svg>
|
@@ -0,0 +1,234 @@
|
|
1
|
+
<svg width="1000" height="700" xmlns="http://www.w3.org/2000/svg">
|
2
|
+
<!-- Background transparent -->
|
3
|
+
|
4
|
+
<!-- Title -->
|
5
|
+
<text x="500" y="30" text-anchor="middle" fill="#f7fafc"
|
6
|
+
font-family="Arial, sans-serif" font-size="20" font-weight="bold">
|
7
|
+
SmartMessage Transport Extension Architecture
|
8
|
+
</text>
|
9
|
+
|
10
|
+
<!-- Agent99 Layer -->
|
11
|
+
<rect x="50" y="70" width="900" height="80"
|
12
|
+
fill="#2d3748" stroke="#4a5568" stroke-width="2" rx="8"/>
|
13
|
+
<text x="500" y="100" text-anchor="middle" fill="#e2e8f0"
|
14
|
+
font-family="Arial, sans-serif" font-size="18" font-weight="bold">
|
15
|
+
Agent99: Multi-Process Agent Coordination
|
16
|
+
</text>
|
17
|
+
<text x="500" y="125" text-anchor="middle" fill="#cbd5e0"
|
18
|
+
font-family="Arial, sans-serif" font-size="14">
|
19
|
+
Coordinates agent objects across multiple processes executing anywhere
|
20
|
+
</text>
|
21
|
+
|
22
|
+
<!-- Enhanced BunnyFarm Layer -->
|
23
|
+
<rect x="50" y="170" width="900" height="80"
|
24
|
+
fill="#1a365d" stroke="#2c5282" stroke-width="2" rx="8"/>
|
25
|
+
<text x="500" y="200" text-anchor="middle" fill="#bee3f8"
|
26
|
+
font-family="Arial, sans-serif" font-size="18" font-weight="bold">
|
27
|
+
Enhanced BunnyFarm: Workflow + SmartMessage Integration
|
28
|
+
</text>
|
29
|
+
<text x="500" y="220" text-anchor="middle" fill="#90cdf4"
|
30
|
+
font-family="Arial, sans-serif" font-size="14">
|
31
|
+
Message workflows with transport abstraction capabilities
|
32
|
+
</text>
|
33
|
+
|
34
|
+
<!-- SmartMessage Core Layer -->
|
35
|
+
<rect x="50" y="270" width="900" height="80"
|
36
|
+
fill="#553c9a" stroke="#7c3aed" stroke-width="2" rx="8"/>
|
37
|
+
<text x="500" y="300" text-anchor="middle" fill="#e9d5ff"
|
38
|
+
font-family="Arial, sans-serif" font-size="18" font-weight="bold">
|
39
|
+
SmartMessage Core: Transport Abstraction + Plugin System
|
40
|
+
</text>
|
41
|
+
<text x="500" y="320" text-anchor="middle" fill="#c4b5fd"
|
42
|
+
font-family="Arial, sans-serif" font-size="14">
|
43
|
+
Core gem with Memory + Redis transports, plugin architecture for extensions
|
44
|
+
</text>
|
45
|
+
|
46
|
+
<!-- Transport Extensions Layer -->
|
47
|
+
<rect x="50" y="370" width="900" height="120"
|
48
|
+
fill="#1a202c" stroke="#2d3748" stroke-width="2" rx="8"/>
|
49
|
+
<text x="500" y="400" text-anchor="middle" fill="#f7fafc"
|
50
|
+
font-family="Arial, sans-serif" font-size="18" font-weight="bold">
|
51
|
+
Transport Extensions (Plugin Ecosystem)
|
52
|
+
</text>
|
53
|
+
|
54
|
+
<!-- Core Transports -->
|
55
|
+
<text x="150" y="430" text-anchor="middle" fill="#a0aec0"
|
56
|
+
font-family="Arial, sans-serif" font-size="12" font-weight="bold">
|
57
|
+
Core Transports
|
58
|
+
</text>
|
59
|
+
|
60
|
+
<rect x="80" y="440" width="140" height="40"
|
61
|
+
fill="#2f855a" stroke="#48bb78" stroke-width="1" rx="4"/>
|
62
|
+
<text x="150" y="465" text-anchor="middle" fill="#f0fff4"
|
63
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
64
|
+
Memory
|
65
|
+
</text>
|
66
|
+
<text x="150" y="475" text-anchor="middle" fill="#c6f6d5"
|
67
|
+
font-family="Arial, sans-serif" font-size="9">
|
68
|
+
Single Process
|
69
|
+
</text>
|
70
|
+
|
71
|
+
<rect x="240" y="440" width="140" height="40"
|
72
|
+
fill="#d69e2e" stroke="#ed8936" stroke-width="1" rx="4"/>
|
73
|
+
<text x="310" y="465" text-anchor="middle" fill="#fffbeb"
|
74
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
75
|
+
Redis
|
76
|
+
</text>
|
77
|
+
<text x="310" y="475" text-anchor="middle" fill="#fde68a"
|
78
|
+
font-family="Arial, sans-serif" font-size="9">
|
79
|
+
Multi-Process Local
|
80
|
+
</text>
|
81
|
+
|
82
|
+
<!-- Extension Transports -->
|
83
|
+
<text x="650" y="430" text-anchor="middle" fill="#a0aec0"
|
84
|
+
font-family="Arial, sans-serif" font-size="12" font-weight="bold">
|
85
|
+
Extension Gems
|
86
|
+
</text>
|
87
|
+
|
88
|
+
<rect x="420" y="440" width="160" height="40"
|
89
|
+
fill="#7c2d12" stroke="#dc2626" stroke-width="1" rx="4"/>
|
90
|
+
<text x="500" y="460" text-anchor="middle" fill="#fef2f2"
|
91
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
92
|
+
smart_message-
|
93
|
+
</text>
|
94
|
+
<text x="500" y="470" text-anchor="middle" fill="#fecaca"
|
95
|
+
font-family="Arial, sans-serif" font-size="10" font-weight="bold">
|
96
|
+
transport-amqp
|
97
|
+
</text>
|
98
|
+
<text x="500" y="480" text-anchor="middle" fill="#fca5a5"
|
99
|
+
font-family="Arial, sans-serif" font-size="8">
|
100
|
+
Enterprise Reliable
|
101
|
+
</text>
|
102
|
+
|
103
|
+
<rect x="600" y="440" width="160" height="40"
|
104
|
+
fill="#065f46" stroke="#10b981" stroke-width="1" rx="4"/>
|
105
|
+
<text x="680" y="460" text-anchor="middle" fill="#d1fae5"
|
106
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
107
|
+
smart_message-
|
108
|
+
</text>
|
109
|
+
<text x="680" y="470" text-anchor="middle" fill="#a7f3d0"
|
110
|
+
font-family="Arial, sans-serif" font-size="10" font-weight="bold">
|
111
|
+
transport-lanet
|
112
|
+
</text>
|
113
|
+
<text x="680" y="480" text-anchor="middle" fill="#6ee7b7"
|
114
|
+
font-family="Arial, sans-serif" font-size="8">
|
115
|
+
LAN P2P Direct
|
116
|
+
</text>
|
117
|
+
|
118
|
+
<rect x="780" y="440" width="160" height="40"
|
119
|
+
fill="#1e40af" stroke="#3b82f6" stroke-width="1" rx="4"/>
|
120
|
+
<text x="860" y="460" text-anchor="middle" fill="#dbeafe"
|
121
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
122
|
+
smart_message-
|
123
|
+
</text>
|
124
|
+
<text x="860" y="470" text-anchor="middle" fill="#bfdbfe"
|
125
|
+
font-family="Arial, sans-serif" font-size="10" font-weight="bold">
|
126
|
+
transport-nats
|
127
|
+
</text>
|
128
|
+
<text x="860" y="480" text-anchor="middle" fill="#93c5fd"
|
129
|
+
font-family="Arial, sans-serif" font-size="8">
|
130
|
+
High-Perf Distributed
|
131
|
+
</text>
|
132
|
+
|
133
|
+
<!-- Use Cases -->
|
134
|
+
<rect x="50" y="510" width="900" height="100"
|
135
|
+
fill="#0f172a" stroke="#334155" stroke-width="1" rx="5" opacity="0.9"/>
|
136
|
+
<text x="70" y="535" fill="#f1f5f9"
|
137
|
+
font-family="Arial, sans-serif" font-size="14" font-weight="bold">
|
138
|
+
Transport Selection Strategy:
|
139
|
+
</text>
|
140
|
+
|
141
|
+
<text x="90" y="555" fill="#10b981"
|
142
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
143
|
+
Memory:
|
144
|
+
</text>
|
145
|
+
<text x="150" y="555" fill="#cbd5e0"
|
146
|
+
font-family="Arial, sans-serif" font-size="10">
|
147
|
+
Same process agent communication
|
148
|
+
</text>
|
149
|
+
|
150
|
+
<text x="350" y="555" fill="#ed8936"
|
151
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
152
|
+
Redis:
|
153
|
+
</text>
|
154
|
+
<text x="390" y="555" fill="#cbd5e0"
|
155
|
+
font-family="Arial, sans-serif" font-size="10">
|
156
|
+
Multi-process, same machine
|
157
|
+
</text>
|
158
|
+
|
159
|
+
<text x="90" y="575" fill="#dc2626"
|
160
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
161
|
+
AMQP:
|
162
|
+
</text>
|
163
|
+
<text x="140" y="575" fill="#cbd5e0"
|
164
|
+
font-family="Arial, sans-serif" font-size="10">
|
165
|
+
Enterprise, guaranteed delivery
|
166
|
+
</text>
|
167
|
+
|
168
|
+
<text x="350" y="575" fill="#10b981"
|
169
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
170
|
+
Lanet:
|
171
|
+
</text>
|
172
|
+
<text x="395" y="575" fill="#cbd5e0"
|
173
|
+
font-family="Arial, sans-serif" font-size="10">
|
174
|
+
LAN P2P, encrypted, low latency
|
175
|
+
</text>
|
176
|
+
|
177
|
+
<text x="600" y="575" fill="#3b82f6"
|
178
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
179
|
+
NATS:
|
180
|
+
</text>
|
181
|
+
<text x="640" y="575" fill="#cbd5e0"
|
182
|
+
font-family="Arial, sans-serif" font-size="10">
|
183
|
+
High-throughput, distributed coordination
|
184
|
+
</text>
|
185
|
+
|
186
|
+
<text x="90" y="595" fill="#f1f5f9"
|
187
|
+
font-family="Arial, sans-serif" font-size="11" font-weight="bold">
|
188
|
+
Plugin Benefits:
|
189
|
+
</text>
|
190
|
+
<text x="190" y="595" fill="#cbd5e0"
|
191
|
+
font-family="Arial, sans-serif" font-size="10">
|
192
|
+
• Modular architecture • Optional dependencies • Independent evolution • Community ecosystem
|
193
|
+
</text>
|
194
|
+
|
195
|
+
<!-- Arrows showing flow -->
|
196
|
+
<defs>
|
197
|
+
<marker id="arrowhead" markerWidth="10" markerHeight="7"
|
198
|
+
refX="9" refY="3.5" orient="auto">
|
199
|
+
<polygon points="0 0, 10 3.5, 0 7" fill="#cbd5e0"/>
|
200
|
+
</marker>
|
201
|
+
</defs>
|
202
|
+
|
203
|
+
<!-- Flow arrows -->
|
204
|
+
<line x1="500" y1="150" x2="500" y2="165"
|
205
|
+
stroke="#cbd5e0" stroke-width="2" marker-end="url(#arrowhead)"/>
|
206
|
+
<line x1="500" y1="250" x2="500" y2="265"
|
207
|
+
stroke="#cbd5e0" stroke-width="2" marker-end="url(#arrowhead)"/>
|
208
|
+
<line x1="500" y1="350" x2="500" y2="365"
|
209
|
+
stroke="#cbd5e0" stroke-width="2" marker-end="url(#arrowhead)"/>
|
210
|
+
|
211
|
+
<!-- Gem installation info -->
|
212
|
+
<rect x="50" y="630" width="900" height="50"
|
213
|
+
fill="#1f2937" stroke="#374151" stroke-width="1" rx="5"/>
|
214
|
+
<text x="70" y="650" fill="#f9fafb"
|
215
|
+
font-family="Arial, sans-serif" font-size="12" font-weight="bold">
|
216
|
+
Gem Installation:
|
217
|
+
</text>
|
218
|
+
<text x="70" y="665" fill="#d1d5db"
|
219
|
+
font-family="Arial, sans-serif" font-size="10">
|
220
|
+
gem 'smart_message' # Core + Memory/Redis
|
221
|
+
</text>
|
222
|
+
<text x="300" y="665" fill="#d1d5db"
|
223
|
+
font-family="Arial, sans-serif" font-size="10">
|
224
|
+
gem 'smart_message-transport-amqp' # Enterprise
|
225
|
+
</text>
|
226
|
+
<text x="550" y="665" fill="#d1d5db"
|
227
|
+
font-family="Arial, sans-serif" font-size="10">
|
228
|
+
gem 'smart_message-transport-lanet' # P2P
|
229
|
+
</text>
|
230
|
+
<text x="750" y="665" fill="#d1d5db"
|
231
|
+
font-family="Arial, sans-serif" font-size="10">
|
232
|
+
gem 'smart_message-transport-nats' # Distributed
|
233
|
+
</text>
|
234
|
+
</svg>
|