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.
Files changed (335) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/commands/docs/write-comments.md +1 -1
  3. data/.claude/commands/write-tests.md +126 -0
  4. data/.github/workflows/ci.yaml +3 -15
  5. data/.rubocop.yml +0 -10
  6. data/Gemfile.lock +9 -9
  7. data/README.md +6 -7
  8. data/Rakefile +8 -30
  9. data/dev.yml +3 -3
  10. data/{dsl → examples}/agent_sessions.rb +1 -1
  11. data/{dsl → examples}/async_cogs.rb +1 -1
  12. data/{dsl → examples}/async_cogs_complex.rb +1 -1
  13. data/{dsl → examples}/call.rb +1 -1
  14. data/{dsl → examples}/collect_from.rb +2 -2
  15. data/{dsl → examples}/demo/Gemfile +2 -0
  16. data/{dsl → examples}/demo/Gemfile.lock +4 -3
  17. data/{dsl → examples}/demo/cogs/local.rb +2 -2
  18. data/{dsl → examples}/demo/simple_external_cog.rb +1 -1
  19. data/{dsl → examples}/json_output.rb +1 -1
  20. data/{dsl → examples}/map.rb +1 -1
  21. data/{dsl → examples}/map_reduce.rb +1 -1
  22. data/{dsl → examples}/map_with_index.rb +1 -1
  23. data/{dsl → examples}/next_break.rb +1 -1
  24. data/{dsl → examples}/next_break_parallel.rb +1 -1
  25. data/{dsl → examples}/outputs.rb +1 -1
  26. data/{dsl → examples}/outputs_bang.rb +1 -1
  27. data/{dsl → examples}/parallel_map.rb +1 -1
  28. data/{dsl → examples}/plugin-gem-example/Gemfile +2 -0
  29. data/{dsl → examples}/plugin-gem-example/Gemfile.lock +60 -22
  30. data/{dsl → examples}/plugin-gem-example/lib/other.rb +2 -2
  31. data/{dsl → examples}/plugin-gem-example/lib/simple.rb +2 -2
  32. data/{dsl → examples}/plugin-gem-example/plugin-gem-example.gemspec +1 -1
  33. data/{dsl → examples}/prototype.rb +1 -1
  34. data/{dsl → examples}/repeat_loop_results.rb +1 -1
  35. data/{dsl → examples}/ruby_cog.rb +1 -1
  36. data/{dsl → examples}/simple_agent.rb +1 -1
  37. data/{dsl → examples}/simple_chat.rb +4 -4
  38. data/{dsl → examples}/simple_repeat.rb +1 -1
  39. data/{dsl → examples}/skip.rb +1 -1
  40. data/{dsl → examples}/step_communication.rb +1 -1
  41. data/{dsl → examples}/targets_and_params.rb +5 -6
  42. data/{dsl → examples}/temporary_directory.rb +1 -1
  43. data/{dsl → examples}/working_directory.rb +1 -1
  44. data/internal/documentation/doc-comments-external.md +6 -6
  45. data/internal/documentation/doc-comments-internal.md +2 -2
  46. data/internal/documentation/doc-comments.md +1 -1
  47. data/lib/roast/cog/config.rb +307 -0
  48. data/lib/roast/cog/input.rb +71 -0
  49. data/lib/roast/cog/output.rb +311 -0
  50. data/lib/roast/cog/registry.rb +69 -0
  51. data/lib/roast/cog/stack.rb +20 -0
  52. data/lib/roast/cog/store.rb +27 -0
  53. data/lib/roast/cog.rb +145 -0
  54. data/lib/roast/cog_input_context.rb +34 -0
  55. data/lib/roast/cog_input_manager.rb +225 -0
  56. data/lib/roast/cogs/agent/config.rb +507 -0
  57. data/lib/roast/cogs/agent/input.rb +79 -0
  58. data/lib/roast/cogs/agent/output.rb +57 -0
  59. data/lib/roast/cogs/agent/provider.rb +49 -0
  60. data/lib/roast/cogs/agent/providers/claude/claude_invocation.rb +185 -0
  61. data/lib/roast/cogs/agent/providers/claude/message.rb +71 -0
  62. data/lib/roast/cogs/agent/providers/claude/messages/assistant_message.rb +34 -0
  63. data/lib/roast/cogs/agent/providers/claude/messages/result_message.rb +59 -0
  64. data/lib/roast/cogs/agent/providers/claude/messages/system_message.rb +50 -0
  65. data/lib/roast/cogs/agent/providers/claude/messages/text_message.rb +34 -0
  66. data/lib/roast/cogs/agent/providers/claude/messages/tool_result_message.rb +45 -0
  67. data/lib/roast/cogs/agent/providers/claude/messages/tool_use_message.rb +44 -0
  68. data/lib/roast/cogs/agent/providers/claude/messages/unknown_message.rb +25 -0
  69. data/lib/roast/cogs/agent/providers/claude/messages/user_message.rb +35 -0
  70. data/lib/roast/cogs/agent/providers/claude/tool_result.rb +49 -0
  71. data/lib/roast/cogs/agent/providers/claude/tool_use.rb +46 -0
  72. data/lib/roast/cogs/agent/providers/claude.rb +29 -0
  73. data/lib/roast/cogs/agent/stats.rb +90 -0
  74. data/lib/roast/cogs/agent/usage.rb +60 -0
  75. data/lib/roast/cogs/agent.rb +73 -0
  76. data/lib/roast/cogs/chat/config.rb +451 -0
  77. data/lib/roast/cogs/chat/input.rb +90 -0
  78. data/lib/roast/cogs/chat/output.rb +62 -0
  79. data/lib/roast/cogs/chat/session.rb +66 -0
  80. data/lib/roast/cogs/chat.rb +79 -0
  81. data/lib/roast/cogs/cmd.rb +320 -0
  82. data/lib/roast/cogs/ruby.rb +169 -0
  83. data/lib/roast/command_runner.rb +189 -0
  84. data/lib/roast/config_context.rb +7 -0
  85. data/lib/roast/config_manager.rb +141 -0
  86. data/lib/roast/control_flow.rb +39 -0
  87. data/lib/roast/execution_context.rb +7 -0
  88. data/lib/roast/execution_manager.rb +265 -0
  89. data/lib/roast/log.rb +77 -0
  90. data/lib/roast/system_cog/params.rb +30 -0
  91. data/lib/roast/system_cog.rb +34 -0
  92. data/lib/roast/system_cogs/call.rb +161 -0
  93. data/lib/roast/system_cogs/map.rb +452 -0
  94. data/lib/roast/system_cogs/repeat.rb +240 -0
  95. data/lib/roast/version.rb +1 -1
  96. data/lib/roast/workflow.rb +116 -1
  97. data/lib/roast/workflow_context.rb +22 -0
  98. data/lib/roast/workflow_params.rb +22 -0
  99. data/lib/roast.rb +22 -310
  100. data/roast-ai.gemspec +3 -1
  101. data/sorbet/config +1 -1
  102. data/sorbet/rbi/shims/lib/roast/cog_input_context.rbi +1198 -0
  103. data/sorbet/rbi/shims/lib/roast/config_context.rbi +323 -0
  104. data/sorbet/rbi/shims/lib/roast/execution_context.rbi +496 -0
  105. data/{dsl/tutorial → tutorial}/01_your_first_workflow/README.md +3 -3
  106. data/{dsl/tutorial → tutorial}/01_your_first_workflow/configured_chat.rb +1 -1
  107. data/{dsl/tutorial → tutorial}/01_your_first_workflow/hello.rb +1 -1
  108. data/{dsl/tutorial → tutorial}/02_chaining_cogs/README.md +3 -3
  109. data/{dsl/tutorial → tutorial}/02_chaining_cogs/code_review.rb +1 -1
  110. data/{dsl/tutorial → tutorial}/02_chaining_cogs/session_resumption.rb +1 -1
  111. data/{dsl/tutorial → tutorial}/02_chaining_cogs/simple_chain.rb +1 -1
  112. data/{dsl/tutorial → tutorial}/03_targets_and_params/README.md +13 -13
  113. data/{dsl/tutorial → tutorial}/03_targets_and_params/multiple_targets.rb +4 -4
  114. data/{dsl/tutorial → tutorial}/03_targets_and_params/single_target.rb +2 -2
  115. data/{dsl/tutorial → tutorial}/04_configuration_options/README.md +2 -2
  116. data/{dsl/tutorial → tutorial}/04_configuration_options/control_display_and_temperature.rb +1 -1
  117. data/{dsl/tutorial → tutorial}/04_configuration_options/simple_config.rb +1 -1
  118. data/{dsl/tutorial → tutorial}/05_control_flow/README.md +2 -2
  119. data/{dsl/tutorial → tutorial}/05_control_flow/conditional_execution.rb +1 -1
  120. data/{dsl/tutorial → tutorial}/05_control_flow/handling_failures.rb +1 -1
  121. data/{dsl/tutorial → tutorial}/06_reusable_scopes/README.md +3 -3
  122. data/{dsl/tutorial → tutorial}/06_reusable_scopes/accessing_scope_outputs.rb +1 -1
  123. data/{dsl/tutorial → tutorial}/06_reusable_scopes/basic_scope.rb +1 -1
  124. data/{dsl/tutorial → tutorial}/06_reusable_scopes/parameterized_scope.rb +1 -1
  125. data/{dsl/tutorial → tutorial}/07_processing_collections/README.md +2 -2
  126. data/{dsl/tutorial → tutorial}/07_processing_collections/basic_map.rb +1 -1
  127. data/{dsl/tutorial → tutorial}/07_processing_collections/parallel_map.rb +1 -1
  128. data/{dsl/tutorial → tutorial}/08_iterative_workflows/README.md +2 -2
  129. data/{dsl/tutorial → tutorial}/08_iterative_workflows/basic_repeat.rb +1 -1
  130. data/{dsl/tutorial → tutorial}/08_iterative_workflows/conditional_break.rb +1 -1
  131. data/{dsl/tutorial → tutorial}/09_async_cogs/README.md +3 -3
  132. data/{dsl/tutorial → tutorial}/09_async_cogs/basic_async.rb +1 -1
  133. data/{dsl/tutorial → tutorial}/README.md +2 -2
  134. metadata +130 -271
  135. data/.claude/settings.json +0 -12
  136. data/CLAUDE.md +0 -267
  137. data/CLAUDE_NOTES.md +0 -68
  138. data/README_LEGACY.md +0 -1464
  139. data/claude-swarm.yml +0 -210
  140. data/examples/README.md +0 -9
  141. data/examples/available_tools_demo/README.md +0 -42
  142. data/examples/available_tools_demo/analyze_files/prompt.md +0 -6
  143. data/examples/available_tools_demo/explore_directory/prompt.md +0 -6
  144. data/examples/available_tools_demo/workflow.yml +0 -32
  145. data/examples/available_tools_demo/write_summary/prompt.md +0 -6
  146. data/examples/basic_prompt_workflow/workflow.md +0 -1
  147. data/examples/basic_prompt_workflow/workflow.yml +0 -14
  148. data/examples/grading/README.md +0 -46
  149. data/examples/grading/analyze_coverage/prompt.md +0 -52
  150. data/examples/grading/calculate_final_grade.rb +0 -64
  151. data/examples/grading/format_result.rb +0 -61
  152. data/examples/grading/generate_grades/prompt.md +0 -105
  153. data/examples/grading/generate_recommendations/output.txt +0 -17
  154. data/examples/grading/generate_recommendations/prompt.md +0 -60
  155. data/examples/grading/read_dependencies/prompt.md +0 -15
  156. data/examples/grading/verify_mocks_and_stubs/prompt.md +0 -12
  157. data/examples/grading/verify_test_helpers/prompt.md +0 -53
  158. data/examples/grading/workflow.md +0 -5
  159. data/examples/grading/workflow.yml +0 -28
  160. data/gemfiles/activesupport7.gemfile +0 -4
  161. data/gemfiles/activesupport8.gemfile +0 -4
  162. data/lib/roast/dsl/cog/config.rb +0 -309
  163. data/lib/roast/dsl/cog/input.rb +0 -73
  164. data/lib/roast/dsl/cog/output.rb +0 -313
  165. data/lib/roast/dsl/cog/registry.rb +0 -71
  166. data/lib/roast/dsl/cog/stack.rb +0 -22
  167. data/lib/roast/dsl/cog/store.rb +0 -29
  168. data/lib/roast/dsl/cog.rb +0 -147
  169. data/lib/roast/dsl/cog_input_context.rb +0 -44
  170. data/lib/roast/dsl/cog_input_manager.rb +0 -156
  171. data/lib/roast/dsl/cogs/agent/config.rb +0 -509
  172. data/lib/roast/dsl/cogs/agent/input.rb +0 -81
  173. data/lib/roast/dsl/cogs/agent/output.rb +0 -59
  174. data/lib/roast/dsl/cogs/agent/provider.rb +0 -51
  175. data/lib/roast/dsl/cogs/agent/providers/claude/claude_invocation.rb +0 -187
  176. data/lib/roast/dsl/cogs/agent/providers/claude/message.rb +0 -73
  177. data/lib/roast/dsl/cogs/agent/providers/claude/messages/assistant_message.rb +0 -36
  178. data/lib/roast/dsl/cogs/agent/providers/claude/messages/result_message.rb +0 -61
  179. data/lib/roast/dsl/cogs/agent/providers/claude/messages/system_message.rb +0 -47
  180. data/lib/roast/dsl/cogs/agent/providers/claude/messages/text_message.rb +0 -36
  181. data/lib/roast/dsl/cogs/agent/providers/claude/messages/tool_result_message.rb +0 -47
  182. data/lib/roast/dsl/cogs/agent/providers/claude/messages/tool_use_message.rb +0 -46
  183. data/lib/roast/dsl/cogs/agent/providers/claude/messages/unknown_message.rb +0 -27
  184. data/lib/roast/dsl/cogs/agent/providers/claude/messages/user_message.rb +0 -37
  185. data/lib/roast/dsl/cogs/agent/providers/claude/tool_result.rb +0 -51
  186. data/lib/roast/dsl/cogs/agent/providers/claude/tool_use.rb +0 -48
  187. data/lib/roast/dsl/cogs/agent/providers/claude.rb +0 -31
  188. data/lib/roast/dsl/cogs/agent/stats.rb +0 -92
  189. data/lib/roast/dsl/cogs/agent/usage.rb +0 -62
  190. data/lib/roast/dsl/cogs/agent.rb +0 -75
  191. data/lib/roast/dsl/cogs/chat/config.rb +0 -453
  192. data/lib/roast/dsl/cogs/chat/input.rb +0 -92
  193. data/lib/roast/dsl/cogs/chat/output.rb +0 -64
  194. data/lib/roast/dsl/cogs/chat/session.rb +0 -68
  195. data/lib/roast/dsl/cogs/chat.rb +0 -81
  196. data/lib/roast/dsl/cogs/cmd.rb +0 -322
  197. data/lib/roast/dsl/cogs/ruby.rb +0 -171
  198. data/lib/roast/dsl/command_runner.rb +0 -191
  199. data/lib/roast/dsl/config_context.rb +0 -9
  200. data/lib/roast/dsl/config_manager.rb +0 -143
  201. data/lib/roast/dsl/control_flow.rb +0 -41
  202. data/lib/roast/dsl/execution_context.rb +0 -9
  203. data/lib/roast/dsl/execution_manager.rb +0 -267
  204. data/lib/roast/dsl/system_cog/params.rb +0 -32
  205. data/lib/roast/dsl/system_cog.rb +0 -36
  206. data/lib/roast/dsl/system_cogs/call.rb +0 -163
  207. data/lib/roast/dsl/system_cogs/map.rb +0 -454
  208. data/lib/roast/dsl/system_cogs/repeat.rb +0 -242
  209. data/lib/roast/dsl/workflow.rb +0 -123
  210. data/lib/roast/dsl/workflow_context.rb +0 -20
  211. data/lib/roast/dsl/workflow_params.rb +0 -24
  212. data/lib/roast/dsl.rb +0 -7
  213. data/lib/roast/errors.rb +0 -15
  214. data/lib/roast/factories/api_provider_factory.rb +0 -62
  215. data/lib/roast/graph/edge.rb +0 -25
  216. data/lib/roast/graph/node.rb +0 -40
  217. data/lib/roast/graph/quantum_edge.rb +0 -27
  218. data/lib/roast/graph/threaded_exec.rb +0 -93
  219. data/lib/roast/graph.rb +0 -233
  220. data/lib/roast/helpers/cmd_runner.rb +0 -199
  221. data/lib/roast/helpers/function_caching_interceptor.rb +0 -88
  222. data/lib/roast/helpers/logger.rb +0 -78
  223. data/lib/roast/helpers/metadata_access.rb +0 -40
  224. data/lib/roast/helpers/minitest_coverage_runner.rb +0 -244
  225. data/lib/roast/helpers/path_resolver.rb +0 -138
  226. data/lib/roast/helpers/prompt_loader.rb +0 -146
  227. data/lib/roast/initializers.rb +0 -40
  228. data/lib/roast/resources/api_resource.rb +0 -134
  229. data/lib/roast/resources/base_resource.rb +0 -55
  230. data/lib/roast/resources/directory_resource.rb +0 -41
  231. data/lib/roast/resources/file_resource.rb +0 -34
  232. data/lib/roast/resources/none_resource.rb +0 -30
  233. data/lib/roast/resources/url_resource.rb +0 -61
  234. data/lib/roast/resources.rb +0 -91
  235. data/lib/roast/services/context_threshold_checker.rb +0 -43
  236. data/lib/roast/services/token_counting_service.rb +0 -45
  237. data/lib/roast/tools/apply_diff.rb +0 -127
  238. data/lib/roast/tools/ask_user.rb +0 -39
  239. data/lib/roast/tools/bash.rb +0 -66
  240. data/lib/roast/tools/cmd.rb +0 -176
  241. data/lib/roast/tools/coding_agent.rb +0 -269
  242. data/lib/roast/tools/context_summarizer.rb +0 -109
  243. data/lib/roast/tools/grep.rb +0 -58
  244. data/lib/roast/tools/helpers/coding_agent_message_formatter.rb +0 -85
  245. data/lib/roast/tools/read_file.rb +0 -50
  246. data/lib/roast/tools/search_file.rb +0 -69
  247. data/lib/roast/tools/swarm.rb +0 -120
  248. data/lib/roast/tools/update_files.rb +0 -410
  249. data/lib/roast/tools/write_file.rb +0 -60
  250. data/lib/roast/tools.rb +0 -75
  251. data/lib/roast/value_objects/api_token.rb +0 -50
  252. data/lib/roast/value_objects/step_name.rb +0 -51
  253. data/lib/roast/value_objects/uri_base.rb +0 -50
  254. data/lib/roast/value_objects/workflow_path.rb +0 -76
  255. data/lib/roast/value_objects.rb +0 -7
  256. data/lib/roast/workflow/agent_step.rb +0 -87
  257. data/lib/roast/workflow/api_configuration.rb +0 -66
  258. data/lib/roast/workflow/base_iteration_step.rb +0 -183
  259. data/lib/roast/workflow/base_step.rb +0 -150
  260. data/lib/roast/workflow/base_workflow.rb +0 -202
  261. data/lib/roast/workflow/case_executor.rb +0 -49
  262. data/lib/roast/workflow/case_step.rb +0 -79
  263. data/lib/roast/workflow/command_executor.rb +0 -92
  264. data/lib/roast/workflow/conditional_executor.rb +0 -50
  265. data/lib/roast/workflow/conditional_step.rb +0 -56
  266. data/lib/roast/workflow/configuration.rb +0 -110
  267. data/lib/roast/workflow/configuration_loader.rb +0 -214
  268. data/lib/roast/workflow/context_manager.rb +0 -90
  269. data/lib/roast/workflow/context_path_resolver.rb +0 -44
  270. data/lib/roast/workflow/dot_access_hash.rb +0 -214
  271. data/lib/roast/workflow/each_step.rb +0 -89
  272. data/lib/roast/workflow/error_handler.rb +0 -147
  273. data/lib/roast/workflow/expression_evaluator.rb +0 -84
  274. data/lib/roast/workflow/expression_utils.rb +0 -37
  275. data/lib/roast/workflow/file_state_repository.rb +0 -152
  276. data/lib/roast/workflow/input_executor.rb +0 -42
  277. data/lib/roast/workflow/input_step.rb +0 -166
  278. data/lib/roast/workflow/interpolator.rb +0 -57
  279. data/lib/roast/workflow/iteration_executor.rb +0 -104
  280. data/lib/roast/workflow/llm_boolean_coercer.rb +0 -56
  281. data/lib/roast/workflow/metadata_manager.rb +0 -48
  282. data/lib/roast/workflow/output_handler.rb +0 -35
  283. data/lib/roast/workflow/output_manager.rb +0 -75
  284. data/lib/roast/workflow/parallel_executor.rb +0 -50
  285. data/lib/roast/workflow/prompt_step.rb +0 -20
  286. data/lib/roast/workflow/repeat_step.rb +0 -76
  287. data/lib/roast/workflow/replay_handler.rb +0 -129
  288. data/lib/roast/workflow/resource_resolver.rb +0 -70
  289. data/lib/roast/workflow/session_manager.rb +0 -84
  290. data/lib/roast/workflow/shell_script_step.rb +0 -116
  291. data/lib/roast/workflow/sqlite_state_repository.rb +0 -343
  292. data/lib/roast/workflow/state_manager.rb +0 -104
  293. data/lib/roast/workflow/state_repository.rb +0 -22
  294. data/lib/roast/workflow/state_repository_factory.rb +0 -38
  295. data/lib/roast/workflow/step_completion_reporter.rb +0 -28
  296. data/lib/roast/workflow/step_executor_coordinator.rb +0 -319
  297. data/lib/roast/workflow/step_executor_factory.rb +0 -43
  298. data/lib/roast/workflow/step_executor_registry.rb +0 -75
  299. data/lib/roast/workflow/step_executor_with_reporting.rb +0 -69
  300. data/lib/roast/workflow/step_executors/base_step_executor.rb +0 -24
  301. data/lib/roast/workflow/step_executors/hash_step_executor.rb +0 -41
  302. data/lib/roast/workflow/step_executors/parallel_step_executor.rb +0 -52
  303. data/lib/roast/workflow/step_executors/string_step_executor.rb +0 -28
  304. data/lib/roast/workflow/step_factory.rb +0 -57
  305. data/lib/roast/workflow/step_finder.rb +0 -98
  306. data/lib/roast/workflow/step_loader.rb +0 -263
  307. data/lib/roast/workflow/step_name_extractor.rb +0 -85
  308. data/lib/roast/workflow/step_runner.rb +0 -24
  309. data/lib/roast/workflow/step_type_resolver.rb +0 -161
  310. data/lib/roast/workflow/validation_command.rb +0 -198
  311. data/lib/roast/workflow/validator.rb +0 -34
  312. data/lib/roast/workflow/validators/base_validator.rb +0 -45
  313. data/lib/roast/workflow/validators/dependency_validator.rb +0 -224
  314. data/lib/roast/workflow/validators/linting_validator.rb +0 -114
  315. data/lib/roast/workflow/validators/schema_validator.rb +0 -91
  316. data/lib/roast/workflow/validators/step_collector.rb +0 -58
  317. data/lib/roast/workflow/validators/validation_orchestrator.rb +0 -53
  318. data/lib/roast/workflow/workflow_context.rb +0 -61
  319. data/lib/roast/workflow/workflow_execution_context.rb +0 -38
  320. data/lib/roast/workflow/workflow_executor.rb +0 -130
  321. data/lib/roast/workflow/workflow_initializer.rb +0 -284
  322. data/lib/roast/workflow/workflow_runner.rb +0 -218
  323. data/lib/roast/workflow_diagram_generator.rb +0 -299
  324. data/rubocop/cop/roast/use_cmd_runner.rb +0 -93
  325. data/rubocop/cop/roast.rb +0 -4
  326. data/schema/workflow.json +0 -352
  327. data/sorbet/rbi/shims/lib/roast/dsl/cog_input_context.rbi +0 -1197
  328. data/sorbet/rbi/shims/lib/roast/dsl/config_context.rbi +0 -325
  329. data/sorbet/rbi/shims/lib/roast/dsl/execution_context.rbi +0 -498
  330. /data/{dsl → examples}/plugin-gem-example/.gitignore +0 -0
  331. /data/{dsl → examples}/plugin-gem-example/lib/plugin_gem_example.rb +0 -0
  332. /data/{dsl → examples}/plugin-gem-example/lib/version.rb +0 -0
  333. /data/{dsl → examples}/prompts/simple_prompt.md.erb +0 -0
  334. /data/{dsl → examples}/temperature.rb +0 -0
  335. /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: 45106bfcf14cd8dac143f9b31331d5c272cba04152390097debb22a466edd4cd
