riffer 0.47.1 → 0.48.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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/.claude/rules/rbs-inline.md +5 -1
  3. data/.release-please-manifest.json +1 -1
  4. data/CHANGELOG.md +31 -0
  5. data/Rakefile +1 -1
  6. data/Steepfile +1 -15
  7. data/docs/AGENTS.md +37 -3
  8. data/docs/AGENT_LIFECYCLE.md +1 -0
  9. data/docs/CONFIGURATION.md +1 -1
  10. data/docs/EVALS.md +2 -1
  11. data/docs/MCP.md +0 -4
  12. data/docs/MESSAGES.md +85 -17
  13. data/docs/STREAM_EVENTS.md +31 -4
  14. data/docs/TRACING.md +1 -1
  15. data/docs/providers/AMAZON_BEDROCK.md +1 -1
  16. data/docs/providers/CUSTOM_PROVIDERS.md +58 -4
  17. data/docs/providers/GEMINI.md +1 -1
  18. data/docs/providers/MOCK_PROVIDER.md +17 -0
  19. data/lib/riffer/agent/config.rb +40 -16
  20. data/lib/riffer/agent/outcome.rb +2 -2
  21. data/lib/riffer/agent/response.rb +16 -9
  22. data/lib/riffer/agent/run.rb +24 -9
  23. data/lib/riffer/agent/session.rb +2 -1
  24. data/lib/riffer/agent/structured_output/result.rb +2 -2
  25. data/lib/riffer/agent/structured_output.rb +1 -1
  26. data/lib/riffer/agent.rb +40 -16
  27. data/lib/riffer/config.rb +31 -31
  28. data/lib/riffer/evals/evaluator.rb +29 -2
  29. data/lib/riffer/evals/judge.rb +13 -8
  30. data/lib/riffer/evals/result.rb +6 -6
  31. data/lib/riffer/evals/run_result.rb +1 -1
  32. data/lib/riffer/evals/scenario_result.rb +6 -6
  33. data/lib/riffer/files/resolver.rb +3 -3
  34. data/lib/riffer/guardrails/modification.rb +3 -3
  35. data/lib/riffer/guardrails/result.rb +3 -3
  36. data/lib/riffer/guardrails/runner.rb +4 -4
  37. data/lib/riffer/guardrails/tripwire.rb +4 -4
  38. data/lib/riffer/helpers/deep_dup.rb +42 -0
  39. data/lib/riffer/mcp/manifest.rb +5 -5
  40. data/lib/riffer/mcp/registration.rb +1 -1
  41. data/lib/riffer/mcp/search_tool.rb +1 -1
  42. data/lib/riffer/messages/assistant/reasoning_part.rb +90 -0
  43. data/lib/riffer/messages/assistant/tool_call.rb +63 -0
  44. data/lib/riffer/messages/assistant.rb +55 -7
  45. data/lib/riffer/messages/base.rb +7 -25
  46. data/lib/riffer/messages/system.rb +10 -0
  47. data/lib/riffer/messages/tool.rb +21 -4
  48. data/lib/riffer/messages/{file_part.rb → user/file_part.rb} +18 -17
  49. data/lib/riffer/messages/user.rb +13 -2
  50. data/lib/riffer/params/param.rb +20 -8
  51. data/lib/riffer/params.rb +10 -1
  52. data/lib/riffer/providers/amazon_bedrock.rb +34 -6
  53. data/lib/riffer/providers/anthropic.rb +9 -2
  54. data/lib/riffer/providers/base.rb +28 -10
  55. data/lib/riffer/providers/finish_reason.rb +2 -2
  56. data/lib/riffer/providers/gemini.rb +2 -2
  57. data/lib/riffer/providers/mock.rb +19 -3
  58. data/lib/riffer/providers/open_ai.rb +14 -5
  59. data/lib/riffer/providers/open_router.rb +6 -5
  60. data/lib/riffer/providers/repository.rb +0 -4
  61. data/lib/riffer/providers/token_usage.rb +21 -5
  62. data/lib/riffer/skills/adapter.rb +1 -1
  63. data/lib/riffer/skills/config.rb +12 -0
  64. data/lib/riffer/skills/context.rb +4 -7
  65. data/lib/riffer/skills/filesystem_backend.rb +1 -2
  66. data/lib/riffer/skills/frontmatter.rb +4 -4
  67. data/lib/riffer/skills/xml_adapter.rb +1 -1
  68. data/lib/riffer/stream_events/base.rb +1 -1
  69. data/lib/riffer/stream_events/finish_reason_done.rb +2 -2
  70. data/lib/riffer/stream_events/guardrail_modification.rb +1 -1
  71. data/lib/riffer/stream_events/guardrail_tripwire.rb +1 -1
  72. data/lib/riffer/stream_events/interrupt.rb +2 -2
  73. data/lib/riffer/stream_events/reasoning_delta.rb +1 -1
  74. data/lib/riffer/stream_events/reasoning_done.rb +10 -8
  75. data/lib/riffer/stream_events/skill_activation.rb +1 -1
  76. data/lib/riffer/stream_events/text_delta.rb +1 -1
  77. data/lib/riffer/stream_events/text_done.rb +1 -1
  78. data/lib/riffer/stream_events/token_usage_done.rb +1 -1
  79. data/lib/riffer/stream_events/tool_call_delta.rb +3 -3
  80. data/lib/riffer/stream_events/tool_call_done.rb +4 -4
  81. data/lib/riffer/stream_events/web_search_done.rb +2 -2
  82. data/lib/riffer/stream_events/web_search_status.rb +3 -3
  83. data/lib/riffer/tools/response.rb +4 -4
  84. data/lib/riffer/tools/runtime.rb +3 -4
  85. data/lib/riffer/tracing/capture.rb +2 -4
  86. data/lib/riffer/tracing/stream_recorder.rb +6 -6
  87. data/lib/riffer/version.rb +1 -1
  88. data/lib/riffer.rb +7 -0
  89. data/rbs_collection.lock.yaml +320 -0
  90. data/rbs_collection.yaml +12 -0
  91. data/sig/_private/anthropic.rbs +5 -4
  92. data/sig/_private/aws-sdk-core/event_error.rbs +15 -0
  93. data/sig/generated/riffer/agent/config.rbs +19 -5
  94. data/sig/generated/riffer/agent/response.rbs +6 -1
  95. data/sig/generated/riffer/agent/run.rbs +15 -8
  96. data/sig/generated/riffer/agent.rbs +25 -9
  97. data/sig/generated/riffer/config.rbs +1 -1
  98. data/sig/generated/riffer/evals/evaluator.rbs +20 -1
  99. data/sig/generated/riffer/evals/judge.rbs +5 -2
  100. data/sig/generated/riffer/files/resolver.rbs +6 -6
  101. data/sig/generated/riffer/helpers/deep_dup.rbs +21 -0
  102. data/sig/generated/riffer/messages/assistant/reasoning_part.rbs +58 -0
  103. data/sig/generated/riffer/messages/assistant/tool_call.rbs +42 -0
  104. data/sig/generated/riffer/messages/assistant.rbs +24 -10
  105. data/sig/generated/riffer/messages/system.rbs +6 -0
  106. data/sig/generated/riffer/messages/tool.rbs +6 -0
  107. data/sig/generated/riffer/messages/{file_part.rbs → user/file_part.rbs} +11 -6
  108. data/sig/generated/riffer/messages/user.rbs +9 -3
  109. data/sig/generated/riffer/params/param.rbs +7 -0
  110. data/sig/generated/riffer/params.rbs +6 -0
  111. data/sig/generated/riffer/providers/amazon_bedrock.rbs +14 -5
  112. data/sig/generated/riffer/providers/anthropic.rbs +2 -2
  113. data/sig/generated/riffer/providers/base.rbs +22 -10
  114. data/sig/generated/riffer/providers/gemini.rbs +4 -4
  115. data/sig/generated/riffer/providers/mock.rbs +7 -2
  116. data/sig/generated/riffer/providers/open_ai.rbs +4 -4
  117. data/sig/generated/riffer/providers/open_router.rbs +4 -4
  118. data/sig/generated/riffer/providers/repository.rbs +0 -2
  119. data/sig/generated/riffer/providers/token_usage.rbs +6 -0
  120. data/sig/generated/riffer/skills/config.rbs +9 -0
  121. data/sig/generated/riffer/stream_events/reasoning_done.rbs +8 -6
  122. data/sig/generated/riffer/tools/runtime.rbs +2 -2
  123. data/sig/generated/riffer/tracing/capture.rbs +4 -4
  124. data/sig/generated/riffer.rbs +8 -0
  125. data/sig/manual/riffer/helpers/deep_dup.rbs +5 -0
  126. metadata +13 -5
  127. data/sig/_private/async.rbs +0 -28
  128. data/sig/_private/minitest.rbs +0 -9
