smart_message 0.0.10 → 0.0.12

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.
Files changed (169) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/deploy-github-pages.yml +38 -0
  3. data/.gitignore +5 -0
  4. data/CHANGELOG.md +30 -0
  5. data/Gemfile.lock +35 -4
  6. data/README.md +169 -71
  7. data/Rakefile +29 -4
  8. data/docs/assets/images/ddq_architecture.svg +130 -0
  9. data/docs/assets/images/dlq_architecture.svg +115 -0
  10. data/docs/assets/images/enhanced-dual-publishing.svg +136 -0
  11. data/docs/assets/images/enhanced-fluent-api.svg +149 -0
  12. data/docs/assets/images/enhanced-microservices-routing.svg +115 -0
  13. data/docs/assets/images/enhanced-pattern-matching.svg +107 -0
  14. data/docs/assets/images/fluent-api-demo.svg +59 -0
  15. data/docs/assets/images/performance-comparison.svg +161 -0
  16. data/docs/assets/images/redis-basic-architecture.svg +53 -0
  17. data/docs/assets/images/redis-enhanced-architecture.svg +88 -0
  18. data/docs/assets/images/redis-queue-architecture.svg +101 -0
  19. data/docs/assets/images/smart_message.jpg +0 -0
  20. data/docs/assets/images/smart_message_walking.jpg +0 -0
  21. data/docs/assets/images/smartmessage_architecture_overview.svg +173 -0
  22. data/docs/assets/images/transport-comparison-matrix.svg +171 -0
  23. data/docs/assets/javascripts/mathjax.js +17 -0
  24. data/docs/assets/stylesheets/extra.css +51 -0
  25. data/docs/{addressing.md → core-concepts/addressing.md} +5 -7
  26. data/docs/{architecture.md → core-concepts/architecture.md} +78 -138
  27. data/docs/{dispatcher.md → core-concepts/dispatcher.md} +21 -21
  28. data/docs/{message_filtering.md → core-concepts/message-filtering.md} +2 -3
  29. data/docs/{message_processing.md → core-concepts/message-processing.md} +17 -17
  30. data/docs/{troubleshooting.md → development/troubleshooting.md} +7 -7
  31. data/docs/{examples.md → getting-started/examples.md} +115 -89
  32. data/docs/{getting-started.md → getting-started/quick-start.md} +47 -18
  33. data/docs/guides/redis-queue-getting-started.md +697 -0
  34. data/docs/guides/redis-queue-patterns.md +889 -0
  35. data/docs/guides/redis-queue-production.md +1091 -0
  36. data/docs/index.md +64 -0
  37. data/docs/{dead_letter_queue.md → reference/dead-letter-queue.md} +2 -3
  38. data/docs/{logging.md → reference/logging.md} +1 -1
  39. data/docs/{message_deduplication.md → reference/message-deduplication.md} +1 -0
  40. data/docs/{proc_handlers_summary.md → reference/proc-handlers.md} +7 -6
  41. data/docs/{serializers.md → reference/serializers.md} +3 -5
  42. data/docs/{transports.md → reference/transports.md} +133 -11
  43. data/docs/transports/memory-transport.md +374 -0
  44. data/docs/transports/redis-enhanced-transport.md +524 -0
  45. data/docs/transports/redis-queue-transport.md +1304 -0
  46. data/docs/transports/redis-transport-comparison.md +496 -0
  47. data/docs/transports/redis-transport.md +509 -0
  48. data/examples/README.md +98 -5
  49. data/examples/city_scenario/911_emergency_call_flow.svg +99 -0
  50. data/examples/city_scenario/README.md +515 -0
  51. data/examples/city_scenario/ai_visitor_intelligence_flow.svg +108 -0
  52. data/examples/city_scenario/citizen.rb +195 -0
  53. data/examples/city_scenario/city_diagram.svg +125 -0
  54. data/examples/city_scenario/common/health_monitor.rb +80 -0
  55. data/examples/city_scenario/common/logger.rb +30 -0
  56. data/examples/city_scenario/emergency_dispatch_center.rb +270 -0
  57. data/examples/city_scenario/fire_department.rb +446 -0
  58. data/examples/city_scenario/fire_emergency_flow.svg +95 -0
  59. data/examples/city_scenario/health_department.rb +100 -0
  60. data/examples/city_scenario/health_monitoring_system.svg +130 -0
  61. data/examples/city_scenario/house.rb +244 -0
  62. data/examples/city_scenario/local_bank.rb +217 -0
  63. data/examples/city_scenario/messages/emergency_911_message.rb +81 -0
  64. data/examples/city_scenario/messages/emergency_resolved_message.rb +43 -0
  65. data/examples/city_scenario/messages/fire_dispatch_message.rb +43 -0
  66. data/examples/city_scenario/messages/fire_emergency_message.rb +45 -0
  67. data/examples/city_scenario/messages/health_check_message.rb +22 -0
  68. data/examples/city_scenario/messages/health_status_message.rb +35 -0
  69. data/examples/city_scenario/messages/police_dispatch_message.rb +46 -0
  70. data/examples/city_scenario/messages/silent_alarm_message.rb +38 -0
  71. data/examples/city_scenario/police_department.rb +316 -0
  72. data/examples/city_scenario/redis_monitor.rb +129 -0
  73. data/examples/city_scenario/redis_stats.rb +743 -0
  74. data/examples/city_scenario/room_for_improvement.md +240 -0
  75. data/examples/city_scenario/security_emergency_flow.svg +95 -0
  76. data/examples/city_scenario/service_internal_architecture.svg +154 -0
  77. data/examples/city_scenario/smart_message_ai_agent.rb +364 -0
  78. data/examples/city_scenario/start_demo.sh +236 -0
  79. data/examples/city_scenario/stop_demo.sh +106 -0
  80. data/examples/city_scenario/visitor.rb +631 -0
  81. data/examples/{10_message_deduplication.rb → memory/01_message_deduplication_demo.rb} +1 -1
  82. data/examples/{09_dead_letter_queue_demo.rb → memory/02_dead_letter_queue_demo.rb} +13 -40
  83. data/examples/{01_point_to_point_orders.rb → memory/03_point_to_point_orders.rb} +1 -1
  84. data/examples/{02_publish_subscribe_events.rb → memory/04_publish_subscribe_events.rb} +2 -2
  85. data/examples/{03_many_to_many_chat.rb → memory/05_many_to_many_chat.rb} +4 -4
  86. data/examples/{show_me.rb → memory/06_pretty_print_demo.rb} +1 -1
  87. data/examples/{05_proc_handlers.rb → memory/07_proc_handlers_demo.rb} +2 -2
  88. data/examples/{06_custom_logger_example.rb → memory/08_custom_logger_demo.rb} +17 -14
  89. data/examples/{07_error_handling_scenarios.rb → memory/09_error_handling_demo.rb} +4 -4
  90. data/examples/{08_entity_addressing_basic.rb → memory/10_entity_addressing_basic.rb} +8 -8
  91. data/examples/{08_entity_addressing_with_filtering.rb → memory/11_entity_addressing_with_filtering.rb} +6 -6
  92. data/examples/{09_regex_filtering_microservices.rb → memory/12_regex_filtering_microservices.rb} +2 -2
  93. data/examples/{10_header_block_configuration.rb → memory/13_header_block_configuration.rb} +6 -6
  94. data/examples/{11_global_configuration_example.rb → memory/14_global_configuration_demo.rb} +19 -8
  95. data/examples/{show_logger.rb → memory/15_logger_demo.rb} +1 -1
  96. data/examples/memory/README.md +163 -0
  97. data/examples/memory/memory_transport_architecture.svg +90 -0
  98. data/examples/memory/point_to_point_pattern.svg +94 -0
  99. data/examples/memory/publish_subscribe_pattern.svg +125 -0
  100. data/examples/{04_redis_smart_home_iot.rb → redis/01_smart_home_iot_demo.rb} +5 -5
  101. data/examples/redis/README.md +230 -0
  102. data/examples/redis/alert_system_flow.svg +127 -0
  103. data/examples/redis/dashboard_status_flow.svg +107 -0
  104. data/examples/redis/device_command_flow.svg +113 -0
  105. data/examples/redis/redis_transport_architecture.svg +115 -0
  106. data/examples/{smart_home_iot_dataflow.md → redis/smart_home_iot_dataflow.md} +4 -116
  107. data/examples/redis/smart_home_system_architecture.svg +133 -0
  108. data/examples/redis_enhanced/README.md +319 -0
  109. data/examples/redis_enhanced/enhanced_01_basic_patterns.rb +233 -0
  110. data/examples/redis_enhanced/enhanced_02_fluent_api.rb +331 -0
  111. data/examples/redis_enhanced/enhanced_03_dual_publishing.rb +281 -0
  112. data/examples/redis_enhanced/enhanced_04_advanced_routing.rb +419 -0
  113. data/examples/redis_queue/01_basic_messaging.rb +221 -0
  114. data/examples/redis_queue/01_comprehensive_examples.rb +508 -0
  115. data/examples/redis_queue/02_pattern_routing.rb +405 -0
  116. data/examples/redis_queue/03_fluent_api.rb +422 -0
  117. data/examples/redis_queue/04_load_balancing.rb +486 -0
  118. data/examples/redis_queue/05_microservices.rb +735 -0
  119. data/examples/redis_queue/06_emergency_alerts.rb +777 -0
  120. data/examples/redis_queue/07_queue_management.rb +587 -0
  121. data/examples/redis_queue/README.md +366 -0
  122. data/examples/redis_queue/enhanced_01_basic_patterns.rb +233 -0
  123. data/examples/redis_queue/enhanced_02_fluent_api.rb +331 -0
  124. data/examples/redis_queue/enhanced_03_dual_publishing.rb +281 -0
  125. data/examples/redis_queue/enhanced_04_advanced_routing.rb +419 -0
  126. data/examples/redis_queue/redis_queue_architecture.svg +148 -0
  127. data/ideas/README.md +41 -0
  128. data/ideas/agents.md +1001 -0
  129. data/ideas/database_transport.md +980 -0
  130. data/ideas/improvement.md +359 -0
  131. data/ideas/meshage.md +1788 -0
  132. data/ideas/message_discovery.md +178 -0
  133. data/ideas/message_schema.md +1381 -0
  134. data/lib/smart_message/.idea/.gitignore +8 -0
  135. data/lib/smart_message/.idea/markdown.xml +6 -0
  136. data/lib/smart_message/.idea/misc.xml +4 -0
  137. data/lib/smart_message/.idea/modules.xml +8 -0
  138. data/lib/smart_message/.idea/smart_message.iml +16 -0
  139. data/lib/smart_message/.idea/vcs.xml +6 -0
  140. data/lib/smart_message/addressing.rb +15 -0
  141. data/lib/smart_message/base.rb +0 -2
  142. data/lib/smart_message/configuration.rb +1 -1
  143. data/lib/smart_message/logger.rb +15 -4
  144. data/lib/smart_message/plugins.rb +5 -2
  145. data/lib/smart_message/serializer.rb +14 -0
  146. data/lib/smart_message/transport/redis_enhanced_transport.rb +399 -0
  147. data/lib/smart_message/transport/redis_queue_transport.rb +555 -0
  148. data/lib/smart_message/transport/registry.rb +1 -0
  149. data/lib/smart_message/transport.rb +34 -1
  150. data/lib/smart_message/version.rb +1 -1
  151. data/lib/smart_message.rb +5 -52
  152. data/mkdocs.yml +184 -0
  153. data/p2p_plan.md +326 -0
  154. data/p2p_roadmap.md +287 -0
  155. data/smart_message.gemspec +2 -0
  156. data/smart_message.svg +51 -0
  157. metadata +170 -44
  158. data/docs/README.md +0 -57
  159. data/examples/dead_letters.jsonl +0 -12
  160. data/examples/temp.txt +0 -94
  161. data/examples/tmux_chat/README.md +0 -283
  162. data/examples/tmux_chat/bot_agent.rb +0 -278
  163. data/examples/tmux_chat/human_agent.rb +0 -199
  164. data/examples/tmux_chat/room_monitor.rb +0 -160
  165. data/examples/tmux_chat/shared_chat_system.rb +0 -328
  166. data/examples/tmux_chat/start_chat_demo.sh +0 -190
  167. data/examples/tmux_chat/stop_chat_demo.sh +0 -22
  168. /data/docs/{properties.md → core-concepts/properties.md} +0 -0
  169. /data/docs/{ideas_to_think_about.md → development/ideas.md} +0 -0