4
- data.tar.gz: 8097250f8cc80405c0002928a946a0635c430e6d631de51f62487e356ec19891
3
+ metadata.gz: 3a4f73f62805433be6e39c1f2e12ddec2fa11029445992b2f294bc846283fb58
4
+ data.tar.gz: f59f4afade96ca5d2cc71bd28f69f6f8eb8d3ab5f8f81231a83464ce3c1c9b14
5
5
  SHA512:
6
- metadata.gz: 9b6a836153aeeda05efd1c30b0be46453709bb9a4bb3480aed00b136da3ecd566f4b6d8a2ad6f88e5a19ee5774dfe42621a0239b7b0a5b3c0d192f29e25efc08
7
- data.tar.gz: d4591075f64cc6e4ca0e14d0ea8555026f4bd3211fb6ebfd80c03c4a92897abbd47a0269e9f40e356a3b8e420165aa231d4e8196b7827c4cac6d3955c645b24c
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::DSL::Cogs::Chat::Config`
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
@@ -14,27 +14,15 @@ env:
14
14
  CI: true
15
15
 
16
16
  jobs:
17
- rubies:
18
- strategy:
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 minitest_dsl_fast
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.5.2)
12
- activesupport (>= 7.0)
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.13.1)
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.1)
81
- net-http (>= 0.5.0)
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.12.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.6.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.0.3)
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 --executor=dsl analyze_codebase.rb
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/dsl/tutorial/README.md)**
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/dsl/tutorial/README.md) - Step-by-step guide with examples
101
- - [Functional Tests](https://github.com/Shopify/roast/tree/main/dsl) - Toy workflows that demonstrate all functional patterns, use for end-to-end test
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/dsl/tutorial) (contains step-by-step guides and runnable examples showing real-world usage)
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(:minitest_all) do |t|
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(:minitest_functional) do |t|
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/dsl/**/*_test.rb", "test/roast/dsl/**/*_test.rb"]
18
+ t.test_files = FileList["test/**/*_test.rb"]
41
19
  end
42
- task :set_slow_env do
20
+ task :set_slow_test_env do
43
21
  ENV["ROAST_RUN_SLOW_TESTS"] = "true"
44
22
  end
45
- task minitest_dsl_slow: :set_slow_env
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, :minitest_dsl_fast]
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 minitest_dsl_fast
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 --executor=dsl
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 minitest_dsl_fast
29
+ run: bundle exec rake minitest_fast
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  agent do
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd { display! }
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd { display! }
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd do
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
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::DSL::CogInputManager::CogDoesNotExistError
36
+ rescue Roast::CogInputManager::CogDoesNotExistError
37
37
  puts "Could not access :to_upper directly"
38
38
  end
39
39
 
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ source "https://rubygems.org"
4
+
3
5
  gem "roast-ai", path: "../.."
4
6
  gem "plugin-gem-example", path: "../plugin-gem-example"
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- roast-ai (0.5.1)
5
- activesupport (>= 7.0)
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 (>= 1.0.2)
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
@@ -1,8 +1,8 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- class Local < Roast::DSL::Cog
5
- class Input < Roast::DSL::Cog::Input
4
+ class Local < Roast::Cog
5
+ class Input < Roast::Cog::Input
6
6
  def validate!
7
7
  true
8
8
  end
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  use "simple", from: "plugin_gem_example"
7
7
  use "MyCogNamespace::Other", from: "plugin_gem_example"
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd { display! }
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd do
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd { display! }
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd do
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  end
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  map { parallel! }
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd { display! }
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd { display! }
@@ -1,7 +1,7 @@
1
1
  # typed: true
2
2
  # frozen_string_literal: true
3
3
 
4
- #: self as Roast::DSL::Workflow
4
+ #: self as Roast::Workflow
5
5
 
6
6
  config do
7
7
  cmd { display! }
@@ -5,6 +5,8 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in plugin-gem-example.gemspec
6
6
  gemspec
7
7
 
8
+ gem "roast-ai", path: "../.."
9
+
8
10
  gem "irb"
9
11
  gem "rake", "~> 13.0"
10
12