riffer 0.30.0 → 0.32.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 (214) hide show
  1. checksums.yaml +4 -4
  2. data/.agents/code-style.md +63 -4
  3. data/.agents/rbs-inline.md +1 -6
  4. data/.release-please-manifest.json +1 -1
  5. data/AGENTS.md +1 -2
  6. data/CHANGELOG.md +25 -0
  7. data/docs/08_MESSAGES.md +1 -1
  8. data/docs/14_MCP.md +50 -5
  9. data/docs/15_SERIALIZATION.md +23 -12
  10. data/docs/providers/02_AMAZON_BEDROCK.md +14 -0
  11. data/lib/riffer/agent/config.rb +42 -47
  12. data/lib/riffer/agent/context.rb +70 -50
  13. data/lib/riffer/agent/response.rb +4 -20
  14. data/lib/riffer/agent/run.rb +28 -67
  15. data/lib/riffer/agent/serializer.rb +36 -85
  16. data/lib/riffer/agent/session/repair.rb +14 -40
  17. data/lib/riffer/agent/session.rb +25 -67
  18. data/lib/riffer/agent/structured_output/result.rb +3 -11
  19. data/lib/riffer/agent/structured_output.rb +5 -13
  20. data/lib/riffer/agent.rb +81 -199
  21. data/lib/riffer/config.rb +34 -101
  22. data/lib/riffer/evals/evaluator.rb +7 -27
  23. data/lib/riffer/evals/evaluator_runner.rb +11 -19
  24. data/lib/riffer/evals/judge.rb +4 -25
  25. data/lib/riffer/evals/result.rb +1 -18
  26. data/lib/riffer/evals/run_result.rb +0 -11
  27. data/lib/riffer/evals/scenario_result.rb +0 -14
  28. data/lib/riffer/evals.rb +0 -6
  29. data/lib/riffer/guardrail.rb +4 -27
  30. data/lib/riffer/guardrails/modification.rb +0 -10
  31. data/lib/riffer/guardrails/result.rb +3 -30
  32. data/lib/riffer/guardrails/runner.rb +5 -22
  33. data/lib/riffer/guardrails/tripwire.rb +1 -19
  34. data/lib/riffer/guardrails.rb +2 -4
  35. data/lib/riffer/helpers/call_or_value.rb +4 -3
  36. data/lib/riffer/helpers/class_name_converter.rb +3 -1
  37. data/lib/riffer/helpers/dependencies.rb +5 -7
  38. data/lib/riffer/helpers.rb +0 -5
  39. data/lib/riffer/mcp/authenticated_tool.rb +9 -9
  40. data/lib/riffer/mcp/client.rb +12 -17
  41. data/lib/riffer/mcp/manifest.rb +13 -10
  42. data/lib/riffer/mcp/registration.rb +2 -11
  43. data/lib/riffer/mcp/registry.rb +44 -52
  44. data/lib/riffer/mcp/search_tool.rb +53 -0
  45. data/lib/riffer/mcp/tool_factory.rb +13 -18
  46. data/lib/riffer/mcp.rb +12 -17
  47. data/lib/riffer/messages/assistant.rb +2 -9
  48. data/lib/riffer/messages/base.rb +46 -16
  49. data/lib/riffer/messages/file_part.rb +32 -24
  50. data/lib/riffer/messages/system.rb +0 -5
  51. data/lib/riffer/messages/tool.rb +0 -10
  52. data/lib/riffer/messages/user.rb +0 -10
  53. data/lib/riffer/messages.rb +0 -7
  54. data/lib/riffer/params/boolean.rb +2 -4
  55. data/lib/riffer/params/param.rb +28 -39
  56. data/lib/riffer/params.rb +9 -21
  57. data/lib/riffer/providers/amazon_bedrock.rb +42 -28
  58. data/lib/riffer/providers/anthropic.rb +4 -9
  59. data/lib/riffer/providers/azure_open_ai.rb +3 -19
  60. data/lib/riffer/providers/base.rb +13 -26
  61. data/lib/riffer/providers/gemini.rb +4 -4
  62. data/lib/riffer/providers/mock.rb +6 -26
  63. data/lib/riffer/providers/open_ai.rb +6 -8
  64. data/lib/riffer/providers/open_router.rb +4 -10
  65. data/lib/riffer/providers/repository.rb +4 -3
  66. data/lib/riffer/providers/token_usage.rb +9 -20
  67. data/lib/riffer/providers.rb +0 -8
  68. data/lib/riffer/runner/fibers.rb +10 -16
  69. data/lib/riffer/runner/sequential.rb +1 -4
  70. data/lib/riffer/runner/threaded.rb +3 -14
  71. data/lib/riffer/runner.rb +2 -15
  72. data/lib/riffer/skills/activate_tool.rb +2 -11
  73. data/lib/riffer/skills/adapter.rb +4 -22
  74. data/lib/riffer/skills/backend.rb +7 -21
  75. data/lib/riffer/skills/config.rb +10 -31
  76. data/lib/riffer/skills/context.rb +5 -20
  77. data/lib/riffer/skills/filesystem_backend.rb +7 -25
  78. data/lib/riffer/skills/frontmatter.rb +10 -28
  79. data/lib/riffer/skills/markdown_adapter.rb +2 -9
  80. data/lib/riffer/skills/xml_adapter.rb +2 -8
  81. data/lib/riffer/stream_events/base.rb +1 -6
  82. data/lib/riffer/stream_events/guardrail_modification.rb +1 -8
  83. data/lib/riffer/stream_events/guardrail_tripwire.rb +1 -8
  84. data/lib/riffer/stream_events/interrupt.rb +4 -7
  85. data/lib/riffer/stream_events/reasoning_delta.rb +2 -4
  86. data/lib/riffer/stream_events/reasoning_done.rb +2 -4
  87. data/lib/riffer/stream_events/skill_activation.rb +2 -4
  88. data/lib/riffer/stream_events/text_delta.rb +0 -2
  89. data/lib/riffer/stream_events/text_done.rb +1 -3
  90. data/lib/riffer/stream_events/token_usage_done.rb +1 -8
  91. data/lib/riffer/stream_events/tool_call_delta.rb +2 -3
  92. data/lib/riffer/stream_events/tool_call_done.rb +1 -3
  93. data/lib/riffer/stream_events/web_search_done.rb +1 -3
  94. data/lib/riffer/stream_events/web_search_status.rb +2 -3
  95. data/lib/riffer/stream_events.rb +0 -10
  96. data/lib/riffer/tool.rb +6 -13
  97. data/lib/riffer/tools/response.rb +8 -4
  98. data/lib/riffer/tools/runtime/fibers.rb +0 -3
  99. data/lib/riffer/tools/runtime/inline.rb +1 -4
  100. data/lib/riffer/tools/runtime/threaded.rb +0 -2
  101. data/lib/riffer/tools/runtime.rb +5 -38
  102. data/lib/riffer/tools/toolable.rb +5 -16
  103. data/lib/riffer/tools.rb +0 -4
  104. data/lib/riffer/version.rb +1 -1
  105. data/lib/riffer.rb +7 -8
  106. data/sig/generated/riffer/agent/config.rbs +29 -46
  107. data/sig/generated/riffer/agent/context.rbs +40 -48
  108. data/sig/generated/riffer/agent/response.rbs +4 -20
  109. data/sig/generated/riffer/agent/run.rbs +12 -61
  110. data/sig/generated/riffer/agent/serializer.rbs +28 -81
  111. data/sig/generated/riffer/agent/session/repair.rbs +12 -40
  112. data/sig/generated/riffer/agent/session.rbs +25 -67
  113. data/sig/generated/riffer/agent/structured_output/result.rbs +2 -10
  114. data/sig/generated/riffer/agent/structured_output.rbs +5 -12
  115. data/sig/generated/riffer/agent.rbs +62 -191
  116. data/sig/generated/riffer/config.rbs +34 -100
  117. data/sig/generated/riffer/evals/evaluator.rbs +7 -27
  118. data/sig/generated/riffer/evals/evaluator_runner.rbs +9 -19
  119. data/sig/generated/riffer/evals/judge.rbs +4 -24
  120. data/sig/generated/riffer/evals/result.rbs +1 -17
  121. data/sig/generated/riffer/evals/run_result.rbs +0 -10
  122. data/sig/generated/riffer/evals/scenario_result.rbs +0 -13
  123. data/sig/generated/riffer/evals.rbs +0 -6
  124. data/sig/generated/riffer/guardrail.rbs +4 -27
  125. data/sig/generated/riffer/guardrails/modification.rbs +0 -10
  126. data/sig/generated/riffer/guardrails/result.rbs +3 -30
  127. data/sig/generated/riffer/guardrails/runner.rbs +5 -22
  128. data/sig/generated/riffer/guardrails/tripwire.rbs +1 -19
  129. data/sig/generated/riffer/guardrails.rbs +2 -4
  130. data/sig/generated/riffer/helpers/call_or_value.rbs +4 -3
  131. data/sig/generated/riffer/helpers/class_name_converter.rbs +1 -1
  132. data/sig/generated/riffer/helpers/dependencies.rbs +3 -7
  133. data/sig/generated/riffer/helpers.rbs +0 -5
  134. data/sig/generated/riffer/mcp/authenticated_tool.rbs +5 -4
  135. data/sig/generated/riffer/mcp/client.rbs +10 -16
  136. data/sig/generated/riffer/mcp/manifest.rbs +9 -9
  137. data/sig/generated/riffer/mcp/registration.rbs +2 -10
  138. data/sig/generated/riffer/mcp/registry.rbs +11 -18
  139. data/sig/generated/riffer/mcp/search_tool.rbs +26 -0
  140. data/sig/generated/riffer/mcp/tool_factory.rbs +10 -15
  141. data/sig/generated/riffer/mcp.rbs +10 -17
  142. data/sig/generated/riffer/messages/assistant.rbs +2 -8
  143. data/sig/generated/riffer/messages/base.rbs +11 -16
  144. data/sig/generated/riffer/messages/file_part.rbs +13 -23
  145. data/sig/generated/riffer/messages/system.rbs +0 -4
  146. data/sig/generated/riffer/messages/tool.rbs +0 -9
  147. data/sig/generated/riffer/messages/user.rbs +0 -9
  148. data/sig/generated/riffer/messages.rbs +0 -7
  149. data/sig/generated/riffer/params/boolean.rbs +2 -4
  150. data/sig/generated/riffer/params/param.rbs +21 -39
  151. data/sig/generated/riffer/params.rbs +9 -21
  152. data/sig/generated/riffer/providers/amazon_bedrock.rbs +21 -25
  153. data/sig/generated/riffer/providers/anthropic.rbs +2 -7
  154. data/sig/generated/riffer/providers/azure_open_ai.rbs +3 -18
  155. data/sig/generated/riffer/providers/base.rbs +9 -25
  156. data/sig/generated/riffer/providers/gemini.rbs +0 -2
  157. data/sig/generated/riffer/providers/mock.rbs +6 -26
  158. data/sig/generated/riffer/providers/open_ai.rbs +1 -5
  159. data/sig/generated/riffer/providers/open_router.rbs +4 -10
  160. data/sig/generated/riffer/providers/repository.rbs +2 -3
  161. data/sig/generated/riffer/providers/token_usage.rbs +6 -16
  162. data/sig/generated/riffer/providers.rbs +0 -8
  163. data/sig/generated/riffer/runner/fibers.rbs +8 -15
  164. data/sig/generated/riffer/runner/sequential.rbs +1 -3
  165. data/sig/generated/riffer/runner/threaded.rbs +3 -13
  166. data/sig/generated/riffer/runner.rbs +2 -14
  167. data/sig/generated/riffer/skills/activate_tool.rbs +2 -11
  168. data/sig/generated/riffer/skills/adapter.rbs +4 -22
  169. data/sig/generated/riffer/skills/backend.rbs +7 -21
  170. data/sig/generated/riffer/skills/config.rbs +10 -31
  171. data/sig/generated/riffer/skills/context.rbs +5 -20
  172. data/sig/generated/riffer/skills/filesystem_backend.rbs +7 -24
  173. data/sig/generated/riffer/skills/frontmatter.rbs +10 -27
  174. data/sig/generated/riffer/skills/markdown_adapter.rbs +2 -9
  175. data/sig/generated/riffer/skills/xml_adapter.rbs +2 -8
  176. data/sig/generated/riffer/stream_events/base.rbs +1 -6
  177. data/sig/generated/riffer/stream_events/guardrail_modification.rbs +1 -8
  178. data/sig/generated/riffer/stream_events/guardrail_tripwire.rbs +1 -8
  179. data/sig/generated/riffer/stream_events/interrupt.rbs +4 -7
  180. data/sig/generated/riffer/stream_events/reasoning_delta.rbs +2 -4
  181. data/sig/generated/riffer/stream_events/reasoning_done.rbs +2 -4
  182. data/sig/generated/riffer/stream_events/skill_activation.rbs +2 -4
  183. data/sig/generated/riffer/stream_events/text_delta.rbs +0 -2
  184. data/sig/generated/riffer/stream_events/text_done.rbs +1 -3
  185. data/sig/generated/riffer/stream_events/token_usage_done.rbs +1 -7
  186. data/sig/generated/riffer/stream_events/tool_call_delta.rbs +2 -3
  187. data/sig/generated/riffer/stream_events/tool_call_done.rbs +1 -3
  188. data/sig/generated/riffer/stream_events/web_search_done.rbs +1 -3
  189. data/sig/generated/riffer/stream_events/web_search_status.rbs +2 -3
  190. data/sig/generated/riffer/stream_events.rbs +0 -10
  191. data/sig/generated/riffer/tool.rbs +5 -12
  192. data/sig/generated/riffer/tools/response.rbs +6 -4
  193. data/sig/generated/riffer/tools/runtime/fibers.rbs +0 -3
  194. data/sig/generated/riffer/tools/runtime/inline.rbs +1 -3
  195. data/sig/generated/riffer/tools/runtime/threaded.rbs +0 -2
  196. data/sig/generated/riffer/tools/runtime.rbs +5 -37
  197. data/sig/generated/riffer/tools/toolable.rbs +4 -14
  198. data/sig/generated/riffer/tools.rbs +0 -4
  199. data/sig/generated/riffer.rbs +5 -4
  200. data/sig/manual/riffer/agent/session/repair.rbs +5 -0
  201. data/sig/manual/riffer/evals/evaluator_runner.rbs +5 -0
  202. data/sig/manual/riffer/helpers/class_name_converter.rbs +5 -0
  203. data/sig/manual/riffer/helpers/dependencies.rbs +5 -0
  204. data/sig/manual/riffer/mcp/authenticated_tool.rbs +5 -0
  205. data/sig/manual/riffer/mcp/registry.rbs +5 -0
  206. data/sig/manual/riffer/mcp/tool_factory.rbs +5 -0
  207. data/sig/manual/riffer/mcp.rbs +5 -0
  208. data/sig/manual/riffer/providers/repository.rbs +5 -0
  209. data/sig/manual/riffer.rbs +5 -0
  210. metadata +17 -9
  211. data/.agents/rdoc.md +0 -69
  212. data/lib/riffer/messages/converter.rb +0 -90
  213. data/sig/generated/riffer/messages/converter.rbs +0 -33
  214. data/sig/manual/riffer/tools/toolable.rbs +0 -6
