roast-ai 0.4.6 → 0.4.8
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/.github/workflows/ci.yaml +3 -1
- data/.gitignore +7 -0
- data/.rubocop.yml +14 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +9 -1
- data/Rakefile +16 -4
- data/examples/README.md +9 -0
- data/examples/available_tools_demo/workflow.yml +2 -2
- data/examples/basic_prompt_workflow/workflow.md +1 -0
- data/examples/basic_prompt_workflow/workflow.yml +14 -0
- data/lib/roast/dsl/executor.rb +2 -1
- data/lib/roast/helpers/cmd_runner.rb +199 -0
- data/lib/roast/initializers.rb +1 -1
- data/lib/roast/tools/apply_diff.rb +1 -1
- data/lib/roast/tools/bash.rb +4 -4
- data/lib/roast/tools/cmd.rb +3 -5
- data/lib/roast/tools/coding_agent.rb +1 -1
- data/lib/roast/tools/grep.rb +6 -2
- data/lib/roast/tools/read_file.rb +2 -1
- data/lib/roast/tools/swarm.rb +2 -7
- data/lib/roast/tools.rb +10 -1
- data/lib/roast/version.rb +1 -1
- data/lib/roast/workflow/base_step.rb +2 -3
- data/lib/roast/workflow/command_executor.rb +3 -3
- data/lib/roast/workflow/resource_resolver.rb +1 -1
- data/lib/roast/workflow/shell_script_step.rb +1 -1
- data/lib/roast/workflow/step_loader.rb +2 -7
- data/lib/roast.rb +7 -1
- data/rubocop/cop/roast/use_cmd_runner.rb +93 -0
- data/rubocop/cop/roast.rb +4 -0
- data/sorbet/rbi/gems/docile@1.4.1.rbi +377 -0
- data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +233 -2
- data/sorbet/rbi/gems/racc@1.8.1.rbi +6 -4
- data/sorbet/rbi/gems/rainbow@3.1.1.rbi +396 -2
- data/sorbet/rbi/gems/regexp_parser@2.10.0.rbi +3788 -2
- data/sorbet/rbi/gems/rubocop-ast@1.45.1.rbi +7747 -2
- data/sorbet/rbi/gems/rubocop-sorbet@0.10.5.rbi +2386 -0
- data/sorbet/rbi/gems/rubocop@1.77.0.rbi +62813 -2
- data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1311 -2
- data/sorbet/rbi/gems/simplecov-html@0.13.2.rbi +225 -0
- data/sorbet/rbi/gems/simplecov@0.22.0.rbi +2259 -0
- data/sorbet/rbi/gems/simplecov_json_formatter@0.1.4.rbi +9 -0
- data/sorbet/rbi/gems/unicode-display_width@3.1.4.rbi +125 -2
- data/sorbet/rbi/gems/unicode-emoji@4.0.4.rbi +244 -2
- data/sorbet/tapioca/require.rb +2 -1
- metadata +12 -240
- data/CHANGELOG.md +0 -364
- data/examples/agent_continue/add_documentation/prompt.md +0 -5
- data/examples/agent_continue/add_error_handling/prompt.md +0 -5
- data/examples/agent_continue/analyze_codebase/prompt.md +0 -7
- data/examples/agent_continue/combined_workflow.yml +0 -24
- data/examples/agent_continue/continue_adding_features/prompt.md +0 -4
- data/examples/agent_continue/create_integration_tests/prompt.md +0 -3
- data/examples/agent_continue/document_with_context/prompt.md +0 -5
- data/examples/agent_continue/explore_api/prompt.md +0 -6
- data/examples/agent_continue/implement_client/prompt.md +0 -6
- data/examples/agent_continue/inline_workflow.yml +0 -20
- data/examples/agent_continue/refactor_code/prompt.md +0 -2
- data/examples/agent_continue/verify_changes/prompt.md +0 -6
- data/examples/agent_continue/workflow.yml +0 -27
- data/examples/agent_workflow/README.md +0 -75
- data/examples/agent_workflow/apply_refactorings/prompt.md +0 -22
- data/examples/agent_workflow/identify_code_smells/prompt.md +0 -15
- data/examples/agent_workflow/summarize_improvements/prompt.md +0 -18
- data/examples/agent_workflow/workflow.png +0 -0
- data/examples/agent_workflow/workflow.yml +0 -16
- data/examples/api_workflow/README.md +0 -85
- data/examples/api_workflow/fetch_api_data/prompt.md +0 -10
- data/examples/api_workflow/generate_report/prompt.md +0 -10
- data/examples/api_workflow/prompt.md +0 -10
- data/examples/api_workflow/transform_data/prompt.md +0 -10
- data/examples/api_workflow/workflow.png +0 -0
- data/examples/api_workflow/workflow.yml +0 -30
- data/examples/apply_diff_demo/README.md +0 -58
- data/examples/apply_diff_demo/apply_simple_change/prompt.md +0 -13
- data/examples/apply_diff_demo/create_sample_file/prompt.md +0 -11
- data/examples/apply_diff_demo/workflow.yml +0 -24
- data/examples/available_tools_demo/workflow.png +0 -0
- data/examples/bash_prototyping/README.md +0 -53
- data/examples/bash_prototyping/analyze_network/prompt.md +0 -13
- data/examples/bash_prototyping/analyze_system/prompt.md +0 -11
- data/examples/bash_prototyping/api_testing.png +0 -0
- data/examples/bash_prototyping/api_testing.yml +0 -14
- data/examples/bash_prototyping/check_processes/prompt.md +0 -11
- data/examples/bash_prototyping/generate_report/prompt.md +0 -16
- data/examples/bash_prototyping/process_json_response/prompt.md +0 -24
- data/examples/bash_prototyping/system_analysis.png +0 -0
- data/examples/bash_prototyping/system_analysis.yml +0 -14
- data/examples/bash_prototyping/test_public_api/prompt.md +0 -22
- data/examples/case_when/README.md +0 -58
- data/examples/case_when/detect_language/prompt.md +0 -16
- data/examples/case_when/workflow.png +0 -0
- data/examples/case_when/workflow.yml +0 -58
- data/examples/cmd/README.md +0 -99
- data/examples/cmd/analyze_project/prompt.md +0 -57
- data/examples/cmd/basic_demo/prompt.md +0 -48
- data/examples/cmd/basic_workflow.png +0 -0
- data/examples/cmd/basic_workflow.yml +0 -17
- data/examples/cmd/check_repository/prompt.md +0 -57
- data/examples/cmd/create_and_verify/prompt.md +0 -56
- data/examples/cmd/dev_workflow.png +0 -0
- data/examples/cmd/dev_workflow.yml +0 -26
- data/examples/cmd/explore_project/prompt.md +0 -67
- data/examples/cmd/explorer_workflow.png +0 -0
- data/examples/cmd/explorer_workflow.yml +0 -21
- data/examples/cmd/smart_tool_selection/prompt.md +0 -99
- data/examples/coding_agent_with_model.yml +0 -20
- data/examples/coding_agent_with_retries.yml +0 -30
- data/examples/conditional/README.md +0 -161
- data/examples/conditional/check_condition/prompt.md +0 -1
- data/examples/conditional/simple_workflow.png +0 -0
- data/examples/conditional/simple_workflow.yml +0 -15
- data/examples/conditional/workflow.png +0 -0
- data/examples/conditional/workflow.yml +0 -23
- data/examples/context_management_demo/README.md +0 -43
- data/examples/context_management_demo/workflow.yml +0 -42
- data/examples/direct_coerce_syntax/README.md +0 -32
- data/examples/direct_coerce_syntax/workflow.png +0 -0
- data/examples/direct_coerce_syntax/workflow.yml +0 -36
- data/examples/dot_notation/README.md +0 -37
- data/examples/dot_notation/workflow.png +0 -0
- data/examples/dot_notation/workflow.yml +0 -44
- data/examples/exit_on_error/README.md +0 -50
- data/examples/exit_on_error/analyze_lint_output/prompt.md +0 -9
- data/examples/exit_on_error/apply_fixes/prompt.md +0 -2
- data/examples/exit_on_error/workflow.png +0 -0
- data/examples/exit_on_error/workflow.yml +0 -19
- data/examples/grading/README.md +0 -71
- data/examples/grading/analyze_coverage/prompt.md +0 -52
- data/examples/grading/calculate_final_grade.rb +0 -67
- data/examples/grading/format_result.rb +0 -64
- 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/js_test_runner +0 -31
- data/examples/grading/rb_test_runner +0 -19
- data/examples/grading/read_dependencies/prompt.md +0 -16
- data/examples/grading/run_coverage.rb +0 -54
- 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 -8
- data/examples/grading/workflow.png +0 -0
- data/examples/grading/workflow.rb.md +0 -6
- data/examples/grading/workflow.ts+tsx.md +0 -6
- data/examples/grading/workflow.yml +0 -41
- data/examples/instrumentation.rb +0 -76
- data/examples/interpolation/README.md +0 -50
- data/examples/interpolation/analyze_file/prompt.md +0 -1
- data/examples/interpolation/analyze_patterns/prompt.md +0 -27
- data/examples/interpolation/generate_report_for_js/prompt.md +0 -3
- data/examples/interpolation/generate_report_for_rb/prompt.md +0 -3
- data/examples/interpolation/sample.js +0 -48
- data/examples/interpolation/sample.rb +0 -42
- data/examples/interpolation/workflow.md +0 -1
- data/examples/interpolation/workflow.png +0 -0
- data/examples/interpolation/workflow.yml +0 -21
- data/examples/iteration/IMPLEMENTATION.md +0 -88
- data/examples/iteration/README.md +0 -68
- data/examples/iteration/analyze_complexity/prompt.md +0 -22
- data/examples/iteration/generate_recommendations/prompt.md +0 -21
- data/examples/iteration/generate_report/prompt.md +0 -129
- data/examples/iteration/implement_fix/prompt.md +0 -25
- data/examples/iteration/prioritize_issues/prompt.md +0 -24
- data/examples/iteration/prompts/analyze_file.md +0 -28
- data/examples/iteration/prompts/generate_summary.md +0 -24
- data/examples/iteration/prompts/update_report.md +0 -29
- data/examples/iteration/prompts/write_report.md +0 -22
- data/examples/iteration/read_file/prompt.md +0 -9
- data/examples/iteration/select_next_issue/prompt.md +0 -25
- data/examples/iteration/simple_workflow.md +0 -39
- data/examples/iteration/simple_workflow.yml +0 -58
- data/examples/iteration/update_fix_count/prompt.md +0 -26
- data/examples/iteration/verify_fix/prompt.md +0 -29
- data/examples/iteration/workflow.png +0 -0
- data/examples/iteration/workflow.yml +0 -42
- data/examples/json_handling/README.md +0 -32
- data/examples/json_handling/workflow.png +0 -0
- data/examples/json_handling/workflow.yml +0 -52
- data/examples/mcp/README.md +0 -223
- data/examples/mcp/analyze_changes/prompt.md +0 -8
- data/examples/mcp/analyze_issues/prompt.md +0 -4
- data/examples/mcp/analyze_schema/prompt.md +0 -4
- data/examples/mcp/check_data_quality/prompt.md +0 -5
- data/examples/mcp/check_documentation/prompt.md +0 -4
- data/examples/mcp/create_recommendations/prompt.md +0 -5
- data/examples/mcp/database_workflow.png +0 -0
- data/examples/mcp/database_workflow.yml +0 -29
- data/examples/mcp/env_demo/workflow.png +0 -0
- data/examples/mcp/env_demo/workflow.yml +0 -34
- data/examples/mcp/fetch_pr_context/prompt.md +0 -4
- data/examples/mcp/filesystem_demo/create_test_file/prompt.md +0 -2
- data/examples/mcp/filesystem_demo/list_files/prompt.md +0 -6
- data/examples/mcp/filesystem_demo/read_with_mcp/prompt.md +0 -7
- data/examples/mcp/filesystem_demo/workflow.png +0 -0
- data/examples/mcp/filesystem_demo/workflow.yml +0 -38
- data/examples/mcp/generate_insights/prompt.md +0 -4
- data/examples/mcp/generate_report/prompt.md +0 -6
- data/examples/mcp/generate_review/prompt.md +0 -16
- data/examples/mcp/github_workflow.png +0 -0
- data/examples/mcp/github_workflow.yml +0 -32
- data/examples/mcp/multi_mcp_workflow.png +0 -0
- data/examples/mcp/multi_mcp_workflow.yml +0 -58
- data/examples/mcp/post_review/prompt.md +0 -3
- data/examples/mcp/save_report/prompt.md +0 -6
- data/examples/mcp/search_issues/prompt.md +0 -2
- data/examples/mcp/summarize/prompt.md +0 -1
- data/examples/mcp/test_filesystem/prompt.md +0 -6
- data/examples/mcp/test_github/prompt.md +0 -8
- data/examples/mcp/test_read/prompt.md +0 -1
- data/examples/mcp/workflow.png +0 -0
- data/examples/mcp/workflow.yml +0 -35
- data/examples/no_model_fallback/README.md +0 -17
- data/examples/no_model_fallback/analyze_file/prompt.md +0 -1
- data/examples/no_model_fallback/analyze_patterns/prompt.md +0 -27
- data/examples/no_model_fallback/generate_report_for_md/prompt.md +0 -10
- data/examples/no_model_fallback/generate_report_for_rb/prompt.md +0 -3
- data/examples/no_model_fallback/sample.rb +0 -42
- data/examples/no_model_fallback/workflow.yml +0 -19
- data/examples/openrouter_example/README.md +0 -48
- data/examples/openrouter_example/analyze_input/prompt.md +0 -16
- data/examples/openrouter_example/generate_response/prompt.md +0 -9
- data/examples/openrouter_example/workflow.png +0 -0
- data/examples/openrouter_example/workflow.yml +0 -12
- data/examples/pre_post_processing/README.md +0 -111
- data/examples/pre_post_processing/analyze_test_file/prompt.md +0 -23
- data/examples/pre_post_processing/improve_test_coverage/prompt.md +0 -17
- data/examples/pre_post_processing/optimize_test_performance/prompt.md +0 -25
- data/examples/pre_post_processing/post_processing/aggregate_metrics/prompt.md +0 -31
- data/examples/pre_post_processing/post_processing/cleanup_environment/prompt.md +0 -28
- data/examples/pre_post_processing/post_processing/generate_summary_report/prompt.md +0 -32
- data/examples/pre_post_processing/post_processing/output.txt +0 -24
- data/examples/pre_post_processing/pre_processing/gather_baseline_metrics/prompt.md +0 -26
- data/examples/pre_post_processing/pre_processing/setup_test_environment/prompt.md +0 -11
- data/examples/pre_post_processing/validate_changes/prompt.md +0 -24
- data/examples/pre_post_processing/workflow.png +0 -0
- data/examples/pre_post_processing/workflow.yml +0 -21
- data/examples/retry/workflow.yml +0 -23
- data/examples/rspec_to_minitest/README.md +0 -68
- data/examples/rspec_to_minitest/analyze_spec/prompt.md +0 -30
- data/examples/rspec_to_minitest/create_minitest/prompt.md +0 -33
- data/examples/rspec_to_minitest/run_and_improve/prompt.md +0 -35
- data/examples/rspec_to_minitest/workflow.md +0 -10
- data/examples/rspec_to_minitest/workflow.png +0 -0
- data/examples/rspec_to_minitest/workflow.yml +0 -40
- data/examples/shared_config/README.md +0 -52
- data/examples/shared_config/example_with_shared_config/workflow.png +0 -0
- data/examples/shared_config/example_with_shared_config/workflow.yml +0 -6
- data/examples/shared_config/shared.png +0 -0
- data/examples/shared_config/shared.yml +0 -7
- data/examples/single_target_prepost/README.md +0 -36
- data/examples/single_target_prepost/post_processing/output.txt +0 -27
- data/examples/single_target_prepost/pre_processing/gather_dependencies/prompt.md +0 -11
- data/examples/single_target_prepost/workflow.png +0 -0
- data/examples/single_target_prepost/workflow.yml +0 -20
- data/examples/smart_coercion_defaults/README.md +0 -65
- data/examples/smart_coercion_defaults/workflow.png +0 -0
- data/examples/smart_coercion_defaults/workflow.yml +0 -44
- data/examples/step_configuration/README.md +0 -84
- data/examples/step_configuration/workflow.png +0 -0
- data/examples/step_configuration/workflow.yml +0 -57
- data/examples/swarm_example.yml +0 -25
- data/examples/tool_config_example/README.md +0 -109
- data/examples/tool_config_example/example_step/prompt.md +0 -42
- data/examples/tool_config_example/workflow.png +0 -0
- data/examples/tool_config_example/workflow.yml +0 -17
- data/examples/user_input/README.md +0 -90
- data/examples/user_input/funny_name/create_backstory/prompt.md +0 -10
- data/examples/user_input/funny_name/workflow.png +0 -0
- data/examples/user_input/funny_name/workflow.yml +0 -26
- data/examples/user_input/generate_summary/prompt.md +0 -11
- data/examples/user_input/simple_input_demo/workflow.png +0 -0
- data/examples/user_input/simple_input_demo/workflow.yml +0 -35
- data/examples/user_input/survey_workflow.png +0 -0
- data/examples/user_input/survey_workflow.yml +0 -71
- data/examples/user_input/welcome_message/prompt.md +0 -3
- data/examples/user_input/workflow.png +0 -0
- data/examples/user_input/workflow.yml +0 -73
- data/examples/workflow_generator/README.md +0 -27
- data/examples/workflow_generator/analyze_user_request/prompt.md +0 -34
- data/examples/workflow_generator/create_workflow_files/prompt.md +0 -32
- data/examples/workflow_generator/get_user_input/prompt.md +0 -14
- data/examples/workflow_generator/info_from_roast.rb +0 -22
- data/examples/workflow_generator/workflow.png +0 -0
- data/examples/workflow_generator/workflow.yml +0 -34
- data/lib/roast/helpers/timeout_handler.rb +0 -89
@@ -1,21 +0,0 @@
|
|
1
|
-
Based on the analysis of complexity for file <%= current_file %>, I'll generate specific recommendations for improving code quality.
|
2
|
-
|
3
|
-
I'll use the complexity analysis from the previous step:
|
4
|
-
```json
|
5
|
-
<%= output.analyze_complexity %>
|
6
|
-
```
|
7
|
-
|
8
|
-
For each identified issue, I'll provide detailed, actionable recommendations including:
|
9
|
-
|
10
|
-
1. What specific changes should be made
|
11
|
-
2. How the change improves the code
|
12
|
-
3. Sample code snippets demonstrating the improvement
|
13
|
-
4. An estimate of effort required (low, medium, high)
|
14
|
-
5. Priority level for implementation
|
15
|
-
|
16
|
-
I'll organize these recommendations to address:
|
17
|
-
- Most critical issues first
|
18
|
-
- Quick wins that provide significant value for minimal effort
|
19
|
-
- Long-term architectural improvements
|
20
|
-
|
21
|
-
My recommendations will follow Ruby best practices, adhere to common style guides, and consider maintainability, readability, and performance.
|
@@ -1,129 +0,0 @@
|
|
1
|
-
# Code Quality Improvement Report
|
2
|
-
|
3
|
-
## Summary of Analysis and Improvements
|
4
|
-
|
5
|
-
I've analyzed {{output.get_files_to_analyze.split('\n').length}} Ruby files for code quality issues and made targeted improvements.
|
6
|
-
|
7
|
-
### Files Analyzed
|
8
|
-
|
9
|
-
```
|
10
|
-
{{output.get_files_to_analyze}}
|
11
|
-
```
|
12
|
-
|
13
|
-
### Issues Identified
|
14
|
-
|
15
|
-
Total issues identified: {{output.prioritize_issues.total_issues}}
|
16
|
-
|
17
|
-
Issues by severity:
|
18
|
-
- High: {{output.prioritize_issues.high_severity || 0}}
|
19
|
-
- Medium: {{output.prioritize_issues.medium_severity || 0}}
|
20
|
-
- Low: {{output.prioritize_issues.low_severity || 0}}
|
21
|
-
|
22
|
-
Issues by type:
|
23
|
-
- Complexity: {{output.prioritize_issues.complexity_issues || 0}}
|
24
|
-
- Maintainability: {{output.prioritize_issues.maintainability_issues || 0}}
|
25
|
-
- Performance: {{output.prioritize_issues.performance_issues || 0}}
|
26
|
-
- Style: {{output.prioritize_issues.style_issues || 0}}
|
27
|
-
|
28
|
-
### Improvements Made
|
29
|
-
|
30
|
-
Number of fixes applied: {{output.update_fix_count.fixes_applied || 0}}
|
31
|
-
|
32
|
-
{{#if output.update_fix_count.fixes_applied > 0}}
|
33
|
-
Fixes by type:
|
34
|
-
{{#each output.fix_summary}}
|
35
|
-
- {{this.type}}: {{this.count}} ({{this.percentage}}% of total)
|
36
|
-
{{/each}}
|
37
|
-
|
38
|
-
Top files improved:
|
39
|
-
{{#each output.file_improvements}}
|
40
|
-
- {{this.file}}: {{this.issues_fixed}} issues fixed
|
41
|
-
{{/each}}
|
42
|
-
{{else}}
|
43
|
-
No fixes were applied during this run.
|
44
|
-
{{/if}}
|
45
|
-
|
46
|
-
## Detailed Fix List
|
47
|
-
|
48
|
-
{{#if output.update_fix_count.fixes_applied > 0}}
|
49
|
-
{{#each output.fixes_applied}}
|
50
|
-
### Fix #{{@index + 1}}: {{this.issue.type}} in {{this.issue.file_path}}
|
51
|
-
|
52
|
-
**Issue**: {{this.issue.description}}
|
53
|
-
**Location**: {{this.issue.location}}
|
54
|
-
**Severity**: {{this.issue.severity}}
|
55
|
-
|
56
|
-
**Solution Applied**: {{this.fix_description}}
|
57
|
-
|
58
|
-
```diff
|
59
|
-
{{this.diff}}
|
60
|
-
```
|
61
|
-
|
62
|
-
**Verification**: {{#if this.verification.success}}✅ Successful{{else}}❌ Failed: {{this.verification.reason}}{{/if}}
|
63
|
-
|
64
|
-
{{/each}}
|
65
|
-
{{else}}
|
66
|
-
No fixes were applied during this run.
|
67
|
-
{{/if}}
|
68
|
-
|
69
|
-
## Recommendations for Future Improvements
|
70
|
-
|
71
|
-
Based on the remaining issues, here are the top recommendations for improving code quality:
|
72
|
-
|
73
|
-
{{#each output.top_recommendations}}
|
74
|
-
{{@index + 1}}. **{{this.title}}**
|
75
|
-
{{this.description}}
|
76
|
-
Affected files: {{this.affected_files}}
|
77
|
-
{{/each}}
|
78
|
-
|
79
|
-
## Conclusion
|
80
|
-
|
81
|
-
This automated code quality improvement run has {{#if output.update_fix_count.fixes_applied > 0}}successfully addressed {{output.update_fix_count.fixes_applied}} issues{{else}}identified issues but did not apply any fixes{{/if}}. The remaining issues should be reviewed and addressed as part of ongoing code maintenance.
|
82
|
-
|
83
|
-
I'll generate a comprehensive summary report of all the code quality improvements made during this workflow.
|
84
|
-
|
85
|
-
Total number of fixes applied:
|
86
|
-
```
|
87
|
-
{{output.update_fix_count.fixes_applied || 0}}
|
88
|
-
```
|
89
|
-
|
90
|
-
I'll analyze the following data to create the report:
|
91
|
-
1. Original list of issues identified:
|
92
|
-
```json
|
93
|
-
{{output.prioritize_issues}}
|
94
|
-
```
|
95
|
-
|
96
|
-
2. Issues that were addressed:
|
97
|
-
```json
|
98
|
-
{{outputs_of.select_next_issue}}
|
99
|
-
```
|
100
|
-
|
101
|
-
3. Implementation and verification details:
|
102
|
-
```json
|
103
|
-
{{outputs_of.implement_fix}}
|
104
|
-
{{outputs_of.verify_fix}}
|
105
|
-
```
|
106
|
-
|
107
|
-
The report will include:
|
108
|
-
|
109
|
-
1. **Executive Summary**
|
110
|
-
- Total files analyzed
|
111
|
-
- Total issues identified
|
112
|
-
- Issues fixed vs. remaining
|
113
|
-
- Most common issue types
|
114
|
-
|
115
|
-
2. **Detailed Analysis by File**
|
116
|
-
- Issues fixed per file
|
117
|
-
- Before/after code quality assessment
|
118
|
-
|
119
|
-
3. **Implementation Details**
|
120
|
-
- Description of each fix
|
121
|
-
- Impact on code quality
|
122
|
-
- Verification results
|
123
|
-
|
124
|
-
4. **Recommendations**
|
125
|
-
- Remaining high-priority issues
|
126
|
-
- Suggested next steps
|
127
|
-
- Long-term code quality improvement suggestions
|
128
|
-
|
129
|
-
This report provides a comprehensive overview of the code quality improvements made and serves as documentation for the changes implemented.
|
@@ -1,25 +0,0 @@
|
|
1
|
-
I'll implement the fix for the issue selected in the previous step.
|
2
|
-
|
3
|
-
Here is the issue to fix:
|
4
|
-
```json
|
5
|
-
<%= output.select_next_issue %>
|
6
|
-
```
|
7
|
-
|
8
|
-
First, I'll read the current file content to understand the context:
|
9
|
-
|
10
|
-
```ruby
|
11
|
-
<%= read_file(output.select_next_issue.file_path) %>
|
12
|
-
```
|
13
|
-
|
14
|
-
Based on the issue description and the recommended changes, I'll implement a fix that:
|
15
|
-
1. Addresses the specific issue identified
|
16
|
-
2. Follows Ruby best practices and style conventions
|
17
|
-
3. Is minimal and focused (changes only what's necessary)
|
18
|
-
4. Maintains or improves the existing functionality
|
19
|
-
|
20
|
-
I'll use the update_files tool to apply the changes. For each change, I'll provide:
|
21
|
-
1. The file path
|
22
|
-
2. The changes to make
|
23
|
-
3. A detailed explanation of what was changed and why
|
24
|
-
|
25
|
-
After implementing the fix, I'll return a summary of the changes made.
|
@@ -1,24 +0,0 @@
|
|
1
|
-
I'll analyze all the recommendations I've generated across multiple files and prioritize them according to:
|
2
|
-
|
3
|
-
1. Severity of the issues
|
4
|
-
2. Complexity of implementation
|
5
|
-
3. Impact on code quality and maintainability
|
6
|
-
4. Dependencies between issues
|
7
|
-
|
8
|
-
Let me review all the recommendations collected so far:
|
9
|
-
|
10
|
-
```json
|
11
|
-
<%= outputs_of.generate_recommendations %>
|
12
|
-
```
|
13
|
-
|
14
|
-
I'll create a comprehensive prioritized list of all issues across files, combining similar issues where appropriate. The prioritized list will include:
|
15
|
-
|
16
|
-
1. Issue ID
|
17
|
-
2. File path
|
18
|
-
3. Issue description
|
19
|
-
4. Severity (High, Medium, Low)
|
20
|
-
5. Implementation difficulty (Easy, Medium, Hard)
|
21
|
-
6. Priority score (calculated from severity and difficulty)
|
22
|
-
7. Dependencies (if any)
|
23
|
-
|
24
|
-
This prioritized list will guide our approach to addressing the most important issues first, while being mindful of dependencies between issues.
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# Ruby File Method Analysis
|
2
|
-
|
3
|
-
You are a code analyzer focusing on analyzing Ruby files to count the number of methods defined.
|
4
|
-
|
5
|
-
## Input
|
6
|
-
- File path: <%= file_path %>
|
7
|
-
- File content:
|
8
|
-
```ruby
|
9
|
-
<%= read_file(file_path) %>
|
10
|
-
```
|
11
|
-
|
12
|
-
## Task
|
13
|
-
1. Analyze the Ruby file content
|
14
|
-
2. Count the number of methods defined in the file (including class methods, instance methods, and module methods)
|
15
|
-
3. Return a JSON object with:
|
16
|
-
- file_name: The basename of the file
|
17
|
-
- method_count: The number of methods found
|
18
|
-
- method_names: An array of method names found in the file
|
19
|
-
|
20
|
-
## Response Format
|
21
|
-
Return a JSON object with the following structure:
|
22
|
-
```json
|
23
|
-
{
|
24
|
-
"file_name": "base_step.rb",
|
25
|
-
"method_count": 5,
|
26
|
-
"method_names": ["initialize", "call", "validate", "execute", "helper_method"]
|
27
|
-
}
|
28
|
-
```
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# Generate Method Analysis Summary
|
2
|
-
|
3
|
-
You are a report generator responsible for summarizing the method analysis results.
|
4
|
-
|
5
|
-
## Input
|
6
|
-
- Report data: <%= report_data %>
|
7
|
-
|
8
|
-
## Task
|
9
|
-
1. Parse the report data as JSON
|
10
|
-
2. Create a summary of the analysis results including:
|
11
|
-
- Total number of files analyzed
|
12
|
-
- Total number of methods found
|
13
|
-
- Average number of methods per file
|
14
|
-
- File with the most methods
|
15
|
-
- File with the fewest methods
|
16
|
-
3. Generate a formatted summary text
|
17
|
-
|
18
|
-
## Response Format
|
19
|
-
Return a JSON object with the following structure:
|
20
|
-
```json
|
21
|
-
{
|
22
|
-
"summary": "## Ruby Method Analysis Summary\n\nAnalyzed 10 Ruby files in the workflow directory.\n- Total methods found: 45\n- Average methods per file: 4.5\n- Most methods: base_workflow.rb (12 methods)\n- Fewest methods: state_repository.rb (1 method)\n\n### Top 3 Files by Method Count\n1. base_workflow.rb: 12 methods\n2. configuration.rb: 8 methods\n3. workflow_executor.rb: 7 methods\n"
|
23
|
-
}
|
24
|
-
```
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# Update Method Count Report
|
2
|
-
|
3
|
-
You are a data updater responsible for adding analysis results to a report.
|
4
|
-
|
5
|
-
## Input
|
6
|
-
- File path: <%= file_path %>
|
7
|
-
- Method count: <%= method_count %>
|
8
|
-
- Current report data: <%= current_report %>
|
9
|
-
|
10
|
-
## Task
|
11
|
-
1. Parse the current report data as JSON
|
12
|
-
2. Add the new file analysis results to the report's "results" array
|
13
|
-
3. Increment the "files_analyzed" counter by 1
|
14
|
-
4. Add the method count to the "total_methods" counter
|
15
|
-
5. Return the updated JSON report
|
16
|
-
|
17
|
-
## Response Format
|
18
|
-
Return a JSON object with the updated report structure:
|
19
|
-
```json
|
20
|
-
{
|
21
|
-
"files_analyzed": 10,
|
22
|
-
"total_methods": 45,
|
23
|
-
"results": [
|
24
|
-
{"file_path": "file1.rb", "method_count": 5, "method_names": ["method1", "method2", ...]},
|
25
|
-
{"file_path": "file2.rb", "method_count": 3, "method_names": ["methodA", "methodB", ...]},
|
26
|
-
...
|
27
|
-
]
|
28
|
-
}
|
29
|
-
```
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# Write Method Analysis Report
|
2
|
-
|
3
|
-
You are responsible for creating a formatted report file based on the analysis results.
|
4
|
-
|
5
|
-
## Input
|
6
|
-
- Report data: <%= report_data %>
|
7
|
-
- Summary: <%= summary %>
|
8
|
-
|
9
|
-
## Task
|
10
|
-
1. Generate a Markdown report that includes:
|
11
|
-
- The summary information
|
12
|
-
- A detailed table of all files analyzed, with their method counts and method names
|
13
|
-
2. Format the report in a clean, readable manner
|
14
|
-
|
15
|
-
## Response Format
|
16
|
-
Return a JSON object with the following structure:
|
17
|
-
```json
|
18
|
-
{
|
19
|
-
"report_content": "# Ruby Method Analysis Report\n\n<%= summary %>\n\n## Detailed Results\n\n| File | Method Count | Methods |\n|------|--------------|--------|\n| file1.rb | 5 | method1, method2, ... |\n| file2.rb | 3 | methodA, methodB, ... |\n...",
|
20
|
-
"report_file_path": "method_analysis_report.md"
|
21
|
-
}
|
22
|
-
```
|
@@ -1,25 +0,0 @@
|
|
1
|
-
I'll select the next highest priority issue to fix from our prioritized list.
|
2
|
-
|
3
|
-
Here is the current prioritized list of issues:
|
4
|
-
```json
|
5
|
-
<%= output.prioritize_issues %>
|
6
|
-
```
|
7
|
-
|
8
|
-
And here is the count of fixes we've already applied:
|
9
|
-
```
|
10
|
-
<%= output.update_fix_count || '0' %>
|
11
|
-
```
|
12
|
-
|
13
|
-
I'll select the highest priority issue that hasn't yet been addressed. I'll consider:
|
14
|
-
|
15
|
-
1. The priority score from our previous analysis
|
16
|
-
2. Dependencies between issues (ensuring prerequisites are addressed first)
|
17
|
-
3. Logical grouping (addressing related issues in the same file together)
|
18
|
-
|
19
|
-
If there are no issues left to fix, I'll indicate this with `{"no_issues_left": true}`.
|
20
|
-
|
21
|
-
For the selected issue, I'll return:
|
22
|
-
1. The issue details
|
23
|
-
2. The file path to modify
|
24
|
-
3. A clear description of the changes needed
|
25
|
-
4. Any context needed for implementation
|
@@ -1,39 +0,0 @@
|
|
1
|
-
# Simple Iteration Workflow Example
|
2
|
-
|
3
|
-
This example demonstrates how to use both the `each` and `repeat` iteration constructs in Roast workflows.
|
4
|
-
|
5
|
-
## Workflow Description
|
6
|
-
|
7
|
-
The workflow analyzes Ruby files in the `lib/roast/workflow` directory and counts the number of methods defined in each file. The process follows these steps:
|
8
|
-
|
9
|
-
1. Find all Ruby files in the specified directory
|
10
|
-
2. Initialize a report object to store our results
|
11
|
-
3. Process each file found:
|
12
|
-
- Read the file content
|
13
|
-
- Count the methods defined
|
14
|
-
- Update the report with the analysis result
|
15
|
-
4. Generate a summary report
|
16
|
-
5. Write the report to a file
|
17
|
-
|
18
|
-
## Key Components
|
19
|
-
|
20
|
-
- `each` construct: Processes every Ruby file found in the directory
|
21
|
-
- `repeat` construct: Used to generate the final summary (demonstrates a simple case of the repeat construct)
|
22
|
-
- Both block-level and prompt-based steps
|
23
|
-
|
24
|
-
## Running the Workflow
|
25
|
-
|
26
|
-
To run this workflow, use the following command:
|
27
|
-
|
28
|
-
```bash
|
29
|
-
shadowenv exec -- bundle exec roast examples/iteration/simple_workflow.yml
|
30
|
-
```
|
31
|
-
|
32
|
-
The final report will be saved to a markdown file as specified in the output of the `write_report` step.
|
33
|
-
|
34
|
-
## Learning Objectives
|
35
|
-
|
36
|
-
- Understand how to use the `each` construct to iterate over a collection
|
37
|
-
- Understand how to use the `repeat` construct for conditional repetition
|
38
|
-
- Learn how to build and update data structures across workflow steps
|
39
|
-
- See how to pass data between steps in an iteration workflow
|
@@ -1,58 +0,0 @@
|
|
1
|
-
name: Ruby Method Counter
|
2
|
-
tools:
|
3
|
-
- Roast::Tools::ReadFile
|
4
|
-
- Roast::Tools::Grep
|
5
|
-
- Roast::Tools::WriteFile
|
6
|
-
- Roast::Tools::CodingAgent
|
7
|
-
|
8
|
-
steps:
|
9
|
-
# Find all Ruby files in the specified directory
|
10
|
-
- find_ruby_files:
|
11
|
-
$(find lib/roast/workflow -type f -name "*.rb")
|
12
|
-
|
13
|
-
# Initialize a report object to store our results
|
14
|
-
- initialize_report:
|
15
|
-
$(echo '{"files_analyzed": 0, "total_methods": 0, "results": []}')
|
16
|
-
|
17
|
-
# Process each file found
|
18
|
-
- each: "{{output['find_ruby_files'].split('\n')}}"
|
19
|
-
as: "current_file"
|
20
|
-
steps:
|
21
|
-
# Read the file content
|
22
|
-
- read_file:
|
23
|
-
prompt: examples/iteration/prompts/analyze_file
|
24
|
-
model: claude-3-haiku-20240307
|
25
|
-
vars:
|
26
|
-
file_path: "{{ current_file }}"
|
27
|
-
|
28
|
-
# Update the report with the analysis result
|
29
|
-
- update_report:
|
30
|
-
prompt: examples/iteration/prompts/update_report
|
31
|
-
model: claude-3-haiku-20240307
|
32
|
-
vars:
|
33
|
-
file_path: "{{ current_file }}"
|
34
|
-
method_count: "{{ output['read_file']['method_count'] }}"
|
35
|
-
current_report: "{{ output['initialize_report'] }}"
|
36
|
-
|
37
|
-
# Generate the summary report after processing all files
|
38
|
-
- report_count:
|
39
|
-
$(echo "{{ output.initialize_report.files_analyzed }}")
|
40
|
-
|
41
|
-
# Repeat to generate the final summary - demonstrates the repeat construct
|
42
|
-
- repeat:
|
43
|
-
steps:
|
44
|
-
- generate_summary:
|
45
|
-
prompt: examples/iteration/prompts/generate_summary
|
46
|
-
model: claude-3-haiku-20240307
|
47
|
-
vars:
|
48
|
-
report_data: "{{ output['initialize_report'] }}"
|
49
|
-
until: "{{true}}"
|
50
|
-
max_iterations: 1
|
51
|
-
|
52
|
-
# Write the report to a file
|
53
|
-
- write_report:
|
54
|
-
prompt: examples/iteration/prompts/write_report
|
55
|
-
model: claude-3-haiku-20240307
|
56
|
-
vars:
|
57
|
-
report_data: "{{ output['initialize_report'] }}"
|
58
|
-
summary: "{{ output['generate_summary']['summary'] }}"
|
@@ -1,26 +0,0 @@
|
|
1
|
-
I'll update the count of fixes that have been successfully applied.
|
2
|
-
|
3
|
-
Current fix count:
|
4
|
-
```
|
5
|
-
<%= output.update_fix_count || 0 %>
|
6
|
-
```
|
7
|
-
|
8
|
-
Verification result from the previous step:
|
9
|
-
```json
|
10
|
-
<%= output.verify_fix %>
|
11
|
-
```
|
12
|
-
|
13
|
-
I'll increment the fix count if the verification was successful or partial, but not if it failed.
|
14
|
-
|
15
|
-
```javascript
|
16
|
-
let currentCount = parseInt(<%= output.update_fix_count || 0 %>);
|
17
|
-
let verificationStatus = "<%= output.verify_fix.status %>";
|
18
|
-
|
19
|
-
if (verificationStatus === "success" || verificationStatus === "partial") {
|
20
|
-
currentCount += 1;
|
21
|
-
}
|
22
|
-
|
23
|
-
return { fixes_applied: currentCount };
|
24
|
-
```
|
25
|
-
|
26
|
-
This updated count will be used to determine whether we've met our target for the number of fixes to implement.
|
@@ -1,29 +0,0 @@
|
|
1
|
-
I'll verify that the fix implemented in the previous step correctly addresses the identified issue.
|
2
|
-
|
3
|
-
Here are the details of the issue that was fixed:
|
4
|
-
```json
|
5
|
-
<%= output.select_next_issue %>
|
6
|
-
```
|
7
|
-
|
8
|
-
And here is the implementation of the fix:
|
9
|
-
```json
|
10
|
-
<%= output.implement_fix %>
|
11
|
-
```
|
12
|
-
|
13
|
-
Now I'll read the updated file to verify the changes:
|
14
|
-
```ruby
|
15
|
-
<%= read_file(output.select_next_issue.file_path) %>
|
16
|
-
```
|
17
|
-
|
18
|
-
I'll evaluate the fix based on these criteria:
|
19
|
-
1. Does it fully address the identified issue?
|
20
|
-
2. Did it introduce any new issues or regressions?
|
21
|
-
3. Does it maintain the original functionality?
|
22
|
-
4. Does it follow Ruby best practices and style conventions?
|
23
|
-
5. Is it minimal and focused (changing only what was necessary)?
|
24
|
-
|
25
|
-
Based on this evaluation, I'll provide:
|
26
|
-
1. A verification status (success, partial, failure)
|
27
|
-
2. Detailed reasoning for the status
|
28
|
-
3. Any recommendations for further improvements or adjustments
|
29
|
-
4. An overall assessment of the code quality improvement
|
Binary file
|
@@ -1,42 +0,0 @@
|
|
1
|
-
name: Code Quality Analyzer
|
2
|
-
tools:
|
3
|
-
- Roast::Tools::ReadFile
|
4
|
-
- Roast::Tools::Grep
|
5
|
-
- Roast::Tools::WriteFile
|
6
|
-
- Roast::Tools::UpdateFiles
|
7
|
-
- Roast::Tools::CodingAgent
|
8
|
-
- Roast::Tools::Cmd
|
9
|
-
|
10
|
-
steps:
|
11
|
-
# Get all Ruby files from the target directory
|
12
|
-
- get_files_to_analyze:
|
13
|
-
$(find {{resource.target}} -name "*.rb" -not -path "*/vendor/*" | grep -v "test")
|
14
|
-
|
15
|
-
# Analyze each file and generate improvement recommendations
|
16
|
-
- each: "{{output['get_files_to_analyze'].split('\n')}}"
|
17
|
-
as: "current_file"
|
18
|
-
steps:
|
19
|
-
- read_file:
|
20
|
-
$(cat {{current_file}})
|
21
|
-
- analyze_complexity
|
22
|
-
- generate_recommendations
|
23
|
-
|
24
|
-
# After analyzing all files, sort issues by priority
|
25
|
-
- prioritize_issues
|
26
|
-
|
27
|
-
# Process the highest priority issues first, until we've addressed a sufficient number
|
28
|
-
# or reached our iteration limit
|
29
|
-
- initialize_fixes:
|
30
|
-
$(echo "0")
|
31
|
-
|
32
|
-
- repeat:
|
33
|
-
steps:
|
34
|
-
- select_next_issue
|
35
|
-
- implement_fix
|
36
|
-
- verify_fix
|
37
|
-
- update_fix_count
|
38
|
-
until: "{{output['update_fix_count']['fixes_applied'] >= 5 || output['select_next_issue']['no_issues_left'] == true}}"
|
39
|
-
max_iterations: 10
|
40
|
-
|
41
|
-
# Generate a summary report of all changes made
|
42
|
-
- generate_report
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# JSON Handling Example
|
2
|
-
|
3
|
-
This example demonstrates how Roast handles JSON responses from LLM steps.
|
4
|
-
|
5
|
-
## Key Features
|
6
|
-
|
7
|
-
1. **JSON Arrays**: When a step has `json: true` and returns an array, the result is `flatten.first` - the first element after flattening the array. This is useful when the LLM returns an array with a single object.
|
8
|
-
|
9
|
-
2. **JSON Objects**: Hash/object responses are maintained as proper Ruby hashes in the workflow output.
|
10
|
-
|
11
|
-
3. **Replay Support**: JSON data structures are properly serialized and deserialized when saving/loading workflow state for replay functionality.
|
12
|
-
|
13
|
-
## Running the Example
|
14
|
-
|
15
|
-
```bash
|
16
|
-
bin/roast examples/json_handling/workflow.yml
|
17
|
-
```
|
18
|
-
|
19
|
-
## How It Works
|
20
|
-
|
21
|
-
1. The `fetch_users` step generates a JSON array of user objects
|
22
|
-
2. The `fetch_metadata` step generates a JSON object with metadata
|
23
|
-
3. The `process_data` step can access the structured data using `{{output.fetch_users}}` and `{{output.fetch_metadata}}`
|
24
|
-
4. The structured data is preserved through the workflow, including during replay scenarios
|
25
|
-
|
26
|
-
## Implementation Details
|
27
|
-
|
28
|
-
When `json: true` is set on a step:
|
29
|
-
- Array responses return `flatten.first` - the first element after flattening
|
30
|
-
- Object responses are preserved as hashes
|
31
|
-
- Non-JSON array responses (when `json: false`) are joined with newlines
|
32
|
-
- The data maintains its structure when saved to and loaded from workflow state files
|
Binary file
|
@@ -1,52 +0,0 @@
|
|
1
|
-
name: JSON Data Handling Example
|
2
|
-
api_provider: openai
|
3
|
-
model: gpt-4
|
4
|
-
|
5
|
-
tools:
|
6
|
-
- type: write_file
|
7
|
-
allowed_paths:
|
8
|
-
- examples/json_handling/
|
9
|
-
|
10
|
-
steps:
|
11
|
-
- name: fetch_users
|
12
|
-
prompt: |
|
13
|
-
Generate a JSON array of 3 user objects. Each user should have:
|
14
|
-
- id (number)
|
15
|
-
- name (string)
|
16
|
-
- email (string)
|
17
|
-
- active (boolean)
|
18
|
-
json: true
|
19
|
-
|
20
|
-
- name: fetch_metadata
|
21
|
-
prompt: |
|
22
|
-
Generate a JSON object with metadata about a dataset:
|
23
|
-
- total_records (number)
|
24
|
-
- last_updated (ISO date string)
|
25
|
-
- categories (array of strings)
|
26
|
-
- filters (object with status and sort fields)
|
27
|
-
json: true
|
28
|
-
|
29
|
-
- name: process_data
|
30
|
-
prompt: |
|
31
|
-
Based on the users data: {{output.fetch_users}}
|
32
|
-
And metadata: {{output.fetch_metadata}}
|
33
|
-
|
34
|
-
Create a summary report describing:
|
35
|
-
1. How many active users there are
|
36
|
-
2. The categories available
|
37
|
-
3. When the data was last updated
|
38
|
-
|
39
|
-
- name: save_report
|
40
|
-
tool: write_file
|
41
|
-
path: examples/json_handling/report.txt
|
42
|
-
content: |
|
43
|
-
# JSON Data Processing Report
|
44
|
-
|
45
|
-
## Users Data
|
46
|
-
{{output.fetch_users}}
|
47
|
-
|
48
|
-
## Metadata
|
49
|
-
{{output.fetch_metadata}}
|
50
|
-
|
51
|
-
## Summary
|
52
|
-
{{output.process_data}}
|