roast-ai 1.0.2 → 1.2.0

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 (125) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/commands/docs/write-comments.md +1 -1
  3. data/.rubocop.yml +12 -1
  4. data/Gemfile +2 -2
  5. data/Gemfile.lock +149 -34
  6. data/README.md +56 -3
  7. data/examples/agent_with_multiple_prompts.rb +27 -0
  8. data/examples/custom_logging.rb +4 -2
  9. data/examples/demo/Gemfile.lock +49 -15
  10. data/examples/plugin-gem-example/Gemfile.lock +19 -15
  11. data/examples/simple_chat.rb +1 -1
  12. data/examples/simple_pi_agent.rb +18 -0
  13. data/internal/rubocop/cop/roast/no_test_class_nesting.rb +126 -0
  14. data/internal/rubocop/rubocop-roast.yml +6 -0
  15. data/internal/workflows/maintenance/branch_docs_impact.rb +97 -0
  16. data/internal/workflows/maintenance/deprecated_models_docs_updater.rb +78 -0
  17. data/lib/roast/cog/config.rb +1 -1
  18. data/lib/roast/cog/output.rb +2 -1
  19. data/lib/roast/cog/registry.rb +3 -3
  20. data/lib/roast/cog_input_manager.rb +28 -7
  21. data/lib/roast/cogs/agent/config.rb +2 -2
  22. data/lib/roast/cogs/agent/input.rb +20 -22
  23. data/lib/roast/cogs/agent/providers/claude/claude_invocation.rb +13 -5
  24. data/lib/roast/cogs/agent/providers/claude/messages/result_message.rb +1 -1
  25. data/lib/roast/cogs/agent/providers/claude/tool_result.rb +344 -4
  26. data/lib/roast/cogs/agent/providers/claude/tool_use.rb +356 -1
  27. data/lib/roast/cogs/agent/providers/claude.rb +16 -3
  28. data/lib/roast/cogs/agent/providers/pi/messages/tool_call_message.rb +60 -0
  29. data/lib/roast/cogs/agent/providers/pi/messages/tool_result_message.rb +57 -0
  30. data/lib/roast/cogs/agent/providers/pi/pi_invocation.rb +352 -0
  31. data/lib/roast/cogs/agent/providers/pi.rb +41 -0
  32. data/lib/roast/cogs/agent/stats.rb +29 -0
  33. data/lib/roast/cogs/agent/usage.rb +22 -0
  34. data/lib/roast/cogs/agent.rb +5 -6
  35. data/lib/roast/cogs/chat/config.rb +28 -2
  36. data/lib/roast/cogs/chat.rb +82 -10
  37. data/lib/roast/event.rb +1 -0
  38. data/lib/roast/event_monitor.rb +35 -3
  39. data/lib/roast/log.rb +21 -0
  40. data/lib/roast/log_formatter.rb +9 -7
  41. data/lib/roast/version.rb +1 -1
  42. data/lib/roast.rb +1 -3
  43. data/roast-ai.gemspec +2 -1
  44. data/sorbet/rbi/gems/activesupport@8.0.2.rbi +549 -383
  45. data/sorbet/rbi/gems/addressable@2.8.7.rbi +46 -44
  46. data/sorbet/rbi/gems/ast@2.4.3.rbi +7 -6
  47. data/sorbet/rbi/gems/async@2.34.0.rbi +21 -3
  48. data/sorbet/rbi/gems/benchmark@0.4.1.rbi +7 -7
  49. data/sorbet/rbi/gems/bigdecimal@3.2.2.rbi +198 -1
  50. data/sorbet/rbi/gems/concurrent-ruby@1.3.5.rbi +405 -328
  51. data/sorbet/rbi/gems/console@1.34.2.rbi +2 -2
  52. data/sorbet/rbi/gems/docile@1.4.1.rbi +30 -30
  53. data/sorbet/rbi/gems/drb@2.2.3.rbi +25 -25
  54. data/sorbet/rbi/gems/erubi@1.13.1.rbi +2 -0
  55. data/sorbet/rbi/gems/faraday-net_http@3.4.2.rbi +2 -77
  56. data/sorbet/rbi/gems/faraday-retry@2.3.2.rbi +2 -57
  57. data/sorbet/rbi/gems/faraday@2.14.1.rbi +382 -75
  58. data/sorbet/rbi/gems/guard-compat@1.2.1.rbi +1 -110
  59. data/sorbet/rbi/gems/guard-minitest@2.4.6.rbi +0 -139
  60. data/sorbet/rbi/gems/guard@2.19.1.rbi +38 -38
  61. data/sorbet/rbi/gems/hashdiff@1.2.0.rbi +3 -3
  62. data/sorbet/rbi/gems/i18n@1.14.7.rbi +53 -29
  63. data/sorbet/rbi/gems/io-event@1.14.0.rbi +67 -10
  64. data/sorbet/rbi/gems/json@2.18.1.rbi +227 -5
  65. data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +83 -0
  66. data/sorbet/rbi/gems/listen@3.9.0.rbi +7 -7
  67. data/sorbet/rbi/gems/logger@1.7.0.rbi +3 -3
  68. data/sorbet/rbi/gems/lumberjack@1.2.10.rbi +21 -21
  69. data/sorbet/rbi/gems/marcel@1.1.0.rbi +1 -1
  70. data/sorbet/rbi/gems/minitest-rg@5.3.0.rbi +0 -96
  71. data/sorbet/rbi/gems/minitest@5.25.5.rbi +1 -16
  72. data/sorbet/rbi/gems/net-http@0.9.1.rbi +27 -19
  73. data/sorbet/rbi/gems/netrc@0.11.0.rbi +18 -0
  74. data/sorbet/rbi/gems/notiffany@0.1.3.rbi +20 -20
  75. data/sorbet/rbi/gems/ostruct@0.6.2.rbi +149 -15
  76. data/sorbet/rbi/gems/parser@3.3.8.0.rbi +141 -139
  77. data/sorbet/rbi/gems/prism@1.4.0.rbi +922 -864
  78. data/sorbet/rbi/gems/public_suffix@6.0.2.rbi +56 -35
  79. data/sorbet/rbi/gems/racc@1.8.1.rbi +10 -2
  80. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +12 -12
  81. data/sorbet/rbi/gems/rake@13.3.0.rbi +219 -318
  82. data/sorbet/rbi/gems/{rbi@0.3.6.rbi → rbi@0.3.9.rbi} +612 -2267
  83. data/sorbet/rbi/gems/{rbs@3.9.4.rbi → rbs@4.0.0.dev.5.rbi} +2013 -680
  84. data/sorbet/rbi/gems/regexp_parser@2.10.0.rbi +151 -113
  85. data/sorbet/rbi/gems/require-hooks@0.2.3.rbi +110 -0
  86. data/sorbet/rbi/gems/rexml@3.4.2.rbi +24 -51
  87. data/sorbet/rbi/gems/rubocop-ast@1.45.1.rbi +506 -815
  88. data/sorbet/rbi/gems/rubocop-sorbet@0.10.5.rbi +16 -16
  89. data/sorbet/rbi/gems/rubocop@1.77.0.rbi +2692 -2327
  90. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +8 -8
  91. data/sorbet/rbi/gems/ruby_llm@1.8.2.rbi +38 -23
  92. data/sorbet/rbi/gems/securerandom@0.4.1.rbi +1 -1
  93. data/sorbet/rbi/gems/simplecov-html@0.13.2.rbi +2 -131
  94. data/sorbet/rbi/gems/simplecov@0.22.0.rbi +28 -127
  95. data/sorbet/rbi/gems/{spoom@1.6.3.rbi → spoom@1.7.11.rbi} +1139 -2246
  96. data/sorbet/rbi/gems/sqlite3@2.9.0.rbi +91 -1
  97. data/sorbet/rbi/gems/{tapioca@0.16.11.rbi → tapioca@0.17.10.rbi} +721 -835
  98. data/sorbet/rbi/gems/thor@1.4.0.rbi +53 -53
  99. data/sorbet/rbi/gems/tsort@0.2.0.rbi +393 -0
  100. data/sorbet/rbi/gems/type_toolkit@0.0.5.rbi +49 -0
  101. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +144 -143
  102. data/sorbet/rbi/gems/uri@1.1.1.rbi +7 -7
  103. data/sorbet/rbi/gems/vcr@6.3.1.rbi +53 -36
  104. data/sorbet/rbi/gems/webmock@3.25.1.rbi +38 -13
  105. data/sorbet/rbi/gems/zeitwerk@2.7.3.rbi +39 -272
  106. data/sorbet/rbi/shims/lib/roast/execution_context.rbi +3 -3
  107. data/tutorial/01_your_first_workflow/README.md +9 -5
  108. data/tutorial/01_your_first_workflow/configured_chat.rb +1 -1
  109. data/tutorial/02_chaining_cogs/README.md +2 -2
  110. data/tutorial/02_chaining_cogs/code_review.rb +1 -1
  111. data/tutorial/02_chaining_cogs/session_resumption.rb +1 -1
  112. data/tutorial/03_targets_and_params/README.md +1 -1
  113. data/tutorial/04_configuration_options/README.md +2 -2
  114. data/tutorial/08_iterative_workflows/README.md +1 -1
  115. data/tutorial/README.md +1 -1
  116. metadata +39 -17
  117. data/docs/AGENT_STEPS.md +0 -288
  118. data/docs/INSTRUMENTATION.md +0 -243
  119. data/docs/ITERATION_SYNTAX.md +0 -147
  120. data/docs/VALIDATION.md +0 -178
  121. data/lib/roast/nil_assertions.rb +0 -23
  122. /data/internal/documentation/{architectural-notes.md → comments/architectural-notes.md} +0 -0
  123. /data/internal/documentation/{doc-comments-external.md → comments/doc-comments-external.md} +0 -0
  124. /data/internal/documentation/{doc-comments-internal.md → comments/doc-comments-internal.md} +0 -0
  125. /data/internal/documentation/{doc-comments.md → comments/doc-comments.md} +0 -0