@@ -1,11 +1,8 @@
1
1
  # Generated from lib/riffer/skills/frontmatter.rb with RBS::Inline
2
2
 
3
- # Immutable value object holding parsed SKILL.md YAML frontmatter.
4
- #
5
- # Required fields per the Agent Skills spec: +name+ and +description+.
6
- # All unrecognized top-level frontmatter keys are merged into +metadata+.
7
- #
8
- # frontmatter, body = Riffer::Skills::Frontmatter.parse(raw_content)
3
+ # Immutable value object holding parsed SKILL.md YAML frontmatter. Required
4
+ # fields: +name+ and +description+; unrecognized top-level keys are merged into
5
+ # +metadata+.
9
6
  class Riffer::Skills::Frontmatter
10
7
  NAME_PATTERN: Regexp
11
8
 
@@ -19,26 +16,19 @@ class Riffer::Skills::Frontmatter
19
16
  # The skill description (1-1024 chars).
20
17
  attr_reader description: String
21
18
 
22
- # Arbitrary key-value metadata from the spec's +metadata+ field
23
- # and any unrecognized top-level frontmatter keys.
19
+ # Metadata from the spec's +metadata+ field plus any unrecognized top-level
20
+ # keys.
24
21
  attr_reader metadata: Hash[Symbol, untyped]
