roast-ai 0.4.3 → 0.4.5

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 (232) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +2 -0
  3. data/.github/workflows/ci.yaml +1 -0
  4. data/.gitignore +0 -26
  5. data/.rubocop.yml +13 -0
  6. data/.rubocop_todo.yml +21 -0
  7. data/CHANGELOG.md +29 -0
  8. data/Gemfile +4 -0
  9. data/Gemfile.lock +47 -29
  10. data/bin/rubocop +27 -0
  11. data/bin/spoom +27 -0
  12. data/bin/srb +27 -0
  13. data/bin/srb-rbi +27 -0
  14. data/bin/tapioca +27 -0
  15. data/docs/INSTRUMENTATION.md +3 -3
  16. data/dsl/simple.rb +10 -0
  17. data/lib/roast/dsl/executor.rb +26 -0
  18. data/lib/roast/dsl.rb +7 -0
  19. data/lib/roast/errors.rb +1 -0
  20. data/lib/roast/factories/api_provider_factory.rb +1 -0
  21. data/lib/roast/helpers/function_caching_interceptor.rb +3 -0
  22. data/lib/roast/helpers/logger.rb +6 -9
  23. data/lib/roast/helpers/metadata_access.rb +1 -0
  24. data/lib/roast/helpers/minitest_coverage_runner.rb +1 -0
  25. data/lib/roast/helpers/path_resolver.rb +8 -18
  26. data/lib/roast/helpers/prompt_loader.rb +3 -2
  27. data/lib/roast/helpers/timeout_handler.rb +3 -5
  28. data/lib/roast/initializers.rb +1 -0
  29. data/lib/roast/resources/api_resource.rb +4 -3
  30. data/lib/roast/resources/base_resource.rb +1 -0
  31. data/lib/roast/resources/directory_resource.rb +1 -0
  32. data/lib/roast/resources/file_resource.rb +1 -0
  33. data/lib/roast/resources/none_resource.rb +1 -0
  34. data/lib/roast/resources/url_resource.rb +2 -1
  35. data/lib/roast/resources.rb +1 -2
  36. data/lib/roast/services/context_threshold_checker.rb +1 -0
  37. data/lib/roast/services/token_counting_service.rb +1 -0
  38. data/lib/roast/tools/apply_diff.rb +1 -0
  39. data/lib/roast/tools/ask_user.rb +1 -0
  40. data/lib/roast/tools/bash.rb +1 -0
  41. data/lib/roast/tools/cmd.rb +1 -0
  42. data/lib/roast/tools/coding_agent.rb +1 -0
  43. data/lib/roast/tools/context_summarizer.rb +1 -0
  44. data/lib/roast/tools/grep.rb +1 -0
  45. data/lib/roast/tools/helpers/coding_agent_message_formatter.rb +1 -0
  46. data/lib/roast/tools/read_file.rb +1 -0
  47. data/lib/roast/tools/search_file.rb +1 -0
  48. data/lib/roast/tools/swarm.rb +1 -0
  49. data/lib/roast/tools/update_files.rb +1 -0
  50. data/lib/roast/tools/write_file.rb +1 -0
  51. data/lib/roast/tools.rb +2 -0
  52. data/lib/roast/value_objects/api_token.rb +1 -0
  53. data/lib/roast/value_objects/step_name.rb +1 -0
  54. data/lib/roast/value_objects/uri_base.rb +1 -0
  55. data/lib/roast/value_objects/workflow_path.rb +1 -0
  56. data/lib/roast/value_objects.rb +1 -0
  57. data/lib/roast/version.rb +2 -1
  58. data/lib/roast/workflow/agent_step.rb +1 -0
  59. data/lib/roast/workflow/api_configuration.rb +1 -0
  60. data/lib/roast/workflow/base_iteration_step.rb +1 -0
  61. data/lib/roast/workflow/base_step.rb +1 -0
  62. data/lib/roast/workflow/base_workflow.rb +1 -0
  63. data/lib/roast/workflow/case_executor.rb +1 -0
  64. data/lib/roast/workflow/case_step.rb +1 -0
  65. data/lib/roast/workflow/command_executor.rb +1 -0
  66. data/lib/roast/workflow/conditional_executor.rb +1 -0
  67. data/lib/roast/workflow/conditional_step.rb +1 -0
  68. data/lib/roast/workflow/configuration.rb +9 -0
  69. data/lib/roast/workflow/configuration_loader.rb +4 -1
  70. data/lib/roast/workflow/context_manager.rb +1 -0
  71. data/lib/roast/workflow/context_path_resolver.rb +1 -0
  72. data/lib/roast/workflow/dot_access_hash.rb +1 -0
  73. data/lib/roast/workflow/each_step.rb +1 -0
  74. data/lib/roast/workflow/error_handler.rb +7 -1
  75. data/lib/roast/workflow/expression_evaluator.rb +1 -0
  76. data/lib/roast/workflow/expression_utils.rb +1 -0
  77. data/lib/roast/workflow/file_state_repository.rb +2 -1
  78. data/lib/roast/workflow/input_executor.rb +1 -0
  79. data/lib/roast/workflow/input_step.rb +1 -0
  80. data/lib/roast/workflow/interpolator.rb +2 -1
  81. data/lib/roast/workflow/iteration_executor.rb +1 -0
  82. data/lib/roast/workflow/llm_boolean_coercer.rb +1 -0
  83. data/lib/roast/workflow/metadata_manager.rb +1 -0
  84. data/lib/roast/workflow/output_handler.rb +1 -0
  85. data/lib/roast/workflow/output_manager.rb +1 -0
  86. data/lib/roast/workflow/parallel_executor.rb +1 -0
  87. data/lib/roast/workflow/prompt_step.rb +1 -0
  88. data/lib/roast/workflow/repeat_step.rb +1 -0
  89. data/lib/roast/workflow/replay_handler.rb +1 -0
  90. data/lib/roast/workflow/resource_resolver.rb +2 -6
  91. data/lib/roast/workflow/session_manager.rb +1 -0
  92. data/lib/roast/workflow/shell_script_step.rb +1 -0
  93. data/lib/roast/workflow/sqlite_state_repository.rb +1 -0
  94. data/lib/roast/workflow/state_manager.rb +1 -0
  95. data/lib/roast/workflow/state_repository.rb +1 -0
  96. data/lib/roast/workflow/state_repository_factory.rb +4 -2
  97. data/lib/roast/workflow/step_completion_reporter.rb +1 -0
  98. data/lib/roast/workflow/step_executor_coordinator.rb +9 -5
  99. data/lib/roast/workflow/step_executor_factory.rb +1 -0
  100. data/lib/roast/workflow/step_executor_registry.rb +2 -3
  101. data/lib/roast/workflow/step_executor_with_reporting.rb +1 -0
  102. data/lib/roast/workflow/step_executors/base_step_executor.rb +1 -0
  103. data/lib/roast/workflow/step_executors/hash_step_executor.rb +1 -0
  104. data/lib/roast/workflow/step_executors/parallel_step_executor.rb +1 -0
  105. data/lib/roast/workflow/step_executors/string_step_executor.rb +1 -0
  106. data/lib/roast/workflow/step_factory.rb +1 -0
  107. data/lib/roast/workflow/step_finder.rb +1 -0
  108. data/lib/roast/workflow/step_loader.rb +1 -0
  109. data/lib/roast/workflow/step_name_extractor.rb +1 -0
  110. data/lib/roast/workflow/step_runner.rb +1 -0
  111. data/lib/roast/workflow/step_type_resolver.rb +1 -0
  112. data/lib/roast/workflow/validation_command.rb +1 -0
  113. data/lib/roast/workflow/validator.rb +1 -0
  114. data/lib/roast/workflow/validators/base_validator.rb +1 -0
  115. data/lib/roast/workflow/validators/dependency_validator.rb +1 -0
  116. data/lib/roast/workflow/validators/linting_validator.rb +1 -0
  117. data/lib/roast/workflow/validators/schema_validator.rb +1 -0
  118. data/lib/roast/workflow/validators/step_collector.rb +1 -0
  119. data/lib/roast/workflow/validators/validation_orchestrator.rb +1 -0
  120. data/lib/roast/workflow/workflow_context.rb +1 -0
  121. data/lib/roast/workflow/workflow_execution_context.rb +1 -0
  122. data/lib/roast/workflow/workflow_executor.rb +2 -1
  123. data/lib/roast/workflow/workflow_initializer.rb +1 -0
  124. data/lib/roast/workflow/workflow_runner.rb +66 -55
  125. data/lib/roast/workflow.rb +1 -0
  126. data/lib/roast/workflow_diagram_generator.rb +3 -2
  127. data/lib/roast.rb +23 -8
  128. data/roast.gemspec +1 -1
  129. data/sorbet/config +8 -0
  130. data/sorbet/rbi/dsl/.gitattributes +1 -0
  131. data/sorbet/rbi/dsl/active_support/callbacks.rbi +21 -0
  132. data/sorbet/rbi/gems/.gitattributes +1 -0
  133. data/sorbet/rbi/gems/activesupport@8.0.2.rbi +19107 -0
  134. data/sorbet/rbi/gems/addressable@2.8.7.rbi +1994 -0
  135. data/sorbet/rbi/gems/ast@2.4.3.rbi +585 -0
  136. data/sorbet/rbi/gems/base64@0.3.0.rbi +545 -0
  137. data/sorbet/rbi/gems/benchmark@0.4.1.rbi +619 -0
  138. data/sorbet/rbi/gems/bigdecimal@3.2.2.rbi +62 -0
  139. data/sorbet/rbi/gems/cgi@0.5.0.rbi +2961 -0
  140. data/sorbet/rbi/gems/claude_swarm@0.1.19.rbi +568 -0
  141. data/sorbet/rbi/gems/cli-kit@5.0.1.rbi +1991 -0
  142. data/sorbet/rbi/gems/cli-ui@2.3.0.rbi +3181 -0
  143. data/sorbet/rbi/gems/coderay@1.1.3.rbi +9 -0
  144. data/sorbet/rbi/gems/concurrent-ruby@1.3.5.rbi +11657 -0
  145. data/sorbet/rbi/gems/connection_pool@2.5.3.rbi +9 -0
  146. data/sorbet/rbi/gems/crack@1.0.0.rbi +145 -0
  147. data/sorbet/rbi/gems/diff-lcs@1.6.2.rbi +972 -0
  148. data/sorbet/rbi/gems/dotenv@3.1.8.rbi +295 -0
  149. data/sorbet/rbi/gems/drb@2.2.3.rbi +1661 -0
  150. data/sorbet/rbi/gems/dry-configurable@1.3.0.rbi +672 -0
  151. data/sorbet/rbi/gems/dry-core@1.1.0.rbi +1894 -0
  152. data/sorbet/rbi/gems/dry-inflector@1.2.0.rbi +659 -0
  153. data/sorbet/rbi/gems/dry-initializer@3.2.0.rbi +781 -0
  154. data/sorbet/rbi/gems/dry-logic@1.6.0.rbi +1127 -0
  155. data/sorbet/rbi/gems/dry-schema@1.14.1.rbi +3727 -0
  156. data/sorbet/rbi/gems/dry-types@1.8.3.rbi +3969 -0
  157. data/sorbet/rbi/gems/erubi@1.13.1.rbi +155 -0
  158. data/sorbet/rbi/gems/event_stream_parser@1.0.0.rbi +49 -0
  159. data/sorbet/rbi/gems/faraday-multipart@1.1.1.rbi +283 -0
  160. data/sorbet/rbi/gems/faraday-net_http@3.4.1.rbi +147 -0
  161. data/sorbet/rbi/gems/faraday-retry@2.3.2.rbi +9 -0
  162. data/sorbet/rbi/gems/faraday@2.13.1.rbi +2977 -0
  163. data/sorbet/rbi/gems/fast-mcp-annotations@1.5.3.rbi +1588 -0
  164. data/sorbet/rbi/gems/ffi@1.17.2.rbi +9 -0
  165. data/sorbet/rbi/gems/formatador@1.1.0.rbi +9 -0
  166. data/sorbet/rbi/gems/guard-compat@1.2.1.rbi +102 -0
  167. data/sorbet/rbi/gems/guard-minitest@2.4.6.rbi +402 -0
  168. data/sorbet/rbi/gems/guard@2.19.1.rbi +2283 -0
  169. data/sorbet/rbi/gems/hashdiff@1.2.0.rbi +355 -0
  170. data/sorbet/rbi/gems/i18n@1.14.7.rbi +2359 -0
  171. data/sorbet/rbi/gems/json-schema@5.1.1.rbi +1466 -0
  172. data/sorbet/rbi/gems/json@2.12.2.rbi +2051 -0
  173. data/sorbet/rbi/gems/language_server-protocol@3.17.0.5.rbi +9 -0
  174. data/sorbet/rbi/gems/lint_roller@1.1.0.rbi +9 -0
  175. data/sorbet/rbi/gems/listen@3.9.0.rbi +1206 -0
  176. data/sorbet/rbi/gems/logger@1.7.0.rbi +963 -0
  177. data/sorbet/rbi/gems/lumberjack@1.2.10.rbi +1830 -0
  178. data/sorbet/rbi/gems/method_source@1.1.0.rbi +9 -0
  179. data/sorbet/rbi/gems/mime-types-data@3.2025.0617.rbi +136 -0
  180. data/sorbet/rbi/gems/mime-types@3.7.0.rbi +1342 -0
  181. data/sorbet/rbi/gems/minitest-rg@5.3.0.rbi +160 -0
  182. data/sorbet/rbi/gems/minitest@5.25.5.rbi +1640 -0
  183. data/sorbet/rbi/gems/mocha@2.7.1.rbi +12 -0
  184. data/sorbet/rbi/gems/multipart-post@2.4.1.rbi +244 -0
  185. data/sorbet/rbi/gems/nenv@0.3.0.rbi +147 -0
  186. data/sorbet/rbi/gems/net-http@0.6.0.rbi +4247 -0
  187. data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
  188. data/sorbet/rbi/gems/notiffany@0.1.3.rbi +1079 -0
  189. data/sorbet/rbi/gems/open_router@0.3.3.rbi +230 -0
  190. data/sorbet/rbi/gems/ostruct@0.6.2.rbi +354 -0
  191. data/sorbet/rbi/gems/parallel@1.27.0.rbi +291 -0
  192. data/sorbet/rbi/gems/parser@3.3.8.0.rbi +5535 -0
  193. data/sorbet/rbi/gems/prism@1.4.0.rbi +41732 -0
  194. data/sorbet/rbi/gems/pry@0.15.2.rbi +9 -0
  195. data/sorbet/rbi/gems/public_suffix@6.0.2.rbi +936 -0
  196. data/sorbet/rbi/gems/racc@1.8.1.rbi +158 -0
  197. data/sorbet/rbi/gems/rack@2.2.17.rbi +5659 -0
  198. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +9 -0
  199. data/sorbet/rbi/gems/raix@1.0.2.rbi +1104 -0
  200. data/sorbet/rbi/gems/rake@13.3.0.rbi +3036 -0
  201. data/sorbet/rbi/gems/rb-fsevent@0.11.2.rbi +9 -0
  202. data/sorbet/rbi/gems/rb-inotify@0.11.1.rbi +9 -0
  203. data/sorbet/rbi/gems/rbi@0.3.6.rbi +6893 -0
  204. data/sorbet/rbi/gems/rbs@3.9.4.rbi +6978 -0
  205. data/sorbet/rbi/gems/regexp_parser@2.10.0.rbi +9 -0
  206. data/sorbet/rbi/gems/rexml@3.4.1.rbi +5346 -0
  207. data/sorbet/rbi/gems/rubocop-ast@1.45.1.rbi +9 -0
  208. data/sorbet/rbi/gems/rubocop-shopify@2.17.1.rbi +9 -0
  209. data/sorbet/rbi/gems/rubocop@1.77.0.rbi +9 -0
  210. data/sorbet/rbi/gems/ruby-graphviz@1.2.5.rbi +1333 -0
  211. data/sorbet/rbi/gems/ruby-openai@8.1.0.rbi +758 -0
  212. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +9 -0
  213. data/sorbet/rbi/gems/ruby2_keywords@0.0.5.rbi +9 -0
  214. data/sorbet/rbi/gems/securerandom@0.4.1.rbi +75 -0
  215. data/sorbet/rbi/gems/shellany@0.0.1.rbi +102 -0
  216. data/sorbet/rbi/gems/spoom@1.6.3.rbi +6985 -0
  217. data/sorbet/rbi/gems/sqlite3@2.7.0.rbi +1900 -0
  218. data/sorbet/rbi/gems/tapioca@0.16.11.rbi +3628 -0
  219. data/sorbet/rbi/gems/thor@1.4.0.rbi +4399 -0
  220. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +5918 -0
  221. data/sorbet/rbi/gems/unicode-display_width@3.1.4.rbi +9 -0
  222. data/sorbet/rbi/gems/unicode-emoji@4.0.4.rbi +9 -0
  223. data/sorbet/rbi/gems/uri@1.0.3.rbi +2349 -0
  224. data/sorbet/rbi/gems/vcr@6.3.1.rbi +3040 -0
  225. data/sorbet/rbi/gems/webmock@3.25.1.rbi +1792 -0
  226. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
  227. data/sorbet/rbi/gems/yard@0.9.37.rbi +18492 -0
  228. data/sorbet/rbi/gems/zeitwerk@2.7.3.rbi +1429 -0
  229. data/sorbet/tapioca/config.yml +13 -0
  230. data/sorbet/tapioca/require.rb +36 -0
  231. metadata +116 -5
  232. data/lib/roast/workflow/configuration_parser.rb +0 -54
