riffer-rig 0.6.0 → 0.7.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 (157) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/README.md +37 -4
  4. data/exe/riffer +1 -1
  5. data/lib/riffer/rig/bundled/agents_md.rb +7 -0
  6. data/lib/riffer/rig/bundled/bash.rb +5 -0
  7. data/lib/riffer/rig/bundled/edit.rb +5 -0
  8. data/lib/riffer/rig/bundled/mcp.rb +9 -0
  9. data/lib/riffer/rig/bundled/read.rb +5 -0
  10. data/lib/riffer/rig/bundled/skills.rb +10 -0
  11. data/lib/riffer/rig/bundled/write.rb +5 -0
  12. data/lib/riffer/rig/bundled.rb +7 -0
  13. data/lib/riffer/rig/cli/flags.rb +77 -0
  14. data/lib/riffer/rig/cli.rb +69 -106
  15. data/lib/riffer/rig/command/context.rb +70 -0
  16. data/lib/riffer/rig/command.rb +29 -0
  17. data/lib/riffer/rig/commands/model.rb +54 -0
  18. data/lib/riffer/rig/commands/skill.rb +27 -0
  19. data/lib/riffer/rig/commands.rb +4 -0
  20. data/lib/riffer/rig/credentials.rb +2 -2
  21. data/lib/riffer/rig/directories.rb +20 -0
  22. data/lib/riffer/rig/env/invalid.rb +13 -0
  23. data/lib/riffer/rig/env.rb +12 -1
  24. data/lib/riffer/rig/events/after_response.rb +25 -0
  25. data/lib/riffer/rig/events/after_tool_call.rb +31 -0
  26. data/lib/riffer/rig/events/before_prompt.rb +25 -0
  27. data/lib/riffer/rig/events/before_request.rb +25 -0
  28. data/lib/riffer/rig/events/before_tool_call.rb +28 -0
  29. data/lib/riffer/rig/events/command_output.rb +3 -2
  30. data/lib/riffer/rig/events/notify.rb +3 -2
  31. data/lib/riffer/rig/events/session_end.rb +3 -2
  32. data/lib/riffer/rig/events/session_start.rb +3 -2
  33. data/lib/riffer/rig/events/skill_activated.rb +3 -2
  34. data/lib/riffer/rig/events/turn_end.rb +3 -2
  35. data/lib/riffer/rig/extension/failure.rb +16 -0
  36. data/lib/riffer/rig/extension.rb +16 -1
  37. data/lib/riffer/rig/hosts/mirror.rb +6 -7
  38. data/lib/riffer/rig/hosts/null.rb +1 -1
  39. data/lib/riffer/rig/loader.rb +163 -0
  40. data/lib/riffer/rig/mcp/declaration.rb +23 -0
  41. data/lib/riffer/rig/mcp/server.rb +16 -0
  42. data/lib/riffer/rig/mcp.rb +12 -0
  43. data/lib/riffer/rig/prompts/agents_md.rb +32 -0
  44. data/lib/riffer/rig/prompts.rb +4 -0
  45. data/lib/riffer/rig/registrar.rb +120 -5
  46. data/lib/riffer/rig/runtime/blocked.rb +13 -0
  47. data/lib/riffer/rig/runtime/hooks.rb +78 -0
  48. data/lib/riffer/rig/runtime/request_guardrail.rb +24 -0
  49. data/lib/riffer/rig/runtime/tool_runtime.rb +44 -0
  50. data/lib/riffer/rig/runtime.rb +506 -57
  51. data/lib/riffer/rig/settings/document.rb +27 -16
  52. data/lib/riffer/rig/settings/pricing.rb +16 -5
  53. data/lib/riffer/rig/settings.rb +73 -43
  54. data/lib/riffer/rig/skills/sources.rb +28 -0
  55. data/lib/riffer/rig/skills.rb +12 -0
  56. data/lib/riffer/rig/{events/event.rb → support/equatable.rb} +2 -11
  57. data/lib/riffer/rig/{ui → terminal}/animator.rb +4 -4
  58. data/lib/riffer/rig/{ui → terminal}/banner.rb +17 -21
  59. data/lib/riffer/rig/{ui → terminal}/cursor.rb +4 -4
  60. data/lib/riffer/rig/terminal/host.rb +85 -0
  61. data/lib/riffer/rig/{ui → terminal}/palette.rb +1 -1
  62. data/lib/riffer/rig/{ui → terminal}/renderer.rb +115 -66
  63. data/lib/riffer/rig/{ui → terminal}/smoother.rb +4 -4
  64. data/lib/riffer/rig/{ui → terminal}/theme.rb +12 -12
  65. data/lib/riffer/rig/terminal.rb +207 -0
  66. data/lib/riffer/rig/tools/bash.rb +6 -4
  67. data/lib/riffer/rig/tools/edit.rb +3 -2
  68. data/lib/riffer/rig/tools/read.rb +3 -2
  69. data/lib/riffer/rig/tools/write.rb +3 -2
  70. data/lib/riffer/rig/version.rb +1 -1
  71. data/lib/riffer/rig.rb +8 -8
  72. data/sig/generated/riffer/rig/bundled/agents_md.rbs +5 -0
  73. data/sig/generated/riffer/rig/bundled/bash.rbs +5 -0
  74. data/sig/generated/riffer/rig/bundled/edit.rbs +5 -0
  75. data/sig/generated/riffer/rig/bundled/mcp.rbs +5 -0
  76. data/sig/generated/riffer/rig/bundled/read.rbs +5 -0
  77. data/sig/generated/riffer/rig/bundled/skills.rbs +5 -0
  78. data/sig/generated/riffer/rig/bundled/write.rbs +5 -0
  79. data/sig/generated/riffer/rig/bundled.rbs +5 -0
  80. data/sig/generated/riffer/rig/cli/flags.rbs +40 -0
  81. data/sig/generated/riffer/rig/cli.rbs +30 -35
  82. data/sig/generated/riffer/rig/command/context.rbs +50 -0
  83. data/sig/generated/riffer/rig/command.rbs +23 -0
  84. data/sig/generated/riffer/rig/commands/model.rbs +27 -0
  85. data/sig/generated/riffer/rig/commands/skill.rbs +12 -0
  86. data/sig/generated/riffer/rig/commands.rbs +4 -0
  87. data/sig/generated/riffer/rig/credentials.rbs +4 -4
  88. data/sig/generated/riffer/rig/directories.rbs +11 -0
  89. data/sig/generated/riffer/rig/env/invalid.rbs +10 -0
  90. data/sig/generated/riffer/rig/env.rbs +7 -1
  91. data/sig/generated/riffer/rig/events/after_response.rbs +18 -0
  92. data/sig/generated/riffer/rig/events/after_tool_call.rbs +24 -0
  93. data/sig/generated/riffer/rig/events/before_prompt.rbs +18 -0
  94. data/sig/generated/riffer/rig/events/before_request.rbs +18 -0
  95. data/sig/generated/riffer/rig/events/before_tool_call.rbs +21 -0
  96. data/sig/generated/riffer/rig/events/command_output.rbs +3 -1
  97. data/sig/generated/riffer/rig/events/notify.rbs +3 -1
  98. data/sig/generated/riffer/rig/events/session_end.rbs +3 -1
  99. data/sig/generated/riffer/rig/events/session_start.rbs +3 -1
  100. data/sig/generated/riffer/rig/events/skill_activated.rbs +3 -1
  101. data/sig/generated/riffer/rig/events/turn_end.rbs +3 -1
  102. data/sig/generated/riffer/rig/extension/failure.rbs +13 -0
  103. data/sig/generated/riffer/rig/extension.rbs +14 -1
  104. data/sig/generated/riffer/rig/hosts/mirror.rbs +9 -9
  105. data/sig/generated/riffer/rig/hosts/null.rbs +1 -1
  106. data/sig/generated/riffer/rig/loader.rbs +77 -0
  107. data/sig/generated/riffer/rig/mcp/declaration.rbs +18 -0
  108. data/sig/generated/riffer/rig/mcp/server.rbs +13 -0
  109. data/sig/generated/riffer/rig/mcp.rbs +8 -0
  110. data/sig/generated/riffer/rig/prompts/agents_md.rbs +19 -0
  111. data/sig/generated/riffer/rig/prompts.rbs +4 -0
  112. data/sig/generated/riffer/rig/registrar.rbs +78 -4
  113. data/sig/generated/riffer/rig/runtime/blocked.rbs +10 -0
  114. data/sig/generated/riffer/rig/runtime/hooks.rbs +49 -0
  115. data/sig/generated/riffer/rig/runtime/request_guardrail.rbs +16 -0
  116. data/sig/generated/riffer/rig/runtime/tool_runtime.rbs +23 -0
  117. data/sig/generated/riffer/rig/runtime.rbs +225 -22
  118. data/sig/generated/riffer/rig/settings/document.rbs +11 -11
  119. data/sig/generated/riffer/rig/settings/pricing.rbs +7 -2
  120. data/sig/generated/riffer/rig/settings.rbs +36 -23
  121. data/sig/generated/riffer/rig/skills/sources.rbs +18 -0
  122. data/sig/generated/riffer/rig/skills.rbs +7 -0
  123. data/sig/generated/riffer/rig/support/equatable.rbs +15 -0
  124. data/sig/generated/riffer/rig/{ui → terminal}/animator.rbs +5 -5
  125. data/sig/generated/riffer/rig/terminal/banner.rbs +39 -0
  126. data/sig/generated/riffer/rig/{ui → terminal}/cursor.rbs +5 -5
  127. data/sig/generated/riffer/rig/terminal/host.rbs +50 -0
  128. data/sig/generated/riffer/rig/{ui → terminal}/palette.rbs +2 -2
  129. data/sig/generated/riffer/rig/terminal/renderer.rbs +126 -0
  130. data/sig/generated/riffer/rig/{ui → terminal}/smoother.rbs +5 -5
  131. data/sig/generated/riffer/rig/{ui → terminal}/theme.rbs +5 -5
  132. data/sig/generated/riffer/rig/terminal.rbs +85 -0
  133. data/sig/generated/riffer/rig/tools/bash.rbs +2 -1
  134. data/sig/generated/riffer/rig.rbs +4 -0
  135. data/sig/manual/riffer/rig/commands/model.rbs +6 -0
  136. data/sig/manual/riffer/rig/commands/skill.rbs +6 -0
  137. data/sig/manual/riffer/rig/directories.rbs +6 -0
  138. data/sig/manual/riffer/rig/events.rbs +6 -0
  139. data/sig/manual/riffer/rig/hosts.rbs +7 -0
  140. data/sig/manual/riffer/rig/mcp.rbs +11 -0
  141. data/sig/manual/riffer/rig/prompts/agents_md.rbs +6 -0
  142. data/sig/manual/riffer/rig/{ui/banner.rbs → skills.rbs} +2 -2
  143. data/sig/manual/riffer/rig/support.rbs +8 -0
  144. data/sig/manual/riffer/rig/terminal/banner.rbs +6 -0
  145. metadata +140 -27
  146. data/lib/riffer/rig/coding_agent.rb +0 -53
  147. data/lib/riffer/rig/hosts/base.rb +0 -36
  148. data/lib/riffer/rig/repl.rb +0 -188
  149. data/lib/riffer/rig/token_tally.rb +0 -54
  150. data/sig/generated/riffer/rig/coding_agent.rbs +0 -9
  151. data/sig/generated/riffer/rig/events/event.rbs +0 -20
  152. data/sig/generated/riffer/rig/hosts/base.rbs +0 -26
  153. data/sig/generated/riffer/rig/repl.rbs +0 -69
  154. data/sig/generated/riffer/rig/token_tally.rbs +0 -42
  155. data/sig/generated/riffer/rig/ui/banner.rbs +0 -42
  156. data/sig/generated/riffer/rig/ui/renderer.rbs +0 -94
  157. data/sig/manual/riffer/rig/ui.rbs +0 -5