25
22
 
26
- # Parses a raw SKILL.md string into a Frontmatter and body.
27
- #
28
- # Splits on YAML front matter delimiters (+---+). Unrecognized
29
- # top-level keys become +metadata+. Available to custom backends
30
- # so they don't need to reimplement parsing.
31
- #
32
- # Raises Riffer::ArgumentError if frontmatter is invalid.
33
- #
23
+ # Parses a raw SKILL.md string into a +[Frontmatter, body]+ pair — public so
24
+ # custom backends needn't reimplement parsing. Raises Riffer::ArgumentError
25
+ # if the frontmatter is invalid.
34
26
  # --
35
27
  # : (String) -> [Riffer::Skills::Frontmatter, String]
36
28
  def self.parse: (String) -> [ Riffer::Skills::Frontmatter, String ]
37
29
 
38
30
  # Parses only the frontmatter from a raw SKILL.md string, ignoring the body.
39
- #
40
- # Raises Riffer::ArgumentError if frontmatter is invalid.
41
- #
31
+ # Raises Riffer::ArgumentError if the frontmatter is invalid.
42
32
  # --
43
33
  # : (String) -> Riffer::Skills::Frontmatter
44
34
  def self.parse_frontmatter: (String) -> Riffer::Skills::Frontmatter
@@ -47,14 +37,7 @@ class Riffer::Skills::Frontmatter
47
37
  # : (String) -> [Hash[Symbol, untyped], String]
