robot_lab 0.0.12 → 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 (243) 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 +108 -0
  12. data/CLAUDE.md +139 -0
  13. data/README.md +91 -45
  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/api/messages/index.md +21 -0
  19. data/docs/examples/index.md +37 -2
  20. data/docs/getting-started/configuration.md +20 -7
  21. data/docs/guides/creating-networks.md +23 -0
  22. data/docs/guides/index.md +16 -16
  23. data/docs/guides/knowledge.md +7 -1
  24. data/docs/guides/observability.md +132 -0
  25. data/docs/index.md +30 -3
  26. data/docs/superpowers/plans/2026-05-06-agentskills.md +1303 -0
  27. data/docs/superpowers/specs/2026-05-06-agentskills-design.md +247 -0
  28. data/examples/.envrc +1 -0
  29. data/examples/01_simple_robot.rb +5 -9
  30. data/examples/02_tools.rb +5 -9
  31. data/examples/03_network.rb +8 -9
  32. data/examples/04_mcp.rb +21 -29
  33. data/examples/05_streaming.rb +12 -18
  34. data/examples/06_prompt_templates.rb +11 -19
  35. data/examples/07_network_memory.rb +16 -31
  36. data/examples/08_llm_config.rb +10 -22
  37. data/examples/09_chaining.rb +16 -27
  38. data/examples/10_memory.rb +12 -28
  39. data/examples/11_network_introspection.rb +15 -29
  40. data/examples/12_message_bus.rb +5 -12
  41. data/examples/13_spawn.rb +5 -10
  42. data/examples/14_rusty_circuit/.envrc +1 -0
  43. data/examples/14_rusty_circuit/comic.rb +2 -0
  44. data/examples/14_rusty_circuit/heckler.rb +1 -1
  45. data/examples/14_rusty_circuit/open_mic.rb +1 -3
  46. data/examples/14_rusty_circuit/scout.rb +2 -0
  47. data/examples/15_memory_network_and_bus/.envrc +1 -0
  48. data/examples/15_memory_network_and_bus/editorial_pipeline.rb +6 -3
  49. data/examples/15_memory_network_and_bus/linux_writer.rb +1 -1
  50. data/examples/15_memory_network_and_bus/output/combined_article.md +6 -6
  51. data/examples/15_memory_network_and_bus/output/final_article.md +6 -8
  52. data/examples/15_memory_network_and_bus/output/linux_draft.md +4 -2
  53. data/examples/15_memory_network_and_bus/output/mac_draft.md +3 -3
  54. data/examples/15_memory_network_and_bus/output/memory.json +6 -6
  55. data/examples/15_memory_network_and_bus/output/revision_1.md +10 -11
  56. data/examples/15_memory_network_and_bus/output/revision_2.md +6 -8
  57. data/examples/15_memory_network_and_bus/output/windows_draft.md +3 -3
  58. data/examples/16_writers_room/.envrc +1 -0
  59. data/examples/16_writers_room/writers_room.rb +2 -4
  60. data/examples/17_skills.rb +8 -17
  61. data/examples/18_rails/Gemfile +1 -0
  62. data/examples/18_rails/app/jobs/robot_run_job.rb +15 -75
  63. data/examples/19_token_tracking.rb +9 -15
  64. data/examples/20_circuit_breaker.rb +10 -19
  65. data/examples/21_learning_loop.rb +11 -20
  66. data/examples/22_context_compression.rb +6 -13
  67. data/examples/23_convergence.rb +6 -17
  68. data/examples/24_structured_delegation.rb +11 -15
  69. data/examples/25_history_search.rb +5 -12
  70. data/examples/26_document_store.rb +6 -13
  71. data/examples/27_incident_response/incident_response.rb +4 -5
  72. data/examples/28_mcp_discovery.rb +8 -11
  73. data/examples/29_ractor_tools.rb +4 -9
  74. data/examples/30_ractor_network.rb +10 -19
  75. data/examples/31_launch_assessment.rb +235 -0
  76. data/examples/32_newsletter_reader.rb +188 -0
  77. data/examples/33_stock_generator.rb +80 -0
  78. data/examples/33_stock_predictor.rb +306 -0
  79. data/examples/34_agentskills.rb +72 -0
  80. data/examples/README.md +10 -1
  81. data/examples/common.rb +76 -0
  82. data/examples/ruboruby.md +423 -0
  83. data/examples/temp.md +51 -0
  84. data/lib/robot_lab/agent_skill.rb +63 -0
  85. data/lib/robot_lab/agent_skill_catalog.rb +74 -0
  86. data/lib/robot_lab/ask_user.rb +2 -2
  87. data/lib/robot_lab/bus_poller.rb +12 -5
  88. data/lib/robot_lab/config.rb +1 -12
  89. data/lib/robot_lab/delegation_future.rb +1 -1
  90. data/lib/robot_lab/doom_loop_detector.rb +98 -0
  91. data/lib/robot_lab/history_compressor.rb +4 -10
  92. data/lib/robot_lab/mcp/client.rb +1 -2
  93. data/lib/robot_lab/mcp/connection_poller.rb +3 -3
  94. data/lib/robot_lab/mcp/server.rb +1 -1
  95. data/lib/robot_lab/mcp/server_discovery.rb +0 -2
  96. data/lib/robot_lab/memory.rb +32 -27
  97. data/lib/robot_lab/memory_change.rb +2 -2
  98. data/lib/robot_lab/message.rb +5 -5
  99. data/lib/robot_lab/network.rb +12 -7
  100. data/lib/robot_lab/robot/agent_skill_matching.rb +99 -0
  101. data/lib/robot_lab/robot/bus_messaging.rb +9 -27
  102. data/lib/robot_lab/robot/history_search.rb +4 -1
  103. data/lib/robot_lab/robot/mcp_management.rb +5 -11
  104. data/lib/robot_lab/robot/template_rendering.rb +60 -40
  105. data/lib/robot_lab/robot.rb +323 -206
  106. data/lib/robot_lab/robot_result.rb +6 -5
  107. data/lib/robot_lab/run_config.rb +5 -11
  108. data/lib/robot_lab/script_tool.rb +76 -0
  109. data/lib/robot_lab/state_proxy.rb +7 -5
  110. data/lib/robot_lab/tool.rb +3 -3
  111. data/lib/robot_lab/tool_config.rb +1 -1
  112. data/lib/robot_lab/tool_manifest.rb +5 -7
  113. data/lib/robot_lab/user_message.rb +2 -2
  114. data/lib/robot_lab/version.rb +1 -1
  115. data/lib/robot_lab/waiter.rb +1 -1
  116. data/lib/robot_lab.rb +41 -48
  117. data/logfile +8 -0
  118. data/mkdocs.yml +2 -3
  119. data/robot_concurrency.md +38 -0
  120. data/simple_acp_review.md +298 -0
  121. data/site/404.html +2300 -0
  122. data/site/api/core/index.html +2706 -0
  123. data/site/api/core/memory/index.html +3793 -0
  124. data/site/api/core/network/index.html +3500 -0
  125. data/site/api/core/robot/index.html +4566 -0
  126. data/site/api/core/state/index.html +3390 -0
  127. data/site/api/core/tool/index.html +3843 -0
  128. data/site/api/index.html +2635 -0
  129. data/site/api/mcp/client/index.html +3435 -0
  130. data/site/api/mcp/index.html +2783 -0
  131. data/site/api/mcp/server/index.html +3252 -0
  132. data/site/api/mcp/transports/index.html +3352 -0
  133. data/site/api/messages/index.html +2641 -0
  134. data/site/api/messages/text-message/index.html +3087 -0
  135. data/site/api/messages/tool-call-message/index.html +3159 -0
  136. data/site/api/messages/tool-result-message/index.html +3252 -0
  137. data/site/api/messages/user-message/index.html +3212 -0
  138. data/site/api/streaming/context/index.html +3282 -0
  139. data/site/api/streaming/events/index.html +3347 -0
  140. data/site/api/streaming/index.html +2738 -0
  141. data/site/architecture/core-concepts/index.html +3757 -0
  142. data/site/architecture/index.html +2797 -0
  143. data/site/architecture/message-flow/index.html +3238 -0
  144. data/site/architecture/network-orchestration/index.html +3433 -0
  145. data/site/architecture/robot-execution/index.html +3140 -0
  146. data/site/architecture/state-management/index.html +3498 -0
  147. data/site/assets/css/custom.css +56 -0
  148. data/site/assets/images/favicon.png +0 -0
  149. data/site/assets/images/robot_lab.jpg +0 -0
  150. data/site/assets/javascripts/bundle.79ae519e.min.js +16 -0
  151. data/site/assets/javascripts/bundle.79ae519e.min.js.map +7 -0
  152. data/site/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
  153. data/site/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
  154. data/site/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
  155. data/site/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
  156. data/site/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
  157. data/site/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
  158. data/site/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
  159. data/site/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
  160. data/site/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
  161. data/site/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
  162. data/site/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
  163. data/site/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
  164. data/site/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
  165. data/site/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
  166. data/site/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
  167. data/site/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
  168. data/site/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
  169. data/site/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
  170. data/site/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
  171. data/site/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
  172. data/site/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
  173. data/site/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
  174. data/site/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
  175. data/site/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
  176. data/site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
  177. data/site/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
  178. data/site/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
  179. data/site/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
  180. data/site/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
  181. data/site/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
  182. data/site/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
  183. data/site/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
  184. data/site/assets/javascripts/lunr/tinyseg.js +206 -0
  185. data/site/assets/javascripts/lunr/wordcut.js +6708 -0
  186. data/site/assets/javascripts/workers/search.2c215733.min.js +42 -0
  187. data/site/assets/javascripts/workers/search.2c215733.min.js.map +7 -0
  188. data/site/assets/stylesheets/main.484c7ddc.min.css +1 -0
  189. data/site/assets/stylesheets/main.484c7ddc.min.css.map +1 -0
  190. data/site/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
  191. data/site/assets/stylesheets/palette.ab4e12ef.min.css.map +1 -0
  192. data/site/concepts/index.html +3455 -0
  193. data/site/examples/basic-chat/index.html +2880 -0
  194. data/site/examples/index.html +2907 -0
  195. data/site/examples/mcp-server/index.html +3018 -0
  196. data/site/examples/multi-robot-network/index.html +3131 -0
  197. data/site/examples/rails-application/index.html +3329 -0
  198. data/site/examples/tool-usage/index.html +3085 -0
  199. data/site/getting-started/configuration/index.html +3745 -0
  200. data/site/getting-started/index.html +2572 -0
  201. data/site/getting-started/installation/index.html +2981 -0
  202. data/site/getting-started/quick-start/index.html +2942 -0
  203. data/site/guides/building-robots/index.html +4290 -0
  204. data/site/guides/creating-networks/index.html +3858 -0
  205. data/site/guides/index.html +2586 -0
  206. data/site/guides/mcp-integration/index.html +3581 -0
  207. data/site/guides/memory/index.html +3586 -0
  208. data/site/guides/rails-integration/index.html +4019 -0
  209. data/site/guides/streaming/index.html +3157 -0
  210. data/site/guides/using-tools/index.html +3802 -0
  211. data/site/index.html +2671 -0
  212. data/site/search/search_index.json +1 -0
  213. data/site/sitemap.xml +183 -0
  214. data/site/sitemap.xml.gz +0 -0
  215. data/site/tags.json +1 -0
  216. data/temp.md +6 -0
  217. data/tool_manifest_plan.md +155 -0
  218. metadata +155 -90
  219. data/.github/workflows/deploy-yard-docs.yml +0 -52
  220. data/docs/examples/rails-application.md +0 -419
  221. data/docs/guides/ractor-parallelism.md +0 -364
  222. data/docs/guides/rails-integration.md +0 -642
  223. data/docs/superpowers/plans/2026-04-14-ractor-integration.md +0 -1538
  224. data/docs/superpowers/specs/2026-04-14-ractor-integration-design.md +0 -258
  225. data/lib/generators/robot_lab/install_generator.rb +0 -90
  226. data/lib/generators/robot_lab/robot_generator.rb +0 -55
  227. data/lib/generators/robot_lab/templates/initializer.rb.tt +0 -42
  228. data/lib/generators/robot_lab/templates/job.rb.tt +0 -92
  229. data/lib/generators/robot_lab/templates/migration.rb.tt +0 -32
  230. data/lib/generators/robot_lab/templates/result_model.rb.tt +0 -52
  231. data/lib/generators/robot_lab/templates/robot.rb.tt +0 -31
  232. data/lib/generators/robot_lab/templates/robot_test.rb.tt +0 -34
  233. data/lib/generators/robot_lab/templates/routing_robot.rb.tt +0 -59
  234. data/lib/generators/robot_lab/templates/thread_model.rb.tt +0 -40
  235. data/lib/robot_lab/document_store.rb +0 -155
  236. data/lib/robot_lab/ractor_boundary.rb +0 -42
  237. data/lib/robot_lab/ractor_job.rb +0 -37
  238. data/lib/robot_lab/ractor_memory_proxy.rb +0 -85
  239. data/lib/robot_lab/ractor_network_scheduler.rb +0 -154
  240. data/lib/robot_lab/ractor_worker_pool.rb +0 -117
  241. data/lib/robot_lab/rails_integration/engine.rb +0 -29
  242. data/lib/robot_lab/rails_integration/railtie.rb +0 -42
  243. data/lib/robot_lab/rails_integration/turbo_stream_callbacks.rb +0 -72
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RobotLab
4
- module RailsIntegration
5
- # Rails Engine for RobotLab integration
6
- #
7
- # Provides automatic loading of RobotLab components and
8
- # integration with Rails applications.
9
- #
10
- class Engine < ::Rails::Engine
11
- isolate_namespace RobotLab
12
-
13
- initializer "robot_lab.configure" do |app|
14
- # Load configuration from Rails config
15
- app.config.robot_lab ||= ActiveSupport::OrderedOptions.new
16
- end
17
-
18
- initializer "robot_lab.add_autoload_paths", before: :set_autoload_paths do |app|
19
- app.config.autoload_paths << root.join("app", "robots")
20
- app.config.autoload_paths << root.join("app", "tools")
21
- end
22
-
23
- config.generators do |g|
24
- g.test_framework :minitest, fixture: false
25
- g.fixture_replacement nil
26
- end
27
- end
28
- end
29
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RobotLab
4
- module RailsIntegration
5
- # Railtie for RobotLab Rails integration
6
- #
7
- # Provides configuration hooks and initialization for
8
- # Rails applications using RobotLab.
9
- #
10
- class Railtie < ::Rails::Railtie
11
- config.robot_lab = ActiveSupport::OrderedOptions.new
12
-
13
- initializer "robot_lab.configuration" do |app|
14
- RobotLab.configure do |config|
15
- # Apply Rails-specific configuration
16
- rails_config = app.config.robot_lab
17
-
18
- config.default_model = rails_config.default_model if rails_config.default_model
19
- config.default_provider = rails_config.default_provider if rails_config.default_provider
20
- config.logger = ::Rails.logger
21
- end
22
- end
23
-
24
- initializer "robot_lab.active_record" do
25
- ActiveSupport.on_load(:active_record) do
26
- # Extend ActiveRecord with RobotLab concerns if needed
27
- end
28
- end
29
-
30
- rake_tasks do
31
- # Load RobotLab rake tasks
32
- path = File.expand_path("../tasks", __dir__)
33
- Dir.glob("#{path}/**/*.rake").each { |f| load f }
34
- end
35
-
36
- generators do
37
- require "generators/robot_lab/install_generator"
38
- require "generators/robot_lab/robot_generator"
39
- end
40
- end
41
- end
42
- end
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RobotLab
4
- module RailsIntegration
5
- # Stateless utility module that builds callback Procs for Turbo Stream broadcasting.
6
- #
7
- # Safe to require even without turbo-rails installed — checks at call time
8
- # via `defined?(Turbo::StreamsChannel)`.
9
- #
10
- # @example Wire streaming in a background job
11
- # stream_name = "robot_lab_thread_#{thread_id}"
12
- # on_content = RobotLab::RailsIntegration::TurboStreamCallbacks.build_content_callback(
13
- # stream_name: stream_name
14
- # )
15
- # robot = MyRobot.build(on_content: on_content)
16
- # robot.run(message)
17
- #
18
- module TurboStreamCallbacks
19
- # Check whether Turbo Streams broadcasting is available at runtime.
20
- #
21
- # @return [Boolean]
22
- #
23
- def self.available?
24
- defined?(Turbo::StreamsChannel) ? true : false
25
- end
26
-
27
- # Build a Proc that broadcasts content chunks via Turbo Streams.
28
- #
29
- # The returned Proc receives a chunk object (e.g. RubyLLM::Chunk) and
30
- # broadcasts `chunk.content` as HTML-escaped text via `broadcast_append_to`.
31
- #
32
- # @param stream_name [String] the Turbo Stream channel name
33
- # @param target [String] the DOM target ID (default: "robot_response")
34
- # @return [Proc] a callback suitable for `on_content:`
35
- #
36
- def self.build_content_callback(stream_name:, target: "robot_response")
37
- ->(chunk) {
38
- content = chunk.respond_to?(:content) ? chunk.content : chunk.to_s
39
- return unless content && TurboStreamCallbacks.available?
40
-
41
- Turbo::StreamsChannel.broadcast_append_to(
42
- stream_name,
43
- target: target,
44
- html: ERB::Util.html_escape(content)
45
- )
46
- }
47
- end
48
-
49
- # Build a Proc that broadcasts tool call badges via Turbo Streams.
50
- #
51
- # The returned Proc receives a tool_call object and broadcasts
52
- # a badge showing the tool name.
53
- #
54
- # @param stream_name [String] the Turbo Stream channel name
55
- # @param target [String] the DOM target ID (default: "robot_tools")
56
- # @return [Proc] a callback suitable for `on_tool_call:`
57
- #
58
- def self.build_tool_call_callback(stream_name:, target: "robot_tools")
59
- ->(tool_call) {
60
- return unless TurboStreamCallbacks.available?
61
-
62
- name = tool_call.respond_to?(:name) ? tool_call.name : tool_call.to_s
63
- Turbo::StreamsChannel.broadcast_append_to(
64
- stream_name,
65
- target: target,
66
- html: "<span class=\"tool-badge\">Using: #{ERB::Util.html_escape(name)}</span>"
67
- )
68
- }
69
- end
70
- end
71
- end
72
- end