@@ -0,0 +1,77 @@
1
+ # Generated from lib/riffer/rig/loader.rb with RBS::Inline
2
+
3
+ class Riffer::Rig::Loader
4
+ class ConfigurationError < StandardError
5
+ end
6
+
7
+ PROVIDER_LIST: String
8
+
9
+ ONBOARDING_QUESTION: String
10
+
11
+ NO_MODEL: String
12
+
13
+ @riffer_config: Riffer::Config
14
+
15
+ @home: String
16
+
17
+ @env: Riffer::Rig::Env
18
+
19
+ @host: Riffer::Rig::Hosts::_Host
20
+
21
+ @cwd: String
22
+
23
+ # @rbs cwd: String
24
+ # @rbs host: Riffer::Rig::Hosts::_Host
25
+ # @rbs env: Riffer::Rig::Env | Riffer::Rig::Env::Invalid
26
+ # @rbs home: String
27
+ # @rbs riffer_config: Riffer::Config
28
+ # @rbs model: String?
29
+ # @rbs extensions: bool
30
+ # @rbs skills: bool
31
+ # @rbs agents_md: bool
32
+ # @rbs tools: Array[String]?
33
+ # @rbs max_steps: Integer?
34
+ # @rbs return: Riffer::Rig::Runtime
35
+ def self.runtime: (cwd: String, host: Riffer::Rig::Hosts::_Host, ?env: Riffer::Rig::Env | Riffer::Rig::Env::Invalid, ?home: String, ?riffer_config: Riffer::Config, ?model: String?, ?extensions: bool, ?skills: bool, ?agents_md: bool, ?tools: Array[String]?, ?max_steps: Integer?) -> Riffer::Rig::Runtime
36
+
37
+ # @rbs cwd: String
38
+ # @rbs host: Riffer::Rig::Hosts::_Host
39
+ # @rbs env: Riffer::Rig::Env | Riffer::Rig::Env::Invalid
40
+ # @rbs home: String
41
+ # @rbs riffer_config: Riffer::Config
42
+ # @rbs return: void
43
+ def initialize: (cwd: String, host: Riffer::Rig::Hosts::_Host, ?env: Riffer::Rig::Env | Riffer::Rig::Env::Invalid, ?home: String, ?riffer_config: Riffer::Config) -> void
44
+
45
+ # @rbs model: String?
46
+ # @rbs extensions: bool
47
+ # @rbs skills: bool
48
+ # @rbs agents_md: bool
49
+ # @rbs tools: Array[String]?
50
+ # @rbs max_steps: Integer?
51
+ # @rbs return: Riffer::Rig::Runtime
52
+ def runtime: (?model: String?, ?extensions: bool, ?skills: bool, ?agents_md: bool, ?tools: Array[String]?, ?max_steps: Integer?) -> Riffer::Rig::Runtime
53
+
54
+ private
55
+
56
+ # @rbs configured: String?
57
+ # @rbs return: String
58
+ def select_model: (String? configured) -> String
59
+
60
+ # @rbs return: String
61
+ def ask_for_model: () -> String
62
+
63
+ # @rbs provider: String
64
+ # @rbs return: Hash[Symbol, String]
65
+ def credentials_for: (String provider) -> Hash[Symbol, String]
66
+
67
+ # @rbs provider: String
68
+ # @rbs missing: Array[Symbol]
69
+ # @rbs return: String
70
+ def missing_credentials: (String provider, Array[Symbol] missing) -> String
71
+
72
+ # @rbs return: Riffer::Rig::Hosts::_Host
73
+ def asking_host: () -> Riffer::Rig::Hosts::_Host
74
+
75
+ # @rbs return: String
76
+ def home_settings_path: () -> String
77
+ end
@@ -0,0 +1,18 @@
1
+ # Generated from lib/riffer/rig/mcp/declaration.rb with RBS::Inline
2
+
3
+ class Riffer::Rig::Mcp::Declaration
4
+ include Riffer::Rig::Support::Equatable
5
+
6
+ # @dynamic url, headers
7
+ attr_reader url: String
8
+
9
+ attr_reader headers: Hash[String, String]
10
+
11
+ # @rbs url: String
12
+ # @rbs headers: Hash[String, String]
13
+ # @rbs return: void
14
+ def initialize: (url: String, headers: Hash[String, String]) -> void
15
+
16
+ # @rbs return: Hash[Symbol, untyped]
17
+ def to_h: () -> Hash[Symbol, untyped]
18
+ end
@@ -0,0 +1,13 @@
1
+ # Generated from lib/riffer/rig/mcp/server.rb with RBS::Inline
2
+
3
+ class Riffer::Rig::Mcp::Server
4
+ # @dynamic declaration, registration
5
+ attr_reader declaration: Riffer::Rig::Mcp::Declaration
6
+
7
+ attr_reader registration: Riffer::Mcp::Registration
8
+
9
+ # @rbs declaration: Riffer::Rig::Mcp::Declaration
10
+ # @rbs registration: Riffer::Mcp::Registration
11
+ # @rbs return: void
12
+ def initialize: (declaration: Riffer::Rig::Mcp::Declaration, registration: Riffer::Mcp::Registration) -> void
13
+ end
@@ -0,0 +1,8 @@
1
+ # Generated from lib/riffer/rig/mcp.rb with RBS::Inline
2
+
3
+ module Riffer::Rig::Mcp
4
+ # @rbs home: Hash[Symbol, untyped]
5
+ # @rbs project: Hash[Symbol, untyped]
6
+ # @rbs return: Hash[Symbol, untyped]
7
+ def merge: (Hash[Symbol, untyped] home, Hash[Symbol, untyped] project) -> Hash[Symbol, untyped]
8
+ end
@@ -0,0 +1,19 @@
1
+ # Generated from lib/riffer/rig/prompts/agents_md.rb with RBS::Inline
2
+
3
+ module Riffer::Rig::Prompts::AgentsMd
4
+ FRAMING: String
5
+
6
+ # @rbs cwd: String
7
+ # @rbs return: Array[String]
8
+ def paths: (String cwd) -> Array[String]
9
+
10
+ # @rbs cwd: String
11
+ # @rbs return: String?
12
+ def section: (String cwd) -> String?
13
+
14
+ private
15
+
16
+ # @rbs path: String
17
+ # @rbs return: String
18
+ def block: (String path) -> String
19
+ end
@@ -0,0 +1,4 @@
1
+ # Generated from lib/riffer/rig/prompts.rb with RBS::Inline
2
+
3
+ module Riffer::Rig::Prompts
4
+ end
@@ -1,12 +1,39 @@
1
1
  # Generated from lib/riffer/rig/registrar.rb with RBS::Inline
