roast-ai 0.4.8 → 0.4.10

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 (107) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +1 -0
  4. data/Gemfile +6 -7
  5. data/Gemfile.lock +15 -3
  6. data/README.md +9 -5
  7. data/dsl/demo/Gemfile +4 -0
  8. data/dsl/demo/Gemfile.lock +120 -0
  9. data/dsl/demo/cogs/local.rb +15 -0
  10. data/dsl/demo/simple_external_cog.rb +17 -0
  11. data/dsl/less_simple.rb +112 -0
  12. data/dsl/plugin-gem-example/.gitignore +8 -0
  13. data/dsl/plugin-gem-example/Gemfile +13 -0
  14. data/dsl/plugin-gem-example/Gemfile.lock +178 -0
  15. data/dsl/plugin-gem-example/lib/other.rb +17 -0
  16. data/dsl/plugin-gem-example/lib/plugin_gem_example.rb +5 -0
  17. data/dsl/plugin-gem-example/lib/simple.rb +15 -0
  18. data/dsl/plugin-gem-example/lib/version.rb +10 -0
  19. data/dsl/plugin-gem-example/plugin-gem-example.gemspec +28 -0
  20. data/dsl/prototype.rb +25 -0
  21. data/dsl/scoped_executors.rb +28 -0
  22. data/dsl/simple.rb +5 -7
  23. data/dsl/simple_chat.rb +12 -0
  24. data/dsl/step_communication.rb +24 -0
  25. data/examples/grading/README.md +46 -0
  26. data/examples/grading/analyze_coverage/prompt.md +52 -0
  27. data/examples/grading/calculate_final_grade.rb +64 -0
  28. data/examples/grading/format_result.rb +61 -0
  29. data/examples/grading/generate_grades/prompt.md +105 -0
  30. data/examples/grading/generate_recommendations/output.txt +17 -0
  31. data/examples/grading/generate_recommendations/prompt.md +60 -0
  32. data/examples/grading/read_dependencies/prompt.md +15 -0
  33. data/examples/grading/verify_mocks_and_stubs/prompt.md +12 -0
  34. data/examples/grading/verify_test_helpers/prompt.md +53 -0
  35. data/examples/grading/workflow.md +5 -0
  36. data/examples/grading/workflow.yml +28 -0
  37. data/lib/roast/dsl/cog/config.rb +36 -0
  38. data/lib/roast/dsl/cog/input.rb +30 -0
  39. data/lib/roast/dsl/cog/output.rb +24 -0
  40. data/lib/roast/dsl/cog/registry.rb +39 -0
  41. data/lib/roast/dsl/cog/stack.rb +22 -0
  42. data/lib/roast/dsl/cog/store.rb +29 -0
  43. data/lib/roast/dsl/cog.rb +91 -0
  44. data/lib/roast/dsl/cog_input_context.rb +9 -0
  45. data/lib/roast/dsl/cog_input_manager.rb +47 -0
  46. data/lib/roast/dsl/cogs/chat.rb +78 -0
  47. data/lib/roast/dsl/cogs/cmd.rb +132 -0
  48. data/lib/roast/dsl/cogs/execute.rb +46 -0
  49. data/lib/roast/dsl/cogs/graph.rb +53 -0
  50. data/lib/roast/dsl/config_context.rb +9 -0
  51. data/lib/roast/dsl/config_manager.rb +96 -0
  52. data/lib/roast/dsl/execution_context.rb +9 -0
  53. data/lib/roast/dsl/execution_manager.rb +137 -0
  54. data/lib/roast/dsl/workflow.rb +113 -0
  55. data/lib/roast/error.rb +7 -0
  56. data/lib/roast/errors.rb +3 -3
  57. data/lib/roast/graph/edge.rb +25 -0
  58. data/lib/roast/graph/node.rb +40 -0
  59. data/lib/roast/graph/quantum_edge.rb +27 -0
  60. data/lib/roast/graph/threaded_exec.rb +93 -0
  61. data/lib/roast/graph.rb +233 -0
  62. data/lib/roast/resources/api_resource.rb +2 -2
  63. data/lib/roast/resources/url_resource.rb +2 -2
  64. data/lib/roast/tools/apply_diff.rb +1 -1
  65. data/lib/roast/tools/ask_user.rb +1 -1
  66. data/lib/roast/tools/bash.rb +1 -1
  67. data/lib/roast/tools/cmd.rb +2 -2
  68. data/lib/roast/tools/coding_agent.rb +2 -2
  69. data/lib/roast/tools/grep.rb +1 -1
  70. data/lib/roast/tools/read_file.rb +1 -1
  71. data/lib/roast/tools/search_file.rb +1 -1
  72. data/lib/roast/tools/swarm.rb +1 -1
  73. data/lib/roast/tools/update_files.rb +2 -2
  74. data/lib/roast/tools/write_file.rb +1 -1
  75. data/lib/roast/tools.rb +1 -1
  76. data/lib/roast/value_objects/api_token.rb +1 -1
  77. data/lib/roast/value_objects/uri_base.rb +1 -1
  78. data/lib/roast/value_objects/workflow_path.rb +1 -1
  79. data/lib/roast/version.rb +1 -1
  80. data/lib/roast/workflow/base_workflow.rb +38 -2
  81. data/lib/roast/workflow/command_executor.rb +1 -1
  82. data/lib/roast/workflow/configuration_loader.rb +1 -1
  83. data/lib/roast/workflow/error_handler.rb +1 -1
  84. data/lib/roast/workflow/step_executor_registry.rb +1 -1
  85. data/lib/roast/workflow/step_loader.rb +1 -1
  86. data/lib/roast/workflow/workflow_executor.rb +1 -1
  87. data/lib/roast.rb +4 -3
  88. data/roast.gemspec +1 -0
  89. data/sorbet/config +3 -0
  90. data/sorbet/rbi/annotations/.gitattributes +1 -0
  91. data/sorbet/rbi/annotations/activesupport.rbi +495 -0
  92. data/sorbet/rbi/annotations/faraday.rbi +17 -0
  93. data/sorbet/rbi/annotations/minitest.rbi +119 -0
  94. data/sorbet/rbi/annotations/mocha.rbi +34 -0
  95. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  96. data/sorbet/rbi/annotations/webmock.rbi +9 -0
  97. data/sorbet/rbi/gems/marcel@1.1.0.rbi +239 -0
  98. data/sorbet/rbi/gems/{rack@2.2.17.rbi → rack@2.2.19.rbi} +55 -38
  99. data/sorbet/rbi/gems/{rexml@3.4.1.rbi → rexml@3.4.2.rbi} +284 -239
  100. data/sorbet/rbi/gems/ruby_llm@1.8.2.rbi +5703 -0
  101. data/sorbet/rbi/shims/lib/roast/dsl/cog_input_context.rbi +17 -0
  102. data/sorbet/rbi/shims/lib/roast/dsl/config_context.rbi +17 -0
  103. data/sorbet/rbi/shims/lib/roast/dsl/execution_context.rbi +17 -0
  104. data/sorbet/rbi/todo.rbi +7 -0
  105. metadata +84 -6
  106. data/lib/roast/dsl/executor.rb +0 -27
  107. data/package-lock.json +0 -6