48
38
  def self.split_frontmatter: (String) -> [ Hash[Symbol, untyped], String ]
49
39
 
50
- # Creates a new Frontmatter.
51
- #
52
- # [name] the skill name (must match +[a-z0-9]([a-z0-9-]*[a-z0-9])?+, 1-64 chars).
53
- # [description] the skill description (1-1024 chars).
54
- # [metadata] optional metadata hash.
55
- #
56
- # Raises Riffer::ArgumentError if name or description is invalid.
57
- #
40
+ # Raises Riffer::ArgumentError if +name+ or +description+ is invalid.
58
41
  # --
59
42
  # : (name: String, description: String, ?metadata: Hash[Symbol, untyped]) -> void
60
43
  def initialize: (name: String, description: String, ?metadata: Hash[Symbol, untyped]) -> void
@@ -1,16 +1,9 @@
1
1
  # Generated from lib/riffer/skills/markdown_adapter.rb with RBS::Inline
2
2
 
3
- # Default Markdown skill adapter.
4
- #
5
- # Renders a skill catalog as Markdown for the system prompt.
6
- # Used by OpenAI, Amazon Bedrock, and other providers.
7
- #
8
- # See Riffer::Skills::XmlAdapter for the Anthropic/Claude variant.
3
+ # Default skill adapter — renders a skill catalog as Markdown for the system
4
+ # prompt.
9
5
  class Riffer::Skills::MarkdownAdapter < Riffer::Skills::Adapter
10
6
  # Renders a skill catalog as Markdown.
11
- #
12
- # [skills] array of Frontmatter objects to render.
13
- #
14
7
  # --
15
8
  # : (Array[Riffer::Skills::Frontmatter]) -> String
16
9
  def render_catalog: (Array[Riffer::Skills::Frontmatter]) -> String
@@ -1,15 +1,9 @@
1
1
  # Generated from lib/riffer/skills/xml_adapter.rb with RBS::Inline
2
2
 
3
- # XML skill adapter, optimized for Anthropic/Claude.
4
- #
5
- # Renders a skill catalog as XML for the system prompt.
6
- #
7
- # See Riffer::Skills::MarkdownAdapter for the default variant.
3
+ # Renders a skill catalog as XML for the system prompt, optimized for
4
+ # Anthropic/Claude.
8
5
  class Riffer::Skills::XmlAdapter < Riffer::Skills::Adapter
9
6
  # Renders a skill catalog as XML.
10
- #
11
- # [skills] array of Frontmatter objects to render.
12
- #
13
7
  # --
14
8
  # : (Array[Riffer::Skills::Frontmatter]) -> String
15
9
  def render_catalog: (Array[Riffer::Skills::Frontmatter]) -> String
@@ -1,8 +1,6 @@
1
1
  # Generated from lib/riffer/stream_events/base.rb with RBS::Inline
2
2
 
3
- # Base class for all streaming events in the Riffer framework.
4
- #
5
- # Subclasses must implement the +to_h+ method.
3
+ # Base class for all streaming events. Subclasses must implement +to_h+.
6
4
  class Riffer::StreamEvents::Base
7
5
  # The message role (typically :assistant).
8
6
  attr_reader role: Symbol
@@ -12,9 +10,6 @@ class Riffer::StreamEvents::Base
12
10
  def initialize: (?role: Symbol) -> void
13
11
 
14
12
  # Converts the event to a hash.
15
- #
16
- # Raises NotImplementedError if not implemented by subclass.
17
- #
18
13
  # --
19
14
  # : () -> Hash[Symbol, untyped]
20
15
  def to_h: () -> Hash[Symbol, untyped]
@@ -1,17 +1,10 @@
1
1
  # Generated from lib/riffer/stream_events/guardrail_modification.rb with RBS::Inline
2
2
 
3
- # Represents a guardrail modification event during streaming.
4
- #
5
- # Emitted when a guardrail transforms data during the streaming pipeline.
3
+ # Emitted when a guardrail transforms data during streaming.
6
4
  class Riffer::StreamEvents::GuardrailModification < Riffer::StreamEvents::Base
7
5
  # The modification record.
8
6
  attr_reader modification: Riffer::Guardrails::Modification
9
7
 
10
- # Creates a new guardrail modification stream event.
11
- #
12
- # [modification] the modification details.
13
- # [role] the message role (defaults to :assistant).
14
- #
15
8
  # --
16
9
  # : (Riffer::Guardrails::Modification, ?role: Symbol) -> void
17
10
  def initialize: (Riffer::Guardrails::Modification, ?role: Symbol) -> void
@@ -1,17 +1,10 @@
1
1
  # Generated from lib/riffer/stream_events/guardrail_tripwire.rb with RBS::Inline
2
2
 
3
- # Represents a guardrail tripwire event during streaming.
4
- #
5
- # Emitted when a guardrail blocks execution during the streaming pipeline.
3
+ # Emitted when a guardrail blocks execution during streaming.
6
4
  class Riffer::StreamEvents::GuardrailTripwire < Riffer::StreamEvents::Base
