robot_lab-to 0.2.6

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 (97) hide show
  1. checksums.yaml +7 -0
  2. data/.envrc +1 -0
  3. data/.github/workflows/deploy-github-pages.yml +52 -0
  4. data/.loki +21 -0
  5. data/.quality/reek_baseline.txt +17 -0
  6. data/.rubocop.yml +7 -0
  7. data/CHANGELOG.md +67 -0
  8. data/CLAUDE.md +74 -0
  9. data/COMMITS.md +27 -0
  10. data/README.md +352 -0
  11. data/Rakefile +132 -0
  12. data/bin/robot-to +14 -0
  13. data/docs/about/changelog.md +82 -0
  14. data/docs/assets/architecture.svg +110 -0
  15. data/docs/assets/images/robot_lab-to.jpg +0 -0
  16. data/docs/assets/iteration-loop.svg +97 -0
  17. data/docs/concepts/evals.md +254 -0
  18. data/docs/concepts/iteration-loop.md +128 -0
  19. data/docs/concepts/notes.md +91 -0
  20. data/docs/concepts/run-state.md +93 -0
  21. data/docs/concepts/stop-conditions.md +111 -0
  22. data/docs/concepts/verification.md +75 -0
  23. data/docs/configuration/cli.md +111 -0
  24. data/docs/configuration/index.md +93 -0
  25. data/docs/configuration/settings.md +270 -0
  26. data/docs/getting-started/anatomy-of-a-run.md +111 -0
  27. data/docs/getting-started/installation.md +78 -0
  28. data/docs/getting-started/quick-start.md +105 -0
  29. data/docs/index.md +96 -0
  30. data/docs/local-models/guardrails.md +117 -0
  31. data/docs/local-models/index.md +88 -0
  32. data/docs/local-models/ollama.md +122 -0
  33. data/docs/local-models/tools.md +92 -0
  34. data/docs/reference/architecture.md +139 -0
  35. data/examples/01_basic_usage/.gitignore +9 -0
  36. data/examples/01_basic_usage/README.md +173 -0
  37. data/examples/01_basic_usage/basic_usage.rb +386 -0
  38. data/examples/02_advanced_usage/.gitignore +8 -0
  39. data/examples/02_advanced_usage/README.md +117 -0
  40. data/examples/02_advanced_usage/advanced_usage.rb +308 -0
  41. data/examples/02_advanced_usage/quality_gate.rb +99 -0
  42. data/examples/03_scored/.gitignore +2 -0
  43. data/examples/03_scored/README.md +117 -0
  44. data/examples/03_scored/scored_run.rb +325 -0
  45. data/examples/04_prose/.gitignore +2 -0
  46. data/examples/04_prose/README.md +43 -0
  47. data/examples/04_prose/prompts_dir/grade_message.md +14 -0
  48. data/examples/04_prose/prompts_dir/judge.md +11 -0
  49. data/examples/04_prose/prompts_dir/outline_criteria.md +9 -0
  50. data/examples/04_prose/prompts_dir/outline_objective.md +11 -0
  51. data/examples/04_prose/prompts_dir/section_criteria.md +7 -0
  52. data/examples/04_prose/prompts_dir/sections_objective.md +14 -0
  53. data/examples/04_prose/prose_run.rb +302 -0
  54. data/lib/robot_lab/to/atomic_file.rb +69 -0
  55. data/lib/robot_lab/to/backoff.rb +46 -0
  56. data/lib/robot_lab/to/cli.rb +176 -0
  57. data/lib/robot_lab/to/commit_manager.rb +135 -0
  58. data/lib/robot_lab/to/config/defaults.yml +27 -0
  59. data/lib/robot_lab/to/config.rb +86 -0
  60. data/lib/robot_lab/to/decision.rb +40 -0
  61. data/lib/robot_lab/to/decision_manager.rb +193 -0
  62. data/lib/robot_lab/to/errors.rb +30 -0
  63. data/lib/robot_lab/to/evals/base.rb +23 -0
  64. data/lib/robot_lab/to/evals/code.rb +77 -0
  65. data/lib/robot_lab/to/evals/context.rb +17 -0
  66. data/lib/robot_lab/to/evals/factory.rb +84 -0
  67. data/lib/robot_lab/to/evals/null.rb +17 -0
  68. data/lib/robot_lab/to/evals/prose.rb +110 -0
  69. data/lib/robot_lab/to/evals/score.rb +22 -0
  70. data/lib/robot_lab/to/exit_summary.rb +75 -0
  71. data/lib/robot_lab/to/guards/checkpoint.rb +84 -0
  72. data/lib/robot_lab/to/guards/grader_lock.rb +62 -0
  73. data/lib/robot_lab/to/guards/path_resolution.rb +61 -0
  74. data/lib/robot_lab/to/guards/quality_monitor.rb +113 -0
  75. data/lib/robot_lab/to/guards/read_before_edit.rb +83 -0
  76. data/lib/robot_lab/to/guards/run_store.rb +31 -0
  77. data/lib/robot_lab/to/guards/write_guard.rb +71 -0
  78. data/lib/robot_lab/to/guards.rb +54 -0
  79. data/lib/robot_lab/to/iteration_result.rb +29 -0
  80. data/lib/robot_lab/to/jsonl_logger.rb +59 -0
  81. data/lib/robot_lab/to/notes_manager.rb +121 -0
  82. data/lib/robot_lab/to/orchestrator.rb +642 -0
  83. data/lib/robot_lab/to/prompt_builder.rb +208 -0
  84. data/lib/robot_lab/to/run.rb +109 -0
  85. data/lib/robot_lab/to/stop_conditions.rb +71 -0
  86. data/lib/robot_lab/to/tools/bash.rb +75 -0
  87. data/lib/robot_lab/to/tools/edit.rb +52 -0
  88. data/lib/robot_lab/to/tools/file_tool.rb +32 -0
  89. data/lib/robot_lab/to/tools/read.rb +57 -0
  90. data/lib/robot_lab/to/tools/request_decision.rb +66 -0
  91. data/lib/robot_lab/to/tools/submit_result.rb +50 -0
  92. data/lib/robot_lab/to/tools/write.rb +32 -0
  93. data/lib/robot_lab/to/verifier.rb +63 -0
  94. data/lib/robot_lab/to/version.rb +7 -0
  95. data/lib/robot_lab/to.rb +81 -0
  96. data/mkdocs.yml +145 -0
  97. metadata +175 -0
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RobotLab
4
+ module To
5
+ module Tools
6
+ # Tool the robot MUST call as its final action to declare the iteration result.
7
+ #
8
+ # Create a fresh instance per iteration. After robot.run() returns, read
9
+ # captured_result (nil if the robot never called the tool).
10
+ class SubmitResult < RobotLab::Tool
11
+ description <<~DESC
12
+ Submit the result of this iteration. You MUST call this tool as your
13
+ FINAL action before finishing. Do not call it until your work is complete.
14
+ DESC
15
+
16
+ param :success, type: "boolean",
17
+ desc: "true if you made meaningful progress toward the objective; " \
18
+ "false if you made no meaningful changes AND have no new learnings"
19
+
20
+ param :summary, type: "string",
21
+ desc: "Brief one-sentence description of what you accomplished or why you stopped"
22
+
23
+ param :key_changes, type: "array",
24
+ desc: "List of files or changes made this iteration (empty if none)",
25
+ required: false
26
+
27
+ param :key_learnings, type: "array",
28
+ desc: "Insights worth remembering for future iterations (empty if none)",
29
+ required: false
30
+
31
+ param :should_fully_stop, type: "boolean",
32
+ desc: "Set to true only when instructed by a stop condition",
33
+ required: false
34
+
35
+ attr_reader :captured_result
36
+
37
+ def execute(success:, summary:, key_changes: [], key_learnings: [], should_fully_stop: nil, **)
38
+ @captured_result = IterationResult.new(
39
+ success: success,
40
+ summary: summary,
41
+ key_changes: Array(key_changes),
42
+ key_learnings: Array(key_learnings),
43
+ should_fully_stop: should_fully_stop
44
+ )
45
+ "Iteration complete. Stop all work now."
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+
5
+ module RobotLab
6
+ module To
7
+ module Tools
8
+ # Create a NEW file with the given contents. Parent directories are
9
+ # created as needed. The WriteGuard refuses this on files that already
10
+ # exist (use Edit instead) — small models otherwise rewrite whole files
11
+ # and destroy content.
12
+ class Write < FileTool
13
+ description <<~DESC
14
+ Create a new file with the given content. Use this only for files that
15
+ do not exist yet; to change an existing file, use Edit.
16
+ DESC
17
+
18
+ param :path, type: "string", desc: "Path of the file to create"
19
+ param :content, type: "string", desc: "Full text content to write"
20
+
21
+ def execute(path:, content:, **)
22
+ resolved = File.expand_path(path, Dir.pwd)
23
+ FileUtils.mkdir_p(File.dirname(resolved))
24
+ File.write(resolved, content.to_s)
25
+ "Wrote #{content.to_s.lines.size} lines to #{path}"
26
+ rescue SystemCallError => e
27
+ "Error writing #{path}: #{e.message}"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "open3"
4
+ require "timeout"
5
+
6
+ module RobotLab
7
+ module To
8
+ # Runs an independent verification command (e.g. the test suite) to confirm
9
+ # a robot's self-reported success before the orchestrator commits.
10
+ #
11
+ # This is the single-robot translation of separation-of-duties: the deciding
12
+ # authority is a real command run by the orchestrator, not the robot, so the
13
+ # robot cannot self-certify a passing verdict. A non-zero exit -- or a
14
+ # timeout -- fails the gate.
15
+ class Verifier
16
+ MAX_OUTPUT = 4_000
17
+
18
+ Result = Data.define(:passed, :output) do
19
+ def passed? = passed
20
+ end
21
+
22
+ def initialize(command, work_dir: Dir.pwd, timeout: 600)
23
+ @command = command
24
+ @work_dir = work_dir
25
+ @timeout = timeout
26
+ end
27
+
28
+ def run
29
+ output, ok = capture
30
+ Result.new(passed: ok, output: clamp(output))
31
+ end
32
+
33
+ private
34
+
35
+ def capture
36
+ # pgroup: true so a timeout can kill the whole process tree (test
37
+ # runners spawn children), not just the shell.
38
+ Open3.popen2e(@command, chdir: @work_dir, pgroup: true) do |stdin, out, wait|
39
+ stdin.close
40
+ collected = +""
41
+ begin
42
+ Timeout.timeout(@timeout) { collected << out.read }
43
+ rescue Timeout::Error
44
+ terminate(wait.pid)
45
+ return ["#{collected}\n[verification timed out after #{@timeout}s]", false]
46
+ end
47
+ [collected, wait.value.success?]
48
+ end
49
+ end
50
+
51
+ def terminate(pid)
52
+ Process.kill("-TERM", Process.getpgid(pid))
53
+ rescue StandardError
54
+ nil
55
+ end
56
+
57
+ def clamp(text)
58
+ t = text.to_s.strip
59
+ t.length > MAX_OUTPUT ? "#{t[0, MAX_OUTPUT]}\n[output truncated]" : t
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RobotLab
4
+ module To
5
+ VERSION = "0.2.6"
6
+ end
7
+ end
@@ -0,0 +1,81 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "to/version"
4
+ require_relative "to/errors"
5
+ require_relative "to/iteration_result"
6
+ require_relative "to/run"
7
+ require_relative "to/atomic_file"
8
+ require_relative "to/jsonl_logger"
9
+ require_relative "to/notes_manager"
10
+ require_relative "to/decision"
11
+ require_relative "to/decision_manager"
12
+ require_relative "to/commit_manager"
13
+ require_relative "to/verifier"
14
+ require_relative "to/evals/score"
15
+ require_relative "to/evals/context"
16
+ require_relative "to/evals/base"
17
+ require_relative "to/evals/null"
18
+ require_relative "to/evals/code"
19
+ require_relative "to/evals/prose"
20
+ require_relative "to/evals/factory"
21
+ require_relative "to/config"
22
+ require_relative "to/tools/submit_result"
23
+ require_relative "to/tools/request_decision"
24
+ require_relative "to/tools/file_tool"
25
+ require_relative "to/tools/read"
26
+ require_relative "to/tools/write"
27
+ require_relative "to/tools/edit"
28
+ require_relative "to/tools/bash"
29
+ require_relative "to/guards"
30
+ require_relative "to/prompt_builder"
31
+ require_relative "to/backoff"
32
+ require_relative "to/stop_conditions"
33
+ require_relative "to/orchestrator"
34
+ require_relative "to/exit_summary"
35
+ require_relative "to/cli"
36
+
37
+ module RobotLab
38
+ module To
39
+ class << self
40
+ # Launch an autonomous takeover run.
41
+ #
42
+ # @param objective [String] what the robot should work toward
43
+ # @param opts [Hash] configuration overrides (model:, max_iterations:, etc.)
44
+ # @return [void]
45
+ def run(objective, **)
46
+ config = Config.new(**)
47
+ suppress_llm_logging unless config.debug?
48
+ Orchestrator.new(objective, config).run
49
+ end
50
+
51
+ # Resume a paused run by id (used for cron/exit-mode operation). The
52
+ # objective and prior state are loaded from the run's run.json.
53
+ def resume(run_id, **)
54
+ config = Config.new(**)
55
+ suppress_llm_logging unless config.debug?
56
+ Orchestrator.new(nil, config, resume_run_id: run_id).run
57
+ end
58
+
59
+ # Registry of named Eval strategies (see RobotLab::To::Evals.build). The
60
+ # block receives the Config and returns an object responding to #score.
61
+ def evals = (@evals ||= {})
62
+
63
+ def register_eval(name, &block)
64
+ evals[name.to_sym] = block
65
+ end
66
+
67
+ private
68
+
69
+ def suppress_llm_logging
70
+ require "logger"
71
+ null = Logger.new(File::NULL)
72
+ RubyLLM.configure { |c| c.logger = null } if defined?(RubyLLM)
73
+ RobotLab.configure { |c| c.logger = null } if RobotLab.respond_to?(:configure)
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ if defined?(RobotLab) && RobotLab.respond_to?(:register_extension)
80
+ RobotLab.register_extension(:to, RobotLab::To)
81
+ end
data/mkdocs.yml ADDED
@@ -0,0 +1,145 @@
1
+ # MkDocs configuration for robot_lab-to documentation
2
+ site_name: robot_lab-to
3
+ site_description: Autonomous overnight agent loop for RobotLab — run a robot while you sleep.
4
+ site_author: Dewayne VanHoozer
5
+ site_url: https://madbomber.github.io/robot_lab-to
6
+ copyright: Copyright &copy; 2026 Dewayne VanHoozer
7
+
8
+ # Repository information
9
+ repo_name: MadBomber/robot_lab-to
10
+ repo_url: https://github.com/MadBomber/robot_lab-to
11
+ edit_uri: edit/main/docs/
12
+
13
+ # Theme
14
+ theme:
15
+ name: material
16
+
17
+ # Color scheme — default to dark (slate); toggle to light
18
+ palette:
19
+ # Dark mode (default)
20
+ - scheme: slate
21
+ primary: indigo
22
+ accent: indigo
23
+ toggle:
24
+ icon: material/brightness-4
25
+ name: Switch to light mode
26
+
27
+ # Light mode
28
+ - scheme: default
29
+ primary: indigo
30
+ accent: indigo
31
+ toggle:
32
+ icon: material/brightness-7
33
+ name: Switch to dark mode
34
+
35
+ font:
36
+ text: Roboto
37
+ code: Roboto Mono
38
+
39
+ features:
40
+ # Navigation
41
+ - navigation.instant
42
+ - navigation.tracking
43
+ - navigation.tabs
44
+ - navigation.tabs.sticky
45
+ - navigation.sections
46
+ - navigation.path
47
+ - navigation.top
48
+ # Table of contents
49
+ - toc.follow
50
+ # Search
51
+ - search.suggest
52
+ - search.highlight
53
+ - search.share
54
+ # Content
55
+ - content.code.copy
56
+ - content.code.annotate
57
+ - content.tabs.link
58
+ - content.tooltips
59
+ - content.action.edit
60
+ - content.action.view
61
+
62
+ # Plugins
63
+ plugins:
64
+ - search:
65
+ separator: '[\s\-,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'
66
+
67
+ # Markdown extensions
68
+ markdown_extensions:
69
+ - abbr
70
+ - admonition
71
+ - attr_list
72
+ - def_list
73
+ - footnotes
74
+ - md_in_html
75
+ - tables
76
+ - toc:
77
+ permalink: true
78
+ title: On this page
79
+ - pymdownx.betterem:
80
+ smart_enable: all
81
+ - pymdownx.caret
82
+ - pymdownx.details
83
+ - pymdownx.emoji:
84
+ emoji_generator: !!python/name:material.extensions.emoji.to_svg
85
+ emoji_index: !!python/name:material.extensions.emoji.twemoji
86
+ - pymdownx.highlight:
87
+ anchor_linenums: true
88
+ line_spans: __span
89
+ pygments_lang_class: true
90
+ - pymdownx.inlinehilite
91
+ - pymdownx.keys
92
+ - pymdownx.magiclink:
93
+ repo_url_shorthand: true
94
+ user: MadBomber
95
+ repo: robot_lab-to
96
+ - pymdownx.mark
97
+ - pymdownx.smartsymbols
98
+ - pymdownx.superfences:
99
+ custom_fences:
100
+ - name: mermaid
101
+ class: mermaid
102
+ format: !!python/name:pymdownx.superfences.fence_code_format
103
+ - pymdownx.tabbed:
104
+ alternate_style: true
105
+ - pymdownx.tasklist:
106
+ custom_checkbox: true
107
+ - pymdownx.tilde
108
+
109
+ # Extra configuration
110
+ extra:
111
+ social:
112
+ - icon: fontawesome/brands/github
113
+ link: https://github.com/MadBomber/robot_lab-to
114
+ name: robot_lab-to on GitHub
115
+ - icon: fontawesome/solid/gem
116
+ link: https://rubygems.org/gems/robot_lab-to
117
+ name: robot_lab-to on RubyGems
118
+
119
+ # Navigation
120
+ nav:
121
+ - Home: index.md
122
+ - Getting Started:
123
+ - Installation: getting-started/installation.md
124
+ - Quick Start: getting-started/quick-start.md
125
+ - Anatomy of a Run: getting-started/anatomy-of-a-run.md
126
+ - Core Concepts:
127
+ - The Iteration Loop: concepts/iteration-loop.md
128
+ - Cross-Iteration Memory: concepts/notes.md
129
+ - Stop Conditions: concepts/stop-conditions.md
130
+ - Verification Gate: concepts/verification.md
131
+ - "Evals: Scoring Iterations": concepts/evals.md
132
+ - Run State & Event Log: concepts/run-state.md
133
+ - Configuration:
134
+ - Overview: configuration/index.md
135
+ - Settings Reference: configuration/settings.md
136
+ - CLI Reference: configuration/cli.md
137
+ - Local Models:
138
+ - Overview: local-models/index.md
139
+ - Ollama Setup: local-models/ollama.md
140
+ - Built-in Tools: local-models/tools.md
141
+ - Guardrails: local-models/guardrails.md
142
+ - Reference:
143
+ - Architecture: reference/architecture.md
144
+ - About:
145
+ - Changelog: about/changelog.md
metadata ADDED
@@ -0,0 +1,175 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: robot_lab-to
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.6
5
+ platform: ruby
6
+ authors:
7
+ - Dewayne VanHoozer
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: robot_lab
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: myway_config
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ description: |
41
+ robot_lab-to ("takeover") runs a robot_lab Robot in an autonomous loop, committing
42
+ one focused change per iteration toward a stated objective. Each iteration the robot
43
+ reads shared notes (notes.md), does work, then calls submit_iteration_result to
44
+ report success or failure. The orchestrator commits good iterations, rolls back
45
+ failures, and appends to the notes log for cross-iteration memory. Stop conditions
46
+ include max iterations, max tokens, consecutive failure threshold, and a natural-
47
+ language --stop-when condition. Runs overnight; review the branch in the morning.
48
+ email:
49
+ - dvanhoozer@gmail.com
50
+ executables:
51
+ - robot-to
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - ".envrc"
56
+ - ".github/workflows/deploy-github-pages.yml"
57
+ - ".loki"
58
+ - ".quality/reek_baseline.txt"
59
+ - ".rubocop.yml"
60
+ - CHANGELOG.md
61
+ - CLAUDE.md
62
+ - COMMITS.md
63
+ - README.md
64
+ - Rakefile
65
+ - bin/robot-to
66
+ - docs/about/changelog.md
67
+ - docs/assets/architecture.svg
68
+ - docs/assets/images/robot_lab-to.jpg
69
+ - docs/assets/iteration-loop.svg
70
+ - docs/concepts/evals.md
71
+ - docs/concepts/iteration-loop.md
72
+ - docs/concepts/notes.md
73
+ - docs/concepts/run-state.md
74
+ - docs/concepts/stop-conditions.md
75
+ - docs/concepts/verification.md
76
+ - docs/configuration/cli.md
77
+ - docs/configuration/index.md
78
+ - docs/configuration/settings.md
79
+ - docs/getting-started/anatomy-of-a-run.md
80
+ - docs/getting-started/installation.md
81
+ - docs/getting-started/quick-start.md
82
+ - docs/index.md
83
+ - docs/local-models/guardrails.md
84
+ - docs/local-models/index.md
85
+ - docs/local-models/ollama.md
86
+ - docs/local-models/tools.md
87
+ - docs/reference/architecture.md
88
+ - examples/01_basic_usage/.gitignore
89
+ - examples/01_basic_usage/README.md
90
+ - examples/01_basic_usage/basic_usage.rb
91
+ - examples/02_advanced_usage/.gitignore
92
+ - examples/02_advanced_usage/README.md
93
+ - examples/02_advanced_usage/advanced_usage.rb
94
+ - examples/02_advanced_usage/quality_gate.rb
95
+ - examples/03_scored/.gitignore
96
+ - examples/03_scored/README.md
97
+ - examples/03_scored/scored_run.rb
98
+ - examples/04_prose/.gitignore
99
+ - examples/04_prose/README.md
100
+ - examples/04_prose/prompts_dir/grade_message.md
101
+ - examples/04_prose/prompts_dir/judge.md
102
+ - examples/04_prose/prompts_dir/outline_criteria.md
103
+ - examples/04_prose/prompts_dir/outline_objective.md
104
+ - examples/04_prose/prompts_dir/section_criteria.md
105
+ - examples/04_prose/prompts_dir/sections_objective.md
106
+ - examples/04_prose/prose_run.rb
107
+ - lib/robot_lab/to.rb
108
+ - lib/robot_lab/to/atomic_file.rb
109
+ - lib/robot_lab/to/backoff.rb
110
+ - lib/robot_lab/to/cli.rb
111
+ - lib/robot_lab/to/commit_manager.rb
112
+ - lib/robot_lab/to/config.rb
113
+ - lib/robot_lab/to/config/defaults.yml
114
+ - lib/robot_lab/to/decision.rb
115
+ - lib/robot_lab/to/decision_manager.rb
116
+ - lib/robot_lab/to/errors.rb
117
+ - lib/robot_lab/to/evals/base.rb
118
+ - lib/robot_lab/to/evals/code.rb
119
+ - lib/robot_lab/to/evals/context.rb
120
+ - lib/robot_lab/to/evals/factory.rb
121
+ - lib/robot_lab/to/evals/null.rb
122
+ - lib/robot_lab/to/evals/prose.rb
123
+ - lib/robot_lab/to/evals/score.rb
124
+ - lib/robot_lab/to/exit_summary.rb
125
+ - lib/robot_lab/to/guards.rb
126
+ - lib/robot_lab/to/guards/checkpoint.rb
127
+ - lib/robot_lab/to/guards/grader_lock.rb
128
+ - lib/robot_lab/to/guards/path_resolution.rb
129
+ - lib/robot_lab/to/guards/quality_monitor.rb
130
+ - lib/robot_lab/to/guards/read_before_edit.rb
131
+ - lib/robot_lab/to/guards/run_store.rb
132
+ - lib/robot_lab/to/guards/write_guard.rb
133
+ - lib/robot_lab/to/iteration_result.rb
134
+ - lib/robot_lab/to/jsonl_logger.rb
135
+ - lib/robot_lab/to/notes_manager.rb
136
+ - lib/robot_lab/to/orchestrator.rb
137
+ - lib/robot_lab/to/prompt_builder.rb
138
+ - lib/robot_lab/to/run.rb
139
+ - lib/robot_lab/to/stop_conditions.rb
140
+ - lib/robot_lab/to/tools/bash.rb
141
+ - lib/robot_lab/to/tools/edit.rb
142
+ - lib/robot_lab/to/tools/file_tool.rb
143
+ - lib/robot_lab/to/tools/read.rb
144
+ - lib/robot_lab/to/tools/request_decision.rb
145
+ - lib/robot_lab/to/tools/submit_result.rb
146
+ - lib/robot_lab/to/tools/write.rb
147
+ - lib/robot_lab/to/verifier.rb
148
+ - lib/robot_lab/to/version.rb
149
+ - mkdocs.yml
150
+ homepage: https://github.com/MadBomber/robot_lab-to
151
+ licenses:
152
+ - MIT
153
+ metadata:
154
+ homepage_uri: https://github.com/MadBomber/robot_lab-to
155
+ source_code_uri: https://github.com/MadBomber/robot_lab-to
156
+ changelog_uri: https://github.com/MadBomber/robot_lab-to/blob/main/CHANGELOG.md
157
+ rubygems_mfa_required: 'true'
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: 3.2.0
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubygems_version: 4.0.17
173
+ specification_version: 4
174
+ summary: Autonomous overnight agent loop for RobotLab — run robots while you sleep.
175
+ test_files: []