@@ -25,6 +25,14 @@ module Riffer
25
25
  class ToolExecutionError < Error
26
26
  end
27
27
 
28
+ # Raised when a provider's stream ends before its terminal event (Bedrock's
29
+ # messageStop, Anthropic's message_stop, OpenAI's response.completed /
30
+ # incomplete / failed), so a truncated or empty response is never returned
31
+ # as a complete message. Events already yielded were delivered; the
32
+ # request is safe to retry.
33
+ class IncompleteStreamError < Error
34
+ end
35
+
28
36
  # Base error for a file attachment that can't be resolved for the provider.
29
37
  class FileError < Error
30
38
  end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Helpers::DeepDup` uses `extend self`; rbs-inline doesn't emit that,
2
+ # so re-extend here to expose its instance methods as singleton methods.
3
+ module Riffer::Helpers::DeepDup
4
+ extend ::Riffer::Helpers::DeepDup
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riffer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.47.1
4
+ version: 0.48.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Bottrall
@@ -138,6 +138,7 @@ files:
138
138
  - lib/riffer/helpers.rb
139
139
  - lib/riffer/helpers/boolean.rb
140
140
  - lib/riffer/helpers/call_or_value.rb
141
+ - lib/riffer/helpers/deep_dup.rb
141
142
  - lib/riffer/helpers/dependencies.rb
142
143
  - lib/riffer/helpers/identifier.rb
143
144
  - lib/riffer/mcp.rb
@@ -151,11 +152,13 @@ files:
151
152
  - lib/riffer/mcp/tool_factory.rb
152
153
  - lib/riffer/messages.rb
153
154
  - lib/riffer/messages/assistant.rb
155
+ - lib/riffer/messages/assistant/reasoning_part.rb
156
+ - lib/riffer/messages/assistant/tool_call.rb
154
157
  - lib/riffer/messages/base.rb
155
- - lib/riffer/messages/file_part.rb
156
158
  - lib/riffer/messages/system.rb
157
159
  - lib/riffer/messages/tool.rb
158
160
  - lib/riffer/messages/user.rb
161
+ - lib/riffer/messages/user/file_part.rb
159
162
  - lib/riffer/params.rb
160
163
  - lib/riffer/params/boolean.rb
161
164
  - lib/riffer/params/param.rb
@@ -220,12 +223,13 @@ files:
220
223
  - lib/riffer/tracing/otel.rb
221
224
  - lib/riffer/tracing/stream_recorder.rb
222
225
  - lib/riffer/version.rb
226
+ - rbs_collection.lock.yaml
227
+ - rbs_collection.yaml
223
228
  - sig/_private/anthropic.rbs
224
- - sig/_private/async.rbs
229
+ - sig/_private/aws-sdk-core/event_error.rbs
225
230
  - sig/_private/aws-sdk-core/seahorse_request_context.rbs
226
231
  - sig/_private/aws-sdk-core/static_token_provider.rbs
227
232
  - sig/_private/mcp.rbs
228
- - sig/_private/minitest.rbs
229
233
  - sig/_private/openai.rbs
230
234
  - sig/_private/opentelemetry.rbs
231
235
  - sig/_private/riffer/providers/amazon_bedrock.rbs
@@ -268,6 +272,7 @@ files:
268
272
  - sig/generated/riffer/helpers.rbs
269
273
  - sig/generated/riffer/helpers/boolean.rbs
270
274
  - sig/generated/riffer/helpers/call_or_value.rbs
275
+ - sig/generated/riffer/helpers/deep_dup.rbs
271
276
  - sig/generated/riffer/helpers/dependencies.rbs
272
277
  - sig/generated/riffer/helpers/identifier.rbs
273
278
  - sig/generated/riffer/mcp.rbs
@@ -281,11 +286,13 @@ files:
281
286
  - sig/generated/riffer/mcp/tool_factory.rbs
282
287
  - sig/generated/riffer/messages.rbs
283
288
  - sig/generated/riffer/messages/assistant.rbs
289
+ - sig/generated/riffer/messages/assistant/reasoning_part.rbs
290
+ - sig/generated/riffer/messages/assistant/tool_call.rbs
284
291
  - sig/generated/riffer/messages/base.rbs
285
- - sig/generated/riffer/messages/file_part.rbs
286
292
  - sig/generated/riffer/messages/system.rbs
287
293
  - sig/generated/riffer/messages/tool.rbs
288
294
  - sig/generated/riffer/messages/user.rbs
295
+ - sig/generated/riffer/messages/user/file_part.rbs
289
296
  - sig/generated/riffer/params.rbs
290
297
  - sig/generated/riffer/params/boolean.rbs
291
298
  - sig/generated/riffer/params/param.rbs
@@ -358,6 +365,7 @@ files:
358
365
  - sig/manual/riffer/evals/evaluator_runner.rbs
359
366
  - sig/manual/riffer/helpers/boolean.rbs
360
367
  - sig/manual/riffer/helpers/call_or_value.rbs
368
+ - sig/manual/riffer/helpers/deep_dup.rbs
361
369
  - sig/manual/riffer/helpers/dependencies.rbs
362
370
  - sig/manual/riffer/helpers/identifier.rbs
363
371
  - sig/manual/riffer/mcp.rbs
@@ -1,28 +0,0 @@
1
- # Minimal signatures for the optional `async` gem, which ships no RBS.
2
- #
3
- # Only the surface used by Riffer::Runner::Fibers is declared; the gem is
4
- # loaded lazily via depends_on, so this stub keeps Steep aware of the
5
- # constants without adding a hard `library` dependency.
6
- module Async
7
- class Barrier
8
- def initialize: () -> void
9
-
10
- def async: () { () -> void } -> untyped
11
-
12
- def wait: () -> void
13
-
14
- def stop: () -> void
15
- end
16
-
17
- class Semaphore
18
- def initialize: (Integer, ?parent: untyped) -> void
19
-
20
- def async: () { () -> void } -> untyped
21
- end
22
- end
23
-
24
- module Kernel
25
- def Async: () { () -> void } -> untyped
26
-
27
- def Sync: () { () -> void } -> untyped
28
- end
@@ -1,9 +0,0 @@
1
- # Minimal signatures for `minitest`, a development-only framework riffer never
2
- # depends on. Only the surface `lib/riffer/testing/minitest.rb` touches is
3
- # declared; the file is required by hand from a consumer's test_helper, so this
4
- # stub keeps Steep aware of the constants without a `library` dependency.
5
- module Minitest
6
- class Test
7
- def after_teardown: () -> void
8
- end
9
- end