7
5
  # The tripwire containing block details.
8
6
  attr_reader tripwire: Riffer::Guardrails::Tripwire
9
7
 
10
- # Creates a new tripwire stream event.
11
- #
12
- # [tripwire] the tripwire details.
13
- # [role] the message role (defaults to :assistant).
14
- #
15
8
  # --
16
9
  # : (Riffer::Guardrails::Tripwire, ?role: Symbol) -> void
17
10
  def initialize: (Riffer::Guardrails::Tripwire, ?role: Symbol) -> void
@@ -1,15 +1,13 @@
1
1
  # Generated from lib/riffer/stream_events/interrupt.rb with RBS::Inline
2
2
 
3
- # Represents an interrupt event during streaming.
4
- #
5
- # Emitted when a callback interrupts the agent loop via +throw :riffer_interrupt+.
3
+ # Represents an interrupt during streaming, fired when a callback throws
4
+ # +:riffer_interrupt+.
6
5
  class Riffer::StreamEvents::Interrupt < Riffer::StreamEvents::Base
7
6
  # The reason provided with the interrupt, if any.
8
7
  attr_reader reason: (String | Symbol)?
9
8
 
10
- # Call ids of tool_use blocks that riffer filled with placeholder
11
- # results when the interrupt fired. Populated only when
12
- # +Riffer.config.experimental_history_healing+ is on.
9
+ # Call ids of tool_use blocks riffer filled with placeholder results when the
10
+ # interrupt fired (only when history healing is on).
13
11
  attr_reader healed_tool_call_ids: Array[String]
14
12
 
15
13
  # --
@@ -17,7 +15,6 @@ class Riffer::StreamEvents::Interrupt < Riffer::StreamEvents::Base
17
15
  def initialize: (?reason: (String | Symbol)?, ?healed_tool_call_ids: Array[String]) -> void
18
16
 
19
17
  # Converts the event to a hash.
20
- #
21
18
  # --
22
19
  # : () -> Hash[Symbol, untyped]
23
20
  def to_h: () -> Hash[Symbol, untyped]
@@ -1,9 +1,7 @@
1
1
  # Generated from lib/riffer/stream_events/reasoning_delta.rb with RBS::Inline
2
2
 
3
- # Represents an incremental reasoning chunk during streaming.
4
- #
5
- # Emitted when the LLM produces reasoning/thinking content incrementally.
6
- # Only available with providers that support reasoning (e.g., OpenAI with reasoning option).
3
+ # Represents an incremental reasoning chunk during streaming; only emitted by
4
+ # providers that support reasoning (e.g. OpenAI with the reasoning option).
7
5
  class Riffer::StreamEvents::ReasoningDelta < Riffer::StreamEvents::Base
8
6
  # The incremental reasoning content.
9
7
  attr_reader content: String
@@ -1,9 +1,7 @@
1
1
  # Generated from lib/riffer/stream_events/reasoning_done.rb with RBS::Inline
2
2
 
3
- # Represents completion of reasoning during streaming.
4
- #
5
- # Emitted when the LLM has finished producing reasoning/thinking content.
6
- # Only available with providers that support reasoning (e.g., OpenAI with reasoning option).
3
+ # Represents completed reasoning during streaming; only emitted by providers
4
+ # that support reasoning (e.g. OpenAI with the reasoning option).
7
5
  class Riffer::StreamEvents::ReasoningDone < Riffer::StreamEvents::Base
8
6
  # The complete reasoning content.
9
7
  attr_reader content: String
@@ -1,9 +1,7 @@
1
1
  # Generated from lib/riffer/stream_events/skill_activation.rb with RBS::Inline
2
2
 
3
- # Emitted when a skill is activated during streaming.
4
- #
5
- # Fired by the +on_activate+ callback on Riffer::Skills::Context
6
- # when the LLM calls the skill activation tool.
3
+ # Emitted when a skill is activated during streaming, via the +on_activate+
4
+ # callback when the LLM calls the activation tool.
7
5
  class Riffer::StreamEvents::SkillActivation < Riffer::StreamEvents::Base
8
6
  # The activated skill name.
9
7
  attr_reader name: String
@@ -1,8 +1,6 @@
1
1
  # Generated from lib/riffer/stream_events/text_delta.rb with RBS::Inline
2
2
 
3
3
  # Represents an incremental text chunk during streaming.
4
- #
5
- # Emitted when the LLM produces text content incrementally.
6
4
  class Riffer::StreamEvents::TextDelta < Riffer::StreamEvents::Base
7
5
  # The incremental text content.
8
6
  attr_reader content: String
@@ -1,8 +1,6 @@
1
1
  # Generated from lib/riffer/stream_events/text_done.rb with RBS::Inline
2
2
 
3
- # Represents completion of text generation during streaming.
4
- #
5
- # Emitted when the LLM has finished producing text content.
3
+ # Represents completed text generation during streaming.
6
4
  class Riffer::StreamEvents::TextDone < Riffer::StreamEvents::Base
7
5
  # The complete text content.
8
6
  attr_reader content: String
@@ -1,12 +1,6 @@
1
1
  # Generated from lib/riffer/stream_events/token_usage_done.rb with RBS::Inline
2
2
 
3
- # Represents completion of token usage tracking during streaming.
4
- #
5
- # Emitted when the LLM has finished and token usage data is available.
6
- #
7
- # event.token_usage.input_tokens # => 100
8
- # event.token_usage.output_tokens # => 50
9
- # event.token_usage.total_tokens # => 150
3
+ # Final token usage for the response, emitted when the LLM finishes.
10
4
  class Riffer::StreamEvents::TokenUsageDone < Riffer::StreamEvents::Base
11
5
  # The token usage data for this response.