data/ideas/agents.md ADDED
@@ -0,0 +1,1001 @@
1
+ # AI Agents with SmartMessage: Intelligent Communication Patterns
2
+
3
+ ## Overview
4
+
5
+ AI agents represent the next evolution in distributed systems - intelligent entities that can make contextual decisions, adapt to scenarios, and communicate using natural language understanding. SmartMessage provides the perfect foundation for AI agent communication by offering structured, validated, and discoverable message types that agents can dynamically select and use based on context.
6
+
7
+ ## Agent Communication Paradigms
8
+
9
+ ### Traditional Service Communication
10
+ ```ruby
11
+ # Fixed, hardcoded messaging
12
+ order_service.send_inventory_check(product_id: "123")
13
+ payment_service.process_payment(amount: 100)
14
+ ```
15
+
16
+ ### AI Agent Communication
17
+ ```ruby
18
+ # Dynamic, contextual messaging
19
+ agent.observe("Customer wants to buy expensive item")
20
+ # Agent discovers available message types
21
+ # AI selects appropriate message class
22
+ # AI generates contextually relevant properties
23
+ # Message is validated and published
24
+ ```
25
+
26
+ ## Architecture Patterns
27
+
28
+ ### 1. Agent99 Pattern - Request/Response Agents
29
+
30
+ Agent99 provides a mature framework for building request/response agents that communicate through message brokers:
31
+
32
+ ```ruby
33
+ class IntelligentOrderAgent < Agent99::Base
34
+ def info
35
+ {
36
+ name: 'intelligent_order_agent',
37
+ type: :hybrid,
38
+ capabilities: ['order_processing', 'inventory_check', 'payment_processing'],
39
+ request_schema: OrderRequest.schema
40
+ }
41
+ end
42
+
43
+ def process_request(payload)
44
+ # AI analyzes the request context
45
+ scenario = extract_scenario(payload)
46
+
47
+ # Use SmartMessage AI pattern to communicate with other services
48
+ inventory_response = communicate_intelligently(scenario[:inventory_check])
49
+ payment_response = communicate_intelligently(scenario[:payment_request])
50
+
51
+ # Process results and respond
52
+ send_response(compile_order_result(inventory_response, payment_response))
53
+ end
54
+
55
+ private
56
+
57
+ def communicate_intelligently(scenario)
58
+ smart_agent = SmartMessageAgent.new("order_agent_#{id}")
59
+ smart_agent.send_message_for_scenario(scenario)
60
+ end
61
+ end
62
+ ```
63
+
64
+ **Key Characteristics:**
65
+ - **Centralized Registry**: Agents register capabilities and discover each other
66
+ - **Structured Communication**: Request/response with defined schemas
67
+ - **Service-Oriented**: Each agent provides specific business capabilities
68
+ - **Message Broker**: AMQP or NATS for reliable delivery
69
+
70
+ ### 2. SmartMessage AI Agent Pattern - Context-Aware Messaging
71
+
72
+ The SmartMessage AI pattern enables agents to dynamically discover and use appropriate message types:
73
+
74
+ ```ruby
75
+ class EmergencyResponseAgent < AgentSupport
76
+ def initialize
77
+ super('emergency_response')
78
+ end
79
+
80
+ # Only use emergency-related messages
81
+ def include_message_class?(message_class)
82
+ message_class.to_s.match?(/Emergency|Alert|911|Fire|Medical|Police/)
83
+ end
84
+
85
+ def respond_to_incident(incident_report)
86
+ # AI analyzes incident and selects appropriate message type
87
+ scenario = {
88
+ type: determine_emergency_type(incident_report),
89
+ description: incident_report[:description],
90
+ context: incident_report[:context],
91
+ severity: assess_severity(incident_report)
92
+ }
93
+
94
+ message = send_message_for_scenario(scenario)
95
+ coordinate_response(message)
96
+ end
97
+ end
98
+ ```
99
+
100
+ **Key Characteristics:**
101
+ - **Dynamic Discovery**: Runtime introspection of available messages
102
+ - **AI Selection**: LLM chooses contextually appropriate message types
103
+ - **Intelligent Population**: AI generates valid property values
104
+ - **Self-Healing**: Validation retry with AI assistance
105
+
106
+ ### 3. Hybrid Pattern - Agent99 + SmartMessage AI
107
+
108
+ Combining both patterns creates sophisticated agents that can both serve requests and intelligently communicate:
109
+
110
+ ```ruby
111
+ class IntelligentCityAgent < Agent99::Base
112
+ def initialize
113
+ super
114
+ @smart_messenger = AgentSupport.new("city_agent_#{id}")
115
+ end
116
+
117
+ def info
118
+ {
119
+ name: 'intelligent_city_agent',
120
+ type: :hybrid,
121
+ capabilities: ['city_monitoring', 'emergency_response', 'traffic_management'],
122
+ request_schema: CityRequest.schema
123
+ }
124
+ end
125
+
126
+ # Handle incoming requests (Agent99 pattern)
127
+ def process_request(payload)
128
+ case payload[:action]
129
+ when 'monitor_traffic'
130
+ monitor_traffic_and_report
131
+ when 'emergency_response'
132
+ coordinate_emergency_response(payload[:incident])
133
+ when 'city_status'
134
+ generate_city_status_report
135
+ end
136
+ end
137
+
138
+ private
139
+
140
+ # Use SmartMessage AI for outgoing communications
141
+ def monitor_traffic_and_report
142
+ traffic_data = collect_traffic_data
143
+
144
+ if traffic_data[:congestion] > 0.8
145
+ scenario = {
146
+ type: 'traffic_alert',
147
+ description: 'Heavy traffic congestion detected',
148
+ context: "Congestion level: #{traffic_data[:congestion]}, affected routes: #{traffic_data[:routes]}"
149
+ }
150
+
151
+ @smart_messenger.send_message_for_scenario(scenario)
152
+ end
153
+
154
+ send_response({ status: 'traffic_monitored', data: traffic_data })
155
+ end
156
+
157
+ def coordinate_emergency_response(incident)
158
+ # Use AI to determine appropriate emergency protocols
159
+ scenario = {
160
+ type: 'emergency_coordination',
161
+ description: incident[:description],
162
+ context: incident[:full_context],
163
+ resources_needed: assess_required_resources(incident)
164
+ }
165
+
166
+ response_message = @smart_messenger.send_message_for_scenario(scenario)
167
+ track_emergency_response(incident, response_message)
168
+
169
+ send_response({
170
+ status: 'emergency_coordination_initiated',
171
+ response_id: response_message.id
172
+ })
173
+ end
174
+ end
175
+ ```
176
+
177
+ ## Communication Flows
178
+
179
+ ### Agent Discovery and Registration
180
+
181
+ ```mermaid
182
+ sequenceDiagram
183
+ participant A as AI Agent
184
+ participant R as Registry
185
+ participant B as Message Broker
186
+ participant S as SmartMessage
187
+
188
+ A->>R: Register capabilities
189
+ R-->>A: Assign UUID
190
+ A->>B: Setup message queue
191
+ A->>S: Discover available message types
192
+ S-->>A: Return message catalog
193
+ A->>A: Initialize AI message selection
194
+ ```
195
+
196
+ ### Intelligent Message Exchange
197
+
198
+ ```mermaid
199
+ sequenceDiagram
200
+ participant A1 as Agent 1
201
+ participant AI as LLM
202
+ participant A2 as Agent 2
203
+ participant B as Message Broker
204
+
205
+ Note over A1: Observes scenario
206
+ A1->>A1: Discover available messages
207
+ A1->>AI: Select appropriate message type
208
+ AI-->>A1: Recommended message class
209
+ A1->>AI: Generate property values
210
+ AI-->>A1: Contextual properties
211
+ A1->>B: Publish SmartMessage
212
+ B->>A2: Route message
213
+ A2->>A2: Process message intelligently
214
+ A2->>B: Send AI-generated response
215
+ B->>A1: Deliver response
216
+ ```
217
+
218
+ ### Multi-Agent Coordination
219
+
220
+ ```mermaid
221
+ sequenceDiagram
222
+ participant V as Visitor Agent
223
+ participant E as Emergency Agent
224
+ participant P as Police Agent
225
+ participant F as Fire Agent
226
+ participant M as Medical Agent
227
+
228
+ Note over V: Witnesses incident
229
+ V->>V: Analyze scenario with AI
230
+ V->>E: Emergency911Message
231
+ E->>E: Assess emergency type
232
+
233
+ par Police Response
234
+ E->>P: PoliceDispatchMessage
235
+ P->>P: Dispatch units
236
+ and Fire Response
237
+ E->>F: FireDispatchMessage
238
+ F->>F: Dispatch fire trucks
239
+ and Medical Response
240
+ E->>M: MedicalDispatchMessage
241
+ M->>M: Dispatch ambulance
242
+ end
243
+
244
+ Note over P,M: Coordinate response
245
+ ```
246
+
247
+ ## AI Agent Communication Patterns
248
+
249
+ ### 1. Contextual Message Selection
250
+
251
+ ```ruby
252
+ class IntelligentVisitor < AgentSupport
253
+ def observe_city_event(observation)
254
+ # AI analyzes observation context
255
+ scenario = {
256
+ type: classify_event_type(observation),
257
+ description: observation[:what_happened],
258
+ context: build_full_context(observation),
259
+ urgency: assess_urgency(observation),
260
+ location: observation[:where]
261
+ }
262
+
263
+ # AI selects from available emergency message types
264
+ # Could choose: Emergency911Message, SilentAlarmMessage,
265
+ # FireAlertMessage, MedicalEmergencyMessage, etc.
266
+ message = send_message_for_scenario(scenario)
267
+
268
+ log_observation(observation, message)
269
+ end
270
+
271
+ def classify_event_type(observation)
272
+ # Use AI to classify the event
273
+ prompt = "Classify this observation: #{observation[:description]}"
274
+ response = @llm.ask(prompt)
275
+ extract_classification(response.content)
276
+ end
277
+ end
278
+ ```
279
+
280
+ ### 2. Multi-Modal Intelligence
281
+
282
+ ```ruby
283
+ class VisionAgent < AgentSupport
284
+ def process_camera_feed(image_data)
285
+ # Analyze image with AI
286
+ visual_analysis = analyze_image(image_data)
287
+
288
+ # Convert visual analysis to scenario
289
+ scenario = {
290
+ type: 'visual_detection',
291
+ description: visual_analysis[:description],
292
+ context: visual_analysis[:detailed_context],
293
+ confidence: visual_analysis[:confidence],
294
+ objects_detected: visual_analysis[:objects]
295
+ }
296
+
297
+ # Select appropriate message based on what was seen
298
+ if visual_analysis[:emergency_detected]
299
+ send_message_for_scenario(scenario.merge(type: 'emergency'))
300
+ elsif visual_analysis[:suspicious_activity]
301
+ send_message_for_scenario(scenario.merge(type: 'security_alert'))
302
+ else
303
+ send_message_for_scenario(scenario.merge(type: 'routine_observation'))
304
+ end
305
+ end
306
+ end
307
+ ```
308
+
309
+ ### 3. Learning and Adaptation
310
+
311
+ ```ruby
312
+ class LearningAgent < AgentSupport
313
+ def initialize(name)
314
+ super(name)
315
+ @message_history = []
316
+ @success_patterns = {}
317
+ end
318
+
319
+ def send_message_for_scenario(scenario)
320
+ message = super(scenario)
321
+
322
+ # Track message attempts
323
+ @message_history << {
324
+ scenario: scenario,
325
+ message_class: message.class,
326
+ timestamp: Time.now,
327
+ success: message.published?
328
+ }
329
+
330
+ # Learn from successful patterns
331
+ if message.published?
332
+ pattern_key = "#{scenario[:type]}_#{message.class}"
333
+ @success_patterns[pattern_key] = (@success_patterns[pattern_key] || 0) + 1
334
+ end
335
+
336
+ message
337
+ end
338
+
339
+ # Override selection to use learned patterns
340
+ def fallback_select_message(available_messages, scenario)
341
+ # Check if we have successful patterns for this scenario type
342
+ successful_classes = @success_patterns
343
+ .select { |key, _| key.start_with?("#{scenario[:type]}_") }
344
+ .sort_by { |_, count| -count }
345
+ .map { |key, _| key.split('_', 2).last }
346
+
347
+ # Try most successful class first
348
+ successful_classes.each do |class_name|
349
+ if available_messages[class_name]
350
+ logger.info("Using learned pattern: #{class_name} for #{scenario[:type]}")
351
+ return available_messages[class_name][:class]
352
+ end
353
+ end
354
+
355
+ # Fall back to parent logic
356
+ super
357
+ end
358
+ end
359
+ ```
360
+
361
+ ## Integration Strategies
362
+
363
+ ### 1. Agent99 as Service Layer + SmartMessage as Communication Layer
364
+
365
+ ```ruby
366
+ # Service registration and discovery through Agent99
367
+ class OrderProcessingService < Agent99::Base
368
+ def initialize
369
+ super
370
+ @payment_communicator = PaymentAgent.new
371
+ @inventory_communicator = InventoryAgent.new
372
+ end
373
+
374
+ def info
375
+ {
376
+ name: 'order_processing_service',
377
+ type: :server,
378
+ capabilities: ['order_processing', 'order_validation', 'order_fulfillment']
379
+ }
380
+ end
381
+
382
+ def process_request(order_data)
383
+ # Use SmartMessage AI agents for intelligent communication
384
+ inventory_result = @inventory_communicator.check_availability(order_data[:items])
385
+ payment_result = @payment_communicator.process_payment(order_data[:payment])
386
+
387
+ # Return structured response
388
+ send_response({
389
+ order_id: generate_order_id,
390
+ status: determine_order_status(inventory_result, payment_result),
391
+ inventory: inventory_result,
392
+ payment: payment_result
393
+ })
394
+ end
395
+ end
396
+
397
+ # Communication agents using SmartMessage AI
398
+ class PaymentAgent < AgentSupport
399
+ def process_payment(payment_data)
400
+ scenario = {
401
+ type: 'payment_processing',
402
+ description: "Process payment of $#{payment_data[:amount]}",
403
+ context: payment_data.to_json,
404
+ amount: payment_data[:amount],
405
+ method: payment_data[:method]
406
+ }
407
+
408
+ send_message_for_scenario(scenario)
409
+ end
410
+ end
411
+ ```
412
+
413
+ ### 2. Unified Agent Framework
414
+
415
+ ```ruby
416
+ class UnifiedIntelligentAgent
417
+ include Agent99::Base # For service capabilities
418
+ include AgentSupport # For intelligent messaging
419
+
420
+ def initialize(name, capabilities)
421
+ @name = name
422
+ @capabilities = capabilities
423
+ @agent99 = Agent99::Base.new
424
+ @smart_messenger = AgentSupport.new(name)
425
+ end
426
+
427
+ # Agent99 interface for service discovery
428
+ def info
429
+ {
430
+ name: @name,
431
+ type: :hybrid,
432
+ capabilities: @capabilities,
433
+ ai_enabled: true
434
+ }
435
+ end
436
+
437
+ # Handle incoming service requests
438
+ def process_request(payload)
439
+ # Use AI to understand request intent
440
+ intent = analyze_request_intent(payload)
441
+
442
+ # Route to appropriate handler
443
+ case intent[:category]
444
+ when 'data_request'
445
+ handle_data_request(intent, payload)
446
+ when 'action_request'
447
+ handle_action_request(intent, payload)
448
+ when 'coordination_request'
449
+ handle_coordination_request(intent, payload)
450
+ end
451
+ end
452
+
453
+ # Use SmartMessage AI for outgoing communications
454
+ def communicate_with_context(scenario)
455
+ @smart_messenger.send_message_for_scenario(scenario)
456
+ end
457
+
458
+ private
459
+
460
+ def analyze_request_intent(payload)
461
+ prompt = "Analyze this agent request and categorize: #{payload.to_json}"
462
+ response = @smart_messenger.llm.ask(prompt)
463
+ parse_intent(response.content)
464
+ end
465
+ end
466
+ ```
467
+
468
+ ## Advanced Patterns
469
+
470
+ ### 1. Agent Swarms with Collective Intelligence
471
+
472
+ ```ruby
473
+ class SwarmCoordinator < AgentSupport
474
+ def initialize
475
+ super('swarm_coordinator')
476
+ @swarm_members = []
477
+ @collective_knowledge = {}
478
+ end
479
+
480
+ def add_swarm_member(agent)
481
+ @swarm_members << agent
482
+ share_knowledge_with_member(agent)
483
+ end
484
+
485
+ def coordinate_swarm_response(scenario)
486
+ # Distribute scenario analysis across swarm
487
+ member_analyses = @swarm_members.map do |member|
488
+ Thread.new { member.analyze_scenario(scenario) }
489
+ end.map(&:value)
490
+
491
+ # Aggregate insights
492
+ collective_analysis = aggregate_member_analyses(member_analyses)
493
+
494
+ # Each member sends messages based on collective intelligence
495
+ @swarm_members.each do |member|
496
+ member_scenario = customize_scenario_for_member(scenario, collective_analysis, member)
497
+ member.send_message_for_scenario(member_scenario)
498
+ end
499
+ end
500
+ end
501
+ ```
502
+
503
+ ### 2. Cross-Domain Agent Bridges
504
+
505
+ ```ruby
506
+ class CrossDomainBridge < AgentSupport
507
+ def initialize(source_domain, target_domain)
508
+ super("bridge_#{source_domain}_to_#{target_domain}")
509
+ @source_domain = source_domain
510
+ @target_domain = target_domain
511
+ @domain_translators = setup_domain_translators
512
+ end
513
+
514
+ def bridge_message(source_message, target_agents)
515
+ # Translate message between domains
516
+ translation_context = {
517
+ source_domain: @source_domain,
518
+ target_domain: @target_domain,
519
+ message: source_message.to_h
520
+ }
521
+
522
+ translated_scenarios = @domain_translators.map do |translator|
523
+ translator.translate(translation_context)
524
+ end
525
+
526
+ # Send translated messages to target domain agents
527
+ target_agents.each do |agent|
528
+ translated_scenarios.each do |scenario|
529
+ agent.send_message_for_scenario(scenario)
530
+ end
531
+ end
532
+ end
533
+ end
534
+ ```
535
+
536
+ ### 3. Self-Organizing Agent Networks
537
+
538
+ ```ruby
539
+ class SelfOrganizingAgent < AgentSupport
540
+ def initialize(name)
541
+ super(name)
542
+ @network_topology = {}
543
+ @performance_metrics = {}
544
+ @adaptation_threshold = 0.1
545
+ end
546
+
547
+ def send_message_for_scenario(scenario)
548
+ # Standard message sending
549
+ message = super(scenario)
550
+
551
+ # Analyze message performance
552
+ analyze_message_performance(scenario, message)
553
+
554
+ # Adapt network topology if needed
555
+ adapt_network_topology if adaptation_needed?
556
+
557
+ message
558
+ end
559
+
560
+ private
561
+
562
+ def analyze_message_performance(scenario, message)
563
+ performance = {
564
+ delivery_success: message.delivered?,
565
+ response_time: message.response_time,
566
+ recipient_satisfaction: assess_recipient_satisfaction(message)
567
+ }
568
+
569
+ @performance_metrics[scenario[:type]] = performance
570
+ end
571
+
572
+ def adaptation_needed?
573
+ recent_performance = @performance_metrics.values.last(10)
574
+ return false if recent_performance.size < 5
575
+
576
+ average_success = recent_performance.sum { |p| p[:delivery_success] ? 1 : 0 } / recent_performance.size.to_f
577
+ average_success < @adaptation_threshold
578
+ end
579
+
580
+ def adapt_network_topology
581
+ # Use AI to reorganize network connections
582
+ scenario = {
583
+ type: 'network_adaptation',
584
+ description: 'Reorganize agent network for better performance',
585
+ context: @performance_metrics.to_json,
586
+ current_topology: @network_topology
587
+ }
588
+
589
+ adaptation_plan = send_message_for_scenario(scenario)
590
+ implement_adaptation_plan(adaptation_plan)
591
+ end
592
+ end
593
+ ```
594
+
595
+ ## Benefits of AI Agent + SmartMessage Integration
596
+
597
+ ### 1. Dynamic Adaptability
598
+ - Agents discover new message types without code changes
599
+ - AI selects contextually appropriate messages
600
+ - System adapts to changing communication patterns
601
+
602
+ ### 2. Intelligent Validation Recovery
603
+ - AI fixes validation errors automatically
604
+ - Learns from validation patterns
605
+ - Reduces manual intervention
606
+
607
+ ### 3. Semantic Understanding
608
+ - AI understands message intent and context
609
+ - Enables natural language to structured message translation
610
+ - Supports cross-domain communication
611
+
612
+ ### 4. Self-Healing Communication
613
+ - Automatic retry with corrections
614
+ - Route adaptation based on performance
615
+ - Graceful degradation when AI unavailable
616
+
617
+ ### 5. Emergent Behaviors
618
+ - Agent swarms with collective intelligence
619
+ - Self-organizing network topologies
620
+ - Cross-domain message translation
621
+
622
+ ## Real-World Applications
623
+
624
+ ### 1. Smart City Management
625
+ ```ruby
626
+ # Multiple intelligent agents coordinate city operations
627
+ traffic_agent = TrafficManagementAgent.new
628
+ emergency_agent = EmergencyResponseAgent.new
629
+ infrastructure_agent = InfrastructureMonitoringAgent.new
630
+
631
+ # Visitor reports incident - triggers agent coordination
632
+ visitor.observe("Building fire with people trapped")
633
+ # → Emergency911Message → EmergencyResponseAgent
634
+ # → FireDispatchMessage → Fire Department
635
+ # → TrafficControlMessage → Traffic Management
636
+ # → InfrastructureAlertMessage → Infrastructure Team
637
+ ```
638
+
639
+ ### 2. Autonomous Supply Chain
640
+ ```ruby
641
+ # AI agents manage supply chain dynamically
642
+ supplier_agent = SupplierAgent.new
643
+ inventory_agent = InventoryAgent.new
644
+ logistics_agent = LogisticsAgent.new
645
+
646
+ # Supply shortage triggers intelligent coordination
647
+ inventory_agent.detect_low_stock(product: "widgets")
648
+ # → SupplyRequestMessage → Multiple suppliers
649
+ # → LogisticsCoordinationMessage → Shipping optimization
650
+ # → ProductionPlanningMessage → Manufacturing adjustment
651
+ ```
652
+
653
+ ### 3. Healthcare Coordination System
654
+ ```ruby
655
+ # Medical AI agents coordinate patient care
656
+ diagnostic_agent = DiagnosticAgent.new
657
+ treatment_agent = TreatmentAgent.new
658
+ pharmacy_agent = PharmacyAgent.new
659
+
660
+ # Patient symptoms trigger coordinated response
661
+ diagnostic_agent.analyze_symptoms(patient_data)
662
+ # → DiagnosticRequestMessage → Specialists
663
+ # → TreatmentPlanMessage → Treatment providers
664
+ # → PrescriptionMessage → Pharmacy systems
665
+ ```
666
+
667
+ ## Implementation Roadmap
668
+
669
+ ### Phase 1: Basic AI Message Selection
670
+ - Integrate Agent99 with SmartMessage AI agent pattern
671
+ - Implement message discovery and AI selection
672
+ - Basic validation retry logic
673
+
674
+ ### Phase 2: Learning and Adaptation
675
+ - Add message performance tracking
676
+ - Implement learning from successful patterns
677
+ - Self-adapting agent behavior
678
+
679
+ ### Phase 3: Swarm Intelligence
680
+ - Multi-agent coordination protocols
681
+ - Collective decision making
682
+ - Distributed knowledge sharing
683
+
684
+ ### Phase 4: Cross-Domain Integration
685
+ - Domain translation capabilities
686
+ - Semantic message bridges
687
+ - Universal agent communication protocols
688
+
689
+ ### Phase 5: Self-Organizing Networks
690
+ - Dynamic topology adaptation
691
+ - Performance-driven restructuring
692
+ - Emergent communication patterns
693
+
694
+ ## Model Context Protocol (MCP) Integration
695
+
696
+ ### MCP vs SmartMessage+Agent99: Complementary Technologies
697
+
698
+ The Model Context Protocol (MCP) and SmartMessage+Agent99 address different but highly complementary aspects of AI agent systems:
699
+
700
+ **MCP Focus**: Context and resource sharing for AI applications
701
+ - **Client-Server Model**: AI hosts connect to resource/tool servers
702
+ - **Resource Discovery**: Dynamic access to data sources, files, APIs
703
+ - **Tool Execution**: Standardized tool invocation for AI assistants
704
+ - **Context Enhancement**: Rich contextual data for AI decision-making
705
+
706
+ **SmartMessage+Agent99 Focus**: Agent communication and coordination
707
+ - **Peer-to-Peer Messaging**: Structured communication between autonomous agents
708
+ - **Service Discovery**: Agents finding and coordinating with other agents
709
+ - **Business Logic**: Domain-specific message types with validation
710
+ - **Distributed Networks**: Multi-agent coordination across systems
711
+
712
+ ### Synergistic Integration Architecture
713
+
714
+ ```ruby
715
+ class MCPEnabledSmartAgent < AgentSupport
716
+ def initialize(name, mcp_servers = [])
717
+ super(name)
718
+ @mcp_clients = setup_mcp_connections(mcp_servers)
719
+ @context_cache = {}
720
+ end
721
+
722
+ # Enhanced message generation using MCP context
723
+ def send_message_for_scenario(scenario)
724
+ # Step 1: Gather relevant context via MCP
725
+ mcp_context = gather_contextual_resources(scenario)
726
+
727
+ # Step 2: Enhance scenario with rich context
728
+ enhanced_scenario = scenario.merge({
729
+ mcp_resources: mcp_context[:resources],
730
+ available_tools: mcp_context[:tools],
731
+ contextual_data: mcp_context[:data]
732
+ })
733
+
734
+ # Step 3: Use AI with enhanced context for message selection
735
+ super(enhanced_scenario)
736
+ end
737
+
738
+ private
739
+
740
+ def gather_contextual_resources(scenario)
741
+ context = { resources: [], tools: [], data: {} }
742
+
743
+ @mcp_clients.each do |server_name, client|
744
+ # Query each MCP server for relevant resources
745
+ resources = client.list_resources(filter: scenario[:type])
746
+
747
+ relevant_resources = resources.select do |resource|
748
+ resource_relevant_to_scenario?(resource, scenario)
749
+ end
750
+
751
+ relevant_resources.each do |resource|
752
+ content = client.read_resource(resource[:uri])
753
+ context[:resources] << {
754
+ server: server_name,
755
+ uri: resource[:uri],
756
+ content: content,
757
+ type: resource[:mimeType]
758
+ }
759
+ end
760
+
761
+ # Gather available tools
762
+ tools = client.list_tools
763
+ context[:tools].concat(tools.map { |tool| { server: server_name, **tool } })
764
+ end
765
+
766
+ context
767
+ end
768
+
769
+ def resource_relevant_to_scenario?(resource, scenario)
770
+ # Use AI to determine resource relevance
771
+ prompt = "Is this resource relevant to scenario '#{scenario[:description]}'? Resource: #{resource[:name]} - #{resource[:description]}"
772
+ response = @llm.ask(prompt)
773
+ response.content.downcase.include?('yes')
774
+ end
775
+ end
776
+ ```
777
+
778
+ ### MCP-Enhanced Message Types
779
+
780
+ ```ruby
781
+ # SmartMessage types that leverage MCP resources
782
+ class MCPResourceRequest < SmartMessage::Base
783
+ property :resource_uri, required: true
784
+ property :requesting_agent, required: true
785
+ property :use_case, required: true
786
+ property :priority, type: String, default: 'normal'
787
+
788
+ description "Request access to MCP resources across agent network"
789
+ end
790
+
791
+ class MCPToolInvocation < SmartMessage::Base
792
+ property :tool_name, required: true
793
+ property :server_id, required: true
794
+ property :parameters, type: Hash
795
+ property :callback_agent, required: true
796
+
797
+ description "Coordinate MCP tool execution across agents"
798
+ end
799
+
800
+ class ContextEnrichedEmergency < SmartMessage::Base
801
+ property :incident_type, required: true
802
+ property :location, required: true
803
+ property :description, required: true
804
+ property :mcp_context, type: Hash
805
+ property :severity_assessment, type: String
806
+ property :recommended_resources, type: Array
807
+
808
+ description "Emergency message enhanced with MCP contextual data"
809
+ end
810
+ ```
811
+
812
+ ### Hybrid Architecture: Agent99 + SmartMessage + MCP
813
+
814
+ ```ruby
815
+ class HybridIntelligentAgent < Agent99::Base
816
+ include AgentSupport # SmartMessage AI capabilities
817
+
818
+ def initialize(name, config = {})
819
+ super()
820
+ @smart_messenger = MCPEnabledSmartAgent.new(name, config[:mcp_servers])
821
+ @capabilities = merge_all_capabilities
822
+ end
823
+
824
+ def info
825
+ {
826
+ name: @name,
827
+ type: :hybrid,
828
+ capabilities: @capabilities,
829
+ mcp_enabled: true,
830
+ smart_message_enabled: true,
831
+ ai_enhanced: true
832
+ }
833
+ end
834
+
835
+ # Process Agent99 requests with MCP context + SmartMessage intelligence
836
+ def process_request(payload)
837
+ # Create scenario from Agent99 request
838
+ scenario = {
839
+ type: determine_scenario_type(payload),
840
+ description: payload[:description],
841
+ context: payload,
842
+ agent_request: true
843
+ }
844
+
845
+ # Use MCP-enhanced SmartMessage for intelligent processing
846
+ response_message = @smart_messenger.send_message_for_scenario(scenario)
847
+
848
+ # Return structured Agent99 response
849
+ send_response({
850
+ result: response_message.to_h,
851
+ intelligence_sources: ['mcp_context', 'ai_selection', 'smart_message'],
852
+ enhanced: true
853
+ })
854
+ end
855
+
856
+ private
857
+
858
+ def merge_all_capabilities
859
+ agent99_caps = super || []
860
+ smart_message_caps = @smart_messenger.discover_message_types.keys
861
+ mcp_caps = @smart_messenger.mcp_clients.flat_map { |_, client| client.list_tools.map { |t| t[:name] } }
862
+
863
+ {
864
+ agent99: agent99_caps,
865
+ smart_message: smart_message_caps,
866
+ mcp_tools: mcp_caps
867
+ }
868
+ end
869
+ end
870
+ ```
871
+
872
+ ### Real-World Integration: Smart City with MCP
873
+
874
+ ```ruby
875
+ class SmartCityMCPCoordinator < HybridIntelligentAgent
876
+ def initialize
877
+ mcp_servers = {
878
+ traffic_data: { url: 'mcp://city.gov/traffic', capabilities: ['traffic_flow', 'incidents'] },
879
+ weather_service: { url: 'mcp://weather.gov/api', capabilities: ['current', 'forecast'] },
880
+ emergency_db: { url: 'mcp://emergency.city/db', capabilities: ['history', 'resources'] },
881
+ camera_network: { url: 'mcp://security.city/cameras', capabilities: ['live_feed', 'analytics'] },
882
+ social_media: { url: 'mcp://social.monitor/feeds', capabilities: ['sentiment', 'reports'] }
883
+ }
884
+
885
+ super('smart_city_coordinator', { mcp_servers: mcp_servers })
886
+ end
887
+
888
+ def process_citywide_incident(incident_report)
889
+ # Scenario incorporates all available context sources
890
+ scenario = {
891
+ type: 'citywide_emergency',
892
+ description: incident_report[:description],
893
+ location: incident_report[:location],
894
+ severity: incident_report[:initial_severity],
895
+ context: build_comprehensive_context(incident_report)
896
+ }
897
+
898
+ # AI processes with full contextual awareness
899
+ coordinated_response = @smart_messenger.send_message_for_scenario(scenario)
900
+
901
+ # Execute coordinated multi-agent response
902
+ execute_coordinated_response(coordinated_response, scenario[:context])
903
+ end
904
+
905
+ private
906
+
907
+ def build_comprehensive_context(incident)
908
+ {
909
+ traffic: get_mcp_resource('traffic_data', "current/#{incident[:location]}"),
910
+ weather: get_mcp_resource('weather_service', "conditions/#{incident[:location]}"),
911
+ history: get_mcp_resource('emergency_db', build_history_query(incident)),
912
+ visual: invoke_mcp_tool('camera_network', 'get_area_feed', { location: incident[:location] }),
913
+ social: get_mcp_resource('social_media', "sentiment/#{incident[:location]}/#{Time.now.hour}"),
914
+ resources: get_mcp_resource('emergency_db', "available_resources/#{incident[:location]}")
915
+ }
916
+ end
917
+ end
918
+ ```
919
+
920
+ ### MCP Integration Benefits
921
+
922
+ 1. **Rich Contextual Awareness**: Agents access comprehensive data sources
923
+ 2. **Dynamic Tool Access**: Agents can invoke external tools through MCP
924
+ 3. **Enhanced Decision Making**: AI decisions informed by real-world data
925
+ 4. **Resource Coordination**: Agents coordinate access to shared resources
926
+ 5. **Cross-Domain Integration**: Bridge different data systems and APIs
927
+
928
+ ### Implementation Strategy
929
+
930
+ **Phase 1**: Basic MCP Integration
931
+ - Connect SmartMessage agents to MCP servers
932
+ - Enhance message generation with MCP context
933
+ - Implement resource sharing coordination
934
+
935
+ **Phase 2**: Advanced Context Processing
936
+ - AI-driven resource relevance assessment
937
+ - Dynamic tool selection and invocation
938
+ - Context caching and optimization
939
+
940
+ **Phase 3**: Network-Scale Coordination
941
+ - MCP resource sharing across agent networks
942
+ - Distributed context aggregation
943
+ - Intelligent resource allocation
944
+
945
+ **Phase 4**: Emergent Intelligence
946
+ - Agents learning optimal resource usage patterns
947
+ - Self-organizing context networks
948
+ - Predictive resource provisioning
949
+
950
+ ## Conclusion: The Future of Intelligent Agent Systems
951
+
952
+ The integration of MCP with SmartMessage+Agent99 creates a comprehensive ecosystem where agents have rich contextual awareness (MCP), intelligent communication (SmartMessage), and seamless coordination (Agent99) - enabling truly intelligent distributed systems that can access any data source, communicate with any agent, and coordinate complex real-world operations.
953
+
954
+ ### The Three-Layer Intelligence Stack
955
+
956
+ This architecture represents a fundamental shift from traditional microservices to truly intelligent agent networks:
957
+
958
+ **Layer 1: Context Layer (MCP)**
959
+ - Rich data sources and tool access
960
+ - Real-time information gathering
961
+ - Dynamic resource discovery
962
+
963
+ **Layer 2: Intelligence Layer (AI + SmartMessage)**
964
+ - Contextual message selection
965
+ - Intelligent property generation
966
+ - Self-healing validation and adaptation
967
+
968
+ **Layer 3: Coordination Layer (Agent99)**
969
+ - Service discovery and registration
970
+ - Request/response orchestration
971
+ - Multi-agent workflow management
972
+
973
+ ### Key Innovations
974
+
975
+ 1. **Context-Aware Messaging**: Messages are selected and populated based on comprehensive real-world context
976
+ 2. **Dynamic Adaptability**: Agents adapt to new message types and changing scenarios without code changes
977
+ 3. **Self-Healing Networks**: Automatic error recovery and network topology optimization
978
+ 4. **Emergent Intelligence**: Collective agent behaviors that exceed individual capabilities
979
+ 5. **Cross-Domain Bridge**: Seamless communication across different domains and protocols
980
+
981
+ ### Competitive Advantages
982
+
983
+ **vs Traditional Microservices**: Intelligent, adaptive communication vs fixed API contracts
984
+ **vs Simple AI Agents**: Structured, validated messaging vs unstructured interactions
985
+ **vs MCP Alone**: Multi-agent coordination vs single client-server interactions
986
+ **vs Message Queues**: AI-driven routing vs static queue management
987
+
988
+ ### Real-World Impact
989
+
990
+ This architecture enables:
991
+ - **Smart Cities** that respond intelligently to emerging situations
992
+ - **Autonomous Supply Chains** that adapt to disruptions dynamically
993
+ - **Healthcare Systems** that coordinate patient care seamlessly
994
+ - **Financial Networks** that detect and respond to market changes
995
+ - **IoT Ecosystems** that self-organize and optimize operations
996
+
997
+ ### The Path Forward
998
+
999
+ The convergence of MCP resource sharing, SmartMessage structured communication, and Agent99 service coordination—all enhanced by AI intelligence—represents the next generation of distributed systems architecture. These aren't competing technologies but synergistic protocols that together enable the creation of truly intelligent, adaptive, and autonomous software ecosystems.
1000
+
1001
+ **This is the future of software: not just connected systems, but intelligent networks of autonomous agents that understand context, communicate naturally, and coordinate seamlessly to solve complex real-world problems.**