2
2
 
3
3
  class Riffer::Rig::Registrar
4
- @tools: Array[singleton(Riffer::Tool)]
4
+ class NameCollisionError < StandardError
5
+ end
6
+
7
+ CORE_SETTINGS_KEYS: Array[String]
8
+
9
+ EVENTS: Array[Symbol]
10
+
11
+ @hooks: Hash[Symbol, Array[^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped]]
12
+
13
+ @mcp_servers: Hash[String, Riffer::Rig::Mcp::Declaration]
14
+
15
+ @given_settings: Hash[Symbol, untyped]
16
+
17
+ @declared_settings: Hash[Symbol, untyped]
18
+
19
+ @skill_sources: Array[^(Riffer::Rig::Runtime) -> Riffer::Skills::Backend]
20
+
21
+ @commands: Hash[String, Riffer::Rig::Command]
5
22
 
6
23
  @prompts: Hash[Symbol, ^(Riffer::Rig::Runtime) -> String?]
7
24
 
25
+ @tools: Hash[String, singleton(Riffer::Tool)]
26
+
27
+ # @dynamic extension
28
+ attr_reader extension: String
29
+
30
+ # @rbs extension: String
31
+ # @rbs settings: Hash[Symbol, untyped]
8
32
  # @rbs return: void