12
6
  attr_reader token_usage: Riffer::Providers::TokenUsage
@@ -1,8 +1,7 @@
1
1
  # Generated from lib/riffer/stream_events/tool_call_delta.rb with RBS::Inline
2
2
 
3
- # Riffer::StreamEvents::ToolCallDelta represents an incremental tool call chunk during streaming.
4
- #
5
- # Emitted when the LLM is building a tool call, containing partial argument data.
3
+ # Represents an incremental tool call chunk (partial argument data) during
4
+ # streaming.
6
5
  class Riffer::StreamEvents::ToolCallDelta < Riffer::StreamEvents::Base
7
6
  # The tool call item identifier.
8
7
  attr_reader item_id: String
@@ -1,8 +1,6 @@
1
1
  # Generated from lib/riffer/stream_events/tool_call_done.rb with RBS::Inline
2
2
 
3
- # Riffer::StreamEvents::ToolCallDone represents a completed tool call during streaming.
4
- #
5
- # Emitted when the LLM has finished building a tool call with complete arguments.
3
+ # Represents a completed tool call during streaming.
6
4
  class Riffer::StreamEvents::ToolCallDone < Riffer::StreamEvents::Base
7
5
  # The tool call item identifier.
8
6
  attr_reader item_id: String
@@ -1,8 +1,6 @@
1
1
  # Generated from lib/riffer/stream_events/web_search_done.rb with RBS::Inline
2
2
 
3
- # Represents the result of a web search during streaming.
4
- #
5
- # Emitted when the LLM has finished a server-side web search.
3
+ # The result of a completed server-side web search during streaming.
6
4
  class Riffer::StreamEvents::WebSearchDone < Riffer::StreamEvents::Base
7
5
  # The search query used.
8
6
  attr_reader query: String
@@ -1,8 +1,7 @@
1
1
  # Generated from lib/riffer/stream_events/web_search_status.rb with RBS::Inline
2
2
 
3
- # Represents a web search status notification during streaming.
4
- #
5
- # Emitted when the LLM performs a server-side web search and its status changes.
3
+ # A web search status notification, emitted as a server-side web search
4
+ # progresses.
6
5
  class Riffer::StreamEvents::WebSearchStatus < Riffer::StreamEvents::Base
7
6
  # The web search status ("in_progress", "searching", "completed", "open_page").
8
7
  attr_reader status: String
@@ -1,14 +1,4 @@
1
1
  # Generated from lib/riffer/stream_events.rb with RBS::Inline
2
2
 
3
- # Namespace for streaming event types in the Riffer framework.
4
- #
5
- # When streaming responses, these events are yielded to represent incremental updates:
6
- # - Riffer::StreamEvents::TextDelta - Incremental text content
7
- # - Riffer::StreamEvents::TextDone - Complete text content
8
- # - Riffer::StreamEvents::ToolCallDelta - Incremental tool call arguments
9
- # - Riffer::StreamEvents::ToolCallDone - Complete tool call
10
- # - Riffer::StreamEvents::ReasoningDelta - Incremental reasoning content
11
- # - Riffer::StreamEvents::ReasoningDone - Complete reasoning content
12
- # - Riffer::StreamEvents::SkillActivation - Skill activated during streaming
13
3
  module Riffer::StreamEvents
14
4
  end
@@ -1,11 +1,7 @@
1
1
  # Generated from lib/riffer/tool.rb with RBS::Inline
2
2
 
3
- # Riffer::Tool is the base class for all tools in the Riffer framework.
4
- #
5
- # Provides a DSL for defining tool description and parameters.
6
- # Subclasses must implement the +call+ method.
7
- #
8
- # See Riffer::Agent.
3
+ # Base class for all tools in the Riffer framework. Subclasses must implement
4
+ # the +call+ method.
9
5
  #
10
6
  # class WeatherLookupTool < Riffer::Tool
11
7
  # description "Provides current weather information for a specified city."
@@ -23,26 +19,23 @@ class Riffer::Tool
23
19
  extend Riffer::Tools::Toolable
24
20
 
25
21
  # Executes the tool with the given arguments.
26
- #
27
- # Raises NotImplementedError if not implemented by subclass.
28
- #
29
22
  # --
30
23
  # : (context: Riffer::Agent::Context?, **untyped) -> Riffer::Tools::Response
31
24
  def call: (context: Riffer::Agent::Context?, **untyped) -> Riffer::Tools::Response
32
25
 
33
- # Creates a text response. Shorthand for Riffer::Tools::Response.text.
26
+ # Creates a text response.
34
27
  #
35
28
  # --
36
29
  # : (untyped) -> Riffer::Tools::Response
37
30
  def text: (untyped) -> Riffer::Tools::Response
38
31
 
39
- # Creates a JSON response. Shorthand for Riffer::Tools::Response.json.
32
+ # Creates a JSON response.
40
33
  #
41
34
  # --
42
35
  # : (untyped) -> Riffer::Tools::Response
43
36
  def json: (untyped) -> Riffer::Tools::Response
44
37
 
45
- # Creates an error response. Shorthand for Riffer::Tools::Response.error.
38
+ # Creates an error response.
46
39
  #
47
40
  # --
48
41
  # : (String, ?type: Symbol) -> Riffer::Tools::Response
@@ -1,9 +1,6 @@
1
1
  # Generated from lib/riffer/tools/response.rb with RBS::Inline
2
2
 
3
- # Riffer::Tools::Response represents the result of a tool execution.
4
- #
5
- # All tools must return a Response object from their +call+ method.
6
- # Use +Response.success+ for successful results and +Response.error+ for failures.
3
+ # Represents the result of a tool execution; every tool's +call+ must return one.
7
4
  #
8
5
  # class MyTool < Riffer::Tool
9
6
  # def call(context:, **kwargs)
@@ -18,10 +15,13 @@ class Riffer::Tools::Response
18
15
 
