roast-ai 0.5.2 → 1.0.0.pre.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.claude/commands/docs/write-comments.md +1 -1
- data/.claude/commands/write-tests.md +126 -0
- data/.github/workflows/ci.yaml +3 -15
- data/.rubocop.yml +0 -10
- data/Gemfile.lock +9 -9
- data/README.md +6 -7
- data/Rakefile +8 -30
- data/dev.yml +3 -3
- data/{dsl → examples}/agent_sessions.rb +1 -1
- data/{dsl → examples}/async_cogs.rb +1 -1
- data/{dsl → examples}/async_cogs_complex.rb +1 -1
- data/{dsl → examples}/call.rb +1 -1
- data/{dsl → examples}/collect_from.rb +2 -2
- data/{dsl → examples}/demo/Gemfile +2 -0
- data/{dsl → examples}/demo/Gemfile.lock +4 -3
- data/{dsl → examples}/demo/cogs/local.rb +2 -2
- data/{dsl → examples}/demo/simple_external_cog.rb +1 -1
- data/{dsl → examples}/json_output.rb +1 -1
- data/{dsl → examples}/map.rb +1 -1
- data/{dsl → examples}/map_reduce.rb +1 -1
- data/{dsl → examples}/map_with_index.rb +1 -1
- data/{dsl → examples}/next_break.rb +1 -1
- data/{dsl → examples}/next_break_parallel.rb +1 -1
- data/{dsl → examples}/outputs.rb +1 -1
- data/{dsl → examples}/outputs_bang.rb +1 -1
- data/{dsl → examples}/parallel_map.rb +1 -1
- data/{dsl → examples}/plugin-gem-example/Gemfile +2 -0
- data/{dsl → examples}/plugin-gem-example/Gemfile.lock +60 -22
- data/{dsl → examples}/plugin-gem-example/lib/other.rb +2 -2
- data/{dsl → examples}/plugin-gem-example/lib/simple.rb +2 -2
- data/{dsl → examples}/plugin-gem-example/plugin-gem-example.gemspec +1 -1
- data/{dsl → examples}/prototype.rb +1 -1
- data/{dsl → examples}/repeat_loop_results.rb +1 -1
- data/{dsl → examples}/ruby_cog.rb +1 -1
- data/{dsl → examples}/simple_agent.rb +1 -1
- data/{dsl → examples}/simple_chat.rb +4 -4
- data/{dsl → examples}/simple_repeat.rb +1 -1
- data/{dsl → examples}/skip.rb +1 -1
- data/{dsl → examples}/step_communication.rb +1 -1
- data/{dsl → examples}/targets_and_params.rb +5 -6
- data/{dsl → examples}/temporary_directory.rb +1 -1
- data/{dsl → examples}/working_directory.rb +1 -1
- data/internal/documentation/doc-comments-external.md +6 -6
- data/internal/documentation/doc-comments-internal.md +2 -2
- data/internal/documentation/doc-comments.md +1 -1
- data/lib/roast/cog/config.rb +307 -0
- data/lib/roast/cog/input.rb +71 -0
- data/lib/roast/cog/output.rb +311 -0
- data/lib/roast/cog/registry.rb +69 -0
- data/lib/roast/cog/stack.rb +20 -0
- data/lib/roast/cog/store.rb +27 -0
- data/lib/roast/cog.rb +145 -0
- data/lib/roast/cog_input_context.rb +34 -0
- data/lib/roast/cog_input_manager.rb +225 -0
- data/lib/roast/cogs/agent/config.rb +507 -0
- data/lib/roast/cogs/agent/input.rb +79 -0
- data/lib/roast/cogs/agent/output.rb +57 -0
- data/lib/roast/cogs/agent/provider.rb +49 -0
- data/lib/roast/cogs/agent/providers/claude/claude_invocation.rb +185 -0
- data/lib/roast/cogs/agent/providers/claude/message.rb +71 -0
- data/lib/roast/cogs/agent/providers/claude/messages/assistant_message.rb +34 -0
- data/lib/roast/cogs/agent/providers/claude/messages/result_message.rb +59 -0
- data/lib/roast/cogs/agent/providers/claude/messages/system_message.rb +50 -0
- data/lib/roast/cogs/agent/providers/claude/messages/text_message.rb +34 -0
- data/lib/roast/cogs/agent/providers/claude/messages/tool_result_message.rb +45 -0
- data/lib/roast/cogs/agent/providers/claude/messages/tool_use_message.rb +44 -0
- data/lib/roast/cogs/agent/providers/claude/messages/unknown_message.rb +25 -0
- data/lib/roast/cogs/agent/providers/claude/messages/user_message.rb +35 -0
- data/lib/roast/cogs/agent/providers/claude/tool_result.rb +49 -0
- data/lib/roast/cogs/agent/providers/claude/tool_use.rb +46 -0
- data/lib/roast/cogs/agent/providers/claude.rb +29 -0
- data/lib/roast/cogs/agent/stats.rb +90 -0
- data/lib/roast/cogs/agent/usage.rb +60 -0
- data/lib/roast/cogs/agent.rb +73 -0
- data/lib/roast/cogs/chat/config.rb +451 -0
- data/lib/roast/cogs/chat/input.rb +90 -0
- data/lib/roast/cogs/chat/output.rb +62 -0
- data/lib/roast/cogs/chat/session.rb +66 -0
- data/lib/roast/cogs/chat.rb +79 -0
- data/lib/roast/cogs/cmd.rb +320 -0
- data/lib/roast/cogs/ruby.rb +169 -0
- data/lib/roast/command_runner.rb +189 -0
- data/lib/roast/config_context.rb +7 -0
- data/lib/roast/config_manager.rb +141 -0
- data/lib/roast/control_flow.rb +39 -0
- data/lib/roast/execution_context.rb +7 -0
- data/lib/roast/execution_manager.rb +265 -0
- data/lib/roast/log.rb +77 -0
- data/lib/roast/system_cog/params.rb +30 -0
- data/lib/roast/system_cog.rb +34 -0
- data/lib/roast/system_cogs/call.rb +161 -0
- data/lib/roast/system_cogs/map.rb +452 -0
- data/lib/roast/system_cogs/repeat.rb +240 -0
- data/lib/roast/version.rb +1 -1
- data/lib/roast/workflow.rb +116 -1
- data/lib/roast/workflow_context.rb +22 -0
- data/lib/roast/workflow_params.rb +22 -0
- data/lib/roast.rb +22 -310
- data/roast-ai.gemspec +3 -1
- data/sorbet/config +1 -1
- data/sorbet/rbi/shims/lib/roast/cog_input_context.rbi +1198 -0
- data/sorbet/rbi/shims/lib/roast/config_context.rbi +323 -0
- data/sorbet/rbi/shims/lib/roast/execution_context.rbi +496 -0
- data/{dsl/tutorial → tutorial}/01_your_first_workflow/README.md +3 -3
- data/{dsl/tutorial → tutorial}/01_your_first_workflow/configured_chat.rb +1 -1
- data/{dsl/tutorial → tutorial}/01_your_first_workflow/hello.rb +1 -1
- data/{dsl/tutorial → tutorial}/02_chaining_cogs/README.md +3 -3
- data/{dsl/tutorial → tutorial}/02_chaining_cogs/code_review.rb +1 -1
- data/{dsl/tutorial → tutorial}/02_chaining_cogs/session_resumption.rb +1 -1
- data/{dsl/tutorial → tutorial}/02_chaining_cogs/simple_chain.rb +1 -1
- data/{dsl/tutorial → tutorial}/03_targets_and_params/README.md +13 -13
- data/{dsl/tutorial → tutorial}/03_targets_and_params/multiple_targets.rb +4 -4
- data/{dsl/tutorial → tutorial}/03_targets_and_params/single_target.rb +2 -2
- data/{dsl/tutorial → tutorial}/04_configuration_options/README.md +2 -2
- data/{dsl/tutorial → tutorial}/04_configuration_options/control_display_and_temperature.rb +1 -1
- data/{dsl/tutorial → tutorial}/04_configuration_options/simple_config.rb +1 -1
- data/{dsl/tutorial → tutorial}/05_control_flow/README.md +2 -2
- data/{dsl/tutorial → tutorial}/05_control_flow/conditional_execution.rb +1 -1
- data/{dsl/tutorial → tutorial}/05_control_flow/handling_failures.rb +1 -1
- data/{dsl/tutorial → tutorial}/06_reusable_scopes/README.md +3 -3
- data/{dsl/tutorial → tutorial}/06_reusable_scopes/accessing_scope_outputs.rb +1 -1
- data/{dsl/tutorial → tutorial}/06_reusable_scopes/basic_scope.rb +1 -1
- data/{dsl/tutorial → tutorial}/06_reusable_scopes/parameterized_scope.rb +1 -1
- data/{dsl/tutorial → tutorial}/07_processing_collections/README.md +2 -2
- data/{dsl/tutorial → tutorial}/07_processing_collections/basic_map.rb +1 -1
- data/{dsl/tutorial → tutorial}/07_processing_collections/parallel_map.rb +1 -1
- data/{dsl/tutorial → tutorial}/08_iterative_workflows/README.md +2 -2
- data/{dsl/tutorial → tutorial}/08_iterative_workflows/basic_repeat.rb +1 -1
- data/{dsl/tutorial → tutorial}/08_iterative_workflows/conditional_break.rb +1 -1
- data/{dsl/tutorial → tutorial}/09_async_cogs/README.md +3 -3
- data/{dsl/tutorial → tutorial}/09_async_cogs/basic_async.rb +1 -1
- data/{dsl/tutorial → tutorial}/README.md +2 -2
- metadata +130 -271
- data/.claude/settings.json +0 -12
- data/CLAUDE.md +0 -267
- data/CLAUDE_NOTES.md +0 -68
- data/README_LEGACY.md +0 -1464
- data/claude-swarm.yml +0 -210
- data/examples/README.md +0 -9
- data/examples/available_tools_demo/README.md +0 -42
- data/examples/available_tools_demo/analyze_files/prompt.md +0 -6
- data/examples/available_tools_demo/explore_directory/prompt.md +0 -6
- data/examples/available_tools_demo/workflow.yml +0 -32
- data/examples/available_tools_demo/write_summary/prompt.md +0 -6
- data/examples/basic_prompt_workflow/workflow.md +0 -1
- data/examples/basic_prompt_workflow/workflow.yml +0 -14
- data/examples/grading/README.md +0 -46
- data/examples/grading/analyze_coverage/prompt.md +0 -52
- data/examples/grading/calculate_final_grade.rb +0 -64
- data/examples/grading/format_result.rb +0 -61
- data/examples/grading/generate_grades/prompt.md +0 -105
- data/examples/grading/generate_recommendations/output.txt +0 -17
- data/examples/grading/generate_recommendations/prompt.md +0 -60
- data/examples/grading/read_dependencies/prompt.md +0 -15
- data/examples/grading/verify_mocks_and_stubs/prompt.md +0 -12
- data/examples/grading/verify_test_helpers/prompt.md +0 -53
- data/examples/grading/workflow.md +0 -5
- data/examples/grading/workflow.yml +0 -28
- data/gemfiles/activesupport7.gemfile +0 -4
- data/gemfiles/activesupport8.gemfile +0 -4
- data/lib/roast/dsl/cog/config.rb +0 -309
- data/lib/roast/dsl/cog/input.rb +0 -73
- data/lib/roast/dsl/cog/output.rb +0 -313
- data/lib/roast/dsl/cog/registry.rb +0 -71
- data/lib/roast/dsl/cog/stack.rb +0 -22
- data/lib/roast/dsl/cog/store.rb +0 -29
- data/lib/roast/dsl/cog.rb +0 -147
- data/lib/roast/dsl/cog_input_context.rb +0 -44
- data/lib/roast/dsl/cog_input_manager.rb +0 -156
- data/lib/roast/dsl/cogs/agent/config.rb +0 -509
- data/lib/roast/dsl/cogs/agent/input.rb +0 -81
- data/lib/roast/dsl/cogs/agent/output.rb +0 -59
- data/lib/roast/dsl/cogs/agent/provider.rb +0 -51
- data/lib/roast/dsl/cogs/agent/providers/claude/claude_invocation.rb +0 -187
- data/lib/roast/dsl/cogs/agent/providers/claude/message.rb +0 -73
- data/lib/roast/dsl/cogs/agent/providers/claude/messages/assistant_message.rb +0 -36
- data/lib/roast/dsl/cogs/agent/providers/claude/messages/result_message.rb +0 -61
- data/lib/roast/dsl/cogs/agent/providers/claude/messages/system_message.rb +0 -47
- data/lib/roast/dsl/cogs/agent/providers/claude/messages/text_message.rb +0 -36
- data/lib/roast/dsl/cogs/agent/providers/claude/messages/tool_result_message.rb +0 -47
- data/lib/roast/dsl/cogs/agent/providers/claude/messages/tool_use_message.rb +0 -46
- data/lib/roast/dsl/cogs/agent/providers/claude/messages/unknown_message.rb +0 -27
- data/lib/roast/dsl/cogs/agent/providers/claude/messages/user_message.rb +0 -37
- data/lib/roast/dsl/cogs/agent/providers/claude/tool_result.rb +0 -51
- data/lib/roast/dsl/cogs/agent/providers/claude/tool_use.rb +0 -48
- data/lib/roast/dsl/cogs/agent/providers/claude.rb +0 -31
- data/lib/roast/dsl/cogs/agent/stats.rb +0 -92
- data/lib/roast/dsl/cogs/agent/usage.rb +0 -62
- data/lib/roast/dsl/cogs/agent.rb +0 -75
- data/lib/roast/dsl/cogs/chat/config.rb +0 -453
- data/lib/roast/dsl/cogs/chat/input.rb +0 -92
- data/lib/roast/dsl/cogs/chat/output.rb +0 -64
- data/lib/roast/dsl/cogs/chat/session.rb +0 -68
- data/lib/roast/dsl/cogs/chat.rb +0 -81
- data/lib/roast/dsl/cogs/cmd.rb +0 -322
- data/lib/roast/dsl/cogs/ruby.rb +0 -171
- data/lib/roast/dsl/command_runner.rb +0 -191
- data/lib/roast/dsl/config_context.rb +0 -9
- data/lib/roast/dsl/config_manager.rb +0 -143
- data/lib/roast/dsl/control_flow.rb +0 -41
- data/lib/roast/dsl/execution_context.rb +0 -9
- data/lib/roast/dsl/execution_manager.rb +0 -267
- data/lib/roast/dsl/system_cog/params.rb +0 -32
- data/lib/roast/dsl/system_cog.rb +0 -36
- data/lib/roast/dsl/system_cogs/call.rb +0 -163
- data/lib/roast/dsl/system_cogs/map.rb +0 -454
- data/lib/roast/dsl/system_cogs/repeat.rb +0 -242
- data/lib/roast/dsl/workflow.rb +0 -123
- data/lib/roast/dsl/workflow_context.rb +0 -20
- data/lib/roast/dsl/workflow_params.rb +0 -24
- data/lib/roast/dsl.rb +0 -7
- data/lib/roast/errors.rb +0 -15
- data/lib/roast/factories/api_provider_factory.rb +0 -62
- data/lib/roast/graph/edge.rb +0 -25
- data/lib/roast/graph/node.rb +0 -40
- data/lib/roast/graph/quantum_edge.rb +0 -27
- data/lib/roast/graph/threaded_exec.rb +0 -93
- data/lib/roast/graph.rb +0 -233
- data/lib/roast/helpers/cmd_runner.rb +0 -199
- data/lib/roast/helpers/function_caching_interceptor.rb +0 -88
- data/lib/roast/helpers/logger.rb +0 -78
- data/lib/roast/helpers/metadata_access.rb +0 -40
- data/lib/roast/helpers/minitest_coverage_runner.rb +0 -244
- data/lib/roast/helpers/path_resolver.rb +0 -138
- data/lib/roast/helpers/prompt_loader.rb +0 -146
- data/lib/roast/initializers.rb +0 -40
- data/lib/roast/resources/api_resource.rb +0 -134
- data/lib/roast/resources/base_resource.rb +0 -55
- data/lib/roast/resources/directory_resource.rb +0 -41
- data/lib/roast/resources/file_resource.rb +0 -34
- data/lib/roast/resources/none_resource.rb +0 -30
- data/lib/roast/resources/url_resource.rb +0 -61
- data/lib/roast/resources.rb +0 -91
- data/lib/roast/services/context_threshold_checker.rb +0 -43
- data/lib/roast/services/token_counting_service.rb +0 -45
- data/lib/roast/tools/apply_diff.rb +0 -127
- data/lib/roast/tools/ask_user.rb +0 -39
- data/lib/roast/tools/bash.rb +0 -66
- data/lib/roast/tools/cmd.rb +0 -176
- data/lib/roast/tools/coding_agent.rb +0 -269
- data/lib/roast/tools/context_summarizer.rb +0 -109
- data/lib/roast/tools/grep.rb +0 -58
- data/lib/roast/tools/helpers/coding_agent_message_formatter.rb +0 -85
- data/lib/roast/tools/read_file.rb +0 -50
- data/lib/roast/tools/search_file.rb +0 -69
- data/lib/roast/tools/swarm.rb +0 -120
- data/lib/roast/tools/update_files.rb +0 -410
- data/lib/roast/tools/write_file.rb +0 -60
- data/lib/roast/tools.rb +0 -75
- data/lib/roast/value_objects/api_token.rb +0 -50
- data/lib/roast/value_objects/step_name.rb +0 -51
- data/lib/roast/value_objects/uri_base.rb +0 -50
- data/lib/roast/value_objects/workflow_path.rb +0 -76
- data/lib/roast/value_objects.rb +0 -7
- data/lib/roast/workflow/agent_step.rb +0 -87
- data/lib/roast/workflow/api_configuration.rb +0 -66
- data/lib/roast/workflow/base_iteration_step.rb +0 -183
- data/lib/roast/workflow/base_step.rb +0 -150
- data/lib/roast/workflow/base_workflow.rb +0 -202
- data/lib/roast/workflow/case_executor.rb +0 -49
- data/lib/roast/workflow/case_step.rb +0 -79
- data/lib/roast/workflow/command_executor.rb +0 -92
- data/lib/roast/workflow/conditional_executor.rb +0 -50
- data/lib/roast/workflow/conditional_step.rb +0 -56
- data/lib/roast/workflow/configuration.rb +0 -110
- data/lib/roast/workflow/configuration_loader.rb +0 -214
- data/lib/roast/workflow/context_manager.rb +0 -90
- data/lib/roast/workflow/context_path_resolver.rb +0 -44
- data/lib/roast/workflow/dot_access_hash.rb +0 -214
- data/lib/roast/workflow/each_step.rb +0 -89
- data/lib/roast/workflow/error_handler.rb +0 -147
- data/lib/roast/workflow/expression_evaluator.rb +0 -84
- data/lib/roast/workflow/expression_utils.rb +0 -37
- data/lib/roast/workflow/file_state_repository.rb +0 -152
- data/lib/roast/workflow/input_executor.rb +0 -42
- data/lib/roast/workflow/input_step.rb +0 -166
- data/lib/roast/workflow/interpolator.rb +0 -57
- data/lib/roast/workflow/iteration_executor.rb +0 -104
- data/lib/roast/workflow/llm_boolean_coercer.rb +0 -56
- data/lib/roast/workflow/metadata_manager.rb +0 -48
- data/lib/roast/workflow/output_handler.rb +0 -35
- data/lib/roast/workflow/output_manager.rb +0 -75
- data/lib/roast/workflow/parallel_executor.rb +0 -50
- data/lib/roast/workflow/prompt_step.rb +0 -20
- data/lib/roast/workflow/repeat_step.rb +0 -76
- data/lib/roast/workflow/replay_handler.rb +0 -129
- data/lib/roast/workflow/resource_resolver.rb +0 -70
- data/lib/roast/workflow/session_manager.rb +0 -84
- data/lib/roast/workflow/shell_script_step.rb +0 -116
- data/lib/roast/workflow/sqlite_state_repository.rb +0 -343
- data/lib/roast/workflow/state_manager.rb +0 -104
- data/lib/roast/workflow/state_repository.rb +0 -22
- data/lib/roast/workflow/state_repository_factory.rb +0 -38
- data/lib/roast/workflow/step_completion_reporter.rb +0 -28
- data/lib/roast/workflow/step_executor_coordinator.rb +0 -319
- data/lib/roast/workflow/step_executor_factory.rb +0 -43
- data/lib/roast/workflow/step_executor_registry.rb +0 -75
- data/lib/roast/workflow/step_executor_with_reporting.rb +0 -69
- data/lib/roast/workflow/step_executors/base_step_executor.rb +0 -24
- data/lib/roast/workflow/step_executors/hash_step_executor.rb +0 -41
- data/lib/roast/workflow/step_executors/parallel_step_executor.rb +0 -52
- data/lib/roast/workflow/step_executors/string_step_executor.rb +0 -28
- data/lib/roast/workflow/step_factory.rb +0 -57
- data/lib/roast/workflow/step_finder.rb +0 -98
- data/lib/roast/workflow/step_loader.rb +0 -263
- data/lib/roast/workflow/step_name_extractor.rb +0 -85
- data/lib/roast/workflow/step_runner.rb +0 -24
- data/lib/roast/workflow/step_type_resolver.rb +0 -161
- data/lib/roast/workflow/validation_command.rb +0 -198
- data/lib/roast/workflow/validator.rb +0 -34
- data/lib/roast/workflow/validators/base_validator.rb +0 -45
- data/lib/roast/workflow/validators/dependency_validator.rb +0 -224
- data/lib/roast/workflow/validators/linting_validator.rb +0 -114
- data/lib/roast/workflow/validators/schema_validator.rb +0 -91
- data/lib/roast/workflow/validators/step_collector.rb +0 -58
- data/lib/roast/workflow/validators/validation_orchestrator.rb +0 -53
- data/lib/roast/workflow/workflow_context.rb +0 -61
- data/lib/roast/workflow/workflow_execution_context.rb +0 -38
- data/lib/roast/workflow/workflow_executor.rb +0 -130
- data/lib/roast/workflow/workflow_initializer.rb +0 -284
- data/lib/roast/workflow/workflow_runner.rb +0 -218
- data/lib/roast/workflow_diagram_generator.rb +0 -299
- data/rubocop/cop/roast/use_cmd_runner.rb +0 -93
- data/rubocop/cop/roast.rb +0 -4
- data/schema/workflow.json +0 -352
- data/sorbet/rbi/shims/lib/roast/dsl/cog_input_context.rbi +0 -1197
- data/sorbet/rbi/shims/lib/roast/dsl/config_context.rbi +0 -325
- data/sorbet/rbi/shims/lib/roast/dsl/execution_context.rbi +0 -498
- /data/{dsl → examples}/plugin-gem-example/.gitignore +0 -0
- /data/{dsl → examples}/plugin-gem-example/lib/plugin_gem_example.rb +0 -0
- /data/{dsl → examples}/plugin-gem-example/lib/version.rb +0 -0
- /data/{dsl → examples}/prompts/simple_prompt.md.erb +0 -0
- /data/{dsl → examples}/temperature.rb +0 -0
- /data/lib/roast/{dsl/nil_assertions.rb → nil_assertions.rb} +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3a4f73f62805433be6e39c1f2e12ddec2fa11029445992b2f294bc846283fb58
|
|
4
|
+
data.tar.gz: f59f4afade96ca5d2cc71bd28f69f6f8eb8d3ab5f8f81231a83464ce3c1c9b14
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5b63320779a1ea8b7dc4fb39a770c7f1d0f25df6c70f61859c9c2f389f035e1ca3fe8f68b668cfdbc4ec1ab3d1a58024b5fc473702784a6c21ef854eff8dd6f6
|
|
7
|
+
data.tar.gz: ce9bc888dd4a7972946be41131d9ec9f80299f630cff7a74954ac12a2db4bba0e72f36c7d2e1261fd16396d143adefee4f0db21f990062f208450e9b647119c5
|
|
@@ -4,7 +4,7 @@ Write documentation comments for public methods in the specified file or class.
|
|
|
4
4
|
|
|
5
5
|
Accepts either:
|
|
6
6
|
- A file path, like `lib/roast/dsl/cogs/chat/config.rb`
|
|
7
|
-
- A class name, like `Roast::
|
|
7
|
+
- A class name, like `Roast::Cogs::Chat::Config`
|
|
8
8
|
|
|
9
9
|
## Task
|
|
10
10
|
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
Write tests for classes that do not have test coverage.
|
|
2
|
+
|
|
3
|
+
## Arguments
|
|
4
|
+
|
|
5
|
+
Accepts either:
|
|
6
|
+
- A file path, like `lib/roast/cog_input_context.rb`
|
|
7
|
+
- A class name, like `Roast::CogInputContext`
|
|
8
|
+
|
|
9
|
+
## Task
|
|
10
|
+
|
|
11
|
+
1. **Locate the source file:**
|
|
12
|
+
- If given a class name, find the corresponding file in `lib/`
|
|
13
|
+
- Read the source file to understand the class's behavior
|
|
14
|
+
|
|
15
|
+
2. **Check for existing tests:**
|
|
16
|
+
- Search `test/` for existing test files for this class
|
|
17
|
+
- If tests exist, identify gaps in coverage
|
|
18
|
+
|
|
19
|
+
3. **Study project test patterns:**
|
|
20
|
+
- Look at similar test files in `test/roast/` to understand conventions
|
|
21
|
+
- Note the test framework (ActiveSupport::TestCase) and assertion styles
|
|
22
|
+
|
|
23
|
+
4. **Write the tests:**
|
|
24
|
+
- Create the test file at the appropriate location (e.g., `test/roast/<filename>_test.rb`)
|
|
25
|
+
- Test only behavior defined in the class itself, not inherited behavior
|
|
26
|
+
- Test each public method with representative cases
|
|
27
|
+
- Test edge cases (nil arguments, error conditions, etc.)
|
|
28
|
+
|
|
29
|
+
5. **Run the tests:**
|
|
30
|
+
- Execute the test file to verify all tests pass
|
|
31
|
+
- Fix any failures before completing
|
|
32
|
+
|
|
33
|
+
## Important Constraints
|
|
34
|
+
|
|
35
|
+
- **Avoid mocking direct dependencies** - use real instances where possible
|
|
36
|
+
- **Simple mocks are acceptable for second-order dependencies** (dependencies of dependencies)
|
|
37
|
+
- **Do not test inherited behavior** - only test methods defined in the class itself
|
|
38
|
+
- **Do not test type signatures** - Sorbet handles type checking, so don't test that methods return the correct type (e.g., `assert_instance_of String, @context.tmpdir`)
|
|
39
|
+
- **Do not test class hierarchies** - Don't test inheritance relationships like "InputError is a subclass of Roast::Error". These are not useful tests.
|
|
40
|
+
- **Do not test simple data classes** - Classes that only have `attr_reader`/`attr_accessor` and an initializer don't need tests unless they have complex initialization logic
|
|
41
|
+
- **Follow existing test conventions** in the project
|
|
42
|
+
|
|
43
|
+
## Test Helpers
|
|
44
|
+
|
|
45
|
+
### `TestCogSupport` (from `test/support/test_cog.rb`)
|
|
46
|
+
|
|
47
|
+
Shared test cog infrastructure. Use this when you need a generic cog for integration testing instead of defining your own. Provides:
|
|
48
|
+
|
|
49
|
+
- `TestCogSupport::TestInput` - A `Cog::Input` with `value` accessor, validation, and coercion
|
|
50
|
+
- `TestCogSupport::TestOutput` - A `Cog::Output` with a `value` reader
|
|
51
|
+
- `TestCogSupport::TestCog` - A `Cog` subclass that executes input into output, with its own `Config` and `Input` classes
|
|
52
|
+
|
|
53
|
+
Use these directly or alias them in your test class:
|
|
54
|
+
|
|
55
|
+
```ruby
|
|
56
|
+
class MyTest < ActiveSupport::TestCase
|
|
57
|
+
# For integration tests that need a cog registered in a Registry:
|
|
58
|
+
def setup
|
|
59
|
+
@registry = Cog::Registry.new
|
|
60
|
+
@registry.use(TestCogSupport::TestCog)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# For SystemCog subclasses that need a concrete Input:
|
|
64
|
+
class TestSystemCog < SystemCog
|
|
65
|
+
class Input < TestCogSupport::TestInput; end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Only define a custom test cog when the class under test requires specific Config fields (e.g., `field :timeout, 30`) that `Cog::Config` doesn't provide.
|
|
71
|
+
|
|
72
|
+
### `run_cog(cog, config: nil, scope_value: nil, scope_index: 0)`
|
|
73
|
+
|
|
74
|
+
Run a cog through the full async execution path for integration testing. Use this when testing cog execution rather than testing individual Input/Output/Config classes in isolation.
|
|
75
|
+
|
|
76
|
+
```ruby
|
|
77
|
+
test "cog executes and returns expected output" do
|
|
78
|
+
cog = MyCog.new(:test_cog, ->(_input, _scope, _index) { "some value" })
|
|
79
|
+
|
|
80
|
+
run_cog(cog)
|
|
81
|
+
|
|
82
|
+
assert cog.succeeded?
|
|
83
|
+
assert_equal "expected", cog.output.value
|
|
84
|
+
end
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Parameters:
|
|
88
|
+
- `cog` - The cog instance to run
|
|
89
|
+
- `config:` - Optional config (defaults to cog's config class)
|
|
90
|
+
- `scope_value:` - Optional executor scope value passed to input proc
|
|
91
|
+
- `scope_index:` - Optional executor scope index passed to input proc
|
|
92
|
+
|
|
93
|
+
## Style Rules
|
|
94
|
+
|
|
95
|
+
- Do NOT use `%w[]` word arrays — use `["a", "b"]` bracket style
|
|
96
|
+
- Do NOT add section comments (e.g., `# --- Config ---`) in test files
|
|
97
|
+
- Use `class << self` for class method definitions, not `def self.method_name`
|
|
98
|
+
- Use Ruby 1.9 hash syntax (`key:` not `:key =>`)
|
|
99
|
+
|
|
100
|
+
## Test File Structure
|
|
101
|
+
|
|
102
|
+
```ruby
|
|
103
|
+
# frozen_string_literal: true
|
|
104
|
+
|
|
105
|
+
require "test_helper"
|
|
106
|
+
|
|
107
|
+
module Roast
|
|
108
|
+
class <ClassName>Test < ActiveSupport::TestCase
|
|
109
|
+
def setup
|
|
110
|
+
# Create instance and any required fixtures
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def teardown
|
|
114
|
+
# Clean up temporary resources if needed
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
test "method_name does expected behavior" do
|
|
118
|
+
# Arrange, Act, Assert
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Immediate Instructions
|
|
125
|
+
|
|
126
|
+
Write tests for: $ARGUMENTS
|
data/.github/workflows/ci.yaml
CHANGED
|
@@ -14,27 +14,15 @@ env:
|
|
|
14
14
|
CI: true
|
|
15
15
|
|
|
16
16
|
jobs:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
fail-fast: false
|
|
20
|
-
matrix:
|
|
21
|
-
os: [ubuntu]
|
|
22
|
-
ruby: ['3.2', '3.3', '3.4']
|
|
23
|
-
gemfile: ['activesupport7', 'activesupport8']
|
|
24
|
-
runs-on: ${{ matrix.os }}-latest
|
|
25
|
-
env:
|
|
26
|
-
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
|
|
17
|
+
ci:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
27
19
|
steps:
|
|
28
20
|
- uses: actions/checkout@v4
|
|
29
21
|
- name: Install dependencies
|
|
30
22
|
run: sudo apt-get update && sudo apt-get install -y ripgrep graphviz wamerican
|
|
31
23
|
- uses: ruby/setup-ruby@v1
|
|
32
24
|
with:
|
|
33
|
-
ruby-version: ${{ matrix.ruby }}
|
|
34
25
|
bundler-cache: true
|
|
35
26
|
- run: bundle exec rake sorbet
|
|
36
27
|
- run: bundle exec rake rubocop_ci
|
|
37
|
-
- run: bundle exec rake
|
|
38
|
-
- run: bundle exec rake minitest_dsl_slow
|
|
39
|
-
- run: bundle exec rake minitest_functional
|
|
40
|
-
- run: bundle exec rake minitest_old
|
|
28
|
+
- run: bundle exec rake test
|
data/.rubocop.yml
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
inherit_from: .rubocop_todo.yml
|
|
2
2
|
|
|
3
|
-
require:
|
|
4
|
-
- ./rubocop/cop/roast
|
|
5
|
-
|
|
6
3
|
plugins:
|
|
7
4
|
- rubocop-sorbet
|
|
8
5
|
|
|
@@ -33,13 +30,6 @@ Sorbet/FalseSigil:
|
|
|
33
30
|
- "examples/**/*"
|
|
34
31
|
- "lib/roast/sorbet_runtime_stub.rb"
|
|
35
32
|
|
|
36
|
-
Roast/UseCmdRunner:
|
|
37
|
-
Enabled: true
|
|
38
|
-
Exclude:
|
|
39
|
-
- 'lib/roast/helpers/cmd_runner.rb'
|
|
40
|
-
- 'lib/roast/dsl/command_runner.rb'
|
|
41
|
-
- 'roast-ai.gemspec'
|
|
42
|
-
|
|
43
33
|
Style/MethodCallWithArgsParentheses:
|
|
44
34
|
Enabled: true
|
|
45
35
|
Exclude:
|
data/Gemfile.lock
CHANGED
|
@@ -8,8 +8,8 @@ GIT
|
|
|
8
8
|
PATH
|
|
9
9
|
remote: .
|
|
10
10
|
specs:
|
|
11
|
-
roast-ai (0.
|
|
12
|
-
activesupport (
|
|
11
|
+
roast-ai (1.0.0.pre.rc1)
|
|
12
|
+
activesupport (~> 8.0)
|
|
13
13
|
async (>= 2.34)
|
|
14
14
|
benchmark (>= 0.4.1)
|
|
15
15
|
cli-kit (>= 5.2)
|
|
@@ -71,14 +71,14 @@ GEM
|
|
|
71
71
|
drb (2.2.3)
|
|
72
72
|
erubi (1.13.1)
|
|
73
73
|
event_stream_parser (1.0.0)
|
|
74
|
-
faraday (2.
|
|
74
|
+
faraday (2.14.1)
|
|
75
75
|
faraday-net_http (>= 2.0, < 3.5)
|
|
76
76
|
json
|
|
77
77
|
logger
|
|
78
78
|
faraday-multipart (1.1.1)
|
|
79
79
|
multipart-post (~> 2.0)
|
|
80
|
-
faraday-net_http (3.4.
|
|
81
|
-
net-http (
|
|
80
|
+
faraday-net_http (3.4.2)
|
|
81
|
+
net-http (~> 0.5)
|
|
82
82
|
faraday-retry (2.3.2)
|
|
83
83
|
faraday (~> 2.0)
|
|
84
84
|
ffi (1.17.2-arm64-darwin)
|
|
@@ -107,7 +107,7 @@ GEM
|
|
|
107
107
|
i18n (1.14.7)
|
|
108
108
|
concurrent-ruby (~> 1.0)
|
|
109
109
|
io-event (1.14.0)
|
|
110
|
-
json (2.
|
|
110
|
+
json (2.18.1)
|
|
111
111
|
json-schema (5.1.1)
|
|
112
112
|
addressable (~> 2.8)
|
|
113
113
|
bigdecimal (~> 3.1)
|
|
@@ -128,8 +128,8 @@ GEM
|
|
|
128
128
|
ruby2_keywords (>= 0.0.5)
|
|
129
129
|
multipart-post (2.4.1)
|
|
130
130
|
nenv (0.3.0)
|
|
131
|
-
net-http (0.
|
|
132
|
-
uri
|
|
131
|
+
net-http (0.9.1)
|
|
132
|
+
uri (>= 0.11.1)
|
|
133
133
|
netrc (0.11.0)
|
|
134
134
|
notiffany (0.1.3)
|
|
135
135
|
nenv (~> 0.1)
|
|
@@ -246,7 +246,7 @@ GEM
|
|
|
246
246
|
unicode-display_width (3.1.4)
|
|
247
247
|
unicode-emoji (~> 4.0, >= 4.0.4)
|
|
248
248
|
unicode-emoji (4.0.4)
|
|
249
|
-
uri (1.
|
|
249
|
+
uri (1.1.1)
|
|
250
250
|
vcr (6.3.1)
|
|
251
251
|
base64
|
|
252
252
|
webmock (3.25.1)
|
data/README.md
CHANGED
|
@@ -48,7 +48,7 @@ end
|
|
|
48
48
|
|
|
49
49
|
Run with:
|
|
50
50
|
```bash
|
|
51
|
-
bin/roast execute
|
|
51
|
+
bin/roast execute analyze_codebase.rb
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
## Core Cogs
|
|
@@ -82,7 +82,7 @@ gem 'roast-ai'
|
|
|
82
82
|
|
|
83
83
|
The best way to learn Roast is through the interactive tutorial:
|
|
84
84
|
|
|
85
|
-
📚 **[Start the Tutorial](https://github.com/Shopify/roast/blob/main/
|
|
85
|
+
📚 **[Start the Tutorial](https://github.com/Shopify/roast/blob/main/tutorial/README.md)**
|
|
86
86
|
|
|
87
87
|
The tutorial covers:
|
|
88
88
|
1. Your first workflow
|
|
@@ -97,9 +97,8 @@ The tutorial covers:
|
|
|
97
97
|
|
|
98
98
|
## Documentation
|
|
99
99
|
|
|
100
|
-
- [Tutorial](https://github.com/Shopify/roast/blob/main/
|
|
101
|
-
- [
|
|
102
|
-
- [API Reference](https://github.com/Shopify/roast/tree/main/sorbet/rbi/shims/lib/roast/dsl) - Complete cog documentation
|
|
100
|
+
- [Tutorial](https://github.com/Shopify/roast/blob/main/tutorial/README.md) - Step-by-step guide with examples
|
|
101
|
+
- [Workflow Examples](https://github.com/Shopify/roast/tree/main/examples) - Toy workflows that demonstrate all functional patterns, use for end-to-end test
|
|
103
102
|
|
|
104
103
|
## Documentation & References
|
|
105
104
|
|
|
@@ -113,8 +112,8 @@ The public interfaces of the new Roast are extensively documented in
|
|
|
113
112
|
class and method comments on the relevant classes.
|
|
114
113
|
|
|
115
114
|
* __Tutorial and Examples__
|
|
116
|
-
* [Tutorial -- Table of Contents](https://github.com/Shopify/roast/tree/main/
|
|
117
|
-
* [Additional Example Workflows](https://github.com/Shopify/roast/tree/main/dsl) (these comprise the Roast end-to-end test suite)
|
|
115
|
+
* [Tutorial -- Table of Contents](https://github.com/Shopify/roast/tree/main/tutorial) (contains step-by-step guides and runnable examples showing real-world usage)
|
|
116
|
+
* [Additional Example Workflows]([https://github.com/Shopify/roast/tree/main/dsl](https://github.com/Shopify/roast/tree/main/examples)) (these comprise the Roast end-to-end test suite)
|
|
118
117
|
* __Configuation__
|
|
119
118
|
* [General configuration block: `config-context.rbi`](https://github.com/Shopify/roast/blob/main/sorbet/rbi/shims/lib/roast/dsl/config_context.rbi)
|
|
120
119
|
* [Global cog configuration: `cog/config.rb`](https://github.com/Shopify/roast/blob/main/lib/roast/dsl/cog/config.rb)
|
data/Rakefile
CHANGED
|
@@ -6,45 +6,21 @@ require "rake/testtask"
|
|
|
6
6
|
|
|
7
7
|
### Test Tasks
|
|
8
8
|
|
|
9
|
-
Rake::TestTask.new(:
|
|
9
|
+
Rake::TestTask.new(:minitest_fast) do |t|
|
|
10
10
|
t.libs << "test"
|
|
11
11
|
t.libs << "lib"
|
|
12
12
|
t.test_files = FileList["test/**/*_test.rb"]
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
Rake::TestTask.new(:
|
|
16
|
-
t.libs << "test"
|
|
17
|
-
t.libs << "lib"
|
|
18
|
-
t.test_files = FileList["test/functional/**/*_test.rb"]
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
Rake::TestTask.new(:minitest_old) do |t|
|
|
22
|
-
t.libs << "test"
|
|
23
|
-
t.libs << "lib"
|
|
24
|
-
t.test_files = FileList["test/**/*_test.rb"].exclude(
|
|
25
|
-
"test/functional/**/*_test.rb",
|
|
26
|
-
"test/dsl/**/*_test.rb",
|
|
27
|
-
"test/roast/dsl/**/*_test.rb",
|
|
28
|
-
)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
Rake::TestTask.new(:minitest_dsl_fast) do |t|
|
|
32
|
-
t.libs << "test"
|
|
33
|
-
t.libs << "lib"
|
|
34
|
-
t.test_files = FileList["test/dsl/**/*_test.rb", "test/roast/dsl/**/*_test.rb"]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
Rake::TestTask.new(:minitest_dsl_slow) do |t|
|
|
15
|
+
Rake::TestTask.new(:minitest_all) do |t|
|
|
38
16
|
t.libs << "test"
|
|
39
17
|
t.libs << "lib"
|
|
40
|
-
t.test_files = FileList["test
|
|
18
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
|
41
19
|
end
|
|
42
|
-
task :
|
|
20
|
+
task :set_slow_test_env do
|
|
43
21
|
ENV["ROAST_RUN_SLOW_TESTS"] = "true"
|
|
44
22
|
end
|
|
45
|
-
task
|
|
46
|
-
|
|
47
|
-
task test: [:minitest_dsl_fast, :minitest_dsl_slow, :minitest_functional, :minitest_old]
|
|
23
|
+
task minitest_all: :set_slow_test_env
|
|
48
24
|
|
|
49
25
|
### Rubocop Tasks
|
|
50
26
|
|
|
@@ -65,6 +41,8 @@ end
|
|
|
65
41
|
|
|
66
42
|
### Task Groups
|
|
67
43
|
|
|
68
|
-
task default: [:sorbet, :rubocop, :
|
|
44
|
+
task default: [:sorbet, :rubocop, :minitest_fast]
|
|
69
45
|
|
|
70
46
|
task check: [:sorbet, :rubocop]
|
|
47
|
+
|
|
48
|
+
task test: [:minitest_all]
|
data/dev.yml
CHANGED
|
@@ -11,13 +11,13 @@ up:
|
|
|
11
11
|
check:
|
|
12
12
|
style: bundle exec rake rubocop
|
|
13
13
|
tc: bundle exec rake sorbet
|
|
14
|
-
test: bundle exec rake
|
|
14
|
+
test: bundle exec rake minitest_fast
|
|
15
15
|
|
|
16
16
|
commands:
|
|
17
17
|
__default__: execute
|
|
18
18
|
execute:
|
|
19
19
|
desc: Execute a roast workflow
|
|
20
|
-
run: bundle exec roast execute
|
|
20
|
+
run: bundle exec roast execute
|
|
21
21
|
style:
|
|
22
22
|
desc: Run Rubocop style checks (and autocorrect)
|
|
23
23
|
run: bundle exec rake rubocop:autocorrect
|
|
@@ -26,4 +26,4 @@ commands:
|
|
|
26
26
|
run: bundle exec rake sorbet
|
|
27
27
|
test:
|
|
28
28
|
desc: Run all tests
|
|
29
|
-
run: bundle exec rake
|
|
29
|
+
run: bundle exec rake minitest_fast
|
data/{dsl → examples}/call.rb
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# typed: true
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
|
-
#: self as Roast::
|
|
4
|
+
#: self as Roast::Workflow
|
|
5
5
|
|
|
6
6
|
config do
|
|
7
7
|
cmd { display! }
|
|
@@ -33,7 +33,7 @@ execute do
|
|
|
33
33
|
begin
|
|
34
34
|
# There is no :to_upper cog that this could sensibly be referring to
|
|
35
35
|
cmd(:to_upper)
|
|
36
|
-
rescue Roast::
|
|
36
|
+
rescue Roast::CogInputManager::CogDoesNotExistError
|
|
37
37
|
puts "Could not access :to_upper directly"
|
|
38
38
|
end
|
|
39
39
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: ../..
|
|
3
3
|
specs:
|
|
4
|
-
roast-ai (0.
|
|
5
|
-
activesupport (
|
|
4
|
+
roast-ai (1.0.0.pre.rc1)
|
|
5
|
+
activesupport (~> 8.0)
|
|
6
6
|
async (>= 2.34)
|
|
7
7
|
benchmark (>= 0.4.1)
|
|
8
8
|
cli-kit (>= 5.2)
|
|
@@ -10,7 +10,7 @@ PATH
|
|
|
10
10
|
diff-lcs (>= 1.5)
|
|
11
11
|
json-schema (>= 5.1)
|
|
12
12
|
open_router (>= 0.3)
|
|
13
|
-
raix (
|
|
13
|
+
raix (~> 1.0.2)
|
|
14
14
|
rake (>= 13.3.0)
|
|
15
15
|
ruby-graphviz (>= 1.2)
|
|
16
16
|
ruby_llm (>= 1.8)
|
|
@@ -25,6 +25,7 @@ PATH
|
|
|
25
25
|
roast-ai
|
|
26
26
|
|
|
27
27
|
GEM
|
|
28
|
+
remote: https://rubygems.org/
|
|
28
29
|
specs:
|
|
29
30
|
activesupport (8.0.3)
|
|
30
31
|
base64
|
data/{dsl → examples}/map.rb
RENAMED
data/{dsl → examples}/outputs.rb
RENAMED