9
- def initialize: () -> void
33
+ def initialize: (String extension, ?Hash[Symbol, untyped] settings) -> void
34
+
35
+ # @rbs return: NameCollisionError?
36
+ def collision: () -> NameCollisionError?
10
37
 
11
38
  # @rbs klass: singleton(Riffer::Tool)
12
39
  # @rbs return: void
@@ -17,9 +44,56 @@ class Riffer::Rig::Registrar
17
44
  # @rbs return: void
18
45
  def prompt: (Symbol name) { (Riffer::Rig::Runtime) -> String? } -> void
19
46
 
20
- # @rbs return: Array[singleton(Riffer::Tool)]
21
- def tools: () -> Array[singleton(Riffer::Tool)]
47
+ # @rbs name: String
48
+ # @rbs description: String
49
+ # @rbs &block: (Riffer::Rig::Command::Context) -> void
50
+ # @rbs return: void
51
+ def command: (String name, description: String) { (Riffer::Rig::Command::Context) -> void } -> void
52
+
53
+ # @rbs &block: (Riffer::Rig::Runtime) -> Riffer::Skills::Backend
54
+ # @rbs return: void
55
+ def skills: () { (Riffer::Rig::Runtime) -> Riffer::Skills::Backend } -> void
56
+
57
+ # @rbs key: Symbol
58
+ # @rbs default: untyped
59
+ # @rbs return: void
60
+ def setting: (Symbol key, default: untyped) -> void
61
+
62
+ # @rbs name: String
63
+ # @rbs url: String
64
+ # @rbs headers: Hash[String, String]
65
+ # @rbs return: void
66
+ def mcp: (String name, url: String, ?headers: Hash[String, String]) -> void
67
+
68
+ # @rbs event: Symbol
69
+ # @rbs &block: (Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped
70
+ # @rbs return: void
71
+ def on: (Symbol event) { (Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped } -> void
72
+
73
+ # @rbs return: Hash[String, singleton(Riffer::Tool)]
74
+ def tools: () -> Hash[String, singleton(Riffer::Tool)]
22
75
 
23
76
  # @rbs return: Hash[Symbol, ^(Riffer::Rig::Runtime) -> String?]
24
77
  def prompts: () -> Hash[Symbol, ^(Riffer::Rig::Runtime) -> String?]
78
+
79
+ # @rbs return: Hash[String, Riffer::Rig::Command]
80
+ def commands: () -> Hash[String, Riffer::Rig::Command]
81
+
82
+ # @rbs return: Array[^(Riffer::Rig::Runtime) -> Riffer::Skills::Backend]
83
+ def skill_sources: () -> Array[^(Riffer::Rig::Runtime) -> Riffer::Skills::Backend]
84
+
85
+ # @rbs return: Hash[Symbol, untyped]
86
+ def settings: () -> Hash[Symbol, untyped]
87
+
88
+ # @rbs return: Hash[Symbol, untyped]
89
+ def declared_settings: () -> Hash[Symbol, untyped]
90
+
91
+ # @rbs return: Hash[String, Riffer::Rig::Mcp::Declaration]
92
+ def mcp_servers: () -> Hash[String, Riffer::Rig::Mcp::Declaration]
93
+
94
+ # @rbs return: Array[String]
95
+ def registrations: () -> Array[String]
96
+
97
+ # @rbs return: Hash[Symbol, Array[^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped]]
98
+ def hooks: () -> Hash[Symbol, Array[^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped]]
25
99
  end
@@ -0,0 +1,10 @@
1
+ # Generated from lib/riffer/rig/runtime/blocked.rb with RBS::Inline
2
+
3
+ class Riffer::Rig::Runtime::Blocked
4
+ # @dynamic reason
5
+ attr_reader reason: String
6
+
7
+ # @rbs reason: String
8
+ # @rbs return: void
9
+ def initialize: (String reason) -> void
10
+ end
@@ -0,0 +1,49 @@
1
+ # Generated from lib/riffer/rig/runtime/hooks.rb with RBS::Inline
2
+
3
+ class Riffer::Rig::Runtime::Hooks
4
+ @hooks: Hash[Symbol, Array[^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped]]
5
+
6
+ @host: Riffer::Rig::Hosts::_Host
7
+
8
+ # @rbs hooks: Hash[Symbol, Array[^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped]]
9
+ # @rbs host: Riffer::Rig::Hosts::_Host
10
+ # @rbs return: void
11
+ def initialize: (Hash[Symbol, Array[^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped]] hooks, Riffer::Rig::Hosts::_Host host) -> void
12
+
13
+ # @rbs name: Symbol
14
+ # @rbs event: Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base
15
+ # @rbs return: void
16
+ def observe: (Symbol name, Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base event) -> void
17
+
18
+ # @rbs text: String
19
+ # @rbs return: String | Riffer::Rig::Runtime::Blocked
20
+ def before_prompt: (String text) -> (String | Riffer::Rig::Runtime::Blocked)
21
+
22
+ # @rbs tool: String
23
+ # @rbs args: Hash[Symbol, untyped]
24
+ # @rbs return: Hash[Symbol, untyped] | Riffer::Rig::Runtime::Blocked
25
+ def before_tool_call: (String tool, Hash[Symbol, untyped] args) -> (Hash[Symbol, untyped] | Riffer::Rig::Runtime::Blocked)
26
+
27
+ # @rbs messages: Array[::Riffer::Messages::Base]
28
+ # @rbs return: Array[::Riffer::Messages::Base] | Riffer::Rig::Runtime::Blocked
29
+ def before_request: (Array[::Riffer::Messages::Base] messages) -> (Array[::Riffer::Messages::Base] | Riffer::Rig::Runtime::Blocked)
30
+
31
+ private
32
+
33
+ # @rbs name: Symbol
34
+ # @rbs payload: untyped
35
+ # @rbs accepts: ^(untyped) -> bool
36
+ # @rbs &: (untyped) -> Riffer::Rig::Events::_Event
37
+ # @rbs return: untyped
38
+ def veto: (Symbol name, untyped payload, ^(untyped) -> bool accepts) { (untyped) -> Riffer::Rig::Events::_Event } -> untyped
39
+
40
+ # @rbs outcome: untyped
41
+ # @rbs return: untyped
42
+ def announce: (untyped outcome) -> untyped
43
+
44
+ # @rbs name: Symbol
45
+ # @rbs hook: ^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped
46
+ # @rbs event: Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base
47
+ # @rbs return: untyped
48
+ def call: (Symbol name, ^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped hook, Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base event) -> untyped
49
+ end
@@ -0,0 +1,16 @@
1
+ # Generated from lib/riffer/rig/runtime/request_guardrail.rb with RBS::Inline
2
+
3
+ # riffer runs its before guardrails once per run, just ahead of the first
4
+ # request; the Runtime's on_message observer covers the requests after it.
5
+ class Riffer::Rig::Runtime::RequestGuardrail < Riffer::Guardrail
6
+ @hooks: Riffer::Rig::Runtime::Hooks
7
+
8
+ # @rbs hooks: Riffer::Rig::Runtime::Hooks
9
+ # @rbs return: void
10
+ def initialize: (hooks: Riffer::Rig::Runtime::Hooks) -> void
11
+
12
+ # @rbs messages: Array[Riffer::Messages::Base]
13
+ # @rbs context: untyped
14
+ # @rbs return: Riffer::Guardrails::Result
15
+ def process_input: (Array[Riffer::Messages::Base] messages, context: untyped) -> Riffer::Guardrails::Result
16
+ end
@@ -0,0 +1,23 @@
1
+ # Generated from lib/riffer/rig/runtime/tool_runtime.rb with RBS::Inline
2
+
3
+ class Riffer::Rig::Runtime::ToolRuntime < Riffer::Tools::Runtime
4
+ @hooks: Riffer::Rig::Runtime::Hooks
5
+
6
+ # @rbs hooks: Riffer::Rig::Runtime::Hooks
7
+ # @rbs return: void
8
+ def initialize: (Riffer::Rig::Runtime::Hooks hooks) -> void
9
+
10
+ private
11
+
12
+ # @rbs tool_call: Riffer::Messages::Assistant::ToolCall
13
+ # @rbs tools: Array[singleton(Riffer::Tool)]
14
+ # @rbs context: Riffer::Agent::Context?
15
+ # @rbs assistant_message: Riffer::Messages::Assistant?
16
+ # @rbs return: Riffer::Tools::Response
17
+ def dispatch_tool_call: (Riffer::Messages::Assistant::ToolCall tool_call, tools: Array[singleton(Riffer::Tool)], context: Riffer::Agent::Context?, ?assistant_message: Riffer::Messages::Assistant?) -> Riffer::Tools::Response
18
+
19
+ # @rbs tool_call: Riffer::Messages::Assistant::ToolCall
20
+ # @rbs args: Hash[Symbol, untyped]
21
+ # @rbs return: Riffer::Messages::Assistant::ToolCall
22
+ def replace_arguments: (Riffer::Messages::Assistant::ToolCall tool_call, Hash[Symbol, untyped] args) -> Riffer::Messages::Assistant::ToolCall
23
+ end
@@ -19,31 +19,53 @@ class Riffer::Rig::Runtime
19
19
 
20
20
  INTERRUPT_CANCELLED: Symbol
21
21
 
22
- @agent: Riffer::Agent
22
+ @session_start_reason: Symbol
23
23
 
24
- @base_prompt: String
24
+ @session_start_pending: bool
25
25
 
26
- @cancel_flag: Riffer::Rig::Runtime::CancelFlag
26
+ @closed: bool
27
27
 
28
- @credentials: Hash[Symbol, Hash[Symbol, String]]
28
+ @busy: bool
29
29
 
30
- @cwd: String
30
+ @settings: Hash[Symbol, untyped]
31
+
32
+ @id: String
31
33
 
32
34
  @host: Riffer::Rig::Hosts::Mirror
33
35
 
34
- @id: String
36
+ @cwd: String
35
37
 
36
- @settings: Hash[Symbol, untyped]
38
+ @credentials: Hash[Symbol, Hash[Symbol, String]]
37
39
 
38
- @busy: bool
40
+ @cancel_flag: Riffer::Rig::Runtime::CancelFlag
39
41
 
40
- @closed: bool
42
+ @base_prompt: String
41
43
 
42
- @session_start_pending: bool
44
+ @agent: Riffer::Agent
45
+
46
+ @model_override: String?
47
+
48
+ @message_observers: Array[^(Riffer::Messages::Base) -> void]
49
+
50
+ @prompts: Hash[Symbol, ^(Riffer::Rig::Runtime) -> String?]
51
+
52
+ @commands: Hash[String, Riffer::Rig::Command]
53
+
54
+ @declared_settings: Hash[String, Hash[Symbol, untyped]]
43
55
 
44
- @registrar: Riffer::Rig::Registrar
56
+ @errors: Array[Riffer::Rig::Extension::Failure]
45
57
 
46
- # @dynamic agent, credentials, cwd, host, id, settings
58
+ @hooks: Riffer::Rig::Runtime::Hooks
59
+
60
+ @tool_allowlist: Array[String]?
61
+
62
+ @mcp_registry: Riffer::Rig::Mcp::_Registry
63
+
64
+ @mcp_servers: Hash[String, Riffer::Rig::Mcp::Server]
65
+
66
+ @model_options: Hash[Symbol, untyped]
67
+
68
+ # @dynamic agent, credentials, cwd, host, id, settings, declared_settings
47
69
  attr_reader agent: Riffer::Agent
48
70
 
49
71
  attr_reader credentials: Hash[Symbol, Hash[Symbol, String]]
@@ -56,41 +78,155 @@ class Riffer::Rig::Runtime
56
78
 
57
79
  attr_reader settings: Hash[Symbol, untyped]
58
80
 
81
+ attr_reader declared_settings: Hash[String, Hash[Symbol, untyped]]
82
+
59
83
  # @rbs model: String
60
84
  # @rbs extensions: Array[Riffer::Rig::Extension]
61
85
  # @rbs tools: Array[String]?
62
86
  # @rbs settings: Hash[Symbol, untyped]
63
- # @rbs host: Riffer::Rig::Hosts::Base
87
+ # @rbs host: Riffer::Rig::Hosts::_Host
64
88
  # @rbs cwd: String?
65
89
  # @rbs name: String
66
90
  # @rbs instructions: String?
67
91
  # @rbs credentials: Hash[Symbol, Hash[Symbol, String]]
68
92
  # @rbs pricing: Hash[String, Riffer::Rig::Settings::Pricing]
93
+ # @rbs riffer_config: Riffer::Config
94
+ # @rbs mcp_registry: Riffer::Rig::Mcp::_Registry
69
95
  # @rbs max_steps: Integer?
96
+ # @rbs model_options: Hash[Symbol, untyped]
70
97
  # @rbs snapshot: Hash[Symbol, untyped]?
71
98
  # @rbs return: void
72
- def initialize: (String model, ?extensions: Array[Riffer::Rig::Extension], ?tools: Array[String]?, ?settings: Hash[Symbol, untyped], ?host: Riffer::Rig::Hosts::Base, ?cwd: String?, ?name: String, ?instructions: String?, ?credentials: Hash[Symbol, Hash[Symbol, String]], ?pricing: Hash[String, Riffer::Rig::Settings::Pricing], ?max_steps: Integer?, ?snapshot: Hash[Symbol, untyped]?) -> void
99
+ def initialize: (String model, ?extensions: Array[Riffer::Rig::Extension], ?tools: Array[String]?, ?settings: Hash[Symbol, untyped], ?host: Riffer::Rig::Hosts::_Host, ?cwd: String?, ?name: String, ?instructions: String?, ?credentials: Hash[Symbol, Hash[Symbol, String]], ?pricing: Hash[String, Riffer::Rig::Settings::Pricing], ?riffer_config: Riffer::Config, ?mcp_registry: Riffer::Rig::Mcp::_Registry, ?max_steps: Integer?, ?model_options: Hash[Symbol, untyped], ?snapshot: Hash[Symbol, untyped]?) -> void
73
100
 
74
101
  # @rbs text: String
75
- # @rbs &block: ?(::Riffer::StreamEvents::Base | Riffer::Rig::Events::Event) -> void
76
- # @rbs return: (nil | Enumerator[::Riffer::StreamEvents::Base | Riffer::Rig::Events::Event, Riffer::Agent::Response])
77
- def prompt: (String text) ?{ (::Riffer::StreamEvents::Base | Riffer::Rig::Events::Event) -> void } -> (nil | Enumerator[::Riffer::StreamEvents::Base | Riffer::Rig::Events::Event, Riffer::Agent::Response])
102
+ # @rbs &block: ?(::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event) -> void
103
+ # @rbs return: (nil | Enumerator[::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event, Riffer::Agent::Response])
104
+ def prompt: (String text) ?{ (::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event) -> void } -> (nil | Enumerator[::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event, Riffer::Agent::Response])
78
105
 
79
106
  # @rbs text: String
80
107
  # @rbs return: Riffer::Agent::Response
81
108
  def ask: (String text) -> Riffer::Agent::Response
82
109
 
110
+ # @rbs return: Array[Riffer::Rig::Command]
111
+ def commands: () -> Array[Riffer::Rig::Command]
112
+
113
+ # @rbs name: String
114
+ # @rbs args: String
115
+ # @rbs &block: ?(::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event) -> void
116
+ # @rbs return: nil
117
+ def run_command: (String name, ?String args) ?{ (::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event) -> void } -> nil
118
+
119
+ # @rbs return: Array[Riffer::Rig::Extension::Failure]
120
+ def errors: () -> Array[Riffer::Rig::Extension::Failure]
121
+
122
+ # @rbs return: String
123
+ def model: () -> String
124
+
125
+ # @rbs model: String
126
+ # @rbs return: void
127
+ def model=: (String model) -> void
128
+
129
+ # @rbs extensions: Array[Riffer::Rig::Extension]
130
+ # @rbs settings: Hash[Symbol, untyped]
131
+ # @rbs return: nil
132
+ def rebuild: (extensions: Array[Riffer::Rig::Extension], settings: Hash[Symbol, untyped]) -> nil
133
+
134
+ # @rbs return: Hash[Symbol, untyped]
135
+ def to_h: () -> Hash[Symbol, untyped]
136
+
137
+ # @rbs &block: (Riffer::Messages::Base) -> void
138
+ # @rbs return: nil
139
+ def on_message: () { (Riffer::Messages::Base) -> void } -> nil
140
+
83
141
  # @rbs return: nil
84
142
  def cancel: () -> nil
85
143
 
144
+ # @rbs return: Riffer::Providers::TokenUsage?
145
+ def tally: () -> Riffer::Providers::TokenUsage?
146
+
86
147
  # @rbs return: void
87
148
  def close: () -> void
88
149
 
89
150
  private
90
151
 
91
- # @rbs stream: Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
92
- # @rbs return: Enumerator[::Riffer::StreamEvents::Base | Riffer::Rig::Events::Event, Riffer::Agent::Response]
93
- def wrap_stream: (Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response] stream) -> Enumerator[::Riffer::StreamEvents::Base | Riffer::Rig::Events::Event, Riffer::Agent::Response]
152
+ # @rbs return: void
153
+ def claim: () -> void
154
+
155
+ # @rbs model: String
156
+ # @rbs config: Riffer::Agent::Config
157
+ # @rbs session: Riffer::Agent::Session?
158
+ # @rbs return: Riffer::Agent
159
+ def build_agent: (String model, Riffer::Agent::Config config, ?session: Riffer::Agent::Session?) -> Riffer::Agent
160
+
161
+ # @rbs model: String
162
+ # @rbs config: Riffer::Agent::Config
163
+ # @rbs return: Riffer::Agent
164
+ def successor: (String model, Riffer::Agent::Config config) -> Riffer::Agent
165
+
166
+ # @rbs registrars: Array[Riffer::Rig::Registrar]
167
+ # @rbs hooks: Riffer::Rig::Runtime::Hooks
168
+ # @rbs max_steps: Numeric?
169
+ # @rbs return: Riffer::Agent::Config
170
+ def agent_config: (Array[Riffer::Rig::Registrar] registrars, Riffer::Rig::Runtime::Hooks hooks, Numeric? max_steps) -> Riffer::Agent::Config
171
+
172
+ # @rbs sources: Array[^(Riffer::Rig::Runtime) -> Riffer::Skills::Backend]
173
+ # @rbs return: Riffer::Skills::Config?
174
+ def skills_config: (Array[^(Riffer::Rig::Runtime) -> Riffer::Skills::Backend] sources) -> Riffer::Skills::Config?
175
+
176
+ # @rbs registrars: Array[Riffer::Rig::Registrar]
177
+ # @rbs mcp_servers: Hash[String, Riffer::Rig::Mcp::Server]
178
+ # @rbs settings: Hash[Symbol, untyped]
179
+ # @rbs hooks: Riffer::Rig::Runtime::Hooks
180
+ # @rbs agent: Riffer::Agent
181
+ # @rbs return: void
182
+ def install: (Array[Riffer::Rig::Registrar] registrars, Hash[String, Riffer::Rig::Mcp::Server] mcp_servers, Hash[Symbol, untyped] settings, Riffer::Rig::Runtime::Hooks hooks, Riffer::Agent agent) -> void
183
+
184
+ # A session that has not started yet opens with session_start(:new) on its
185
+ # first turn instead.
186
+ # @rbs name: Symbol
187
+ # @rbs event: Riffer::Rig::Events::_Event
188
+ # @rbs return: void
189
+ def lifecycle: (Symbol name, Riffer::Rig::Events::_Event event) -> void
190
+
191
+ # @rbs text: String
192
+ # @rbs return: Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
193
+ def start_turn: (String text) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
194
+
195
+ # @rbs reason: String
196
+ # @rbs return: Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
197
+ def blocked_turn: (String reason) -> Enumerator[Riffer::StreamEvents::Base, Riffer::Agent::Response]
198
+
199
+ # @rbs name: String
200
+ # @rbs args: String
201
+ # @rbs emit: ^(::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event) -> void
202
+ # @rbs return: void
203
+ def execute: (String name, String args, ^(::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event) -> void emit) -> void
204
+
205
+ # @rbs command: Riffer::Rig::Command
206
+ # @rbs args: String
207
+ # @rbs emit: ^(::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event) -> void
208
+ # @rbs return: Riffer::Rig::Command::Context
209
+ def command_context: (Riffer::Rig::Command command, String args, ^(::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event) -> void emit) -> Riffer::Rig::Command::Context
210
+
211
+ # @rbs text: String
212
+ # @rbs return: Enumerator[::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event, Riffer::Agent::Response]
213
+ def turn: (String text) -> Enumerator[::Riffer::StreamEvents::Base | Riffer::Rig::Events::_Event, Riffer::Agent::Response]
214
+
215
+ # @rbs yielder: Enumerator::Yielder
216
+ # @rbs event: ::Riffer::StreamEvents::Base
217
+ # @rbs return: void
218
+ def pass_through: (Enumerator::Yielder yielder, ::Riffer::StreamEvents::Base event) -> void
219
+
220
+ # @rbs message: Riffer::Messages::Base
221
+ # @rbs return: void
222
+ def observe_message: (Riffer::Messages::Base message) -> void
223
+
224
+ # @rbs message: Riffer::Messages::Base
225
+ # @rbs return: void
226
+ def deliver: (Riffer::Messages::Base message) -> void
227
+
228
+ # @rbs return: void
229
+ def before_next_request: () -> void
94
230
 
