robot_lab 0.1.0 → 0.2.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.
Files changed (242) hide show
  1. checksums.yaml +4 -4
  2. data/.architecture/AGENTS.md +32 -0
  3. data/.architecture/config.yml +8 -0
  4. data/.architecture/members.yml +60 -0
  5. data/.architecture/reviews/feature-free-will.md +490 -0
  6. data/.architecture/reviews/overall-codebase.md +427 -0
  7. data/.claude/settings.local.json +57 -0
  8. data/.codex/config.toml +2 -0
  9. data/.irbrc +2 -2
  10. data/.rubocop.yml +172 -0
  11. data/CHANGELOG.md +72 -0
  12. data/CLAUDE.md +139 -0
  13. data/README.md +91 -95
  14. data/Rakefile +109 -3
  15. data/agent2agent_review.md +192 -0
  16. data/agentf_improvements.md +253 -0
  17. data/agents.md +14 -0
  18. data/docs/examples/index.md +37 -2
  19. data/docs/getting-started/configuration.md +20 -7
  20. data/docs/guides/index.md +16 -16
  21. data/docs/guides/knowledge.md +7 -1
  22. data/docs/guides/observability.md +132 -0
  23. data/docs/index.md +30 -3
  24. data/docs/superpowers/plans/2026-05-06-agentskills.md +1303 -0
  25. data/docs/superpowers/specs/2026-05-06-agentskills-design.md +247 -0
  26. data/examples/.envrc +1 -0
  27. data/examples/01_simple_robot.rb +5 -9
  28. data/examples/02_tools.rb +5 -9
  29. data/examples/03_network.rb +8 -9
  30. data/examples/04_mcp.rb +21 -29
  31. data/examples/05_streaming.rb +12 -18
  32. data/examples/06_prompt_templates.rb +11 -19
  33. data/examples/07_network_memory.rb +16 -31
  34. data/examples/08_llm_config.rb +10 -22
  35. data/examples/09_chaining.rb +16 -27
  36. data/examples/10_memory.rb +12 -28
  37. data/examples/11_network_introspection.rb +15 -29
  38. data/examples/12_message_bus.rb +5 -12
  39. data/examples/13_spawn.rb +5 -10
  40. data/examples/14_rusty_circuit/.envrc +1 -0
  41. data/examples/14_rusty_circuit/comic.rb +2 -0
  42. data/examples/14_rusty_circuit/heckler.rb +1 -1
  43. data/examples/14_rusty_circuit/open_mic.rb +1 -3
  44. data/examples/14_rusty_circuit/scout.rb +2 -0
  45. data/examples/15_memory_network_and_bus/.envrc +1 -0
  46. data/examples/15_memory_network_and_bus/editorial_pipeline.rb +6 -3
  47. data/examples/15_memory_network_and_bus/linux_writer.rb +1 -1
  48. data/examples/15_memory_network_and_bus/output/combined_article.md +6 -6
  49. data/examples/15_memory_network_and_bus/output/final_article.md +6 -8
  50. data/examples/15_memory_network_and_bus/output/linux_draft.md +4 -2
  51. data/examples/15_memory_network_and_bus/output/mac_draft.md +3 -3
  52. data/examples/15_memory_network_and_bus/output/memory.json +6 -6
  53. data/examples/15_memory_network_and_bus/output/revision_1.md +10 -11
  54. data/examples/15_memory_network_and_bus/output/revision_2.md +6 -8
  55. data/examples/15_memory_network_and_bus/output/windows_draft.md +3 -3
  56. data/examples/16_writers_room/.envrc +1 -0
  57. data/examples/16_writers_room/writers_room.rb +2 -4
  58. data/examples/17_skills.rb +8 -17
  59. data/examples/18_rails/Gemfile +1 -0
  60. data/examples/19_token_tracking.rb +9 -15
  61. data/examples/20_circuit_breaker.rb +10 -19
  62. data/examples/21_learning_loop.rb +11 -20
  63. data/examples/22_context_compression.rb +6 -13
  64. data/examples/23_convergence.rb +6 -17
  65. data/examples/24_structured_delegation.rb +11 -15
  66. data/examples/25_history_search.rb +5 -12
  67. data/examples/26_document_store.rb +6 -13
  68. data/examples/27_incident_response/incident_response.rb +4 -5
  69. data/examples/28_mcp_discovery.rb +8 -11
  70. data/examples/29_ractor_tools.rb +4 -9
  71. data/examples/30_ractor_network.rb +10 -19
  72. data/examples/31_launch_assessment.rb +10 -23
  73. data/examples/32_newsletter_reader.rb +188 -0
  74. data/examples/33_stock_generator.rb +80 -0
  75. data/examples/33_stock_predictor.rb +306 -0
  76. data/examples/34_agentskills.rb +72 -0
  77. data/examples/README.md +1 -1
  78. data/examples/common.rb +76 -0
  79. data/examples/ruboruby.md +423 -0
  80. data/examples/temp.md +51 -0
  81. data/lib/robot_lab/agent_skill.rb +63 -0
  82. data/lib/robot_lab/agent_skill_catalog.rb +74 -0
  83. data/lib/robot_lab/ask_user.rb +2 -2
  84. data/lib/robot_lab/bus_poller.rb +12 -5
  85. data/lib/robot_lab/config.rb +1 -12
  86. data/lib/robot_lab/delegation_future.rb +1 -1
  87. data/lib/robot_lab/doom_loop_detector.rb +98 -0
  88. data/lib/robot_lab/history_compressor.rb +4 -10
  89. data/lib/robot_lab/mcp/client.rb +1 -2
  90. data/lib/robot_lab/mcp/connection_poller.rb +3 -3
  91. data/lib/robot_lab/mcp/server.rb +1 -1
  92. data/lib/robot_lab/mcp/server_discovery.rb +0 -2
  93. data/lib/robot_lab/memory.rb +32 -27
  94. data/lib/robot_lab/memory_change.rb +2 -2
  95. data/lib/robot_lab/message.rb +4 -4
  96. data/lib/robot_lab/network.rb +11 -6
  97. data/lib/robot_lab/robot/agent_skill_matching.rb +99 -0
  98. data/lib/robot_lab/robot/bus_messaging.rb +9 -27
  99. data/lib/robot_lab/robot/history_search.rb +4 -1
  100. data/lib/robot_lab/robot/mcp_management.rb +5 -11
  101. data/lib/robot_lab/robot/template_rendering.rb +60 -40
  102. data/lib/robot_lab/robot.rb +323 -206
  103. data/lib/robot_lab/robot_result.rb +6 -5
  104. data/lib/robot_lab/run_config.rb +5 -11
  105. data/lib/robot_lab/script_tool.rb +76 -0
  106. data/lib/robot_lab/state_proxy.rb +7 -5
  107. data/lib/robot_lab/tool.rb +3 -3
  108. data/lib/robot_lab/tool_config.rb +1 -1
  109. data/lib/robot_lab/tool_manifest.rb +5 -7
  110. data/lib/robot_lab/user_message.rb +2 -2
  111. data/lib/robot_lab/version.rb +1 -1
  112. data/lib/robot_lab/waiter.rb +1 -1
  113. data/lib/robot_lab.rb +41 -52
  114. data/logfile +8 -0
  115. data/mkdocs.yml +2 -3
  116. data/robot_concurrency.md +38 -0
  117. data/simple_acp_review.md +298 -0
  118. data/site/404.html +2300 -0
  119. data/site/api/core/index.html +2706 -0
  120. data/site/api/core/memory/index.html +3793 -0
  121. data/site/api/core/network/index.html +3500 -0
  122. data/site/api/core/robot/index.html +4566 -0
  123. data/site/api/core/state/index.html +3390 -0
  124. data/site/api/core/tool/index.html +3843 -0
  125. data/site/api/index.html +2635 -0
  126. data/site/api/mcp/client/index.html +3435 -0
  127. data/site/api/mcp/index.html +2783 -0
  128. data/site/api/mcp/server/index.html +3252 -0
  129. data/site/api/mcp/transports/index.html +3352 -0
  130. data/site/api/messages/index.html +2641 -0
  131. data/site/api/messages/text-message/index.html +3087 -0
  132. data/site/api/messages/tool-call-message/index.html +3159 -0
  133. data/site/api/messages/tool-result-message/index.html +3252 -0
  134. data/site/api/messages/user-message/index.html +3212 -0
  135. data/site/api/streaming/context/index.html +3282 -0
  136. data/site/api/streaming/events/index.html +3347 -0
  137. data/site/api/streaming/index.html +2738 -0
  138. data/site/architecture/core-concepts/index.html +3757 -0
  139. data/site/architecture/index.html +2797 -0
  140. data/site/architecture/message-flow/index.html +3238 -0
  141. data/site/architecture/network-orchestration/index.html +3433 -0
  142. data/site/architecture/robot-execution/index.html +3140 -0
  143. data/site/architecture/state-management/index.html +3498 -0
  144. data/site/assets/css/custom.css +56 -0
  145. data/site/assets/images/favicon.png +0 -0
  146. data/site/assets/images/robot_lab.jpg +0 -0
  147. data/site/assets/javascripts/bundle.79ae519e.min.js +16 -0
  148. data/site/assets/javascripts/bundle.79ae519e.min.js.map +7 -0
  149. data/site/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
  150. data/site/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
  151. data/site/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
  152. data/site/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
  153. data/site/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
  154. data/site/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
  155. data/site/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
  156. data/site/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
  157. data/site/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
  158. data/site/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
  159. data/site/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
  160. data/site/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
  161. data/site/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
  162. data/site/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
  163. data/site/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
  164. data/site/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
  165. data/site/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
  166. data/site/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
  167. data/site/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
  168. data/site/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
  169. data/site/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
  170. data/site/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
  171. data/site/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
  172. data/site/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
  173. data/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
  174. data/site/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
  175. data/site/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
  176. data/site/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
  177. data/site/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
  178. data/site/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
  179. data/site/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
  180. data/site/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
  181. data/site/assets/javascripts/lunr/tinyseg.js +206 -0
  182. data/site/assets/javascripts/lunr/wordcut.js +6708 -0
  183. data/site/assets/javascripts/workers/search.2c215733.min.js +42 -0
  184. data/site/assets/javascripts/workers/search.2c215733.min.js.map +7 -0
  185. data/site/assets/stylesheets/main.484c7ddc.min.css +1 -0
  186. data/site/assets/stylesheets/main.484c7ddc.min.css.map +1 -0
  187. data/site/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
  188. data/site/assets/stylesheets/palette.ab4e12ef.min.css.map +1 -0
  189. data/site/concepts/index.html +3455 -0
  190. data/site/examples/basic-chat/index.html +2880 -0
  191. data/site/examples/index.html +2907 -0
  192. data/site/examples/mcp-server/index.html +3018 -0
  193. data/site/examples/multi-robot-network/index.html +3131 -0
  194. data/site/examples/rails-application/index.html +3329 -0
  195. data/site/examples/tool-usage/index.html +3085 -0
  196. data/site/getting-started/configuration/index.html +3745 -0
  197. data/site/getting-started/index.html +2572 -0
  198. data/site/getting-started/installation/index.html +2981 -0
  199. data/site/getting-started/quick-start/index.html +2942 -0
  200. data/site/guides/building-robots/index.html +4290 -0
  201. data/site/guides/creating-networks/index.html +3858 -0
  202. data/site/guides/index.html +2586 -0
  203. data/site/guides/mcp-integration/index.html +3581 -0
  204. data/site/guides/memory/index.html +3586 -0
  205. data/site/guides/rails-integration/index.html +4019 -0
  206. data/site/guides/streaming/index.html +3157 -0
  207. data/site/guides/using-tools/index.html +3802 -0
  208. data/site/index.html +2671 -0
  209. data/site/search/search_index.json +1 -0
  210. data/site/sitemap.xml +183 -0
  211. data/site/sitemap.xml.gz +0 -0
  212. data/site/tags.json +1 -0
  213. data/temp.md +6 -0
  214. data/tool_manifest_plan.md +155 -0
  215. metadata +154 -92
  216. data/docs/examples/rails-application.md +0 -419
  217. data/docs/guides/ractor-parallelism.md +0 -364
  218. data/docs/guides/rails-integration.md +0 -681
  219. data/docs/superpowers/plans/2026-04-14-ractor-integration.md +0 -1538
  220. data/docs/superpowers/specs/2026-04-14-ractor-integration-design.md +0 -258
  221. data/lib/generators/robot_lab/install_generator.rb +0 -90
  222. data/lib/generators/robot_lab/job_generator.rb +0 -40
  223. data/lib/generators/robot_lab/robot_generator.rb +0 -55
  224. data/lib/generators/robot_lab/templates/initializer.rb.tt +0 -42
  225. data/lib/generators/robot_lab/templates/job.rb.tt +0 -21
  226. data/lib/generators/robot_lab/templates/migration.rb.tt +0 -32
  227. data/lib/generators/robot_lab/templates/result_model.rb.tt +0 -52
  228. data/lib/generators/robot_lab/templates/robot.rb.tt +0 -31
  229. data/lib/generators/robot_lab/templates/robot_job.rb.tt +0 -18
  230. data/lib/generators/robot_lab/templates/robot_test.rb.tt +0 -34
  231. data/lib/generators/robot_lab/templates/routing_robot.rb.tt +0 -59
  232. data/lib/generators/robot_lab/templates/thread_model.rb.tt +0 -40
  233. data/lib/robot_lab/document_store.rb +0 -155
  234. data/lib/robot_lab/ractor_boundary.rb +0 -42
  235. data/lib/robot_lab/ractor_job.rb +0 -37
  236. data/lib/robot_lab/ractor_memory_proxy.rb +0 -85
  237. data/lib/robot_lab/ractor_network_scheduler.rb +0 -154
  238. data/lib/robot_lab/ractor_worker_pool.rb +0 -117
  239. data/lib/robot_lab/rails_integration/engine.rb +0 -29
  240. data/lib/robot_lab/rails_integration/job.rb +0 -158
  241. data/lib/robot_lab/rails_integration/railtie.rb +0 -51
  242. data/lib/robot_lab/rails_integration/turbo_stream_callbacks.rb +0 -72