@@ -0,0 +1,17 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module Roast
5
+ module DSL
6
+ class CogInputContext
7
+ #: (Symbol) -> Roast::DSL::Cogs::Cmd::Output
8
+ def cmd(name); end
9
+
10
+ #: (Symbol) -> Roast::DSL::Cogs::Chat::Output
11
+ def chat(name); end
12
+
13
+ #: (Symbol) -> Roast::DSL::Cog::Output
14
+ def execute(name); end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module Roast
5
+ module DSL
6
+ class ConfigContext
7
+ #: (?Symbol?) {() [self: Roast::DSL::Cogs::Cmd::Config] -> void} -> void
8
+ def cmd(name = nil, &block); end
9
+
10
+ #: (?Symbol?) {() [self: Roast::DSL::Cogs::Chat::Config] -> void} -> void
11
+ def chat(name = nil, &block); end
12
+
13
+ #: (?Symbol?) {() [self: Roast::DSL::Cog::Config] -> void} -> void
14
+ def execute(name = nil, &block); end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ module Roast
5
+ module DSL
6
+ class ExecutionContext
7
+ #: (?Symbol?) {(Roast::DSL::Cogs::Cmd::Input) [self: Roast::DSL::CogInputContext] -> (String | Array[String] | nil)} -> void
8
+ def cmd(name = nil, &block); end
9
+
10
+ #: (?Symbol?) {(Roast::DSL::Cogs::Chat::Input) [self: Roast::DSL::CogInputContext] -> String?} -> void
11
+ def chat(name = nil, &block); end
12
+
13
+ #: (?Symbol?) {(Roast::DSL::Cogs::Execute::Input) [self: Roast::DSL::CogInputContext] -> (Symbol | nil)} -> void
14
+ def execute(name = nil, &block); end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ # DO NOT EDIT MANUALLY
2
+ # This is an autogenerated file for unresolved constants.
3
+ # Please instead update this file by running `bin/tapioca todo`.
4
+
5
+ # typed: false
6
+
7
+ module Mocha::Mock; end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roast-ai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.8
4
+ version: 0.4.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
@@ -121,6 +121,20 @@ dependencies:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
123
  version: '1.2'