95
231
  # @rbs return: void
96
232
  def interrupt_if_cancelled: () -> void
@@ -99,9 +235,76 @@ class Riffer::Rig::Runtime
99
235
  # @rbs return: Symbol
100
236
  def stop_reason: (Riffer::Agent::Outcome outcome) -> Symbol
101
237
 
238
+ # @rbs snapshot: Hash[Symbol, untyped]
239
+ # @rbs model: String
240
+ # @rbs config: Riffer::Agent::Config
241
+ # @rbs return: Riffer::Agent
242
+ def restore: (Hash[Symbol, untyped] snapshot, String model, Riffer::Agent::Config config) -> Riffer::Agent
243
+
244
+ # @rbs saved: String?
245
+ # @rbs model: String
246
+ # @rbs return: String?
247
+ def restorable_model: (String? saved, String model) -> String?
248
+
249
+ # @rbs messages: Array[Riffer::Messages::Base]
250
+ # @rbs return: Riffer::Providers::TokenUsage?
251
+ def usage_of: (Array[Riffer::Messages::Base] messages) -> Riffer::Providers::TokenUsage?
252
+
253
+ # @rbs skills: Riffer::Skills::Context?
254
+ # @rbs names: Array[String]
255
+ # @rbs return: void
256
+ def reactivate: (Riffer::Skills::Context? skills, Array[String] names) -> void
257
+
258
+ # @rbs return: Array[String]
259
+ def activated_skills: () -> Array[String]
260
+
102
261
  # @rbs extensions: Array[Riffer::Rig::Extension]