19
16
  VALID_FORMATS: Array[Symbol]
20
17
 
18
+ # The response content.
21
19
  attr_reader content: String
22
20
 
21
+ # The error message, or +nil+ on success.
23
22
  attr_reader error_message: String?
24
23
 
24
+ # The error type, or +nil+ on success.
25
25
  attr_reader error_type: Symbol?
26
26
 
27
27
  # Creates a success response.
@@ -50,10 +50,12 @@ class Riffer::Tools::Response
50
50
  # : (String, ?type: Symbol) -> Riffer::Tools::Response
51
51
  def self.error: (String, ?type: Symbol) -> Riffer::Tools::Response
52
52
 
53
+ # Returns true if the tool execution succeeded.
53
54
  # --
54
55
  # : () -> bool
55
56
  def success?: () -> bool
56
57
 
58
+ # Returns true if the tool execution failed.
57
59
  # --
58
60
  # : () -> bool
59
61
  def error?: () -> bool
@@ -6,9 +6,6 @@
6
6
  # tool_runtime Riffer::Tools::Runtime::Fibers
7
7
  # end
8
8
  class Riffer::Tools::Runtime::Fibers < Riffer::Tools::Runtime
9
- # [max_concurrency] maximum number of tool calls to execute simultaneously.
10
- # When +nil+, all tool calls run as fibers without limit.
11
- #
12
9
  # --
13
10
  # : (?max_concurrency: Integer?) -> void
14
11
  def initialize: (?max_concurrency: Integer?) -> void
@@ -1,8 +1,6 @@
1
1
  # Generated from lib/riffer/tools/runtime/inline.rb with RBS::Inline
2
2
 
3
- # Executes tool calls sequentially in the current thread.
4
- #
5
- # This is the default tool runtime used when no runtime is configured.
3
+ # Executes tool calls sequentially in the current thread — the default runtime.
6
4
  class Riffer::Tools::Runtime::Inline < Riffer::Tools::Runtime
7
5
  # --
8
6
  # : () -> void
@@ -8,8 +8,6 @@
8
8
  class Riffer::Tools::Runtime::Threaded < Riffer::Tools::Runtime
9
9
  DEFAULT_MAX_CONCURRENCY: Integer
10
10
 
11
- # [max_concurrency] maximum number of tool calls to execute simultaneously.
12
- #
13
11
  # --
14
12
  # : (?max_concurrency: Integer) -> void
15
13
  def initialize: (?max_concurrency: Integer) -> void
@@ -1,45 +1,22 @@
1
1
  # Generated from lib/riffer/tools/runtime.rb with RBS::Inline
2
2
 
3
- # Riffer::Tools::Runtime handles tool call execution for an agent.
4
- #
5
- # Composes with a Riffer::Runner for concurrency control and provides
6
- # +execute+ as the sole public entry point.
7
- #
8
- # Subclass and override +dispatch_tool_call+ to customize how individual
9
- # tool calls are dispatched (e.g., HTTP, gRPC).
10
- #
11
- # runtime = Riffer::Tools::Runtime::Inline.new
12
- # results = runtime.execute(tool_calls, tools: tools, context: context)
3
+ # Handles tool call execution for an agent, composing with a Riffer::Runner for
4
+ # concurrency. Subclass and override +dispatch_tool_call+ to customize dispatch
5
+ # (e.g. HTTP, gRPC).
13
6
  class Riffer::Tools::Runtime
14
7
  @runner: Riffer::Runner
15
8
 
16
- # [runner] the concurrency runner to use for batch execution.
17
- #
18
- # Subclasses must provide a runner; instantiating Riffer::Tools::Runtime directly
19
- # raises +NotImplementedError+.
20
- #
21
9
  # --
22
10
  # : (runner: Riffer::Runner) -> void
23
11
  def initialize: (runner: Riffer::Runner) -> void
24
12
 
25
13
  # Executes a batch of tool calls, returning <tt>[tool_call, response]</tt> pairs.
26
- #
27
- # [tool_calls] the tool calls to execute.
28
- # [tools] the resolved tool classes.
29
- # [context] the context hash.
30
- # [assistant_message] the assistant message that produced these tool
31
- # calls, when known. Forwarded to +around_tool_call+ and
32
- # +dispatch_tool_call+ so subclasses can access it (e.g. for
33
- # instrumentation that needs the accompanying assistant text).
34
- #
35
14
  # --
36
15
  # : (Array[Riffer::Messages::Assistant::ToolCall], tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Array[[Riffer::Messages::Assistant::ToolCall, Riffer::Tools::Response]]