@@ -33,7 +33,7 @@ class RuboCop::Cop::Sorbet::AllowIncompatibleOverride < ::RuboCop::Cop::Base
33
33
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/signatures/allow_incompatible_override.rb#55
34
34
  def on_block(node); end
35
35
 
36
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/signatures/allow_incompatible_override.rb#55
36
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/signatures/allow_incompatible_override.rb#72
37
37
  def on_numblock(node); end
38
38
 
39
39
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/signatures/allow_incompatible_override.rb#49
@@ -169,7 +169,7 @@ class RuboCop::Cop::Sorbet::BlockMethodDefinition < ::RuboCop::Cop::Base
169
169
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/block_method_definition.rb#80
170
170
  def on_block(node); end
171
171
 
172
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/block_method_definition.rb#80
172
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/block_method_definition.rb#94
173
173
  def on_numblock(node); end
174
174
 
175
175
  private
@@ -432,7 +432,7 @@ RuboCop::Cop::Sorbet::CheckedTrueInSignature::MESSAGE = T.let(T.unsafe(nil), Str
432
432
  #
433
433
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/constants_from_strings.rb#36
434
434
  class RuboCop::Cop::Sorbet::ConstantsFromStrings < ::RuboCop::Cop::Base
435
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/constants_from_strings.rb#47
435
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/constants_from_strings.rb#50
436
436
  def on_csend(node); end
437
437
 
438
438
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/constants_from_strings.rb#47
@@ -990,7 +990,7 @@ class RuboCop::Cop::Sorbet::ForbidMixesInClassMethods < ::RuboCop::Cop::Base
990
990
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_mixes_in_class_methods.rb#38
991
991
  def mixes_in_class_methods?(param0 = T.unsafe(nil)); end
992
992
 
993
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_mixes_in_class_methods.rb#42
993
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_mixes_in_class_methods.rb#45
994
994
  def on_csend(node); end
995
995
 
996
996
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_mixes_in_class_methods.rb#42
@@ -1157,7 +1157,7 @@ RuboCop::Cop::Sorbet::ForbidSuperclassConstLiteral::MSG = T.let(T.unsafe(nil), S
1157
1157
  #
1158
1158
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_absurd.rb#17
1159
1159
  class RuboCop::Cop::Sorbet::ForbidTAbsurd < ::RuboCop::Cop::Base
1160
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_absurd.rb#24
1160
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_absurd.rb#27
1161
1161
  def on_csend(node); end
1162
1162
 
1163
1163
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_absurd.rb#24
@@ -1185,7 +1185,7 @@ RuboCop::Cop::Sorbet::ForbidTAbsurd::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Arr
1185
1185
  #
1186
1186
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_bind.rb#17
1187
1187
  class RuboCop::Cop::Sorbet::ForbidTBind < ::RuboCop::Cop::Base
1188
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_bind.rb#24
1188
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_bind.rb#27
1189
1189
  def on_csend(node); end
1190
1190
 
1191
1191
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_bind.rb#24
@@ -1213,7 +1213,7 @@ RuboCop::Cop::Sorbet::ForbidTBind::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array
1213
1213
  #
1214
1214
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_cast.rb#17
1215
1215
  class RuboCop::Cop::Sorbet::ForbidTCast < ::RuboCop::Cop::Base
1216
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_cast.rb#24
1216
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_cast.rb#27
1217
1217
  def on_csend(node); end
1218
1218
 
1219
1219
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_cast.rb#24
@@ -1272,7 +1272,7 @@ RuboCop::Cop::Sorbet::ForbidTEnum::MSG = T.let(T.unsafe(nil), String)
1272
1272
  #
1273
1273
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_let.rb#17
1274
1274
  class RuboCop::Cop::Sorbet::ForbidTLet < ::RuboCop::Cop::Base
1275
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_let.rb#24
1275
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_let.rb#27
1276
1276
  def on_csend(node); end
1277
1277
 
1278
1278
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_let.rb#24
@@ -1300,7 +1300,7 @@ RuboCop::Cop::Sorbet::ForbidTLet::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
1300
1300
  #
1301
1301
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_must.rb#17
1302
1302
  class RuboCop::Cop::Sorbet::ForbidTMust < ::RuboCop::Cop::Base
1303
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_must.rb#24
1303
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_must.rb#27
1304
1304
  def on_csend(node); end
1305
1305
 
1306
1306
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_must.rb#24
@@ -1490,7 +1490,7 @@ class RuboCop::Cop::Sorbet::ForbidTTypeAlias < ::RuboCop::Cop::Base
1490
1490
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_type_alias.rb#23
1491
1491
  def on_block(node); end
1492
1492
 
1493
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_type_alias.rb#23
1493
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_type_alias.rb#26
1494
1494
  def on_numblock(node); end
1495
1495
 
1496
1496
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_type_alias.rb#21
@@ -1512,7 +1512,7 @@ RuboCop::Cop::Sorbet::ForbidTTypeAlias::MSG = T.let(T.unsafe(nil), String)
1512
1512
  #
1513
1513
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_unsafe.rb#17
1514
1514
  class RuboCop::Cop::Sorbet::ForbidTUnsafe < ::RuboCop::Cop::Base
1515
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_unsafe.rb#24
1515
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_unsafe.rb#27
1516
1516
  def on_csend(node); end
1517
1517
 
1518
1518
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_t_unsafe.rb#24
@@ -1577,7 +1577,7 @@ class RuboCop::Cop::Sorbet::ForbidTypeAliasedShapes < ::RuboCop::Cop::Base
1577
1577
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_type_aliased_shapes.rb#36
1578
1578
  def on_block(node); end
1579
1579
 
1580
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_type_aliased_shapes.rb#36
1580
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_type_aliased_shapes.rb#40
1581
1581
  def on_numblock(node); end
1582
1582
 
1583
1583
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/forbid_type_aliased_shapes.rb#28
@@ -1706,7 +1706,7 @@ class RuboCop::Cop::Sorbet::ImplicitConversionMethod < ::RuboCop::Cop::Base
1706
1706
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/implicit_conversion_method.rb#42
1707
1707
  def on_def(node); end
1708
1708
 
1709
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/implicit_conversion_method.rb#42
1709
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/implicit_conversion_method.rb#48
1710
1710
  def on_defs(node); end
1711
1711
 
1712
1712
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/implicit_conversion_method.rb#50
@@ -1942,7 +1942,7 @@ RuboCop::Cop::Sorbet::Refinement::RESTRICT_ON_SEND = T.let(T.unsafe(nil), Array)
1942
1942
  class RuboCop::Cop::Sorbet::SelectByIsA < ::RuboCop::Cop::Base
1943
1943
  extend ::RuboCop::Cop::AutoCorrector
1944
1944
 
1945
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/select_by_is_a.rb#43
1945
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/select_by_is_a.rb#58
1946
1946
  def on_csend(node); end
1947
1947
 
1948
1948
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/select_by_is_a.rb#43
@@ -2014,7 +2014,7 @@ module RuboCop::Cop::Sorbet::SignatureHelp
2014
2014
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/mixin/signature_help.rb#42
2015
2015
  def on_block(node); end
2016
2016
 
2017
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/mixin/signature_help.rb#42
2017
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/mixin/signature_help.rb#46
2018
2018
  def on_numblock(node); end
2019
2019
 
2020
2020
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/mixin/signature_help.rb#48
@@ -2046,7 +2046,7 @@ end
2046
2046
  class RuboCop::Cop::Sorbet::SingleLineRbiClassModuleDefinitions < ::RuboCop::Cop::Base
2047
2047
  extend ::RuboCop::Cop::AutoCorrector
2048
2048
 
2049
- # source://rubocop-sorbet//lib/rubocop/cop/sorbet/rbi/single_line_rbi_class_module_definitions.rb#22
2049
+ # source://rubocop-sorbet//lib/rubocop/cop/sorbet/rbi/single_line_rbi_class_module_definitions.rb#30
2050
2050
  def on_class(node); end
2051
2051
 
2052
2052
  # source://rubocop-sorbet//lib/rubocop/cop/sorbet/rbi/single_line_rbi_class_module_definitions.rb#22