124
+ - !ruby/object:Gem::Dependency
125
+ name: ruby_llm
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
124
138
  - !ruby/object:Gem::Dependency
125
139
  name: sqlite3
126
140
  requirement: !ruby/object:Gem::Requirement
@@ -201,7 +215,24 @@ files:
201
215
  - docs/INSTRUMENTATION.md
202
216
  - docs/ITERATION_SYNTAX.md
203
217
  - docs/VALIDATION.md
218
+ - dsl/demo/Gemfile
219
+ - dsl/demo/Gemfile.lock
220
+ - dsl/demo/cogs/local.rb
221
+ - dsl/demo/simple_external_cog.rb
222
+ - dsl/less_simple.rb
223
+ - dsl/plugin-gem-example/.gitignore
224
+ - dsl/plugin-gem-example/Gemfile
225
+ - dsl/plugin-gem-example/Gemfile.lock
226
+ - dsl/plugin-gem-example/lib/other.rb
227
+ - dsl/plugin-gem-example/lib/plugin_gem_example.rb
228
+ - dsl/plugin-gem-example/lib/simple.rb
229
+ - dsl/plugin-gem-example/lib/version.rb
230
+ - dsl/plugin-gem-example/plugin-gem-example.gemspec
231
+ - dsl/prototype.rb
232
+ - dsl/scoped_executors.rb
204
233
  - dsl/simple.rb
234
+ - dsl/simple_chat.rb
235
+ - dsl/step_communication.rb
205
236
  - examples/README.md
206
237
  - examples/available_tools_demo/README.md
207
238
  - examples/available_tools_demo/analyze_files/prompt.md
@@ -210,14 +241,49 @@ files:
210
241
  - examples/available_tools_demo/write_summary/prompt.md
211
242
  - examples/basic_prompt_workflow/workflow.md
212
243
  - examples/basic_prompt_workflow/workflow.yml
244
+ - examples/grading/README.md
245
+ - examples/grading/analyze_coverage/prompt.md
246
+ - examples/grading/calculate_final_grade.rb
247
+ - examples/grading/format_result.rb
248
+ - examples/grading/generate_grades/prompt.md
249
+ - examples/grading/generate_recommendations/output.txt
250
+ - examples/grading/generate_recommendations/prompt.md
251
+ - examples/grading/read_dependencies/prompt.md
252
+ - examples/grading/verify_mocks_and_stubs/prompt.md
253
+ - examples/grading/verify_test_helpers/prompt.md
254
+ - examples/grading/workflow.md
255
+ - examples/grading/workflow.yml
213
256
  - exe/roast
