riffer-rig 0.4.0 → 0.6.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +37 -0
- data/README.md +43 -6
- data/lib/riffer/rig/cli.rb +51 -47
- data/lib/riffer/rig/coding_agent.rb +1 -6
- data/lib/riffer/rig/credentials/resolution.rb +16 -0
- data/lib/riffer/rig/credentials.rb +151 -60
- data/lib/riffer/rig/env.rb +29 -0
- data/lib/riffer/rig/events/command_output.rb +27 -0
- data/lib/riffer/rig/events/event.rb +30 -0
- data/lib/riffer/rig/events/notify.rb +27 -0
- data/lib/riffer/rig/events/session_end.rb +24 -0
- data/lib/riffer/rig/events/session_start.rb +27 -0
- data/lib/riffer/rig/events/skill_activated.rb +24 -0
- data/lib/riffer/rig/events/turn_end.rb +32 -0
- data/lib/riffer/rig/events.rb +4 -0
- data/lib/riffer/rig/extension.rb +27 -0
- data/lib/riffer/rig/hosts/base.rb +36 -0
- data/lib/riffer/rig/hosts/mirror.rb +60 -0
- data/lib/riffer/rig/hosts/null.rb +36 -0
- data/lib/riffer/rig/provider_setup/field.rb +24 -0
- data/lib/riffer/rig/provider_setup.rb +84 -0
- data/lib/riffer/rig/registrar.rb +35 -0
- data/lib/riffer/rig/repl.rb +42 -31
- data/lib/riffer/rig/runtime/cancel_flag.rb +27 -0
- data/lib/riffer/rig/runtime.rb +225 -0
- data/lib/riffer/rig/settings/document.rb +28 -0
- data/lib/riffer/rig/settings/pricing.rb +11 -1
- data/lib/riffer/rig/settings.rb +49 -60
- data/lib/riffer/rig/token_tally.rb +1 -21
- data/lib/riffer/rig/tools/bash.rb +33 -12
- data/lib/riffer/rig/tools/edit.rb +1 -1
- data/lib/riffer/rig/tools/read.rb +2 -2
- data/lib/riffer/rig/ui/animator.rb +8 -15
- data/lib/riffer/rig/ui/cursor.rb +4 -6
- data/lib/riffer/rig/ui/renderer.rb +18 -31
- data/lib/riffer/rig/ui/smoother.rb +15 -23
- data/lib/riffer/rig/ui/theme.rb +4 -6
- data/lib/riffer/rig/version.rb +1 -1
- data/lib/riffer/rig.rb +26 -0
- data/sig/generated/riffer/rig/cli.rbs +27 -19
- data/sig/generated/riffer/rig/credentials/resolution.rbs +13 -0
- data/sig/generated/riffer/rig/credentials.rbs +71 -41
- data/sig/generated/riffer/rig/env.rbs +20 -0
- data/sig/generated/riffer/rig/events/command_output.rbs +19 -0
- data/sig/generated/riffer/rig/events/event.rbs +20 -0
- data/sig/generated/riffer/rig/events/notify.rbs +19 -0
- data/sig/generated/riffer/rig/events/session_end.rbs +16 -0
- data/sig/generated/riffer/rig/events/session_start.rbs +19 -0
- data/sig/generated/riffer/rig/events/skill_activated.rbs +16 -0
- data/sig/generated/riffer/rig/events/turn_end.rbs +22 -0
- data/sig/generated/riffer/rig/events.rbs +4 -0
- data/sig/generated/riffer/rig/extension.rbs +24 -0
- data/sig/generated/riffer/rig/hosts/base.rbs +26 -0
- data/sig/generated/riffer/rig/hosts/mirror.rbs +41 -0
- data/sig/generated/riffer/rig/hosts/null.rbs +26 -0
- data/sig/generated/riffer/rig/provider_setup/field.rbs +22 -0
- data/sig/generated/riffer/rig/provider_setup.rbs +30 -0
- data/sig/generated/riffer/rig/registrar.rbs +25 -0
- data/sig/generated/riffer/rig/repl.rbs +17 -16
- data/sig/generated/riffer/rig/runtime/cancel_flag.rbs +19 -0
- data/sig/generated/riffer/rig/runtime.rbs +120 -0
- data/sig/generated/riffer/rig/settings/document.rbs +24 -0
- data/sig/generated/riffer/rig/settings/pricing.rbs +4 -1
- data/sig/generated/riffer/rig/settings.rbs +28 -49
- data/sig/generated/riffer/rig/token_tally.rbs +2 -21
- data/sig/generated/riffer/rig/tools/bash.rbs +15 -3
- data/sig/generated/riffer/rig/tools/edit.rbs +2 -2
- data/sig/generated/riffer/rig/tools/read.rbs +3 -3
- data/sig/generated/riffer/rig/ui/animator.rbs +8 -16
- data/sig/generated/riffer/rig/ui/cursor.rbs +4 -6
- data/sig/generated/riffer/rig/ui/renderer.rbs +13 -35
- data/sig/generated/riffer/rig/ui/smoother.rbs +9 -22
- data/sig/generated/riffer/rig/ui/theme.rbs +3 -5
- data/sig/generated/riffer/rig.rbs +12 -0
- data/sig/manual/riffer/rig/cli.rbs +2 -4
- data/sig/manual/riffer/rig/credentials.rbs +2 -4
- data/sig/manual/riffer/rig/hosts.rbs +5 -0
- data/sig/manual/riffer/rig/settings.rbs +2 -4
- data/sig/manual/riffer/rig/ui/banner.rbs +2 -4
- data/sig/manual/riffer/rig.rbs +11 -0
- metadata +45 -3
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/events/turn_end.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::Events::TurnEnd < Riffer::Rig::Events::Event
|
|
4
|
+
# @dynamic stop_reason, usage
|
|
5
|
+
attr_reader stop_reason: Symbol
|
|
6
|
+
|
|
7
|
+
attr_reader usage: ::Riffer::Providers::TokenUsage?
|
|
8
|
+
|
|
9
|
+
# @rbs stop_reason: Symbol
|
|
10
|
+
# @rbs usage: ::Riffer::Providers::TokenUsage?
|
|
11
|
+
# @rbs return: void
|
|
12
|
+
def initialize: (Symbol stop_reason, ::Riffer::Providers::TokenUsage? usage) -> void
|
|
13
|
+
|
|
14
|
+
# @rbs return: Float?
|
|
15
|
+
def cost: () -> Float?
|
|
16
|
+
|
|
17
|
+
# @rbs return: Symbol
|
|
18
|
+
def type: () -> Symbol
|
|
19
|
+
|
|
20
|
+
# @rbs return: Hash[Symbol, untyped]
|
|
21
|
+
def to_h: () -> Hash[Symbol, untyped]
|
|
22
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/extension.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::Extension
|
|
4
|
+
@name: String
|
|
5
|
+
|
|
6
|
+
@requires: Gem::Requirement?
|
|
7
|
+
|
|
8
|
+
@block: ^(::Riffer::Rig::Registrar) -> void
|
|
9
|
+
|
|
10
|
+
# @dynamic name, requires
|
|
11
|
+
attr_reader name: String
|
|
12
|
+
|
|
13
|
+
attr_reader requires: Gem::Requirement?
|
|
14
|
+
|
|
15
|
+
# @rbs name: String
|
|
16
|
+
# @rbs requires: String?
|
|
17
|
+
# @rbs &block: (::Riffer::Rig::Registrar) -> void
|
|
18
|
+
# @rbs return: void
|
|
19
|
+
def initialize: (String name, ?requires: String?) { (::Riffer::Rig::Registrar) -> void } -> void
|
|
20
|
+
|
|
21
|
+
# @rbs registrar: Riffer::Rig::Registrar
|
|
22
|
+
# @rbs return: void
|
|
23
|
+
def run: (Riffer::Rig::Registrar registrar) -> void
|
|
24
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/hosts/base.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::Hosts::Base
|
|
4
|
+
# @rbs return: Set[Symbol]
|
|
5
|
+
def capabilities: () -> Set[Symbol]
|
|
6
|
+
|
|
7
|
+
# @rbs question: String?
|
|
8
|
+
# @rbs options: Array[String]?
|
|
9
|
+
# @rbs secret: bool
|
|
10
|
+
# @rbs return: String?
|
|
11
|
+
def ask: (?String? question, ?options: Array[String]?, ?secret: bool) -> String?
|
|
12
|
+
|
|
13
|
+
# @rbs question: String?
|
|
14
|
+
# @rbs return: bool
|
|
15
|
+
def confirm: (?String? question) -> bool
|
|
16
|
+
|
|
17
|
+
# @rbs message: String?
|
|
18
|
+
# @rbs level: Symbol
|
|
19
|
+
# @rbs return: void
|
|
20
|
+
def notify: (?String? message, ?level: Symbol) -> void
|
|
21
|
+
|
|
22
|
+
# @rbs label: String?
|
|
23
|
+
# @rbs &: ? () -> void
|
|
24
|
+
# @rbs return: void
|
|
25
|
+
def progress: (?String? label) ?{ () -> void } -> void
|
|
26
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/hosts/mirror.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::Hosts::Mirror < Riffer::Rig::Hosts::Base
|
|
4
|
+
@host: Riffer::Rig::Hosts::Base
|
|
5
|
+
|
|
6
|
+
@queue: Array[Riffer::Rig::Events::Event]
|
|
7
|
+
|
|
8
|
+
# @dynamic capabilities
|
|
9
|
+
attr_reader capabilities: Set[Symbol]
|
|
10
|
+
|
|
11
|
+
# @rbs host: Riffer::Rig::Hosts::Base
|
|
12
|
+
# @rbs return: void
|
|
13
|
+
def initialize: (Riffer::Rig::Hosts::Base host) -> void
|
|
14
|
+
|
|
15
|
+
# @rbs question: String?
|
|
16
|
+
# @rbs options: Array[String]?
|
|
17
|
+
# @rbs secret: bool
|
|
18
|
+
# @rbs return: String?
|
|
19
|
+
def ask: (?String? question, ?options: Array[String]?, ?secret: bool) -> String?
|
|
20
|
+
|
|
21
|
+
# @rbs question: String?
|
|
22
|
+
# @rbs return: bool
|
|
23
|
+
def confirm: (?String? question) -> bool
|
|
24
|
+
|
|
25
|
+
# @rbs message: String?
|
|
26
|
+
# @rbs level: Symbol
|
|
27
|
+
# @rbs return: void
|
|
28
|
+
def notify: (?String? message, ?level: Symbol) -> void
|
|
29
|
+
|
|
30
|
+
# @rbs label: String?
|
|
31
|
+
# @rbs &block: ? () -> void
|
|
32
|
+
# @rbs return: void
|
|
33
|
+
def progress: (?String? label) ?{ () -> void } -> void
|
|
34
|
+
|
|
35
|
+
# @rbs event: Riffer::Rig::Events::Event
|
|
36
|
+
# @rbs return: void
|
|
37
|
+
def queue: (Riffer::Rig::Events::Event event) -> void
|
|
38
|
+
|
|
39
|
+
# @rbs return: Array[Riffer::Rig::Events::Event]
|
|
40
|
+
def drain: () -> Array[Riffer::Rig::Events::Event]
|
|
41
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/hosts/null.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::Hosts::Null < Riffer::Rig::Hosts::Base
|
|
4
|
+
# @rbs return: Set[Symbol]
|
|
5
|
+
def capabilities: () -> Set[Symbol]
|
|
6
|
+
|
|
7
|
+
# @rbs question: String?
|
|
8
|
+
# @rbs options: Array[String]?
|
|
9
|
+
# @rbs secret: bool
|
|
10
|
+
# @rbs return: String?
|
|
11
|
+
def ask: (?String? question, ?options: Array[String]?, ?secret: bool) -> String?
|
|
12
|
+
|
|
13
|
+
# @rbs question: String?
|
|
14
|
+
# @rbs return: bool
|
|
15
|
+
def confirm: (?String? question) -> bool
|
|
16
|
+
|
|
17
|
+
# @rbs message: String?
|
|
18
|
+
# @rbs level: Symbol
|
|
19
|
+
# @rbs return: void
|
|
20
|
+
def notify: (?String? message, ?level: Symbol) -> void
|
|
21
|
+
|
|
22
|
+
# @rbs label: String?
|
|
23
|
+
# @rbs &block: ? () -> void
|
|
24
|
+
# @rbs return: void
|
|
25
|
+
def progress: (?String? label) ?{ () -> void } -> void
|
|
26
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/provider_setup/field.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::ProviderSetup::Field
|
|
4
|
+
# @dynamic name, env, secret, required, fallback
|
|
5
|
+
attr_reader name: Symbol
|
|
6
|
+
|
|
7
|
+
attr_reader env: Array[String]
|
|
8
|
+
|
|
9
|
+
attr_reader secret: bool
|
|
10
|
+
|
|
11
|
+
attr_reader required: bool
|
|
12
|
+
|
|
13
|
+
attr_reader fallback: (^() -> String?)?
|
|
14
|
+
|
|
15
|
+
# @rbs name: Symbol
|
|
16
|
+
# @rbs env: Array[String]
|
|
17
|
+
# @rbs secret: bool
|
|
18
|
+
# @rbs required: bool
|
|
19
|
+
# @rbs fallback: (^() -> String?)?
|
|
20
|
+
# @rbs return: void
|
|
21
|
+
def initialize: (name: Symbol, env: Array[String], secret: bool, required: bool, ?fallback: (^() -> String?)?) -> void
|
|
22
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/provider_setup.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::ProviderSetup
|
|
4
|
+
# @dynamic url, chain, fields
|
|
5
|
+
attr_reader url: String?
|
|
6
|
+
|
|
7
|
+
attr_reader chain: bool
|
|
8
|
+
|
|
9
|
+
attr_reader fields: Array[Riffer::Rig::ProviderSetup::Field]
|
|
10
|
+
|
|
11
|
+
# @rbs fields: Array[Riffer::Rig::ProviderSetup::Field]
|
|
12
|
+
# @rbs url: String?
|
|
13
|
+
# @rbs chain: bool
|
|
14
|
+
# @rbs return: void
|
|
15
|
+
def initialize: (fields: Array[Riffer::Rig::ProviderSetup::Field], ?url: String?, ?chain: bool) -> void
|
|
16
|
+
|
|
17
|
+
AWS_SHARED_CONFIG_REGION: ^() -> String?
|
|
18
|
+
|
|
19
|
+
# Upstream candidate: each riffer provider could declare its own credential
|
|
20
|
+
# fields, and this table would go.
|
|
21
|
+
TABLE: Hash[Symbol, Riffer::Rig::ProviderSetup]
|
|
22
|
+
|
|
23
|
+
# @rbs identifier: String | Symbol
|
|
24
|
+
# @rbs return: Riffer::Rig::ProviderSetup?
|
|
25
|
+
def self.[]: (String | Symbol identifier) -> Riffer::Rig::ProviderSetup?
|
|
26
|
+
|
|
27
|
+
# @rbs identifier: String | Symbol
|
|
28
|
+
# @rbs return: Riffer::Rig::ProviderSetup
|
|
29
|
+
def self.for: (String | Symbol identifier) -> Riffer::Rig::ProviderSetup
|
|
30
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/registrar.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::Registrar
|
|
4
|
+
@tools: Array[singleton(Riffer::Tool)]
|
|
5
|
+
|
|
6
|
+
@prompts: Hash[Symbol, ^(Riffer::Rig::Runtime) -> String?]
|
|
7
|
+
|
|
8
|
+
# @rbs return: void
|
|
9
|
+
def initialize: () -> void
|
|
10
|
+
|
|
11
|
+
# @rbs klass: singleton(Riffer::Tool)
|
|
12
|
+
# @rbs return: void
|
|
13
|
+
def tool: (singleton(Riffer::Tool) klass) -> void
|
|
14
|
+
|
|
15
|
+
# @rbs name: Symbol
|
|
16
|
+
# @rbs &block: (Riffer::Rig::Runtime) -> String?
|
|
17
|
+
# @rbs return: void
|
|
18
|
+
def prompt: (Symbol name) { (Riffer::Rig::Runtime) -> String? } -> void
|
|
19
|
+
|
|
20
|
+
# @rbs return: Array[singleton(Riffer::Tool)]
|
|
21
|
+
def tools: () -> Array[singleton(Riffer::Tool)]
|
|
22
|
+
|
|
23
|
+
# @rbs return: Hash[Symbol, ^(Riffer::Rig::Runtime) -> String?]
|
|
24
|
+
def prompts: () -> Hash[Symbol, ^(Riffer::Rig::Runtime) -> String?]
|
|
25
|
+
end
|
|
@@ -5,9 +5,9 @@ class Riffer::Rig::REPL
|
|
|
5
5
|
|
|
6
6
|
SKILL_COMMAND: Regexp
|
|
7
7
|
|
|
8
|
-
@output:
|
|
8
|
+
@output: IO
|
|
9
9
|
|
|
10
|
-
@input:
|
|
10
|
+
@input: IO
|
|
11
11
|
|
|
12
12
|
@theme: Riffer::Rig::UI::Theme
|
|
13
13
|
|
|
@@ -21,16 +21,16 @@ class Riffer::Rig::REPL
|
|
|
21
21
|
|
|
22
22
|
@agent: Riffer::Agent
|
|
23
23
|
|
|
24
|
-
# @rbs
|
|
25
|
-
# @rbs
|
|
26
|
-
# @rbs input:
|
|
27
|
-
# @rbs output:
|
|
28
|
-
# @rbs
|
|
29
|
-
# @rbs
|
|
30
|
-
# @rbs
|
|
31
|
-
# @rbs
|
|
24
|
+
# @rbs agent: Riffer::Agent
|
|
25
|
+
# @rbs renderer: Riffer::Rig::UI::Renderer
|
|
26
|
+
# @rbs input: IO
|
|
27
|
+
# @rbs output: IO
|
|
28
|
+
# @rbs theme: Riffer::Rig::UI::Theme
|
|
29
|
+
# @rbs animator: Riffer::Rig::UI::Animator
|
|
30
|
+
# @rbs smoother: Riffer::Rig::UI::Smoother
|
|
31
|
+
# @rbs cursor: Riffer::Rig::UI::Cursor
|
|
32
32
|
# @rbs return: void
|
|
33
|
-
def initialize: (agent:
|
|
33
|
+
def initialize: (agent: Riffer::Agent, renderer: Riffer::Rig::UI::Renderer, ?input: IO, ?output: IO, ?theme: Riffer::Rig::UI::Theme, ?animator: Riffer::Rig::UI::Animator, ?smoother: Riffer::Rig::UI::Smoother, ?cursor: Riffer::Rig::UI::Cursor) -> void
|
|
34
34
|
|
|
35
35
|
# @rbs return: Symbol
|
|
36
36
|
def run: () -> Symbol
|
|
@@ -55,14 +55,15 @@ class Riffer::Rig::REPL
|
|
|
55
55
|
# @rbs return: String
|
|
56
56
|
def skill_block: (String name, String body) -> String
|
|
57
57
|
|
|
58
|
-
#
|
|
59
|
-
# their line with a newline but leave the renderer's tool-group state alone —
|
|
60
|
-
# they can only follow prose, never mid-group.
|
|
61
|
-
#
|
|
58
|
+
# @rbs &block: () -> String
|
|
62
59
|
# @rbs return: void
|
|
63
|
-
def print_block: ()
|
|
60
|
+
def print_block: () { () -> String } -> void
|
|
64
61
|
|
|
65
62
|
# @rbs message: Riffer::Messages::Base
|
|
66
63
|
# @rbs return: void
|
|
67
64
|
def render_tool_result: (Riffer::Messages::Base message) -> void
|
|
65
|
+
|
|
66
|
+
# @rbs mode: Symbol
|
|
67
|
+
# @rbs return: void
|
|
68
|
+
def start_animator: (?Symbol mode) -> void
|
|
68
69
|
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/runtime/cancel_flag.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::Runtime::CancelFlag
|
|
4
|
+
@mutex: Thread::Mutex
|
|
5
|
+
|
|
6
|
+
@set: bool
|
|
7
|
+
|
|
8
|
+
# @rbs return: void
|
|
9
|
+
def initialize: () -> void
|
|
10
|
+
|
|
11
|
+
# @rbs return: void
|
|
12
|
+
def set: () -> void
|
|
13
|
+
|
|
14
|
+
# @rbs return: void
|
|
15
|
+
def clear: () -> void
|
|
16
|
+
|
|
17
|
+
# @rbs return: bool
|
|
18
|
+
def set?: () -> bool
|
|
19
|
+
end
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/runtime.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
# Never renders, prints or reads the filesystem: anything a host needs is a
|
|
4
|
+
# Runtime feature, so embedders get it too.
|
|
5
|
+
class Riffer::Rig::Runtime
|
|
6
|
+
class BusyError < StandardError
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
class ClosedError < StandardError
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
BASE_PROMPT_TEMPLATE: ::String
|
|
13
|
+
|
|
14
|
+
DEFAULT_NAME: ::String
|
|
15
|
+
|
|
16
|
+
# Unlimited: riffer's own default (16) is too small for a general-purpose
|
|
17
|
+
# harness.
|
|
18
|
+
DEFAULT_MAX_STEPS: Integer?
|
|
19
|
+
|
|
20
|
+
INTERRUPT_CANCELLED: Symbol
|
|
21
|
+
|
|
22
|
+
@agent: Riffer::Agent
|
|
23
|
+
|
|
24
|
+
@base_prompt: String
|
|
25
|
+
|
|
26
|
+
@cancel_flag: Riffer::Rig::Runtime::CancelFlag
|
|
27
|
+
|
|
28
|
+
@credentials: Hash[Symbol, Hash[Symbol, String]]
|
|
29
|
+
|
|
30
|
+
@cwd: String
|
|
31
|
+
|
|
32
|
+
@host: Riffer::Rig::Hosts::Mirror
|
|
33
|
+
|
|
34
|
+
@id: String
|
|
35
|
+
|
|
36
|
+
@settings: Hash[Symbol, untyped]
|
|
37
|
+
|
|
38
|
+
@busy: bool
|
|
39
|
+
|
|
40
|
+
@closed: bool
|
|
41
|
+
|
|
42
|
+
@session_start_pending: bool
|
|
43
|
+
|
|
44
|
+
@registrar: Riffer::Rig::Registrar
|
|
45
|
+
|
|
46
|
+
# @dynamic agent, credentials, cwd, host, id, settings
|
|
47
|
+
attr_reader agent: Riffer::Agent
|
|
48
|
+
|
|
49
|
+
attr_reader credentials: Hash[Symbol, Hash[Symbol, String]]
|
|
50
|
+
|
|
51
|
+
attr_reader cwd: String
|
|
52
|
+
|
|
53
|
+
attr_reader host: Riffer::Rig::Hosts::Mirror
|
|
54
|
+
|
|
55
|
+
attr_reader id: String
|
|
56
|
+
|
|
57
|
+
attr_reader settings: Hash[Symbol, untyped]
|
|
58
|
+
|
|
59
|
+
# @rbs model: String
|
|
60
|
+
# @rbs extensions: Array[Riffer::Rig::Extension]
|
|
61
|
+
# @rbs tools: Array[String]?
|
|
62
|
+
# @rbs settings: Hash[Symbol, untyped]
|
|
63
|
+
# @rbs host: Riffer::Rig::Hosts::Base
|
|
64
|
+
# @rbs cwd: String?
|
|
65
|
+
# @rbs name: String
|
|
66
|
+
# @rbs instructions: String?
|
|
67
|
+
# @rbs credentials: Hash[Symbol, Hash[Symbol, String]]
|
|
68
|
+
# @rbs pricing: Hash[String, Riffer::Rig::Settings::Pricing]
|
|
69
|
+
# @rbs max_steps: Integer?
|
|
70
|
+
# @rbs snapshot: Hash[Symbol, untyped]?
|
|
71
|
+
# @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
|
|
73
|
+
|
|
74
|
+
# @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])
|
|
78
|
+
|
|
79
|
+
# @rbs text: String
|
|
80
|
+
# @rbs return: Riffer::Agent::Response
|
|
81
|
+
def ask: (String text) -> Riffer::Agent::Response
|
|
82
|
+
|
|
83
|
+
# @rbs return: nil
|
|
84
|
+
def cancel: () -> nil
|
|
85
|
+
|
|
86
|
+
# @rbs return: void
|
|
87
|
+
def close: () -> void
|
|
88
|
+
|
|
89
|
+
private
|
|
90
|
+
|
|
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]
|
|
94
|
+
|
|
95
|
+
# @rbs return: void
|
|
96
|
+
def interrupt_if_cancelled: () -> void
|
|
97
|
+
|
|
98
|
+
# @rbs outcome: Riffer::Agent::Outcome
|
|
99
|
+
# @rbs return: Symbol
|
|
100
|
+
def stop_reason: (Riffer::Agent::Outcome outcome) -> Symbol
|
|
101
|
+
|
|
102
|
+
# @rbs extensions: Array[Riffer::Rig::Extension]
|
|
103
|
+
# @rbs return: Riffer::Rig::Registrar
|
|
104
|
+
def build_registrar: (Array[Riffer::Rig::Extension] extensions) -> Riffer::Rig::Registrar
|
|
105
|
+
|
|
106
|
+
# @rbs registered: Array[singleton(Riffer::Tool)]
|
|
107
|
+
# @rbs allowlist: Array[String]?
|
|
108
|
+
# @rbs return: Array[singleton(Riffer::Tool)]
|
|
109
|
+
def select_tools: (Array[singleton(Riffer::Tool)] registered, Array[String]? allowlist) -> Array[singleton(Riffer::Tool)]
|
|
110
|
+
|
|
111
|
+
# @rbs return: void
|
|
112
|
+
def refresh_system_message: () -> void
|
|
113
|
+
|
|
114
|
+
# @rbs return: Array[String]
|
|
115
|
+
def rendered_sections: () -> Array[String]
|
|
116
|
+
|
|
117
|
+
# @rbs sections: Array[String]
|
|
118
|
+
# @rbs return: String
|
|
119
|
+
def system_prompt: (Array[String] sections) -> String
|
|
120
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated from lib/riffer/rig/settings/document.rb with RBS::Inline
|
|
2
|
+
|
|
3
|
+
class Riffer::Rig::Settings::Document
|
|
4
|
+
@model: String?
|
|
5
|
+
|
|
6
|
+
@reasoning: String?
|
|
7
|
+
|
|
8
|
+
@models: Hash[String, Riffer::Rig::Settings::Pricing]
|
|
9
|
+
|
|
10
|
+
@providers: Hash[String, Hash[String, String]]
|
|
11
|
+
|
|
12
|
+
# @dynamic model, reasoning, models, providers
|
|
13
|
+
attr_reader model: String?
|
|
14
|
+
|
|
15
|
+
attr_reader reasoning: String?
|
|
16
|
+
|
|
17
|
+
attr_reader models: Hash[String, Riffer::Rig::Settings::Pricing]
|
|
18
|
+
|
|
19
|
+
attr_reader providers: Hash[String, Hash[String, String]]
|
|
20
|
+
|
|
21
|
+
# @rbs source: untyped
|
|
22
|
+
# @rbs return: void
|
|
23
|
+
def initialize: (untyped source) -> void
|
|
24
|
+
end
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/rig/settings/pricing.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# USD per million tokens, parsed from a model's entry in the settings file.
|
|
4
3
|
class Riffer::Rig::Settings::Pricing
|
|
5
4
|
# @dynamic input, output, cache_write, cache_read
|
|
6
5
|
attr_reader input: Float
|
|
@@ -14,6 +13,10 @@ class Riffer::Rig::Settings::Pricing
|
|
|
14
13
|
# @dynamic input, output, cache_write, cache_read
|
|
15
14
|
attr_reader cache_read: Float
|
|
16
15
|
|
|
16
|
+
# @rbs entry: Hash[String, untyped]
|
|
17
|
+
# @rbs return: ::Riffer::Rig::Settings::Pricing
|
|
18
|
+
def self.from: (Hash[String, untyped] entry) -> ::Riffer::Rig::Settings::Pricing
|
|
19
|
+
|
|
17
20
|
# @rbs input: Float
|
|
18
21
|
# @rbs output: Float
|
|
19
22
|
# @rbs cache_write: Float
|
|
@@ -1,34 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/rig/settings.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Reads and writes the riffer-rig user settings file at
|
|
4
|
-
# <tt>~/.riffer/settings.json</tt>.
|
|
5
|
-
#
|
|
6
|
-
# Example file:
|
|
7
|
-
#
|
|
8
|
-
# {
|
|
9
|
-
# "model": "anthropic/claude-sonnet-4-6",
|
|
10
|
-
# "reasoning": "low",
|
|
11
|
-
# "models": {
|
|
12
|
-
# "anthropic/claude-sonnet-4-6": {
|
|
13
|
-
# "input": 3.0,
|
|
14
|
-
# "output": 15.0,
|
|
15
|
-
# "cache_write": 3.75,
|
|
16
|
-
# "cache_read": 0.3
|
|
17
|
-
# }
|
|
18
|
-
# }
|
|
19
|
-
# }
|
|
20
|
-
#
|
|
21
|
-
# All keys are optional. Missing pricing means cost display is suppressed.
|
|
22
|
-
# <tt>"reasoning"</tt> is translated to the appropriate provider-specific
|
|
23
|
-
# parameter on each API call; accepted values depend on the provider:
|
|
24
|
-
#
|
|
25
|
-
# - Anthropic: <tt>"low"</tt>, <tt>"medium"</tt>, <tt>"high"</tt>,
|
|
26
|
-
# <tt>"xhigh"</tt>, <tt>"max"</tt>
|
|
27
|
-
# - OpenAI / OpenRouter: <tt>"low"</tt>, <tt>"medium"</tt>, <tt>"high"</tt>,
|
|
28
|
-
# <tt>"xhigh"</tt>
|
|
29
|
-
#
|
|
30
|
-
# Omitting the key (or supplying an unrecognised value) leaves the model's
|
|
31
|
-
# default reasoning behaviour unchanged.
|
|
32
3
|
module Riffer::Rig::Settings
|
|
33
4
|
PATH: String
|
|
34
5
|
|
|
@@ -36,57 +7,65 @@ module Riffer::Rig::Settings
|
|
|
36
7
|
|
|
37
8
|
REASONING_LEVELS_BY_PROVIDER: Hash[String, Array[String]]
|
|
38
9
|
|
|
39
|
-
# Returns the configured model string, or +DEFAULT_MODEL+ if not set.
|
|
40
|
-
#
|
|
41
10
|
# @rbs path: String
|
|
42
11
|
# @rbs return: String
|
|
43
12
|
def model: (?path: String) -> String
|
|
44
13
|
|
|
45
|
-
# Returns model options for the configured model and reasoning level, ready
|
|
46
|
-
# to pass directly to the Riffer agent's +model_options+.
|
|
47
|
-
#
|
|
48
14
|
# @rbs path: String
|
|
49
15
|
# @rbs return: Hash[Symbol, untyped]
|
|
50
16
|
def model_options: (?path: String) -> Hash[Symbol, untyped]
|
|
51
17
|
|
|
52
|
-
# Returns the provider prefix for +model_string+, e.g. <tt>"anthropic"</tt>
|
|
53
|
-
# for <tt>"anthropic/claude-sonnet-4-6"</tt>. Returns +nil+ if the model
|
|
54
|
-
# string contains no slash.
|
|
55
|
-
#
|
|
56
18
|
# @rbs model_string: String
|
|
57
19
|
# @rbs return: String?
|
|
58
20
|
def provider_for: (String model_string) -> String?
|
|
59
21
|
|
|
60
|
-
# Returns the pricing for +model+, or +nil+ if not configured.
|
|
61
|
-
#
|
|
62
22
|
# @rbs model: String
|
|
63
23
|
# @rbs path: String
|
|
64
24
|
# @rbs return: Pricing?
|
|
65
25
|
def pricing_for: (String model, ?path: String) -> Pricing?
|
|
66
26
|
|
|
27
|
+
# @rbs identifier: String
|
|
28
|
+
# @rbs path: String
|
|
29
|
+
# @rbs return: Hash[String, String]
|
|
30
|
+
def provider_fields: (String identifier, ?path: String) -> Hash[String, String]
|
|
31
|
+
|
|
32
|
+
# @rbs identifier: String
|
|
33
|
+
# @rbs fields: Hash[String, String]
|
|
34
|
+
# @rbs path: String
|
|
35
|
+
# @rbs return: void
|
|
36
|
+
def store_provider: (String identifier, Hash[String, String] fields, ?path: String) -> void
|
|
37
|
+
|
|
38
|
+
# @rbs identifier: String
|
|
39
|
+
# @rbs path: String
|
|
40
|
+
# @rbs return: void
|
|
41
|
+
def remove_provider: (String identifier, ?path: String) -> void
|
|
42
|
+
|
|
67
43
|
private
|
|
68
44
|
|
|
45
|
+
# @rbs path: String
|
|
46
|
+
# @rbs &: (Hash[String, Hash[String, String]]) -> Hash[String, Hash[String, String]]
|
|
47
|
+
# @rbs return: void
|
|
48
|
+
def update_providers: (String path) { (Hash[String, Hash[String, String]]) -> Hash[String, Hash[String, String]] } -> void
|
|
49
|
+
|
|
69
50
|
# @rbs provider: String?
|
|
70
51
|
# @rbs return: Hash[Symbol, untyped]
|
|
71
52
|
def base_options: (String? provider) -> Hash[Symbol, untyped]
|
|
72
53
|
|
|
73
54
|
# @rbs path: String
|
|
74
|
-
# @rbs
|
|
55
|
+
# @rbs provider: String?
|
|
75
56
|
# @rbs return: String?
|
|
76
|
-
def reasoning_for: (?path: String, ?provider:
|
|
57
|
+
def reasoning_for: (?path: String, ?provider: String?) -> String?
|
|
77
58
|
|
|
78
|
-
# Maps a reasoning level to the provider-specific model option hash expected
|
|
79
|
-
# by Riffer. Returns an empty hash when +level+ is +nil+.
|
|
80
|
-
#
|
|
81
59
|
# @rbs level: String?
|
|
82
60
|
# @rbs provider: String?
|
|
83
61
|
# @rbs return: Hash[Symbol, untyped]
|
|
84
62
|
def reasoning_options: (String? level, String? provider) -> Hash[Symbol, untyped]
|
|
85
63
|
|
|
86
|
-
#
|
|
87
|
-
#
|
|
88
|
-
|
|
64
|
+
# @rbs path: String
|
|
65
|
+
# @rbs return: Document
|
|
66
|
+
def read: (String path) -> Document
|
|
67
|
+
|
|
89
68
|
# @rbs path: String
|
|
90
69
|
# @rbs return: Hash[String, untyped]
|
|
91
|
-
def
|
|
70
|
+
def read_source: (String path) -> Hash[String, untyped]
|
|
92
71
|
end
|
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
# Generated from lib/riffer/rig/token_tally.rb with RBS::Inline
|
|
2
2
|
|
|
3
|
-
# Accumulates token usage across multiple turns in a session and computes an
|
|
4
|
-
# estimated cost based on a pricing object sourced from
|
|
5
|
-
# +Riffer::Rig::Settings+.
|
|
6
|
-
#
|
|
7
|
-
# Instantiate once per REPL session, call +add+ after each turn, then read
|
|
8
|
-
# +total_tokens+ and +estimated_cost+ for display.
|
|
9
|
-
#
|
|
10
|
-
# pricing = Riffer::Rig::Settings.pricing_for('anthropic/claude-sonnet-4-6')
|
|
11
|
-
# tally = Riffer::Rig::TokenTally.new(pricing: pricing)
|
|
12
|
-
# tally.add(usage)
|
|
13
|
-
# tally.estimated_cost # => 0.000042 (USD), or nil if pricing is nil
|
|
14
3
|
class Riffer::Rig::TokenTally
|
|
15
4
|
@input_tokens: Integer
|
|
16
5
|
|
|
@@ -34,28 +23,20 @@ class Riffer::Rig::TokenTally
|
|
|
34
23
|
# @dynamic input_tokens, output_tokens, cache_write_tokens, cache_read_tokens
|
|
35
24
|
attr_reader cache_read_tokens: untyped
|
|
36
25
|
|
|
37
|
-
# @rbs
|
|
26
|
+
# @rbs pricing: Riffer::Rig::Settings::Pricing?
|
|
38
27
|
# @rbs return: void
|
|
39
|
-
def initialize: (?pricing:
|
|
28
|
+
def initialize: (?pricing: Riffer::Rig::Settings::Pricing?) -> void
|
|
40
29
|
|
|
41
|
-
# Accumulates token counts from a +Riffer::Providers::TokenUsage+ object.
|
|
42
|
-
#
|
|
43
30
|
# @rbs usage: Riffer::Providers::TokenUsage
|
|
44
31
|
# @rbs return: void
|
|
45
32
|
def add: (Riffer::Providers::TokenUsage usage) -> void
|
|
46
33
|
|
|
47
|
-
# Returns the total token count across all categories.
|
|
48
|
-
#
|
|
49
34
|
# @rbs return: Integer
|
|
50
35
|
def total_tokens: () -> Integer
|
|
51
36
|
|
|
52
|
-
# Returns +true+ if any tokens have been counted.
|
|
53
|
-
#
|
|
54
37
|
# @rbs return: bool
|
|
55
38
|
def any?: () -> bool
|
|
56
39
|
|
|
57
|
-
# Returns the estimated cost in USD, or +nil+ if no pricing was provided.
|
|
58
|
-
#
|
|
59
40
|
# @rbs return: Float?
|
|
60
41
|
def estimated_cost: () -> Float?
|
|
61
42
|
end
|
|
@@ -5,18 +5,30 @@ class Riffer::Rig::Tools::Bash < Riffer::Tool
|
|
|
5
5
|
|
|
6
6
|
MAX_OUTPUT_BYTES: Integer
|
|
7
7
|
|
|
8
|
+
POLL_SECONDS: Float
|
|
9
|
+
|
|
8
10
|
# @rbs context: Riffer::Agent::Context?
|
|
9
11
|
# @rbs command: String
|
|
10
|
-
# @rbs
|
|
12
|
+
# @rbs timeout_ms: Integer
|
|
11
13
|
# @rbs return: Riffer::Tools::Response
|
|
12
|
-
def call: (context: Riffer::Agent::Context?, command: String, ?timeout_ms:
|
|
14
|
+
def call: (context: Riffer::Agent::Context?, command: String, ?timeout_ms: Integer) -> Riffer::Tools::Response
|
|
13
15
|
|
|
14
16
|
private
|
|
15
17
|
|
|
16
18
|
# @rbs command: String
|
|
17
19
|
# @rbs timeout_seconds: Float
|
|
20
|
+
# @rbs cancel_flag: Riffer::Rig::Runtime::CancelFlag?
|
|
18
21
|
# @rbs return: [String, Integer]
|
|
19
|
-
def run: (String command, Float timeout_seconds) -> [ String, Integer ]
|
|
22
|
+
def run: (String command, Float timeout_seconds, Riffer::Rig::Runtime::CancelFlag? cancel_flag) -> [ String, Integer ]
|
|
23
|
+
|
|
24
|
+
# @rbs wait_thread: Process::Waiter
|
|
25
|
+
# @rbs deadline: Float
|
|
26
|
+
# @rbs cancel_flag: Riffer::Rig::Runtime::CancelFlag?
|
|
27
|
+
# @rbs return: Symbol
|
|
28
|
+
def await: (Process::Waiter wait_thread, Float deadline, Riffer::Rig::Runtime::CancelFlag? cancel_flag) -> Symbol
|
|
29
|
+
|
|
30
|
+
# @rbs return: Float
|
|
31
|
+
def monotonic_now: () -> Float
|
|
20
32
|
|
|
21
33
|
# @rbs pid: Integer
|
|
22
34
|
# @rbs return: Integer
|