103
- # @rbs return: Riffer::Rig::Registrar
104
- def build_registrar: (Array[Riffer::Rig::Extension] extensions) -> Riffer::Rig::Registrar
262
+ # @rbs settings: Hash[Symbol, untyped]
263
+ # @rbs &: (Riffer::Rig::Extension, StandardError) -> void
264
+ # @rbs return: Array[Riffer::Rig::Registrar]
265
+ def build_registrars: (Array[Riffer::Rig::Extension] extensions, Hash[Symbol, untyped] settings) { (Riffer::Rig::Extension, StandardError) -> void } -> Array[Riffer::Rig::Registrar]
266
+
267
+ # @rbs extension: Riffer::Rig::Extension
268
+ # @rbs registrar: Riffer::Rig::Registrar
269
+ # @rbs return: StandardError?
270
+ def load_extension: (Riffer::Rig::Extension extension, Riffer::Rig::Registrar registrar) -> StandardError?
271
+
272
+ # @rbs extension: Riffer::Rig::Extension
273
+ # @rbs error: StandardError
274
+ # @rbs return: void
275
+ def record_error: (Riffer::Rig::Extension extension, StandardError error) -> void
276
+
277
+ # @rbs registrars: Array[Riffer::Rig::Registrar]
278
+ # @rbs return: Array[String]
279
+ def overrides: (Array[Riffer::Rig::Registrar] registrars) -> Array[String]
280
+
281
+ # @rbs settings: Hash[Symbol, untyped]
282
+ # @rbs return: Hash[Symbol, untyped]
283
+ def with_declared_defaults: (Hash[Symbol, untyped] settings) -> Hash[Symbol, untyped]
284
+
285
+ # @rbs return: Hash[Symbol, Array[^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped]]
286
+ def merge_hooks: (untyped registrars) -> Hash[Symbol, Array[^(Riffer::Rig::Events::_Event | ::Riffer::StreamEvents::Base) -> untyped]]
287
+
288
+ # Upstream candidate: riffer's MCP registry is process-wide and keyed by
289
+ # server name alone, so each Runtime tags its registrations, and two
290
+ # Runtimes declaring the same name replace each other's.
291
+ # @rbs return: Symbol
292
+ def mcp_tag: () -> Symbol
293
+
294
+ # @rbs registrars: Array[Riffer::Rig::Registrar]
295
+ # @rbs return: Hash[String, Riffer::Rig::Mcp::Server]
296
+ def register_mcp_servers: (Array[Riffer::Rig::Registrar] registrars) -> Hash[String, Riffer::Rig::Mcp::Server]
297
+
298
+ # @rbs name: String
299
+ # @rbs declaration: Riffer::Rig::Mcp::Declaration
300
+ # @rbs return: Riffer::Rig::Mcp::Server?
301
+ def register_mcp_server: (String name, Riffer::Rig::Mcp::Declaration declaration) -> Riffer::Rig::Mcp::Server?
302
+
303
+ # A retired registration was replaced under the same name, by another
304
+ # Runtime or a later declaration, and is no longer this Runtime's to remove.
305
+ # @rbs servers: Hash[String, Riffer::Rig::Mcp::Server]
306
+ # @rbs return: void
307
+ def unregister_mcp_servers: (Hash[String, Riffer::Rig::Mcp::Server] servers) -> void
105
308
 
106
309
  # @rbs registered: Array[singleton(Riffer::Tool)]
107
310
  # @rbs allowlist: Array[String]?