214
257
  - gemfiles/activesupport7.gemfile
215
258
  - gemfiles/activesupport8.gemfile
216
259
  - lib/roast.rb
217
260
  - lib/roast/dsl.rb
218
- - lib/roast/dsl/executor.rb
261
+ - lib/roast/dsl/cog.rb
262
+ - lib/roast/dsl/cog/config.rb
263
+ - lib/roast/dsl/cog/input.rb
264
+ - lib/roast/dsl/cog/output.rb
265
+ - lib/roast/dsl/cog/registry.rb
266
+ - lib/roast/dsl/cog/stack.rb
267
+ - lib/roast/dsl/cog/store.rb
268
+ - lib/roast/dsl/cog_input_context.rb
269
+ - lib/roast/dsl/cog_input_manager.rb
270
+ - lib/roast/dsl/cogs/chat.rb
271
+ - lib/roast/dsl/cogs/cmd.rb
272
+ - lib/roast/dsl/cogs/execute.rb
273
+ - lib/roast/dsl/cogs/graph.rb
274
+ - lib/roast/dsl/config_context.rb
275
+ - lib/roast/dsl/config_manager.rb
276
+ - lib/roast/dsl/execution_context.rb
277
+ - lib/roast/dsl/execution_manager.rb
278
+ - lib/roast/dsl/workflow.rb
279
+ - lib/roast/error.rb
219
280
  - lib/roast/errors.rb
220
281
  - lib/roast/factories/api_provider_factory.rb
282
+ - lib/roast/graph.rb
283
+ - lib/roast/graph/edge.rb
284
+ - lib/roast/graph/node.rb
285
+ - lib/roast/graph/quantum_edge.rb
286
+ - lib/roast/graph/threaded_exec.rb
221
287
  - lib/roast/helpers/cmd_runner.rb
222
288
  - lib/roast/helpers/function_caching_interceptor.rb
223
289
  - lib/roast/helpers/logger.rb
@@ -324,13 +390,19 @@ files:
324
390
  - lib/roast/workflow/workflow_initializer.rb
325
391
  - lib/roast/workflow/workflow_runner.rb
326
392
  - lib/roast/workflow_diagram_generator.rb
327
- - package-lock.json
328
393
  - roast.gemspec
329
394
  - rubocop/cop/roast.rb
330
395
  - rubocop/cop/roast/use_cmd_runner.rb
331
396
  - schema/workflow.json
332
397
  - shipit.rubygems.yml
333
398
  - sorbet/config
399
+ - sorbet/rbi/annotations/.gitattributes
400
+ - sorbet/rbi/annotations/activesupport.rbi
401
+ - sorbet/rbi/annotations/faraday.rbi
402
+ - sorbet/rbi/annotations/minitest.rbi
403
+ - sorbet/rbi/annotations/mocha.rbi
404
+ - sorbet/rbi/annotations/rainbow.rbi
405
+ - sorbet/rbi/annotations/webmock.rbi
334
406
  - sorbet/rbi/dsl/.gitattributes
335
407
  - sorbet/rbi/dsl/active_support/callbacks.rbi
336
408
  - sorbet/rbi/gems/.gitattributes
@@ -380,6 +452,7 @@ files:
380
452
  - sorbet/rbi/gems/listen@3.9.0.rbi
381
453
  - sorbet/rbi/gems/logger@1.7.0.rbi
382
454
  - sorbet/rbi/gems/lumberjack@1.2.10.rbi
455
+ - sorbet/rbi/gems/marcel@1.1.0.rbi
383
456
  - sorbet/rbi/gems/method_source@1.1.0.rbi