37
16
  def execute: (Array[Riffer::Messages::Assistant::ToolCall], tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Array[[ Riffer::Messages::Assistant::ToolCall, Riffer::Tools::Response ]]
38
17
 
39
- # Hook that wraps each tool call execution. Override in subclasses
40
- # to customize. Must +yield+ to continue execution.
41
- #
42
- # The default implementation simply yields.
18
+ # Hook wrapping each tool call; override in subclasses to instrument or
19
+ # customize. Must +yield+ to continue.
43
20
  #
44
21
  # class InstrumentedRuntime < Riffer::Tools::Runtime::Inline
45
22
  # private
@@ -58,15 +35,6 @@ class Riffer::Tools::Runtime
58
35
 
59
36
  private
60
37
 
61
- # Dispatches a single tool call. Override in subclasses to change
62
- # how individual tools are invoked (e.g., HTTP, gRPC).
63
- #
64
- # [tool_call] the tool call to execute.
65
- # [tools] the resolved tool classes.
66
- # [context] the context hash.
67
- # [assistant_message] the assistant message that produced this tool
68
- # call, when known.
69
- #
70
38
  # --
71
39
  # : (Riffer::Messages::Assistant::ToolCall, tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Riffer::Tools::Response
72
40
  def dispatch_tool_call: (Riffer::Messages::Assistant::ToolCall, tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Riffer::Tools::Response
@@ -1,15 +1,8 @@
1
1
  # Generated from lib/riffer/tools/toolable.rb with RBS::Inline
2
2
 
3
- # Riffer::Tools::Toolable provides the shared class-level DSL for anything that can
4
- # present as a tool to an LLM tools today, and subagents/workflows in the
5
- # future.
6
- #
7
- # Extend this module to make a class discoverable as a tool by LLM providers.
8
- # Provides identifier, description, params, timeout, and JSON schema
9
- # generation.
10
- #
11
- # Instance-level execution concerns (+call+, +call_with_validation+, etc.)
12
- # are NOT part of Toolable — those belong on Riffer::Tool.
3
+ # Shared class-level DSL for anything that presents as a tool to an LLM. Extend
4
+ # it to make a class discoverable as a tool; instance-level execution (+call+,
5
+ # +call_with_validation+) lives on Riffer::Tool instead.
13
6
  #
14
7
  # class MyTool
15
8
  # extend Riffer::Tools::Toolable
@@ -83,10 +76,7 @@ module Riffer::Tools::Toolable
83
76
  # : (?strict: bool) -> Hash[Symbol, untyped]
84
77
  def parameters_schema: (?strict: bool) -> Hash[Symbol, untyped]
85
78
 
86
- # Returns the kind of toolable entity.
87
- #
88
- # Defaults to +:tool+. Extensible to +:agent+, +:workflow+, etc.
89
- #
79
+ # Returns the kind of toolable entity; defaults to +:tool+.
90
80
  # --
91
81
  # : (?Symbol?) -> Symbol
92
82
  def kind: (?Symbol?) -> Symbol
@@ -1,8 +1,4 @@
1
1
  # Generated from lib/riffer/tools.rb with RBS::Inline
2
2
 
3
- # Namespace for tool-related classes in the Riffer framework.
4
- #
5
- # Contains:
6
- # - Riffer::Tools::Response - Required return type for tool execution
7
3
  module Riffer::Tools
8
4
  end
@@ -1,7 +1,7 @@
1
1
  # Generated from lib/riffer.rb with RBS::Inline
2
2
 
3
3
  module Riffer
4
- self.@config: Riffer::Config?
4
+ @config: Riffer::Config?
5
5
 
6
6
  # Base error class for Riffer.
7
7
  class Error < StandardError
@@ -27,7 +27,7 @@ module Riffer
27
27
  #
28
28
  # --
29
29
  # : () -> Riffer::Config
30
- def self.config: () -> Riffer::Config
30
+ def config: () -> Riffer::Config
31
31
 
32
32
  # Yields the configuration for block-based setup.
33
33
  #
@@ -37,9 +37,10 @@ module Riffer
37
37
  #
38
38
  # --
39
39
  # : () ?{ (Riffer::Config) -> void } -> void
40
- def self.configure: () ?{ (Riffer::Config) -> void } -> void
40
+ def configure: () ?{ (Riffer::Config) -> void } -> void
41
41
 
42
+ # Returns the gem version.
42
43
  # --
43
44
  # : () -> String
44
- def self.version: () -> String
45
+ def version: () -> String
45
46
  end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Agent::Session::Repair` uses `extend self`; rbs-inline doesn't emit
2
+ # that, so re-extend here to expose its instance methods as singleton methods.
3
+ module Riffer::Agent::Session::Repair
4
+ extend ::Riffer::Agent::Session::Repair
5
+ end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Evals::EvaluatorRunner` uses `extend self`; rbs-inline doesn't emit
2
+ # that, so re-extend here to expose its instance methods as singleton methods.
3
+ module Riffer::Evals::EvaluatorRunner
4
+ extend ::Riffer::Evals::EvaluatorRunner
5
+ end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Helpers::ClassNameConverter` uses `extend self`; rbs-inline doesn't
2
+ # emit that, so re-extend here to expose its instance methods as singleton methods.
3
+ module Riffer::Helpers::ClassNameConverter
4
+ extend ::Riffer::Helpers::ClassNameConverter
5
+ end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Helpers::Dependencies` uses `extend self`; rbs-inline doesn't emit
2
+ # that, so re-extend here to expose its instance methods as singleton methods.
3
+ module Riffer::Helpers::Dependencies
4
+ extend ::Riffer::Helpers::Dependencies
5
+ end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Mcp::AuthenticatedTool` uses `extend self`; rbs-inline doesn't emit
2
+ # that, so re-extend here to expose its instance methods as singleton methods.
3
+ module Riffer::Mcp::AuthenticatedTool
4
+ extend ::Riffer::Mcp::AuthenticatedTool
5
+ end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Mcp::Registry` uses `extend self`; rbs-inline doesn't emit that, so
2
+ # re-extend here to expose its instance methods as singleton methods.
3
+ module Riffer::Mcp::Registry
4
+ extend ::Riffer::Mcp::Registry
5
+ end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Mcp::ToolFactory` uses `extend self`; rbs-inline doesn't emit that, so
2
+ # re-extend here to expose its instance methods as singleton methods.
3
+ module Riffer::Mcp::ToolFactory
4
+ extend ::Riffer::Mcp::ToolFactory
5
+ end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Mcp` uses `extend self`; rbs-inline doesn't emit that, so re-extend
2
+ # here to expose its instance methods as singleton methods.
3
+ module Riffer::Mcp
4
+ extend ::Riffer::Mcp
5
+ end
@@ -0,0 +1,5 @@
1
+ # `Riffer::Providers::Repository` uses `extend self`; rbs-inline doesn't emit
2
+ # that, so re-extend here to expose its instance methods as singleton methods.
3
+ module Riffer::Providers::Repository
4
+ extend ::Riffer::Providers::Repository
5
+ end