data/site/404.html ADDED
@@ -0,0 +1,2300 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en" class="no-js">
4
+ <head>
5
+
6
+ <meta charset="utf-8">
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+
9
+ <meta name="description" content="Multi-robot LLM workflow orchestration for Ruby">
10
+
11
+
12
+ <meta name="author" content="Dewayne VanHoozer">
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+ <link rel="icon" href="/robot_lab/assets/images/favicon.png">
22
+ <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.7.1">
23
+
24
+
25
+
26
+ <title>RobotLab</title>
27
+
28
+
29
+
30
+ <link rel="stylesheet" href="/robot_lab/assets/stylesheets/main.484c7ddc.min.css">
31
+
32
+
33
+ <link rel="stylesheet" href="/robot_lab/assets/stylesheets/palette.ab4e12ef.min.css">
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
47
+ <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
48
+ <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
49
+
50
+
51
+
52
+ <link rel="stylesheet" href="/robot_lab/assets/css/custom.css">
53
+
54
+ <script>__md_scope=new URL("/robot_lab/",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+ </head>
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+ <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="deep-purple" data-md-color-accent="amber">
73
+
74
+
75
+ <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
76
+ <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
77
+ <label class="md-overlay" for="__drawer"></label>
78
+ <div data-md-component="skip">
79
+
80
+ </div>
81
+ <div data-md-component="announce">
82
+
83
+ </div>
84
+
85
+
86
+
87
+
88
+
89
+
90
+ <header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
91
+ <nav class="md-header__inner md-grid" aria-label="Header">
92
+ <a href="/robot_lab/." title="RobotLab" class="md-header__button md-logo" aria-label="RobotLab" data-md-component="logo">
93
+
94
+
95
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 0 1 7 7h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1H2a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a7 7 0 0 1 7-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 0 1 2-2M7.5 13A2.5 2.5 0 0 0 5 15.5 2.5 2.5 0 0 0 7.5 18a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 7.5 13m9 0a2.5 2.5 0 0 0-2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0-2.5-2.5"/></svg>
96
+
97
+ </a>
98
+ <label class="md-header__button md-icon" for="__drawer">
99
+
100
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
101
+ </label>
102
+ <div class="md-header__title" data-md-component="header-title">
103
+ <div class="md-header__ellipsis">
104
+ <div class="md-header__topic">
105
+ <span class="md-ellipsis">
106
+ RobotLab
107
+ </span>
108
+ </div>
109
+ <div class="md-header__topic" data-md-component="header-topic">
110
+ <span class="md-ellipsis">
111
+
112
+
113
+
114
+ </span>
115
+ </div>
116
+ </div>
117
+ </div>
118
+
119
+
120
+ <form class="md-header__option" data-md-component="palette">
121
+
122
+
123
+
124
+
125
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="deep-purple" data-md-color-accent="amber" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
126
+
127
+ <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
128
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
129
+ </label>
130
+
131
+
132
+
133
+
134
+
135
+ <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="deep-purple" data-md-color-accent="amber" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
136
+
137
+ <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
138
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
139
+ </label>
140
+
141
+
142
+ </form>
143
+
144
+
145
+
146
+ <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
147
+
148
+
149
+
150
+
151
+
152
+ <label class="md-header__button md-icon" for="__search">
153
+
154
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
155
+ </label>
156
+ <div class="md-search" data-md-component="search" role="dialog">
157
+ <label class="md-search__overlay" for="__search"></label>
158
+ <div class="md-search__inner" role="search">
159
+ <form class="md-search__form" name="search">
160
+ <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
161
+ <label class="md-search__icon md-icon" for="__search">
162
+
163
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
164
+
165
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
166
+ </label>
167
+ <nav class="md-search__options" aria-label="Search">
168
+
169
+ <a href="javascript:void(0)" class="md-search__icon md-icon" title="Share" aria-label="Share" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
170
+
171
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
172
+ </a>
173
+
174
+ <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
175
+
176
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
177
+ </button>
178
+ </nav>
179
+
180
+ <div class="md-search__suggest" data-md-component="search-suggest"></div>
181
+
182
+ </form>
183
+ <div class="md-search__output">
184
+ <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
185
+ <div class="md-search-result" data-md-component="search-result">
186
+ <div class="md-search-result__meta">
187
+ Initializing search
188
+ </div>
189
+ <ol class="md-search-result__list" role="presentation"></ol>
190
+ </div>
191
+ </div>
192
+ </div>
193
+ </div>
194
+ </div>
195
+
196
+
197
+
198
+ <div class="md-header__source">
199
+ <a href="https://github.com/madbomber/robot_lab" title="Go to repository" class="md-source" data-md-component="source">
200
+ <div class="md-source__icon md-icon">
201
+
202
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
203
+ </div>
204
+ <div class="md-source__repository">
205
+ madbomber/robot_lab
206
+ </div>
207
+ </a>
208
+ </div>
209
+
210
+ </nav>
211
+
212
+
213
+
214
+ <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
215
+ <div class="md-grid">
216
+ <ul class="md-tabs__list">
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+ <li class="md-tabs__item">
226
+ <a href="/robot_lab/." class="md-tabs__link">
227
+
228
+
229
+
230
+
231
+
232
+ Home
233
+
234
+ </a>
235
+ </li>
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+ <li class="md-tabs__item">
248
+ <a href="/robot_lab/getting-started/" class="md-tabs__link">
249
+
250
+
251
+
252
+
253
+
254
+ Getting Started
255
+
256
+ </a>
257
+ </li>
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+ <li class="md-tabs__item">
270
+ <a href="/robot_lab/architecture/" class="md-tabs__link">
271
+
272
+
273
+
274
+
275
+
276
+ Architecture
277
+
278
+ </a>
279
+ </li>
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+ <li class="md-tabs__item">
292
+ <a href="/robot_lab/guides/" class="md-tabs__link">
293
+
294
+
295
+
296
+
297
+
298
+ Guides
299
+
300
+ </a>
301
+ </li>
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+ <li class="md-tabs__item">
314
+ <a href="/robot_lab/api/" class="md-tabs__link">
315
+
316
+
317
+
318
+
319
+
320
+ API Reference
321
+
322
+ </a>
323
+ </li>
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+ <li class="md-tabs__item">
336
+ <a href="/robot_lab/examples/" class="md-tabs__link">
337
+
338
+
339
+
340
+
341
+
342
+ Examples
343
+
344
+ </a>
345
+ </li>
346
+
347
+
348
+
349
+
350
+ </ul>
351
+ </div>
352
+ </nav>
353
+
354
+
355
+ </header>
356
+
357
+ <div class="md-container" data-md-component="container">
358
+
359
+
360
+
361
+
362
+ <main class="md-main" data-md-component="main">
363
+ <div class="md-main__inner md-grid">
364
+
365
+
366
+
367
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
368
+ <div class="md-sidebar__scrollwrap">
369
+ <div class="md-sidebar__inner">
370
+
371
+
372
+
373
+
374
+
375
+
376
+ <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
377
+ <label class="md-nav__title" for="__drawer">
378
+ <a href="/robot_lab/." title="RobotLab" class="md-nav__button md-logo" aria-label="RobotLab" data-md-component="logo">
379
+
380
+
381
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2a2 2 0 0 1 2 2c0 .74-.4 1.39-1 1.73V7h1a7 7 0 0 1 7 7h1a1 1 0 0 1 1 1v3a1 1 0 0 1-1 1h-1v1a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-1H2a1 1 0 0 1-1-1v-3a1 1 0 0 1 1-1h1a7 7 0 0 1 7-7h1V5.73c-.6-.34-1-.99-1-1.73a2 2 0 0 1 2-2M7.5 13A2.5 2.5 0 0 0 5 15.5 2.5 2.5 0 0 0 7.5 18a2.5 2.5 0 0 0 2.5-2.5A2.5 2.5 0 0 0 7.5 13m9 0a2.5 2.5 0 0 0-2.5 2.5 2.5 2.5 0 0 0 2.5 2.5 2.5 2.5 0 0 0 2.5-2.5 2.5 2.5 0 0 0-2.5-2.5"/></svg>
382
+
383
+ </a>
384
+ RobotLab
385
+ </label>
386
+
387
+ <div class="md-nav__source">
388
+ <a href="https://github.com/madbomber/robot_lab" title="Go to repository" class="md-source" data-md-component="source">
389
+ <div class="md-source__icon md-icon">
390
+
391
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
392
+ </div>
393
+ <div class="md-source__repository">
394
+ madbomber/robot_lab
395
+ </div>
396
+ </a>
397
+ </div>
398
+
399
+ <ul class="md-nav__list" data-md-scrollfix>
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+
418
+
419
+
420
+
421
+
422
+
423
+ <li class="md-nav__item md-nav__item--nested">
424
+
425
+
426
+
427
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" >
428
+
429
+
430
+ <div class="md-nav__link md-nav__container">
431
+ <a href="/robot_lab/." class="md-nav__link ">
432
+
433
+
434
+
435
+ <span class="md-ellipsis">
436
+
437
+
438
+ Home
439
+
440
+
441
+
442
+ </span>
443
+
444
+
445
+
446
+ </a>
447
+
448
+
449
+ <label class="md-nav__link " for="__nav_1" id="__nav_1_label" tabindex="0">
450
+ <span class="md-nav__icon md-icon"></span>
451
+ </label>
452
+
453
+ </div>
454
+
455
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="false">
456
+ <label class="md-nav__title" for="__nav_1">
457
+ <span class="md-nav__icon md-icon"></span>
458
+
459
+
460
+ Home
461
+
462
+
463
+ </label>
464
+ <ul class="md-nav__list" data-md-scrollfix>
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+ <li class="md-nav__item">
475
+ <a href="/robot_lab/concepts/" class="md-nav__link">
476
+
477
+
478
+
479
+ <span class="md-ellipsis">
480
+
481
+
482
+ Concepts
483
+
484
+
485
+
486
+ </span>
487
+
488
+
489
+
490
+ </a>
491
+ </li>
492
+
493
+
494
+
495
+
496
+ </ul>
497
+ </nav>
498
+
499
+ </li>
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+ <li class="md-nav__item md-nav__item--nested">
530
+
531
+
532
+
533
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
534
+
535
+
536
+ <div class="md-nav__link md-nav__container">
537
+ <a href="/robot_lab/getting-started/" class="md-nav__link ">
538
+
539
+
540
+
541
+ <span class="md-ellipsis">
542
+
543
+
544
+ Getting Started
545
+
546
+
547
+
548
+ </span>
549
+
550
+
551
+
552
+ </a>
553
+
554
+
555
+ <label class="md-nav__link " for="__nav_2" id="__nav_2_label" tabindex="0">
556
+ <span class="md-nav__icon md-icon"></span>
557
+ </label>
558
+
559
+ </div>
560
+
561
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
562
+ <label class="md-nav__title" for="__nav_2">
563
+ <span class="md-nav__icon md-icon"></span>
564
+
565
+
566
+ Getting Started
567
+
568
+
569
+ </label>
570
+ <ul class="md-nav__list" data-md-scrollfix>
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+ <li class="md-nav__item">
581
+ <a href="/robot_lab/getting-started/installation/" class="md-nav__link">
582
+
583
+
584
+
585
+ <span class="md-ellipsis">
586
+
587
+
588
+ Installation
589
+
590
+
591
+
592
+ </span>
593
+
594
+
595
+
596
+ </a>
597
+ </li>
598
+
599
+
600
+
601
+
602
+
603
+
604
+
605
+
606
+
607
+
608
+ <li class="md-nav__item">
609
+ <a href="/robot_lab/getting-started/quick-start/" class="md-nav__link">
610
+
611
+
612
+
613
+ <span class="md-ellipsis">
614
+
615
+
616
+ Quick Start
617
+
618
+
619
+
620
+ </span>
621
+
622
+
623
+
624
+ </a>
625
+ </li>
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+ <li class="md-nav__item">
637
+ <a href="/robot_lab/getting-started/configuration/" class="md-nav__link">
638
+
639
+
640
+
641
+ <span class="md-ellipsis">
642
+
643
+
644
+ Configuration
645
+
646
+
647
+
648
+ </span>
649
+
650
+
651
+
652
+ </a>
653
+ </li>
654
+
655
+
656
+
657
+
658
+ </ul>
659
+ </nav>
660
+
661
+ </li>
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+ <li class="md-nav__item md-nav__item--nested">
696
+
697
+
698
+
699
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
700
+
701
+
702
+ <div class="md-nav__link md-nav__container">
703
+ <a href="/robot_lab/architecture/" class="md-nav__link ">
704
+
705
+
706
+
707
+ <span class="md-ellipsis">
708
+
709
+
710
+ Architecture
711
+
712
+
713
+
714
+ </span>
715
+
716
+
717
+
718
+ </a>
719
+
720
+
721
+ <label class="md-nav__link " for="__nav_3" id="__nav_3_label" tabindex="0">
722
+ <span class="md-nav__icon md-icon"></span>
723
+ </label>
724
+
725
+ </div>
726
+
727
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
728
+ <label class="md-nav__title" for="__nav_3">
729
+ <span class="md-nav__icon md-icon"></span>
730
+
731
+
732
+ Architecture
733
+
734
+
735
+ </label>
736
+ <ul class="md-nav__list" data-md-scrollfix>
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+ <li class="md-nav__item">
747
+ <a href="/robot_lab/architecture/core-concepts/" class="md-nav__link">
748
+
749
+
750
+
751
+ <span class="md-ellipsis">
752
+
753
+
754
+ Core Concepts
755
+
756
+
757
+
758
+ </span>
759
+
760
+
761
+
762
+ </a>
763
+ </li>
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+ <li class="md-nav__item">
775
+ <a href="/robot_lab/architecture/robot-execution/" class="md-nav__link">
776
+
777
+
778
+
779
+ <span class="md-ellipsis">
780
+
781
+
782
+ Robot Execution
783
+
784
+
785
+
786
+ </span>
787
+
788
+
789
+
790
+ </a>
791
+ </li>
792
+
793
+
794
+
795
+
796
+
797
+
798
+
799
+
800
+
801
+
802
+ <li class="md-nav__item">
803
+ <a href="/robot_lab/architecture/network-orchestration/" class="md-nav__link">
804
+
805
+
806
+
807
+ <span class="md-ellipsis">
808
+
809
+
810
+ Network Orchestration
811
+
812
+
813
+
814
+ </span>
815
+
816
+
817
+
818
+ </a>
819
+ </li>
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+ <li class="md-nav__item">
831
+ <a href="/robot_lab/architecture/state-management/" class="md-nav__link">
832
+
833
+
834
+
835
+ <span class="md-ellipsis">
836
+
837
+
838
+ State Management
839
+
840
+
841
+
842
+ </span>
843
+
844
+
845
+
846
+ </a>
847
+ </li>
848
+
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+ <li class="md-nav__item">
859
+ <a href="/robot_lab/architecture/message-flow/" class="md-nav__link">
860
+
861
+
862
+
863
+ <span class="md-ellipsis">
864
+
865
+
866
+ Message Flow
867
+
868
+
869
+
870
+ </span>
871
+
872
+
873
+
874
+ </a>
875
+ </li>
876
+
877
+
878
+
879
+
880
+ </ul>
881
+ </nav>
882
+
883
+ </li>
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+
892
+
893
+
894
+
895
+
896
+
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+
908
+
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+ <li class="md-nav__item md-nav__item--nested">
922
+
923
+
924
+
925
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
926
+
927
+
928
+ <div class="md-nav__link md-nav__container">
929
+ <a href="/robot_lab/guides/" class="md-nav__link ">
930
+
931
+
932
+
933
+ <span class="md-ellipsis">
934
+
935
+
936
+ Guides
937
+
938
+
939
+
940
+ </span>
941
+
942
+
943
+
944
+ </a>
945
+
946
+
947
+ <label class="md-nav__link " for="__nav_4" id="__nav_4_label" tabindex="0">
948
+ <span class="md-nav__icon md-icon"></span>
949
+ </label>
950
+
951
+ </div>
952
+
953
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
954
+ <label class="md-nav__title" for="__nav_4">
955
+ <span class="md-nav__icon md-icon"></span>
956
+
957
+
958
+ Guides
959
+
960
+
961
+ </label>
962
+ <ul class="md-nav__list" data-md-scrollfix>
963
+
964
+
965
+
966
+
967
+
968
+
969
+
970
+
971
+
972
+ <li class="md-nav__item">
973
+ <a href="/robot_lab/guides/building-robots/" class="md-nav__link">
974
+
975
+
976
+
977
+ <span class="md-ellipsis">
978
+
979
+
980
+ Building Robots
981
+
982
+
983
+
984
+ </span>
985
+
986
+
987
+
988
+ </a>
989
+ </li>
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+
999
+
1000
+ <li class="md-nav__item">
1001
+ <a href="/robot_lab/guides/creating-networks/" class="md-nav__link">
1002
+
1003
+
1004
+
1005
+ <span class="md-ellipsis">
1006
+
1007
+
1008
+ Creating Networks
1009
+
1010
+
1011
+
1012
+ </span>
1013
+
1014
+
1015
+
1016
+ </a>
1017
+ </li>
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+ <li class="md-nav__item">
1029
+ <a href="/robot_lab/guides/using-tools/" class="md-nav__link">
1030
+
1031
+
1032
+
1033
+ <span class="md-ellipsis">
1034
+
1035
+
1036
+ Using Tools
1037
+
1038
+
1039
+
1040
+ </span>
1041
+
1042
+
1043
+
1044
+ </a>
1045
+ </li>
1046
+
1047
+
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+
1054
+
1055
+
1056
+ <li class="md-nav__item">
1057
+ <a href="/robot_lab/guides/mcp-integration/" class="md-nav__link">
1058
+
1059
+
1060
+
1061
+ <span class="md-ellipsis">
1062
+
1063
+
1064
+ MCP Integration
1065
+
1066
+
1067
+
1068
+ </span>
1069
+
1070
+
1071
+
1072
+ </a>
1073
+ </li>
1074
+
1075
+
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+
1083
+
1084
+ <li class="md-nav__item">
1085
+ <a href="/robot_lab/guides/streaming/" class="md-nav__link">
1086
+
1087
+
1088
+
1089
+ <span class="md-ellipsis">
1090
+
1091
+
1092
+ Streaming Responses
1093
+
1094
+
1095
+
1096
+ </span>
1097
+
1098
+
1099
+
1100
+ </a>
1101
+ </li>
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+
1109
+
1110
+
1111
+
1112
+ <li class="md-nav__item">
1113
+ <a href="/robot_lab/guides/memory/" class="md-nav__link">
1114
+
1115
+
1116
+
1117
+ <span class="md-ellipsis">
1118
+
1119
+
1120
+ Memory System
1121
+
1122
+
1123
+
1124
+ </span>
1125
+
1126
+
1127
+
1128
+ </a>
1129
+ </li>
1130
+
1131
+
1132
+
1133
+
1134
+
1135
+
1136
+
1137
+
1138
+
1139
+
1140
+ <li class="md-nav__item">
1141
+ <a href="/robot_lab/guides/rails-integration/" class="md-nav__link">
1142
+
1143
+
1144
+
1145
+ <span class="md-ellipsis">
1146
+
1147
+
1148
+ Rails Integration
1149
+
1150
+
1151
+
1152
+ </span>
1153
+
1154
+
1155
+
1156
+ </a>
1157
+ </li>
1158
+
1159
+
1160
+
1161
+
1162
+ </ul>
1163
+ </nav>
1164
+
1165
+ </li>
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+ <li class="md-nav__item md-nav__item--nested">
1198
+
1199
+
1200
+
1201
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
1202
+
1203
+
1204
+ <div class="md-nav__link md-nav__container">
1205
+ <a href="/robot_lab/api/" class="md-nav__link ">
1206
+
1207
+
1208
+
1209
+ <span class="md-ellipsis">
1210
+
1211
+
1212
+ API Reference
1213
+
1214
+
1215
+
1216
+ </span>
1217
+
1218
+
1219
+
1220
+ </a>
1221
+
1222
+
1223
+ <label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0">
1224
+ <span class="md-nav__icon md-icon"></span>
1225
+ </label>
1226
+
1227
+ </div>
1228
+
1229
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
1230
+ <label class="md-nav__title" for="__nav_5">
1231
+ <span class="md-nav__icon md-icon"></span>
1232
+
1233
+
1234
+ API Reference
1235
+
1236
+
1237
+ </label>
1238
+ <ul class="md-nav__list" data-md-scrollfix>
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+ <li class="md-nav__item md-nav__item--nested">
1273
+
1274
+
1275
+
1276
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_2" >
1277
+
1278
+
1279
+ <div class="md-nav__link md-nav__container">
1280
+ <a href="/robot_lab/api/core/" class="md-nav__link ">
1281
+
1282
+
1283
+
1284
+ <span class="md-ellipsis">
1285
+
1286
+
1287
+ Core Classes
1288
+
1289
+
1290
+
1291
+ </span>
1292
+
1293
+
1294
+
1295
+ </a>
1296
+
1297
+
1298
+ <label class="md-nav__link " for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
1299
+ <span class="md-nav__icon md-icon"></span>
1300
+ </label>
1301
+
1302
+ </div>
1303
+
1304
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
1305
+ <label class="md-nav__title" for="__nav_5_2">
1306
+ <span class="md-nav__icon md-icon"></span>
1307
+
1308
+
1309
+ Core Classes
1310
+
1311
+
1312
+ </label>
1313
+ <ul class="md-nav__list" data-md-scrollfix>
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
1320
+
1321
+
1322
+
1323
+ <li class="md-nav__item">
1324
+ <a href="/robot_lab/api/core/robot/" class="md-nav__link">
1325
+
1326
+
1327
+
1328
+ <span class="md-ellipsis">
1329
+
1330
+
1331
+ Robot
1332
+
1333
+
1334
+
1335
+ </span>
1336
+
1337
+
1338
+
1339
+ </a>
1340
+ </li>
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+ <li class="md-nav__item">
1352
+ <a href="/robot_lab/api/core/network/" class="md-nav__link">
1353
+
1354
+
1355
+
1356
+ <span class="md-ellipsis">
1357
+
1358
+
1359
+ Network
1360
+
1361
+
1362
+
1363
+ </span>
1364
+
1365
+
1366
+
1367
+ </a>
1368
+ </li>
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+ <li class="md-nav__item">
1380
+ <a href="/robot_lab/api/core/state/" class="md-nav__link">
1381
+
1382
+
1383
+
1384
+ <span class="md-ellipsis">
1385
+
1386
+
1387
+ State
1388
+
1389
+
1390
+
1391
+ </span>
1392
+
1393
+
1394
+
1395
+ </a>
1396
+ </li>
1397
+
1398
+
1399
+
1400
+
1401
+
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+ <li class="md-nav__item">
1408
+ <a href="/robot_lab/api/core/tool/" class="md-nav__link">
1409
+
1410
+
1411
+
1412
+ <span class="md-ellipsis">
1413
+
1414
+
1415
+ Tool
1416
+
1417
+
1418
+
1419
+ </span>
1420
+
1421
+
1422
+
1423
+ </a>
1424
+ </li>
1425
+
1426
+
1427
+
1428
+
1429
+
1430
+
1431
+
1432
+
1433
+
1434
+
1435
+ <li class="md-nav__item">
1436
+ <a href="/robot_lab/api/core/memory/" class="md-nav__link">
1437
+
1438
+
1439
+
1440
+ <span class="md-ellipsis">
1441
+
1442
+
1443
+ Memory
1444
+
1445
+
1446
+
1447
+ </span>
1448
+
1449
+
1450
+
1451
+ </a>
1452
+ </li>
1453
+
1454
+
1455
+
1456
+
1457
+ </ul>
1458
+ </nav>
1459
+
1460
+ </li>
1461
+
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+
1478
+
1479
+
1480
+
1481
+
1482
+
1483
+
1484
+
1485
+
1486
+
1487
+
1488
+
1489
+
1490
+
1491
+
1492
+
1493
+ <li class="md-nav__item md-nav__item--nested">
1494
+
1495
+
1496
+
1497
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3" >
1498
+
1499
+
1500
+ <div class="md-nav__link md-nav__container">
1501
+ <a href="/robot_lab/api/messages/" class="md-nav__link ">
1502
+
1503
+
1504
+
1505
+ <span class="md-ellipsis">
1506
+
1507
+
1508
+ Messages
1509
+
1510
+
1511
+
1512
+ </span>
1513
+
1514
+
1515
+
1516
+ </a>
1517
+
1518
+
1519
+ <label class="md-nav__link " for="__nav_5_3" id="__nav_5_3_label" tabindex="0">
1520
+ <span class="md-nav__icon md-icon"></span>
1521
+ </label>
1522
+
1523
+ </div>
1524
+
1525
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="false">
1526
+ <label class="md-nav__title" for="__nav_5_3">
1527
+ <span class="md-nav__icon md-icon"></span>
1528
+
1529
+
1530
+ Messages
1531
+
1532
+
1533
+ </label>
1534
+ <ul class="md-nav__list" data-md-scrollfix>
1535
+
1536
+
1537
+
1538
+
1539
+
1540
+
1541
+
1542
+
1543
+
1544
+ <li class="md-nav__item">
1545
+ <a href="/robot_lab/api/messages/user-message/" class="md-nav__link">
1546
+
1547
+
1548
+
1549
+ <span class="md-ellipsis">
1550
+
1551
+
1552
+ UserMessage
1553
+
1554
+
1555
+
1556
+ </span>
1557
+
1558
+
1559
+
1560
+ </a>
1561
+ </li>
1562
+
1563
+
1564
+
1565
+
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+ <li class="md-nav__item">
1573
+ <a href="/robot_lab/api/messages/text-message/" class="md-nav__link">
1574
+
1575
+
1576
+
1577
+ <span class="md-ellipsis">
1578
+
1579
+
1580
+ TextMessage
1581
+
1582
+
1583
+
1584
+ </span>
1585
+
1586
+
1587
+
1588
+ </a>
1589
+ </li>
1590
+
1591
+
1592
+
1593
+
1594
+
1595
+
1596
+
1597
+
1598
+
1599
+
1600
+ <li class="md-nav__item">
1601
+ <a href="/robot_lab/api/messages/tool-call-message/" class="md-nav__link">
1602
+
1603
+
1604
+
1605
+ <span class="md-ellipsis">
1606
+
1607
+
1608
+ ToolCallMessage
1609
+
1610
+
1611
+
1612
+ </span>
1613
+
1614
+
1615
+
1616
+ </a>
1617
+ </li>
1618
+
1619
+
1620
+
1621
+
1622
+
1623
+
1624
+
1625
+
1626
+
1627
+
1628
+ <li class="md-nav__item">
1629
+ <a href="/robot_lab/api/messages/tool-result-message/" class="md-nav__link">
1630
+
1631
+
1632
+
1633
+ <span class="md-ellipsis">
1634
+
1635
+
1636
+ ToolResultMessage
1637
+
1638
+
1639
+
1640
+ </span>
1641
+
1642
+
1643
+
1644
+ </a>
1645
+ </li>
1646
+
1647
+
1648
+
1649
+
1650
+ </ul>
1651
+ </nav>
1652
+
1653
+ </li>
1654
+
1655
+
1656
+
1657
+
1658
+
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+
1665
+
1666
+
1667
+
1668
+
1669
+
1670
+
1671
+
1672
+
1673
+
1674
+
1675
+
1676
+
1677
+
1678
+
1679
+
1680
+
1681
+
1682
+
1683
+
1684
+ <li class="md-nav__item md-nav__item--nested">
1685
+
1686
+
1687
+
1688
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_4" >
1689
+
1690
+
1691
+ <div class="md-nav__link md-nav__container">
1692
+ <a href="/robot_lab/api/mcp/" class="md-nav__link ">
1693
+
1694
+
1695
+
1696
+ <span class="md-ellipsis">
1697
+
1698
+
1699
+ MCP
1700
+
1701
+
1702
+
1703
+ </span>
1704
+
1705
+
1706
+
1707
+ </a>
1708
+
1709
+
1710
+ <label class="md-nav__link " for="__nav_5_4" id="__nav_5_4_label" tabindex="0">
1711
+ <span class="md-nav__icon md-icon"></span>
1712
+ </label>
1713
+
1714
+ </div>
1715
+
1716
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_4_label" aria-expanded="false">
1717
+ <label class="md-nav__title" for="__nav_5_4">
1718
+ <span class="md-nav__icon md-icon"></span>
1719
+
1720
+
1721
+ MCP
1722
+
1723
+
1724
+ </label>
1725
+ <ul class="md-nav__list" data-md-scrollfix>
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+
1733
+
1734
+
1735
+ <li class="md-nav__item">
1736
+ <a href="/robot_lab/api/mcp/client/" class="md-nav__link">
1737
+
1738
+
1739
+
1740
+ <span class="md-ellipsis">
1741
+
1742
+
1743
+ Client
1744
+
1745
+
1746
+
1747
+ </span>
1748
+
1749
+
1750
+
1751
+ </a>
1752
+ </li>
1753
+
1754
+
1755
+
1756
+
1757
+
1758
+
1759
+
1760
+
1761
+
1762
+
1763
+ <li class="md-nav__item">
1764
+ <a href="/robot_lab/api/mcp/server/" class="md-nav__link">
1765
+
1766
+
1767
+
1768
+ <span class="md-ellipsis">
1769
+
1770
+
1771
+ Server
1772
+
1773
+
1774
+
1775
+ </span>
1776
+
1777
+
1778
+
1779
+ </a>
1780
+ </li>
1781
+
1782
+
1783
+
1784
+
1785
+
1786
+
1787
+
1788
+
1789
+
1790
+
1791
+ <li class="md-nav__item">
1792
+ <a href="/robot_lab/api/mcp/transports/" class="md-nav__link">
1793
+
1794
+
1795
+
1796
+ <span class="md-ellipsis">
1797
+
1798
+
1799
+ Transports
1800
+
1801
+
1802
+
1803
+ </span>
1804
+
1805
+
1806
+
1807
+ </a>
1808
+ </li>
1809
+
1810
+
1811
+
1812
+
1813
+ </ul>
1814
+ </nav>
1815
+
1816
+ </li>
1817
+
1818
+
1819
+
1820
+
1821
+
1822
+
1823
+
1824
+
1825
+
1826
+
1827
+
1828
+
1829
+
1830
+
1831
+
1832
+
1833
+
1834
+
1835
+
1836
+
1837
+
1838
+
1839
+
1840
+
1841
+
1842
+
1843
+
1844
+
1845
+ <li class="md-nav__item md-nav__item--nested">
1846
+
1847
+
1848
+
1849
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_5" >
1850
+
1851
+
1852
+ <div class="md-nav__link md-nav__container">
1853
+ <a href="/robot_lab/api/streaming/" class="md-nav__link ">
1854
+
1855
+
1856
+
1857
+ <span class="md-ellipsis">
1858
+
1859
+
1860
+ Streaming
1861
+
1862
+
1863
+
1864
+ </span>
1865
+
1866
+
1867
+
1868
+ </a>
1869
+
1870
+
1871
+ <label class="md-nav__link " for="__nav_5_5" id="__nav_5_5_label" tabindex="0">
1872
+ <span class="md-nav__icon md-icon"></span>
1873
+ </label>
1874
+
1875
+ </div>
1876
+
1877
+ <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_5_label" aria-expanded="false">
1878
+ <label class="md-nav__title" for="__nav_5_5">
1879
+ <span class="md-nav__icon md-icon"></span>
1880
+
1881
+
1882
+ Streaming
1883
+
1884
+
1885
+ </label>
1886
+ <ul class="md-nav__list" data-md-scrollfix>
1887
+
1888
+
1889
+
1890
+
1891
+
1892
+
1893
+
1894
+
1895
+
1896
+ <li class="md-nav__item">
1897
+ <a href="/robot_lab/api/streaming/context/" class="md-nav__link">
1898
+
1899
+
1900
+
1901
+ <span class="md-ellipsis">
1902
+
1903
+
1904
+ Context
1905
+
1906
+
1907
+
1908
+ </span>
1909
+
1910
+
1911
+
1912
+ </a>
1913
+ </li>
1914
+
1915
+
1916
+
1917
+
1918
+
1919
+
1920
+
1921
+
1922
+
1923
+
1924
+ <li class="md-nav__item">
1925
+ <a href="/robot_lab/api/streaming/events/" class="md-nav__link">
1926
+
1927
+
1928
+
1929
+ <span class="md-ellipsis">
1930
+
1931
+
1932
+ Events
1933
+
1934
+
1935
+
1936
+ </span>
1937
+
1938
+
1939
+
1940
+ </a>
1941
+ </li>
1942
+
1943
+
1944
+
1945
+
1946
+ </ul>
1947
+ </nav>
1948
+
1949
+ </li>
1950
+
1951
+
1952
+
1953
+
1954
+ </ul>
1955
+ </nav>
1956
+
1957
+ </li>
1958
+
1959
+
1960
+
1961
+
1962
+
1963
+
1964
+
1965
+
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+
1978
+
1979
+
1980
+
1981
+
1982
+
1983
+
1984
+
1985
+
1986
+
1987
+
1988
+
1989
+
1990
+
1991
+ <li class="md-nav__item md-nav__item--nested">
1992
+
1993
+
1994
+
1995
+ <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
1996
+
1997
+
1998
+ <div class="md-nav__link md-nav__container">
1999
+ <a href="/robot_lab/examples/" class="md-nav__link ">
2000
+
2001
+
2002
+
2003
+ <span class="md-ellipsis">
2004
+
2005
+
2006
+ Examples
2007
+
2008
+
2009
+
2010
+ </span>
2011
+
2012
+
2013
+
2014
+ </a>
2015
+
2016
+
2017
+ <label class="md-nav__link " for="__nav_6" id="__nav_6_label" tabindex="0">
2018
+ <span class="md-nav__icon md-icon"></span>
2019
+ </label>
2020
+
2021
+ </div>
2022
+
2023
+ <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
2024
+ <label class="md-nav__title" for="__nav_6">
2025
+ <span class="md-nav__icon md-icon"></span>
2026
+
2027
+
2028
+ Examples
2029
+
2030
+
2031
+ </label>
2032
+ <ul class="md-nav__list" data-md-scrollfix>
2033
+
2034
+
2035
+
2036
+
2037
+
2038
+
2039
+
2040
+
2041
+
2042
+ <li class="md-nav__item">
2043
+ <a href="/robot_lab/examples/basic-chat/" class="md-nav__link">
2044
+
2045
+
2046
+
2047
+ <span class="md-ellipsis">
2048
+
2049
+
2050
+ Basic Chat
2051
+
2052
+
2053
+
2054
+ </span>
2055
+
2056
+
2057
+
2058
+ </a>
2059
+ </li>
2060
+
2061
+
2062
+
2063
+
2064
+
2065
+
2066
+
2067
+
2068
+
2069
+
2070
+ <li class="md-nav__item">
2071
+ <a href="/robot_lab/examples/multi-robot-network/" class="md-nav__link">
2072
+
2073
+
2074
+
2075
+ <span class="md-ellipsis">
2076
+
2077
+
2078
+ Multi-Robot Network
2079
+
2080
+
2081
+
2082
+ </span>
2083
+
2084
+
2085
+
2086
+ </a>
2087
+ </li>
2088
+
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2095
+
2096
+
2097
+
2098
+ <li class="md-nav__item">
2099
+ <a href="/robot_lab/examples/tool-usage/" class="md-nav__link">
2100
+
2101
+
2102
+
2103
+ <span class="md-ellipsis">
2104
+
2105
+
2106
+ Tool Usage
2107
+
2108
+
2109
+
2110
+ </span>
2111
+
2112
+
2113
+
2114
+ </a>
2115
+ </li>
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+ <li class="md-nav__item">
2127
+ <a href="/robot_lab/examples/mcp-server/" class="md-nav__link">
2128
+
2129
+
2130
+
2131
+ <span class="md-ellipsis">
2132
+
2133
+
2134
+ MCP Server
2135
+
2136
+
2137
+
2138
+ </span>
2139
+
2140
+
2141
+
2142
+ </a>
2143
+ </li>
2144
+
2145
+
2146
+
2147
+
2148
+
2149
+
2150
+
2151
+
2152
+
2153
+
2154
+ <li class="md-nav__item">
2155
+ <a href="/robot_lab/examples/rails-application/" class="md-nav__link">
2156
+
2157
+
2158
+
2159
+ <span class="md-ellipsis">
2160
+
2161
+
2162
+ Rails Application
2163
+
2164
+
2165
+
2166
+ </span>
2167
+
2168
+
2169
+
2170
+ </a>
2171
+ </li>
2172
+
2173
+
2174
+
2175
+
2176
+ </ul>
2177
+ </nav>
2178
+
2179
+ </li>
2180
+
2181
+
2182
+
2183
+ </ul>
2184
+ </nav>
2185
+ </div>
2186
+ </div>
2187
+ </div>
2188
+
2189
+
2190
+
2191
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
2192
+ <div class="md-sidebar__scrollwrap">
2193
+ <div class="md-sidebar__inner">
2194
+
2195
+
2196
+
2197
+
2198
+ <nav class="md-nav md-nav--secondary" aria-label="On this page">
2199
+
2200
+
2201
+
2202
+
2203
+ </nav>
2204
+ </div>
2205
+ </div>
2206
+ </div>
2207
+
2208
+
2209
+
2210
+ <div class="md-content" data-md-component="content">
2211
+
2212
+
2213
+
2214
+
2215
+
2216
+
2217
+
2218
+ <article class="md-content__inner md-typeset">
2219
+
2220
+ <h1>404 - Not found</h1>
2221
+
2222
+ </article>
2223
+ </div>
2224
+
2225
+
2226
+ <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
2227
+
2228
+ <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
2229
+ </div>
2230
+
2231
+ <button type="button" class="md-top md-icon" data-md-component="top" hidden>
2232
+
2233
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
2234
+ Back to top
2235
+ </button>
2236
+
2237
+ </main>
2238
+
2239
+ <footer class="md-footer">
2240
+
2241
+
2242
+
2243
+ <div class="md-footer-meta md-typeset">
2244
+ <div class="md-footer-meta__inner md-grid">
2245
+ <div class="md-copyright">
2246
+
2247
+ <div class="md-copyright__highlight">
2248
+ Copyright &copy; 2025 Dewayne VanHoozer
2249
+ </div>
2250
+
2251
+
2252
+ Made with
2253
+ <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
2254
+ Material for MkDocs
2255
+ </a>
2256
+
2257
+ </div>
2258
+
2259
+
2260
+ <div class="md-social">
2261
+
2262
+
2263
+
2264
+
2265
+
2266
+ <a href="https://github.com/madbomber/robot_lab" target="_blank" rel="noopener" title="RobotLab on GitHub" class="md-social__link">
2267
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M173.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M252.8 8C114.1 8 8 113.3 8 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C436.2 457.8 504 362.9 504 252 504 113.3 391.5 8 252.8 8M105.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
2268
+ </a>
2269
+
2270
+
2271
+
2272
+
2273
+
2274
+ <a href="https://rubygems.org/gems/robot_lab" target="_blank" rel="noopener" title="RobotLab on RubyGems" class="md-social__link">
2275
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc.--><path d="M116.7 33.8c4.5-6.1 11.7-9.8 19.3-9.8h240c7.6 0 14.8 3.6 19.3 9.8l112 152c6.8 9.2 6.1 21.9-1.5 30.4l-232 256c-4.5 5-11 7.9-17.8 7.9s-13.2-2.9-17.8-7.9l-232-256c-7.7-8.5-8.3-21.2-1.5-30.4zm38.5 39.8c-3.3 2.5-4.2 7-2.1 10.5l57.4 95.7L63.3 192c-4.1.3-7.3 3.8-7.3 8s3.2 7.6 7.3 8l192 16h1.3l192-16c4.1-.3 7.3-3.8 7.3-8s-3.2-7.6-7.3-8l-147.2-12.3 57.4-95.6c2.1-3.5 1.2-8.1-2.1-10.5s-7.9-2-10.7 1l-90 97.6-90.1-97.6c-2.8-3-7.4-3.4-10.7-1"/></svg>
2276
+ </a>
2277
+
2278
+ </div>
2279
+
2280
+ </div>
2281
+ </div>
2282
+ </footer>
2283
+
2284
+ </div>
2285
+ <div class="md-dialog" data-md-component="dialog">
2286
+ <div class="md-dialog__inner md-typeset"></div>
2287
+ </div>
2288
+
2289
+
2290
+
2291
+
2292
+
2293
+ <script id="__config" type="application/json">{"annotate": null, "base": "/robot_lab/", "features": ["navigation.instant", "navigation.tracking", "navigation.tabs", "navigation.tabs.sticky", "navigation.path", "navigation.indexes", "navigation.top", "navigation.footer", "toc.follow", "search.suggest", "search.highlight", "search.share", "header.autohide", "content.code.copy", "content.code.annotate", "content.tabs.link", "content.tooltips", "content.action.edit", "content.action.view"], "search": "/robot_lab/assets/javascripts/workers/search.2c215733.min.js", "tags": null, "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": null}</script>
2294
+
2295
+
2296
+ <script src="/robot_lab/assets/javascripts/bundle.79ae519e.min.js"></script>
2297
+
2298
+
2299
+ </body>
2300
+ </html>