384
457
  - sorbet/rbi/gems/mime-types-data@3.2025.0617.rbi
385
458
  - sorbet/rbi/gems/mime-types@3.7.0.rbi
@@ -399,7 +472,7 @@ files:
399
472
  - sorbet/rbi/gems/pry@0.15.2.rbi
400
473
  - sorbet/rbi/gems/public_suffix@6.0.2.rbi
401
474
  - sorbet/rbi/gems/racc@1.8.1.rbi
402
- - sorbet/rbi/gems/rack@2.2.17.rbi
475
+ - sorbet/rbi/gems/rack@2.2.19.rbi
403
476
  - sorbet/rbi/gems/rainbow@3.1.1.rbi
404
477
  - sorbet/rbi/gems/raix@1.0.2.rbi
405
478
  - sorbet/rbi/gems/rake@13.3.0.rbi
@@ -408,7 +481,7 @@ files:
408
481
  - sorbet/rbi/gems/rbi@0.3.6.rbi
409
482
  - sorbet/rbi/gems/rbs@3.9.4.rbi
410
483
  - sorbet/rbi/gems/regexp_parser@2.10.0.rbi
411
- - sorbet/rbi/gems/rexml@3.4.1.rbi
484
+ - sorbet/rbi/gems/rexml@3.4.2.rbi
412
485
  - sorbet/rbi/gems/rubocop-ast@1.45.1.rbi
413
486
  - sorbet/rbi/gems/rubocop-shopify@2.17.1.rbi
414
487
  - sorbet/rbi/gems/rubocop-sorbet@0.10.5.rbi
@@ -417,6 +490,7 @@ files:
417
490
  - sorbet/rbi/gems/ruby-openai@8.1.0.rbi
418
491
  - sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi
419
492
  - sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi
493
+ - sorbet/rbi/gems/ruby_llm@1.8.2.rbi
420
494
  - sorbet/rbi/gems/securerandom@0.4.1.rbi
421
495
  - sorbet/rbi/gems/shellany@0.0.1.rbi
422
496
  - sorbet/rbi/gems/simplecov-html@0.13.2.rbi
@@ -435,6 +509,10 @@ files:
435
509
  - sorbet/rbi/gems/yard-sorbet@0.9.0.rbi
436
510
  - sorbet/rbi/gems/yard@0.9.37.rbi
437
511
  - sorbet/rbi/gems/zeitwerk@2.7.3.rbi
512
+ - sorbet/rbi/shims/lib/roast/dsl/cog_input_context.rbi
513
+ - sorbet/rbi/shims/lib/roast/dsl/config_context.rbi
514
+ - sorbet/rbi/shims/lib/roast/dsl/execution_context.rbi
515
+ - sorbet/rbi/todo.rbi
438
516
  - sorbet/tapioca/config.yml
439
517
  - sorbet/tapioca/require.rb
440
518
  homepage: https://github.com/Shopify/roast
@@ -459,7 +537,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
459
537
  - !ruby/object:Gem::Version
460
538
  version: '0'
461
539
  requirements: []
462
- rubygems_version: 3.7.1
540
+ rubygems_version: 3.7.2
463
541
  specification_version: 4
464
542
  summary: A framework for executing structured AI workflows in Ruby
465
543
  test_files: []
@@ -1,27 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- module Roast
5
- module DSL
6
- class Executor
7
- class << self
8
- def from_file(workflow_path)
9
- execute(File.read(workflow_path))
10
- end
11
-
12
- private
13
-
14
- def execute(input)
15
- new.instance_eval(input)
16
- end
17
- end
18
-
19
- # Define methods to be used in workflows below.
20
-
21
- def shell(command_string)
22
- output, _status = Roast::Helpers::CmdRunner.capture2e(command_string)
23
- puts output
24
- end
25
- end
26
- end
27
- end
data/package-lock.json DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "name": "roast",
3
- "lockfileVersion": 3,
4
- "requires": true,
5
- "packages": {}
6
- }