@@ -0,0 +1,295 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `dotenv` gem.
5
+ # Please instead update this file by running `bin/tapioca gem dotenv`.
6
+
7
+
8
+ # Shim to load environment variables from `.env files into `ENV`.
9
+ #
10
+ # source://dotenv//lib/dotenv/version.rb#1
11
+ module Dotenv
12
+ extend ::Dotenv
13
+
14
+ # Returns the value of attribute instrumenter.
15
+ #
16
+ # source://dotenv//lib/dotenv.rb#15
17
+ def instrumenter; end
18
+
19
+ # Sets the attribute instrumenter
20
+ #
21
+ # @param value the value to set the attribute instrumenter to.
22
+ #
23
+ # source://dotenv//lib/dotenv.rb#15
24
+ def instrumenter=(_arg0); end
25
+
26
+ # Loads environment variables from one or more `.env` files. See `#parse` for more details.
27
+ #
28
+ # source://dotenv//lib/dotenv.rb#18
29
+ def load(*filenames, overwrite: T.unsafe(nil), ignore: T.unsafe(nil)); end
30
+
31
+ # Same as `#load`, but raises Errno::ENOENT if any files don't exist
32
+ #
33
+ # source://dotenv//lib/dotenv.rb#27
34
+ def load!(*filenames); end
35
+
36
+ # Modify `ENV` for the block and restore it to its previous state afterwards.
37
+ #
38
+ # Note that the block is synchronized to prevent concurrent modifications to `ENV`,
39
+ # so multiple threads will be executed serially.
40
+ #
41
+ # @param env [Hash] Hash of keys and values to set in `ENV`
42
+ #
43
+ # source://dotenv//lib/dotenv.rb#116
44
+ def modify(env = T.unsafe(nil), &block); end
45
+
46
+ # same as `#load`, but will overwrite existing values in `ENV`
47
+ #
48
+ # source://dotenv//lib/dotenv.rb#32
49
+ def overload(*filenames); end
50
+
51
+ # same as `#overwrite`, but raises Errno::ENOENT if any files don't exist
52
+ #
53
+ # source://dotenv//lib/dotenv.rb#38
54
+ def overload!(*filenames); end
55
+
56
+ # same as `#load`, but will overwrite existing values in `ENV`
57
+ #
58
+ # source://dotenv//lib/dotenv.rb#32
59
+ def overwrite(*filenames); end
60
+
61
+ # same as `#overwrite`, but raises Errno::ENOENT if any files don't exist
62
+ #
63
+ # source://dotenv//lib/dotenv.rb#38
64
+ def overwrite!(*filenames); end
65
+
66
+ # Parses the given files, yielding for each file if a block is given.
67
+ #
68
+ # @param filenames [String, Array<String>] Files to parse
69
+ # @param overwrite [Boolean] Overwrite existing `ENV` values
70
+ # @param ignore [Boolean] Ignore non-existent files
71
+ # @param block [Proc] Block to yield for each parsed `Dotenv::Environment`
72
+ # @return [Hash] parsed key/value pairs
73
+ #
74
+ # source://dotenv//lib/dotenv.rb#50
75
+ def parse(*filenames, overwrite: T.unsafe(nil), ignore: T.unsafe(nil), &block); end
76
+
77
+ # @raise [MissingKeys]
78
+ #
79
+ # source://dotenv//lib/dotenv.rb#126
80
+ def require_keys(*keys); end
81
+
82
+ # Restore `ENV` to a given state
83
+ #
84
+ # @param env [Hash] Hash of keys and values to restore, defaults to the last saved state
85
+ # @param safe [Boolean] Is it safe to modify `ENV`? Defaults to `true` in the main thread, otherwise raises an error.
86
+ #
87
+ # source://dotenv//lib/dotenv.rb#77
88
+ def restore(env = T.unsafe(nil), safe: T.unsafe(nil)); end
89
+
90
+ # Save the current `ENV` to be restored later
91
+ #
92
+ # source://dotenv//lib/dotenv.rb#67
93
+ def save; end
94
+
95
+ # Update `ENV` with the given hash of keys and values
96
+ #
97
+ # @param env [Hash] Hash of keys and values to set in `ENV`
98
+ # @param overwrite [Boolean] Overwrite existing `ENV` values
99
+ #
100
+ # source://dotenv//lib/dotenv.rb#98
101
+ def update(env = T.unsafe(nil), overwrite: T.unsafe(nil)); end
102
+
103
+ private
104
+
105
+ # source://dotenv//lib/dotenv.rb#134
106
+ def instrument(name, payload = T.unsafe(nil), &block); end
107
+ end
108
+
109
+ # A diff between multiple states of ENV.
110
+ #
111
+ # source://dotenv//lib/dotenv/diff.rb#3
112
+ class Dotenv::Diff
113
+ # Create a new diff. If given a block, the state of ENV after the block will be preserved as
114
+ # the final state for comparison. Otherwise, the current ENV will be the final state.
115
+ #
116
+ # @param a [Hash] the initial state, defaults to a snapshot of current ENV
117
+ # @param b [Hash] the final state, defaults to the current ENV
118
+ # @return [Diff] a new instance of Diff
119
+ # @yield [diff] a block to execute before recording the final state
120
+ #
121
+ # source://dotenv//lib/dotenv/diff.rb#16
122
+ def initialize(a: T.unsafe(nil), b: T.unsafe(nil), &block); end
123
+
124
+ # The initial state
125
+ #
126
+ # source://dotenv//lib/dotenv/diff.rb#5
127
+ def a; end
128
+
129
+ # Return a Hash of keys added with their new values
130
+ #
131
+ # source://dotenv//lib/dotenv/diff.rb#24
132
+ def added; end
133
+
134
+ # Returns true if any keys were added, removed, or changed
135
+ #
136
+ # @return [Boolean]
137
+ #
138
+ # source://dotenv//lib/dotenv/diff.rb#46
139
+ def any?; end
140
+
141
+ # The final or current state
142
+ #
143
+ # source://dotenv//lib/dotenv/diff.rb#8
144
+ def b; end
145
+
146
+ # Returns of Hash of keys changed with an array of their previous and new values
147
+ #
148
+ # source://dotenv//lib/dotenv/diff.rb#34
149
+ def changed; end
150
+
151
+ # Returns a Hash of all added, changed, and removed keys and their new values
152
+ #
153
+ # source://dotenv//lib/dotenv/diff.rb#41
154
+ def env; end
155
+
156
+ # Returns a Hash of keys removed with their previous values
157
+ #
158
+ # source://dotenv//lib/dotenv/diff.rb#29
159
+ def removed; end
160
+
161
+ private
162
+
163
+ # source://dotenv//lib/dotenv/diff.rb#52
164
+ def snapshot; end
165
+ end
166
+
167
+ # A `.env` file that will be read and parsed into a Hash
168
+ #
169
+ # source://dotenv//lib/dotenv/environment.rb#3
170
+ class Dotenv::Environment < ::Hash
171
+ # Create a new Environment
172
+ #
173
+ # @param filename [String] the path to the file to read
174
+ # @param overwrite [Boolean] whether the parser should assume existing values will be overwritten
175
+ # @return [Environment] a new instance of Environment
176
+ #
177
+ # source://dotenv//lib/dotenv/environment.rb#10
178
+ def initialize(filename, overwrite: T.unsafe(nil)); end
179
+
180
+ # Returns the value of attribute filename.
181
+ #
182
+ # source://dotenv//lib/dotenv/environment.rb#4
183
+ def filename; end
184
+
185
+ # source://dotenv//lib/dotenv/environment.rb#17
186
+ def load; end
187
+
188
+ # Returns the value of attribute overwrite.
189
+ #
190
+ # source://dotenv//lib/dotenv/environment.rb#4
191
+ def overwrite; end
192
+
193
+ # source://dotenv//lib/dotenv/environment.rb#21
194
+ def read; end
195
+ end
196
+
197
+ # source://dotenv//lib/dotenv/missing_keys.rb#2
198
+ class Dotenv::Error < ::StandardError; end
199
+
200
+ # Error raised when encountering a syntax error while parsing a .env file.
201
+ #
202
+ # source://dotenv//lib/dotenv/parser.rb#6
203
+ class Dotenv::FormatError < ::SyntaxError; end
204
+
205
+ # source://dotenv//lib/dotenv/missing_keys.rb#4
206
+ class Dotenv::MissingKeys < ::Dotenv::Error
207
+ # @return [MissingKeys] a new instance of MissingKeys
208
+ #
209
+ # source://dotenv//lib/dotenv/missing_keys.rb#5
210
+ def initialize(keys); end
211
+ end
212
+
213
+ # Parses the `.env` file format into key/value pairs.
214
+ # It allows for variable substitutions, command substitutions, and exporting of variables.
215
+ #
216
+ # source://dotenv//lib/dotenv/parser.rb#10
217
+ class Dotenv::Parser
218
+ # @return [Parser] a new instance of Parser
219
+ #
220
+ # source://dotenv//lib/dotenv/parser.rb#46
221
+ def initialize(string, overwrite: T.unsafe(nil)); end
222
+
223
+ # source://dotenv//lib/dotenv/parser.rb#53
224
+ def call; end
225
+
226
+ private
227
+
228
+ # Determine if a variable is already defined and should not be overwritten.
229
+ #
230
+ # @return [Boolean]
231
+ #
232
+ # source://dotenv//lib/dotenv/parser.rb#76
233
+ def existing?(key); end
234
+
235
+ # source://dotenv//lib/dotenv/parser.rb#101
236
+ def expand_newlines(value); end
237
+
238
+ # source://dotenv//lib/dotenv/parser.rb#80
239
+ def parse_value(value); end
240
+
241
+ # source://dotenv//lib/dotenv/parser.rb#97
242
+ def unescape_characters(value); end
243
+
244
+ class << self
245
+ # source://dotenv//lib/dotenv/parser.rb#41
246
+ def call(*_arg0, **_arg1, &_arg2); end
247
+
248
+ # Returns the value of attribute substitutions.
249
+ #
250
+ # source://dotenv//lib/dotenv/parser.rb#39
251
+ def substitutions; end
252
+ end
253
+ end
254
+
255
+ # source://dotenv//lib/dotenv/parser.rb#16
256
+ Dotenv::Parser::LINE = T.let(T.unsafe(nil), Regexp)
257
+
258
+ # source://dotenv//lib/dotenv/parser.rb#36
259
+ Dotenv::Parser::QUOTED_STRING = T.let(T.unsafe(nil), Regexp)
260
+
261
+ # An internal monitor to synchronize access to ENV in multi-threaded environments.
262
+ #
263
+ # source://dotenv//lib/dotenv.rb#12
264
+ Dotenv::SEMAPHORE = T.let(T.unsafe(nil), Monitor)
265
+
266
+ # source://dotenv//lib/dotenv/substitutions/variable.rb#4
267
+ module Dotenv::Substitutions; end
268
+
269
+ # Substitute shell commands in a value.
270
+ #
271
+ # SHA=$(git rev-parse HEAD)
272
+ #
273
+ # source://dotenv//lib/dotenv/substitutions/command.rb#9
274
+ module Dotenv::Substitutions::Command
275
+ class << self
276
+ # source://dotenv//lib/dotenv/substitutions/command.rb#23
277
+ def call(value, _env); end
278
+ end
279
+ end
280
+
281
+ # Substitute variables in a value.
282
+ #
283
+ # HOST=example.com
284
+ # URL="https://$HOST"
285
+ #
286
+ # source://dotenv//lib/dotenv/substitutions/variable.rb#10
287
+ module Dotenv::Substitutions::Variable
288
+ class << self
289
+ # source://dotenv//lib/dotenv/substitutions/variable.rb#21
290
+ def call(value, env); end
291
+ end
292
+ end
293
+
294
+ # source://dotenv//lib/dotenv/version.rb#2
295
+ Dotenv::VERSION = T.let(T.unsafe(nil), String)